From de5fabf64c768ad45e20739c6a0e2654c8ae7667 Mon Sep 17 00:00:00 2001 From: notabd7-deepshard Date: Wed, 28 Jan 2026 18:05:36 -0800 Subject: [PATCH 01/15] connection works, can get command executions back --- .gitignore | 3 +- genesis/__init__.py | 8 +-- genesis/client.py | 150 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 155 insertions(+), 6 deletions(-) create mode 100644 genesis/client.py diff --git a/.gitignore b/.gitignore index 56bd224..3b4ab82 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .venv/ truffle/ -*.egg-info \ No newline at end of file +*.egg-info +__pycache__/ \ No newline at end of file diff --git a/genesis/__init__.py b/genesis/__init__.py index 42455e8..69e80ba 100644 --- a/genesis/__init__.py +++ b/genesis/__init__.py @@ -1,10 +1,8 @@ -""" -Genesis - TruffleOS SDK -connect, build, upload, execute -""" try: from ._version import __version__ except ImportError: __version__ = "0.1.dev0" -__all__ = ["__version__"] +from .client import TruffleClient, ExecResult + +__all__ = ["__version__", "TruffleClient", "ExecResult"] diff --git a/genesis/client.py b/genesis/client.py new file mode 100644 index 0000000..74a5d94 --- /dev/null +++ b/genesis/client.py @@ -0,0 +1,150 @@ +import grpc +import httpx +import json +import time +from dataclasses import dataclass +from typing import Iterator +from truffle.os.truffleos_pb2_grpc import TruffleOSStub +from truffle.os.builder_pb2 import ( + StartBuildSessionRequest, + StartBuildSessionResponse, + FinishBuildSessionRequest, + FinishBuildSessionResponse, +) +from truffle.app.app_type_pb2 import AppType + + +@dataclass +class ExecResult: + exit_code: int + output: list[str] + + +class TruffleClient: + def __init__(self, address: str, token: str): + self.address = address + self.token = token + self.channel: grpc.Channel | None = None + self.stub: TruffleOSStub | None = None + self.app_uuid: str | None = None + self.access_path: str | None = None + + @property + def http_base(self) -> str | None: + if not self.access_path: + return None + host = self.address if "://" in self.address else f"http://{self.address}" + return f"{host}/containers/{self.access_path}" + + @property + def _metadata(self) -> list: + return [("session", self.token)] + + def connect(self, timeout: float = 15.0): + self.channel = grpc.insecure_channel(self.address) + grpc.channel_ready_future(self.channel).result(timeout=timeout) + self.stub = TruffleOSStub(self.channel) + + def start_build(self, app_type: AppType = AppType.APP_TYPE_BACKGROUND) -> StartBuildSessionResponse: + if not self.stub: + raise RuntimeError("not connected") + req = StartBuildSessionRequest() + req.app_type = app_type + resp: StartBuildSessionResponse = self.stub.Builder_StartBuildSession( + req, metadata=self._metadata + ) + self.app_uuid = resp.app_uuid + self.access_path = resp.access_path + return resp + + def _parse_sse(self, response: httpx.Response) -> Iterator[tuple[str, str]]: + event = "message" + data_parts = [] + for raw in response.iter_lines(): + if raw is None: + continue + line = raw.rstrip("\r") + if line == "": + if data_parts: + yield event, "\n".join(data_parts) + event, data_parts = "message", [] + continue + if line.startswith(":"): + continue + if line.startswith("event:"): + event = line[6:].strip() + elif line.startswith("data:"): + data_parts.append(line[5:].lstrip()) + if data_parts: + yield event, "\n".join(data_parts) + + def exec(self, cmd: str, cwd: str = "/", stream: bool = False) -> ExecResult | Iterator[tuple[str, str]]: + if not self.http_base: + raise RuntimeError("no active build session") + url = f"{self.http_base}/exec/stream" + body = {"cmd": ["bash", "-lc", f"cd {cwd} && {cmd}"], "cwd": cwd} + if stream: + return self._exec_stream(url, body) + return self._exec_collect(url, body) + + def _exec_stream(self, url: str, body: dict, retries: int = 5, backoff: float = 1.0) -> Iterator[tuple[str, str]]: + with httpx.Client(timeout=None) as client: + for attempt in range(retries): + try: + with client.stream("POST", url, json=body) as response: + response.raise_for_status() + for ev, data in self._parse_sse(response): + yield ev, data + return + except httpx.HTTPStatusError as e: + if e.response.status_code == 503 and attempt < retries - 1: + time.sleep(backoff * (attempt + 1)) + continue + raise + + def _exec_collect(self, url: str, body: dict) -> ExecResult: + output = [] + exit_code = 0 + for ev, data in self._exec_stream(url, body): + if ev == "log": + try: + obj = json.loads(data) + line = obj.get("line", "") + except Exception: + line = data + output.append(line) + elif ev == "exit": + try: + exit_code = int(json.loads(data).get("code", 0)) + except Exception: + pass + return ExecResult(exit_code=exit_code, output=output) + + def discard(self) -> FinishBuildSessionResponse | None: + if not self.stub or not self.app_uuid: + return None + req = FinishBuildSessionRequest() + req.app_uuid = self.app_uuid + req.discard = True + resp: FinishBuildSessionResponse = self.stub.Builder_FinishBuildSession( + req, metadata=self._metadata + ) + self.app_uuid = None + self.access_path = None + return resp + + def close(self): + if self.channel: + self.channel.close() + self.channel = None + self.stub = None + + def __enter__(self): + self.connect() + self.start_build() + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.discard() + self.close() + return False From 5d6e42821449181c7cac8d8256a97c4096ed1fcb Mon Sep 17 00:00:00 2001 From: notabd7-deepshard Date: Wed, 28 Jan 2026 18:25:37 -0800 Subject: [PATCH 02/15] upload files, moved to async (it is pretty great) --- genesis/__init__.py | 4 +- genesis/client.py | 188 ++++++++++++++++++++++++++++---------------- 2 files changed, 121 insertions(+), 71 deletions(-) diff --git a/genesis/__init__.py b/genesis/__init__.py index 69e80ba..5c77188 100644 --- a/genesis/__init__.py +++ b/genesis/__init__.py @@ -3,6 +3,6 @@ except ImportError: __version__ = "0.1.dev0" -from .client import TruffleClient, ExecResult +from .client import TruffleClient, ExecResult, UploadResult -__all__ = ["__version__", "TruffleClient", "ExecResult"] +__all__ = ["__version__", "TruffleClient", "ExecResult", "UploadResult"] diff --git a/genesis/client.py b/genesis/client.py index 74a5d94..5e3b71f 100644 --- a/genesis/client.py +++ b/genesis/client.py @@ -1,9 +1,11 @@ -import grpc -import httpx +import asyncio import json -import time from dataclasses import dataclass -from typing import Iterator +from pathlib import Path +from typing import AsyncIterator +import grpc +from grpc import aio +import httpx from truffle.os.truffleos_pb2_grpc import TruffleOSStub from truffle.os.builder_pb2 import ( StartBuildSessionRequest, @@ -20,11 +22,18 @@ class ExecResult: output: list[str] +@dataclass +class UploadResult: + path: str + bytes: int + sha256: str + + class TruffleClient: def __init__(self, address: str, token: str): self.address = address self.token = token - self.channel: grpc.Channel | None = None + self.channel: aio.Channel | None = None self.stub: TruffleOSStub | None = None self.app_uuid: str | None = None self.access_path: str | None = None @@ -40,111 +49,152 @@ def http_base(self) -> str | None: def _metadata(self) -> list: return [("session", self.token)] - def connect(self, timeout: float = 15.0): - self.channel = grpc.insecure_channel(self.address) - grpc.channel_ready_future(self.channel).result(timeout=timeout) + async def connect(self, timeout: float = 15.0): + self.channel = aio.insecure_channel(self.address) + await asyncio.wait_for(self.channel.channel_ready(), timeout=timeout) self.stub = TruffleOSStub(self.channel) - def start_build(self, app_type: AppType = AppType.APP_TYPE_BACKGROUND) -> StartBuildSessionResponse: + async def start_build(self, app_type: AppType = AppType.APP_TYPE_BACKGROUND) -> StartBuildSessionResponse: if not self.stub: raise RuntimeError("not connected") req = StartBuildSessionRequest() req.app_type = app_type - resp: StartBuildSessionResponse = self.stub.Builder_StartBuildSession( + resp: StartBuildSessionResponse = await self.stub.Builder_StartBuildSession( req, metadata=self._metadata ) self.app_uuid = resp.app_uuid self.access_path = resp.access_path return resp - def _parse_sse(self, response: httpx.Response) -> Iterator[tuple[str, str]]: - event = "message" - data_parts = [] - for raw in response.iter_lines(): - if raw is None: - continue - line = raw.rstrip("\r") - if line == "": - if data_parts: - yield event, "\n".join(data_parts) - event, data_parts = "message", [] - continue - if line.startswith(":"): - continue - if line.startswith("event:"): - event = line[6:].strip() - elif line.startswith("data:"): - data_parts.append(line[5:].lstrip()) - if data_parts: - yield event, "\n".join(data_parts) - - def exec(self, cmd: str, cwd: str = "/", stream: bool = False) -> ExecResult | Iterator[tuple[str, str]]: + async def _sse_events(self, client: httpx.AsyncClient, url: str, body: dict) -> AsyncIterator[tuple[str, str]]: + async with client.stream("POST", url, json=body, timeout=None) as r: + r.raise_for_status() + event = "message" + data_parts = [] + async for raw in r.aiter_lines(): + if raw is None: + continue + line = raw.rstrip("\r") + if line == "": + if data_parts: + yield event, "\n".join(data_parts) + event, data_parts = "message", [] + continue + if line.startswith(":"): + continue + if line.startswith("event:"): + event = line[6:].strip() + elif line.startswith("data:"): + data_parts.append(line[5:].lstrip()) + if data_parts: + yield event, "\n".join(data_parts) + + async def exec(self, cmd: str, cwd: str = "/") -> ExecResult: if not self.http_base: raise RuntimeError("no active build session") url = f"{self.http_base}/exec/stream" body = {"cmd": ["bash", "-lc", f"cd {cwd} && {cmd}"], "cwd": cwd} - if stream: - return self._exec_stream(url, body) - return self._exec_collect(url, body) - - def _exec_stream(self, url: str, body: dict, retries: int = 5, backoff: float = 1.0) -> Iterator[tuple[str, str]]: - with httpx.Client(timeout=None) as client: + output = [] + exit_code = 0 + retries = 5 + backoff = 1.0 + async with httpx.AsyncClient(timeout=None) as client: for attempt in range(retries): try: - with client.stream("POST", url, json=body) as response: - response.raise_for_status() - for ev, data in self._parse_sse(response): - yield ev, data - return + async for ev, data in self._sse_events(client, url, body): + if ev == "log": + try: + obj = json.loads(data) + line = obj.get("line", "") + except Exception: + line = data + output.append(line) + elif ev == "exit": + try: + exit_code = int(json.loads(data).get("code", 0)) + except Exception: + pass + return ExecResult(exit_code=exit_code, output=output) except httpx.HTTPStatusError as e: if e.response.status_code == 503 and attempt < retries - 1: - time.sleep(backoff * (attempt + 1)) + await asyncio.sleep(backoff * (attempt + 1)) continue raise + return ExecResult(exit_code=exit_code, output=output) - def _exec_collect(self, url: str, body: dict) -> ExecResult: - output = [] - exit_code = 0 - for ev, data in self._exec_stream(url, body): - if ev == "log": + async def exec_stream(self, cmd: str, cwd: str = "/") -> AsyncIterator[tuple[str, str]]: + if not self.http_base: + raise RuntimeError("no active build session") + url = f"{self.http_base}/exec/stream" + body = {"cmd": ["bash", "-lc", f"cd {cwd} && {cmd}"], "cwd": cwd} + retries = 5 + backoff = 1.0 + async with httpx.AsyncClient(timeout=None) as client: + for attempt in range(retries): try: - obj = json.loads(data) - line = obj.get("line", "") - except Exception: - line = data - output.append(line) - elif ev == "exit": + async for ev, data in self._sse_events(client, url, body): + yield ev, data + return + except httpx.HTTPStatusError as e: + if e.response.status_code == 503 and attempt < retries - 1: + await asyncio.sleep(backoff * (attempt + 1)) + continue + raise + + async def upload(self, src: str | Path, dest: str) -> UploadResult: + if not self.http_base: + raise RuntimeError("no active build session") + path = Path(src).expanduser() + if not path.exists() or not path.is_file(): + raise FileNotFoundError(f"no such file: {path}") + url = f"{self.http_base}/upload" + retries = 5 + backoff = 1.0 + async with httpx.AsyncClient(timeout=None) as client: + for attempt in range(retries): try: - exit_code = int(json.loads(data).get("code", 0)) - except Exception: - pass - return ExecResult(exit_code=exit_code, output=output) + with path.open("rb") as fh: + files = {"file": (path.name, fh)} + r = await client.post(url, params={"path": dest}, files=files) + r.raise_for_status() + data = r.json() + return UploadResult( + path=data.get("path", ""), + bytes=data.get("bytes", 0), + sha256=data.get("sha256", ""), + ) + except httpx.HTTPStatusError as e: + if e.response.status_code == 503 and attempt < retries - 1: + await asyncio.sleep(backoff * (attempt + 1)) + continue + raise + raise RuntimeError("upload failed after retries") - def discard(self) -> FinishBuildSessionResponse | None: + async def discard(self) -> FinishBuildSessionResponse | None: if not self.stub or not self.app_uuid: return None req = FinishBuildSessionRequest() req.app_uuid = self.app_uuid req.discard = True - resp: FinishBuildSessionResponse = self.stub.Builder_FinishBuildSession( + resp: FinishBuildSessionResponse = await self.stub.Builder_FinishBuildSession( req, metadata=self._metadata ) self.app_uuid = None self.access_path = None return resp - def close(self): + async def close(self): if self.channel: - self.channel.close() + await self.channel.close() self.channel = None self.stub = None - def __enter__(self): - self.connect() - self.start_build() + async def __aenter__(self): + await self.connect() + await self.start_build() return self - def __exit__(self, exc_type, exc_val, exc_tb): - self.discard() - self.close() + async def __aexit__(self, exc_type, exc_val, exc_tb): + await self.discard() + await self.close() return False From 5bd1bfc971e1c57142c589540f4143c69ec1cf21 Mon Sep 17 00:00:00 2001 From: notabd7-deepshard Date: Wed, 28 Jan 2026 22:43:28 -0800 Subject: [PATCH 03/15] add current bundle of apps, adding more sample apps --- example-apps/ambient/email/email_ambient.py | 328 ++++++++++++++ example-apps/ambient/email/icon.png | Bin 0 -> 3469 bytes example-apps/ambient/email/truffile.yaml | 78 ++++ example-apps/ambient/hn/ambient.py | 131 ++++++ example-apps/ambient/hn/icon.png | Bin 0 -> 21055 bytes example-apps/ambient/hn/onboard.py | 72 ++++ example-apps/ambient/hn/truffile.yaml | 50 +++ example-apps/ambient/reddit/icon.png | Bin 0 -> 276355 bytes example-apps/ambient/reddit/reddit.py | 432 +++++++++++++++++++ example-apps/ambient/reddit/truffile.yaml | 70 +++ example-apps/ambient/twitter/ambient.py | 335 ++++++++++++++ example-apps/ambient/twitter/icon.png | Bin 0 -> 453872 bytes example-apps/ambient/twitter/icon_aidan.png | Bin 0 -> 3641 bytes example-apps/ambient/twitter/onboard.py | 72 ++++ example-apps/ambient/twitter/onboard_test.py | 73 ++++ example-apps/ambient/twitter/truffile.yaml | 61 +++ example-apps/focus/research/icon.png | Bin 0 -> 8841 bytes example-apps/focus/research/research.py | 87 ++++ example-apps/focus/research/truffile.yaml | 39 ++ example-apps/truffile-example.yaml | 76 ++++ 20 files changed, 1904 insertions(+) create mode 100644 example-apps/ambient/email/email_ambient.py create mode 100644 example-apps/ambient/email/icon.png create mode 100644 example-apps/ambient/email/truffile.yaml create mode 100644 example-apps/ambient/hn/ambient.py create mode 100644 example-apps/ambient/hn/icon.png create mode 100644 example-apps/ambient/hn/onboard.py create mode 100644 example-apps/ambient/hn/truffile.yaml create mode 100644 example-apps/ambient/reddit/icon.png create mode 100644 example-apps/ambient/reddit/reddit.py create mode 100644 example-apps/ambient/reddit/truffile.yaml create mode 100644 example-apps/ambient/twitter/ambient.py create mode 100644 example-apps/ambient/twitter/icon.png create mode 100644 example-apps/ambient/twitter/icon_aidan.png create mode 100644 example-apps/ambient/twitter/onboard.py create mode 100644 example-apps/ambient/twitter/onboard_test.py create mode 100644 example-apps/ambient/twitter/truffile.yaml create mode 100644 example-apps/focus/research/icon.png create mode 100644 example-apps/focus/research/research.py create mode 100644 example-apps/focus/research/truffile.yaml create mode 100644 example-apps/truffile-example.yaml diff --git a/example-apps/ambient/email/email_ambient.py b/example-apps/ambient/email/email_ambient.py new file mode 100644 index 0000000..faceeff --- /dev/null +++ b/example-apps/ambient/email/email_ambient.py @@ -0,0 +1,328 @@ +import imaplib +import logging +import time +import base64 +from email import message_from_bytes +from email.message import Message +from email.header import decode_header, make_header +from email.utils import parseaddr, getaddresses +from typing import List, Optional, Tuple +from truffle.app.background_feed_pb2 import FeedCard + +from gourmet.ambient import run_ambient, AmbientContext +logger = logging.getLogger("email") +logger.setLevel(logging.DEBUG) + +from dataclasses import dataclass + +@dataclass +class EmailConfig: + imap_server: str + email_address : str + email_password: str + imap_port: int = 993 + imap_ssl: bool = True + mailbox: str = "inbox" + + @staticmethod + def from_env() -> 'EmailConfig': + import os + imap_server = os.getenv("IMAP_SERVER", "imap.gmail.com") + email_address = os.getenv("EMAIL_ADDRESS", "") + email_password = os.getenv("EMAIL_PASSWORD", "") + imap_port = int(os.getenv("IMAP_PORT", "993")) + imap_ssl = os.getenv("IMAP_SSL", "1") == "1" + mailbox = os.getenv("MAILBOX", "inbox") + cfg = EmailConfig( + imap_server=imap_server, + email_address=email_address, + email_password=email_password, + imap_port=imap_port, + imap_ssl=imap_ssl, + mailbox=mailbox + ) + if not all([imap_server, email_address, email_password]): + logger.error("EmailConfig.from_env: Missing required configuration: ", str(cfg)) + raise ValueError("Missing required email configuration in environment variables") + return cfg + + def is_gmail(self) -> bool: + return self.imap_server.lower() == "imap.gmail.com" + + +email_config = EmailConfig.from_env() + +LAST_SEEN_UID: Optional[int] = None + +def connect_to_email(cfg : EmailConfig) -> imaplib.IMAP4_SSL: + try: + mail = imaplib.IMAP4_SSL(cfg.imap_server, cfg.imap_port) + mail.login(cfg.email_address, cfg.email_password) + return mail + except Exception as e: + safe_pwd = cfg.email_password[:2] + "***" + cfg.email_password[-2:] # logs are private to user device anyways + logging.error(f"Connection to {cfg.imap_server} as {cfg.email_address}:{safe_pwd} failed") + logging.error(str(e)) + raise + + + +def _init_last_uid(mail: imaplib.IMAP4_SSL) -> int: + status, data = mail.uid("search", None, "ALL") # type: ignore + if status != "OK": + raise RuntimeError("Failed to search mailbox to initialize last UID") + if not data or not data[0]: + return 0 + uids = data[0].split() + return int(uids[-1]) + + +def decode_mime_header(value: str | None) -> str | None: + if value is None: + return None + try: + dh = decode_header(value) + # make_header handles joining parts + charset decoding + return str(make_header(dh)) + except Exception: + return value +def parse_single_address(h: Optional[str]) -> Tuple[Optional[str], Optional[str]]: + if not h: + return None, None + decoded = decode_mime_header(h) or "" + name, addr = parseaddr(decoded) + name = name or None + addr = addr or None + return name, addr + + +def fetch_new_emails( + mail: imaplib.IMAP4_SSL, + last_seen_uid: int | None = None, +) -> Tuple[List[Message], Optional[int]]: + global email_config + try: + status, _ = mail.select(email_config.mailbox) + if status != "OK": + raise RuntimeError(f"Failed to select mailbox {email_config.mailbox}") + + if last_seen_uid is None: + last_seen_uid = _init_last_uid(mail) + logger.debug("Initialized last_seen_uid to %s", last_seen_uid) + + start_uid = (last_seen_uid or 0) + 1 + search_criteria = f"UID {start_uid}:*" + + status, data = mail.uid("search", None, search_criteria) # type: ignore + if status != "OK": + logger.error("UID SEARCH failed with %r", search_criteria) + return [], last_seen_uid + + if not data or not data[0]: + logger.debug("No new messages since UID %s", last_seen_uid) + return [], last_seen_uid + + uids = data[0].split() + messages: List[Message] = [] + max_uid = last_seen_uid or 0 + + for uid in uids: + uid_int = int(uid) + if last_seen_uid and uid_int == last_seen_uid: + continue + + + # one fetch: body (no \Seen) + X-GM-MSGID + # hopefully other IMAP servers just ignore X-GM-MSGID + status, msg_data = mail.uid("fetch", uid, "(BODY.PEEK[] X-GM-MSGID)") + if status != "OK" or not msg_data: + logger.error("Failed to fetch message UID %s", uid.decode()) + continue + + meta_bytes = None + raw_bytes = None + for item in msg_data: + if isinstance(item, tuple): + meta_bytes, raw_bytes = item + break + + if meta_bytes is None or raw_bytes is None: + logger.error("Unexpected fetch response for UID %s: %r", uid.decode(), msg_data) + continue + + meta = meta_bytes.decode("utf-8", errors="ignore") + gm_msgid: Optional[str] = None + if "X-GM-MSGID" in meta: + after = meta.split("X-GM-MSGID", 1)[1].strip() + gm_msgid = after.split()[0].rstrip(")") + + msg = message_from_bytes(raw_bytes) + msg.add_header("UID", str(uid_int)) + if gm_msgid and email_config.is_gmail(): + msg.add_header( + "GMAIL_URL", # this assumes inbox 0, not great but whatever + f"https://mail.google.com/mail/u/0/#all/{int(gm_msgid):x}", + ) + + messages.append(msg) + if uid_int > max_uid: + max_uid = uid_int + + if max_uid > (last_seen_uid or 0): + last_seen_uid = max_uid + + logger.info( + "Fetched %d new messages, last_seen_uid=%s", + len(messages), + last_seen_uid, + ) + return messages, last_seen_uid + except Exception as e: + logger.error(f"Error fetching new emails: {str(e)}", exc_info=True) + return [], last_seen_uid + +def _decode_part(part: Message) -> str: + payload = part.get_payload(decode=True) + if payload is None: + return "" + charset = part.get_content_charset() or "utf-8" + try: + return payload.decode(charset, errors="replace") # type: ignore + except LookupError: + return payload.decode("utf-8", errors="replace") # type: ignore + + +def extract_preferred_body(msg: Message) -> Tuple[Optional[str],Optional[str], bool]: + text_body: Optional[str] = None + html_body: Optional[str] = None + + if msg.is_multipart(): + for part in msg.walk(): + ctype = part.get_content_type() + disp = (part.get("Content-Disposition") or "").lower() + + if "attachment" in disp: + continue + + if ctype == "text/plain": + decoded = _decode_part(part).strip() + if decoded: + text_body = decoded if text_body is None else (text_body + "\n" + decoded) + elif ctype == "text/html": + decoded = _decode_part(part).strip() + if decoded: + html_body = decoded if html_body is None else (html_body + "\n" + decoded) + else: + ctype = msg.get_content_type() + decoded = _decode_part(msg).strip() + if ctype == "text/plain": + text_body = decoded or None + elif ctype == "text/html": + html_body = decoded or None + return text_body, html_body, True if html_body is not None else False + + + +def email_ambient(ctx: AmbientContext): + global LAST_SEEN_UID + global email_config + mail = connect_to_email(email_config) + try: + messages, new_uid = fetch_new_emails(mail, LAST_SEEN_UID) + logger.info(f"Fetched {len(messages)} new emails, new last seen UID: {new_uid}") + LAST_SEEN_UID = new_uid + if not messages or len(messages) == 0: + return + + for msg in messages: + body, html_body, is_html = extract_preferred_body(msg) + + uid = msg.get("UID") + gmail_url = msg.get("GMAIL_URL") + subject = decode_mime_header(msg["Subject"]) + sender = msg["From"] + name, sender_addr = parse_single_address(sender) + if not name or not sender_addr: + name = "" + sender_addr = sender_addr or "" + if len(sender_addr) == 0: + sender_addr = sender + + recv = msg["To"] + logger.info(f"Email UID: {uid}, From: {name} {sender_addr}, To: {recv}, Subject: {subject}, Is HTML: {is_html}, Body {len(body or "")} GMAIL_URL: {gmail_url} ") + if is_html and html_body is not None: + try: + # just use trafilatura if we can + import trafilatura + extracted = trafilatura.extract(html_body, output_format="markdown", include_tables=True, include_links=True, include_images=True, deduplicate=True, favor_precision=True) + if extracted: + body = extracted.strip() + logger.info("Extracted text from HTML email using trafilatura.") + except ImportError: + logger.warning("trafilatura not installed, skipping HTML to text conversion") + body = html_body.strip() + except Exception as e: + logger.error(f"Error during HTML to text conversion: {str(e)}", exc_info=True) + body = html_body.strip() + elif body is not None and len(body.strip()) == 0: + body = "[No content]" + + if subject is None or len(subject.strip()) == 0: + subject = "(No Subject)" + + + + card = FeedCard() + card.title = subject + rich_sender = f"[{name}](mail-to:{sender_addr})" if name else sender_addr + + card.body = f"{rich_sender}\n{body}" + if gmail_url: + card.source_uri = gmail_url + ctx.bg.add_feed_card(card) + except Exception as e: + logger.error(f"Error in email_ambient: {str(e)}", exc_info=True) + finally: + try: + mail.close() + except Exception: + pass + try: + mail.logout() + except Exception: + pass + time.sleep(0.2) # sanity check everything closed ok + +def verify() -> int: + global LAST_SEEN_UID + global email_config + mail : imaplib.IMAP4_SSL | None = None + try: + mail = connect_to_email(email_config) + mail.select(email_config.mailbox) + logger.info(f"Connected to IMAP server {email_config.imap_server} as {email_config.email_address}, mailbox {email_config.mailbox}") + logger.info("email is properly configured!") + return 0 + except Exception as e: + logger.error(f"Failed to connect to email server: {str(e)}", exc_info=True) + return 1 + finally: + if mail is not None: + try: + mail.close() + except Exception: + pass + try: + mail.logout() + except Exception: + pass + +if __name__ == "__main__": + import sys + if sys.argv and len(sys.argv) > 1 and "verify" in sys.argv[1].lower(): + logger.info("Running Email Ambient App VERIFY mode") + ec = verify() + logger.info(f"Email Ambient App VERIFY exited with code {ec}") + sys.exit(ec) + else: + run_ambient(email_ambient) \ No newline at end of file diff --git a/example-apps/ambient/email/icon.png b/example-apps/ambient/email/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ef9739d228b11d75dd9105795a0d627d6eb11c9d GIT binary patch literal 3469 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 WjKdPW?Wu6h0wAp%Et@W0CHw~|zY2r^ literal 0 HcmV?d00001 diff --git a/example-apps/ambient/email/truffile.yaml b/example-apps/ambient/email/truffile.yaml new file mode 100644 index 0000000..838f0a4 --- /dev/null +++ b/example-apps/ambient/email/truffile.yaml @@ -0,0 +1,78 @@ +metadata: + name: Inbox + type: background + description: | + Connect Truffle¹ to your email inbox and notify you of relevant messages. + process: + cmd: + - python + - email_ambient.py + working_directory: / + environment: + PYTHONUNBUFFERED: "1" + IMAP_PORT: "993" + + icon_file: ./icon.png + default_schedule: + type: interval + interval: + duration: 5m + schedule: + daily_window: "01:00-22:30" # optional +steps: + - name: Email Setup + type: welcome + content: | + The Email app is a generic IMAP email client that will allow your Truffle to post emails on your feed. + You will need a one time passcode from your email provider if you have 2FA enabled. + For Gmail, you can generate an App Password from your Google Account settings. + [Click Here to get one](https://support.google.com/mail/answer/185833?hl=en) + - name: Install dependencies + type: bash + run: | + pip install --no-cache-dir trafilatura==2.0.0 + - name: Copy application files + type: files + files: + - source: ./email_ambient.py + destination: ./email_ambient.py + - name: Configure Email Account + type: text + content: | + Please provide an IMAP server, email address, and password to configure your email account. Port 993/SSL is assumed. + Common IMAP servers: + - Gmail: `imap.gmail.com` + - Hotmail/Outlook: `imap-mail.outlook.com` + - Yahoo: `imap.mail.yahoo.com` + - iCloud: `imap.mail.me.com` + Be warned only Gmail has been tested. + + fields: + - name: imap_server + label: IMAP Server + type: text + placeholder: imap.gmail.com + default: imap.gmail.com + env: IMAP_SERVER + - name: email_address + label: Email Address + type: text + env: EMAIL_ADDRESS + placeholder: robert@gmail.com + - name: password + label: Password + type: password + env: EMAIL_PASSWORD + validator: + type: bash # [bash] + run: | + python ./email_ambient.py --verify + timeout: 120 # optional, in seconds + error_message: | # optional + Could not connect to the email server with the provided credentials. Please double-check and try again + + + + + + \ No newline at end of file diff --git a/example-apps/ambient/hn/ambient.py b/example-apps/ambient/hn/ambient.py new file mode 100644 index 0000000..267340d --- /dev/null +++ b/example-apps/ambient/hn/ambient.py @@ -0,0 +1,131 @@ +from gourmet.ambient import run_ambient, AmbientContext, InferenceClient +from truffle.app.background_feed_pb2 import FeedCard +import logging +import requests +from bs4 import BeautifulSoup +from bs4 import Tag +from typing import Deque, Tuple, Optional +from collections import deque +from urllib.parse import urljoin +from abrasive.extract import extract_content_from_url, ExtractedContent +import datetime +logger = logging.getLogger("hn") +logger.setLevel(logging.DEBUG) + +logger = logging.getLogger(__name__) +logger.setLevel(logging.DEBUG) + +# pip install requests bs4 +def summarize_post_title(infer_client: InferenceClient, title: str) -> str: + sys_prompt = ( "You summarize updates from a Hacker News front page scraper, to make a catchy post title." + " Only respond with the title text, no other commentary." ) + user_prompt = "What is a catchy headline for the following article?\n\n" + title + response = infer_client.generate_simple(sys_prompt, user_prompt) + return response.strip() +HN_URL = "https://news.ycombinator.com/" + +_seen_ids: set[str] = set() +_pending: Deque[Tuple[str, str, Optional[str],Optional[str], str]] = deque() # (title, url, site, item_id) + + +def _get(url: str) -> str: + r = requests.get( + url, + headers={ + "User-Agent": "hn-scraper/1.0 (+https://news.ycombinator.com/)", + "Accept": "text/html,application/xhtml+xml", + }, + timeout=10, + ) + r.raise_for_status() + return r.text + + +def _fetch_top(limit: int = 60) -> list[Tuple[str, str, Optional[str],Optional[str], str]]: + html = _get(HN_URL) + soup = BeautifulSoup(html, "html.parser") + rows = soup.select("tr.athing") + + out: list[Tuple[str, str, Optional[str],Optional[str], str]] = [] + for r in rows: + item_id = r.get("id") + if not item_id: + continue + a = r.select_one("span.titleline > a") + + if not a: + continue + href = urljoin(HN_URL, a.get("href") or "") # type: ignore + title = a.get_text(strip=True) + site_el = r.select_one("span.sitestr") + + next = r.next_sibling + points = None + if next is not None and isinstance(next, Tag): + points_el = next.select_one("td.subtext > span.subline > span.score") + if points_el is not None: + points = points_el.get_text(strip=True) + if points.endswith(" points"): + points = points[:-7] + site = site_el.get_text(strip=True) if site_el else None + out.append((title, href, site, points, item_id)) # type: ignore + if len(out) >= limit: + break + return out + + +def _refill_queue() -> int: + global _pending, _seen_ids + try: + batch = _fetch_top(limit=60) + except Exception as e: + logger.warning(f"HN fetch failed: {e!r}") + return 0 + + added = 0 + existing_ids = {it[4] for it in _pending} + for it in batch: + if it[4] in _seen_ids or it[4] in existing_ids: + continue + _pending.append(it) + existing_ids.add(it[4]) + added += 1 + return added +def _next_new_item() -> Optional[Tuple[str, str, Optional[str],Optional[str], str]]: + global _pending + if not _pending: + _refill_queue() + if not _pending: + return None + title, url, site, pts, item_id = _pending.popleft() + _seen_ids.add(item_id) + return title, url, site, pts, item_id +def get_comments_url(item_id: str) -> str: + return f"{HN_URL}item?id={item_id}" +def scrape_ambient(ctx: AmbientContext): + item = _next_new_item() + if not item: + logger.info("No new HN items to process.") + return + title, url, site,pts, item_id = item + logger.info(f"Processing HN item {item_id}: {title} {pts or ""} ({url}) ({site}) {get_comments_url(item_id=item_id)}") + + + post_body = f"HackerNews: {f'{site}' if site else ''}{f' | {pts} points' if pts is not None else ''}\n" + url_content = extract_content_from_url(url) + if url_content is None: + logger.warning(f"Failed to extract content from URL: {url}") + post_body += f"[comments]({get_comments_url(item_id=item_id)})\n" + ctx.bg.post_to_feed(title=title, body=post_body, src_uri=url) + return + + if url_content.text: + post_body += f"{url_content.text}\n" + + ts = url_content.date if url_content.date is not None else datetime.datetime.now(tz=datetime.timezone.utc) + ctx.bg.post_to_feed(title=title, body=post_body, src_uri=url, media_uris=url_content.images, content_timestamp=ts ) + +if __name__ == "__main__": + run_ambient(scrape_ambient) + + diff --git a/example-apps/ambient/hn/icon.png b/example-apps/ambient/hn/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..342e56805975f58a251193535cb0cc8ddf12fc7b GIT binary patch literal 21055 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%0AI}&Xw$1T_ zuD!nchGRTBp5C*XtI#UjcJ2V+#t`Q%RK~|NZ4sn{b@fyng=t+#@|y~{`lGY7p4Q** zV7`PCYD@Gr6Tp=Q*q{P)AIWa(cVZS5+9zn#9;V8O6rxm&sv}(B63nw%MrCxRT@*n= z1V@!e5Bdb@L`iP~eaBD4V=&K(xD}ZzOgA#>7pV-c4!bkMdX`4j*MT!hewJbH=#a;X zz$nJeBR?a;tPM{CB1F1Y&RV0mgD>56TP{fnNcIT7O9w_bwSQtg=6(*3d7tUK zmF`Igt0_!(F$GI0b>?H6UT&^C`{5l!(hwiB5h9G6++f^aScg9uz|5;4=n%ry6<}o_X6EEx30txYJh>p}|i*8%RyU6`=U|CC4Yzl|h%9dVj*yz~y zi(__^CIGzBJgywA^!hm)>srT&01kIxoi>U!N2T>v&vBMJw@EW7e)FLLt83>8*yTS{ z7JYZ*%hrOvFo3p3=DWgp#bjR-QKLrlu1BNxT;N%h#o!7jA@o~iPRPXY_we)3lz$&x zOTSE+GQZZCZj<-cT{RB&?KAnZ%1My;?GMJ?^bP2-F$d= ziWAyKgP^GO0CsLq5{JvqEFyekoYAZH)l-FA}iro=dzf9Z@hdM-196T~* z|3jh^;Oj~ln}v}+nOm50t2VJW#pGc%8jxCG3P<0^@abiK{cx+%6G_l1?*?Pud3HD-10D#1I%QWtY8Vz4P;@w^NDQpmPgKQ5};FSu53~o zZ^U&=F{xp=*&z~|9Iaqb2BLiQ^V6zH)gw3Kptr#jyBc{hR3@ib>G0Y{qmWbmO8G!$ zMmS1SPpcxj;&t0;(20TfDus~+RrjWEB=M=UwCuL9`cjith9-F*U9>YFi=XSa%@Lvn zm6=v!Fg4(M~iX7EX>)i!UE7~A`<)zoQ7h05+9Q|Qe zQ&~5Rzln1GuRftN@okGDi0ck!?#2>s(aibtxW5^$(>TutD=+R1kcwGtYq`oKMuXZ$S6||)R?&A48c(Q`@U;Rv0j*}r;=sR_GI{EE=;KMKWy2x zFyz>{pb*~ei>9dImsu)op4KfG5#=8}XrSB`LM)~&Hw`*vlN-NE{niOhYZb-laxV)R zYxOHNEW|uUNqVr>Nl5MHB$Td~hq@Z*Qd43u;Ldy-g!N9A)IQJ|Jj+=7<}S45tt&b* zcmytpjb}u^E>m^4Mj@R3(u>n-?fL6Cmz0%c{~>lGka6P2MPa0@Z)ZtukzRhQo_tXl z=rhCnyVCdsrvTIvBfb1)P$&+(jfw2S5{BRn4$w32YFY1G0+N}jsUh0eH z!`U@mZ=tPQI2TS%YrcAo$V6wEg|z_+dGY+TaxQArqUwv4_>qaW5ZSjtjltrDA?SNQ zGSIP4-fJv)iUquV8JGP4hcAtE_Felfq)B~$8UvhuZx!PRb|nhiW9p36JN#F$pr?nj z3lsX~p4>C3s@)+Rz@&}>wzR_O!c}ZHx;r?8=A=0rp!UUmU-!XxJ_{UC`Zj z0_Y3Cx}!7Fx;|eW5z4*F{u(;_cIY~0IXsPLv--)Er!%e+D5SC?(9oF1JX;`JS#}~? zfb$~Ac$&9g7@6CcC~&@!Qs}Pg4f}m>7O=zNH!f9${Gd78UY=XH2mJp1wg5-ys0`@| zkkl>jR=WaWy%Zw|D_yS&=$cm7-C|OQwt+j>;lZ&opc7{IOM1EXhrrvS!ZHUOexKj1 zr4)7b;Efy7M{n}h5bT>W1!eNBGUwJubIr8Jhl$F@hC*8_6{3wLBT+s!y zHMGdRlJTS{*Nz*7gqF*G0B+JHbDG0)zl@@Wg55Zwu|Grk1By~Kr>Rsj5%P0C=+qdx zfx|CM`>Z2Nj1hAEnTp?zfKL7}y*4Lg&UYP=y^%6U`+6^sY6~*KczjLF<5_yqe6X?7 zO($;GI9c?Olb~*)IBLg{t+ehqnBx5u=}O z!}A7qb&&CrvGpXv}Np6IB$z7Dy_fSmSOntuca4?7x_V_ z2M?1b4quZ>N)GRne7gD;wFkT)#6Wl2sR})W-lL2~PyWz=7eA9OW0v(&cT_LYolD6g z>vz)usjqJqE;B60=yJcai+c2W-fasYCrm`%14=owzzZJF*l^-=WssruG&TMz5J)NQ zr18z+_KYox*B28nGY3&eevS zqVme3yUo+T+d8~Z1R3FP(x5j!^CsEP)!d$s??>{0&Z~6LnUyKQWb~2Tm%LvWcTKOS z5~q``6T{`cB<+W=yztgA+^pIGf|e(zrNC*QYE&f?aEDYj$09j^zF+`d zE*RV13bT?Jzp}aD&;pRN9MZDcV3blg*1h0=di+XAZ!{!RWYCFSMxuh(G?-OZf8TFo z2m0coOj9iQuPQs=$1ZNQ6-7dmT>b{-^Iw@&mRlR>fna8%7bjtrN`2RNX{);9*(s0_4GWm?kyGmC%O$<7 z&JbyHpmruQN(ec+b3ABjU)c*$Snz@M%WgmyxEv#!#=d+#O3D6i|t2BH)4Iq2;1l>wj9yy}Hk@>DS6}=5?49wub&yM$It~KwbjO_P;y`Dcj zCUaRSF7W_iXFKUGEk3Iow+GbEjA#bURnRjW0tY6Few#&E_(jU2!M(Mm5BT+-rO1Qe zfSm~@FYHZ<%VU5D-Z#8De#idFVKk@{c~`gI#OU32033MZ`{+;~GtCp&oEFnIXPQ6# zV-E`49yRz?>3(^Y2JA7_j+`r%RcvDd(Kkgk@~YZpm4RBO#h_HhqDjLt055A^wfO1~ z-`LZEy(P^ac6o}y4n6=ewz@J^dHrYb2|Dmd+Dq6sZ?0WN4yYC6_EwxqCgoM2z`gY` z%a?QS$Jn_5|6nQBg6&eWqZ2@GLY}jgQ|Y0!U~gHncHeQMNJ&YcR{lddp)$`O-vq#) z;P*YgpI7c*+7F`LtxED%DfX5CIV4wLkw2GnIClyI1n>Les@f}uiUG(f7(4eZ&-;gz z2t45jUMZPNnf`_a`iGMD_bn*=aySpckxRmUsp8|oacB_V(3IO#_0X&?1AyaRukMuT zcRM^|1{vpe(q9oo+Y%b~0KtTGL4SJBAac6u^OK|K^#zCX0Eu-Z zKaDNpcjr0?GJM*vt*}}@JaYoV)0f`eUX>jRgwBiotI}juh09(rfs7}V_cPx*D&Ek* zN`?9fr#q{qq2ust(C?Gp%euEdX8;+QPm^=zzO`CK(!!!d(#e3;PMMw?aBRLSEWS%| zHICwN_==Vz#0S^8lIcN4{f4T>II(<*3$}Yk4YyS6>l5FgfndpJqYr_6B_%JRbGOo# z&4WXcGR#1&+1LETT2Q~@c?kJ5mr%nr;Fu8(K+Dqkk|nCBBQHEY8)sWA5%X0`p3#8} zY;evNxzFk%4ba~gcCm*}2H@(KL+{5zxUE?M@>tF-adA^jj~xR`1bJ5}qkS8~ zaS+kae5I#WFX(p%EeaM2Uc>gK%5H7|a1suZm}O;K2x*y1SPJR0u*JeU0Y^YUFFj$2 z0R{9=`(3T3UXmZ!55e7@MkVwF_M;HpK9aB)qS$sC1=QAu%_h<1u_P3NHO>B1Np_zt zT%m*CTXEKH#*QB9nD2;g<~^d<^1l%X)3|k~R-`TbxMu z!4QNT^#K__DTajH&HzuXkFEDk?O5;iYn?TlUfb&L@#x1Pk|=_VLJK@;sl z?`%jbQ=%-`{T_*7D%w8`epHP5&1b$}t390CMGGHfkbG|dmJ+1_zSiRO2Tt;m{bd>u zNRaJ?-)6YL2@lv;^xmJP4xQ};fa>jm*%^C4oZJtVRpAF-EjV@99w1C6S!-nXo&7?v z--Xuuc49~pmII!NYs^+Cec5GCP(bC?uK_PM{4WjI@w9VNC3Ss4;5tB}0^YY_mR+~e z@DSWty0TG=qitq`j~N6TjiUYE_@Lm^1;y9x7D9x}wAp~QW&0^-l#)>?0INPF3sdVP~h>a^$JLeKLOMPQe<*O$V(fAU3^VU^DhOP|IFh zyz-P%rWYoH0t(X)yjbuw$M(T3_$XB z0=-bfX2AehlV$_ms< zumsV%f4~9_4FTvqiEOrDff`IC|L3I-aB2Wx^r87*Z61L5f4cgW015x|^_K|z7uo+rF?NOd_XYX4#n@db|LT(XAIs-|d1d_X zh_Sm;{*oa7y)^&tGX3{w&t0PbA!7XXCHfKlPdU^7s}H4&ANDG2KlM%i{)a>0 z@1MUF_*;R$75M*H0gd&LZ%gjHhBDe_kjZf$4P&1h*M001Y`yH@FCZZ None: + loop = asyncio.get_running_loop() + deadline = loop.time() + timeout_s + + def logged_in() -> bool: + url = driver.current_url or "" + if "login" in url or "signup" in url: + return False + try: + return any(c.get("name") == "user" for c in driver.get_cookies()) or url == "https://news.ycombinator.com/" + except Exception: + return False + + + while True: + if logged_in(): + return + if loop.time() >= deadline: + raise TimeoutError("Timed out waiting for user to log in") + await asyncio.sleep(poll_s) + + +async def main() -> int: + err = 0 + try: + driver = create_driver( + app_url="https://news.ycombinator.com/login", + fullscreen=True + ) + driver.get("https://news.ycombinator.com/login") + logger.info("Waiting for user to log in to HN") + logger.error("Please log in to HN in the opened browser window") + await wait_for_login(driver, timeout_s=900) + logger.info("Logged in to HN successfully") + driver.quit() + driver = None + err = 0 + except Exception as e: + logger.exception("Error during HN onboarding") + err = 1 + finally: + try: + if driver: + driver.quit() + except Exception: + pass + return err + + + +if __name__ == "__main__": + ec = asyncio.run(main()) + exit(ec) \ No newline at end of file diff --git a/example-apps/ambient/hn/truffile.yaml b/example-apps/ambient/hn/truffile.yaml new file mode 100644 index 0000000..380b078 --- /dev/null +++ b/example-apps/ambient/hn/truffile.yaml @@ -0,0 +1,50 @@ +metadata: + name: Hacker News + type: background + description: | + An internal test app for VNC and auth flow. May or may not scrape Hacker News. + process: + cmd: + - python + - ambient.py + working_directory: / + environment: + PYTHONUNBUFFERED: "1" + icon_file: ./icon.png + default_schedule: + type: interval + interval: + duration: 1m +steps: + - name: Welcome + type: welcome + content: | + This is literally just a test for VNC + - name: Copy application files + type: files + files: + - source: ./ambient.py + destination: ./ambient.py + - source: ./onboard.py + destination: ./onboard.py + - name: Install dependencies + type: bash + run: | + pip install --no-cache-dir requests undetected-chromedriver selenium beautifulsoup4 + pip install --no-cache-dir -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ 'gourmet[abrasive]==0.1.dev44' + pip install --no-cache-dir --force-reinstall requests feedparser trafilatura==2.0.0 tld==0.13.1 + - name: Sign into Hacker News + type: vnc + cmd: + - python + - onboard.py + closes_on_complete: true + description: | + A VNC window will open. Please sign into your HackerNews account to continue the installation. + + + + + + + \ No newline at end of file diff --git a/example-apps/ambient/reddit/icon.png b/example-apps/ambient/reddit/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6bd4185d4b1bbdf0134ce33f1a083a459a1c45d2 GIT binary patch literal 276355 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

Uk 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ⓈXg67!DFgTJMaeHvvpUsY*ZoR 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

  • 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 str: + if self.user_feed_url: + return self.user_feed_url + else: + return f"https://www.reddit.com/r/{'+'.join(self.subreddits)}/{self.sort}/.json" + + @staticmethod + def load_reddit_config_from_env() -> "RedditConfig": + subreddits_str = os.getenv("SUBREDDITS", "").strip() + user_feed_url = os.getenv("USER_FEED_URL", "").strip() + + subreddits: List[str] = [] + + # user may have done comma space or just comma + if subreddits_str: + subreddits = [s.strip() for s in subreddits_str.split(",") if s.strip()] + else: + subreddits = DEFAULT_SUBREDDITS + + if user_feed_url: + assert isinstance(user_feed_url, str) + # validate url format minimally + if not ( user_feed_url.startswith("http://") or user_feed_url.startswith("https://")): + logger.warning("Invalid USER_FEED_URL format, ignoring: %s", user_feed_url) + user_feed_url = None + elif not "reddit.com" in user_feed_url: + logger.warning("USER_FEED_URL does not appear to be a reddit.com url, ignoring: %s", user_feed_url) + user_feed_url = None + if user_feed_url and ".rss" in user_feed_url: + logger.warning("USER_FEED_URL appears to be an RSS feed, expected JSON feed, replacing: %s", user_feed_url) + user_feed_url = user_feed_url.replace(".rss", ".json") + + if user_feed_url and not ".json?feed=" in user_feed_url: + logger.warning("USER_FEED_URL does not appear to be a reddit JSON feed url, ignoring: %s", user_feed_url) + user_feed_url = None + elif user_feed_url and not "user=" in user_feed_url: + logger.warning("USER_FEED_URL does not appear to be a user frontpage feed url, ignoring: %s", user_feed_url) + user_feed_url = None + + if user_feed_url: + # add sort + # https://old.reddit.com/.json?feed=uuid1234ffffaaaa&user=bobnal&sort=new + dotjson_index = user_feed_url.find("/.json") + if dotjson_index != -1: + user_feed_url = f"{user_feed_url[:dotjson_index]}/{SORT}{user_feed_url[dotjson_index:]}" + else: + logger.warning("Could not find /.json in USER_FEED_URL, could not add sort!", user_feed_url) + + return RedditConfig( + subreddits=subreddits, + user_feed_url=user_feed_url + ) + +reddit_config = RedditConfig.load_reddit_config_from_env() + + + +@dataclass +class RedditPost: + fullname: str # "t3_xxx" + id: str # bare id, e.g. "1pczt9f" + title: str + subreddit: str + permalink: str # "/r/.../comments/..." + comments_url: str # "https://www.reddit.com" + permalink + article_url: str # external link or self post url + image_urls: Optional[List[str]] + score: int + num_comments: int + created_utc: datetime + domain: str + +@dataclass +class RedditComment: + id: str + author: Optional[str] + body: str # markdown text + score: Optional[int] + permalink: str + +_seen_reddit: set[str] = set() +_pending_reddit: Deque[RedditPost] = deque() +_listing_after: Optional[str] = None +_listing_after_fp: Optional[str] = None + +last_request_time = time.time() - REDDIT_JSON_RATE_LIMIT_SECONDS +def reddit_request(url: str, params: dict, timeout: int = 10) -> requests.Response: + global last_request_time + elapsed = time.time() - last_request_time + if elapsed < REDDIT_JSON_RATE_LIMIT_SECONDS: + time.sleep((REDDIT_JSON_RATE_LIMIT_SECONDS - elapsed) + 0.25 ) + last_request_time = time.time() + headers = { + "User-Agent": USER_AGENT, + "Connection": "close", + } + logger.warning("Reddit JSON request to %s with params %s", url, params) + resp = requests.get(url, params=params, headers=headers, timeout=timeout) + resp.raise_for_status() + return resp + +def _fetch_listing(after: Optional[str] = None) -> Tuple[List[RedditPost], Optional[str]]: + params : dict[str, Any]= {"limit": POST_LIMIT, "sort" : "new"} + if after: + params["after"] = after + global reddit_config + + resp = reddit_request(reddit_config.get_listing_url(), params=params, timeout=10) + resp.raise_for_status() + data = resp.json()["data"] + children = data.get("children", []) + after_token = data.get("after") + + posts: List[RedditPost] = [] + for child in children: + if child.get("kind") != "t3": + continue + d : dict[str, Any] = child["data"] + + fullname = d.get("name") + if not fullname: + continue + + permalink = d.get("permalink") or "" + comments_url = f"https://www.reddit.com{permalink}" if permalink else "" + + article_url = d.get("url_overridden_by_dest") or d.get("url") or "" + + # get best image + image_urls: List[str]= [] + if 'preview' in d and 'images' in d['preview'] and len(d['preview']['images']) > 0: + for img in d['preview']['images']: + if 'source' in img and 'url' in img['source']: + image_urls.append(img['source']['url'].replace("&", "&")) + + if not image_urls: + thumb = d.get("thumbnail") + if thumb and thumb.startswith("http"): + image_urls.append(thumb.replace("&", "&")) + + + created_float = float(d.get("created_utc") or 0.0) + created_utc = datetime.fromtimestamp(created_float, tz=UTC) if created_float > 0.0 else datetime.now() + posts.append( + RedditPost( + fullname=fullname, + id=d.get("id", ""), + title=d.get("title", ""), + subreddit=d.get("subreddit", ""), + permalink=permalink, + comments_url=comments_url, + article_url=article_url, + image_urls=image_urls if image_urls else None, + score=int(d.get("score") or 0), + num_comments=int(d.get("num_comments") or 0), + created_utc=created_utc, + domain=d.get("domain", ""), + ) + ) + + return posts, after_token + + +def _refill_from_frontpage() -> bool: + global _listing_after_fp + posts, after_token = _fetch_listing(after=None) + _listing_after_fp = after_token + + added = 0 + for p in posts: + if p.fullname in _seen_reddit: + continue + _pending_reddit.append(p) + added += 1 + + logger.debug("frontpage refill added %d posts", added) + return added > 0 + + +def _refill_from_older() -> bool: + global _listing_after + # if not _listing_after: + # return False + + posts, after_token = _fetch_listing(after=_listing_after) + _listing_after = after_token + + added = 0 + for p in posts: + if p.fullname in _seen_reddit: + continue + _pending_reddit.append(p) + added += 1 + + logger.debug("older-page refill added %d posts (after=%s)", added, _listing_after) + return added > 0 + + +def _refill_reddit(): + if _refill_from_frontpage(): + return + _refill_from_older() + + +def _next_new_reddit_item() -> Optional[RedditPost]: + global _pending_reddit, _seen_reddit + + if not _pending_reddit: + _refill_reddit() + + if not _pending_reddit: + return None + + item = _pending_reddit.popleft() + _seen_reddit.add(item.fullname) + return item + + +def fetch_post_comments( + post: RedditPost, + max_top: int = 10, +) -> List[RedditComment]: + if not post.permalink: + return [] + + url = f"https://www.reddit.com{post.permalink.rstrip('/')}.json" + resp = reddit_request(url, params={"sort": "top", "limit": 50}, timeout=10) + resp.raise_for_status() + blob = resp.json() + + if not isinstance(blob, list) or len(blob) < 2: + return [] + + comments_listing = blob[1]["data"]["children"] + + raw: List[RedditComment] = [] + for child in comments_listing: + if child.get("kind") != "t1": + continue + d = child["data"] + body = d.get("body") + if not body: + continue + + permalink = d.get("permalink") or "" + raw.append( + RedditComment( + id=d.get("id", ""), + author=d.get("author"), + body=body, + score=d.get("score"), + permalink=f"https://www.reddit.com{permalink}" if permalink else "", + ) + ) + + if not raw: + return [] + + raw.sort(key=lambda c: (c.score or 0), reverse=True) + top = raw[:max_top] + + # maybe merit to adding worst comments too? if downvoted + worst = min(raw, key=lambda c: (c.score or 0)) + if worst not in top and len(top) < max_top + 1: + top.append(worst) + + return top + + +def get_content_for_reddit_item( + item: RedditPost, +) -> Tuple[ExtractedContent | None, List[RedditComment]]: + try: + link_content = None + if item.article_url and not item.domain.startswith("self."): + link_content = extract_content_from_url(item.article_url) + comments = fetch_post_comments(item, max_top=10) + return link_content, comments + except Exception as e: + logger.error("Error fetching content for %s: %s", item.fullname, e, exc_info=True) + return None, [] + +def validate_reddit_config(config: RedditConfig) -> bool: + try: + url = config.get_listing_url() + resp = reddit_request(url, params={"limit": 1}, timeout=10) + resp.raise_for_status() + data = resp.json() + if "data" not in data: + logger.error("Reddit config validation failed: no 'data' in response") + return False + return True + except Exception as e: + logger.error("Reddit config validation error: %s", e, exc_info=True) + return False + +def test_once(): + item = _next_new_reddit_item() + if item is None: + print("No new reddit items.") + return + + logger.info( + "Processing Reddit post %s [%s] %s (%s) score=%d comments=%d imgs=[%s]", + item.fullname, + item.subreddit, + item.title, + item.article_url, + item.score, + item.num_comments, + " ".join(item.image_urls) if item.image_urls else "None", + ) + post, comments = get_content_for_reddit_item(item) + print("Post:", item.title) + print("Article URL:", item.article_url) + print("Comments fetched:", len(comments)) + print("thumb:", item.image_urls or "None") + print("Top comments:") + for c in comments[:3]: + print(f"- @{c.author} [{c.score}]: {c.body[:160].replace('\n', ' ')}...") + print("Article text:", post.text[:500].replace("\n", " ") if post and post.text else "None") + print("article images:", post.images[0] if post and len(post.images) else "None") + print("-----") + +TESTING_MODE = False + +def run_test(): + global reddit_config + + logger.info("Starting reddit JSON ambient test...") + logger.info("using reddit listing url: %s", reddit_config.get_listing_url()) + + + while True: + try: + test_once() + time.sleep(5) + except KeyboardInterrupt: + print("Exiting.") + break + +def process_reddit_item(ctx: AmbientContext, item: RedditPost): + title, url, item_id, subreddit, image_urls = ( + item.title, + item.article_url, + item.fullname, + item.subreddit, + item.image_urls, + ) + logger.info(f"Processing Reddit item {item_id}: {title} ({url}) {subreddit if subreddit else ''} {image_urls if image_urls else ''}") + link_content, comments = get_content_for_reddit_item(item) + ctx.bg.post_to_feed( + title=link_content.title if link_content and link_content.title else title, + body=link_content.text if link_content and link_content.text else f'**{subreddit}** {item.domain} {item.score}', + src_uri=url, + media_uris=link_content.images if link_content and link_content.images else (image_urls if image_urls else []), + content_timestamp = link_content.date if link_content and link_content.date else item.created_utc + ) + +def reddit_ambient(ctx: AmbientContext): + for _ in range(3): + item = _next_new_reddit_item() + if not item: + logger.info("No new reddit items to process.") + return + process_reddit_item(ctx, item) + + return + + + #post_body = f"{f'**{subreddit}**' if subreddit else ''} {item.score }\n" + # + + # if link_content and link_content.text: + # post_body += f"\n\n{link_content.text[:2000]}" + + # if comments: + # post_body += "\n\n**Top Comments:**\n" + # for c in comments: + # post_body += f"- @{c.author if c.author else 'unknown'}: {c.body[:300].replace('\n', ' ')}...\n" + + + + +if __name__ == "__main__": + import sys + if sys.argv and len(sys.argv) > 1 and sys.argv[1] and "verify" in sys.argv[1].lower(): + logger.info("Verifying reddit configuration...") + ok = validate_reddit_config(reddit_config) + logger.info("Reddit configuration valid: %s", str(reddit_config)) if ok else logger.error("Reddit configuration invalid!") + sys.exit(0 if ok else 1) + + if TESTING_MODE: + run_test() + else: + run_ambient(reddit_ambient) + + +# :cp ./apps/ambient/reddit.py /app.py +# :cp /home/dylan/ds/3fw/python/dist/gourmet-0.1.dev0-py3-none-any.whl /tmp/gourmet-0.1.dev0-py3-none-any.whl +# pip install /tmp/gourmet-0.1.dev0-py3-none-any.whl[abrasive] \ No newline at end of file diff --git a/example-apps/ambient/reddit/truffile.yaml b/example-apps/ambient/reddit/truffile.yaml new file mode 100644 index 0000000..3162af9 --- /dev/null +++ b/example-apps/ambient/reddit/truffile.yaml @@ -0,0 +1,70 @@ +metadata: + name: Front Page of the Internet + type: background + description: | + Have your Truffle¹ browse Reddit and post relevant content to your feed. + process: + cmd: + - python + - /opt/reddit.py + working_directory: / + environment: + PYTHONUNBUFFERED: "1" + + icon_file: ./icon.png + default_schedule: + type: interval + interval: + duration: 15m + schedule: + daily_window: "01:00-22:30" +steps: + - name: Reddit Setup + type: welcome + content: | + The Reddit app will allow your Truffle to post relevant content from Reddit on your feed. + You can customize which subreddits to follow in the configuration step. + Please use this app in accordance with Reddit's terms of service. + - name: Install dependencies + type: bash + run: | + pip install --no-cache-dir --force-reinstall requests feedparser trafilatura==2.0.0 tld==0.13.1 + - name: Copy application files + type: files + files: + - source: ./reddit.py + destination: ./opt/reddit.py + - name: Configure Reddit + type: text + content: | + Please provide either a comma separated list of subreddits to follow, or leave blank to follow r/all. + Example: news, worldnews, technology, science, funny, pics, videos, gaming + Alternatively, [copy the URL of your personal frontpage RSS feed (JSON) from here](https://old.reddit.com/prefs/feeds/) + If a personal feed URL is provided, that will be used instead of the subreddit list if the URL is valid. + fields: + - name: subreddits + label: Comma Separated Subreddits + type: text + placeholder: news, worldnews, technology, LosAngeles + default: all + env: SUBREDDITS + - name: user_feed_url + label: Optional - Personal Frontpage RSS Feed URL (JSON) + type: text + placeholder: + default: + env: USER_FEED_URL + validator: + type: bash + run: | + python /opt/reddit.py --verify + timeout: 60 + error_message: | + Was unable to scrape Reddit with the provided configuration. + Please ensure the subreddit names are valid or the feed URL is correct. + + + + + + \ No newline at end of file diff --git a/example-apps/ambient/twitter/ambient.py b/example-apps/ambient/twitter/ambient.py new file mode 100644 index 0000000..afde180 --- /dev/null +++ b/example-apps/ambient/twitter/ambient.py @@ -0,0 +1,335 @@ +import time +import random +import os +import undetected_chromedriver as uc +from selenium.webdriver.common.by import By +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC +from selenium.common.exceptions import TimeoutException +from selenium.webdriver.remote.webelement import WebElement +from gourmet.ambient import AmbientContext, run_ambient +from gourmet.desktop.xvfb import start_xvfb +from gourmet.desktop.chromedriver import create_driver, human_sleep, human_scroll + +from dataclasses import dataclass +from typing import Optional +import re +import subprocess +import pathlib +import logging +from pathlib import Path +from urllib.parse import urlparse, parse_qs, urlencode, urlunparse +logger = logging.getLogger(__name__) +logger.setLevel(logging.DEBUG) + + +@dataclass +class Tweet: + author_name: Optional[str] + author_handle: Optional[str] + text: str + url: Optional[str] + num_replies: Optional[int] + reposts: Optional[int] + likes: Optional[int] + bookmarks: Optional[int] + views: Optional[int] + images: Optional[list[str]] = None # URLs to images + +def tweet_to_string(tweet: Tweet) -> str: + s = ( + f"{tweet.author_handle} ({tweet.url})\n" + f"{tweet.text}\n" + f"QT: {tweet.num_replies}, RTS: {tweet.reposts}, " + f"<3: {tweet.likes}, Saves: {tweet.bookmarks}, Views: {tweet.views}\n" + ) + return s +_stats_re = re.compile( + r"(?P[\d,]+)\s+replies?,\s+" + r"(?P[\d,]+)\s+reposts?,\s+" + r"(?P[\d,]+)\s+likes?,\s+" + r"(?P[\d,]+)\s+bookmarks?,\s+" + r"(?P[\d,]+)\s+views?", + re.I, +) + +def _parse_int(s: str) -> int: + return int(s.replace(",", "")) + +def parse_stats(aria_label: str): + m = _stats_re.search(aria_label or "") + if not m: + return (None, None, None, None, None) + return tuple( + _parse_int(m.group(k)) for k in + ["replies", "reposts", "likes", "bookmarks", "views"] + ) +def _normalize_twitter_media_url(url: str, *, name: str = "orig") -> str: + # https://pbs.twimg.com/media/?format=jpg&name=small -> name=orig + try: + u = urlparse(url) + q = parse_qs(u.query) + if "name" in q: + q["name"] = [name] + # keep format if present; don't invent it + query = urlencode({k: v[0] for k, v in q.items()}, doseq=False) + return urlunparse((u.scheme, u.netloc, u.path, u.params, query, u.fragment)) + except Exception: + return url + +def extract_tweet_images(article) -> list[str]: + urls: list[str] = [] + + # Primary: tweetPhoto blocks + for img in article.find_elements(By.CSS_SELECTOR, "div[data-testid='tweetPhoto'] img"): + src = (img.get_attribute("src") or "").strip() + if not src: + continue + urls.append(_normalize_twitter_media_url(src)) + + # Fallback: sometimes media shows up as + # chatgpt did this shit but idk if we should guard on not urls tbh + if not urls: + for img in article.find_elements(By.CSS_SELECTOR, "img[src*='pbs.twimg.com/media/']"): + src = (img.get_attribute("src") or "").strip() + if src: + urls.append(_normalize_twitter_media_url(src)) + + deduped: list[str] = [] + seen = set() + for u in urls: + if u not in seen: + seen.add(u) + deduped.append(u) + return deduped + +def extract_tweet(article) -> Tweet: + # main text + try: + text_el = article.find_element( + By.CSS_SELECTOR, "div[data-testid='tweetText']" + ) + text = text_el.text + except Exception: + text = "" + + # author block via data-testid=User-Name + author_name = None + author_handle = None + try: + user_block = article.find_element( + By.CSS_SELECTOR, "div[data-testid='User-Name']" + ) + spans = user_block.find_elements(By.CSS_SELECTOR, "span") + for s in spans: + t = s.text.strip() + if not t: + continue + if t.startswith("@") and author_handle is None: + author_handle = t + elif author_name is None: + author_name = t + except Exception: + pass + + replies = reposts = likes = bookmarks = views = None + try: + stats_group = article.find_element( + By.CSS_SELECTOR, + "div[role='group'][aria-label*='replies'][aria-label*='views']" + ) + aria = stats_group.get_attribute("aria-label") or "" + replies, reposts, likes, bookmarks, views = parse_stats(aria) + except Exception: + pass + + url = None + try: + link = article.find_element( + By.CSS_SELECTOR, "a[role='link'][href*='/status/']" + ) + href = link.get_attribute("href") + if href: + url = href.split("/analytics")[0] + except Exception: + pass + images: list[str] | None = None + try: + imgs = extract_tweet_images(article) + if imgs: + images = imgs + except Exception: + pass + + return Tweet( + author_name=author_name, + author_handle=author_handle, + text=text, + url=url, + num_replies=replies, + reposts=reposts, + likes=likes, + bookmarks=bookmarks, + views=views, + images=images, + ) + + + +def collect_tweets_on_screen(driver, max_items=50): + articles = driver.find_elements( + By.CSS_SELECTOR, "article[data-testid='tweet']" + ) + tweets = [] + seen_urls = set() + + for a in articles: + t = extract_tweet(a) + key = t.url or (t.author_handle, t.text) + if key in seen_urls: + continue + seen_urls.add(key) + tweets.append(t) + if len(tweets) >= max_items: + break + + return tweets +DEBUG_SS_DIR = pathlib.Path("/opt/tfw_x_debug_screenshots") +DEBUG_SS_DIR.mkdir(parents=True, exist_ok=True) +def save_debug_screenshot(driver : uc.Chrome | None, name: str = "screenshot") -> None: + if driver is None: + logger.warning("Cannot save debug screenshot: driver is None") + return + timestamp = int(time.time()) + ss_path = DEBUG_SS_DIR / f"{name}_{timestamp}.png" + if not driver.save_screenshot(str(ss_path.absolute())): + logger.error("Failed to save debug screenshot") + return + logger.info(f"Saved debug screenshot to {ss_path.absolute()}") + +seen_urls = set() +def scroll_feed_and_scrape(driver, num_tweets, batch_limit=30) -> list[Tweet]: + all_tweets = [] + global seen_urls + MAX_TIME = 200 # seconds + start_time = time.time() + it = 0 + while len(all_tweets) < num_tweets: + if (time.time() - start_time) > MAX_TIME: + logger.error(f"Timeout while scrolling feed after {MAX_TIME} seconds- only got {len(all_tweets)} tweets") + save_debug_screenshot(driver, name=f"scroll_timeout_{len(all_tweets)}tweets") + break + # scrape what we currently see + batch = collect_tweets_on_screen(driver, max_items=batch_limit) + new_tweets = [] + for tweet in batch: + key = tweet.url or (tweet.author_handle, tweet.text) + if key in seen_urls: + scroll_amount = random.randint(700, 1300) + driver.execute_script( + "window.scrollBy(0, arguments[0]);", scroll_amount + ) + human_sleep(0.5, 1.6) + continue + seen_urls.add(key) + new_tweets.append(tweet) + print(tweet_to_string(tweet)) + all_tweets.extend(new_tweets) + + + logger.debug(f"\n[iteration: {it}] collected {len(new_tweets)} unique tweets so far") + it += 1 + # human-ish scrolling + scroll_amount = random.randint(700, 1300) + driver.execute_script( + "window.scrollBy(0, arguments[0]);", scroll_amount + ) + human_sleep(1.0, 2.3) + + + + return all_tweets + + +DEFAULT_NUM_TWEETS_TO_SCRAPE = 30 +def scrape_tweets(num_tweets : int = DEFAULT_NUM_TWEETS_TO_SCRAPE ) -> list[Tweet]: + tweets = [] + driver = None + try: + logger.info(f"Creating ChromeDriver to scrape {num_tweets} tweets from X") + driver = create_driver() + logger.info("Navigating to X home feed") + driver.get("https://x.com/home") + logger.info("Waiting for X home feed to load") + human_sleep(2, 6) + logger.info("Starting to scroll feed and scrape tweets") + tweets = scroll_feed_and_scrape(driver, num_tweets=num_tweets, batch_limit=40) + + logger.info(f"Scraped a total of {len(tweets)} unique tweets.") + + human_sleep(1, 3) + if not tweets: + logger.warning("No tweets were scraped from X feed.") + save_debug_screenshot(driver, name="no_tweets_scraped") + + except Exception as e: + logger.error("Error during X scraping", exc_info=True) + print(f"Error during X scraping: {e!r}") + save_debug_screenshot(driver, name="error_scrape") + finally: + if driver is not None: + logger.info("Quitting ChromeDriver") + driver.quit() + return tweets + +def x_ambient_app(ctx: AmbientContext): + logger.info("Running X Ambient App") + tweets = scrape_tweets(10) + if not tweets: + logger.info("No tweets scraped.") + return + logger.warning(f"got back{len(tweets)} tweets from X feed.") + for tweet in tweets: + body = f"{tweet.text}\n\n {tweet.likes} Likes, {tweet.reposts} Reposts, {tweet.num_replies} Replies, {tweet.views} Views" + src = tweet.url or "https://x.com" + title = tweet.author_handle or "Tweet" + media_uris = tweet.images if tweet.images else [] + ctx.bg.post_to_feed(title=title, body=body, src_uri=src, media_uris=media_uris) + logger.debug("Finished posting tweets to feed.") + + +def test(): + print("Running X Ambient App TEST") + tweets = scrape_tweets(10) + if not tweets: + print("No tweets scraped.") + return + print(f"Scraped {len(tweets)} tweets from X feed.") + for tweet in tweets: + body = f"{tweet.text}\n\n {tweet.likes} Likes, {tweet.reposts} Reposts, {tweet.num_replies} Replies, {tweet.views} Views" + src = tweet.url or "https://x.com" + title = tweet.author_handle or "Tweet" + print(f"Posting to feed: {title}\n{body}\nSource: {src}\n") + print("Finished posting tweets to feed.") + +if __name__ == "__main__": + logger.info("Starting Xvfb for ChromeDriver App") + import asyncio + asyncio.run(start_xvfb()) + logger.info("Xvfb is ready") + time.sleep(1) # socket file exists, still might need a sec + + run_ambient(x_ambient_app) + + +""" +:cp ./apps/chrome/chromedriver_app.py app.py +:cp ./apps/chrome/chromedriver.py chromedriver.py +:cp ./apps/chrome/setup.sh setup.sh +:cp ./apps/chrome/xvfb_vnc.sh xvfb_vnc.sh +chmod +x setup.sh +chmod +x xvfb_vnc.sh +./setup.sh +http://localhost:80/containers/edb88273-c414-4b48-9a14-682317018cd6 +http://localhost:80/containers/dc33ce5b-f37b-4d65-a803-c7db4e045cb7 +""" \ No newline at end of file diff --git a/example-apps/ambient/twitter/icon.png b/example-apps/ambient/twitter/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1980b44a971df4c20f9c52523f5513c7fa04f765 GIT binary patch literal 453872 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¬ zYq0~C#at2)=ww^LIM$)dZ#a*ndBBrsI3|23GaJm362gG=XgAt{$sN2NhHT|j<7K;S zr#uZxtfha=+k7?@tq-evp4N_n?Mf_ylQShL$nobNVe|;rSsp8Z{&PZQ=_#Cgxr7F{ z!V6i{eo!k?f|x*?);JBpo|h{wcAEntEUV3bJkNidCQM|Bhuh42aa{z80|r(~0x>(P zPeTj6|LQApa6{>bH1T>?b6LBHA(iwT6aHx|O7vDSN(KGpPPIyip+X!~r+?rO)kyz~ zh~8?En0jr^;Sp2jblrPTt_K079U##?{)qBF;Wye}8Ndy9!>KpS9T;QGS1bLr1n|GA zNkWNyy{O@UbLflLGoyi+twkv81ygyn+zeJWR|U^); zKZ^Um)NkI|NaQ`nGNJz;5*3*>28~J-J$w5VW%Q_)2b5+IWOjLi83( zv`KSr%_vQKnEh?u(E`3cs2^DfLyURr^mohI5@bcMGHg8Z$#hE(T->LEwzDsaa8r%- zuCQYxwzK)q7{(fObPnW7El@4>QK5FF$K?Aun;%Bhw_G@wD=DEwb>tmqjS3h@7wXwDd7+hI*>%JiZ zE@Cz&JsJlk&l;I58>B~*t8SvN;p@NmbjbN38dO=zuma_Umhi`XxtBS-ojo%z!PuRb zs0;O9>aPbOsG9`6=DfU4{oOE)ak>Ouqx$VHg|<%CN~s%bYq4MFm3oyzEk;bb8?%epXXrnA>j#LHeTE`<1L)ZKbbeHNn4ieC2G>yvf{n~|gunzZSsmi@(Y zbJyY2?J%)>!bI_=B_4zshK|Ab z?;c1AM-UeFwgrSoGbd^Nxe$N2e#K|*QZ;z|e4tZrm-^ydYoMZ1z$2d0Yq~t%`n#6B zeW~jyk5)9=F&04!lakONXnn4vfU!^Tg#dn_9s38deM7bF7S*70J zu1;13wQK9G2Ytkj;|$^3xT8euUyMVK6M0If10l2@v*qhddTK3;S7U=#Xpt`G2~x(8 zP%;`Wqzy!HpFh4QZM~sX!U>u|@v8bADoNTA6=3tLB{L8R9t;hF(kw-RwGvfY8!1kM zIzxD|TP<^Nu+iOr+7%Oq-d_JHLZM~&24gO)-11KnYCu-XiBG9C#E-=Gi1|OFIy+^JiAXd z+#u5lNr*HPhxPZ-dP6sy{Nm2z&_FE7s2ylpwI-8fY(Dqfam(~>OsB+zAgJ2Ed0~s3 z7A5(IBTuYJ80d%OCWW_&7@9$&F}$Q7%frm$dCO@O4WMKS$aXEr#3dO}X2P>Q=&<+J z2r{dyxxSl|u<2SLal~U(VEDGg@JEQ;Nw9rSVtUijM2Yu70xMhWDe8Cl;KcV> zEQsktMP5JhXw$m96la;;4*J^rJJe-6a}ICx7DP@J{H~q?c(%`pX&6g)wqnV~q9~$* z`15znxY2S7sr{KU3L+`cJn3QrZKR?aisiRLkiUi`XrYy!AvEM4@gcnhia?+`MbOP< z{~;D+OGQ30+n=LcWGZGZ3E@Oj(O|O1!c2Hk&U@X_p`W6=J)CyoMebHDGPAM6= z%ynsgLYJ!dIrDv`j8S;usa+i^&Mf#A*O#E*(|H@XiYlRDM zB#x~M^vqODqjG@CM6n*q>5jc$>zL_np?Y9vQ`R8Jzn|9P?-Va9lj*5rO^|y1bE8<*zJEkdAKxT zh*8`{>_!s>>A|qIxkR3;{bo(%^;G9(UtWq){pOd#!^49>RKet_$)aD_zCBr0ImLRp zIY4*aj%6@d2n(bAbZYI=Xgp{y(_yD;0}NV3?dlKJ>lea$w>qe=yGD!jjkU?1V=b4T zoRxgqIE-S8pcyUKHC?QKb)yIaixLMt5-l69o;&b+0154A^n~+vhFGx<g22I)oYOOhAy^FdT;V-MOi5+oIWzY ziphGL!-$uUhXVTa3y#wg<$Tkk7y1sXlt?Isok9uxsBP{_MHOd$_syD6gw z>Ovh)=UH{4dZcY)e+5uCj*A_NNl2=nJnuT~ly&JU)Njc%(!fOnD~!RNm7w=P0Bh?z z{PT2(2|An!KSV?VuXg58x@p2MXu%U*aQXFku0hU8K$>9vqWt+;oIx#hUFjYe`m~{; zp|$zE9E+Q!K8UhgC}&bLowSMWSIU#KU=guwjL{bbI}W^|2+Y@aSlTBa9n{-!fX60` z$;ABOfen|!;E1P(x6vR!q(%>e>tMV0FmawSBzOP?N^)tZEv~U~K}x5P<@?U9*AA8J z(>!YeJ*HZ-3)>n_zKydooMS$zJc@DTQJXMDI>>hFH0d@4&O%L5D|waY?EDz*)n_j_ zOP}BFzQMTKTwPB|I?J>l&Kd$NlL?Sb;=EK{>Y%#&c_2I@A(;V*kH)U1F;0wL#Y_; z8!19+aPAI=Mv>B&pfLZ}9r;KH`)QTc8~gq}&c^n(n+CJj#QE&80N?NYY*~@BABl?F zRHOmK1y}D+1W}uAq29TG3&|0Vi!dIai)H$?y!FAKqrc{oDx(KiR@h+b7kBe%gx=+r z{nXg>Wls{9b;sC?AMEO&*Rqko0Dx#SdifMcn>a$g6Lu<a1o#4J0t^wv`Mm^F4;h{MyEq5v zwaj1aIloxvzV&7+GIltgaj#drVm)7}EvZoh`D6mK(++K>E(9_7li4nbX+rzc%?#=V z5}`aq0w%!!tpT~5aV!)}b!|n3wgmm^kkzxpjV&!8V3+E9w(i#RC{GiB0g0!R_*Wf~ zt*1)@FfQ<4 zRQ2g=H0@!+%m&|cT%_*o?*tH}E^A&O|NGyjfG=Lb0Fqp2<+?`kfqM@l`3D95z;Va- zmV3X7q>Ba_X?777@H@-Nz-hp2kDw40GLS=@Z2uE$LYA>H1dKg0N-&_AqD|jAr}Kzr;=MWp8zhY(-P`HUqatHe(pnRO$yn>XurHR3;FE4;{*V>lbPLP45s&5>m;FAs5$=)-9sA}!0JhyV6b3)FM4Kq#@8tea9E8uN$>d4o z{Nle`2#bMc<>X!51uC(RS$=sUQzF0XV?X;wAD>oS$JtBVUiR{)C5wk(nXb}8Y#JB7 z8O4l0bwm)@zX-lphnVXmpVLrNlwBj%>Ff7C7j7Q$*-J2%4wZ;hBa@(5z<*@VX$1=4 zQBsgyh7Uu;RC57H6y_ub?fTTgMpgCwWsqXk#0d$^5s^&B#O0Ap54CxTyC-lgsHgr6 z(=DZ>OdaJ=tlDpOfg{=Z#ZuvWh;J4$GL;4ixB;3DoDIdO^Sq#`whyIs=@RtRtQ*>) zn@{^?r{*H~GyWLe&Z%?{Nz=Z*`u)vqY{p&3-hSsKD;)w0-?LCF;n5mh)&0)=bgsAn zoPR}B;G~eEIp7MIf(-be0IHQftseiNATI*oL2SXhTadS((8A6ZsBd?__Ie#4$=2(L zsdd&Cop4LwiOn0f5ax!{Pcd7mJ08J6;dZ~+9?-w^Vz8IB%h*E<*{T*j=rR^?0nO5X zMM?A<4KogLaZcllX^FRozvSXqd`pyY7cQ>$kaOF8f&F{uLk3qwMc?b|>utn9NZq0;V5u@(wU5%}-hmlpMP5I`{fliSRYq2hU zecQj4kJhMDMWHJLr%Orr=RBAyk?ZV|W?E%hq(PIV?$_2aakIo7gyPi*&_%hv0JV|v z0R4u00*j9??oSHYW~-l<5+&LP`s5;>l*e>P;>GY?kY#?cv|_@7Pty5kXx7{63~*%| zj5%+pxMK{{ppdqbdplP;)?!d&K8O>0gsE2CbSs@?Y>LBd{j|e4va+(DxA$o3+Vk1M zRadoQx=8=GvQ`v>@6H}wNtgGF9&D6RE16=%;zf;To(_iu+PP0H*%z%DdHmdAEvDRh z#;;k1g!|7P&K{3P)5*w=E;%iJ0+=(HyxKRG{BJDa&qD{APvMLvaYq=K$snD zytecCjRQY>_#@F>Nt)O5730Z6d$;CAf_&O|ZbW!sf4^sq+1C9j)4bHJUND_v_nybT z)HMI2z!t8g^_Horz1RX%+mEOKXh14T!}@coTI`Kg1VWazyDHa?!)p3*$oJ5#(@!_e zw{DxKn*xY!CFpCs(}}Qt0Y#m86Z`%dOOMQY1yUnF139A~Gpko-#uz4sKgUcf8PtrI zlL*8180>M@<+`I5hyUms|!e|&bG-netCtnl-w z{!{nY3Urylv!5`rlp&1bFqqiqgIic)sJ=b|e?m{7>6${qAJEBO6Juj3M+|<_23|+< z7b-1{?UR`Gt?MS&9V)xGQY*4`Pmj~Qnp39{t7(-3Y;ywUJJrpAu73o&*yHpHNhZDI zK3@GC z|19SE>_S7Ftem5NWj$4ff>xq#*=8rc&9=Go11%NLP3il_Z)bz=Is<8cRJ|LMr zOSnEIzE`Hq+H^fj{Af{zy?RG)&nKDVRRC+-4jx+1s|(hMJ^%MjLH^*6Ps9B~_AYF7 zMr1LF?m%v%PN=Er-d`>hdAaIL3}+mu0jsrr5hnvyI}iJH)UEQAkawH5{9B8F9mEEm zJwPguJ)LU^$o25wPPeN*bX8YVGwu7qRQkEZZ7{q>=XEArK6-i!A2;t-7&A0bNS_8T zWKaKu1tXKp#51aRytCnQROe_2^evc6E)Wsa+&C+#@dwFT_hg&yZ|X|&;ml=ji^g$n zA5whw{lW$f^vBbrggofc2!3CJi9&;i4W&K!mi1A!>(zsd)z^vskG_CkwENP(k^o8o zR3;dA0^OdA{-B>b9!f8NI>0}KllH7HUbH^NOxvS4x&1lkK<_JG)H|dX9`sV>s!nNd zuP{((6caI8DxRMa9iXj|uN@>@$~=}WD;uzQyV%b?>+#jsaYW5+%eB&Gdc3^GWLGs!+Vm$Jr!a5(qdpcisb|wmSaQqJcq;0{sJ<$hhLecv+xX{8NtURd=!R z#KFg4rTC1GvTgUA@U&+}QL`Gz-t#aQG8H2VCYsJuuWRl-H5*^*j=9uUQHhCJ9Qi@N z^Lx!9IQ<2zIc)8FjG2ydpr`)r+#X;C4o(PdCqgEtK3qqYMVK0GjrqQCm>|GIxPeZ^ zBp6oyY-ZGuen7cP#-P_BEl9;XH2n@=yu_q?KNIvrCs zvcq=-g?4&g08DUsN#$lr#CP_|lGrLxStj<=Nz1CgDYXZiRU@$iI87Hq{+GAhQ>xtE zG+k{|&tI%r*}GTD6LU-rkB-{8&-y0chyt_^DYV9_;EtS2En?Aa)eLY!&kQ%?1@;=w|jR`qS&zEEHJ#o%Lwf%_zq&JJHP9ZK0vRX4c_s- zXQU!btO`61c*;vuIOAeyM>KBI11$Y_l*E;c>*8`7ZnCMFDCOdXB;M1JBSNm7#hu=MCNzf~L&(%KLae;+bAj-RwDkKFPO z<`Y*`*V8!p-!V~>q2buW5cBcNjyHjE zGiLEKIfapuBUg6Y;O)4oBI%IJj$g`e{wuSOOk9QMFOU!(a< zZOW>*IC_P^P@^vRe)^*)GGd4{wZDsczLO>P_$P{(xuv86i7GF;CScBKBuswU%g2cghPg zu$cat?fs3}QvTO$L4J_;{Dp=AIlvD*o3eSzw{x+dDd!t9qB^FD&G~(OGv@y4gPy~8 zSm55%LM+8RL28?9BOM#3^SH~I_b}zD`Fp((N@n-DeROg@w|79<)254-n8pvUYxH@7 zAjW5U5t!Fst2zAtvf4yjb5#+MTUWhJs_SUEs8Ce8%V2lSCC-$Vlw%w3BwrD9g+Q|= zLyD?t#OUVI;UZmqmeGcdJz(614l0j5vA5K<^GkX$#n!m_#A|7{vnaD^_I?8UwITuU zhh_{D>y%ytF}0^O9IyYb&*J~z`dZR!-W0ITa^$w+j9=eE7UwoVBC8zqU9=!#Jk?$G zuiSFT%!nYu|FgnYJVuC=e2n}|YU-NA5BH4pM@&-V3&$kmthKXNl_klh?BI5xnWd_? zAo4`!VNnr|B@RE-(0aOT6^3-FSrX~ZnxaTw+GC%%$+!)V~%cqsIa6hWvkNi0t*J>Aa{ zaVMO1%o&`HmMDxL9~eY%N#>>N$k6$gF*jvB&9A)c_kf2v;@d9sygsgpONi4#?{W!h z6NZs5>dt2rCSk!ph{JxLlUEbnMj+SrL8Sq#ZTZ{1lPB$;13Z;AYY3-ascq#v>xp@* z&J`#mi?69R7pqTssIqR+BCH)2t9iQF)0~A|vpO5xS6mo2bfQ9-0$))%x#QyMdb+Qy zq%_|-Op@L(N;^g?xX|^`CV0!etmikAd&3x}gg5OMvILw{kLHj)#^U_vA{k})h6X>A zldKJk`_A82ggJQui0Y&tfUCLn+SY#A+Iw)IuxU($g$`#lruZ4cR7r&6^tk}9OW?+- z(^3BC)bT;IT*MIDnnv5Gd!kQ9$N2a5fOGba3_`Il^NKuiGG%#rIZZ)ECOlawlb&Y) zs3A?vsvK9ar}=)NJee5Kc9oMGq~h7$LJ6IH^PF~~Rr{SLPh1%?1A+^!(LIlJuyr~R zOw~(O53oNHch-O1Ezf&u0_1pBi%{eP$jQm~vll)GfsccSdYeGSV*N}o;*g%tIsn9a zE@8Rj8_x}PK7<-VTSv&@CB*6!z0mq7FIl+7(<(H9L3%5Zox-}4%K6>amyHs6v+~?; zWeT%HQ;Uv?XrX&T0pD;j<1~S<{_qmk=$G+~r`zd>lD4O}OmPg8kU5fnFT`h&e6EaC z-=o!P!wRGco}a>V4sLQd5g0wlH6x`&3lc?Ob9i`4Y4)t2&;DD_2?siER?4(~s7gV;~V58^K+ZCLjH~jQP%%!mP{_J;DUs#lolHw-&t< z;#ErXosPH)TuCNj(KG}+th^g393YOZrDj`QU0szGDHYl1lypY-cUywq_%HRfSz3>% zVk{AXY|Z&Ik1E;UTLA(^z^zWNNd^XCDgoL;i-4Ts>b`3JkGscgU&e932w}=&QBFvA zL=(N_5I)W%uIs)qF|=jEqq&d&D31VmbeJHXWL~}JcY%=Wv#<=U_cN@{tNqoz?9J2L z{tpM}Wa2f&U2|M(+%@eL?0s)#X#X`ri-d@f*r`N-0yoHN%5s6R3{;j}(*N!z2K)qu z*KuxmKSI@{4l?4)hUQm+c9;O2r2~67>bK zH;;rd;76r=jOoh~!GvE(z+_W`KR;p^{abDz%_PK+|I0(+yk%Pv7s}&@-shC0KVel^ zyji!{WH^M&H~lQ=nJ0dTL&uiC6iEkb_DfI8&_lOlP24V)+#F0<{&dthZH#wlkoBj* z4x8`&!^4Y+u^n(<97Op57Gf2T^NOaUR2%8s>z}KjK8YArqPlU{(-J~XX4|zNq#2=m z1St5+o)bl%WB)Ty99{;R$D_@6LjnlvH*YR-?+A6KspQ(2pi`7JQ#v2~L;_}Yy_pKNg@ZfBoy7g4n6_pWngYYi{FVEIn5k`pEF+ocET}72ps}0)0>N^KJKL zYrr(A7~HG)RB3p?UZJ$DxE_goZpJTsJSF`7z<*IFvcKD~at%`i_FvG>!4 zXPFMV5ZWS?l@e}e`X^KonsxClLBERJzV4^*K{mDLGE-q;QTFYl?s8*sP@y3o6?hA* zqhuACM;5_gS^Ugp%qqx#M&AAG_qRGP45f>)v=?b}E%cX>d_APn^)u72cZ;h6wHG-` zAnMT3?>#YY5!~;Tw+}Dgf&VFMEpWgB7ypl<4q4>8hPjVVrAB z*BGg}IhOZ1_kOsW?V9yc*VAWrivqykfL~4qHs|4;vS?Ds!yx~Vl@B67@g`z$1s>8h zqn&T^*FcIE7>aKiGBaCK-IeQ8+yZd<{|ND|e~Q`6c!T3q?3n*fhlj#j`8-B@scc|S zp@fiKP8(~hK*=YlB?&}rr=C7NO`GhGdB2nHGxS)xEvGp5mmkl1u}?H-7}I>{zmj-z zkThRhe`A8vxBe#m-quPZd4>QMok5!EjX(u5X8lkL)nwrtR(kR;W zC#GRYaJw6L+v6mCatoZnoc4uJd`34h1zJ`(S%Lj4}Y?o=o;LOMijz^a_g%`+l#f0|EP@aAHoI;He z!r2$;Mj_9dRfQmV`Swlz!i@z3TO=R0l!sHlS8#Q8t?>rx-++>}30?(RiG*8LmcBiG zBc@b-=;G!%{edlJkQ6u_Km0X@9;I&wi{dgQQ-|ET_N(dcO%deW{rAbqXFiy#xpGPF zv2AQho+))1n5aHQt{=n!WME)qeDof#OBk9JmCI5SGDKn1z{L_h>3tVIWczokqST;k zKVtSI?{RWlreE;QoxV@j)AGAKOfC9cR8;k3k}+8HMIyd_=yZ=&Ya9ZcxpGlhDn%Zl z;gMi$=JnNpU!BihVQJH3$9qa7^I6p3c8o$Cu>;ZcqKW4wQz7JU87I^M4sn{JWLyRw z86{LK={-(AA~t-IKS5j66a-h~;m*g1jgSA5YS@u3;PWNbspnA*U?JY8^s1?@)_S01 zlk<(v&Wz3~DU1R6+sN*~eY5yYUkB|uKO$N8y-YTk!u2~4^*Sran=yxQ_1p{laozRu z)KKzw%FSKoK;GrVtrG236vzX){S5qIE!65$4ipuazqab)g;3O6P}em!&h$Fn|%ZmYO z;|MfCJepP1mF)Cp^hU9VnE%J2hxms$y+9X%fw;pNVfoc3&`844dE(PG#;pzYe?R{@ z1aLjKTVj@mk;P#SL9Q zS>hYmUgY^RE^y}F<(Dki7+YEYIkK{Du?7+lq?f4(5^{9~k-f^}=xHF6>A$rns=mPZnL!sB0cQk6Sio6|41=4Tb61pWNCaelll90O)VYb|9a>={C z=*&#~2FluIsi~CDypC+@7tA%rsdwrJNPm;C>!)ybE31diu>N4|e2|K4W!>C~2Y4Ms znKV!=QWT4Oia(^A?$E|#id*Hz3%uIUaBS;7*jI|eKBgx$Sbq;&@Y83vN|4Od_f5KVGkGZO3 zZJOWgCut16xD@#OR!Oe_FygCpAFDAv+s(vs`7lz3{B=uMIj`QfV?|0u$jvHY5Xkh0 zHs6kOivDtk&Hboh1eI>y!}-xs^<*yVc)inbgK_54CL=B`u5GbI9D(}Rh7c?8^hDjN0Y%*5k8+A6Oe$)r(MKv++4A1Oz{K<9uYMg; zlD06W^1TPq@r!j}rTZTAMQLs0Yp1>B>_~d#-1k5Sfsd5Ed#$F; z(eYGP&^gTljN4LYs=Sx(mA+KLyXcwoj$i69^ygnp`pc?>mf;X7W=Ab6EgU4sq5t(q z;E)T+KTy0o7@BGNEzEZ?%=jYlv2hA*I)`sSs>?#C+nyA|l$nmrb_JR#C4uHJecq;` z*eN6o5`EXHB2@VC+wL_%bCaJdtcwe_dFnwfWdIV>I)a;JHig0+^pchO?i5VXAJd)Gjgze2s$f8p~r=M(O zjF2x`BJ~jF^06kY?D92}U}RUFDS<@}!&7XofocRz}avS5P0ecsIwtwFIkmh}85Nz-+c9G^#0s%OW&npNU(&lC1e4c$I}(*0K>1mj^W%Hj}9 zffHEx($E#U^?B$11r~z|QH8D-`5Y#O>NmTGPo*sOUz3KI%@J%$we;&*5s*plvSAp! ziy<0I9Q~Z<&f+zm_Fal@p9uvaPZQy}%PUB9z&K3D5Dx2TjFOLG=r+ArfyTDKU`X%| z^%T6lbLcD?JV_+`#&kmp|Cs90A%j#GgJ0S71$UIv>dZRLQjD+Nukw&Rc*t7qzuOPL z5X&ganyzm1DvOfOL17zKv9m(Ir*EKP-kY4X>Bn}JhMY1#bGvxHvAyQv6drz7ML8{T z5352tJ)D{C*Aj!`XJkL~o`nB?F2~LXywOq^ybH<+{Sw&ra(7 zR5so3iz%U4;wjg$8tR$~q`t;iIX5Q{cp_ML7A86k9wC$w&y-0q5eu$!lJ6NM58Z#w z>nR5hgRhD-M7`vx8amAsdMURpCe^mM%iHaOWi)*>250sEh(m<2!Ew)YmW6cx&a%-m6jO$yH&_=yb1fYhm+!< zOc)cs?J}sPq_yrONhrAor2IzZ1-Ce-Zci@V;S7rMmz~E#=STS%L{CswVecb*JFwpR z)}N#sFJ;Juq4U!Zm{F|~g^@Oxw9eD$S3 z?bqRGACf-c_iGFxw6CUJ-2J)5&}W~l1TgsbW4ZBb)64!2-gq8p`pKJoDl7`f9@H0i)8$Vz2Vt{55}s*rUAh?%Jk@{Ra`aK(Kg@CR zMGok4&I6V~I*a}aa%Z*!ng5C9Aco!xA%@V}JjGAMVX%gW$TQe_rhR&jxtozA7vT^+ zScsKuUmhfv^1Su_{rm6a3)fo02){+)>=Xvpw2hY=rv{o$!aY{G_ocAhsAEHq%XDe0 zPcscW6`q@Up77zV5}mA#q~0fD{-s!$UHP?_-|vbKnOKYiPIlr_FodDt(DhJ0x-w0c z;ZrgdkIHy3=g?!^)dSZ5F;F`ON{DHRFpljWPNL3ymLDwRJ>LgWwM@r3xyj(=gN|X=LjhPEYV0dIHwGO^*o^b;oPm=l6|0G{x zpT~gGar|I?$aZ_96!CDt^asc4i+O#9Zs8g}sge?NwWy5-YApMN6ns!_SJLDs+ z^&>?k=cM-Mwn6ome`0@$v2L`sy;RBd-=s2kJ#-yaoclF(?9uQuHo~SYaQB(rg@+E1 ztFRgTBz3u>C~2ZXm~6TVee$C0&IJb!*MrxNvV3dPJ>U0fpd#ra2G@^k7@krM(RRzL zg}FWdL?hL|)nA4C<<`=Pb!np+7)n$hlQgXMTWhOVY3_%a3F_Cl6mYfD-U;e}!`lT= z70_OP$Qx22*k#e6pQLH@y}dtb|2Oa;um3SV?B~o>II2$@oIq#RPTW5H$ds%Y*CT+sUS&}?+j+8dJHevm@@TFo`CxcTa=W|>51 zQeDT^6ujfIAZC6Tr?j}(wa+0}7?Mo$iCWUb>K*BuANsa1hO~Gz)EDuQ+W5X4e^y#D zpAv}vzEZ^Tt)v+Ky$~#7!l*&swG9{zb4Po<>{HC84GWVir446c>DfL%bHWqG!;VHx zzF7K&TMBY6CG!q=qrHt9XxYE*hwHY}^8D<7kK+;>WcxcI_PR@;#K({;%??q^Uv-P` zoo)9bo=tXXmk$+x$?ce=@q=ci^q}O>cGIjz{mR;Gi8OgLZEGDTi?M_SfiteA5$?a66)d+u!}wD@4{d8y7P7pbywt6FGQ?13Kqqyq9Ti@28NX%FE8 z6*(vN3c<$=p6j$csYQf~4+yW0cT|(QWly;8anNkFGAv2-mDU_R8^hb#T&t3|P-Y2o zJ0-Vocy)c!DY&_wm+m(3Xa4BV3&#a91H6om7uC;2eA--ngZa^n(x`$vMfIr344VHp zK1_@F^G!+j2uTauNf9xmFwS|drUH68dzH`8Y-gw=!E$WoT302-+`B1sr_`QXGf@)S zI>Mjcm@tG=Rf#wk#xq5L%Zfmj5eUK{F&=YSy~F`k5k#n2YMl-p+;@GwS-^7crNKdq zDDLZBAN0pkE(b4CIuDKxU+Zp%t#6!`?J2O0X#H0_{uK4+)Sr#Sl852I3nc4lZr#u6 z9d0x8LOdcUYr9DGeZN}3+VXrDN+vn%6#cD6R&bzh8f&vZCyHuFGoaXGeg4l^oLU9n z1;U!smE;L+Yq^TaFT90}r4Hzcca6yhv(LyE&6K0$85tf%O|u0w+OH%mb;gvEhB|kc zBifu-9!uKozid~)_4WI$d-mcT;Wln3jok^(I*hpkM{owmpe0ayZ+bGNWO-I*fkOM9 zoI}IN^z;&rfMuKMd|S{F`*Um`0EgQmw#X0!FLt=J-1FByZ08?;mUqM(nT-~oyhZ+d z-ONGR_IYCJLH_!RGXJP!e$;G<=r_u(4M+BCi^ZIampEWrZZtfd-Q=va_by3&xMJC= zLHFAOX+(%+NsUTwFEw3bzNVN|_!HT?6f0`6arH5~k5qEU@0q8(>ZEXfhb$pSXHc~6 z(#A#}Mg>V4ov4Grm7IRW!tKbULI|L;(NXbr(9$T~57-L&DaCpyyeEan=T4 zU-bpm2Xoj@>{OzAWHLV{wYkmHk3c)W&vf?#W8PB*f-QAeyhhf+hEiw9w8wo_Ea2uw zp>ReYl%YNoKRmht*_B%QxRv$$=G<@G(iKGd2fTrzbAv+(8-8W1E-{rd)CBxEC3N zI5gA`s`(~UrWOg;UZ~2vCvp}}fU%9s_+zPX$x+}Wrh(X1hlffbFOS4Y(ihil`OW#z zBK`i-$1AV4R)2C$2+`Nu*?13qMb>_2J*B8r{-qTV6r%X6{|Ltm*GwCT_rK7A@U2vB zNYt;oyxS+L>X%Bxy+cSZ`^POi7mYF;&74O7MSi*W*(<~PJa)UlBeRJ;IAf&OHR16d zuJ^M;zF9DCqRJkA(s-?-c9DN7E@iFe*}m>wvhbmBIc&1#Ba5H$|kdW>U38|sGySqz5 zIt8SqLpttf^!vWg{pCK-{R0@7!#?}$z4qE`&DYt0IJf@9Vipd3oR<6^at|vyaz#~5 zR2L^xQGipHEhtmxSR=vg;O!>F`<;d?DoRF*8HU(O=mgN`YUqEhEn@7+ylfEg%KBR2 z=;Z}deaB-3ZmME(_ZvDZ>9pJUBGYDi&uxAzWi-T`Llld(7&D7DK}9=nDF0M9cQiygrm&F8RVmag+-c)W=4{W#} zAsXW$HfvosCHdglA2`clh29BB7V9OrvRHX5O@%8L=)~Y4#8?|(#rMjgY{wr6qLd_sq zc;NUX#a9X}BZg!u%1X8|g6Bn#>wtlU$CF#-8n~8eHIj!l5S^it@GAym`mn>V0M*Yl zK(D)k`9J5Y%L|-u)&HJv5zKhQFL7>*=vqC9!I>w;fctl+$U&zE`Em#BmKi-TMjacN z4)QRGygMlT*R<{K9S7zVrWl`|9vd{~J3I7iS7gD& z)G$&E?uX;+h3Qj$yb22V_6@H?Fg0GU0S+Ih$WX}jc*T1#%NbYp+!Kp->|OiiRLJ@- zbYEW%d>&~C$3*v1D$g!s^I3NID@Xqc^Mu&a&ygOtxdxTIXQC9pF9`A_m3}rugP2J+ z#ZeIaUl3;iC(AvR6DJA>$$S@(84qwvc$GSi8kWEOS=Q20ITzPdHv8a*ZDSG{p7l3y zi;xtZARXUWHKnZ*dv~#Saks0~ymyaW7nBA`Y;e|f+|GXWqyNatliG`Y*`Dk(WabDN z5_VRlrc~rbGRb{6B$@GPDTjpU{L9Bs72`5X>YZLM8W}=qUic}$-J1=&xLxZH*kuCf z4l=eJ@UNW7;?WA>zDfZ-#Fvy2@@}3B%j5j`Uo2+O4 z0t897@qHMkMt8Ra^r|({eNE53+}$9(+?T=nA+KDPbj&HZ`{Mj;#5`pn7s&;-8SXoT z9st~Y2z5M4vpNe6crf&yS;8=L^pBsMY>?xq@cSHr?fB<5{Qv75pDhaeAAbKnD09%v zl~3oJl{vSZF1U3Ym$2tMGRe|eN5NuH%!!ID9=gMZqFH4xVa8R8F8gj}m>!rMp1Rye z|IF*#>4SEyi7|3K89Y@S%E%Hfkw~Yq@HOHcp$zut#1JAi-#Wp?)Y)1PD>$Bv=u zFN#yt&e8#TI<=15=ej8*bdJp#jA_6pluG?~(t;?Z9V6M4l_5dATmvO(49}H{L&$zM z0~iRY&g|d%cx<9nFmnRFVK&Vsjf09oLZ&0QnR#DL-WYy}OSEjlL}2ILdS9p{!OA0M z#4Cug^C4#cn2R)zmB9Hxg6Nj4Nl~P&_g=YgtymUO?u&f|(BFmGSOsH!`1u}ki+p{N zmbw#(1B>irl`@ejyhb+zQB_%ffGXN3J$L||i!5hM07U4`SO0(9{AY`TezuH=UuYp@SD-ZaIk{zz%63n*LRh%%D)z&l##xXcnD$Hx zjJ5>*8FFa<(?vuTEA-^Z(%XzYd;zspW4YbHIGUZ`(L#`uaWQ)8A?(kp4WFcZ^~K>8 z>bKrTAZCX)tV%3^a7XhK;lA^?-U7j+m9{~y#X+CQ@3NMEE|SC6l>@M1>jt&2;61iQ)**CIEyi~I=jN!-Zaccl#a z31CFvTI=hXXVp&PO&+?P_2aLatvl8o03D6dHJ})Kbq)cMh4|3Qr*6f6;xjY#2==_A z?%SexY}Qiy>eOrtRCgt;^S3tui9$0{tF-7uCqW>$0I%Ma-O!#Tov|%nVOlW?u{~^e5Qj?Uw9`j`sCdgNXBaedsaT{Ga7Y{>?wp`Ms@urZiw_L+;pwY`7gOfhqsjY!E zFp`=l48c3z6BDw~LwMF{KU@A0|NBR=rzgY5P>C+enR$LB%3V zDiq)hnSMET$(v#n_P02@78cMuLVIcfg~;kSV32y5e6P z$x{_xIzh!UVKbnw@gP_#NeO(&}bM-N=h2F2T@f z5zgtE+ssSz9Rl0efF}GD_ksaj8d7(NIG>D)w{%0?Ohr+deGcRn-lzd%N2NvNQkkO# zDUWA@E?o2*wZ1pOJXfw@qsijOXez#JBP^9|Y2ESBN-7Ia2aqq0CQoi$iK+4?*~jWa z3fc<1Xt!c+Cy0GmI?}L%RRoT{H;IN(B<51mAj~I}I%{)qp5^ageng9T&*M_3BZb=M zEt6Z|lA9`st;=K7SAizDPx`zvr0)7*2EWgLh-Dm(ktZrH^=)S9om zsSW4!N)n&61XhzUkQD8UONy^#l(n^)hCaqFnC7d$9Au)A+20EDkNyN}z&<^#e2GkqUsJ#}~stA`G+DE;J0@)9K(#<(;7dQ&gsgD|LRNNgN$FZ~nF|tAFNeZHH`CS+k0{$4+NMa zhaZ|Q=TPJw8D-e)JBHH>feTxq3l#je4NgGa$Mi>vObMF6{{DU-Drobh6DQ!>hcyrQhEmt%dKL-TGOI;}3EAH|x}?~I0{ z!G_Pw=PjvP9I=OxKnM0+7|S!tVB7@AR(UW0rF1YVuf(6i3#QB{8G3^BU+vEPIx6!0yxT3$eKoW1#2L3V+!E^a5^`uqx`J8bNHEEhbxL?qfVCMK#{n6fFy zjEq?KOhjd!u`V>@(~g^bYYK zd?I&JsZpmG0)6|3;IT)&@c1TlX}l`9`iR1+T1Kh#1n3p_&uM*P)(-6m_xcF=&TU3S zm;ZOXjtSc<<(pGOv#_yQz)wZhHLUWcVN*G`v9=UPZ?M&~Ka>0IGXK)!Lvk?NTwTs0 z*YLcaht2Y{FB~xYy{b8CT>Ci(XQ-#GeNdpRbB~{Ak?gs@5w(D%8Tz{3h5+Mjb6OvA ze;zmQa;lkT)4_}2@8#w0LHwJVH6~$Wxu9=!&*9~Xt_#nP_qv_s9UVVq*|P0yZ5_vW zQWy6zhVtN1*|y+YP9MG!&eg=)+6z|%nOo-!MtwN{8F>D~TRrgu#^|L>}+}qp(9iQO@u)=vY z1p!^H_hPtrIHQm3hF^^qtBvmta1A(cc}c-sAl~wOhMGO6=Z(Y~MUjW7=$LxfI`>X{! zIC3Qsz@2Lbwmr7(alfY*u2eq=L0r56|EsIj!o&N9XRgEQO zzbw#BektQ*g{NWgDLvFNg!bJNyfPo=G_Dzl!L^1&>|Om}@hjzsqj;7*qv||VT2D6} ze+itId_KBW7TJ#%na_2A&&W*17nHnPr->dtt4968Qyn;Y9PoLuCE59T#7%GADV@w* z1Pw;jp7wvCjOT|0@RnJ1+TeV_;#B|u?|A>z;|75l{@*AxeS zJ=U=Fg^B+v+4yKZ0HXnrlbk;?h?~sYN3){6-HLQ6VH0&KH^NMwVJwJ}6RJZwlcKP2 z<#mvk=Zu}TzJ9_ek){)D1IG(`vRHfxBHF1-TAG^j-z``HII61y?)*r9BmgYuVghR2 z^HBA8`_88U^loe)F&yU$%M|O{>4t<*CS@Rd(AwQU{uT^ntSgc@#Yn)RWUYC^>KC@x zm4Xg&kLN9#67?l>E7V`@^Y6Lwc|a!`={Aiy7!FfH{X;$6Fi{`1oO5n#W13ZmOh zUr{On8kxUOlz}`zi0z;)+Rqq5vd@vY|K?oK)MnYd=DHNAas(}h0dwr(0fYXv#sfY| zS>hc*$(}acaZQ325$`Fq4^&FOX!vB5v9{6W51)A%qQYF`2nw4MO%myE&QsR&+6eq@ z*&yy$KR|R#8S$TmRA|PEI|n$mM3YtE()saaMe-WOPyxYRgsayO?Um;a#m7XypHpMF6MoCxhGY~blD=?roqfj5GH5e8HkA3r&q4T5U# z-A(a^AVl=PSKEL9$sQi-9Vc2B?q@foN$@4GZT3)b)VMkh>@JHhn`e4i$IEj&7{$}@ z%79VWj*H?47kWn5oYDK&wRVyt&t#7LIEryIf6rgibs$wmEq>D>*ximy}xno+)PSjpH1h3SZTwnf`F*k)>Jd87Ti50AdWBG51cAl-WC6H6e(3 z-nF=q(;@C%%XXbMt}E_^P;ZIhCnP7yR2!4Ez7vCUCui9Toqyp&L5{iJL=C1V*K&ma zjTwkbo6eF9uYw1*4cOYUOO@KNBfAjtE;1E=wLT0?Eqb&3>gIoXERU0~4Ra^gWT%Z- zSm_+^&-HZE9mQN2=B--BWzk5clSq7l6tU@k^PBH^h~8EXeFtkjaay*Xl}Ru4{+>n< zbN}Jkzuf_QD}N!q%Y!dlaLNyZYltZu)FZ-QT!9m9{xzMblI?g37$5?MC$&6lp3`Q} zw-Zo)mB&Uu{sY+(%L&59&;H%=LXXMu*a?R_jtO&J=*Hm;4c8wsj9{s|Cboso=@Iy_ zhYBGmRu|crL=Sw`uZ)epMB1}#HsvsYBpp3Xmvk(4cvs}fDZGYjPCZ*{det^QXDFw;c5D`0hZ z0kHA#Y6aFM%K>8Q9!`X1LQ+y|gFEZ}EmlPS^1sPemM`XdnN*w&442zXiE_L!zn{t5y2N2)3op;wDeI8b+yb^D3=Ul#~C!$e2+0I(wP2)#3YQ z562)sBReM#*P@Wek&T9)d%jJ__Un&%!N%6~qLV9xT%#VM>R*SH|5n!~urOC)I)S;K z`hMO8@3;o@1iC*Z411id`aOjg@Ktu6N%9}nO|Q`4?qZ*JR}@q@s)QMWb0sDgm~ND8_mB2bAMz9 zm?0uPMSs{aiSk?eRf_t(gzxuW)8*F-fL^P$59) z7+~Il^6&vY?eC=CLf6-w_vx%JjQ_CWi92SM!}wj20g0c!?jW_;d)&YX-^oL7}G!In9&YYnMrfLcBv~S_SLQa~MQ97FKlMZt!^53KH_UMs! z6wCY!dD`s*m=J@l2rtbL{Awkl=#T7JBtbfeYJlr!NP1B(d z4a5i&4bGAn4O49zu+uAi5nrLp?|yEw43v*YwTL7J9`dWB+$;9)^IkX+Rw0gwoNNKO zR*;%EpFy@Ip0_&wO%@}PpBiP?u47U3TY*;3t0JyzC|xtRO8co$c&x!Z(|zEl?r8?y zgiX3xFvd%rZtI%tQZtcDv8HD{Db229xZ}B(d;yZQ)70~NGnT+y zxSzA%YD)5*{|ehAV;;*~B=5HV74k_yJy-6^U5XZNuFP_lze98-;S& zx;BdRg+BzH-*v$dF^$*T|5NyMM%`dYmI`c0gqQuoVy_3qiytcpGDESp-?LTDYJEj; z*`p_tgiAel6eV3eXIOmP$4NX+vqKD)PlfL9FD5+p_md;F7(^%0)lg1g*HBq7C5Cxc zO6@3P6@c}i%0JOt3Zdj%@u8BE2PyY zuh!Usz9X2F?+BAAKnxCeI|F>dy->k zhVrt@jsnzz%&N{>B zG{{i6R?JsXrN77Y4oR^E=_#b?QxLY0Yk;HBuu!WzpHm*G*Q)wCg(q{kU#~eP9Dm)F8DH6h_c92jg=Q;M*W3>LsMofEvaqmD0 zmO;qi7qCb#cjjF-H?69l2zzS1*j*-mzDs(1$`Ec^m%k65X`*H$%kY`+3U~ol5uKu+ z@6{MW3amDyN9*z6Q5Ddg@PdaPlO*(*J}BmrI1boaTD}+mqCOU)1VXA#G3IVn_?+MRs$K>dh?;LU2}bY zcQ3=vt(#$HOrNiWKY7hoaNPl>G$Hg@r;8ZpIrnOwUx4!!-UD;sQzX9F zGh@oC;nd%$1pw6mMEmnl5j^F(s=IL+41`D_3+z8)5utuKv=t-qZ&!fnx6Y=;QeD82 zG5PY`?<#~Ot)>~tUwvWXG+ZxQ_*)(5Ak0*PJg$BR-vj2GK3CwtznR|N`hde6qUjSH zCX%o_kZGE?92_RNsj;52S@9BOLeMRvdD?G+xnAw*B>na(cA2?zEd$Vf)^4)T#`#^p z;63g^n6x~eyT$*#guVqc6am)o9HeUaCmJnC(X#@YsLE^nKUt+mpr5nGHk0ghfU;!9 z?I%SM7XdbpIaCUg`OC8xG3q&FTnKd43_;Y4F{VqeQK`s1hnrUVS0SLloDetD$8-eM z!0%>4jJa8~&8~l5OSL|PGaaS?k{5uQ#7FAGM2^!83Rio*VN4hHdyL0_By?a02?ii{ zVu>);(F6Luzj|5i)jA3a2EGBs34qGmOk)VIK;s#k|$0%s9 z38Y$EMT9>0!iy<07@5Q>L8}AYx3EGnf$@glnLy@S{v>dwx2|hm^T$n_==Y0>!i|8w z-||3IFH3U%2jRMp8r?y_0ut4~Dh$9RSV@5Vgn?Kt5IKrWB)p$T9`mWlMqAxh9+2e6 z2Hgo|myX|six6~?pn4a&7R@r?NH7^_(W_9RWXC6^v0{c!DVXNQge$W&DAJA$w2AQ%mo;{rL~7kUiOmn`pfJk^L*+cc zpj(sW9pmLoCILn2_*QsbCy1rU_~ziC!nd)Le=|anmzW~t?~fd=m=Xq?18Pa~c;vs- zVBF8A*)3^wJm950?k*+=%o!9~EN5{KEef**-WEPj{&!C?VX-i!cRy2!Yb1Dz`SwWO zz*G9;6fKolx#7O+{#5rtQBOK?UmN5ucV zr_dz&E?lr2NyC$|q-^@;t5k#SX%)PHmQ%mp-XZg~_iisA1xS$oD7RLiVz5J8ls(WV z{-j}!kiXFM-mUaDjd}iqOgF@2K=)OgFVn+T^CasV-y!YXY!5tE{biQJ{L0GV(w7vm z{Lb(1X$V4NDRWE@9V@;u8RMyn0kPCa=BIO1C|RpR@<;i7RymhLPW%UE`7!l?pp9$% zcMZc;5>FR^Jd(mmd(7+x$uQ%$81kf9`p%#(HqJ*^-pao;Q|Oo#x4+mI7DVE=lg*bM ziG4RrOJ6H+zL$G-yFdNd@+rQz(Eoq7V*KQ&Fim#k3X1EDd_^#Mdw9a?MJl*__i_s+ z&%fcRW2Akj8Nq+2YXq1$hXKn4DK1?whzou7bB;B!@F0!*bQ<$^2XcAsON9(&oH7ED z94Zt)8ow96(#-seKw$H_j?Xv~XZ*n1XdEMG*7-DMcj)T+JpO|SwKY^nF-JsU<7Z>d z`yx7r@$$nc`B9E=D>r?OBn!6~4Sc%k`J99Zce7mUl#0?R900S(KoZ|Ctob1&!GMo7 zp}M%$P8#zkp}z(t{seYxg+svq+m}`+L)X3UkX+z9Q^B5dj}A z@DavHo>gdwQI7QGtdn%GuGY$I`9xl`2bG<+z|f=_3J2NKuDrZZGM(g9xKkhcD4G!a zuPntCfQ@rSJ;nMsn->|+Dunr9A7O(~XQYvL*y8m&zO_mI98UONbJ;V3xeN*3{oSDo zJNr@pn^$GN*1Ik%oKxxU<&2%MfqH7=pW#p293$xPy+;hKiYg1|eeNqz7L0W3PQ5&! z;{^b(0ARNES%BIYV$+vj74=a|`8RDS{dZTfv^JDL(9vb31*z^dQy{NOpzO>}_+502 zOLNXQ{WGA}8S;U5tj{Dma%_%7EG~z4)B)D(xa|ADHs|eE3)6r1&#pN#tM43)y&eue zq|lE(7ry6$p2{+kr$_>EsN>sJLm^Gr-Sp&ymbc^QN`~7BDqsix?Kh|IW&)avOh&C6 zA?Lt-2O1)B*o36%!Tg8PY^yqK*wVCErO9=;Zj5xkKhD=5`H?!0gd57od=(u57RM6b zLB&C|S`lcp?xm239JQ{&89`(opkL$fi@HnCgzrnAw<+rS3o^l9-&btY0r)xJZ`x-8))bt~E`x^Vd+Mu(nOHBmf}UoOK600>nYv__c9ziwOdGa=yWroKTI zSOEaITGDhhJ;x?ZFy|ui!FIh4yUekzoq&1ZU32&dN^Y*<-)akr`lU$v_A1;pCG1}& z>Y-D14S!6IEsv9itJXktVnQ3$;9RD2U0Q^K>`*Nd>)t3Hm-9)k$Rddht)pGIgbcl* zUK~PuX2^6S=8y#Z&D&{B!dr(WfOBwE5M#GZp~hcaM7j?zT}7 zyr_GF8KNydO8K3muD-E()$#djwlLgUx!RkwC!q>PFzv*yRWrM$R6ejNFVcoJH0y0u zH!9KH$*J@!v!sPc8{XzTK3e!^hrq>X!`Pg5tNyDswV-P2y1_U%VME4t;ERzX_=!jZ zbbP8Y@~LYDemP1=Q11V^qc8l!j!O#MIw0=!56oq(~sDZv^q*x5HQ zhx-;}o@oPkN<(IQPhJjo9nUlk25tNxQ$X3YRAmNGB7#tnWCcE@V@J0hSDtA%d%bV3@A__taaY-qVL#tBbNL^Z9@v#iO_Ad{RvodOZYVYorofB7Mgt=g zr_yRsNa|WQZ3eMIBz2B02ejMt=52Z3<}D(x>}l1v#q7IjCA;Bu2kXRz4!S?(4mA5? zhGM~r@}9tm{tVkqZ@Bwl;L%2q%EZ|^g?#QiAz1%ih9Y4q470&Y=;~(EW%Cu!f_&r3 zVLd6oSy{P-t&2RtnouewT2E_B%T|r3l{f?bC?u+;9GyuQNSs;r|JVDhOgr-Wn^rSi z$?JyUBxbw1=Z8C=g|AX1hG{*1=C6?GgKc>SH;+Z5eG+#6{jaH`MD{FoUWb&)2jN|L zL?pd!00bHqfv(aPm}aDKadI|2lOI1gzw4vcWzByF?YV$8(h#6xhW+FS9(oCGaEorB zCtS*6ZrvY9TSx)}yy;A#RqhoF>QCC$uuQk6>SD@O2+=5_1nTo$4R3w{0Qde`GA+|e z1;>Q3zeLSfOS&vP%s_G-pk@L^h+vMlo*lY;r61(bjW*Am;Hn?u7bQ#B5VT(|51oF+ z|FoUBJ=c=cpYHk7W!c7M_0_z`DK!haUO5w$mO|+u8@{!~4^Jn)2m*sHnhz>AKeguacj$`}fORLPl{))to#IRiWN? zvV0vm4q{VcTU}gzD54`yAuF61CB!J(yg;QiI&gVo_;5OAd>r^I#F!{uy^_PShW`|T zo*!z{usS!G^ZGE*(H-M#<*T`D!RQ2?SUnUY=fpzFgWJ|;%xQW^i;HTn6f+d-oQ)=h zB%~E5v!5I_9s&dFd|k)kH!Kl!@-%UBNs_k~4VmYEd5(aUl;L;AJU)D9U64$PA2)Bk zDMJFQBBo_fIghO=|G{^Tql9>HLlpOF-B>-uq?v4b{mjdY^NXCmuix^Y=V z^Z%pU2_(&?Unm|sDdwIPOGxobE00r%<&G(O!y>)($iVBSE+%r(lekX5Ku$G+TC@*x zr;?F^F+E(U778=^L%h*c`|@XBjNlGIngg(8e>5m$ww+J&f=x;6~mIcM_3$Jy~8^$EfJ)t}4XF zcOjh^1Nt{Ogk&;4HU1(q9dhFC>ZwvG0Eoqk1~1KCt$^Bkca!F4j2;H4Ej-T2%X z-S~>J-B34j;r55ZD=&+9jw*~?jBFt}@V-yVLfRA-&E7i>S<+J+Gxt=@8ejkNcN@#p92!*9FJ5WJZTaM@SzHgeMU!aGq5 zQxgpc-r@^$jKkJxqEce9ImgHrD51-_GEI$)vZ|$rN;I(hz8ECD(oMK;O0$1xI%|0D zxL=BlS8%a$Ohr8CY7*bgkPry2Bm$%JN;3Ri!U8B9_*+c~@vR@FBUQXvLL@<^hQ|$g z5AyL$G(R%EjzO(k0N-2~XugSobgz^K$;LSF2@^-2+H>K^@>c#gd?OSAf&ABPjj9D zo79KxaI&XDwu*!odPgzyDxd7CL&|;Pzb}z{ylO#QoDalPA z?iXa&POQ`Qf3yHB&KWGfRZWzXl$k6(o2~tD?)9YXBf=tBjzJalL<4dZ|;ri#j#|h#?*cTC~}sB7&jzZSrZ{V;Yz4 z<+wd4+{frCF2K%Y#ZDGQSuAr~MMGWj_%Ymei$?SIr8D~B%kFnse6kX>v;lA@p+BF861UMcW7KWy-~X#rB~ zDNuYif*Jx>0|aQh>w3}o7rrity3w0-0CdV3S*DRF@DhJ^v&`7JW-_o5))xM<}4p1qa#iO;Nt7+kMmPgtmg7u@oSc4mtB0bmR#mq^;Tl%=gKO1lz zwxeqC?rZ9fXJ=DXT@HJ5;^i36S{-0~vj7NRk+lM%FM=|uqH(mhBF?oJ{6Nt7(eoeW zLO04ogI^#!T&d6ufd)>~Hn9d7tgJGer(|5%g)$c`&6ECQ@oflkx3soC@VQF7p{M&L z6sN9qKVXrs@)o#yD5QQ_!FVpFj(+H*@}0N1z}nt8{*#B_>f?Ruk#Of(W@@d1^kuC(Pmc71hM-1bqs(7dXaIB8zbu`N#l5whGz7 z>{T$}zXgQ68<25mo8C`oSqy#?Nozwa(4YuID^?+^#~J>(kr)eQ7ftmaU2gg<#=WKM zo&@YC^D*a`N*F~UuG&s2@riy#Sria=_9GI2{YhEcu!W zc;nWDK=UlD($$hQ2rBx@3ES;Jch5)`QXM43?y_P@$N$u{X?+K{nn9P^b|hoL_Dg#5 z%Ui6iQvBPTW6CHXEFL~hvU)p`7L#yF=!JSgH|}$K(TgAuhsoL8gCICE{3bT@HtiAL zCSD(4?YazB#+|e87Oj*IcOi&=z}3`{Dhzd$693C6rh!#5B_BiO2>WuJ|0YM^ddZ|u z7T21ZBLFbT`_Tb#a+aanjauclj8xkWZAh@Pu<-@iV!+KQa(32*E?e$zx!s+0ou4i4 zhG;J~3)dAi4CL1NTV%b~C*-=NxO8=Pxp7g-pth_w8OFXJ)qgT_U2zBzJY9#IgE!Aw z=@*q32IJz^1pGS_mnErY;O)VDgC1>Qg(Vn6CEcSAqn7sbCL0>ZkTFt<(f zCzZ6ccKURZw@!sJcC8+1EO6RUV>Yy{JA!mw_VXL=$vi|Bq?gnSx_+RF=Atdz^ybN= zinF<~s`glacj=hUzz| zkA7&k7!v%cSC)0)E20tWN43xokoS}`Y~x3{H5mRPRsu57i~%}>OvCif2~y3KINqED z4GY#z{2PFC=;V9!>M`!Ml|e?U7?lXf2@EjhB}jPFL>%5@FbO87p-cZ;vZ4{gF#1mp zV%*aLoxOj?==j2h*dTHfHpDO>J5Ns7$DDY!kBXGInDuDHrqid>i_tr{1^ z7$ZGSa7CR%3}~fL0PJ^D(M=)1mb1#K2{WN_Q*e3A(4Ir7Zs;8&dv3W&L&36pFMMbZ z;?Y-y7ch+$XH>*IW|8SWPdrBv`VVnx^Xjc$vK2c?{wvg!QaG4LlUCbac)U{G;!whd z8g-XOUl{U}sPs|*!o~|`$Co}qZAtQc8k^17a!5CN6Fvvbt=BO=|M+D$2RI$E5rNpK6=<0sc_^aAn7xRqIyV2kVC>hXw*#)J*~! zQy}*zLK!}}g19{WW24+SWWSFTB2zFp zFf0ZR{(#n7DyOc^(G}pcungU|?(`3s(B#oMnJum?aq-VV&U1q`w-^axGVm%!9-trz zTPqY61N?8rNu7RybMRyZInLzhqew)2r@rth2^mlzZGlXM8Aa@s>Kk&Vu5Q1ZA6@_} zS1g$idF72yck1XtNU0!S-z2z1Wh`g{fU|R$H|97r?vTJkV~o2LUw*fP1N+72qL^#GjfHAto}^W&nd5gvD$NMn8H^HH zL&Mh_GB{?(RCnIJF1RB|?L@VL@ze~=Im9JSCU|;9mfTt`ZWPYgHl35u@BL3=scsWh zB8e0vKP05n)opbplxNS(p4RVnO96jg)cCi8iZs3d02VL3J{dM@G*i_Jv&d3e9pA!` z#d%(LH}wYKM8Z5svy(pJ!4is52o%15gMWRNt@s)r*V+rkh2N{*V+hX7r8a#_>{=niqim^~W(CpWIU#e?z9>qDHuMOv34Yak z^P(3_42#K*>|7(6K2Pqgz(4m07(M;z2;coh1O!U`wyG_qh(mJj|*%! zxYDxY8|D1_z2J#a1HV2tW-w#Z^Ml*sE7v7 z)9yAjQX#!fPZm+~No-*HbIuxHexAVbitc_l4J= z?oS$tvn4KW;(h9|SNLsL+!pvw?5WaEsD>Ro7JpaG7lE8r#Nl(IK@Q~PDES#!X}Uig zN&P~_L1A<}tsy~kxk5gH(2jGNaA~W%+T1^)>d2;|c-YOsC&sCLQB?>iWa5x6anNJ! zidXPF=}#H&DXrpxq`u1iY3{AZ)uMU%Oa6@gE{+OOc1ay=@b+t{1_T-n)*g8yytFM9 z=I5;Z-4h{RX-cK>@Z1}S`fr8~);1nf4S)dRo5-CS%l*fLu|c z`*~LFs`L52(>vU|w&@=9|NidVzdbQH!Ioe0b4ZqcO%hq@{jgTyPBm&=bxiZZCX!%U zmw}{iLMVRdu_NGG)v5=m(xvP!JBTi^DOk0)y!y5hD3Om1+Z^-aCx_Kn;@8z*__9UO zd(wzJFOk2RErg>Z2dw|Va zDHXTEHC$~_T214k;D_=S-YCZRnxC~@EQtB;hmnP)Wi_-0uV_1$^#I`66>EAK$K#U7 zPxQE&j1@<@j;MaKlv&rVpZ9Rbxv;iDKj)P6RjvGz5)yr1oKy$5d|B%mC|LzG>>951 zJeCQP4Ggm+-K#%kUf*sN<6gbRp;%m|$eTp_fMBgXg{3;_{U_~j5;vso8ppfmcn~~z zDFar|L8Fm`)!Nbt`VD8;jli@-MpxY}@s{rnaxq2HdN@VC{BC0lk{vAJcoJ9Gx4ShQyZE2dwJu}r4Bd1DyR=j z>LZ@#k2*1#9C%sGhd_kos%gv9@6PH_1~e->Qq@7u6r!uD;~-69!`{pjz=a29F0EsL z3hjDpj!eR|xFO^{t~=v#jVfeW$`l{A^u5T*$?r*q$WMUiY+HJ6TV5F~;?nOHA|}MM zcIRQ`%Gv#7dR@=6{<#-9Hn-=rp7C!_F4P{j8kS8irr}XZQP|&EB_~ajzz;j-6$9NZ zpoZCX9VR9;R>rCrF#!n7N07`n5%kNzR$j<&wQ9V?k!EJnIy{piuO{BmSfArRIrTUY zad8$sXd`to|D(=FbH^cugl7JoFqrO~M)LzSaA~lT{V=$h2T!2<*o}ZF+L-+pqZMBdPlP)zSkX=SHFd zFN@U6`KEkE5a=Z{_o?Zt&ffKrwG}OGHEkO;JhcYE+Ho0}iXVN_zfXlGQEoCYjCMBL z&$&5tL_g#9ff;*d@Tyc!1=<$xn0Q?P>uz3z%lP{{HeYE8Tv$-pi#7RF`Tb4dwp`Cb z$VnH!dLS|^*J!hwL|lNBZ48OS%~)7(*@4;OD&WRdKZ$)9q?xbIYq;6xf6`hQblK}6 zi=ENud6ORRTcikz5h2hIX0%wztQ9NXRXi#>U=ySGN}|B}!k}$E^y^Bs_-#~c9N?L7 z_YX(Aw{2~nb{RP8B?yEWs>JVpKzUreG%Qp6N0PwyqrkWKZf49!&nT1xxz;P%=5yZy zacCuc(~Yr0dmD(1vqJL$LhAlfE_a9!rq&+dQvle;EBMQ&9Z7zZT3nfLv}tb?f0jy6 zwB_x?6@SVXL!wL>I1rNg{kx86fygd+=LT3{HKR*+jwAKD{J{;VxRjO^)v?IsH1R3W zW&Ye_=o#nOWrKemeChcR2=$pb{fc?&O27dZw+;8+t@GCQTTd}d{li{YJgQpV*v<0V z(_950TYb2{n^BK)_?7Rdv zPbV!us+bhX52iqL{OX+hs&GMKL856s!=t54%G^zq(!YME33K3O6vmksuyX<(>Qvbw zYprwMZUyqXh)t~&UcXn}66vc>bYuP57F0-^4aDdr2@*Ab|W|n5wgG zsuH_ifNj-TFZtF3$uUw!_sX@!CQGqHf# zV=mHFstF#auXO0GIAT16b)O-m_+`fCYc4)v%?{7z^e;=6E__1#CvCL~MQ-f~fy7*D z&FN#qSE{10h8?uqQ-aVT=4%)$|LHJWO;ZF~f_7W~{I-^n)anm_hX7fvwq56{ZO5P2 z6A33mn-^($y!Y_nx4hl4-0o(}62*UqIyF%*kc+0yl_OC}D-K1r5l6hBC^~b)LQe<# z#i$DniCc6U>(4Ki$1k>2Pa{N)ARX+|bsUQ5TT*`oWMh@!S$9n)dOAYdqb9T+#J4dp zn!wKjfXwR^=Fk}+v^7ljWseeAv?;#Uq!|g21l_Y*CeRuFkBTLM7nIs4wDSpKOfe=C z&Zd}^<-))vLpYaN-a?h0{HStb8p}h57o&3 z;p!{HqU^q}0S6eQLAr(xQR(h32~lZ~M(J*(OBy6(Xa%LDLursMLFw*pY4CprpWk)8 z*Zaj!4m0<;&)H}1wbx#&axAL%PS2Ht4yx`~;2xqdAIr$`i2(bgbcte^hXZ8`8%~6YGDCRk6v!*Uo7`n zW>##MHqY%QRzAryA$cz*Aa6e3!SnGX9uwc+oNZ4JrPI5ep)q??yezFkbG8u6$#aMnWIc7ZHbDf3D=cMrkDQSUuDw z5qeIQ#AN2rNEn^R1Ik$#%8v8Ikb3f`WzW)1M|o#XGi^4X6SuReY5RdnVL#V`S*Pie z(-A;Y^Yv|Z#9_t^`1mWMWahm+1B69Dog4mNYH0w)iD5jhIgP9d z+*dPo*{N0S$R=M;Ve`LHyyp-UHA3E|C39rtH}4Wym}%vZgLS2U-CruaLU`LR=@RbZ zzOC!3nfDWh5;fkC%h=3NzajecJd~wOeL9@>VjLGSR2slezo6^K@Z`YHiSymQU~RF} zNXr@VTR8iAX`F@C?2JP@_G$Fjw*y`dU(jxl=AGyBm82kq4_+r()=R!eFiNCgLC`n_ zrx6MqL1ks764aXBzw6%fK&3#emq|@`y2l}gFsgkR{Tcj>K_cpGNu&!shOuD~RmbqG zoH5A!`7`iF!PGrN@8q~k03}GSuChx@RUiJ~r1EGIb1xMY@vgaX8hf()NzfU1W;u@i znpxp`xO^n-BywWf8l`NUS2*>bL^&VAxB~mv=&?(ukgVY{<}v9wMCs-*)i@-hhE>u3 zrzEp@->ta!I5O;oYxU4+lQKHtcWn;Nu?cUjo!s19mdHrnH#=XL-mr6C?D|6^IZr2) zlNjFYY%V^OgL!HQvy+2sE;*^isCv#ZlrKA1h?1m{=H_O6T#K zzB(ZhzxYDs+t118)aY7*I_+WOCrRshq)_^9FcP+fEtGu;3DYqGyR-uzS?dL@v%qm$ zkfS-Qg+ekRQGofis^IDGaieK^pbN}D>r>hIXDxm2mu!7?1>;7)=l&)Se)GN!|a7nd`+O3Z2 z?Tlm1?_@n8+8?(8U26eRCLWD7#2)X^1?RuUYb=9mM!^*lnA!7bNH-MAM789y6KyEH zC3RWl*9FKQrWzHNJVyukTVFKH_Bc;fJk$%!n9&ra>-CmWxB{OAVIrFwfKS4CKgYL~ z0cCu|M<*9PC%dz74@1mq7^YX|khAMAqspA+QnA}S@7K9$%~N4U@#l~9uRp;O^Rx^1 zEI6c4IFFXzJ(+R^0$8|W*Kw<~t$K!jnZH|un7adBwXpwevvYs!_|fm~whWdC#D7Ii zK1iC2BcB_Q^QTUgAmWPUOgTQ?;%BZbpUVOau;aIFKy^@od=KrMU5crPzIBlCDm42c zQ{80YogBdMV%(yPpgA7LVm7t33^t{}uw{3{&FM6>-YH8I!Lq$9`YQOQ%2t%&my!uf zt`8&fug!l~D*SL7 z4V&8Lcx|Y1lqus4!kYr2!CIQi5n^Yp;^N%gWPlEwUSP&Gw7=_ z(?lxxIug&sx($Q*PB;>12-?ZK{fMK;jKQ9k9;h6;nP@VfH4m*efS%Amg!;%s(LY|B zz>m;8k~H0TrD=Q-)YT8xrRD4KM$FA+EtZWP^gH)8B7g6F@_BI=MZn_YJw)kSeP&W3 z(NzLLk;#&adGd{}x5wOfy8O5srGwc{0`1Usoa{B260Sj5U=-AF>M)b?d{suAv5zDu zJP?HsRZI3FG;^WR)vk4|ZV%ZXm8*&0c09gWePVk_ReSXm=<#TqzxV_+!n{yj_z@pt zML8)pGp-{dSWfyw`-Qm{mxix@tv|zBe8va!>d&W?DMY4rA%Ii*;ibC1+3tYKSd7f@ zPxVK|@*nZyH4%l|Pbj2sG-de3#nAX5olPj08Jz^BvN%pcA<@a$70KFM=NY&QBS_ zZ<}TvyQuhlFKtf`3$k=M8wSaWe9}gAWFXrXX+c$YWfKf?c|Snn#D&R;G%zIO!g6gO z-7<{Qr7VNTG1s=@u#?ZMTfL9ff8EphU3Jj&A!HrHFf&ioxT_N;Ev}&^FQ;!Y;L9c7 zuW*r6SaCYBI>_~h?-wu4t?Mmg`j6TO z44*u?<^!n1or2o&q`$_oJPAa8es4%4nKO)fOHl+dk;vRrA8jbV)DsaLiKie9S@@Ee zaSsK;l}A3e^dtOAL9MN@S1IfLGu@XKUz?614UVVhr$o&@4oIonVf^zhkH3nTf&&>&j9)3NK&ImtWfj@m7)sg9WaWRHv|Fq7W4h6Ge z5Fb~7=HBO-`B2H{tiisAD=yfyae`3xERL39%fDS#>XTx9@mx`Jt7@VbA7?$5qfd7# zhlDf+$$q+Awk_s9SMRak>?kl&_H=u-Nj18Z2@ivABDjFhWLfk-GznDH*JSqCS89 zf*O%vU#}4UTvI0+kNppy$2mu_)?^Z^=FZIV(D9Y!(mY>Bi9tRv(n2G!y~EfT2$6Ao zLeE#Qv?PWcwp{gr+(SE@VcvY*fSqLeGe1{6w`=G1HA=A1=O0}2M;jqH8Sz3ni2Ws% z{R9sRuT3w}NPn*=Dt^5o{T+<+>>{Xt2(v0$%BIwXQDp&E9P9@g)aZCG{xe}?4+5Z* zIc&2XTNHmaL!?(wX($ep!j7XCp%OFgIzBr*?8cwFA=z;g@OP_Sc=!_{<+=w+rHuIK zj=3asv@gQU-z8mI6^LgHB_?2tvhJH$8MV(cCILNpY%-AvVp9hoQq?BvBS6GQ(Pd6s z`e-PkKwgbTB3s!dNP>+bvb^ePrs1rJ{%$W668Y|31|>7{oYX~>)R8v}f#>ag3=v$x z^H&e0W5|VM4)#O34(#7?&0ZmG`JZptv(g)q%znh%;D)eR>gIU!@$z~ZQcl5j;)LOc zBkD%`oL$Nb{j$O?$ZbeYo%9h-gLZH(&kCRgs*ErCpd#AKhQgVnBc5fS8|Fg$@9lT9 z0FZ(C*zrszNjg6Jr?lyp2+mn`92)0TOPqPDWtvx)y6+xR?iqJv2)w+@MWp>h??=B| zV`1G3RZ1dVoaI`hS3GV@F!A1K6`yPkqh7keN`=H!YA7_RhnfYw!gb};DO2)-wOEoX zZ(0*PdNECe`BF#@dP0QK>J5LJ#gMh(sS}jC%ub^35PZ|$)QI>Ul#}pVdpo;HYaNT?BHLDch48z)3$QtGII_@$9K=h zZ?c|dan5eN*)E0}=jiIv)8;Hu<%u|F2JijnlX{78D)Wsv9U0$>V2SlgN};`V0KPTY z(kKNWu^Q^6+vzPVDp_06##th^Y?tQYl6u1Z`gQmpJwS9tdHh*2I1Z~oo)(+%@4}iw zl7nzGaq^k?c?*L2boFO7<-%Tdy&$JuEs=s3>oE9uf%anpHHi1b?IkC?8iPzfMrzEe z9-`H`gyU@xLKNs6J7EzlrN@q^&}++J};Nh~O;=t)s>u zfMW!w;}Jx9F;LZ4q)CuguqIeF4Hx309RL~diXP2^sme+V*KT&E%%R>MDZ7w!rsMu> z`E0#Aek(LUOa{a@n!v{XPhPOz%|pc>A4v^!tHYHWcKN0!%$u9~Yi8Z_vU0ccuBa0U z=&vZhpd07Y0Sbs0{elce#Quiu(bvpTeMPUrc7@}WUG3{5GFPij>rB>n#^r=)_uO30stm^ z-V1)|vFhwDW3Y(K^solZIM;aRtLcoQ#($Yu+-qRgr?y5I8^H1e34hQ`b@h|E*v%;r zU@9+(VaR+Gof?R#=A`Plydj1WCjncCxRfz|F5q+hEu|_q{p$nI97Z-%aC-! z(ATEx`xr?UQ>Y|{8_{Gu4%v_NtDvDunX7B-y3z)sQSgo`&FWK8lrKsO1#iAz-ePP< zN@aUP6ymr$?V*X)eUHCSRF4~4Q`nRtQ!@46KROasEjwx0bNpopzH{jv($(Ptrz+Wx zkFEXhB&J8lbKJ-1oHAN?!79#fq-l=)$M} zE4do*q58@V+b?{}VG<{=kuT^7$ODp666e(EHURga1?lYZluP2%-L3;XDp9X0X4%(r zK1U)^gWPtM?WG<9p;iWlIZYtWDLjN&6}#ZYCgG~a$rneza&}P63+`$>ow9bjOtYN8 z1jym4`RdCT2CH)-Dv;jSm0Zt9*8gmHJn^byY~uFSc~))U8xc^-2r-fLH(U)u!>$11 znP5Pu*c4EY%Mt!-sVj*`9~QM&G^jBXKp21qc+j=@!E2a~XNCnI(#QzbRtK;bka%LA zYSgl@Jt|Kz^!SO0%U8$TLlf7i$D;EnL+|ibp+rhIm6Dg1B3ZFpcbpt(KnKEOkF&1x z<@Pff&tM*-1Qy)P>@Z57vYTs5@mhpD5zzxxqdeo^zys@kB=cF&QtsW}rdwD7wwol^ z1M=ZV8$%9#amer`-3?AV5?K5Q*7wCwiXHF<{;=MFITb1lQ9ZIe%0Hh^-a?+ek5m2a z_UA8isjvbwg!F^I3_)WriSZil@$mIgN^@29m~P)6(Y2hOz|VHlb?mP_H&0evpGd*} z;5$5{G!wvZ^a?q4KOk_Yc+jkv$vt^Zv;VCxCf%U{yEA)!saJ`)SMcEn8R6Zr8n>0v z)^C)&&;HgIg&?+efQr1oP;F|0StIJ8k8D3R8}+q|M-sgcM}$Ly;XO3$DnvzL33vO3 zEdxdEB(qQ;?u;}&JyW7JPUp_+_xD?k^)Tllbp(Dp>^ zN@!B{M^N5{zL%653oF*>NKCvJ0!#YfI@EwC7V12;~%=M&>~qI2-w*Y9DyU>R8@%pUzmToh_JkqY$hPz)}>FQj(L-FD|_!#z!>} zeVdbDq}2zO{QM>_l@)cq5UvWQrfEYblcE_verPSS$VI!@_&p|xwwt-j;17mqGHr6u_(_>N2pXD2P zEO5ha?Vq}^lbBr7&7(`LHrdL!stB8jFzITcswqO;Ui{Dld(LD6wFFwS@u*em(M8fN z4@OvB(Sl1m(GBpUZlf1)M9qbFJQr(dmkvEJmJT)X(yhEXSr@NPWKwmp zck&7!NrxM**uok%Udz}scKRefv9c-K2EJ@#&|#0B9#qy*lcyXnBl~)HusdQJRzdG3 z`HQ9vG=UxAFivlV-b2Fn^?G=N*0Y_U#!=K}`5PifkC26tb((RNrfEOWEI5VFP^!6% zt848$y}y^3^o3#I-9o(1{KP`E=wjWnE%5HCnaoeu1&P?Ut1N6HEiCj$2Af1aVnsns zNFLy}5pMQ_>>YeiKa&}A8h~Clr#ojE3<%jyAq%N9*Q+I0(LW)FQcjaz!MhcyRtVL@ zFVTn%AV$OV+qA3o?Fk#RhN1TJl@(&5_!ptEWk8s|HAZsdedFoOC^mEGi&xi+conES z$%zK~kt}LU?Y};SNJPRUaxz0&xjWhIOTQLa*D+r=f&|TW#&OwKcZZH4`nYaQB$*3J zL$KPa%xkm!=o6d9AYbRRHqjqW#WDCOJ#sLzeOIsoHt?&Z%U_$H*EO0=b4umA&=OWl z9+i~#q2^w<0@~=$tKIdAI`Vo(HjZq?#zDfG^;P-^!^~>QC(rKy7LYLis`&iS!W5X? z2%;Yf=*5?JVRF)2h)EUeyU)7v0Zs9A&|JkPN)zjn>X!_s4#Wv3 ziz3?U=fM9Atu@417L9RRa_gHEtQrqS)^1$M9>>Gu@TRD+nDS$vo_#}r_Uia_((BQN zR;D_K!9NMUwOBG3W@JF2{q)5fB5Bz3guE8 zpW{TK1=vp@(+fZ9SeP;`+2L?H!lMqLUgAh4^$Y1mjd1ED&DW^PabzjjE`ImmKoE&Zo;Mw_jOFJz_-hp8eC#+P`QnZTvA}P-{T=Qpz(mNJVh10_;frRLR0)5$f2te$oxrE zbB=Ph08fDkqL5JQX-6USMx$V9VRk+1?Ox_eGhpsF=6w3}DKkmng>EC=uDVej-RB=} zF=f%%%v6Y3;w=~~Ls(}Bg#p)8%Sp*jl@B=2(#q0D$_VzQO5;?6mehF7oEt^a*Drrk zlTT0v?rp9buE0hsbE-J(JRd`ynP)U&5$BvN3P}V{@Uxsr2*guNfo$+4ZTrzy-`^UV z4BwiY<%_o$E#!?vWDjedbGRtPD9e;z6Y7o-QkXD zaiGqmIh41)N?ufAhhWEKcx`>*do?UEeq5LJsT~LWzc*y92l>jg7xiWQwf?`7f z+m}`Bu@vy=7_u;moHWFw(qzG+R2$rh9-S+Qld1V)N!c4gff)zt)ARiqrbI+UFLiY4 zWzzKrWp`2NaP^tp{2X*C#Ip?$;cH}Cg=Z zE*cW6rLh0jldt;y_Zn@QzN}~ci?;9aAu__^3|+4e!WrDP0fu&o6<|i12qIz@@`nyg z$1&J!&$OO|i?r5qSnx<&2yl~*XbcU`A{nW5f z?x3mMMI4sp)!BrOutH_b03PX+^MIV&Pl_~TwwS;p8nT1&UMrvKJo59vbpyLYbsyuD8zj046-`!udg{V@`Cnwf%Kg8C=t(!l~9dOX*hB zjfrb%GFN?nWL$NHcX{&mdC5b5@$rZQz*jXDVDDs_cRy)zoBB9v1BUrSNGyW9lL#%n z-g_HjblVI`2iZ;@$k^LT`@HIP!tz&ot@fL_#0?|hHUxj47USeIXNf!?>|I<MfWV%ky*#GaFl05-N#l(G zY(L1MWH=>9OzFURjMW!D7oywUzbZFn)!9SezUvH>1wz$}heK`rZI*V-Lc`wJ+d6W= zUHBE9y&^U3SHidnHq9JY-)l`7xX+pwwe*8il&H?D2)7Yajq_Z4msEoEaU z$E|>6W!bPdoO%uZ^BHvg(VDiEzbUFE8y}447nozT;iq+(2W_gg%Ir;Td<&{j5gmr# zF9d4H(iuoJN^1cO3IMqeQ1wV>2^~fZ=&(ejimU0y`r61>O9o;a*;@C@W&JQDuB-W1T|C(XCLc4;D$h>38uEk!l?gcXJXVG8lr4t?ML z&7oz{g9((J`%ZWxg*aw}eNklGJJ~@vM>BXTBZH7k1|M;H<{%1ZvnqHN(|Em~vO8jQ(+gO>n=unBGx7!ZdpYn|mBkSMEaf2D zZy+}eMRElK;5{C1U_}Z^qXKV&_%+n|CXztga|lr*O>c$i$%zbZzJ6e9s?C(w^DQ5| zs~ZaBUfhHg9Q!lg(%=eqFN`c{FHYIjuTx!H&?+XwJz?OLR1COPM+E>%PS)97lou;5NYY#job|ErBTej>@f>SMdWDl zp#E~*FoNa!3(ql}T(}#{?kHa{q$EUMaCf+NQN?lR+;lfDR=frjtvar*uJX4Z7W7-w z!u7Qx0OX}_f5$4yeoK#c*>mela#Q_BUCxTsF_I!tMB|WD%%=`f`AdH-ZUTK9K1%{3 z{MDO3_(ii)u=jWl0cyf%70eWK(wM}LtGxG`rd5F|Y)srk9+ybY)#SMqrIj=#H8opM ze`Jf(#-T4oTv&z%Y72n|%?{joupEJLt+I)793LMU47xFOv*!JK*}fr2uA+q@SorVL zF)Ju9jeQL=R$KW7q>s+j=Ki+i&v+HxtZfxFDBeTIDpT@EbY7!HKi_g-Pf2?1Qk894 zA8C@bO$D|LfC1bQ&51({wAiBtxCnDTDZR%H_E_z5CygaDrFd&74oztBGSnAoiH#IU z@^)Bkk03te44Gj;iD>5nqcGpsK3MNeT4uS9gx+(9FG}sh{19b5_~Y4UP>!zt>x*OC zecv<3^)Q6@f#r6bN-n>kGW7fSTqNnL2CABu;ePoT8Tg~cqyQxJmE*PZJ-E3q60(hMDor1l#08A|)<2{wIFFD@v0?wiJ@v zT94OvfNh)-RGnsA;~FRd9K4NAufkC9%5Q4DfqegSZd`5Av-tVC}OSa!T*xwIR`<_H-zZ zTM>CCJ$u0D!X-`TPY2$>T!>`+1MJLi!j^?0gvU)Bp*^+i|#T@?LWcr`KHS*bu&LwQqQKQ{=ErL)_r;52MMnvLd@rz*}mn1C)o5yTD8VpQR2<- zd)B$qKJ0nVP`dVMmR;@B#@}zqx8k^ShRq4gA7JNZM&>jA3649(44A;{esIIg$Ft=9 zoPFY(p`t7%Fh?C~WjiX>+;lN0uH4hXqq4DqyiSU4bn$|DK7XMJRPZW_sDj|!Dhq-( z9nd1wG?}ijwh;nr$sH$xO~%xx&^J_y)6Lk8OC)zijT9^gs(w@@%&A%s(YBPU5aqZL zc6|dfm+2&+rm&`GSB@N|9HTRoBu zugi!iRZ7KGfLLR%a|Oq5Y&62?BE)35^j9DIcI;?P_Y9U;a?6I;@Xh23_m82Vuph?7 zvkFo%Mq&2ivsho7u*|w0qV_vCzM9?lv&_2Q*L?WsvEy=t+;euunmm&)ie1ovemR)w zNfv|1+C*8%ue{vf5x~Fnp1B3F*nl72Ozgju2l*%r@=Xr5VWZEra^Dh{kC)F_qHJI}sTm{$Za06%r(ODaD1~f352Oo! z-HxmR;?Rgs1WSCN18tZzT;dH)N#l*6%WqzKw$;By!~_#PoffWT`;nM3sRE`Db}{KIaiMK? zgt3Rs%H_5WrmG;{a(!H-N_M|gV21IZ4fa;^gJ=8s7gGQY0pb*xD3X@TT$uM<1ygmp zL7UKFa4F#*b7UY>bQ%qd@)hUv5yd0@W z!u?}RpAXZa&|0b3BOr}97K%#~^N|f(HHmu-@RyQ2MStVb4)5b<4>NPNZ`MRVjTXCU zzHf}Y_Z>v^ThMfh=ASP^28h869iqen(_UA)8_-ll<01-(`uR5Dz~8i;k1rSQsu4Ou z0gw0l(&y;*3Uy@-47%ARstW#an{kwXD48qFBx7OKNGTv1_rTuHW(U^eX()r4^5ALP z!yM)N0Z}qA1&VQ0+Qc>_YH7Kj>DPD8M<>J5-KLuNsmgl9f%>*WfZi*go7|0Kz~?L+;EQ zybrP5=@cBtI(OMUVkhS#8j5LZsYPmb%kX+*)E+*W6&pA$@l+&3y_k=nQ9Ae`TP?NUA4F zRd547M%LF&w3RCRh86;FNO(l;?3K)k;+E2RdU+c;84;9w^s`r(HhaBTS}(+`-$ z_q)VT;k@_IaZV-&v3|6XuI(oIvi)!WazXAc>|vgXqx*EBFRAmlpCJpn^yjz%^V2C1 z;kFI~HeYv`X|Mw+m_7zxy%azvfMMfpaJa+5v=tWA$9}arZyVgH-si91gFrtB8bFO79^Fr*F-IR~K#7N0BNi0u^wXSPs_>kP?p~#Y4LuCZ zOF@3lLZ3MGb_F(|oZ-xyeihx>0Qgsi`{WNaEK-Tq$l@M_a}0t=nFp&3icU-i{ZcBg zl56rUjJEFT*kLUwBqLgRP4U&|p}&KEL)4x-_*WN0etQEjjX`zx{;%10(Hvxduu(ji zGQnkEQvI1Wm@lglSJPx9F>QcxOlIMt(t#$qs?l3B&L-k>a6kRbq~BrQq1S4wHy; z@9Rz;JVM+4wg36=4b>pNWrlOjfZu*&w?8%XglVPhbsl!F^NL2M+kUv+f33shSczUI z%A6o0zfsL}mi@w;=P&gqTM}eEH5B6sR|dj~8u;>es2y66-B|K>?5cmiR86Xt6Yafe zV8Ns7{q9YF_j0xIV6C%Q7bB1-T|NwigCXwpJroH-?}#5&fI4~%G5CfMm=`HV!e$M{ zf})YE;+d1KriDESU(LN^0i@z>D81Fb>^P{cJ8`=)6hkRr`e2lb`*k11`tw)!`i(h; z-MCn2W!p*yRy~1BeOsWEHRw*!;|R~hh~Ii3N^N$2@gefK^Oy)>(TIXRr8*gZ7t0(G zMh%>RHy5y8=d$^)<=6Svv0$B~U=|R4{vbGQ&j1;F5-*-^lZye)_OCO6hoM=Zbeken z6En61)81HRrqJty$#W#OLKCC7&rJ=^Z)+Q@ zgWbvua@1?r!}yTJ?~WG8!2NZ#dz}QZ|h`0&L6nnh6uk zzOXRMhf$nbHtLEU4VP|{295u6N^NQsI|)hFHJjwzB@?X)#neiUy~jk$Bt{;s7Bha| zXZcLO5w7kq>VA++ZeNDyU~CvGs`c71lv_u6Q9j!DntF`5&J<7~ULyl_Sw~+#Hau8- zepEu<6Qvl5KH^_#?S#+vl^P=So~tx*L))^X+7`%}^C4`Xz;$h4o2T+=PA;KCvG5ZT z)K-T&p#0b3CF|V|zts72zzDvP&vuIE>bmaGeM#^O!q#GC;a=)_xRzm{MKO! zvIIe0T%`hytb+a|URZEIa|olIKlnu~*IPd?Uu zI?~Ij!3a2!g>BeAg_$XaUt*DX@drt)+i%%r`CWdQjUfw8F>hD;hd6tRi7$$bwc-w~ zCtRT*51DG$#k!&{WljTqJdGjKiMhc)VaJ{g|DIwLFZ;H%^vR%FM#fVW)G(rKdfU%M z{GE*A8`(kNO8@m)RIjH}v6tz$Nigg}@G=$G}sz(r{ta6maBE@)GEW;NGv zacUWCkcRX1Xu-InRhYP!o^7Nw=~x7Q?}Mmwz^@EY3JyQP150+?0A}FHDpNv&`Flc$ zuPwqKoTGbvChBda3@)CsNgUW&NmQ-4Ih&sk#i81oTNBAt#luTBj6JFGJM{V-F9j>X zbMQp>PO6A9&L*{sm0>d{bZxc>)?ciVk560+rLeCeG4yHe?d!Wq?d?^1$j0W>7)QM> zHpN_%t+kJSg)A1dAZv&+GRLjlDuBxP&f%<4wDU+k#*G3>Qep(g?}1v9V!fq-~LvF1n&J?|ST; z5|u4ZcpEBym)TS&)u%7leoWnW{ zEq0N6>0&W;&`SVaRKer;TQPG--a2OkPRb1RAjU41nP_d8@8T2!>;@`|7|2JZJNI5J zg(C@n0?TR|wE(<4<oJsXA~MuEwW-SuPTTl$W^lSzNeK-Bi2tc{9!(*~=vWDMU=s z(Ti}^A8W~tW1{iX>1L zVr)76i|I{L{xMi8Tr(phZ$7P>M>Q^{*mb~Yl#yMU?3*roZ#{-Ysnf56aK+1BG=DGj z4N&)HaA2)fXtFRJQ=v{EPtlLk%O4%t_4&s7UWicGSEQMgOKN zY!ahM$Gdcf@Z8ptZ1z4m?2<@$OVY(ZJ>!XAk?aK%eJ5z8;JHSt(4i_>`|a=XSHH|3+cV}D*OI2}QQ z^JW-7ROn{u$Gct4j-0pK1N^(6QjBWsn=bN~#RN!2Tqe}Bcwf9bo?xnpA2-eL3H!H| z(jq~P4-xTnyFDM$Sc~OeTz%?>BAF+9}(IG+* zF|#D*qmIK9c1r;wFG>y0{G+G#N;o;USMyJ%qr(j@Rua{w8c>f*kZ4gqd|0ebAk-LX z7m_YlfBCQ1{fsC;+lBj#G9a5lvg2pRDIbHulaFVHk1Z}&b%`2!w2XXRg_pwVcZNCd z3I?otXsmJ^0qx5D{VZ-*4>1hPUV}TBLc)kvB8|{#*dZghc!-(-`M&QyFw7~t+HaoE zS53Fb^1V&NrsNnVeq{IyA2+=sA#>>0c50cyYb&q6D?(@d3=Ny8hMJnowCYl}Kpv~y zw)Wl6v1FO}sKX$I`M*g9IbLk>O2OaKq{@70Rt6>to(0)}^$ zzNbIdUq+VQ<8`f8#ae9>{?gQhb97%ZJolbgqfIEz9e{O0hQhgNG2AyrOJN|mhD3MY z^7iMbh&Vd8?LtN^u*{v*vCLQn{8kB$`kml$M%QZM;5Un}=>G^1;ONkiU+!FNNrB?Z z=be9_a5oLkQhD4pJ92;$*KbQqL)Z5=>%X;ZhFc^7m#(I13?0H+%hESfL|KWt`BXKc z+m@}IUc%nCGmP2sDVDS`^gTBJOj*zagx9_8`N86xQP~sY4e6zU^>r_yOM+A8oWD!X z&>@zJEO|@mFSuG9ZRc7&k{Nwfh(t1e61FS6ZnkX_}spa@p!& zD!q-rZ53VLT>ru7m=Kn%4Gn;FT7@wFDCJ3<$*ILuv`?6~O*PTee!lT>IP34V<@f8O zzTJ$!P1b;f{n9`)8t)!zsmFLAPeJ6KQ=#;ay`|hK21ItLz=cx2VUc8h!c>4RnDhh> zXCRzb4`njdocA~HOPtv6n#>s{iGbcJ9foE8(u`S}H2)Ksu`UbR@j`$hE>|H{uuQmk z`ikE8Dya6mB_KXEH0BRPdKA5q+bTT=;evdoomf|jJb$r7(^$WX)S{Sar|Kv;C9gZj z4Y#YxVw_H(6{3gzWpB3D^7}7Oye@wWoA(asAqdc=a$?1wHKxr{Oc0IGIvc z{YFrmeZsQwtk$>lEy|dXu4A&JdZ*1FS5?H!BNyp4E!V(a3t?NYQ)w|d|M%A2n`%1) zvpvkUs^B!B4OrYx=~m9 zydJvV#1nrP9oo2jsQShzDP4Vg+W|_cLY{oK(*Q1!o!7_V>6PT3+KF~tQJZ&cBzmv$ zmkgHlRl7dfmR6O2Oa_@C>Uw@s2sDfU3LOZ1Vk7qJhaL9NPWEKYwt*mZZm^^5t0LiA#E78=m>5 z>wM~xN@)59Eg~; ze4xIHqL~jxhK_gT-6*VF=HPFL=29taG)ui5*$m$>-*`?k+1rXer?BFdJ3UdK!@-Yl z8B-Cv+^-?_R%npDO``W|ztJ*Q{I>4qcFG!?yopAfbZ)i((-<^E9CtUr*_%{i5!sKi zO4Os|*ibQA{aCUoAFU)e{nO0S!Ws8QunkEDC zH_#T@0ToDf?YwW7Xu=1I^c)_3&)jb!!LMjFRD*H~=w$1egR2lq?Q?W^_R{eXw8jn6 z@swcs$4=brov=l@`T1_9wwy)v;NIouo@&1$B;}IB?bZUhr6}WaBpk^obpFi$L*f|7 zk$XGPg0Hh*vH6S80~(~h8I9jT&Ql=PZ&$a7W{Mef5wgGLt{u6|BQC7tEdY7 z;KblTXB9dz)f)bpSr&EHZag21`*l2$Pu+bzYJ@#l-v-6__ArcQN}k5o%)a?JMiel{ zPix;^&+4^Y=~OucgoUhL$+l&j%|?oGU@n>{Bvq=KvT(^&uf(EHo- zV8$g&3Puc>ppvP&){YtDbd-HXmV51iw>oXRt?4?w@TmhQ3}raw=R^1Lw_Vkag(_eb zt7Ku&o3foPIac=#PHv!@?R~jfu-l4GQ`P+H&Dzoy+rz;4VF>DXD#H~l4Ls{8r?D@0 zg+Mqn$|27K;i#+6DKL!qkw~X>^xVy;QPtYz7~w%aO5WZh$xLY^p@NYNx?KXbNIemn zTEt`mxbHu|F*oJI%#FV4m+-=Ui*2+KEe(!Gf8?*!lakFMlE1 z6-B}{{He_T>!q&SR|gBNq%NP!**gBt*-hK-hPUIKi4a?t)aPTPOYVK-I$2}K>lQqb zlMip#-57x_?6C z4q5v0x1-UqP#w`@4eZ}pul*^WKA*-Sj>tBE+UMEu!%qs7vbpdKE7D0EDg*7)A>o%r zAQl50;xkJn;CPHD%&R7~lfI(Mt)2JkD=?k&rfKM1G=HXHxXAg4tU1MT;0sHaRA84= ze?rMHLc}Oo;tbj`s*dHV@sddDwz^fX6vJsREZyFC9qt?xO)War%hA{rEh8klIb2ox ze@wlFTU6cmK1?Y?58d4%snRf%bW156B1rep-Q7w_iG*}_N_T@aNO$*p#^>|9zVAOU zbDe$m*?X;f-GR4TK5SNkS9e7D{R&2?(L!QslllGjEw7HEV$`_f1271#0V18F9z*sv`Aa%k7xl2?FZ0_5MO2+AG>YgglUjGzt%@+uL+P%Ue0 zAel(p1)4ke6{9C};Gy#cno$2g_w!xzrvrWZ=};XRT0gnk&@*=IsdvEQ-og2~k%TMJ zweK*Vss?ZNpf_|nTqbGF17CwxacN@_?gl>*Rh|feNMgR2DB8a6*;CXD#2sv&P#K0yr|gtZb5JC zQB_j0u;&8mbbw_izqQ&?`4X6b($e##BI^-?52qKMobk-1tr$M(p(No(DOFV$K;`ejzc!hV|;N!6*Kd!godlw*F9+qbV z=w#71b#^qq8pdRxJxksHiZ=6UF|PqyD!)xyNPY%A8*N+i!w;@@qCguJBOtV_*=Uxw zbSrYv+?R>cSVQIMA&clr6g|ApZ?p)niR0b7CAwNYJSkQbPin_ z6l>=SA+v? zRKP6E-i5Ew`hR|co z)z`H~ON%|9{38sR2wE9AS{^F@(O^vek}s!wPIYx>QcJ|m4&R;X+_l6%QI;{*n+iXr zC;yq+;#gauXIo%GYLtSbDgRiSx0q1lxCI6bI|DaaoZmPf6~4Cl!?y@HO$yVxus0`( zGj`Ea;>l~j^WOc}zK(ey`OD%Z>rF$pA_Bqk*e@?yZyp@e-dcZqT%Ry->E6zlMh$c7 zVLC$v2y7@r_!z(06^u~@^oPIS9XFL_cuw@!ZYT-r^!TEFub}_W9ZWbX7V~k-+{wLX%Sx%#$nBrHC&E*z+ zzGT>>y`wim{KHyC{ElF`0Ej#o^mZJcZndRKzbBwRK)3cABRtoiQx@>?^VoJ7*0-x) zf5PWHE?jSQYjd{@0O$cv!4UBCe*H0Gq*NrH^28$2!P2jC}({`E0WHF!{DE!0SN?(uyKn@8mfD_*p`Z_)V zAwehUi~dN%(D8llWE!bg1c^?Ou)a%-YB`w3{E}ByrP97#{>Dx=Q z?HSQY?y4R|W6}(?dEtzCWH4~UhlRp^<7$g|3(rga&_-->gw@zU|cKsKH zcU<%DCS)TWZ(I1h%cN4wziy*-Cu})mTY|!{TO{^l_!1bc7sNh*2 zZ3Yu%_}r%#ecul!Yl$Y{$d$kWM$91Kf&?S5hC{%2M)MlNiEm0@n|w{lG9OkcS&>v5 zwMcb=p15%~fTFaeCCFkweaNkle^jQ>IXBc{t< zVZnk;)3MFg31>lb9xh@*G3z_1tFq)htjEGbm>TBOmYzuF4r@yp+k)79+TQ#ip&kJ6 z1br55OPeP$$YjEK-h-^={-&&P?^sU^=O{TqRpq_x370!@q(*qCTk83a#7gQpcy9Eu}rKJTI(ddW<|B-|Zi? z%vV`=hho14FfvibRs3Zxo6SbK2kg*-C*0?m!gthTZP?mBd=6LYCfh!Yj&F75h!>ar zs`I*Cml5AIQm zyhJGj@7o}*k*yxlhHk#4%IwyTmJwoidIB@W-`ZL-U(#UjD*(b)8FH!q6w8*=v8+Q7 zM@8i)$uVdg__e6Z>DEXhWZrEviXT&UhIh^o&(x^Oqc85@^GoU+qAk|*ZYS8dj@2Im z${0rn23Lfct>v`LqfCfZL}-F?8I!FK7n90|ej!hrlD9w;`KQ5eP4nk$1yaMj4#8bC z`m=F8b}+GpO*mcgs8p61)&b|_=bQ4iBUx`iZm@v$c6m;s?1eYN*@lMp zj=1JgT=%WquD<%=F5G2O{;mi09J zub@a0qx!i4?0-GF7#X7RpE-Vz`{K%?2@0Y9e26k9_%=kX#V>KTcmusBOQJ=HZI6XNmpo)`8Hk z_y~^QhI=X@*;L_z_wlteedu-!4}ql6JX#s`+v8)Bqw}g!(JEw0_r8r)pNnznCmU?m z){og)^eQx#lecB>t{DJrxbI*JQISHmE=r>(y5cysy)@j;HX(twx>s(9EeXuE;=iv>m(yan+=1D1>$nrS7Z@dap}yfM{Zm9;&&!>AXJ zuY+m6yZ&=(5vL*sA@NTy)i8Itk%ifn@?60AB-~)0MVazTl%kVx&ncxj74>H7nP)f) z^wCj71bBrDl;OuiUrGt=m?st+rG=gyWrkk?AaJ=jsGU8J2T|CEm>@=yzh9O?uOwjh z22gJp#|T}ejy~nOI>CQp=3(GR>zB_Y?HdBiy9X`AePYDMy+WgF4kPW?U)VSxCDPnn zMZ~Ja1>2axhG_^HfqX3`It%tntntpqxH+|}XjxnR&tqCQP;VDYub?aETI?Ns<>Kt~ zx68D`8!OOja*tIY=mX2=CZNrunG{nl#E+=emdr}!pOmiKAHwD?ypM9{!RB1r$Aw*3 zM`OO1p7f4NkhfR*Vwb;l_ea_S;0b99fNpixmHiCM9p#hx;u|mZFD$dqKkP;nBLLSW zH-X>xonW&Rh%Y$jw1@dyq{a>x0ovK&-^C{fmNSi3k<2v2fz(YhION7TY2`z?aW6?6#`Xi?HYpeaFo z6N;%(2bCZJU`xjMMbVo`kA8bInCbnOICd+>eNg88nNW&BIV*FU{{fomC(32<0sU}3 zY+CPnCDL>UQRL+{U^rBm;V?ia=rlw$SYU%L)G#XC3&lKiz5oQ{g&Zd8ftpGtT^VnY z8qkwxS3DN88;Pu7r_yO{t=FT1Ro!8w9OXJs+4fYo6i&jWbIzWo64xfSq-VK`fnW(2#2;-aL%cV^s(>}OP!s#jjQ{EuDLZcy~MFLNh@3y{xtWkIeskhV%gEe5Bn=Q>Eau`|1j{^L!!*k{nWM*l-&}MnXdM+VD zcY3{V+q`xPdUhLKYF#S0d@BXYFWsAX`>$un0f%a2|Gk8=_2)py#(fL8M(Hu`J*_~=}D7T2}(LMDss-2=CoH>dj#Gw_l=Qgmqt(Di-&lMr^?db5sp-=*hMp7nHK?rkXr4Pv}ID58M18-TPL z$4?t?4+O=Q4U{H+mz$A?-GvqC{F~PNDF`4d&7+)LX@XVzXeB0c8yZk};Aqu{_Tw(9 zewH)Ei!u~tsVcpEWGiv(SMJ3u{ZHJii32~t!w91C;meH)yv_miUZ;$ib~z7}qtAmc zAsoepzfS!`1{xvn9b#j9E(O!e&R!t^SbBS9PsKn8xjtyg70BwWfC*;3>$j4<4N31X zDL)4p77T3{1e8$Aj^vJ+myZ<-Rd)FNSkl^A`M{+To0hiC=Lt~vT%G|e&+B^0+_t?i zxL@VgJDBL!0@)wN4)Uv~1xM(QM!57X*Vj?0We;8>P5-j=5T^?FmX!^g?mSrlyu5^E z`+x+oPcKw+(&-ujUn$=yZ(!rO1GAB+P6z0=!}sV-a6!UL?l5&PLYjwx+!zr{(Yx^& zD|>*Q`IE>nf|Zb?j06TE1FMP-tg2;-S*&@Y$=24EP4#4eCorq11tZ}OZlxF;EpHZ= zRW#OgLaDKWMO)DJxgdSw6M>mqH6U9RgpDlqv+VCup*RPw{z&oz)8BQGY2efTs})$I zfJw}bnYEoM6}*yQ9Ni{BF#R<7L$S)DZuI0!B7TatmpbB0#B)Josq?uJYAyc*h1c`t z6TC~(_;_M%!_w=MayvC_9>)zS8K}x<87>R`;T2`rsf1mhY^|*v4!kt6`%YC5GL=$H z92*CHmMJCrI`f76rK@AS0QJW~jO&Uu&kyA~;No2n9=RPK@vBLjlGzY{IZA8;NpapS_kj?MNB^X{v-_Q34|a3WQ^<|f7b02 zRWIz&D3a4(0qKv2(WqK_&Pj}#uG>gt^1_kbeC88&MP6d6)ZTUO4kqq7Jm~VtuoZb9N)O`=k|HH9 zUA)Fh7rpN5oC_AeErLCnPnAwHHa#}8O)4H>!C{kPi7SAc%dX2}BPH-)IFYcsJPn{~ zc3{z1Oy`OqKhC-<5B%D?jzU*h}6 zc%cvUf-EGeks&(%+5xXYGT(SK`Mb)51ivINxlKl0!T0888CCxrSS?;}laX z+gR9XXDpgi4ZXqP3A#PMGoE`Wxbj$2F7VAolO&ldZS0paUA$PK~_KG->t3uZ$Nx?hBJzoo{*+fuOs%q=^|_Y9uzw7Tur zPJ2s27pa?y_AN7H7>Sh{q-YZ87|ckW`EUUB+K@9pza;pFG*tK#2?qJ=x!*CAwi~~r zsxA%Fa3$i`@V3&e6VVRR$$E1;K6#$u0Gh;PXAtU)G zzEFkE^tYYr%A#gW7kyRK8&o_tL zxEmx0U<8MG0FP&_D_9yik5;Ej0=V-ZA7-XKfmfsk2d}l6GKo1rLSkyIpoV0YRmp-Z z$Bu7!w6VG@YM8DEold$!XdVnfCpJz>N-E_HDQtQF4ceTA`^$tsW%BP96*!_Y_Op}` zzv3hi{=^N6?X+{~*NKp+Vp{pLLAsb48|5Q!Ci6#jUPD!NZ3Gp)iTi2Jezd zgp+$>q3W7qHsdDgNN}TQm61MQ=(1P0RwY3RP#3L*{Ay?97+C2FmhyG@L9B#wF>?6_ zMR9lzu?5W?FGw-gRxwsKeM{{naWZnwL)&rl7g%)NFr+WZ7J%XG)G(YcHIZW+W@No0 z9U>^>H+17)V>!G6qM8qoJ26q^fI-nL_#QrVHW9Dg<;ngX!TdATw3lhiTf z*SxRqPK87#P>?p64sO5SV0mT4iQ^hD~hs{EWZ zmSXH%VinF?1Z|{i&gT$2a9iv?2cAjB5Z6m`mp=E=6KT8jO>WG%9VZ7%SFz_z5!G4l;&f5?2V`j84`Zi|dw zF;Z3BHb<(tGL_%Hg(SXYs?T z$BJwGLpvg7xoYk^9d;an1hQ?!J}JshJ6$r#sKPvZO7P19e%fp}>Y)>tJHbKI`Kjw$ z5sr4qg~8LEmU8@~GF|E`skthG)zRyODpC-Z@QqI8iB)^;#`BrLdr`Lhw!Er>iw)I{ zKu8((_sG3AoWj|6RM@|sMeF`ckz8QPKHO|_464b|MfySKOr|O7SekO_1uuKf&O9m{_1um;afaG;;Ngs3!iBR z5l|+gi8jBHWM&`7*?a`i5yQvVq7R}ZkAD+$N*EgMKu?~TA*g0UGh(OdpSBR3&@m!d zhbX6s4D0(GI^P4_`E&>e+q(%PKKj?RYk328AeF2=g=oi&#Zdf|hW1+Q)WeqEOqb2M zidrCDWu9f_Hu{)$raL`=fDJwE+b;dZuM5zq1j2jFt!l%JJ5jV#ny@F}M;9`Hc5Mk@ z^uP64Ls(IkCRxDkUMBy{X%{8!%W1yTe#$#$5aD$7bhkNWLp}BeL2SgiMe8GO1l*Xp zv^Y&VN{%+)^!~rlxw_@w1FQJ$n39rEW6A(aptvyP2dNkZdFGr+V==ggH_?Qy%u^+? z5VBSGt_?d4ZuWz^&XmC__?j;`6o0prNLj6nWC{WhC|PlLv~S|kT*X8j;BfI~UM0D* zqKp0M74%Gz=-g}zzZTrTP`mPpRM2^%&;>wWK5$*U%KGYOv3bGrpSkwM8-zqL9lOl+ zb_3RaNj?R$4v&UHu61X5@<>c{x=B$kBXvpy#_*RjLXC@>a z^zwNS=*)FKe@tM)GPMR(^r+~WQ=!k!(f(clGGq2Izc`(&0yoTN7a9o`NRq!i-@9a; z;)>r*`S$26BWm*m?k!#0>Fr$v$6**_mgG&+#{4t@gmUd*`XD zG|q2SXxV846AHp8k-h-KhZk)N44otErV61ky98NCJESi+3I#(6GND(*Xul9Vm@b?C>cMhbKA|>3~zo*$W^k5x!1A@f1$LnivKmA8fa7W=Q z(yI6|F-f6;Ti^G(qm1l3Z*%ukFTu+ubLibyZ`_g$d>${afGxJTUL@yZa2tIGhqU}< zByrW_aQo6kJHKilOB`lpe2{WqA+xuQ6|hsaic((n$-MIRZ`vZ@L}4v${Mw`2RnuN7 z#8jQ{H5)DC-hXsGJ|zE%?Mw{R*E#?hqgLu%l+1zneTnc2$hLC}uoBxE@$!^2W&gPI4Mt8f@a#c&2<~Af2U*Brd|1^p0deRARz5x28r0f{Xf4^Qe zY7H}5Xh+1FV=Zg33<|XviLI(;ybys9)2-5hL;gZN%$$I$haD^G#^GpZ`_A$JijbEY?mH z?_CWEEHFa?O<}i1d(DYcBQVNx=}Br6iySKRB8__Un_&}L5)jUbf#)9kvpX8n-d4aP znRpGTE(_lLTj|#yj@EyWDWq_eG4(>0jYEw0hItoLxkBcBI|6>ip@e1!G-NB6y~Pm9 zzueDB!$n|@fV*V#^!!WFue+mEjlrBibQKV|z8(~D0K`hxS@dC@1D1OqUx+VjXlmX; z6=G#3>Lg}A$Wi<_@M5et>Q1EG%cJXUp!=a)pfu)7!?9wLNcAsq{+NsT;+09Z-D}ZZ zdY&j_EtKf^RFt(o4I~syM5NDc8^`7lAO8wH!}FQ5%mnvwBKc#)8P#Rb)RDe9B66pv z4CCD4;mR@3b!ork~QPA@uJOuXXPPBm&@?vb%y8;6Zf`bJQkQ`@iaHQRmi&+rQNl z;HA`Sy%xmTYaNyWWiaM6Z^ZGdVp`os1K`39p3TMqh<#T@Li_=-d&&n0Vm$OirY!dn zer^sC+fZ;fP7m<|vEO^tf7iZnMwmUlp7+bqgbih+V5=Q&E&u!$+Y65&HAk9Xm{aGs z(ZVb}p`I13bo7CW=jY}MN##@L{~$P=FgT320~929NB9&Po?e3JF_2WBhh0V&($F)Q zAQd2C8fv7LlHiH4^y?PjluQUBVxS=}m#qNuFn=$1y!fa9Fec{6F3H}xs_m7zA6S*yk6VmS9%s)Sw zD+@nXFTM3@eB4fY)@E+b*f$hZ6GaQ84?BCyK=)&wDM!ek_JsDG)9UvY#f)SD3lJ_J z;QHTmlM`XJ;&oNwJfq*+zr^Vnzh*1s@>aaslv;#;6eF5e9~$fvbR8|pKTGTqqUAI4lMrd!Jv?4eV+xvm^@% zReq0%kEB;U;uGU|)$L9$ZVQ8{UHW?n7o!Ca3?*W}gxu7v@tY$0>=_Q3bZm>K>*P7| zqhqt3jBueVx+rZvZcr)P=(n2rHLV&Vws#)OsEx*m-1XTs?=m#){!O!D3I$~0(;(Y~ zh*)u|)v-jtRO}THVWA{Mi95M}=uT79J#yGl}SOkL!y2V+2J12clSQU2o z0W-hDSRhLoySQY1e#9{+PyH?a52c`tH=-AE+og#fsTm7J8o;iaK!gvDFt&Pk454yk zSxdSdDlxYjNGuE$hOu|JH)FD=#4C50A!4ohxGtcsa<;qULiy6zCFhO~g;N9o@j%(gZnr<8R!nLX^_xg0vEPXicjpGTgkOSXKBM6J;X8mdY27`@0P(ete z1=I=RX}FcgsDhCgu>Q)>olUEae!7kEaZ{odm;&-@48gswjo?kt`f{_BZqwZMw>nUz%Hn?mvx<9^eb9wJE=9TNLl$%jsQXL zs-oXgq27kgXGo~F?ODv6Ix}SjIn=?0D(HkANHuWaTu(HJ49xuaa1wH)vFaY!cS+*q}TIgUkWz!BD`WjJIFX zkS_Y$>U)TBXyf~_f&uJK!;a3Nt4Vop1nx}*fbR2iboEPsy^^iN?;>me0~X(0|3T&$ zdv;;g=oo1Y7|w%;P<{SEY?b>0@HOCR;6&S+2$1pSTieMkS*~mEN98e3Ew7T7rOy!x zpNL0WC+aM<%aFVUWKmXt%(UiwRCL9qhssjN;wxh=-IJbilWEf3G$KNGEM+eRPul_~ zc$lubZaCE_!M33%q0m7kZFw^jQ8oZin5uET=@#9X`7z^T#1@5fBsdfw{%JZ-*B}<# zX9$w1^POKKwPKX-GE`PP^?jh(;;%Y@6L(-4# z^4$*p=g!RWrvcWoYJf~TMcSjoeL-dag0EqCYC6Fe!g9S;_@|amsOZT{mS}z|`zKLN zdqn!EOS>;TyDJMTt98uMbvX~0ge~Ce;K;9`r58DEYY|^8%2fsIhs$z7ZGkd&f)?q@x4Mr&u$DU^hMdj zga<LZq<8`{EAqlD^{PXuVAOE&6vqF1S!ucd(^poTAzWnXx$8Z#&eE56D z8vE0lEI!xdgD@G!PxCmU(cTh5%oBT3dEw|S{;8fkgI}9Gp3-`Bxh@0w)a_OunNJ1diEk42m~P!D_l19dzUp}TmvEc3QL|2yocmRr*N z=YEA?^NYGHI>H1LH=x*3(H03|`b;dBw~CXatYtv?c~N-0dCd$Y$#yP z2Y=4v%epQ`c22E^O@|X)50|HqOi!B(pUakgLOCYSf}hDxchY!hCd0t|@sURQkb9u@ zS0jqS?LhPyk?kp-q$>`w|42}mzl&XEdMES`VQGX#+Gjrq6&U11j}R#>S$i>gBY~Ps znCY|3pqy#t`o}8;=576HG<6H3r1OaCJf(GlxIW@cah|h*O%v&?&d`E0DTh z$?fL7g-|&ydwwVC-T4ASQeDmvK4Km)OEk)p-S(qX*5BHqH>=&&_gDb3D6JQ*YwdH$ z)<&#cMdQ?7GxnPua0xCOWWJAoE`>O6)A!gSBltm9#Nnh;Rg9VkPG3SVr?r-H9{?YQ z6DKviJ=sn50iESK@LrSFVgmj-uyS74(K;2Z9IrU47;-+mCWYkIOK( z>~Uz#TGkkj>h`uVTWKXBM@lYHXmm@MeW~zkH7obJ9&@r1{wrYojNn)Lt~~;3scS6c ze*Ad7rRW`?*y2+3c-@6n@}p?sFMH}rZ5LlaDwgSo-=0~nM)B8k!*lb9@0!B(p^;6o4h&8XSPk`{vYQU3(24azhuSd38S>VAi z*4eX1;syG{@wb?^UCe@{7$4!~7YM>wesppkQ(w2vI2}7*JVTne6Z(HOXurs#YVKD* zx^1NEW2N%vM z2~B90`bPL>5#Weh0C~N@bw1h>tktlMIrBDBPrtfA`8y6F3WBgs^7W=;L{otm==-yZ z(3}o6h74Xu7w3vaLB@f!`Ey_GABRDOBL{1E?4Z5rDYeh3{+Y3VBNda*xVty3vFQXd zk;j2oM+NRfMCc>cXO3bBxxjw6Vl;T`?#1iV;jbXa)Z%jo^tospjeVI9!)4YxtJH6m zEe`B{iq8(%ghdWLl_oJgcc*w=Bi?Y=Zq)l_2&+&GFr?WS(@IAU;mP*= zn7JAkh=%O9FbmmVAx_`Ybf40-!6I@P@GtX{v^3p>X;EyR$$ZXYAf?w%9gbgaL)fF| zLa+^o_TqBY*s+{CM2Ez)VvU+RWa|)a_0)=lwwx~qvNUbFLZZrTGd(L0TVk5CHTCDi zPZ?~nmqBEB>=Wb=Nq*VV$J`gNM;uE6aqhj2yMnv}9gBW@ihJBu_Nj#3pqV~vP|~+n zsl%CX1{u$Z%03U`2o2sXyM~Lt2!q7y3<};J#cl~-HYbOu8yKW4naeNpAZ}Xsw~J57 zwdiN*+jWyyWW0R~{{?;6bb92k2X~GrTkb=OV?d(>M$Y zKAHVbUz&41R|t)4B|^}OM~!5vFrUQi+#M6<;0F{W`BVqxetq{IapHG4c)onJ{!?FZ z)iCO{+%hyxjRUw&pcRqp)6spc|FOndRbD!y?|CZK1WWA$^u1@tgHEFxbVR(>UE|C? zm6ru(kL~g9)0MS@*VpN!Z7rMpKaLyso6o#5?3+6!sNBMi4tTN+boA&uJu0RPL*M&s zv2m#OST|=6$PEh3{srs~_I9;kIk3E|-$+t-N8ZQSBon$zNVI%1W);rTBXV7u|9ZLz z92XK05w!u5nz;yhBRFo0-n^BjXRld?bf@?;un0i;uMAhbxBK=cTtRwub0Xd$W3aYD z5jZa|ypcG+S4J_R7g%i+>NctqOD3q{jzx>C%iNE+wwml0LP#4_Q{G;kkefu6eW6w{ zK7en5owTtWNU7gVXrg~6vE)C<;JSbVrlfwBluT@9GMv4ZMULY$C}j4&2hy?n9TMHo zf7Mw50>>jo{Q~RL@K0oc+A+yNaLlqih|uEn@8vuV%NAjFth1({0XMiRt z`0=*-zNEb1cP&~I3aD$@REjFm!xEVM-Et>%DiU#>Y3V7Wv2_ob`=D3HCV&hB*mPP{ zzDj7=J=&5ah|6sN{OfWGH0RE|y0+6A8V(cKUrX%l8P%_??(Q z*@*rd-@ma~N_w@FBJOIPMf}T-UreNJ-A9cTS!wS(4@|}>X{iesQ z22!ZOV#hL;w~Ual<_96mqsjPSQR9$W6nj1e46O)(R@BE(`SEV{$bO_1tp;-uOBl^x zSSGh54FR4ivf1LRY0w~0t3Q3|zs}n^yTe;Z#e2IVv}^j$G^=aW^Bs4dRElEn02$Yl z3mp6f)DHOzgDcDCoHWv&!P6OG6L6XXJskUaZiqA#8Nz;|H+jA=W7eHIOCVm+$^(W} zB5{lp_x-g~IJ?8K3>mwkQ3r3`MQ(S{;P(X3F@`J-<)A<}SAf^p^rf)}n|KC!xzHwbfLB1tam0~LaWp?zV-_e9nWWg%65b7`>m zc7p4$T(7@3zMSn!v(I`FqMwZf#D$nyoxtMcE3b#k4+4KDdK!Sf^5S=$H%alQk#80- zRu?&sdvzAO%c|93Knrqz1T8{lgJ<-NKU{!2OOYj{YKC=D zFk_til5me?`M%hFR%Tf@yO}z?JMxl&76HElsId=lXnJ zs@Q5AzT~j~s&=9;DY41Z9lQmV5XQs&G=rF&@kqEaFGF?^=g(X_E-2A+jazE$A9tLs^P$D9YC0=uLX z^B&FO9nDo1d@8mN6c?uwF0;;XjC8f8#@iP}^o!g)ilpu3T9o{r75HLTQ%2s`@ZIg& z^v@~Qh%~|`|JUXtWQ)cTuV5L(S5d&I=>4n98fTmxsZv9+$^uVI>bb>0p|`LvUI<9Z zYKW}2;wad>bQ>fSoOu4Ve)Lo;SzKVBfz@rt(r~mai;xdzJl*f& zaH;ZVbPde6(|!D4)zRBPrD@;gZ{<4Fvhkepgxl7BlOA3id(F~@pVBFtPzDOP_s219 zH=i(-fsY&mZ^e+wc9cFZT2)0ULpX`yM=r1)aei%p=)5xN=g!30+pc0}58gr(0dV^r zt~iiV>U@;D(MBT8Lk%=c2{`3R3m{`PpYZ@KoQlOm;Vqfc1f!d1Mfw=-1`o0!J$ru*%Cp5bp2EW>ggvIn9zA z${94Ln0LS7DdgIQF&A0q4`}kM)txe(a&y*kq*|CR{hImyuM$x*%6h|r)33OPvMUpj z&%yPUAIg4~eBq46vW3c@=5ya<{(ezP3QJ>^2O5)L!-L(xeECUBUn1t|)q%dzf#RT5 zL&fWuGs(oP*WUh7n&D|t0Mp)C>q7gQNlVgIKsToK2!XF5Z?sB55?XcO+ZN}(b+!0W zz3lxgdijg_WMcH+`m0QD)4~-!8a|{y4)H% znwq5u>?nees85Qz>GvCs|0p0eGy03*KA70f=h$aM`M-w@ zfvEZFd_qT0TvLE=0Thb8FhpGNy4lgX{5Q9n?3z@K5G@^&+U%v?gBsOX0=CS{sY-M@ z8Co@w@!w=#k%Yp}4}a6lWw2)Ysd_yU4*#gDm?&4ndQPN968KrDX)#x_SYHn7+D>4v zo1R`qLNE~R7WKF_t(C`$QL9sB-r&_c7u3=l!DLcvAT!?enUWT+{*?%C1-D8Bh%Xq!?R{mW%i$fY|8* zShwGCBqk>f6t{_y?wTwV2DFhk5xzv&g<9`hrQ{>m)) z3No>M#T{^6nqZ83ZXmBV`}&Q!TH4W7jox7>ZFD(cB{xGp(Z1-c*&n*;napqaa0o(> z&2mL1zQnLF*#?3<0QkxuCU=Fofr~cdZpAN-Bu<)--=QOjC0>6mW$#0is_YJ(Qq&8H zpF(YQ??jGB<^WF(4%*3j3-kz(Pw>`x~PQHPZ zhrEKJw%~t0DmdDDmqc!T`DTU_6w@=2(T6-l)Xndaml+-8DE`0KiUa>!G97tO3P}^= zXI%9A?F}`kM*i@P-8aR@{`WviTDTXd*S8q+syC(dK;rndUEn%V^Qam6(ZH8|?6xFY z)l9wX{X7)L`8b*Z-amE{G0W^_Os?tFgD)In>PwdGaH8ovgYERHLs9m*(|Bw%g-^RT z{`t((#t5ya=+MMCFmMs@eu-&s<8|^{E~6$~;{M&++_k)oMFiYK%Luad67lECok-dK zTF}3W@3a%VgZ8!&S&I+Di_6YbxP*rL&!yN6S)4eM;U3 z>no04|Kz!C3cvdEBS(1Kz|Ajf_Qa@5%5M1TPlwbaesF_btMtb+3WwrDhb%pJ=+d1@ z15aK1NAoxwM;1kENU($Zi_yOHLW(EAC5_2)o5sa z9Cqy4*j0FqQ)#S(+ z?#$2gSn!>D>0)DLdB}n|(@Y&Qe7Ahx<`q@)sC89f6BgWvleu{0{W$BZPT^tys#~KF zicc$#N3MsHq&D9l(xNCDrTtj0V(cnBU6jaJf#-4%^UWTZl<8-p#y~K^HtMXQsb$$j z5%9WmY67AHtR7@>AM7NO7>r8AIZhdRSrb2hm3pPWDfO7tq<+lBlxqg=lj2A3;XF!? zrivXD{(b7$09$5d#)6fezQ0~)r3z9byvuGTqdZNsnI7|Uw9*5lQJ?YfrKA}r1p8t% zIUF#U@$4i10|HWL;Eak-i?h_EUfFye%2QW8?W|jNn=EZ!M{Tm2*zy)YEKag?d=jE; z5=XR@#xk3qkf$B6r<0g9#c|GT{t6sWKROFj=8p!Hm8f?Fpf|K1Q)8vP*EB|`bDhcj zoG5cAC$aM6@9h>sTYpfRaw(8QT8+MT5Fhy)Wjs2;;u3KnHC|#sZ@9o2+Xck(i*P0GlrD4twY+ zxxNp^w?si87JO+=->2m=WA3|~InCt#mx*6(6N|UE^)~t2lD+@KShQ$j(XD^%+I==w zpphcCV7!`t-uGsClcZ4#xk_L3y<cezkWe)Yfywiu~F2cG<^GyoCJh_s; zYFpcR7%r$Pd11xiF%9TChh5gB2yZPg-e->7o+mj-ZD^=@f0Ig0Ve*o%icF*$;Au%I zw`7#rfWc~kKcgTyto za{rk6VgZ}*4de8iJ~tU}@YY}xnz0^mN;thlh}}>)0IYTv;HKa2aFi{GieCFS_ZQ4X z)h!!uIS?_;xS~lB#fS1tjMh{UesEG=VU;hCyy|&{Th(eHs7(FVKmcJ5IgHLco>cAOxUA*xReK)b*;Z~zz$L3%>?HZi-3q)V zk6abwlV-bA8Pi3al0}OUnnD!sfW&&7X7+EDv#17yQJE)&-9Cs1@`fuc7&RRpmH-1{ zAZSm&VVXd@p|f9?nCc+a=3HpFHc%Go!c^QR4+?nx6E9Jj|7j8tj)a~_P{@>C%p-J)^oxA1G z+uASt9DA%(0m{!s5|&kFIo-k?5>H_hl`tVh3-I=o-D!oa3HHYO|GU|`XN)sh-uY1o9+sl`h z>wWuCeYv{rgQ;Uz-&UguKx|yIUoj~?Hb+)iR480XHCQ>jE>-^=sHg1yg?ebQDfpqS9eM+by#OMSJVR~jo=K=agb zH^u75uIOrgCrh#A+JWT=Ije=9WmLmCR4G*H=Vg?=2Cp?n7XVhnjS$7a0_Onf=K8>~ zBQ5+G=8oKZh(d28&|ra(Dg@w&WCY$iS|Z_du9tAeZHR)5{t$m1F4vxNU+@s#d@cUN zK8R~NsA9q0jV%d_I`KSX3Wboq$R*kWOnxKBHvG<8-9JvR&0ZX?dC8KLH}iodcc5Se zRtU7d0QkzQnkR)Gw_S`jg<%Md%^13~MvU^`5{43(yAiI5jAt1;Pu%ngVQk5Hr!~E- zM2SM1K7NEBzuwQ&@UL=`6^HIPw_jzLxNfI=-lYw>5vp4)%aPxS;aP8!>CDbyU!??~ ztx`O*kihZ>UJbllyf$o;Nle2qG%;|zAovX=Bpb~p2;LJ4??+L`7o4No6SSlvmby$x zm))daCqg%3(ZkOl3cg%Jfw!9#uiRz-gFn~&#a1586=H7AZk3QhmsOr;1h`xY3WDVn zKUPDEBsGL2L|46SobhW?)Jv?vXK|l2TZ9OLiz4^SG3qW(!h%zW<}cUWO!Dz+}y9>G?i@;a86-{y5h0vyb4Y zR*9_v;&?5XN#re9=vPp_p)+b_Fa4(Baps=|N78jf3L7!sKcqtj~seoJ)sDL~+`VR0Jr8?bf0 zXM2+U8=LrY52~w3CwIm_ffgaiWt))pa~e_{FEF+9N3&>SVrRdJZbRJ0{H8x4{1Q0O z;eNjdOhqwU&$zs19Eg}?n5OhjO0h+RWIs_c;uctg6rHJ7PvX=v zG;B4?>GZCe(}|O4Pz>FT(1nEMh;U>Hq#k&Xwty(O-BR?!8ZI5N5nwle{OWV1qj#|} zwp)3*2#2*jJv|K;8>2UvW*>KxgK10st#Y1w0^C_1sAS@)$^lXk#Pd(X>;gLf%36fT z5XlK7VS?{GZp{jZ6{JrLx3^-r&~o|a#t=A)a*=3^XmSVQEVqeZ5dw?L+)_I+;IYr` zLPT(8jNMgk7|6M8;!5}>6i7JoWQ&@aPIsBwN_Dn$H>;>u{7*4k+eo)qM6 zD?0K2uE2cmFY5Xecs#qJNLJ;v^C#l25r!HpGKAG+BEx6jskUl0ON$6s@xL>0e&9v$ zDKfc3a66*}F)$#waoYT(;D1k1H+`#gUyPkBm$ZOBj2Bzg2zPpc`dgGsn%3uo{E z_}$HK0WmVy!pA>=pmA}nUUg4{ocd&99$({DOI6sA{s#IiR2nASC!-bNF!RGXZ`zk9ncVWn2TgtZn(uz1wcwnLQ3 zg4jdTlY^8AhFJ9h{kn51ote|k(`AWi`TK=SJJqySxn?SkYzDJ$l*tc*eHs6@_$_$Y zCiZjJJOSAqiZwXdVH{ansYu9iF=O}FtU2h!M>SRN4w1xRZE-Ar>#=W4+FUZD&dl91 zwFG8UILfV2DJM6>Skm{zEe7+y6Hp%mZeGao+AnT!ORM`f0xNW96o44Mk>=_}H~+c0wGKx^E4p$V)X zzEi5g!sF1CyE!10lPjXL=wJ{>V*QFpvt14zhn@fc>)J73`@hLzMS!;F41w9RrF1t< zYrI02UYeUlcR2F(Z*GWpIGPaV!PolUIzh(~F2e^916_*Yd4c{pj4cNp2?Hp4@|Dk8 ziON@-NK*eF@#3y+jtoZ4E#GAMTnmL0@iH?N!dV&-1q;^eC0Aw0>oJ3N=;~3)o|I^Z zBN!d859hBV#UCZfwgIgQp!a68*vpFUrF#a>vl{|=inO2Lf^2Ltj zdsQi)+il>7qXtJ{5a5|a3a?Ad*{zUZu_yafUzxfEAU}^J)T11r-3X+-3lQ>agT*{f z`w-31^dY4zZ8B-t$y16Ts3k==Dx1p$J_%cD8CxOeyPanGW`~CNM{-^5$DUvA}Yt|LWm`XvPr6T`3n*RrWe z1m`o#7JS+9DUGs$D`DwRrSjJ~@Pb76;y3qldG^T} zpREb;KuY|;T(m8ZrCGfv1;wkBA!Nfa&BRdpQL9UMMwjb(KWAaj%bM$L_MrLU2+>lh zrBt&;JbU4`k?3xl+*1bU*T<}1Q-lT;jx!+O9TUt?e_0>1%r(Et$3l(U1Mf!6?u*6` zUi?k=ranCSb*>5`kiO~@d7IJHiDQun-EDCZcz9mXk24PbJkp(5o!Z!5<)mO^d-}FYTP%}LnO%MD85dO26po3 ztA8f?eB8ccN z(Y|{ebNWe@aUoknHY|V@#q41Q&<+7);(G;jQh~AA8dmm3YlWUsYFgCl_eXE@6vyRg z&cBFzf!Xa5X9V_CVkX=nf&&=BTO1_K6Y?q}His5gn5nfz?FtFjgV^$`Q{+d&VI8f! z=ll&c5u#TGy0=@&ZPz=$vmHBqAN8n)$bZm-y}Q3LIzI;Q!|DQz9XE2ym1_BR>Vl=A zbB`{4MCff}EFS4+0Kk?f7teu*11&R{fwtR9&N|A;qKU=l`B>KFsoXj6X-1QdAa-XMDDBwhX?=74vX4ureQ$Wm&c&c19DdOl1h z>|0;i`Fwv2)8z>w_I{NzTuN@$+K(6L<+G{wE|0(#u-Ji%2oFva1o_u~BT3r`8xnJ1 zN0MsG3Ob85^Db)+dfX%rG#GNa$X+nGCS|4^z7vZ&zg~uYiU?BVUeI4`xd!zQqOCGFUw+lkYEeRlhZ9sEKGo1ms7oduFs9HP`q&a6U>d!Ewb|Jua5yL zp4>#o`mqcz?-x8;0Vm3%67h%9CqpcJWp(Y{KwGJ3M|?&m>TQ0^0ulZt%W`ND`y&ue zcQ@|(XY1V(fd00Dwvce7(m_%T=1G6Iep&Xn*+|5jcntM54ji{G4z5!hE4&4*yY@Xh z9Hf_iq+8eM=w8MW1|C-zHj));(&0_+oH8?qje3zi0o!G$Qq!ty>l>db4W>q(?oOkh zE+J^j5x+iU+dH5nmZ_}~ki&(*Ny0qQl+YC{^(l_p>0w9yZ z37$%tO+&$ zDx(qe3?9`(LumkemVL5q(AF010DceHGP~%MhIN~3K-Us&QvkTj<+a!Z%hB>p%{*Aa z?;6whlll^DgU@jp4Ow<z~#No`!quvJ5ef||0VUxJhp^n8aw70 zz*|9pJCdX@D*hALxy6|+F^R~~3nUa=_g0euo@f_u9xg`M4P1keIJ9CIRCet|84C-b z6s>j2HHZ&JNqiI0JzD7oQb6R-wF|gp1s$rKFZeTyH<0`MqlO)@s#{Vm3>PVc7tQ_h zOW?Vo(G;nr42H`99q>9P*&@iZ=l|Z~^I9=32Vo^RW)uW4uK57Iz>9z!`vbSl@AoRX zLwre*aj9`WN%j6VhdouB0rl6E>b!Y|bG!`VK4Ef(mfR36jp>G2gMq4SuD-?v3udn= zLJB$V^W-qWJ$WPR^bzbUYx7mHHKWE+aNZ}|V4BxPR2{~Ru?#^*5h6f5t3~V0il5`( zLxbZjIUbQ45mg@5G2Ek|!~V<>+o zW`noxTXwrq0puK`Azja)4}Y+Za=R^zXGfGZ>U?y!SilCDS78m#*wwAt7OpGS#ev%T zIFanOj@zK*m+XttD+qwIW^pJ-ad1dZoH@~6S$p9iXDuOndG4sBx&H#SjPq9?N}xKDrZB4h6PO!7*w03Hryj#xL@{e$ z(XCFYw_eqHwEq>OTiy7FI)Z-P4)gDoPWDbU*@1Hoq(Ud3-QJceS@Y(b3Pfc2;y{@v z5ffNJYf3hb?5x|8_yr$=#lXln(kY3x@%;C3Boj#*AE{C(xETH-|C;)q-6dV}lL}P{ z`#++q2xYMGcAs}+J?Ec+HXxYDf2E}-S4jifE;+$0wnC!lC#i*U|<&UGHg&)+Pc z6CKm&vZ%^QskN~<=dIcdHzLz=yb^wLoq0Q;T3dvIsb2w{5Kyhz&hKXe~M!(^Xl#x?_}2uFI4kqK@Y#J!V8h6$cGRxx4a=u-rkCR4YBz#a}j3zvYGpA zwUZMBe!9-GeKb{54H7}UlnE-DGod&t+^&<*5YOnxNyq@? zFHQ&+wd`EI-Q?kvGuWa8>|0jZw$G%?yb+zzCSW3&L|U+^rF4R&w)e?JBVD%$-4c3Y z{oBFI8|F{y_ry1&xRcaGnwz_0$MFkLOz$M8qV^Mvk6c(<}<; zHNU;>N?kA2v#8kh<5x3wr5GDR;^^QIj9l4}2B((hK5Ar+ri?eBm%XBG|KwQn%QW!L zT8;Y*2$5caMxor*)`MP! z`|E4O%RH1S9V3ikklWg6>w8TUoQbm@W6C}$&5scfKXEiPs}_c^(|jvo7j+!82HUER zb#n5!vkLCX9ipM1F^W33P~nlRW&eP&+-ZB`o4uTZbouGbeaJorLQWlAk)$6rLjocc z^7y{fy%;dN>~IKJA%uz4E?pRRqq4JzjGWmZC7!R0ExMwINI)bgjDoE?&CUD1$L zI5OSh=yyq8{Cob5rTounR{is0upt^9koQCgQn0bY`Lk3MM>y2P%i%#oJq`!#j*d90 z+2)Imt(E9_L)t}Gr2&s@0XQT7oqx!%Hw=;b(`R-4l!5Wp#;fBuPfA>=FBa%WCU~s9 zsdqC*&L1Ie6ABt@b@WYAv)oH01`TWs1www;4!Oo}!~@&j1U;S|tEhfp7r9R6RQOb6 zt#+I#CCHC-Oy!d{iGOBVYOhb{`~*y9Mveh`uVc)4-^)$=3$$1Jkj(O)cDM#L<`Qi^ zq~kkd)Vb8&jQ|7CD1(3dYTsYQ~B?dBhTMKhxT zMGlUEamxxC!ZC=zX?sSYIpUtMg&GI>ZN~G9@C(Y&DwIy70-;<)L@5pPh_MX0yzUuL zb-gFx9Z!;41<>}v1!*2kNGUXLCu-?$l=8E`5}eSOpqFYzb%7wkV6zF$#N8L%cdmsf zi>CZn^f4XZ>rjeAXv=t@B&(&I_dM&r!nNup^3*{LmuGeAF2_|D(z*bLz+`vl&I{R( zieQBWOC@*p(EVQ`gV@9I!Ml+yE^bzgG zXho_xmRjx(i0SzN*pOvGEuuS!o!!p4>%b0}|$TNJ)j+3{4X$ znno1P=T~@7o`aN;z%})aRe5D?S+&wbaR~+Mv0SLC`+BA)rK87sEN4iz z@-7M8(t^G(Z6%7_f6vMDAm_=>pco1$P;+aeS9`ue6t(P?pWeN9`Eta(!|}l*0O%Gx zxMt`rB06!JCWKSb6qHUXZYL=bD4M_avL=~jBU6L35b+k+%FEIsUzGhWljYJ(U28>O zx-XuEFOjceT#h$as59>@J|d0s;9hKH#o#01qQJGkdt||_Xx$V^#v9q>YuU`+;MaqJ z1>$3U>#yIai+0&SaxBB_5f^GK6Li3hI1T`)Sxbk^Mz%{atOv6;M+@9iGGhMKU*}eT zoG8PXcS;&l?mI3C%25CWm3dgtvR#<$3|NRY11OGiO2;eo;*oGO^sVh`#ymjOq-(NH zhK@JNHy~XYa+QA6w73#mE6IXKP$~hA`ADZp&H8{K;hGHX{*I6&7V^uJ>fxy%qGpuC zS8seif0eU?f!v#D+zz#|$!px`rbLop93@b&w^>>=9oQ7Jr3BpGP2+z)>O zWF!|E_0*X9pw8zi=Z#WjB`zA)rxEBHc9BC|t@u-PbBEv9nq5e?^5nKFbdV{l_Me0yzBL_YYH)B)O?@v*WG5z#yb~M)M%qv)s5W$@XAO8WFMsY371mY8Nlcfln??3d^;>` zytqP#RLadH>VaJi3g(845q;=sWz%Y-@Nvr|TgxsLI|H)a=Y1I+#$kfRibg)m#4Ble zw{cE^lkm4{Er_G-WroR97k?L_Hh@r%amVKE3|&(Vw)4jE$q-OOS{oQB(h;x+YlJVG zxk0rb7;zwpch+V+`O!VEVw4*+P3zwe!MQ^!js3{Gjtmr`WYc#$Y3yHY(6OQ&75+?3qRZ!v166+YtK znA$k>6q43vpP@cf&>wI|RN11v5t_Wf7r6u6{^6KXPz_U~Kr-=`^XB`rdSH0dbZ4|@xHKiI@Hp3q= zBJ&yIfoVuSh5GKMZT{Ml$xd{IK3&te2|ZqCs|Aua(`&)Hx+GPkJXrV-4$uBN#+g)J zn^*jE&ksQ+edkQe%z4vF<;6EXV;U^_=ZfKXF*yo{c)*$lpocUfL?<#68+|EKCm4y6 z7L?6r!!gjUhRcQW)tIL+MK1Hu$ylo0@Myo)khA)5v);|?U2ll*`DS`WBY)j?#5n*I zWm3U@8F~|pwZoI;zu_{|ML_$BnehCkP~UF4Q> zKnb@!N=vqm3Wh7SO34d%lW<%Y6q2zM)~>bUTJ%6FN&?LAew3KpO}Yo2hhdJ<^h;f# z3&AX6qeJ{+d?wA7EE!c2PC&q~B}5mY~U?wK^ssZ0E`nBh` z7~4DvGyrgmz#Lw{H*$Cfpkf6_FIUyA<{xkkrp+iJzZ);uw5bNaaI3-5qX2lpTS+o^uMr+&?Tjg9QJ?4QOBHNt3^$`ZV3!Xh-e_YWA9Wcxg z3KOa@%s?jhfWtaFO#&raDGy-O@d8%h$Yq!;&Gp=G60r&lL+3l)X=^L! zj!}%M)Zo=QWusPWX7~d3N_Lfn?#;|t=Jk@c?|xGSNJsS7MKJv~sBn#TjXyc{eOl|m zJhT;m$Xa&kK|fYW_`?hE>YF;pvxp>I&ZJalSWIV2v^3uzS5*@;JfN4gPIiF@8ld2mXeWVK(SdoL)!o{}j5-kyd> z{MoYtHGBb78hJS-$Z-o1sE;=pyn9#>*~nIE3}Bt$a)Kq~<5Xc9gfXHuGrIq9sA`-e z%IoJdm}jTJ-=6khHl1y%)uZ#x{YdwhdQU4Av(&YPe(hqLyqmA=A*a^wj0o3`1uIj^ z(Kx7I)CKX6*C^%+{`}cqbC7m*FMj!@3!cyQoW}33SEqZmTR#_Cu{J~0Sxiklfvgt8 zZ2OsMv^|pt!kC=5E>6uaTjEtomno*pFY-;Sou@JnGk|wLTkGM(2jkSuwCK8-Z=BTs zqjW?_*z_hRP;Oure042XI2o6Dze_%+3wb^>P-{LPWGBCVzr2vqqV5pp)a^OXdYSIP zvk;ib0^^=dMKPdY-Q(9$4%$OsiKprlznTAY*nI(MVh`G82EPqVZj}7Q0%|tZL@cdB zlEwNdU?@Gp4kyAau!u)J%S)6@*X#2FjEv?gn^rzFEqfZ-i~qfu-TWULmknUOda-qw zczU4p=Yop{Cb&eV?=Ce~Ociq0r7;7Z_P#TnRa&kw|FAI-8mOtKxc z-sVf>u~T$;Phr9-Yp|da{C57MHh8c2-i&Hkpq;(_Ub4c4POx3@poqO9_7pHOEH3~a*n)r?^9{Z;q zvR@l~Nx&9D9o$+;BH#U_thlD5DjqC){>mq1;zFfuOLI|ed;-{eKe2vrIKRg)x=~7= zO!}!ww!A5LW0uJ3F4>ivYJu0R)44X*Jwne(b92&qA~yY|Wf;|WBJtAbKmHL4atOsR zYH3r3dlhJj0Sk#rq>)2cV}T;$^e^C72>9jJRyHmScigm}_%PvjBWMVL%ny|YDOS_p zKm5%YYbfGj+bIDihS0Khqyi);R61X_B{A;){OpY_2vAAd9;P**iFl}LJ*f@D6zrw8 zNZI)FOQVAb;_IeS!6zAo4i{pYAb}FSV-T?%B2+x#dXv4=Hjxr9m3RtfTW6T-G`;WUxkSh z4k>t5qp#sl`clM`ezs|9%v|TlIJAo(c*_zK>v+j~`yEkUp$A+Yx1KC4do5ef8v9iS z03OClIRb_&u9i@S9PpE1f%Wv0V&B>$Ri~pEq|B{FE>2^|t#<8L1qQE&uf=ae9NW(N zE3NQKg3o`UYlMgFpPYMGxPFGh-WNz5jU3NBF@yu(S!NL4Sn3j&f7wFT=Jxm@`VeV* z6pA|96dCyJ&L2kzq4=HptM`FJ;NkHI7v@qOVNB9nj5400pEBbVNxG9lF`UPxr=HYr zNuMO(H)rEtA^XMd<_rHP3B0biSNatj_E%huI2zaxKg^>;fl7(IOv*9EG$sCbzby_a z4&MpQVLL7wXmowq!F&+V1Xj}n9Zo)8w>{53kSnmb4%9^vp)A$> zHa{=lDo>xH=yWi>nLKr#Sufq+LM6dcSv zm9(YYZ^yzk?!DP9XNj??6&Ck9g6UeTPzae^^=0h1sP1jH zu!~`hJ@5rvM6ezhV4Wy8u+E^H2WlG!jz$M`?f`UyqBn3>-4&___x1{s95)+N*Zu42U8s#i(1d*Gwx;w?8x>CX>!Bcya6_V}$Zed(}b z+gyIGc>^m7bJNa*>B9-J*bdnd%!l4F_^gLY zZpVR(#+B2MefJ61Ue+!{$B^dL*Q7Z_AA7-&sw*|otD<<(XK%mF+!v2+5@)JwYbngI z*O=4Ly?X2dG)Om0DLAI^X;3Shc5ihif`5> z98-TtrZt_&N@k3WJ)JVyMnB7a8B^g~*49uMn3sG__8$KA)OY<76z}1%?4+Vk_d=`H zJc3rItZvd)zV(k(T^AE-Prcz-=z$?aMeb?3M_|8W*Lk%v-uv3hDe1uATO8HtV!2~%v?qiS&E=-PyPwf#92d`>c^9K|mok=l9CFdj8 zN_`ELkvSk($+vKpo-s21RxPt@%fI_s{P8KRcx6*_~(lhR=@wk^*Z7`U^ha6vBHoO--QdPL#ol&t5Hzde@7O@Nm zC|%MGubRi(pNKlikS=KvYNOpIK63cT6*(#xl%{S1#aCw%a5b%41~KhYzn-?hV>l_1 zUuuM_e`{;^k`vC-wTJpO{RSE|_42qQ?%9n@KL=P0*ie7MywT1tx_FyQ^9LohvdXAY z*>vr5K1NLU*imHXA5m{p|4=x8+KUpkuQr``f1DjAiWII7>ma_%br-%i3FtExx$(#3#Bdce!n(tM9?^M>=)~~ zL8No4Kq1q1l)z^wt+zVh$Ug8gnOe>lR-(V2mL9?V@otU<*e6<$V3E+lUUYloyziwe z0`4bC=5EjE=R#Hmx&S7k_fcp>rA${8L;l_8ytBN{D0-v>hOWOqdZC-lAPyX1N9j*X zs(x{?`iTHKOF$unOjij2erA`$K;0S_C~$$ek`yZF_U!}h=Jr=^-=n227H z^u-hDRv-`I=Rz(rq1$a+Y-2ST9!Xa|D6u4^;NHF;t)Px5{bs%Q@En|C^PNcNJ1Y5e?Ot zx{#*W#aj$O8%@I9FUH(Qz4>bz@*z#UULnS!-6m|LC@znMFY0^fZ>e8tm#770VFB2! zuYo2PHXI{dP*;V^D21YX#2&DCsq(NK+{gj|18s#7;D>bvK%;-kthKfLD{~QpXKcmomE~=7`d^DnJR(Ei zpS&<64mz%RF~1p>@)-pGEC))F#38wa=U?F_HcM&k($bZUK>&OE=-XH4TEM_|ekJh0 zu{`Z*GVkaMKCg9c<)9sdVIUTa*A_O7PfYN)RhQlSb-Wh`1CBj9kA%Vsj?JBi~Hs1!Hxu1 zAjGtj6fyB~6KHjKwn2KQC#c^X2KJ-DPGoQGCS^_x;e(raSNf zmN&3l?rf~N(mr3p5>WP08W4rK zz!jW{h6|2LCHYE^T9AuE6|e_KP4nzQcS@@XuJMlcB>PJbONI89Ebb2HPp`9o2@8JA z@!c==?8TCsvlY9@QeL-pn6MddXmi8yx)bXY3lO0ZsNR^s_ItXTb=>HUHtkJC;-V8A zV?Cvj!;Jb5R?4RYN&Dnq>AxN&h=8}qCa7ye;)pY}@zs#h1)|s&y>bH_LftaB?ZqDo zi8?x@ru&~{f59s+*5*bkzt&g@S&1?Myc~e!IQ5^%KB|}VJa~xR!V&&yaXKKUHo}o} zg=1D9vNJ)@E;`WgY)zcsv0xn~C&&@QF8~Tq`yH@fm1FzWOb3RVTRXC8&v-PHSO+y; zVcUS=F{AND=FajeGczV#*|D*CfbJ)asUZkz#jwoF~8u zS^(Ip>&*effSl=+I%682=(bD( z1{3Y8F5-t9;g`npw9Ln3IkKA0wsXA~&O`b`ip1YK8Ko)Mc$9hxhYUhX&mDu-nER8z zv$zNNpJtjm{z)V%+piZA#7&3s_N%G3Gi^6`4R0vM%vQFhgj-(#q3Y64*FfwdC)z~u zC0HTJ7^Gb=cbwTj0NA__BrntxbM(d!j}-3r=!N24fKM(0QQbxTAHJuGHvwB%jgXFq z`7-+orwdz%t6Q5Q_YJPJK@q5_06T(Sar}2lh>44NKQh#8UjclYIf zw(}4$TlcI!&wm>!q=69)F0eQcgmdizS`dmcfY&!BNr%NI4n(Ds0RDg_YE;@_TYS&9 zf{G{h~k52x?oBHL~!z;+6rGvjSRFfM4-p2Pr!to zZTQ5xqD5>Iog(6ji9)cX7$<6+YwMA&(PFY3c`>Ld$FcXvyAHGDM!DT_b^M;Ng2@&p z3{s>^0{}D3b_>%+D&o<&S#nP#Q3#jRW5&Z>VI)+9?l0!^NE9dTc6Z=YGC{W@zt2#L zmuEkbE#WJXXhg}?yfeQi;16Y1MLPl?rbtBkIbMDiX_0MlYB;IEH!Mt4eGW@y^MH5N z)cL$>c1SON7p>BKj`DJ~U-n^E>D1zHgs8Ns&Gm&Zs*lKkfHq>tmP*GkQ~4Z_CGG%Z z((-wqn%{8PQsHyWSjSAPSSiZCb~8x`J~((fEV+64-9P*_TY*kw2#8V>cg4}o{%JtiCiWTQC3R!_5j{^jNQA>FVu zSK~-AHVfKyDtIJWz5O&x7`!Vn8$8$5>d>J{qMf1V?X<>`_po3>G)scyK@F!ob_LmD z$fZ}aR{s1Uc~b@Ce{WnlI4|VW4KTvn0ZwLNWsy9F%pXOq(wf*B6bt;5v)ULgHOXf4 zU;f4UarNXm1ZMbdt_r{-xN&v1VAvG=-p~*2WmV9KAhzg^&ZWof->=Y&X zuF>b$=?j3i$}ttpm}X`kfFWdCPRwprpu=v`n{wrim8S*B5)h95j=O`Q9sScxSiQ?Pj? zH{jX;>d||c(0W{37Nb~R38)%Vh?KIr1`;e-Hd_&s_me$oUv6+{nD<TJF4({DG`-3|3QK~SOJBZEi>pNY-iiy#jkJ%5odSbiCU=i829KAct5 zNu!zu7LUdvhu~34IwVvP`d0uC5P!e`1Si4W#1#Q#PFRtoe2f>8ms;?P8JVN3GgY(L z_?6R_`U?B+O%P`OrDQo$J7~InW#bI-uu2t6_b?`H|G#cH8`O15Q;}s6L@a`| zPV<<-xzC7q(OdW^iFc!n^O4a}TXi5I9++%@lJEj;Q_IHvumcQ96;RT}f$6(Lx{jVs zO{;8>&A70)4Ks7OG9|VCVnBu5h8xryNf^sqIsAQ}eVaDMThI#X-#<6FOkq4j{3i%ABXHn{X09Mt=>mlfv%2jbQ&bEQUtERkB7DE5My}p0wLC zaO3?ZK5##OE?O%oD#~T0jE>dd`k$EzBH&+$x+Nq1tR|JS)8w76%Ot-0`lQoY{9#`0 zDEw^miNQL?H@`+L3`xL^`W#F^W;*oH#~<_WX7CPSj2sc2xB|Jtr!u0&*les9ALkIX zR=4xJvHf~!QdPvY?dUeW+B;vEu03Y!7jnAfx-eKr1oq*g!t=Ib0|wY!07T{!j3tKY zCO6&{m(`s5(G+C=1KxT8TrbEcQSAJ?iTe@nb@>2!(|S)NkQ_W|gc;`~sdSwZwAPC6 zHy}Qcn~lYgxrq;#S6cIH8wQ84p18O(i+b7lfVHXCQZ}(s^k%8&6B<#0e32pj$T&KQ zA!!HGXOBMDa_iOXAQ3*}s>6sSy6$XS>%9HgQ?k26Zj-tnbo<#m>*<}((`@aBT&-8v zi%SnLZ&i3|*aNb_IM;==k!`_ZP;?Mr2tWaty;3$YweWXDEBIW&1T6Y%rshBcm;A={ z7OQdOyGCO_v3)&Kw+uG8ud-PV`7KS5AWG7z@$ehHsRCoqGumDVlsg$h8N9KqzPi>| zuZTB2@jVJZ%~7QDRJyPHF^>Fs4E%C|8fcwvy*)!i9jzdQd!hT5ZxI2BuBz)eRA3n# z1p~oHkn!=!0yp%TLc(piu(t7h@j1b^zq8+o3th1MGvDIfLq;D~NytBhlw^44OS|7&Mppy&dOP-(duR(^(5F^9{YG1GQ9T<+GJ2!>V5n`Ot5%0@Re zH_hfGVGMWy#&o=4@%=pm(03WdLeO6qJuk~gQwsGYB#xE5_k|Uk2CDAViX(bv0n@R* zrT{djOV3VoPMRuy8I%^Nz$fJqV1^x zdDhj*FS>kL?=3SFWTM%{7BTjTWBHsGQm~)zEuvu@NUki0Ys!+Naas+(#!b-hU8hro5xr zGDFW*m4*fSafMU&DgSA_NMQ$Qk=zHJGjJDVjMbBI&eI-vv+cE6UC?wx_sNj zUW|iHq|StGBFwDjLzn2E`|Afh!58K8dgGP+luZ^Eq{F@(KdLS5HeF6s-xCWX;!gPbyKcz%TNfqXi#h}$aMMn|SLfi)b zB>=joo{7e&QC0Xy!_im@a_0hSWl$$Bu){<|!)zk1Fvp1>DP4*Mi99xDv<1)x=*CwM85QUaynCXqM2 zHr+L;Ce7N{UCu-F0^Vm`_Lx-Ra|L{w1l_+)zlQ@O5z@h@M!I7}CaSne!#vdL+v$y+ zeb>ofaT#DqG{goH0NQGDE;ijon1<2?-VhjU(lk>ckl@PfK5Tq0KFMKluF-K9i4bcy zpccvEc|D zAGoB@;{BE5lkHMM6>KZeouti_v|Uv+xF(}7^@+aLzxAlG4jxnFAJ@VN2woTQ$0|U9 zz$8fWy0O>JmfDiM{^tc24r7UkB4mlViLAj&sPVKl#C7z9c?gWU8e6aKd&qOI>M^f| ztw#y_u0d`rXMqtBoBIFO*%ImJFQcOG=yvhbcufBE)#okuLhQSujte~Ew{I~;-tQv7 zr^TSZ$yWde_bt%l-5!_N64res-BxzsWbCga{_pMruokc)ryQPm`0~v}s=9Lkap;vc zcG%zm3*4KB$TPeAb91>7akyPu)z8e>$V9=8(ZA=+!_W_*!Nxs0nD+4vGe2IP8-HW} zt~IH)XGqMWU{nGOkn{|)P+DR=N^(DkqbsBsiPL6JxcT_KJDKE{j?1@9-A~&6(fM@b z>^Y%8KOf89xs~9-h;2S(Nn4ODhGEc2BLpA?!0sRf^&+|?+y8c<^lsYeu#tfy8zomm z@v}kyB;2p2K71o@ri^O;ZRW-m-vdE~1gs^%aLm-Y5BtY|n93kBY!r8#e)|_`-&DCY zku>jbn$q8O74Mmcbpn^KW*48tpR!oLo2Jq15n;q-5YJUUA4badMs;HKLKT3N8KK5DiMAR(F;sY@c1nLs|>xEyj9omAD{ zBXH-O$@H_R;rh4zdQz;Vo=#vzIfb0I{@pKk9LCeT#d10S)flqo{v^4nSFb7o^Cte% zJCxuqc;y?vXV>%U51d5tUmd`ODu$H(VwYOey8wquDT=QM%MnRo`RgUEh{U-vrbm1z6W;ApM}HF>wD%ZudmJD;YpGI2FC5^(5a$P z;@>l0iZ2wo`riz!Gk7|b!Ueg9Ks!*n&Jkc|bA1O1TIs0~Z8IEJv2&%{@gY-V#eni; z+VNnCWS)4A*Nz&ZmeRQLD0Y!rRb(fm7>~WvR()o3t|M1pegPQX!)F8<@6I3Wf*h3F z*!ioEr?2rY21QH4~=8%e~tmqnF4Zbbp7>yg(He>%;@g&rIh-9}j3ztbZiN(kvOdLNPdrU{?Dv zV~JmE2N|{oQ<_*(YOPYaj08o3+M%C<+z1U)eKu2 zEHfsR+7nGgc4#oW$V(fbe*1WxdQk0tLPhuYy~F0ac5ezhG$WeYf6vzg4Yqq_nb|m! z5qmw}RH8$3p{euA@uA8sb<+UxPMeOZ@Ta!S>=y#R&;H4DRb#Z?vS)v3q{3~vjR;QR z`~GjrDbbh{5|Av~|MM5~cK2khowD!WEZf5`_Ej|iSFC4JZcQ+@vPaBrmEyPX7}3al zIuh*%h<2LZAm8ChDy|%<4YoXUvB=Qo z=E5zIPZv4F%DH5FLPDWM;BM1ZD1=3hKKE=~?iw(DnxESoxN}OM7!h4wpTOvLmRV(i z&-y1KL4nT2QS&ofZb>DGCD!p_tJ5~m5l14)3}@~ zi%`Gf?3)E!b6r{@kInuh>*GUhl4&VnbZqrRvaYH*0qhKtv21%JVD%|UMp;5TUo$Ip zdjZ(2J15H*K{NWL2tl5h3h~4BN#r<~Wg)JX=?3+btD|zv=Hw2!S|HOjvCnG#R_WMM z1w#qxB5qbCb-~dUTO|ylFfM=<=UJ7?qf%&%Nnk30bA1?6rtjXj%@jNSW2?^8>M7aB9BV=vB z=_LyMmuiFnxS$l!;#46M>e-1-kI_JF1l}V*Pe|Uy30O38P>sDNc(=n3C->NW-r?u~ zWG2tUz9KFRgUHCs(0#}`beq8Yd&dB=^Ax^|+RIvVgyr02bZCe|@iTw^G{ok?ampxJ zx*4g_5?Sqzk=I=&>&^jTd&U6fQI;BB7fB^7kja4ba?thVCxbE$By6irM~;7|x-5n7 z#PKp+DFZ;3Ym{zORbSaCr8(SS}-kwJnDjDk$G1CkJt=zYbd+JiK`r71MvUFL>5nZPCT)rpDWoxH zq$uP{<8yAKu4V1Do>!L?nnk+8tr1XBP;P9I{RgLArRQjh_`JKUP!G#z23h|Oso5Iy z)I2*KW-CL_o3!uj;CnHrHpoo-{3U>&PM}t-gLVHwz>)1&hMG$9ua;R3g>j&fXjq=D z&hV6{<)L#0sf11_R=p9&$qC2bK_2B@i6;FxVxG&I6(N?WnuwM|War?3wsC|Z1`_#e zy074XN7rasyov9OxSstLBVess*3jh*>_P9DUvmu|0{k{arbtrZ9Que>Si_T1CC_NZSktJ1zf^Kpn=JrR zDBG2%t9l!tWIq4?4xJF}q4&ztmRy=^8xqsfVi@K8Z(tJ*V~o07Dxh4zihK{J4|`$~ z>e%vmMU6j!eUxX&w*5ds@IA(t*!6+4K50EEk+?&SX`ugyz22VLzVPFfDPa~fJ3|NUYVP`RMC1>6+EsKW(#MY#Elded>B&R$ZyOa? z#to~@hO2-EZ;@J|X;A`&l$qEl+C`NogKRJb!O#wZF+f2HG7kX*&!rVP<_f1P?zb{iijLw>kPZM7`%^#&e1xmFup|4nk%-z z0p@kB0FlarZ5BYd*8Cef8K>b5JuFmGFrw&9&l|ieBKug?5n2zOt6LzxpXMmOAsaV| z)a2U8qWlxTt$ffg|8y~_xIl7$c(n80bM}226WV#=+d$K*PZd^QW0W zH)`&*V>YqT-)pB-1_8upvHC^*!v&eQrKtFP-RFapCjqpE1ny^0@!Q2)_*mW{LI#f^ z=U!(gOgLJB7NtOyLgH}rUT9dfCD2H*xPM-X(+2(RR8cXQR64&GO0jxp!>0j zHO+~4V9)NNBH8olg`a`15CN&yXJ6LoSkbc>pSuJoJO8--*}HuZkd3h{zGGmZ(qq}Z z27WN{ET)`v^C%9Bs7(g-i!_{S}oK9QdvD1Id;Y1TQGQ$&*hzqS`K z>^@1HL%y;>MJ2RkHEY3~i$YoRP+1g8MAJYm2Go)BS4$qGij5+cXavhcf10IkfSszqq2nBnZj7zf zJ+Qh>1I${FyOM%cLtFAAfj6Hqb}!w{!Xr%X54<*M?T~x4pm$(UIIt23ns?-1ZBh1D z@^%|n@>jC`=Jx~RSc_@vRXK$64gYUuu4hkOi&}M?=s;$Y%>c4Nag)Y+zbn&cs*XpP zGn&6m3nRQv->WDbag_Toc+NAoY%ep1UYkn7Cs6&S{G!(8ucV-{PO8YX25oW`N ztO6T8wspv=-_79`(_6k-#$?j_{>U7dbob}!kKavv4jPKc@}K>xlDFkMB$tGr6Yi=eIKM zPCCp-xNa|ZMJYN4_I#%2%ooai&aDW6l(NwCRE5}tdGw`h{8ZBLs|lmXzZi-R3@ILQ zKSPOhZ%s`yni`qEP!1x#GKNzh%vMOst)C{ ztgY>)6*`XsA=c1e5t#Q2>S*c~>?S^e6CQv;&DR*nD^ky~WuIrS;*zq9OYGpko{k}j zET-Ft^j?n=11wdK!`cFU_p^6($4v)37)hIg2EP4Hbg$0w#D1R>+UBCbuz+VBoL!{FRiH6$UHa{^aKUrM_yJPHG9LjET855)4znc#y z_nqM?Qtkivrc4aim_g)+h`*0n?&z$6$H@@_pJ4S`Fn#0l3IPEjP_!EA zp4~h`uQKVmGahJ-C&@^bExR7w|7Z!*3b>r0ROb1ppD#EZuNVoH)NS(mvROdOEmCDU z{S)Wae~f!l{+`>|v_K<|`=#$PaI)8fXf0GE%pq(B28>S^h>_b^RW)H2PP=jn=%nn8 zd))+@K1}OO@(-L5(Z-1cDa*?uSt&NuafLvyYAPbt7PvBGF>I5PiHV^WT5bPA6SPjz z7Z^A2+EORX8CwPjmo?Fn{O6YIC2)Snk}z{=DEcb6y8*vfQ3i&u{}2jC+tr*&KrN38 zwu5xC<9ZaFTB8E;?r+Cmq<@)kts&zi3jQn3(+`B9RP@1E+f*nkF0F_P4RxPp~*F_qC~ zxx#mwRu`n=MlSh1u{WTtBVf)(`qGfyq9t)UfFq+O_T3v%gQo^-a}mNh)T+Ca1lg9U z>zX{Y79c;&1@OktuNd4n6RiZ#A8NDXa2u?TZvb37v;BAzn-kvu#HsGD;UYuvBYvdl zDd|aEllgv?@2w*oxr?L-pLk&(-E|vPeqy)7P`<~LsnZv6*dR2$B)OZL=hVA;44#bn zyR3&3_O%aSHEnCrq5YE-E`X5_xjQIds8ubPuN6$)*Hq0OXyVyw=@ydRP-^*y+60ifhqrx%u+L^_PhabRAdSyCvi`b&83_DKIvIt&N&0w0^cio(E+8%Q0I+oT_ zEhL3#P)Wo|MNyZt$B)Ben&CV0dWD+;r#@h3i1dBQ)uJ!G=J)Z?Gs;wbN?jrmzo#uz z^Us_SMz!Pih)t~~Cih5cekFQy&~-^f9XuRU71ghDGg|m<@kuu{+YjH~l1xE=!2p4#(7&ZOSFU`6l3@^630g5JEb6Q(E? zlI&&%?rs#r-1S71d0UK z<-e6t&c1R=cO@IUMWo6h3To8>%e)(uG-x-5sdo;#qVeoga*1 zko6S=dB$b97EF+HOGpqnlGU|giuWuzs_X-E3T+O*__T}p0qeHTT zUtA?@E6W1NvJzyAcp7=?IYw%b)%@-e9bvDPq@)C$T#A*F8_t zuD!7DFpe4@-L0YXC_kZ3@3`P6e{`==t76L=zcblj|@J`eWIx5>|=%OIFp zb#)sLQ+HWA^q<0X6YzQTS-ukpdmn_zU`3EyKjP$RzJ?dULCjFxgY$ouR8>NcgOKYZ z?xp@VVf%2qV!kx@2{T?UQ%;+=(eZ@;`j2a7^^DGm!Ipx@J`f&-iLvQ6;$|6o_uewm zqc=?^`5@y$Db^dqjM!DPUQCEcY`bXOaOtFlAfC`uL4qwo{FWO8K~Fm=LMCHO2GZTy z-p)C7f1*4J1i0EK<<-ndP5ehlMU$4MYMNoR=4|u~ntQWi02KxAUtbh0L?&8pCN)o# z|0&nywF1{1K@17#Lb+MFC*=9s=XpleH*tj7+0Ie%D7%tHhaJ7+eZoT)lXP+(2WJaz zVeCFp{!ahsP<^9%Qe6rth;g**~o3S$DR9OCaiXB~D6f{GM+*{bZo3WydzgA7#V)r^{%bR%`X zw76%ih6^v1mzQjF8o)wX=M=G0|HCI>oZgiWk;JW(4 zAVm3HsYl@F-3~s&3&JLtz#D-3XP!c=qZVMoLg%C7Yod4Sxe(e3~EJ;wNsplI& z9S|nCgyBbxzQu=y*NJ`M&nStw6R)c=s!$ZUH>t=yMbkKAfMy2)aY|amoKlBy^s!g# zjN{`i@Tu}C9=T_99+AC=98ci&cx1I8tM!xipI14 zbC)Bo+!@!A??(bzQA-kzyR|YW+-_s;0{ArKJKwuAh7S^Y1ORSHTr}0S zx8P=d3a^j*3qSG0q&0K{Rmv9(INLnB7>C*}&>F0Cr~kxC1gqG~MF5>-R=?tsw&ZYc zgUr`UeuBw;Y>~M?&?411k;5Ds)r15mPd3=RDBB=rnxb0cGCLX7R7I0 z(t6s34Bn4(Btz9rny6uo4%%AqH|XTDqEL<|BKzE+^T=Ab0@HjGzv4caL@pZamPndV zHU64uH-K{%eshP;N6?*Jj2oVtd%yxGel3rs1&{zA4bWuj#eN^7nW!bXs~Yl%+umJ6 z-}$$5*)4P5c`QSifzXuyO z&yISpHUeC!Sk`O6uKU#;+^=k~*gT8u=CFx8!aFKKbvYC$Qa3=I#zim{4!?PgExwpRwvRN^Rcc6+lb*=c402O;2^*Ke&gfeiMc3SdqyrJ_?Sf^IIE*7EWrvJvGQRg7E(&m?cmLAR8CP{yr$u;kTYAQ0zVL-O()YsfuCk=%w^eKw zA?5uU^>d%#)2A5&k5c}h6b)|Aia>Y>%?A|@>c?ZOjs0e^bV*W|ug^UII7BGx7doPI z_OGnt##j4ErClCKos=mSm@PoURz0!Xs$Uz*37i8;u937AQVay_QQV#M3Qk_41NB1` zVXa#ueGBd=-nud^Td2zO+)m~KrOK7!WFApCzX?gN10)hik7VG)hmjZfT7m~8ufl&9 zN<3%0InUcEAY)k>q#r!;DE69xM$z)F`o6Fh7x#$^AyTwY8F#mJ>&soVcq0(OMMI1% zlfRSMgBSBpa7{=ai=xp>uS2nm7ZCfX4dT9fYCf6Ea9y@Y(Q_#(7sXJVKJRC>=@oO& zN9-gUBnEFkN{jN`93<_%z=zY)e9Dt!|Vr53_9CvY7U%b>8kEOZ&qF)S$7^7gG<_KuUs&(iO(g#u6+pSXk;r zx6f0rFBt3Y7C*oG+qyYXz@vMxW-Ns9P}ll8rwwRhRZoa0ucciS=>o zBJnx2=d{^&Do(WR;PJY@svT_nX&#?;L{(PchZ48)&=!k6Ffn^_gRE(S)L8Zj!{KZ2 z=XEu&&P{kaUhkHk7=ZO3U76vsIDU6=vZH|NMovko=gskq@;QQ2$XC~=jR!5GQ7(wb zLe3U=G4Q&8RZ4;A7c8joHGoR8jD{`!@eBAkTRy~a$0|MTS|$tB7pX!gdcAQ z2hm9beqa0>wzGCOa)wDV^|FA9Hv~Xl40)fYt=!l>-e0>a(m0rZ77|TA=T3YG%8FoF zLWHIM88*A_T^`im!7djg!_x1_&pEJqRO-JVrvF=sDUOMArAuNU?I8t_o0CI6s83N$ zM0knNIFW|YSl(~Kb+unF z7cOHKo%Cr(kaG=4YyDYVUIqL3YPMuTTcC}#a)%9UuhMuLG6T=s+}K7*>ghr6 zY+^XX%HM@?*@y8;LxTg*8N?jBk9%(!03jP~4UOx&dBGh`BPY{`*{ic~DS23gMV=J` zizb9*Df-DH`iTeRAI7)y6hhmF9=zx)l#`5zHTP;=9{9FUwVvBgxJo$%U)4f(enZsq ziA>?gx1-9UYU@xlNew<6f#Daq3)X1Uoox$i6%4!b()Xi3#gY}V$6W^iwOn7Or}gb! ztAq=JF(wOQ*Bu>y5%Rny`quFNcLc1md8E|!AoPwRGLQr0=Ke@vWdC;V{z}< z?2tKyL3sl*yDgdg&*UF)gD8uoHs0x?gMc_aj8*Q!49y*2hl}oY3tfjp)ud4Q{aZ2k z8}?jtnt#K8ejM05wMc*d+H2m`Cgs8^2ek`PP+;Ta>1uaz!h^Ya2IxnI1B7ncXB7r* zih704pIfcq&F(iYF|x5?3?s&(#IuLx`;&zLG=3A;f$E3i@;1nO>n?v*FgYS+`{$4C z81AQA!nP(;SeSwR379?7lo$kIv^!5b+#N>L<%iUONtC5S6o?2@aP};u+elnJ*9RsE z;6>nGJ6|CF6kxmn+mjD2V>hi{=p7@|=YcIODuCvB&itx*<#D8} zVI4`3gwtK7b6S7~-Q%xWBFl=*cNj|yG_zaG3`!1^b}!6D0!_THfyTZW`aITZ<_lgX zszQ6ApVv~ro<`QiA>D~=Od3O|At`ydu6;0+`Vp`@wN#N^Q%JZ#I1lm)NDFWfYmi_w z-I7s$D1VK*C$@8-XsJqa4>Cn3X+f;*n~~;m~M~N&s0_ z+(g9*-A*S{biil!md+D|JD4}(avS`1Op?5{6pwn`|JZ)TkGn-Tl}kO){-JnBtWiUl z75HA-t+Any!NEoWSYaOdO^K-VtW&&Etk)y15FK`aQGdWGxYRr8y(WAN5%mgsh`kWCy;{WRx!I8j>o4@gzcYoeF zrLnV2+q&!g?t0StvLv-`3Rs!qsf(@v;(AXFLSsI@LEfLL>s)?9*OFP$BB}(gZNT&& znoHUY%r5zJf+{|RW5>y|>yV9=VtnbaX19o<0YNYoNw(#T&iNjk4l-ve`$(*Som5)L z_{&x-0JKr!>6UiuQ`tXQwFI?07>Li9Xp>atsew7=j zcMWUnuSPQ;N5cutk^1AQM2Oo~kYv-$AaH#fm&W!l_awo&^mj_*Fr=QRe)8YmceW0I zz~PC!;LxEzo(}w8Vb{p2qS(C-yV&0`Y9EB|x}ceU^;ky!Sk5wZUwbO14` zwCQfq4C&0$GU6ZIDcUAF4zx~QF#}T7&CAMB1CNCdGkV6r3a}+%w?wmD+9Ol@P!PDt zP26zjr~bo3%4zDCt3GJ4?+Tl6B?h7c1Z$z)FQA&UVj%kvL2XPvb(@}%W~}bWumsAk5CRQO zrKI9VY-fm;EWJeBom=B}+X1Ga+q%@V4fY@1WV(Qto~{6b=DP!Xir4Wis1?!r&=+co z1dIY(e4z6l^Wh>*Ok9-EwuEE(i!B7IZo(X-?3TG7X@FQ&&j{M2ClwZkhPYV~PXAX6 z7o(495aQJ9m#`w&xo4Ztc`s9SL1)wQ|#YKVI)x9k8$HHh8r--#W5qxe_H{YDIiTRxy= zXnfPKc6r6~T)r8YHq6P_FMdwMKVB*?pWqo`>lyB^m}(b)#o&dO)3TNEQaO4t>%Eh{ zbEyZ__1=#`0EnFNz&t3DtW zs+uK@R5c&BEigB3Vk)Kvc!m&}vmrIcWGH-^{-;#AFo9R11e{+3u0p(qylcz0+Ojv> zJGc!qTx*N19@lkMRcyNUK{$t}aUl!JlEkJ%s0o@N^{5u{s>N@v#JEfhh$Sw^`LjR@ zB|pZu^0OB&SEAL&|k zm)s^%Ce|83-MM_2L}b`Lki;X7g)J98sTHkPKnkjRdR%V)>&XW6aJ6JzX*CQFy(WlQ zDzp3lwW$M$S#gYGgzjwU_D4s7FfuI9m(e=}B-ZEKQv(C+3wN|LOMu1EX2GVeHqDO2 z?pM;J?QuGiW)4!G9{DQ&ZxxXR(cUD1PU&kGo~c==*4K#zetQ6~Y|1UboGExt)6m=0 zb)MTLzXb33K|c?m-~_>Jpl)Eh3k1Cc zvg4M^VP!*<=4l^IGYID35x&=?sj~JNcwMUB1C)5X_Vyi;q0s^LxKYp1(%(%2bp0XX z^CG=vh@D@CMSU+)#l?d(e!PBd&A}Jb{;v!$Nk=L@c5mqBasGevt=maqq{_8T!~<3*PuH zx!>Ddjn+R|y!(DZ#=Z8 zaZ6FA^v#Ww&8bj6m2XZFDc==fl)B^)!Rk}28N7>u*Zd}4aei#6PFp`zh_zASCp06{ zfy&m4jKbEMz)+o+SI>WWq58Kg^dNo8+!~1ebzYLaBZt^sHZ^KrCo2hq#x{z3;GkKh zIV$39(3UhzSC6Asa}I=ASs%VOwmEeWE&Y)*A?@trLY2#I5)6Tx5tMvdLO7dkw*S zv_=qj_PO0kVLlkgaT|Awev3O*xtZI?@~^8DgeMp*J9c%p7teSBi?PY<`K~*Is*geb z`F`jeCdOfY_~VN8f^B_9DVH?@h`ew&B9J@VFz|XxZAQvy)bU-3!cdpO3DFXPIR>JW z3%sYle7H|(FKXnM7At|<8{=ltwIA(mHxz=80zK~(2!2@ICbLd_?YNzeu_$%}0(e>A z+~RQ}+`dzyIZ!ma4KuS;>$@)ZL=*AP*Ueip9F$5^rIgDtG8LUIsCXMpm{syYZ+5?T zSBnDe4FzyqEP>{do<+p6sP|mS#V9P2iVp| z`c=dhlL$<6iI5m5pW-z99Rt!kMQZt{d6y*%b3%U0L>qcLh#&or{pE-7^@!;@M5-zF zRu+qs-4?eH_D^ejp@{}j>8C;TEjmSrGDvPufI>vg8?v$hfc3YPVXG5oGJETQg~~mk z@dQGPL{bkoILn2?NR5@MWt6!<1wxJazBLo1ZQ@mW?hW1XJx(?IvL z9$cF~eb+N&W@g5!#w15vJcJd@P}EoHc8{~I?<0!$3=qlKS-s=3y^{7zENzn_){&M@ zict;aFNG!M`+vQu?xf(7DvdvTr;GG*UK4ROe-%p*>hh|_@J$!3F(a~Q!>D3zCqKL( zq~oLQzC8i9B~XCv&DjRjgl^y)EB$rav}J=o6k_HooJ+WRbOI5+BBaxz=g6+yzSgLJ zaka8?HS4IT>oxp=N%sI9HukQ1Jfjy$UV@AtXU|KT(4T+A)cJeKDyZXEi&TR2?1Czd zVx>74)LZtvbaH4{{ya>>3-IM)(Oq{iFDXx+9zK=-=Q0eTfI&ddH9|Xjh;Fc!qH7UC z?`Dq7?{-f>pN0$C#c`K`Pv&QWeL6q#-p)=z`~u03Vpx3X?p|y{CJ5R;Rt-*Y z#;ickICL#+SZYY@)La!VUqNjzeon`}CAq%%e5Ia4vz+pKS9*fKhGSRpZ>l@AahrK5 zpRG4=N^LNtLGx$WC{@C{s8HYr1b!+GzH794JZ8!wFD zM?V}gajoro_{M5(h##^hmYS+T~4Vn1|w8t7Vm_Z=axI%Y?N@?461oRV}}6D zc}YFg(zY!%nTP z!n$8Zh?8L;w2J#D{LGbjbXwLnUqHn1HvnV~`t6_N{Rfa7QYTaX&+VF#Qiud5&tY_X z>&ChK(3b`b0bi3y57g1Y1z;C&OdAs}V}VG-8bz`G?m%8q#%>y-1(Pwi>SL_F`PGno zy0ygryRzosgpY6bTcwMLtjHa3lUB8EWv}L`%a?j27_V-;4#(UUY0+2Ya)Ao+mSAB& z;)%tMPR^=kRlX>9fS9jm_rhGPun5%CfIU_AG|TF*mwi_57{r{-yp(f;$}%hIYkNx) zYYbXm!DYb1qI^=p24DrhMt7n0c3Jb`XF}VCY*gJ(2yx1D^jS0x(xVb?iLUVq5tBe; zjSh!>PBj%iWbP#~YCb`5;*irdm?*Li@LB7y6uIY?Q%cPE()c~* z>qEn_i)0r00KD=Wi?U#$?S$lp5Kv|tzUb3T`&}*I5neOUW5glvG!DF!m60(So4Ijm zOZbN+>%c@eDk++tRb~)x*D`+9!^ip~HSkyA20KVWk$1z%Ub88i{Kczh5C{7u829t--WqCxeVNhZqrpuc4z^SPy z29uMXKFHNAw7I4vIuxG{E*&@k*3@49tV+%uEj8B)Lv$w@TSCpxDm?w$loC3eb1y z#_47S{>ZFi3SZW&O5?U(R0zk;kXuLWIjh)^;Nvc3^VQwKWz$G`Y~{;epR=dGcD%M| zMCUlmccg?7R-k%YmE=;0R8H))>Q^`LBTdInULj!w#rXTzTkCwP{i$!tCFV5nUw4kr zxtf8`Adk(*j+|151SX}As5T+0RQ4-on?`oj%&bcnh2k6Gdf@dge6G3wZqK(qS>IlS4|rft0|n z|4ODn7$D;eD4Dt_%WC=2SD77OG=sAs#^~GmJ(sSe{!KCA(Z4l9w}vXdUOO}jeZ zRm@EXH6(t(-V1I~_ei%rWQR^!(BK5Rzj$_L^};Cj!UP+pcGU}NA|(S%`}yOx9b4T` zfMA)&<~uGDr8+_$cM%<))4mveaLu8>wYY0TJjGVzRvYy`J$}sarOA?LH7rExFI6gV9Z`@MB9my%`a89 z;QnU4xUw2<>?Q9fP_t%o0IQm6lxUx)D-~rcSss^HZ*?Fe%LM!_Ah9@#`nX)7YungE;=cI_I++_*6MVag zqorOtf%)0+;}@ckWN_(ALFcBJJv~C+%CfIaQTn0}(1UX5jbB~?V>5uJarJ>;jN_y9 z#jtHbH)tUnOdtb7iqrwho00_uYU!4lRs(BP&UtPD5p$F=I{nmrRj9Kb`eu&UW9QRG%}qWZ`(k$P{C#Gw^S<>sExs9;L(e+O z!r41CqpEGUGFx;fgI@5|@)r8H1ZfUll?uT7wuS{RlEe1C=H%1o6Mh1yV20N0G3iCj zd)DwMVxL8OPCzcGIYB^g2MlU=dFhx1(7&+3A%5huAsb3i8E#J4zU(D7;Bs4dI;-qE z{E=o`HS=_(srW+N3x2xCmx_kUgi8G9dnv%6lYszxtccRdk@}lI4MkMoT0L=^aqDIY zYSt|rmmCDbW}?nDph5U^;1Od--`+e2_sg(4eeNvW{`T^kH~>T~!ucC`BBQ^2OaDHFGP*;m!7l zC1o#cpX)zfO=%i}VD&EMpRXsL-7D`@_TWlXJF4^40g|{)?D1 zQigw98}Rm#zwH%VsU#o)0cB$|h;*N=FW!U@F6=7j9;UQE;mP+Z-6)^_;tq&Bu1{CmCfXJs#QY+RL zAwFXT*+lF9DuQmivCw~4Q3Y|;))B2I2vE7g!fvuAOh<}hQwnsaO=Ml*lE&m@H>*7*pWB#b#inn-G%-I#2+~ z)zOn)d5Xi1g&0U-vY5-eRCv{JiU~Ooqd9yv6$xmAGrxXHF$kyO_DU&u*qHtOeA6dr z{cv;UvU73*NuZ^pzdD*F;m_7NaNQD+xl=SobltMDKAc~NZV$frK(F!qbEthFI7A35 z6q2X)X)!lFisZvQ6sfFh4`_Kd3kF#!Jr`R=JxKiRd!Q!+9DKa5@uJWtiAJ-?&ca+_ zy!c|GUjgV-7NnQMGXk_I5|w@MrtN7AU693a9K z^-D2s2Qcm^T!PF++RW%UT+4l@&*0|3)gqv8fU->!sC|y&Oo642eu3#DgnLWB&BveC zZsVT81!|%M>gbE;o-Rz}1#IYPFtA%7gtDhuce}?ak#r1%#cLwLk~p3x+Nq0in`owi z^$!0+MH%4Ag6cUHDIRY)`aeQh#rMQv9zA`gW)Px05&2d3>mE*jk*SC>nYj+@7pVjGIToC;Md zP&{Q$5jw+mK5`7^_b4}tOz*3FvFPQmrx?iVSNLko%6|8os>U$_A7G+1Xa;pLy_tuR z=U`n^jy23uV*+XD=n#m3M%yyh_o1t#FhnZ;{IKFaK;wjr4%IjrD7U?QgZD+XK)x2( z*i8Oi=G*rXCwZG@F&NUmRM4qi#r_P9&;)E6R5|HH(E=|09Y*Qd`ROrLJP*9V-K0R& zEbr$F+UICV9I!ebsheEmjDpr)wETni6=L2!UJj9Qst1lSKDTrL7j)TZ4WL4*p;pFZ zLtAc8q&Y~76Ty~TnATFaXn;&AP7eoeQnU&kzZN(N>V3BDwXa~h@uBC?wU7|oEX@-K zv%HG!mif~KP4il>{Z&l;a{R|z7zWMb1A+k~8sz3a9M`5|p%rPYvR3u?@f_c3pb2Qu z%_KnksVvYFmLOv}HIpb`?=goYVLe8;^tfK(lpdkODCQ83>kgSa#^} zQvyrqRQ{_QW0x%)&H0pswkl7Y;|FS<_}8&~I29*%jZgaZc5p5Bq@1vMT7UC!LOXI? z#xOM_N#Xq7QjUq`5N$<#wKr?F2#MwbLePkdhZ+*PCc|&mY}V9Po5-RBV?pa+2MtX z4_oPHefZ9fjmZH*Xq;NN11wY50I+eiLrY(T7}xNOS7zOsqdI>hm@*44Gnp;-)(#l?faK7(p?d)&zfwN_cgdhJPaXcOZbeo-z#U_S@kJ={zKkp*9%UwE zGtL(x{xd1BP`<@A$EN-93b^}x zF}?l{Eg}|;ZWswmAeP7t{xi`iwlbJu{b7BGxmMq0c}~N?!t`3`mym*q1kh^!+|)Ms znfUU>E7at1rghPKBTNqqRMBQ2ajFjV097>c!^8GsZZeY$Myj_=#vez6!2;~c@>F{( z&rhzD^$?&oc2r>zq)`?0J1VyNssChlH6bcw9Wtbs9u@ck)*&yiQ0sOz;?N2w;Nj`J z)g16OBo{JB>3o`U8?O>3JIkLJsOjRIReI;4fO z-U)}Ub~i_#SfrLilW3q%0ScV$Z&`Si8Z6`T6W^z+E!^i?XgeWDJ4#7j>^9GXFKyr5 zb4d9X0nR4c*Cdt3V=6k%3V%YnTZMlvagz`OEzmG!G}TxfAxML~oNeA4h^I^7PqS$% z!ePir9TIysT@$4BU9psH9>8txtiM7>hBo*ilrW!Ue!lAGSD}wT4y!~t(KKOVAu@>t zGE==}Z~F&IBOQNph$n7;kiv*7Xc?UQiKCJ&k}$3l?K^~N5<$S`rzoB5YyU|(dw3$S zhiofI@UY?+knI&+jiaH}Nu#w_UsHBM_T+>IcR>i=bS$PX)lz=DNozil_WH-B$ra#B zYW&FU?D7PpM>aA2X8(^zD3rB@*pP00yIpBYHpYp#%Ic39Y_!9EJ41_do^j&Y=eP;g z0L1m_X5juYe#xH@Zn|d7@)Mr#i_8iLh5r>bg5~( zGcloUz*wZvNSxA3$?Sbn$$|dmCEOR&OOuy!!9yRsI&y!9IV|}qID8>iY|c69ANKEp zqlworuz$y^+&JL6aEV(tNY79W!9*Kr3wY3?;5!qAmThpbqy>593CAd2%g!ENU>b*X zWjaZc4RwlV0gb^V^CX8Ys0aGl>-L=>MNbfZCSE()!daHQ!Com>KDeF^A{I5E;ZvT% zByc=4^b$!J(%Mdh@Pons*c^%$&TuTVsT!dExujy`EaUTQTh4pzEsgSxsr`^wz|Ev3 z{5G-?n9}4)PaaQwzme|GCfDtt;Nzw$6m7ed_K^AfP*Bj{8Sx)L$4}@09dT}&=i&1K zrwEK40znsXP-(X2?TPm_?*gC;u;Ip`Do*O!1`X%O+n+a4=$E(LzWGm+IxNatc*}I=b%21 zt#J3+ zlX_R;QI)drq2eS4b+S=(3{x>tfv1}dKr3H=e=gbv;v4p&=$?uGCwv8rd*Vi&c#9Ln z-7bDYx?~-U+`)oKtl8gC!yr&#mMF|eb-Y_oP*Q^Kw@ZM`6f#i|{JDbc0{RTAvR6*_d!;;N>cxt91K~Z218MICuN@FC!Q#X*>qwx1M`9c6kkVe)#K6Ng( z%>AjX^Glf}Wo&Se6XWhfrlraqz$>UD#OeG1+Q%MBNC9PgGq7YbDMD^FN+`PB*b-cV zLd(7k3uXB+YKPJ)HW$(ij(fdCB{G@(p;(=ufcO8Hddsk=-u`==l9F!eP6a_iy1S%P z8Ug8Uq`OnPOS%PyQaT(!L>hq^y1RMy==Xm9zZbsKL)gc@uKkI%&SlHQ3>~c})N#v3 zeTeDHQ}80!e-O!l;8Ib^Hw2iyuFt&xE3U)}E>Nju z{2LoDI-`MJwnh>zI68bSKYGk51kdB906lfT)NoK^VKV>*DuN*v}}|gxN1lQu=->4W__pMnaen z3p|M;hbH>u>FAYEHa1CI5Kx0@&PPW__hJ2tfn(<{%7^@?29Yk`#ii(WR%X5ZXRWr- zz8p3#VLm3+4*y)ON>tP457Y%B+oci{E8IKBHH__nZiP797q4dTS9U!BWByz>%6^^v ztUjAY_vyMw7f)fK#N=%*Y9KXccbHkkOOt3+z|9|l#t0GUzXn43j->dHSh%vS*#GHO zfpd(Dn)%xY!yMZ_6pqHc)==kz#7o>;|J!q1ah{1<(5Zr;TR+XLL6}mG>?Eh~dxYo$ zkz#~!S#L6TseMMAZ5q^)21GC)t={qM8jta+RkRlfGOc(J4XB(=$6h%a`wQFj>Hd`b z6E$W?g!(mbBOz-gG3wr6rZ^`*3Pfv>2Wlj9s1J%0FiSn?zB}aAv>6>ni&cv=93XrB z?pJ2&7xF`~` zjK9T`pco;TF7aNT%xdW)o6j$u33Q?Jbab{5Sb-dY&f}=y- zEdG^90G?MI)J$SeiE?o`vm7U`58vOn&t9#l|0z?=cZf(Jw}C;2YkF30PuWK}(S1I| zOrDbIDukv$e87q5g~RSyDslK|NCKP)@^G`Gs3n1~H&F7RD(t%;$IRD#KLns|RawU7 zt^_}JFF!DK=e=!l2!!J+J(P6xF(6g@A;4B$AM6iEAb9oZZ_t=>OxQ3C`V=6~a_)69cC!{%0yz#{Ai1iKd|511bmpjhwVdoezz=4Ls5t| z$@iAytm@4e=2ZRO%J1!QnqTd3tyyITE{3_JGG$8iX`bf_FnnG#tbC;^bV9!f{Ca)} zMA_)R)rLk-O6sZS2j*wYyD#kLsl_Y;ZxLy8BKI=iSoy#ke)Q@(S1*HOhw$Sop1=RM zq(KOpr3>UCqWie#94p+62QM*_Y!;3e!4)VG_lHTywKPq;Sp)FUVJ$g+GLA12BcZnM zCP2Ju{psN)@+S%}T7pfGo);)UaS+Z3r+3!|xJWt4W4Ohc_EuKB9^5;XrIQ^%-XM%C zglxe!E~F3G9USQ+rA28c>)1~;g6Hs=>CxV&{J+iv_epr|KEvE)9)QzQkR@zMN~Qy) z{Lp-rqVw-n5hR8}9cU`AFC}C;Vz0bnG04DJD35<})$_Cr3~5E@@Kr@j^O;q>qavM8 z6UVleqE3TBN=9d-NliR0fJ*-%tYKk1Uee?BwPen0$QFHjx@2&Ov-be`>P{)~(<~r{ zrZRAESyPEjp+ym{P#Ty>;(I{G0wk`P$8FHvfF~a`MbJ>pFHb7oPK8*hOeApGz zHRg9K_`hRZh3ka7u-ny-g#fJe6F+?O-g>5|RV@^zc||GYRS(*t)R^uqWnf`NYPG%li}j=L)l z2tY6|`1I*&9Sy(4Y6*XApLJ?fJ%u>)_aCvc1`NcnBEMhq2Y4rC?Q<*B!s1WDv8fJE zu{o3?-HPgROjPe;{%LUq5a5#Gc^V^k&B>)_hW*FmTR4q_@ zw`*5gPm`DGnI>bC1)}YfDz2H`0SBQeoNIM)f7~4D-&K?de01v6(zRk7#Jz~I&T?2~ zy@9i{)EE3|9iNL)POT>@ehfw4FiI_np2|zI(*YQ z^BBqfU$H!EN!ubvfawsGZ;pM(2qPt_E?pR0DS{b=G%47nwcKBE#2R`tunFtP{c$UP z&GnJ2BQyj|$2Bk*sIh(WhZ1%k0zz3p_U{T;k^N4~xMW;jZZOZMIQ(2K_PuGf+p2FV zUG2-d*T$zD;7#VN=yW!`s1Xy?1UqjV7ss+YyJAef=I1|pdSNPYrebO_A^*%no5)jo ze8F|l1_`VuKn;Z3P-%}8JU{RDzw2NJBXL&>3TL#e_?&axAJ zLBX-M5LWsLGtwh!`(hq^c)qBTdF$Xb&2%L(6CGfbJo!_9(+au}k|1Ouy09)gYrxXE z`Dawh`24>G2r5!mpx7{oF_56DSrnl* z@s-PG`hCuOnlkIH9PjivEy~%TQ!XZM9E#V*=wZ6-P;;$3)5ufge!|6na6%JjRQjU| z1@9dQUTH9sL01N$O^yrCrQgZTmPe1=sRsD%ch4zc8h}k_<+mQ@3>L)qAYmgZ@&W^l zGW}>VwIj2!i61RMxv%opR7^4;#WhF5Q)zfyTTbYpq=9K+IEn56Xga#_sfQKwE2e}; z9wL*8|8tv5!R1m)q@#5gt>gV(b4|<6DGIq#0sRheostd^@V;2tzyxCo_&INAPeL%& zJ}y|Dek&duCx$noJtezC)%*6m%d$@Rs=2BbG^(v{X<5b0=1I$|<5EmB>yU3FsJ<;_ zD~N=rW~8tGkw1AyO5qJnUst})y9(5u*bU;bC1h>mbcMqNGQJ<|-PdMhuf=wp&i%xj zf2w!1Oo~#(|66d2Rlz`4zi5YAeq*zNY5OeqOerLU4)! z?KI7^>1qLVlYjSidbk)~VB#VPYqNeFLo7?Iyq-^frP(*I&_nZk_X(cM+tpRw`c6$r zct^@vhVwL`>NVwVxT0%dD(*A#cJL2jjOj0)({+t&U-9nK4V@n?SzkWZP4x*6+Tu&= z#0Eozkae!-{dNNGFB2gi9_vcxA_uJ{pXXQlMuz?}CViv|4`qmf9;x=pUK9>0IY~Hj9F6ZRa?nx4syEB!S#S?AE z2$PF;O>q|~anhnwR`b(VL@gt|BKu#$8tkha0TUM+N3MMfZU5aUF5*7Tpey%IZVma9 z)|a>tk#}rIr?LQm=Nz?47x<3Cl~fL!+ZE;_kPu@y;|=UXF9hT>VHsw#o{|DJJHI2;dV zg=1i0Ukr|UdQu%Z-D4L}_%MEPnjXk7S{I~$P@ttd$to64ZNe}I2zZm~NYtZ0Lpdn@ zlolYv_$hZEjShtNijQv~;xh1HNgyqor2kgR^7sBjlqXTO{ zs3#?mj^C;IYG+rQ0F>poSr9bfYKr1(P-Mv;v+r-_6>PMOAt+#&j5yAz-dapeiCC88hFra z@O$iC0(m)v89U*W$V0*o)?d^}z_}!t^(VHZ^gJ$5dL6@e-fSA|FJG-_eXPuJjO=Dq zhniON)(L*TXYxmJL1Lnv{w|)np&Zcrc(;f)ly3syzSU%AUl+2j|9WbFzWmMl>=o+V z=Gy8^OVV#4rnlDP8t{v(k~lViEa9C^3ufQnAjUB5%9a>ZjHCX{61GO_8B3!Z_9gxZr}-@g8BljoIQQdvOp2q- zA0J_WA@NY78UIK=@AyM`p||stF6NwA!S>!A4RwEC1R@Ez+%AO_&*4EMz4^!02*-vJ!l6#i%X<+HPMS7uBWx<;5R=6 zem-AYPlRWQug!FsV3NhmD|ec)PC1Oq{d*t%;c_vxAt?Yv1#m%wkuC&ZAG5^sD}|sW z4{a6eSCqa7_78+yx;*9ILT zoW8knwwLt)Wx?YK@oJG!$FMfo;;Dh=l$C>n;|c@`?dtfQK1j9V4f{w1!{u#cz3@PM z`}~{X6|D>AMut!$4peZzJ|q{Y>s#|ax?9*RcPt37r50kY_0h-S)8CFu0sgC3J7IH- zz~Ryl3mjyCFqsoSLv;k5$aDg(9sAMdO5OtFr&vBa!uAY)bT`wD8kRlo?u@)9WP1J% zXFB;le^`3whC&3u~c-G+DNz7hY#Ad9)XA(kik`E2PQA{5xZ z3M1I$I6UN;VF!t^;aH=q85O;_bYVekE|!T?zfCi@1LV+`2+YhxhYywCtk#JP^{fYW z`paNXHUy`ar0;9*aW5iPQL-ixNjM3u*Hv;JbVF67wSg(mI-!z!KANp|TZ;dtXdbzd zJef=Gl+taZ`Fkl*8o}P=IE}0$opI3_(&SkfF*ipI7(zxlST~ zTR`2H>r}!AN0+HH*0UR+;#q8Gx0ns86%T$n7kcN#(<9bFzoWx_qs-mw3Kp>?ezjXTC3U__=dJQ9%fDd(f2SuWC>z0^v2hmGCcP%) z5=C1qFNunwW-ngCVk(6W@Yfo>(l!Qu8b}irf40(?jCW5Dhogkb)dAmnFh`6U#>ujd zjSizf&j=PJ=QkB$D8UsngfDjQW6hYAsx;$#1cqB3xBun}#P{FlZ~^ddM*f_WaHVy3 z7HEU)02xD88HPTU!Z-aX3c0#vCy^lN@chdp|E!sxU&BBQe6HrNnr{bjZZD4@%(8r@ z5@{X-(2T`y0LaJ2?5`76so;WV2nVh^Lb;6`?ELMd_JpilZ)zp*Br)K(2o~)e z8;ZpW!cgf=drBrw90Tb&SlAn;8|S+hyti^}Q7D}PYq~eHtUZmIU)odki%HO~z_zz6 zs3s*QI9x=yxd>Bo@p9?qwE3=S@z4uE-2_`~(bz{R9PWYtnWI*XFYIDFCf9ReKHzRK#{PZjeipE{K1H~J z>l+pDO81SJJ&Lq^R5xz8ySYF*T#v^e(+>}%V|U7&^cceM2mXw>K(13%g-kO(7VXqI zf^KcYF8{{@I7BI^(nW@*dY8@Uc&}}z^4f|xuS@K8-+*b&C3SvyK;(Z zvkwN2T`d<{kEiXd=b1G{;-Qtren@&NK@|8A0DqkZ!9i%0WUWhIMllyubA0$v0~+N3 z;tjCPAAw?yD>SHaQM@w02<8hBf>r{RTrGjI?zRQbgVQngrhNOJE>#d7h0aUWGj!?xwbFf$l-Y#Y zB-F&|58bj1$!2lqA6;2D=WzH<#GjIi}qj5O64%O-YT*bticnM>F&06Zof;V?4SSBVNu( zhGD5W%TK9eI&5LPo+Vf8s+aj2lv|LzfypxGCx2Jfu#dmr9OZr86)SK@rT@a+#nI8m z-6)oRMmxk)DJWN*T<46=MLwOLYN0wz=Fwjmajh%eU<%4Q$-3airFENvCgrZi8pKe( z>gK=Y>B<>fA9ffpq&(Ln3rb9=+hVu)dB}QEB(e+kNLSMA zf1kMm22^?)d9`Z0B)Bu~M-U7s3CN+n(1{p#%0?E65eX%mDhEFRh4%>m5bt|pc+kj* zntoy8ZUBS7owhgQuQ_RALu)$Cepf)U)ySXhdZ=bdy+ns;yM2mF){D{-j)vuKQ%-W6)N&ufLVu#$8QDQg>duINoXW ztRGTu;-krW5Hf!rqtb;MmXxF&K)`EVR&8qls$ekhoC)F;Ie6NGKWpZ*tR~(fx1^)Z zquwA<;}iQy?Kw#E7lK30zh< z0|b;()JSGo{{D@4P&E)0k_N+Fz>Y))gTpr45O;S?MDgQZT7*M|^_GcyW@l!%a z5D#H6D`4Zj6mHh9lzCcn&K5_(7N;6lL)>%q66ut%L5xI*f5_FvrN+)74DtBM$ZM+g zeq>gg9|c>?+kCVh>shVUGMRHrkeDysWMZ$uLIbsx{9WjlmxDw6#o^)*oiNSEa$uqh zBoAcd`rO*gwmBNtZS6%GZ1jq>Dq|M^-27l?se?d zHEq$8$+t^5SVs1SmpCX~;I2SoB->9caW*hH88Dx>53-f!zs?jD<1!l@&*c3GSyM@_ zYx*Ie()@u9itbXZWHjcLel;rm$a`hHGO0FE+bALMKvC_Wf zvv%DliM$xA_vV+Z!juG(*#G9uSd!H9mJ}YnZ{NWhW}h`qwK|B}YipP?0cgz^6$XTc z$lX(Q+{z2yy~liZ!7XY0so;ENdSmc!hwO^0OHI%7__{)Kberj500`zf0G#you(;bk zzzm*1Y_k3w+0Oix+>b$=UGJXqPDUO4?gtdC=8*v_L zUn6{0gzZdejW{bfO-guI+Rk#(en#%Uv^;+C=u|PU;bimr zXW@UvSqIGlz~GgeJQrJz9o>feMO1o>7f*dS)8xrHP#h>IWDi;NIw;p=dZZQb>$g`I z{7}eqBWC3N!b*@ye`LuhXgD<0UF1%VfM&l^WeMJ_;5gOv-247?KlBr#l=F5r)(FA`&%rs?twvyF9yG1Y&Bi48{1@LP^$)aDUQfHZ`LU&pPfofmRq0v6NvZwG%o9{$6@j*v z$ze)M!M}%fx-ii>idmK;!pq%7+vf^!!Q1{ea*ca9Gj?30R=%9jM#9+p!!zdNr@|sZ zJ%?XOcIqT=%@M%=HdybQi1+rHKg{&U2Ms>^(H5cwT%&|K=b#fk7w#{K@e*_hffe*0 zYq_{92@ZM*q^b$ahc0}+G+MZ_FVnkCTlS)=tJsz$= z9#EJMMl~1R%X5X1d?$E*H`7L9CXqtYCQ6YbRyHViGq2Ul)7&wdHk>z zmKvo+pya&ir|Gi+!3R04QypX9U+g{WF246CLk~ieoMSwuMjO&PEzI^ardBUd&|x=R zffXH2V}sSzr;JV?0%7zVEgkLlQ)OU3ZSIx$hZkBLiNkAdp|-azooio~+qiOhnb#^os5vRnQ!gjw4N%4-4g6q4 zm|2>@&toKE(+L^9qclT_j#65<(qTGpDc75Ha4e1P6%j^0zt}TeiuePgY#f zS#VIF?tf_&z!>Z$KtJ((x#HYBOG}LseecJDrH(Fb(C&$zwrq2E)R~{_Joo~}T`CCs zim*dTd~3)Q3|LE%Q#~Xw)ktp0vBhi!=>fK8hbRJx5ag;Fmp_V+!-9V-()uRB1-MwI z=>Aw~J22RJ%rRz$oLw5fLBKEixPmo(*~=Aab(51#X;$XF=X)1;f&-Hq|4$ zX_aG1a>7`{B%%Ak{lyhL^!!p+fJx5*@F}-;osW*qs@jaOZfWbgE4QQs$9m(m?=#_c zvYeu?=QJd&7V}`kAD45Y!4HBql;gio0(nH1RsL3ARckj*_9{4bu+NG0TNqid$31pQ zj+g*_MKctac_m|153#;ekC$R+vKeXw^ z)Z`nW78|LY1}S8mxl@d}_=5jZ;GLsnx2rYN&zx5K-oN zM&rJ=MEf?rR2_|Cqtiz*dmi>$M}c1>&IpmgmcN$ z?IEn9RXM?SfWNU&0oV{wSRr~vk2^g1&8#ojP;Mkw+gVD%w|Ge2*_Weyf{1(i7ijT% z-iw0QD6dj%7KEWdqZJd!MWRj-#>@h#hs$}pk2CcYxZ z5hq^t??eOG4gmug(Lv`>K#(*L66_O-K?Jd6Z7ZfOsxEHE-u}IcC3^2f#%UJn|EZ>h zh@23L6oxZ^1WgWa{0|R2h$ALvwx5`9C<21j0vwPLFC_0?l2E>7EuHsJBPfiW)`152 z;K$eA>@{Had(%#k33}YGbm9Cl3iMky`Xlm3@CqT$uuGb&!iw1)y!}1l-DsLxD=<*& zY-8+!?rPB?l1g@p?McU<9=bdB|N3i!7$hdWZQNT*_8;ykdDDcEIZT4Q7UA#!)6ky` zQ8`liU4NRMfW{X2jY&B*zE`$S^u@9!do09uB2w6~J$}iQY@edc+whMnZHfZ(Em^R$ zT=DqGl2HnJ{BlDg6%o~&hR-~fIou**jxPGL@P*;->{kMS?TEO1t6QxA&U*NFHi-&grYF+gJj+u+^7$#E#cp!N-PC@ zos#i5ktXic;a>|++*MJq?zBt78$SkTBu7~p;b0!DS~-UT-aI;hg=HsQFk>^G3G0F> zh2}V75?w)GhZO^WkL?_Q{@EFfBa_n)S-pwv`|cH%)bEM0WG##x6fVV|!o+<=o?;h_ zQKx1t6xMn8*{SNF?ddUD<3?M+H9W0?2xZW{hPLo?jyTrk^aH`D0k|__JsL6SQi?i` zMXF{p(O_r56GF_9VKrKF53nV@rG7DFydMRhnz6U?6S|f-vXw^6R%vxKTHD9KUGve8 zHaJHXF+fKFt=;a9juW*yllN{K_2?qe6XSvM+=gLazed`*7#LS|%|MyD5M?qF!Atd- zQ(gO|e&@yyLA&k5LSFAtizfs2qD{G8_m<{Uail>vzD^36s618w7Y?LFhrRWc%Mza<$yXA|x}Z(?*{1Zl}&k z!*FpxEq@m(k#}|;)(kASURzdm6o&8-o8$10Is)l7zCcALmsL*DGqsfo z$E;FA$`l4}2+kE!9Rzpy6qvb;V9hyxGO)^Rd6R^y4|W|tEuLk_XSuQDEJ_M;5IZyY zS2*hj!EuvssFhi+;|Ip`r}0p-)5Jg3G3IQy2yE`%TPZBFN_t; z&whGwC*Kt;L^EpNw(QaL9ZPVWch%1|A7tg-dOO^8w|M)fp=S_xGA=)@cBNedhY^zFRKVLfgaj{k6*?_({TAUMwt#4FI-f>Ryr6{hGdp64YKmQx` zq%&#(S{UU|XRo0o;0KlRG!j-*Ikuujdj}bjRdLW+U=FJ}0@OvVCxc{*e`q9y_zXGh z_Y`7WKxH~`_+dCAvEdt$n{kPQ5;RIXyqCOP@YgN0{+5nBcP}Ta&Pqi zyvH&XGZ&6T21SPaQQE$U^}Nj`e#k?gbB5+=OJ6;^dVXL-c(GuYqAbiXhBLy^0MV}b z=Cx$cAEv-x_H8CDE0pFzAvvhq^uI`5Le#fv?8{lYY2o3fv_n5@UwGIf7GNr$a%Lv7;DF}f~yt2}1;Sp)A*#}1W6G*XneGXZS1 zIp}&tkwx}~n17TEUMK)o*@zXy!4|`D@Nvs6R0zzNC8E?qxo94#i6u%nn|h_0Ua5C+ zyi1b-4SO7R0HMDDaOcf#~%sQ;osx8DZL6u7Qf5&--kt5cCaGE@{l~X zob3uhGQqKc{WWpL3rT~?biF_7FX6xE@q*(i_aHJIH`95UfIY`EJvp8DaS&Mm-c*$7O~R7Ic0Z&S~;;V122 zPIY1$xAyW>T$Zhy=>*aqUKF5cNboXtXouPXmXVX+G77=~LtBcivG1UGCTW6Sta_0V z_1d*qL}FFZg)CV}$K^f-EYhaP(cV9}>{cvl`*3^dx*SLjJttd%09Yk=TwKy~rYZP; zUI764j1^ShB!IQ|R^1ji@mrEKrz%STgi^Ls>;*X8Y}ixIi6~jt>&p24+vT#A@uJ6~ zJ#>d_l2E}VrPvTS0!|6f?TKOa83RzC0m_}Z?9e{5ZIj{2Vexoe!14}%J4og@2f*O% z`Ig;MQVJ8dm4@4sN-oGqzlx^{h6-Osu`cF9ec~H8Oc_{k7n5KK?;fDnclN|bI(y;Xr)B_mLkgMD%1w6{D+i-hTnOQ)uzSi6YOVARmpU^ zL6L5er|5)F{Vb9^dX^izl^D*eeZnLWF!^>~yx4K5@B`Mi*>6>vR3VlS9)&_KRrFAN zC~fVuoiI&)n)>)}eRJhS0E}#(0ARRgXSNIpDQKbSuOwXtYE}n2L{#{2bX!q}|C|Ux zFCg?K;^;{OPS7`beOEw)Z?4lfv^*w)BY{|*NW?)3In+T`5vFO=c_U5ou40@5Fn*u- zs)k)$&IJo}^fRaV{`i|8^@QP=KTDnux)d_H+cNBZ$)T2=<)q1pR@*~HF9H<{aKr=Q zmvBgb){;N$vry5Wk+kU!dPa&276L>6PVHx?9JdDp@d{K>?b@V!bHg(a=ka*{#&y}K4rlvF>cd;EAkg2`ygayn8{y+^#8@b?3@x&P{d5RBBdnYXsv z1K{wN|8Cx&3Q_z$2g0O93L*GwyKfk0Zer<>StM@^>2j(6CxIHG?VY1=O{IwOCa)nx z6-y;9(j4~12MeTn5O@zWIc!R$W?1JUVhQzL>Zmm<^DT30&=@J8#J%w6;H8I3FO+e_ z{F6Mt#0-KcvsVp#AJgOWcI2cKk2Ifrx3r(Cq0(UUv#fnBdMacp`XsuqzhesUl?<~U zrhHsROxzqeeasf|?;ti2R0|yf4uRDJ3dZqv1wi!swOrAh-0d%1Dy}tP*wZ5 zTlx^D;|&I7tbaiaYL)42F&(K7$IKjL8(|-;2h>gr&ZAKeLqm@hOQVw2W-4LlyM9z- zbFIK3RnS28rUaNYfv6E;r4+vV4Xxl6-$fvqz+|Aymt&ibHW{#RWj05WL+uw4l^4lW zaZ?n9G={CoJ0p>@%dEDNBB)yFhR6>DgX#0%w0(oN*Oj|xiVc;OKB2c@+Sh`{{^8dD zZ%@W62IoS)j#i5BEH8aH_@zG+;d6ySY`&#onOG82I;;hcYrlO?t5eo@}c zj_=QT`&MfCQB_j<`He>TQt^_YRtE<%Gv7{!4zf;VwJ4(%8B54z`{KdVwch(1mMG-=MExmg2yXr-gj zRm*;se(52cXQWGppy|fTlul%R5uKD}DNO=GV()$$@XQ(bX`a1%o9}Xq*!cX+OiywP z?KWPdyvOF8&xe*v^#8r7lam2^b96(%4eKF6T`DfNM#A$kHBO5(^w)3Q?}S(`Y%oLHUom-JSE}G2cqmBf~rdxXyFjxS7|WFg+lXvc3J)gx5sci+1}8~$d9S> ziJD)(&fKE(xd=}@Vt#b9N8)Oee86lxE-lIb%6E)V_ly2HhD_8n;W%ryy@A6C9mjfm zn|c^@n3++Uqy&Gj{*{qU$CMjbEY?bB=If{FuD0W;b=af=a018%+KtBYN7O&DHdg0kP! zL*X|m-nyx8+r9+gmiKH{h9h3R4>?H0pGwC?_(s{4FpN&#peO^oILF*dIv;HczE>VMl1p)3XG_I zmFfH8DCWYK27N{w?jG(`?%U6?k7Ulxd zo1b)7&~OVhQg~bBhROyK|0rc8s)R+Qi6~TZna?T-ZVnf77YZ)SKJ?x4s`jH^VROC2 z*ixATJ1Yc<@yP^oG6{-;(VRj3DJXAJdi;5e9)R}uVhI8in%U)4A)oEHF&Ey134ut&4gsP4Fb=K+WJA&C1NE}X)jTQok+KzN*qj1Gi6zr4Yl|`qHLcfpM&HAQm zMIX;u6jK2g*_+NGN?-keLYMgzb?LnmeG5LDqZ1h3B1o*0y7#l>0-;NcWU3@237-tC z6Zsne#7?;H)OFvorr=4OvX@3$XW;J!2{QPTrPP+Jm`M<}2MJ3Wza#f+Il{O~O$K7x z>T3Yhcru}0UQw8vkylZZQ7fZ$}gldu2(9aoY>+r{DGAIHQ`J8JdgvkmxhNA=MEYSgw42AuE>=3MbQR6C7i_dsc= zSENmxb5aR_J*fr~1VE{&M_W8<$(-*oJ>oGpoJ1*NT!vbKkfiRF;`@M6L-wCeQ?elA z*Xzux6SUy;W;Pti_D?_uoVN_<3p{|<^m-?h&-?Bi-DsGbQ8`n0Vnn-x{bEF@RHJXq zuU{Oc^9)R6V7KOhu`5f6u2Km0CwKoR_#ox92BapbOYexa8VruV$-# z^b-)}Jg2}`1EC}e*pN*9ZwH2kN-qvWccCF6rnmu3PHkN0iHz@k!;sxHr0$g}vSZz? zbETPsH0lZi{2XBhAEcSMU3^;gCF27+!^szEKf8yGR|owK=JrFm9*sh!uPX?g^Qt^S z6aIL7_H%?Mk*=_QfITX3TbD^cr3sCmvQG4V4I4=B9J;d-%AvVQexr~9n*8B29eW3& ze|=13C4o@qufAkgu9=L&Dsc&eI0NK)mqYpZA+PRR#4hvhb1cRU8f*E1V2b`r;8$@17#wUkmwY;xIE9)dMMdkcq@%CZFRr;yFX{O-;|G!_i5_KkKqpX&458!-I z!KX^5%0#-P;zpP4S4r3a7OQ;w<|!F%`a0osD@C*ce7b+%ggBbSYw&sZ*9)|?S~XO+ zyl6g{$(hpsTrK;pb5YlE25~Oj#XAGT9xi**oUP;FG;SK+ZADJ#_{%-)^p z85xU!oZQs20+pt+e^~2BBlXB)U4pMA9ZzboB8Qw-eVJ&0`&wA*6QG(n{-y1T=cl6A z&S)$huIM3_Xe-S$AfNl4^7DS8m`x9UoG=FwJkC|{*Hgy)B80pv1r%~Vha6ZYtr1(y zRz!gGEPe|vc-qV~76zsPM&GVTBw%9Bz4ROY0bmXZh!MG>k*5*~675^(WxP$U>T@Ao zK+u}P1Y`>e5zwo3;j0lavLgpx!ey!;ZiSMof%nd|qr(2-px%{$J9})MPe1_Q{!g$d z;1mee)QM3t{=b*g!VE3Nn3;Yp1oOctG1pe`urVb!VAlrLa2teuw9$+~+7b1t*BYxL z|AvTtMm_rG>%c1TQ*M(W{n2l7Y3l06wy^C9c!*sZ1&Z;uEgeQa?|cz|A$zGI00Sn3 zzN5oMxqh~k?FV3jTHDoY$cqV*7af}H%j7JU{YJ2Gp^cu&zu(@X^m{3{kOwvAa69G= zR#|=fs#MpJLEbRRHhQ21z390gWjkoM%6~5wkH4d&DU-zb_QOOLkXe;sqdL$B=oo-D zkqcp@+2EA)M3H)O0H-%5_?XDnr-Ap0(f7AF-8?G=rtWJ};VZ7y7) zC%m-UJDg`Fa=2=^&$WW!b}XCxQ=a^P?7wGpP8nxRnK=B>KC+)$*K>8J;(gS<1-m(u zpY8aoMN)eviVhd*jY@jA6-61V>&4HJ2y9YDydAZ!8GqYwyB*!-vm;f*B6u16&;YE&nF=N)d#!^Exy-{rtQF- z%3wl2TPjph2PX~#_}XP`aqFaV`3va`=)_#i|7=Z+XV724Jr2V7ls?A;j>}`qqq<^A z^N^l`Jb9nJ>O2hJJ2(Z>EqtV(fC%twm)lh8+Am*NsZyiwA>K!MbN}pg-s03KSL_@^ zFv+EGJRCiL@g>P62|X}kuHDkTzvb(8XyIv@ovkJhC^4Rzk&b+&_gW+ux7aE#`j5%E z8>xtJz@>99?5$HqrRSpQ;@DlRR@EdQeHFOGxB97=8bu z=85`UiJVe)-TirVe~GvWeU}7l9%Jd0~-Cwyq!O`A(4;qqx)X0ZLhmpqZob(6iUm0H%m2Q3+KfS#Xs*-gX6$4hi= zRjmHD_scy= z#LGnLG*9M$Q{uG}ECN1(^{JoK)`x~X^4u)$UNWn#tyND?x?K=!g0|^%hn%L2(tAVP zE|MW26q6VsidyyPeJ%wT3N3tjg?fl9fwkXL2=+dVKBvguG529S(^88tE&64=S>F4# z-x;3(1)@ttdtpE=_SbbBU+#j)xZSLe*=0Ew`9_|?WL4Iu%iTB1b-6(fEY9i*JKrqg z+M8Yu`8r?e8V@r6fbpArD1$7XOAd2d51CMMG5$JZNzP>pnJ1~X#YHpHdvAG=Ecr=u zArfemz?51GkwDfL2@74K+V)rK%Z}BAbHrBouaaeDa_ckL_sF$rztXhTj7)!)sWf5o zElsM3KDaG9m**1v(J-IDR9=ao>|1h1r&2pw7A>DE@j*0VO zXVt34?*cXeb&INpo#5`L?^M_D%pq-LW7tRy^V$_M%BM4kw~K)|yI*3~WTpY=?yB zow-6Bh8$0jB!fqPC`A)O8E|dd30%PkQ$qo^ztXZC7R7D>EY-6hcv=zWUS4BdOShLA zYcyFT6|Y{gOh9OJd46`6k-msXAhln#>uP!0{J~34sC*SCTi*8>{t;$)%)^<) zke>jyeufarMr7f%oZg^hJ!J*NUm|rAU!;bCIcuj!n7WLi>jV$4Ebb_TO_fFG^Q*KE zGSD5!?SliJd^}hj2m=zGT>7w04L%Y5xckxmNA-Lj_G2I-Ry|C?Gi&IoEFDFxn4kLf zy*NF;cfH!%bJJbfRpX(ydQLHOe(s%*ZXzKHh!>fC4pi6HxHh%JF372r_fU?52-faf z@bAY1M7nd|UB@5H+2r6y5cv;Yj~9Q-E9&}GRExdY(j{p?qJJ)e^cq6bo?;5-mMNpf z<98hefKY#h=!M^x^o}b}xjbGA+1QZgsEQuEHu7C19DMOtBS)K<^W%I4+R!p-RmfbU z&~zGs$1=DFbM$tmRsmS?+UE2drKX9uLu=ITQD*sf4Hfh$AD*2?73H3LE2zE$f{+a_ zn(Q{>cw3Wzyy1`*+nTOcjTac-ZcVCN6{kW2z;aZtE=BfSQ3udafMD}zS+S6>$y%?r z8FMjs*#%I^zRJ;8bII~=jEWszCzTw+(38@E2r5_2b}+sf)!FX{;BP=3Fxc>c;?%GW&|BHiwJ17LIJW02Rktgl zPFf*y*K^B;y^UfmH#U&Y%Gh!3%zM5&wdD0vnRo4W&u;inpHWqKx4Gbow`E&cj}=D@ z_;1mHgusRsL_MlQe(4N>M#6Op^LgNaKnOx>;ST8>&O=0iFF_{;csBk zV>skjSg#+=?O7}{X#3xboNSu{dy#*@3rnS`yQ_>T~a*WzTEW%W-s_ zw)M=r|296tg_4uGqz8%4nu^-sIO&0_5?jl$)w#WS^`b$lNUU?(EXu^~BeKBQ22jM$ zV$7+v-tJZjZk|)UN!>=t@0uxug&fQaMm-i?^HyFc%uw0e*BFJAI1HQEYVNk!T5eHz zPDcf(+j!^+e6N)|sSQxv8}j|vIQ2$L0$U@(2!C>Kewskslvq`)H8oPMkHaqnfmp1& zo~JueK?#i)JzYnh7OC2L=CXa{=&LwI;sN|+h0~j!N^$2Le>2U|iGrjI%B}|B#Ys)a-O96s)}rG4ZFkVlMLI*+=?e&{%JTf0FtlNDnYbnaJVakfoZK}YT(ldBlX z$0`JWy6<9}L$F2W%BM5ZGxUBgA?Ftz{A|_3&ZU!G9Kn9iHI=8>0lr1$a?S!y)Fc^> z7`wa*rsl^Acv{27#W(KWAogIl^f5L<%7DYLt%LAvhh`w<^;QpGSw+OfO)CvuvxyR( ziIeQ(jv%34f_-4Om~0>ehaJLwyt`;uUar&qNmf{MojJ_8@%d!5szt8}zL}y9tL5iS z_qi2;!Dcj^zpQcL?=b>D=`V!ARSHmpZoVDiQp2_R_P&*=t-jGcQAz&{WJw}-jKiS+ z={LKufkW?WoZtWA6&-@eE46TxK@>Fz$+gtA=@JHoz)Ts-!zfXMDfbr^vf&1LvvK}7XN7Ai&~ znKy@`H`IOFvuq$m^yCoYy z%m3(I-u=t4^wq*iVh8KHTSvstV)chy7^oge~iK554_=*#M<7z!gvm zlS|@RSWFLb@6N= zcLk=k`U?MnBY(so_|ZK@Qp9s<1KaE?!49kKdec@QAQZ-zv`^vi>&yDeBvmB1R-&k= zwso)&|3bMeQYGj3-`fFs4o@zuE^RVYly8mWH}@4|Q=6H?L&HBr__2S(ql9yS zKISfzXF`glR@bosK?N5NP(PvuGZ7rQ5S6?=WB)+=E8&c-+NU!r1u*a$SR&x7RYsZgD}Dj&5cx!m5)`6RdPWDYxSjZIJT$d z`U4SGr4zgwQmaA<0(D<%Pvu0TNlkl`$C4`I{{5B~ft zq{sGpo*wFium6O2jMcO)Jpbg=F!sJb!5;_S-NDk5krn@xMLP4Kek0yve6FGOCWF^i zJ%>#(q(Q1o4T-?2Q`sjRRh%imq^`f>TpVXT6=+clJZY%~brGHBniH#}zHwD-wWnQB z%%5FmJ1*2rD*`h#%h|aFi;&a=ztL2d0RFijQGcKmH$*je0N-z^E%fbglwvK93KBcxoyEr|YzY@6%Qao~#R5$iqPo@=~p<62l_8*+9|KGI$Ke7++ois_a z?Q6Vsnf_*X^tJBwQu@%tcju<7F;63iUdh)Lh3^rIFUtQvrq04Is_*;ylz@aVq;!iQ zp>#9A&;rs8f~0hJgLIcP(ji^apwbA^-9wiQ-OnBUe1EU!4?ytVbMDz^@3r15#|W6U zgjTfdmC-ioEQYTxR_lJw+xzqtYy7no@lnkcB|5HvwT)Uy-piyL6vX+J=N9?o^k5Rc0Q!*Qh3IhM}VG3iB+yyNEPy~Zj$ z7rnO>-02FkHY7CF_4tWC!%tx3G!Be~Ua~ijpXC;-_+37{ispnXU^@K$7pgK#&XijF z4>j6f>Wq3hIK<;`?~pl9!|f{gFWy!gKI~~$Cdz2?d0iYlVN2XG(<#8zMMxPY?jjng zA6|)~itk`F4AwR)Xb*T1D#fa4;+|MtblAD#d$E+*VMXTcD#2bY_eEXi#27YcRXmGi zt@*PnB+!c}O8r9rXO1Zt;jvmfh!A7r67i4++jzpRC*r_-`nd?rr3eT*8}N11%?u+! zB{uCjSKh!rVboOFjix?#4^(ZB9rqhKkM(tdgSxv4n^nWvvWJ`X`men)C8pJw3XJ*0-sTkg_XGlZT+K`%9=` zzoRn8X{4u^OBASfqkV1;&$_>s0-^?HSjS&s^^2{>J3eU-X1#+eCIAfjnq~KkcHRMV zanKTZ1sQsn%rCyD=}h$ZI7g?+azmoKm{&o{#j>ZGAtm^CgdwF*^ZG6I z$on3e->FA_SysSh??_|!QTiwv2YLHvq>O)qNJC?mzykrVA^=e|V%dFPp>+>{7>%?Z z!4Ual-|g8KsG9JjNbw0R9R_3@=7_MX(DOslgUZhx<9PKRIU9kV{VXMr7!C*aZc`Pr z=ZkuE_^pQpfWOcpluAn+fzM9T%f-JJnii(*I2NMjr}P4#2B%h?n;jrsi|AUj!eaJj z_|pk5FUmWlgvVupJ4}%c(N!ZsqskSU!QDva!rhObb=ecVs}(Xte({p=UOX2BAUZY_ zyO?RjE-}?xsRzAzB7l_&WhQ8b;p}h(~KsCTA1>XX?Rx9@V-NLua z?yQWVZM?3Z`znV4i2xZLvX9+khPt6~7f_&h_3~UUlqqwer%wl{x8B*KW5o@3 znZKZonn#1Ay-_FKjx23!d-1AxQ~2`X=S0=rzTsn|z-E0Ww^a(xYJ4m~aa8H?Q6?dI zpwE8b*wbWEwU9+X-TtcnKFM}7E(oWF-S;H&NQhHQyk>+;a6mKSzah9e%IdCrJW<3M zC|gHdJW_ykCmjGbdf0A~C6i^OIDWWIy-FlQdI>b%9VL?_JQEp0TqdbI$|RFMP^p!M z?Gel&E!eeYW%=Ih8n6$b4Vuywl$;G~oHP~V{;3Sc(tLa^827L`XX&~m0`}CCY<1x% zV7UP>6}C;wuI2i!*P8}^i2R5X+7zy#mWqzGj@deP=f$Va9#0xFc7_7?j=s$TMiBYS z&Jk{4o8GW@Y=HunZ(iFQoSK5(VAm>?YP?X)w4jrYIlJ3@&RZv`lboDnd86M<2B832 zh%TpL?+%!OKFke15@mD&W;!G7_xu6Eke_x1PU(zjgZVc}*&FfFR1M{o9rKi42X987 zVk#>V@N+y36q12;IA{X7iz3gl()hhnd~EZh54!Ggs^cSGQk~RHaYg3FzixO7Qpy|u zr)~Z%fzGGI=*279#j$T{`$KQE>8)onV^YT5q^c4S0PXb)6`S&_1&kkqHrzOCX^+xe zQ?L!iDC>^W`zhn#)KkTD*Mp=z=^vkPPLp0)`8l!*nl18Sf2BNlK!dWJE96x?M^O=d z6DM}`P>V4|3F1Bqv72fluwd*H-Gv>gB987?b^@cD`OXTpx;T=sKrp*z8MoQfMlMsw z(d~V?ai4~Q`$8+NanBm>9vWO=|5wM-Rk@?wjNex|Vdr`GtZ>|4VtJnacny|xeA&X` zGw(dAD)MpiCE(3FZ{yq=PCuO385)En4XwueKr1#X9$mHcwBfydd?YAQD79VcBG?}6 zO^1emeORXrn8MGtQ?1v5`O>*#eb~#sn!s-|C?12#*&XZ?vOT>+*oe;JX^x3FY7T9v z=PP3AUm&2-U%U&$a!|FV9o{@-9|XuHfI@}WMV=Ul^v`b49C36TReBCGbkeiPrZ2X4g$ygSgH(Cq`sBc^!k%tq?rfW#9#S(oNY!N2k`|FhW_sytNNx}_(;{v zD~i=)%AoOu=`?OVBYcwY=-Y-hkOpHfQLHYh)z8>}EuqE`DAa!Wm>u~Fe#93_B1ki+ zMp@+!fl$H(4H6h2l!^O}YN^STQ_dbRC#E=meGiSwNt7e^_7Nx)=@8YNay%;S;!f=iQ~jzoLjT>}p7 zgD^&W>o)HG_7lWQ?I|249RB-WaHv#kg;w+Z^<9}trJirkCZ)oNn3a{)l3gaJd5q`> zWWwN(tk7S5QJdZk%Lhu^`=pqrqGPEc;}Z^9`u}$d>AM);rHG<9dQc}I=5*$>`6^|q zT6(0Baj2*3NY4ksxqxutbbg6>Gwp!SUKSR`v;vBUr{Uf52TNeB5U?OY=y%sSRp?Gh zSQ4U~a&&_1S#2sV`nDe|c$b~)mR$EMG?e4hDu+D#$$`2f@7w^`Q_1~I53^W z5>JHOnt(&)RBl0iO`t%A{u&HYg_dR&i~J|=RHBJPcg!=Q`Ti8i@*U#nis*w^>fW%xQX->rY$CYwzp5)0#MASX9wvt8ZSlNS4IRcg#aSL zkFP~7y=EhsYo&Ht#rnuw@%e4K!f{Q>XcoUS)I3g2z2Z?rKV?hDPE;MY-^K_7UweSP zU|{6uwMj@;pgnLE3*{(&!-?Bk0VxpZes&$jye*V6nUK|7aBh4ZAxWLu0maG})wCAv z8B4`M^4WcuX+~A<@U{(_eT9BD9U5>N__FxDfxbconSkJNTOAyH(YSQ6P|oaQS{$IN zN00Wsl)b;|U-`^JikJ%G)Ad}V#!m~biOi4MfGo?C{`?6jLX=t$FBT3nokmV9=lHby zie=(a!7Mw*U6Bl<|wys?PXr9VD^XcisZ;|dt{L2N@=?P6dAW4E+fBQhN zPvF|RR$6uHLCZGcffR;V*pQ#c93XNeYCRj57ap857nF6lwtj)}PTo**9~Eifjeq~- zP$x|K^$6N%Oz(U5d{ib2LF=aW`#-~+Hg&&v>$Ew|T5P}$>gcco?XMIWy}CFwt3Hgn z(dH2XoHpYtvo<|2;xwPTDsPm>U2NcpqmQL#96D!g;J>gFP+Oc7^v3=a! zpPX>&D7bfFKuf7tU^&)C$z%5-I_A?k7SCm0dK8!enhi6D6OSV=Qql5?2?e)Nl%EWU ziFBC}>T3h?ck9fEy(kL7X=VcD5dvAP9AgrN(q>R{$6qo&3KAxbe+HH;+wmaXVAwOK zyv%;%0X%?C)=gss>jv2Me}3RBU=ON4^a1*$%V1Rvef`7cx8Wj@jq4z=;qOq{)WT7w zZ5DI)ku>wUemlPfk(z173iW1L*{1J4uQexXX!0^q#xDQ8LnuCCs`UI9oDsA5MMbxL z9H_gzbb(cKSbNU>ow@5+5AmFnpZ7?(ql$05X0t4EolOK^EU>u>hGd&)u-95BC=?}T zQgJQvMQEgjkXN0yN6vw?P1n}LqB-ffvO2<9qEmLe-#ghJ2kR7kT-=x}kB%k>^BDp)l{TScmf z;|^kb4hghzD=z8cfTD^JD5^TyH?Ue`;osM_d+{>Y&e#u;5B^{@b7eiXbxGmkw`s=k znG~Fx*SJM$#q!65J}~oAkLu3@g0dc*XUoEX#(mrEKlW#D^l3Rk-* zs3qa?zkL&>I+#pQ(UxS6o3V+ANN$Mkkas)r6(OwfM+OEUu1Df9P2I2o$0J9?F z6aWRUdCHR6HFBDDOwF2cP<=I0v1)v^uPtWhR47y9fEGBvFvt|-d zoMhF5xH1KuWl3`jXQ^F}uz8m)hz%WUh~v$4(U&61@zw-r@??2Z_=uJDolig3E940LqD$G|L)HEu@j}U?*;yLb zgg-y0iO?gPv|vKEPCVvhj(MKnqW_%_d#xpvqDD(z-=UPSAdV=EOw^2DOan!n#TgaL z_uX${FP?7k@}D#C(Ihax9ef({_Bey$*>O{K)NzI;o;d|j@FOnWGjKTDW0aMbCDYj# z`MBnfda7M#w;t~*Lh5J*Xr$fWSvbF80q=4kz3J z8HYY}c?01e*PjG{Y1ehRgdp%8)<8j zU}PULfy~Zwf523^WJ+xD0yR2-$;^_awuV#3*%USOiVXcs6(x?axt@B^Nv!m;LgM(- z^JAZTJo8C>^qnKdygGGdDn3$NHOR~X5G!!8A@6HVWw^01U1I6-yiVu^IzMr!rxK0= zp0{P0sZypZIUT&peSwsPq4|k0Wa{&tVni{(P3eYHQ*Srf{dRw{(6fyB$#$ImDnGn6 zS1{s6$5B~*kACP-iE*DjPW&N8V4i2r1ixIv))AFgr@^;o`bYOCwa^k;Io2>( zho90Q0?aO>kh=g}=|+49Sy3ZgiQq)q z(157(8N-$ESf7je1rZ>1m9l#vT%5~g58KCF5ZE)d|LzcRN+`b>Dh62&!^X2K`LSVW!Uil4%aT^*T^WoTYo)Fa5Q`nP6!kM57$(Oj18lphFq!U1e zFwKT{yyyAYEJBRU0^`!BVovwluV?}+3ZhFqx9h1<=kL%CZ7Qa7JIcnWUtupH%2L`q zq4BSr?&9I(n1>|rmQg)5`L;Q&dw9`$bjFqCWLAC@md&k`N-ErX+oEUmL|>Pj2Uu;e z7+^~55n8W#`1}6Cz(vY|1AunWbS=e-F-sK5(4(Sw&=xC__|--O{LSe*DC1Xs&^G#a zws6?9^$)8E@zis@%1ZhY zJ$Sn;d2!FFi2C{-Oz$DrI{wl)h{q8sBM3x+9s+8#$w+a03Up;jlNZ6#a#@MX;flrk zKipie{(`=th=?W_b%}ARr6W&DTjdIM=OtG=?x%Gxf@NU0$3O!t|8B6K>Oh~-Sr8Sm zLMF(cwm;l4h8$S11h7_o(8zm9S?$t&46}%Ujj&{?=k(X8Fnn+{-*kF5gdBvJ!Fq)2E0%=(7Jgsqe}V{=&M?7d;ZL_&7gf-Jq^<&U6;HvAM@P{Uq4myUvllET?fgAws5<3tJ;{>Cfq@!-3rlic)GpQcVnP=DJF!NsDi#E@g@lJXL z*X>i=AZy1QV$Lm;?QBh(ZR$S@?a*CPWp>Q;{=*cFp?vp#etgoJPJ>AKp*z$SP;<@0 zqf@LZn~U~w#|1b(2V@toq;p-#`5EItfWVv8(fvUHor>urR{ebnxcT8%buKS^Zg*;w za%E;W>G>>7S0Wb1Y|}4Loh2G=Og@+!>EIs2XI50WfOSapY(1|E(Sg#~d+h3Gf^P&u zVDxSRP-}36C83Ie)}Bj4+=?u^U$M0=o+ekd!3HTQ&z-tFOq$4%A zw~3*XtLNQlRPJAZc0tSF1Ca9V^@SUK4&uqOLG$6X5P}d$o|bciNFm0x3X&!_3T00B zzE|?oF$w*sk2}Wny$oVWUh-D+kv>prS~5>a;}*z;_iMe{Svam#^)na!Au z=*%bZaI$hg!q$4g;RSVz)z(*!R(U>^F$i5pVN0jq7MfN5*j-Ie4@8meq{6F#!hi4BZx-sKAEC$tHoCm7-(ED%NQw9qc?G2jbo<6aH|9`^}Y6It9@tLqX7HzsTtKI{=Bj&O@TCbfihT8i2`UGcs zxQ&Fc=$G~ekjvu6%@o~vnox4%*2Bh(sc>8pbbf|=8Xn;~3~Mw2F>aQZDcc3fDYy>* z0olE2{SWt$9V4WqjtZoHWie*Ee~0H05=J~EbCqc3iM6bUg6o=##?bCPlo>_T%C8D5QYRD1_v_rI`3c#Op&< zNS=pEE6VgtSAIY7D z-?**JWR5C25F1u<})C z6ASDf4La}EbX%V5l{K_3_b21xhX^2-7ifwx`iuHV`MHx4%^{r@AYm-eb8RCZ$CEMb22Yz zrP}B}X3AoAfN-`CZppqtN+1D%~aa*sv}QNg|G4cpt)#DOpQy zIgSQI+|YgkG8sS*C`XKj8Q2C9+O?>6pg`cdBmL%?hD zn>E4N(|br~;X{c1e~k$d(4V$}d81Y+zCb`){7wR#2IA{@+&<3KS(8?0CU7~(AtQdE z*Y8YPi;+dZX+R!Rcq4&$bWN+XpPZeqQP*uY{CVw`rt_S);{jXO@+bOk0FTu>TbLZE z3KG*4rpB(R#{YnFug)fHC~hcY4%w$flCSr5_B-{?O$@)=e&{nZ{?n>|FZB+|mB`~J z$9-K^sTp>MIl2I(VxG5shTUiic8X~3C%@A4koX|MsJz_H8QlOMB8t-Zza1!iBAtXO z*KU^u#k?rvjLfLibdi1(CXozqUJ7GRJ*D1Aei{3!s%<<*V6Oyg_sd;0c6w1nzSyJ; zheiIC;*3mh6}&W~M%v*;$A~Bq(@9E7^-3b)uaxJ$x`4BuJb*}#nHBq>3P3%}V>wR$ z<7ucCqumP=s}~s9c@oOI5&pE>rNs|gf8L$gFoD1ir-4$;sdT^UubAXMfCV=uCk_Nx zu45{I!0KhYII<2~wB4jJ%BxAL<|EsQex}DA;uZCOCffIDxZomplk#BP7(ROHXaQnC zZXTKC_i+6{(H0Dv5z*oX&@^XWQ_25Dkk()7$WPy??8ct9PQ^_jL6F;mP+S4&oK zxQN8`cqr!Gk#1j(9!RU!;K`|nV$3Od9IR5CN#pr!ZW!z6D0$(J(y~%z#YfG96kWT9 zoQJdG3m_V$Z?J*wc9fvq^j+ysw2lq!!3HsO|M?h$mkd ztTG!RN|WT>k5AZ~jzZaRIN0#)2kW>z$ROmS5wxfThDV~Hz!4GNAE0&2<&Q}?@$Cp+ zXOIN&#IH!w8apgg4~7f9z&qS~ihpq6H0luO4G8Ec&mq3rP)uk`Rh5lHjeNcE?TO_n zKNY`*^BfMAz81LT327wtV4AA}{oIS3TTz94s`A}4!#X3nPYXhusT9=B?5NBpopeO- z7@=H75LgOZ4TD`~7AmOx{04AnG{9>%O7A~nqFK}zDN0qjul67bi4j4g$>}~^>dO85 zRjrlLK-cp220%W<8A((WetE+=B(v}Q#W7`cfUwJ;u4edQajMW9wWfhcBs;xWGEt%D zJ@27}FmJ5TP1ush<b2w4Q*w*+Vd_5p5ra9;RaY9p5R09hRt#N zMeRB7EEt&}g6qSLYbYV%$vP%7`3kV}-h0sbBlkrbXAX0HjC2Wz zj`&H~B&-=~jYM~QiX=UO1nXBVNbGk+%8HOTagz0GvhdH>iHF9m01fcZ@IFv&Yj!nL zV(}H0h>CS>l#54)`w9O+#S`2Zc3?9DCyYFbXW<9{S2A3-YCp~+l1y?c;`lmfGRd(N z!{dABE_iZ@ISrr;Pw_*kopQU_4vB^Gr0#_eC;m#3v725?>q7NX;F&oDFxb3rGc7o` zhgCkNnB{y?uH23|m;JHJ8G0Ud!g3<~KLg^URF}`evTHc7-y11+i?{2Z=PgoUZ9XdO zYIfXARn7B@3M}x4JMiF!#oF@r_1tlG1tIwmXENr^JHK+8SATBr2t{e_1Ho@^O(+JbOCC zEei{1@$3^Sh`g0l#}QZs3wobf=mOquZ_d1{1#Uh$lV-f1(lPGR3=eQ`0nlO(gL&>o z?vWCbYpnLdS)=$#Es;A~q{!uvP8dd>(4%mob5C507?1uFRZWVH1PX4ms8MkW0q<|z zB{GaX0^vM;(qSov|DIoEOhPu|9dGs%j8abjH>$fw{j!So-zP?e@{P-r4V;tB(R3r{ zyhL7Bj_!KENPOm{|4p5c0v;m4<0tKV7{FLWeQC^3=>=L|W*d}K9coHJXiMfc%(vk8 zc;B9PuSe2J;9?{|b@>X#V_pA-{k?-J{4n~8{%!ma0PznF`jFat>6Ry3ttuQejjDjk zjXITM=A1@^XAJHpB7J3Y)@VbcQDsMxRy~lnbR%hVwyfT<>+phPkXkW!5{$SY@f#DH z5I=_rg~Oy1MtCV;KIPJ2fD%=DX07uUg9uye-E)>CFz+q320XyfR2+fir#};Da~RSB z0L>18bYd9o@2SDmr4nuVIPb9(9Hbo#+Q9*dhcAvg$IS~zu8TE&^IPd2!G6CvG@pEv zOu7ZT1K0ZFVC(a&d;VLnNG^RwnWPx{fUBJHrnlc_vgQE{U7Gez+d>o7W%Y^g4-UKgmiBkF&8=XMPDy$P}c_=$9X=KLQ$SeVtAUUvo?l zS?L=m@&?O3mgnf&Ck(^X?`fAUf_otG_oC`1b73py29D z7BXaK@550>`aow{DjJitE}nXDjQigc996D7(~JIoedja+2XkpJ<%-b`s+%OwNo8M1 zy{dJrZ=;Q?XsHu5r$WiV{GPF$tK|W}GdMl^#^zLu6&pe+J^L#)2a~t6{YJ_Ns(+Ud zxEIz|RZrm2jEHFET$=narK0=WxcXOWCuGc)S7I?F$z%3$5hodENz%pv`%D;>L_|V4 zBuKqFG%P49=~Kwg2&#fp1zx;(8Hyt+eh9Vv$N135Cx5@D-^PS@gJPTo`(^haWPaXEn(gi#XGYS80_WgvaS zX`D8Zzj)l%Hvr*53&=>Za}BKe+&UMPx$U!4=xJM+zRPjjU%~|dlE9Twod3Sgd_VFL zSu*MIyvnZuaG#AGwI3T~oGsHUF~yHdQP<_MQladGrtgtv=!^DUJYF;vzLHu<0piXQ zD|@N_$T;p|e$>g`&)*~tu+GZ3_gKqc9s1I=i_C|b9X(fPw!k?mvN8Irit?_IyPius z#LTRI&!c8q=MU3&sIVf@|9jTKW?l^kI(g9*a>TSy9^@XSISgK`gw zJyTW`JVg_&hliYrbZn6t9E2EWb2l`6y2jM*c@FeqxL0KV9r|E&EZjMPTp7^TpxY92 zAo-GX0bhtfJYB5l!?(lMQJGO;!D_7_2c6zry$HOsNhMmV?IuZxQL=w z64p0oyF6PZ`8LC2(hHnI;R zAjWTw!6LzpHzN;sqS9mH!cVgTPziQ3&z8MhFNH5>3sdz!9=F|AVo$HSfB2AiP&M48 zLffOAy8U#$EiD&SSoMEYkQ-4XcUPK|TR+i0Le~%kH$Ph5vuulJQA~vo=ZwffCE~lF zFpipN*#6)6a)ibk@V}B&52GygwxMNjd55WwRTlP~qb8$pP zvS1^Y1|U4y{yJA@y%K*r?;C-)Xp*QPlr9vnNU2a6pkX3v()@koyN3bp(iPksJ>-wz z7&gazdTzjy5R;@g`-Q<1dne4*)V@L7qd!M;Fbs&)?5S*Blfqs!Mb(?jE}4a-Jw`Qk zWy@clMe|z?160EWI!1`M&>j&uOdmK40V@p_%ActpJ#0}OG39#C5s!RHYPd2n3>38n zazlWSC%-pIR?w*7-(24Ff3dsLG4)d#kDoIWhPmzlsCWBG>4LM&Z>$WJC%%mmHJ39VlZn7}Mv1ZzQ z`!E`?OzU^7JRgRAO>I-ca$Jw)7j3(Yc_`f(7LIv$OL2QUO_@s68h=S$K+KH{;jn6q zl{1o#k^geqFY!S(=sU8piUdu#<|oTzI*s@Avv6cL;{N&jeisMt6$3QD>ORLCLif@?dQf!q~_4&+gW&|S%&q^ zlkyzZ$TX14-nhdoNOlJXs8UMi9bU9#Z&|&R+8s6H7Z~RXjLR zREh+=_FLV?ncXeUvUN(*^_`B=PMc)5sfc(Ht4(};_+|DVOu~m4P~_j*uJoj_ze2(U zZ9Z3pgt5F$`amuCh9UARL^APnnctYu+4&A+Mfp?>!b zo&Gw2{Cl@AFiEq{3yZU=YMmCDbT)!n6wR>)bJWEs38w^6vht$DoimuqWihNl#O=9kgo+60(|OX zB3LUT$#^>Qo*6}ep5La)&UZpl=mF*Sdy(N}ZbO8_kf@A_z>qwF2M_?EJD;q{lFa1ZYP=xQgb>lD>kOV1t zuj6abZeacxjBY3tOq_)a;*b!fshLcc9VQ24AI>I}7H~%HzO-MhM>dYjz4Gu?U=-!z zNOjCW^In2|(41rFdJaugtmwx-3 znwj;NzsZ7{^Xs{)IjBu4S`<|)1i>Q*^<8&$QBm*UBpSSC!seOnis8GnUjT$(HiVKX zs&!#v`^JSAVCh`>9YJTbp_drpBVD6mDO4!naT}U;MzwBX?i3HhYCTTBQenp|)D%VG zdoHDR9`g%wCDWNQlI~f=0)f2Gp8u=(f$?!Hm=^b?5b!`vA!Cc5$G5HX$jgVY^+9WV z)DWs?DqP!eR%kx9=ssjnWYAEa!3%5W<>bb@f05s)D7AV*{MKpSb%`$&YVj3?#(Xcj zMg_th-C82mf7bymh;w(6811+WxwF*pZx%L|=Owite_^F_m_|rAzyt9ByP{Rj&1A7q zI&L00g)*}=X)>bhGk!%3qH(%hI0IeL_enmG-x)PFl}8XC{^9a!NC6 ze`mP1)U@2#depIS)V9y&b#3R@Aa}n!_@2`Bs|mjHj(4xC!pfR!>cQiX4 z*!ErI!yiG;<8-cXXZ>`sv%pBkrgQA}H;shNRuqY1K~p3(JDZ9ecf|tbt|p%Ie*_RQ zI)B!bv$tZ%AYwy*bov)p&+K1cg*xnOX!drkyXDD65O`>DRrh~Ho0$VzJa(d2 z4>$+VlZ`Bs6Yn^RTNuUP2Mq*;BLygiuy}kw^XQL9<##u~-(i6xgO@;za=2++)qIJf z$$8($TEhJye){@Z+c^}k{rrL1?yL!DGj2oE&?DKVriUoTC$c}5Yf~g~ONvQLplIwg zOG?epalF-osKygG7EqA%X~Bx7XNa)g3~N=?ZS>*yu47Ea*~ai}VD<3N3>dB*&ZvkK zTumR&vv$m(#4YqXm$=|Q&$y^RXil(%AjT&RZnH*cWB~662rs$dvH0`e$_7ZV$R}by zdb@<{0^VZCLA(cJ(|LzmTuXKxG8koLsl5bkQnrtBtcku0k_V*g0rxwZbvEA{@V{0T zO;3CUMRk4UxJmA2p#48~6ABWw|Mbz>5OM-IHy3yH==inXlK=UrHl(>|w=fi0qD=1- z0fk@F8p0#gbF)PC~V%=H5BUCP&CF{j{7kloe856TT>?k5O552cmc%S6Yl9hE%=bc z#2@wbZNqf@3j_g*Mvb(2L)`DiDn*QWKmrAI$1NVr|2@qX`1=t1ytHZ%i#0~jPcYQ&+>qx;RAk&r9efS~wl=Y5=6v6SK#!UBDx zxRwsz%4kuKHi{BbA}cwiB#U;}-6wlmSh#Nt=-cC7IsiXKiMw4e91ipX^tJje+^^-y%-`n|T6d7y^*( zL3t^*MjIFA*pBZJ7xpYq^sXCM`3R*2*D+M$C;A9lC-)!|iHP%O3ZJtv9;vD?KR%g8 znXu;9h$v$B0!ae!<9fM|^gKqui1gm7g5>Qs%o%Vn=oH`(AdAqB!0 zk7o6@)c%Xajd6=VLb03R;aNP3_Q-Jf)8UY=Z6W%pPU=P++3@qc&&vp#!FD#*gFDC( z`@8nh=?R9+;*q}g%`4HWVd{UszFPE12?{9h>)$+Q3?w3fAddD)Ugf1^b^-4*@@@r4Wa3a~ZQl6u!{~x5pkA40 zr@BcdhS;eM3Xrz6Yu&496q%Qoc25vr2mY7+NB!;(de>fvoBp3BF+^l)RiDcdmCt@E3Lcfnz>saq+3gCA<6J~u0m9)! zoA>%qO715#^1-4(WTiM`pfCBSej7%N@v3by*FBc+hudS@lf2oTZ&l@#>-TL}&RnD{ zwq^nA@hem1!m8~{1WBQqe1Rim!~ehR6-y#^zU=GS4n#mfXU8(YVuul|C%rrO1=!7X zZ$9+S9sy>IAE7vxrCzw}kV`Hr43=gLn!49ppL=&f3^xhCf{I7KCQ{0Xuvg=){AI~? zQ~RGzf87D78fBK<^*PIKo%-Hmk{82He)XjM9>dm5n)GUk)AAvrn5emudN03ij=yZw z&{6r=5VR-6d(9^3GetMjxNJrSWd9-+yk~}Z*m@0bmel+MHbqKz*@z9~q-+s^+zNbD z>aBk0HA(nAUL7CiVY1gU5-2FrHE}49gcIo9Wq+{bK_YN^aY)oC%+t?OqzFBgxA znfFt_e%mu1OSR94Qe4+?gYtrHYekOMpk&9lZ6L6|#mS|4p7vV6z-@$e8vEa^4Pdu~ zr|QDeYow^(`J>~eA;@MQhJh14Ae@j%%>l!9<87wnrB7tG7SS9d^9yQc(x8_F0UzWH znLC1M4nZvXxSNVmm@8*sRAmEyUR^y$>bMXDj$XP<0vdIx`rOP8;)knDg|-LJ)}vms zuZ^{X`Di}4O0|XU9~$MR*)U)q*hWg%(JQo2o{pI(b5GHVnJo-3W}Co|d4L{0MfY=| z|F+T(%RV9m);&^*puo{uZhG>sSYHyOo(pXIz;0}=LRPF3R0zPi%9g%P>Za;BhKs=f z%2wqW-s!@G#uC2@V%4iJ3P~bYp7R8|qXdW1BBs5J$dkAgSVbJv`d=<>AdNtii$<|U zr3;^|vp_9GaExG_VJC1hPZ|$z=#nB6twcjU@doKTNrKQE0+uh_&QhBL$b?*h4C32x zaMGzzp-YQEt2bySQc&u`;nbz=z^8Zn@3$0ab4pWtx0&|6zW5yrdf!5C!at#H>D^n> zT>`(?0yL3ZCBGY0_*`wV#CE)eAUx=K-)t{+=pW-j5h+qB_eQZSk=E{FpOX=*faI&c zssW5=h?%Tz-_As=w%-25vHr=AtySSaV@S7Mq@5d=ih%`66zyY<^zgIdr4VisiiGj2 z#s{t}n-{=IcNc~1J_F3${j$OD@tgb4ary+w=PGMr4B;P%PIP+ynBi_$YvuU<7m~x% z&nTfxnu@A>6#$-;Q{pUwI`}L0+Df|!SUO2P$%}wLq?%?pi+bjGc8_FS5MSTm>-S72 z0{)IQbDruTwKgYsN&`IMj_&hr{&nq1egz+jyFrAUeCFLJgg*0AZN$9^?K(4lS>Kjy z5|y&on6qfoXCCprKP{w783&cz?g8F%~!&#t$ zz0V=n)SFB>OzROmwu^j!O;TA6GmW2aP$h4Zn(2@&4aPz7VG{TdkDNB_^#bGo!a#(W zX@miCa;9+}!sO(6Ri%e+Hf5ToocncRjnbFA9ErRQjaT1vI>_4y9cw%UEPw?{+=;Jj zP|Br4rI==|Y2cc+oyFi;t;X-S&3V zm1+nSqX62C=WWl1xfKysU6@=UzD|0&&x?)q3$h^*aRdrwHI+q@Xr;A2y!eW^5(rJA zZKTwEOfzZ0Z#=T=ET6+2x|sTCk;~>`7CKfc88+*=^8=i$geA9*psTt?ko_>>b!=rX z?}nu3TlCZI9KYqtmObWH0BLViZH55O+!mMHu2p0sPKjjw?hA8i(;H!${_k?uPXXL^ zo%)!kS>B_B(JS@1zb>E|q!|h4`Dp|fgdeo*SJoXiEsW%Qg~4gKF2eMkM9=?6n!HFu4m zY^Ng-OgjriIT}4)^@&;oBr5~&Z<5Fb+}sVe=C!s!0fNvxU(-_1j$!B8@4c&I?V?gk z5c$>)RGHy-BHy_3aO-6YTcgv!+Q9t2fBWUY= z?cZUc5?ums{VMXUq0DSv84dsW6_PY!N+CLn_W(7Htd8`iuzOmJANlt*1*)WQ@YVDZ z3X2B25X$T7FqA%oAOt1VOX{J0wf@kTPv)Dqv#nOHFPdx`)HR(Ldry;8ab?)iUC1e; z_NWIjk0~QwJwr)BMI@-l-}JN_KeIz$G?o;8+=^eBopHVYbX;2rcrIo}pE9;1uQKo# z^A&Q-RdEz|EH{0#{f?3!xBb3w+}OTOyUt(6;~fCyIF+@e@4? zR*dsvDHJ#cA9p!X4Lzx^+q&c|H{IbAr9d$R=~s!KJp|l*nyLpG*1!K4U8JTy8cWBJ znvQl{1#UB;#c2?_M82qD8YY_28tGzmVU$vvnXB@>)V;kU=BfEK=cG4M*QV|ffEMAO z_nZ?s?>|q{Q$5^?T-2TvE0F?eGCa+IeINNwC! zIg6S^DR3)Ag)A)0XX!n03Uh?|#*fz!Sk29Jp16=TkBT(@;#tsYK-H2BkfH)PjC30B z;xUCkf2SY8*5CJHKr>GR6SPsFp9Yum03jnhVnM6J9jk6g=_w{;1*ZeV4oee#^4nC$ ze;*{^?iHgxalD?>Jz&7y2}K8gI;E8h*a~jKVlTQdLN`)VS5xCVaRlN97CPvpTO6dE zk>kUmOvUOb%13;E+phiCh%j5&cYeme3iV?`?kTxWSoV_V=`YtolH%K#JvAZs=}i9S z!}^@62EJ_qZGF10Tj=G3d3d)EX`=P_YPmL3u@z<&3ardgGf*IEUM7uUPGOLx`hQL& zYTz~k)v7b2>i|qLt|QIcvl2L>2aSx))%%3?V)LcXsQ}V1ollL245nD zl-@!+LY%)yLOf!+`aTALY3Qi=Ip1-hdQ6Bbzn8337Q$LjaaJ4^zRdJ7ZMC8Jvc`PG z17v86OO>C_6T5z@qc9OEww$&8)6{u4RXpJ())=#MqJbTTH?S-DIh>Rr;J-i-Z(8st zYuW_Pv|2$Kjri5c{J7tj-+y6+0YNP7t_LT5*I$^Zb1?Amlt-vPX7uZ@H^z-7?jPSK zY!9(0g*hBJMR?@#R-e>dYHE8BdfAP8x$X@V&%yda zsejDw(nqY{Ypbc68na}NH%(dYz_q?Bs535Kv}+Rt+U9EPSsPU(8#gqmFh{OEuAoV{z3DyCfD%@z3Fg;F~kuq#2A zISdR|=JdYt+kb!kSyN-ESD%nkQoIc^0a#wV@P4(A zxDJhVx(+t3Y{2bTfvP#ABhNRvzuvZ5P82TyiXfk&Sqf%n5g-Fkl;rH*ne~TVz7g7Q zy(ad&6wIy2TOYE2q6ua>E7woaN+JC1?Zt*XAnk! zs$qk#ZtFXdFGRZ(1x_Hk0BcOxR6c@UNy-&>Q-AU8i7N12X7NXW5snk#HHmxhhCBC; z<$q>`T%#R#Sh+2`r0RQ|t6xm}J$wk-d^_@)f8ug&q>bD&(-+-1QxR%U({F6QkzARP zS%_s8xKvjD^<(044t?OAmFq4;>ht)k{%wq3cObsO^9-7bFvcIC?WX_K+L!_K8P#Yc zarw5aQtoqr)9BrAeHCW0oPmDQzDz}ipsAQ!cwFw@Yldk}_V z9OOt2f%wm+XACyW-cPz;8eZ>}`wT0JT$|i(@pf94S2U*k4q<^gsTGE%^VcAP^d67M z(+cAY1yp4vC1=;f1zo`}x6{NrC6Xq12{_GBpEGH?E_;}Z603ZDvp@`J2IyxjU~Psn z2d{B=7|{QaL&s}3b=meWdt8trJ7%q3ZDmUIRXtz4?NOHa%`zM9;^HF0dV!hY-5nzU zlUa~{;x99Wq#ZIQ4MkQ(22A$2O@Bvy`gGs|8Wi;SPj5vllTM`{tkIXQ6PVcB{`5B+K{xpBxgm z#Ya;Na(B2Q17P|!0qXf)zhYa0Az*0oa7VKDMK$&ZVAlZ!=<#KUQxEKB=vBXO7w-Q)#bxw{VFEw3zbXf>g&r%^euxzuIqJA%G^qawL~?e}nSfB< z#L&Xf@}7s*;O3Rt$5}>G6og7g;TJMt6)9wxc^x;TQhZ@L*R|~kNq)&X?TxYa^uwRS zq_J>saf8$UqJcfc{acpj?TE@ zeT&-8uC}s5BK9fWK%rB%2X+T!G{TiBDLw*`r5x~rJt~utzoM0Lw|k*^R9#)etVneL zj_@(HSfS}-K_|?a-&GlK2aN;u|4Ly)hVfT2t~2C%O=ndRHZ>@eQlRkzOZsprmD43? zO5}k(3N*xZZOZCwk5@V=lO>>y1f11()!2t;q(Lu5;tnqho<4egyrKhQbPVKxbyi?# zt-w79jbuQ`X3jbN{Xt!p@5Ul9y6lA&Jr}MA-B%hw_VgkQ+ypDEa#XO0I7gHxt72{M-fS@ z>e{D5c@?kUe>?BczBnR$`o`_bw^Kf8QoAXYA*1pQV9@+U&PHX%oQ-^4S(YNo}E1S z$=b%=wpwcEOz>I@P%_Fk@0PF}0G*CYPZeRMAC&R|2s0AfF0qhH5x|uw=NPZQ-iE~O zJjCb}g*dVq>75QQ;`aT^s%lX9sK5)nKy&e;m%Y1$e+2Y<7l46kS1xlnPNQyGrw`i> z%l<9&|8G`F>JC=IFkJ5PUjCYX{KT6 z=M~dLIr2LahC?}md+R2?8LV@848oNNk}0u*yNvV3w+FH^dny@5J(xbdO)U(IDJevV z=8n-os5s_?MmxI-W#!7`@k!8nOcHKCtCoku&{VA%pBlVLTOftRud50UQ4bQ}FZwa$ zwd;A-78cKzoQdj=56;VTL;)Dp`nh-V*%Y7h;t0gEmYV%)XWkWqo-;{~K=9hu*u z6J_Ja{*TmyVqI*afcCE=59CkFV8Nz#HpIdra?+?1@36khs%ig=7_`Oz0T3^>>AxQj zfg_1Mvta8WWP$j}xSkL^*{o=A3?~P<$vR-0XYBf?hh!dZ41|Pn@JV%9z@4cjY#-Ud zZsmGq*05ZV{dVR*y_h5*1sA91-VT2w&HEy>WY=0m?m`aR(|}dyq0O9r>eu94sXz^h zLK4Gf%Db#_n3TULV|=EfSR8ScuVQPUuGCD?cs@WU1xSZ|nr@jxZ(f|)Mli^~-}27U zcH9BQQPN|BpzZ_(-`WyAahgAXw~{?wDroVy2bCidL}Ds^JMUc#Akk`;pz|F<55Q}p>O>}HVt8Mc zk)Bp#e$xfqP=G73t1jOPBXO`$%}bSsaRbqtb$cc44Iq@rMhuX6{X|+Nn7`3xi}87r z;r7v#U=-~=%JQWRM z8U4_^agpat>7%Tf+xhcD?+ADXATh^M!1`(Ge`)Fpbjn%d)-yz-dIr{0-(Zrnx3Quk z3oAoLF@oL0odrP~-0Bv=qQ#`b{Y!V3HW%M(Mrw7FOVB8A!$+KWq-&5YUk#d#ILt^q zEXY;>V08?l06p7T$$=jaA9UEY-w%fbO8f0CdmAVLs5EFz#|2T~rk_woQ8$Jp#}vyY zt=%Qy=T&7AQ^m%+tapt^)CtbVj%Ao%8S#GDR_Ug7s}c61Th{$6--54sEP34Q+kY?@2sZFv?3c4Ja9 zwXtC!yk})%bG%-nmGG_^<^?>mlM{^eS6(UeLa9Jit@UA(%m6duOaPe{q%dN{SL1CJLd+O9N*U&JPK8W7 zMitpuDsfDN7}>M%q{`=|#g5;>@#;-yQTo_mcb=&t|W#5@+Y*sic-);|_MwG!I516GOHG>JG5 zDBt6CkJ#)?mC3=5m?(>`W85p3g4mTf(h|HskMYf$w{aOK8+TcCKm1r%#IO?bE>-_X zRU!&4{j}J3K4YZa1psjNlLT+K)Upw6`?7p0aRdX1H{C~|d04oz{& zzir^)7=4OaUZH%vJ>=8aGMf2?UYCUJXszb~7)y?X6!x<|$HD1Yn>cG%35~8sG7a{# zUyBwQjPD$@Q!OC_WSq2gY24ZboX;{CHpX17&w zSUSn`>(DecIoYPiBlFn>gWl>}c!1kO?T?lB8M&G?t+g_0wG=4a2qC#26BGW)D6l*M z08qod+1^}V-RFo-%=vg<35rKX#nzi5lj|BQsq^nNh+eHAEr)fYp*g}dPlZ$l!lBE$ zHBm95yOy!cTYTm;oX-|NKPN7z6_5Rp-eS6c+K6&_3&B?9+j+3y)qlklF~{A_=W{j% zu+;!^mg!nw?B#cy=RE!9BR>k7*F&ADuDbr$NCZ+XI>Z?l;~+LVcVMtGE*fH17X}ki zz~<`WET{SEZuhMdg?DqCvmTgKpU0E*dRKZXgi9441?8)+uXk1?c!R8c(YEFUq-=zg zh(CmXi*X@%h~H9$u+^Ix$yVKKN|ucPZmE4|ir;^a#xQO{T3`X-Llbjfy^oaJbvAXiDZMYpDxn#qHXrM_bKlT{!qqHhlAkw+|1|sD%~| zhXNQK5^eF*4`F}|i~AKe$KFYyw$jBuiC;HL_D#U=dbKcFBIfV|6(x4(l?k z!9PBael#ZY-Q?!g3`#Owv|_lOd2Zuw>I3*BrY0`ySM&ZGaPW|Z@MeZaS{%&KX`${! z3{TVJSK5|W^*$cq9rwfuh$0>>az^3n$bMi^efdQ6 z7r>}9|2x|S07tT_i)5ZQknM86%Jn>CU6c8*ei-5pIjO_^{dVm+Qou$iq_?SFRX`MJ zlck{&+|4<`d9q7XSiP~SJF`8We?SH(suTI2{du;Jx3S)7_BNMn6Bd=hh`Z)}eXaqR z7H&(Ut!U%K)y(99liGc+rt5*~@$D}fzc`V&HU5lR(StMjUe|vIQ*NEZBK1 zI=p$lm2mWxY&)DEk*X4vR_hbDUaB-0XW9574ufAJgtn1i9LRwqZ;Tn%{J|M z54QOMzRjoX&DwSfWnZp~@X{1tOXpCH@fDB4#DcV)bnyCpUELKeAISULjK|jCUM#rG z@tUa3sCg|4HL%C6T-}t!FuVWS0Eh@QW62669q@Ll8)(}-A;AfWMiLn_9*-yLTrJ7( zr1CXRU98{T+QYoCWDLpB`@WeMN&=?D#oE-q)Z_nr%_{kk@q}a|=r6|<5C))US z#i%&8e18RzMHWyykf#~?CDAL0^_N=&u<_X~Xs+XQc7AbchcB$U1u_}{Ut2{IXuE}unFO_3wfPgJ_@$&tI zIb5xsKe%Xo5=ImTlf)hnKj~KzQ2AGy*TzRQ-J)f#(tpz3J*5d}3;m-d3H) z-BwEVg04%rVoQ@+C};uYlCVf(3}d_>`jMdQF`2`!$K|{0yuFRaCy!r6X<8Um4JXW! zNs-FZe6?0SH~!8MqSU(7GiBRDZ$`1V#G#F1V!K1QU*6Pzt!V5WQMDGhNlYU?@EozU z$FyAh|B4@oC}=z9;-qnCMvGe69qpy0lTp>l4io;hSb zhRen2pB1IRsFy+aKt6Ttfp9!OwB;D`?%BJd&{-|_OBFpw>M?!fI0C}5f+sqyV0^0U zVTXM{n0Zpm64%RZG2)!?ta0K?J|P_eDj|rd0@J)#0YC1hRR-|G)6o`kk5f>aOO|JE z>3=a8UquP(7X*vM{bEyyPUF$J*&k}c^em-AWz6h z3tsPk7!`V~8{%kRpx5&%gBR>Ya{vpf=(gx7X@g6vv_&G(p=&-{hy5*Rg3~wa;d(^1 zya6o(Gcz)mZDZH%&d`}YEyKk>J&Mv|fnvdeA(fGm_4y{7EUDgrPJ+7FWhs$^$Lz$^ zYyZ#kJm5=V1fTE2Wgbs0gnr_S@8z=l<+MdAjRF5aKn?l`XsMPSZ~4nB8Spx2RIAdi z545LFg~DMO8M`Icq-zILIhMJL?TzUad597Kx-a)E zG|={%-Gn4z35gU)t8V=+)S54vYyirySC7SmatHUUZ)uRe%pOTiKnl^My)CW^&IMD0 z(8oLy>Y=pR#$~rQlhANR3v&jhM&zco7{%ixK2M8VE=e{LD#0aM^^rSyozILc$ zEw%yfO2Hj5_F@Cv-PxotBtJCx%XoAAer6+if&ftPRgRk32~%WYRw@L&7CrsC=5`ZO z%gmZ@$?#N|;VNfh+4eZ6(|#|fd0^+ro&XhF0|(=OLoFv^Pi~kehx#EcHtlNFi%(Bs z43s}4^C&Ta&7FgUkV=q1!k+>i;iS8U&+cM!w2VF6ZHd9toM=l)@*zDWQEBF~?a}A925c7UHmUCaQNg2D^$7;HUc>e;bE4#lfvy%=?vCT)eg>roFh-J62LHG( zFr~z6Hb{tVpzf)RKT6{9;Ij!SFwg-XR!P9ckHGo>2euqjDChQD5AoB$CsO+CWh{BZ zUd``FUF;}gMz!1)24a#r+s=UwuAN<3UD%HRS_b@L{l*Uij-txJ%EBLK(f*2mwlNUa zkx%+i=hpqXG#-Ix@VvhfFa{jc1jbU*OIB0jUi!2GC`D+2`&Su9@KeVWn(s8j=^H#h z%iDIX=N&^SYyqMemt^~T+zY=*sOL+(fyjfKyBu-DqaXZ_keqB9|JH4oCbDf+*jpJb z-?dj->nt7>Oy7hLKbq`M$BKdz>L+Ep!rqP?MZeUpc?C#2G~-YEy<{9B!~wWQmL@vQ zVFb5{S#xrQsGK0p?EQ|H?`V1DB}zTkn>hR!i4v^$d|%CFq65QGm?_@2nj_%pi&~CR zdr7ody%YT|c~5n%d~V<(ST zI*FmARYE0doypLrE_SwRt#_8P`N;n3*N=F;{5XWyERpZaCpR0IJ~7&TD+ua40WM)i zZRGdoL}X1^xvGqO+M)_lqv<%dB{YN%EY=#<`i1ZJcJ>yzl2n$Z)8EWV zEz$V$+5wCp_VKLk9=fAh4zO3f4u<&zZD!BrB6orqK9ovJ`->e>I+pJ7?*bkh@bX<% z-oQ8&{)6$mikt_RX{k|km5pt)n^K*|{;guAL85yxC76%ed8{o^!^9CPn)xId5 zcH*9iUSM4)Iu=h9%U*if6%jeJ{pTPGpZ^0+J9oj7Uj=75E1tGB@`+^9XwYF^I7YNNN#Yc~7edEG(!fVeR>#=r@pPO1V%Nfqnu z0O(tMw28YNG&wCf%YZSV;OByY;GXOl#z1E@e7PI?dHIJ+ff_^dt`r@v`B4RPi_N`d zuPvd=h0Cm4O2K|S8q1qJ$=foAa^uj!&xZvF{Qwg*d>l#gQ}Oq*gRsLN8Wsx&%*f&U ztmr8;@_BzB-8eSnXTdKTxoQmJj-M6LCd7Gpd_p+wavGflN#D(7jSFRR*t+CTNe%${ zE)SxE0ahLtq$LH01lLGh5DfFYTR}`Cs;UNh`?wc46a%O+NsKP>>x`$8NhHMb=7rUA zbH|u=GbcmWPJiI+{{tZ92xrJ%?_*bgEEYcy2%4W{3)#ZzYAF^)X{Ct!U!ESP0q6rp znKK+K+de?*!(i_nhhGn%sQ;29Q!(2$Q?q4IK$28)%ykYKqW!*#lam2K%L#LJ{`i;X zRT}`2NIF$CCFYH^8ixB!>bw6AaXqM;_Uz(6d+X(uYk~y|Op>dseM2KL#^^AKl_4T^ zWG_wOl2leRBG{Hy#J$hN-1%b?fdmad^8O0>%BUkRtTy+MadbQ!i_|92aOTCoJ9D2J59;CiJ}UoA1^N9T7gL%{#rurBF7Q`-`az%!(h`09 ztHO5p)wFYFD~!&?8Y-==*d`PMI{1iwR;55aRslLz6s0|WSKC1Jimh2(I`I;2mw5q4 zJV?n@+yVz^@1DQdL{FPG&l^&1ifvtHYm~-drR!BzcL4Ch>&Nq@Sp=3~;MXO>p5(>E z3F{u~p9MGKw4li^qE~`2Bxq$4mL6-ugaAe}7UGrNRrD~2t#T&5G`zj)+7{N%kmad* zAY>#HmN^dTQKi?3c|+$M zO4qXZO!XHdqfx3L})HL5&R$O80(5yJym>V%CE8&nYkW=16VDsg?{G& z>BOKu`*(tP@s3gSDBdvWn{wlO#OLLKZ+`+5l~hK@1)onRN~SIeGo{hr&-XRTQ^3uP zK00XcQIJz~eLaM(a)N9pazh13SI1YYbNeZ1Rn{ou>EBU^sHX_T|Ef9SDQ5>xs3#5L zfDv6cMZM+7{_MqxJjbj8_`&|$H9Z;Y@JUEQZkKH{xtEr?>Is;X%<;lHr}V{ zqVfb(8Aa>Q>D<|qu)yd!?Jvn{o!A*-<`5AlB_-_FYK}`Mckk1_WL3j+Li=>r=431X zcBvZ96CO33JYlA@c*{PY%5d>w_c(k@fQ0rpnxT$_zr>O+*OYy514gI^Nmv{$s$@!; z1@`vjlrB4vaBB4nG!(lr6IcYSa7^XH=+8W^KCtBy3;}OZ$P-upu#+BpzE4o(0(|{| zE?~0$;H_0s{z6%a@FkjoW4Kv@~$4&yMtivr`_c;pUVi1I$;&XQ!*J+`m>*hhj^2PQH%jY*$ zvzVK@R^ssqP19GUUB|zx4P!T~w>Fs^&!^iT{z{PS_GhYm@tuc6;=km@#UFr`>B3I- z*Rri1gSWbGwGKNz4wbh6O%m6i!+f`=Cl8@ijGy#WldYTM-&$Flf1l;hDiHLL{xq3t zJ@$sv?_;$ei(~hHH<@n?gx=RsER@l{UF=01rwaR4SzQ8uOrFQW@6(t`|D+l|JVDyHCj^{Zqe%mV()r~QT0Zu?ntU}EcL^jpr+e`t|9+cfBcIB08U;7Y`Y(d{15JARb3bp-^%0F zwXBKpgNmMvmgaTy9bsNB>K+DI1dC(NIii%?NCt1o;gqQ$ttbiq31*=7TdxvpBGC{f&~k%WUc83^?UXg_f&Tsa&%S@F4N=p%|&hulHPtP zbf6uD38==Z8XZ37?X3PQ@-1v+Ph7+q@ZC$=j4(MV`oJSXTgE*mOLmSVrO*mZ+Pu5y zX~RoW0FmOBIh-ZbcRujv==m7KrO2w1G~N@7yG^-``Hm58ek{j9A#P4m;mmfUfP>>x z3R}dQsQQI2TqU8g?l&wNYN7*Fk_k0FN&8^P{c+T>L6Ki=7zyVeb+dr|pM)hW6l8COA?UJ{x@!{&fFadsZ15^2g zdC5CirfVMqAed+?5PGO$8hK|3_}d38Qrl2D!|8l*C~hh%B-5?!1Op?3(IM%zEDbtE zjPFUuhxBE{jw(iYO_%lp8TMHQng991`6taREoyWI7rF2$&--XT+c^ri8J(?+gMKU( zuEvl^Vo%hhPJXl?YjF8#;bNI0D=o~8_>jrNm?e?q=Q^f~->c_n{-$&5sATg9avxd_ z>gSsj1%i#QFs8rCHm=_{nGG0p7gQ$MaAZyxOY-~>WsDfYL~|A7iQKv z%5RDvRj!b1?kaBWuZ@s(?hL!>4pOXjW9TsyTSJp&v|aN+t(rOKj>B1{PhW^?4m9jN1$w z!%iZ2@-jl8Nw3R)3h2LC*XJWD7h)biKBH%|GXbnJ4n(1w4=9XZWK!>P zL#e893E9%Wxa>zR!PZuLpB2eNhK?!rNq?C6=Rrle%Jf&|ox&tQ8<>;4w(W}-ybmiu zc7On{dbL{BCTTKdTGuIkr3T^Cd<2#fMY_uqgjn(~_B=L$0a2bJn6*P#FUS3IN5a6P zh3s`W@9qH^d8%~cGQhKX`UzCog72KDRUm=zMCJcSore-e;kYyUBzV9ny}?Ap6XTCM zWaJe(U{9w0;sfZ?>U|0{+HSYUdG!QSpdq{i;k0u2TM3G!@z3~EWi9L+Pm{VI0u2`| zfN-KV>Pe6VWg%U&YQfGHl#N|EPyREniPOW`cE0NsP=!l(Xte?e+nOxtuhmU_oe1ld zB(-Wujus`8z9g>8FVi8b(bOxOswIO5r*D@oZC8WQFKQ@!jaj0e@0g+`pkN8oU)G*+ zuKx3-G$aa`bYFbeP)3dvC`>a@r9^o7XFcENV&KbPuZyQ7dMo4WX3tk%8|2C6`^wXv znfm2B;~`*6yu8xYVjFfej=_qQ-r~dX^Qpk^P2|Y1%_nl_dbf@tDuf}xJ_iAhjmH>D zByktzQob+Q6m+Mk^7xA8&*6e}DC%Evv@!|-xqCf^w#9i919AYMUJj=iHv>&PpZDRS zAbi1f?Eu!;zkA|uoJE2tp5#Vy;<)4+`XsaHEDYB6dKYgPT>vm`6q=`{qkem;yL=I> z?BY^aE}%z!BE3{7ZA@#5-z^YhF5Gc{XhFzFj^>RXKt2mH)g&Hbr|v|2S|by$)3f`2 zlZ1H2rsCl{d&@Ss`J{x!XE{%TuFh5lghnYjvQH%Vt(qGTLtnqrrUk#tYUi}3MH^%# z(@luoU&m>3*-#~?-1P8)%(LM6iMn%%EKYBdXKHLGztq3!7ECniUz3bF%qTP>oR#J) zMm65=Rrc_2C979R3_Zs`>xuT*w`~xMIaTf3mE8&C<@iv^esgY39!5l4^hP_8OG-&; zEMur9MUwfi3O?S~_ zrX4mpcJY)y=WUki(t(?DFOUrcK)4YBw~F7xPoBGqy9PnC8o?;fGH&;OD$ybwS4L}0 z7-2lmS(i4Vxb;w}&8oowWWPUF-&2I!*@m-PP&BneyBumCP+VtnL+4!KJ}rj6jq1oP zQ$vh{MV|%NX9oUVaHiM@wow?W_;?%aFLFuwXO#9yx>>T9eU3z$mBJG_l9o>V%zarC zlOigIhZN`(?Z=)J5`^nCS3WpWzvNI4R0p39$qnjFAxXFhJWc!Y>D5pK?DQZ8h*#Lw zrBjnq+$RNKdRH?>O6vmW1%RYS6iB}xjy^D$qRX>5MYGZ!OYYte!}y8S z4m3EL?gl@$URM2Td#F=aFF>P`IU~HL^Ksfq0PH~#MPnznJsOC$2!TsdKMGRvy0}-* z^hva5Oc(+wdIJTe27}k1(P;yuZ$g(KyKC2G8N7)P~I&ij0?`|tT@s)!0^m8{oqFB^t3TF8it!5#QimFXi? zUw|hM8<9Vb|7bv6-+lqzNg&y|jS*<}r%=FFI_nR3=K-gn@?B)*=&+MOu+>q-LWu_c zi?E97fFNidUvSM)5g=lv#(O^@RUh0hB={wc2d{tTqc8}o#$vdhDOKMbup!D%@NC-v z#n>VhN7-3-WI>i$Q*_7Pd zH#n+di@C}1UZ?AwWcE*XJj;Z>mEyS$so{PoVlb&pOT*;m6~fx6mXv>ehU>?z4@JHx z;oFxhsmCpG@@AV1*)wziT`Vz~FJ$YBHa8db0L@gqVXnck!WHGeN&$RZvLmNl`7gR4 zI4(hQ+NtC4Hr|jZgwZU~1SJG3!@Dg9(1fG9zO0MyR1aeq8+xmj#Qh#nf|}3Oa`U{} z#o(7R3nVeVe%I&SJ}8J~FZ?MS^R(*=AfPA(u<0|Sd?ySh2x1LTL)x!U617TIX#7E` zOsHk7lAA}Z28wq!-P_&EV5FkXYZ2PV=q7k75x&>SKB2-6b(MTuo9N^oTf!kflV-tLGt*P*Q8L0=@uS%??juT4f9fjI?OdqkiQKPT+`B!U z9UQ{~w_HjsvVXOVF&%hUR;Rz$QRpdxAY)pRt$^07sG&`tiNN$5{80>n=v000sspy+ zo_CUJ)fr*W$nT``xX(x>WGJopX3TLuNZfn0=# zNr#;zNj3H()UP=BW}#r-Tk z>Csm%rQ6Gb1|ovbsrVS&88*0CpCOKcvbSfmyKgq!boJfC@2vZ)9%>tE{AO9Q?fJ%A zAzxPbSmfVZ`t9o{RN%Y1sj=`45kMqFVGUxRWdxQ^x6edB7tB#YSHbmr<@G+CKXpE3 zxcq`HZE)LExuzF9U++?CyWsWLwZ)SIQFbkc?yR%E#XFtPFND?~T1)z5GIwSr$ z9UkMX^8_@!n5!~!-6#bfsIq~kiYJ|B?#;Vp``9+=We*D|#9MP35(#e9?LtN~T4Lb_PMN%tvP73Cmz(9J3`K_NM6)00N6;k1f0AyOSXw zyo7@>hKg~Bfv!2D5T!LP@-B;>>gTroRfI^2+v)_>)H(rphX%0isRz{Jizu=&c(+Ov zg=^(A<}NU#g9>FfilwIu9-@qAT1B|KDFr39f3oFZ8(BaN^5-c3_XqA%6Baef&vL^F zc3*+*Ml4tb|GxqYnZpgr(Z|Hi;|9f;SP;QiQNZ$lt4I<5Qt#%IO{sAo^Pi=q+rvFI zsO)Om*J41!mV@)rZED>;?}#MR-*(a&SjufLG+NEEaM&znf4Vf4NB3s~kHW>rj(cAB zW23Li@7U0+c${c_iTMWeicIE{>B5=wxrZ(K9m~VFA>h7Ip(A0?M)O?dN$w|4!&TmR ztHqgiMA`oLe%Rn?g6hQsORXgc5J3QDCA5gL4B?~#Gis(ea`HojW6H^31W7DWaJuJ+ zz}CzuM_VQBr;J9n@OwM-kM&b^wLXRhQz?cS3k~zGlE<$*riQ2}i=kPmOk2G`rhHTr zhmwqac1IXJoWP5&lhp#iFD^$U{kMX}X}!_rV0jNalP}dS9QHt>>HRQc!^t7PG>_ zEJgy6_t6s`v={FbZ2E9q%zobuM4rCeiwn-(XAbnfqY0fcf2>I(*m7Jw*CVLH)jW@8s;?l8qUN z@KA{^RR{ZT5nI{k3(zhXFT*uowRZ_+)c7nb9Z9g$`^(0i#i|Id3P10P4U9 zs4YlRwz}=#@2U-jOmv*$ASl#c)J+>&SY&v7Rto8*zZR6-GxpQV);rSIk9+HAg%nQ# zZ5quMTjns1aQ5^2T+|7qA|oeG$q=RbQCZj`W+NH(BTc#cIMWtowb^6y^B{gh;1kc@ zAbSyzfVq+wMM=(07{9w%)fqUV>hiy^YHSz zOZ-t1yH}UBKdR)WYvgj8+Tw+B31HFx;`~;&RaAy==b^jZ-Sqe7Lkt*!0_2DhC|^vb z3-X*(NdkfSP~+gm^_&nTu4(RP7EO80m3hO*4;0S*ovu0fM9C#Dl)s`4376%+hO9RI z|8I0|CzPQOFGUSlXLwDD_hZQs@K$*Btp%)Wl=T0> z5J)iT+qdW=_o?;S(_MyzPN1_1 zN?H4Yd9|UOoj$A2e?6rY zKq8T;uEehS{OpZFOq#6znFzG`D8^mNa)?w}g7`p0gyF|G{;d|Vxj1oJy;nQQKo>zU z%d+mkW?0j({Gg_L?!Wy8Ss6lGc^%w-VW#&^7FUwm(RaSN<=-XuZwWsuP6tY2+Wn07 zvqYtE&$);7QP>@i!RSg8_x&@J1(6OYzKTS>^MRizJLCznOIk4gJLAJU4_83-G!F=N z4qXeH!%x7Hp+6gYKhsgzCDc*?M)37ZH+#DA<`awt-r>X^ZEaiIqSOPjy8|K{EORaO z^}YG%*I8w}IS!8!tB3H%j14)(IRV;s4n(YWc5@9BVk^7u@IBnfjdt>K;N0Z4D zZz3n^fI-U%(>YWTaXrn3Zyv>(+-Q_wrVvGOyvD->$ ztbY)0e=78~UKk+bZ#A?E^`|%`ADo)OS|kK+u0K_OQ+}Ju68m;MarUnV=!x}LK^4VX zEYE1mlffZd+z4&BxbU7Fp%l3h8)coj9U)U&GFB;DbP?wn-^eCQ6Q+m?xMO#3ugPLN zBTPJgL*~tJ7I&Xi^m8k?BmH>3TZ4wCfeuoT2Ro=nd)lC4+il(CMGlg98<5td$u_tiDez!&G1%5Z`0#HI3<DCf3Zg``PBY3 zhMX(;ihe5R&@jf};B2TpZ!>S|H-?@d?9~oJDY+hX5b8`8L^>*XIMeV&_LVBX)BpyS z$XpMp9*m|J-Gi{ljY3^D6Aqb&pY+!W!lEl*3(;Nc*VgEi;`}cftd4ndpnuDzF{MO? ziiOGw7HX~UyyxsJgy!yt#!7|Ambdv#usT=7o-x;J50Rk!zv zbUDn1M{<`szzAu0xxH|D~cn*fr~LyX8t&e$C9*$)!p@3j)A(0F`b#2W?^uH zmcB;_fCMtTm=bcB2ST`dnNd=hRqbfjM-7+cT>|mf-m|Y|e92~;6Zuu)uRc6}j}t)r zJ!BT6VM~hUOp55S`w^R5`}0o0sc_!OJ}}P1)-cm`?zOYvA)(~5Fgaw|*}7jn6h#2< zlyg9ytokFT{n~8-|5n#hv&r_mC{C~yu|{P!epy(HmwD{zVkDVj5y==zZFTsFqirpd z)zc<7lq{h>F!y0@!NbW8n~sx`&$Seu@$p*s5Vfk|pdZ4Rn|Lo|agw2pbQIQ)hkJ=^ zXLNFZKb8%i9n%sAuYd2Q-s;|eZhqiVz{M+lff}i*p=MXn{^!FYfauFw4tPy$DYnnz zIeTS?w?`3gWc9oHW(thu8l&skH_n;5yem$L_^N6VZ(~JIO@mDs6>VB#r&G(ubv)wY z&yU!HsO3ik=rt&YqmPl1dD3uW541#X!fBUsaal0p8Ji%2JQ03^2wD}@R;aW7OwuXT zFV5vIE^n|Cwh_c4bPnvZ_6LMki5}cSvCmqA>#oMnvx}#Cx zqKsQe!Ha@GX=!G}Sf(++r#bteC_kneSL_Z_%@Be3H9pwCKG(F64AVGX^~G4NyV!n$ zn0-xc)Mb*oT;i{i7p>EWUNZnY!Z_W&sW{nYPz02v=SBll8@{j~5MPDc!~$^TFh~ro zhPC7vuS_p`AbC3m>}Bd`wFq<=-%Ql&ki6Mvj;9&!#C^S$?Uuf-@?&l)-xgrgVt5f1 zk|N+9y4oClyvYfAiO4XAyo7#tj2xFxF78^Xh;P(CgIA_hPB|A0N9zGnv(M0xYhQ8{ z?iMr~3W)=aQ%)QbGB>T9ss-bU>GMupPM zt7!upw*|-0W%l@W(W|2KxYl#<PO7M8Z<_esnT3*je(vTc)TYc{+f%L^)*tYL0dKsQ)-En5;{3mU~eVfmrw1=tM= zgD&Tf+SW!vu=u$3Nsdu0BpPvH(;C>S_J7L;G~4kuG6Ss1x$(47khjqo>1AbiV77oY ziO1>Y_4tU$rQZDO_*X1tEeX<}YF^UxCtjNI+wH^Y+&<3`1dDeIJtt{To;)q2<6R5F zJ@`y!UwM1jK5C#GT(DW>-Zw>uS{)FQt%j;v;l2|F!x`l&9}0(ArN@X};gK~zKGcs~ zwtYd)njj?st*Y&WQ%<_lo<{xa9`WMI2twk#po}CD&ln)NQUz4p+9%Mv+(x}3#!V%$ z#|2-%-kpm|nU2{Si{@_RdX{iTX~E#N;Qc|>SBVHJBb5D1cvlF<26^Io3A1WAVzvp< zzyx|*!=WHO8##k^E8FSI6GCxCA@M&Oo=R=ET~{?f(EM3oOmU0CFKGAmYIC~w-mR>N zvu{X=nRSPOE&$)YIgi0&=OMd>8;?lZTqMrJ##EktLc>XW1n#|>B{8aC8_z^0Dj78c@lfxq_p^j9wd+C|DfiQU%75srSog^y@?Gw;2?0Gt&U7M++x3(0ryW$v$1+`_4sXC-lkxLTG{3kE> zx9%U2%yj1&pJ$0fDP4;gw&-s%TuGzC$C7v z0B>=<0rd}$CZ=Sgu?gfuXYh*u0ImW|k#`#P6$R+9Q&=kP##>bTgPEsHkfo39ULAD`29N>sP}m(CL)^xK6wn$pC@`)`-y3E&9mQlH#K`?Z-Ta zCT_a(M?kUkP(Qc(RVNc)#mh+M)SrVp%5pkEYh}>`&7X4=wf#VEplH4L5kVXWG~&=| zI|h+jJ;)8Etd{3!ojmkAMj)e=O`#utQj}aVPHPxM`dlI5r}3>YMNmN8Gv(bD!N?c? zEhwuH(1qm?`rsH0q25DVCt;3I9e@5x?qx`#;2YV4kB7H=vZ3<s`0Vp$celKJg;AZ%zQz|D9p5V$+_qzWqLMsq2i=O8CJYUq%za5QI%cgt>1acH4M=Xe1QB81;MWV#&i?F#Q#O=nH)(fzh)bt5J(dM|i;a71S>jAx09 z@c+m<%dn{0wrx`)-H3FjgwmaZG)RlIbayvON~d&4O4k6=3c}D`Ly2^E$G1kkpZCYd zHos?M*1F=1xn>5`9de@3^P&UUx+@UsGK ze)k$z%QBm<_qCVvCMw&Bl(x&uo+h#5wxc{w(V&W{5|iNzSz5>ae+K{q0wQQl!rz8& ztT3DEGTeY6Z}YT&(Q!&sdv4OEQkhN48lhH&OP?uX63vv#o#i@vXm@w2H$PQQXvLw_ z?4x}9Kkqg0$Igw!}MJY07dYG0u?ITS?3=WrR`(bzarEcC?8&;=EcLq4n7^T|$>;c@V*yfU{*_D!n#JLR5 zW8rbK3zP0hWz;`@%OCjiU$%iDLJU9OdBo`LjM>uw%&@5Wp$2d|DMzSD7W)D+dR~_e zMWNj&u6;-86e6abg$P`(I~eh6P{$oj^$7{~Rs3*rWO z$h%y3<15z-oNmh7OMh_x=0r0@?GaIQE{ryxY6gNzCdtT2b?yhStdc?xAvF)VMQ06d4#Hrz)fmdL5?h#JCdMS`NUZ>?5nHqCyfe=bG+Y1 z|3y#YTDZWqRZhW;_0LI0r4WryKycl)bqg*|JaRkAm4-n%)6k*u#eXaS%jN4~58oY! z1{&ed!?N9GF@g?pa{N`U@>{}m?o5+GZLzstWvkc+%qt4*C&Q+E>0zB>=cpcOGgSyi2T@F)q0k&=n0?* zAxQ&CZ}pvV-ywHxe&l!{M5-`=T*k~wUqA}Z+#jRo;-5VEu3Q(^w244p!f0H)t4}*L zX1n~6(Z)l4BqWZa<)5 zCkVd486rNMAvE(eG8BWY(aU9HzTRpglPTandd9BA^zDYVmN<)}Oz{S>ReSIn-{Hs* zr=jM5!2^&E>me=lY%QpFkHKIjv?!k4p?U*)(#8pEeL`qf@$1XWmb5}^D^j+xB9}?N z67e!35^-FFoDuU$sp*3BfCyZf0{X}LRSHfrh{;~oVoeLrxfkNRXx9_`+)Y`#)~U31SPtV<&RPgY!0TGlvRBD zs`Ol}>tfafo3!Tcg!x_#S50|vmrT#$+r7NtJXS>qhy@U;kADDc;U}XCu-|f zoe%l}_vZlUcysnCrC*b2iqbcc8+k^XC1!Qql+p_Q6r1fqKS<*T4H-hN53V%xIj{2% z%$CO}WKNJ-Pm(&@%bO-I7Cj810IbmN{(Sm$J$fE%JXtVbzt7e)kL$36l7jSZD)nd% z??%yYYMLcB{Dv6j^ptf05byOpme<{WD1K5j*EHP~*a>UEZ6y1f506U2+JMsHy;gss z3!<8j_;S6S_$y43WWf<;(vgEY8qIw%cjvh7JEg^fst4X_J<`e`wrTJZyv@Pe>XGrW z+%y9jTOwEtj0jJ1Lzllm+m;RtJ|}X$oXNfH=s1a7^!y#|K3ABUwo&cb{Z?|^Nc}3) zvNKq|wvz2*Tv$ILyjmMm@?MNG_wB18ihSSOeXu&-2)->FJtMm{LtolAHrfr4y!Xc< zXaiXJ+3uel=L!wQi1MjX#u*lX6GrMi3^)n`x(o6xcm1W6&8=_7hAmU;lz8QfE?Dt} zGNO04qf9Vx;v)x%9&9Si@tgH$BA)RT%@ZLjMyQ2y8`^iHK=%Ot*`oX65O~SkCUwL5 z4OX_PQ7X!#Z-MA+2NyeU%p46u#G&|0td6N zyyp2sGr2-Ph##YA9geG2!`Ob{Dg2vC@Ww%?5BlYDmWvjlfQp0$dd`*tV4`tJ6AZej zmGZemZRUS()|p2b%`Xj$Y?A4^C2MjgHvseyMGJbhuoyy9{4Bvp8)W2i;Dj1=zz zVDnRVL1621LLLpz)hi!%2txUkM(JnjvEWs#@3-G@5gYLE!%q3V4;)s4FfgwsdbL0i zA=N8b^+t8Q*2Imcp&c6)N+mP>OkkM6Cm#}qNxsud^NVQa=iu}3`y`KikMPsK(Vi;; z!YrqJwlA|R^m56o*Iun1fLt}tEsbvmB{b+V<@05b7d=QMm1RLDI*ZM@c;qd71G&q( zQbA{+xWrMfJY;&Nj0a0~QnrLU3+Uru`@@jK?0dV|$>`f3CuV8MAX9Igbu8_fM^#eA zj6n=IWY#0hhr6ra?t`y-XLld{f1J>L`C!<&656=9uV;*dy$?rF_V1B?BM-8@@muug za)J*MHxv)VLK3MB{e~R7k}DO0h^E6Ws~)^5OX*MG;dMhQ`J)niySve(430}gbAu9Fh?j~TNa}uwhWiqJ_*@+*+&W3dB$&yh&;9~Qe7v%pyLblx78P^dq;O$ zaPP?&88u=V%XqVHmlw%KdlTii!y^@H>1+VF*QaIOK$qvMupb-ZyQ9w!qP9e?7p9#| z^#3H3bCOgt&K{?mfLByG0ww@e0!F4YguQCp?w4A$l;4|NYsa-}%FCv)1!H%xCkBfE z#B_|9~e+?@W_D({laPbWSah_44#pe)(CedcU1Ynux|)UK9_K_r$y)+H_}tjJUPs-5xD zdXg!1nS{$c$`9~aIfvIQXb#0-zVx%vV7&T)6oC^l?63L_9-e1(5|Ine+?W4{ed{%Y z(0$Z|en-w+RRiE~TD5PL$f%uNvB@N0@E_h931RMa=k3Uxs3jS!!&_!&1u zP9|dbNfqFU{FLR!#lHtZ*M8Pf2sQu$gFO;zzk@)W1r03)YS}(MFHq;)cbltZx`5T~ zmm=ZZ;qlUm1OaQ;QKG{uhBdxRWQpUx9Et`7_LjkHZC3%+-+KeRID`Z#uUekee$mI1 zp+Hts3mMNRr-DA|!cz5rxZZ@qoSQy8#c~dg#PaNKFAP8FUUCv0j;9%wPQuUoHyp)E z73UgQZ6!@#c#%U)InOhrXTq4{{*^LoYePD{OUC{wGI7M$p=Vt)IY7(2v60r>;)p=V zKwIAi5I=$erx++ew6X(GV5dmgQ`R4RQxeT7;CaV3BNk+6Av<+%4xPdWap4?z7DX+) z47id8)_~!!^E3;N_OpD(U+j~L)6&2YL7Uk-u{rM;&W^-c&cBNl2(6wY)LV@ixM9@I z3gT?JBE`K3jH3A-fzX9yj3l6`@y3!Taw&JO`If?cGG1mLnbdA=jF)bc_8J$dWq@Ms zl|D~$Nxw(980G-&)M|zk}=179QYpqKje0(6HQkU zK2bUv_OC9DD_7za_pYSWE({`?{u)D2Jf+{@7>p`+n{)@CPXB>)RrPnR6F>c$=JQ+> z<@T5SvrMSWdz71h)%D^GC~JLSNN0n@im{y>q8n6+=g@vPKHv^mT+iVHXl@wivR!za`}WL3mNwkoEtiXVHZMCUiylv>2JU+Ib%kUg zlRv>OpY8RPzAGOYHdTK|oqR7%nYfasC)BalVSZ+Eq+RV8kl-lfv5ON zbs6BIA-1AI+U1iph$DNr&^V(u!(7c^D0q*VAWIwEq39)L85>VdBOB)aeA&32j?y8= zy+tWYaLV8wurrvgHdfBowhVnSE;xz(VIF5av!h~s32=0EDF4?L1>|H1L1*Cl7sEuG zu-gs;S5{DsKSwT%*^6-%xi-=nhODdvNY(%~rIo`aLI2jXphz%~q9^f}fJq&!JJ*6D z{#ok6lTj;cxjWmjSD6N4-+DhRba7?)U<ng9xpD2i+n?IV5K%l zIW$1jCnfs1;NU?V@(qL7U7n^D7$bgzf=w2Q1mt-tp}PYLt4m;Bt$|&0D}0*$KPQ>d z+(&aID6%k!!^wk$Rb*Yv4__&4%st+U0h3Ckd+EEC=XRkGEjGMn-Ku+Pc+zz4&y1vm z^jt`IKKd+kYzYG#1ZnSRSKY!Bz6={ycea;O#ohzr4#3$XRuLImxF6u{lT5}@SJ$hB ziePvD-V6B%{&_u9ash1@pDZROx#+?!O~jT(pl_ZzoN#g4vs69rh((`~Hm%nPj#G?C zg5CUee4dr#evxY={~M0P*@{N_csNFC!&cdB2!FvqouT8PWWGy|&7c`M^^#oSI0!Eh5?!U7Z!2C^M6^NS?$#y+o zTKO*7dNigxfjL4@n)efb@nAO3fPM41Rt7+@GD1Y zJlkR&iX-ur+AsNf=j8l5ZQ_Rf{npcA@Px9^ocC_!W`WJ@!``EC!Zf#+!#)PiQvE&# ziA2oAH1>29+8Qa*uwgDSd?ByJ0h!P(VB`jv|6V-!9Nr4O(y2vrnq!BS82m&*RA^oTT4DV$F zjn@}fj3B)e6JsM zC0jOkXz|=)*zC7TX+%?uI29&*=5WDLnzm$8oiOzP@MkxiDUj_8IL=+Ttdb>= z$t1^6krUP?Fd?mCDLUwK?VHd5B=lt`>VZj=cc5b^LiBG396=_}h$o zZ*&VaKpKT~x+#>r3)L!5DP7~DNd(4`OAupty^;mjq|?)L5>KUxKZ9e4|0b(_Nbr5m zsUJpvUPiT6O+&?3 zT{f6yq$6xaW;Jc9e?gb8ieO?53Z?diaNO*Ix;A&ZI65n z;C7~3RblS0H$G3LL^%^h;-v0xE~8GTh%h(;>fu{e=QD=O4k=j1K{Qe>Py3vbf0~mV zF5Py91MVvTCtT7faEfnQH!J_;vhS%<%UXg$((I}C;Z^?WCuIS0W5Ir3``DG|d9A29 zehAeaMu97iQm2M`?PVc2f*sPkVQEZ zlul0UOO!onM(dPl%$$P*`mVYA^#jB0LUv-cAn6`yQP1ubfo@Olmn!w^71ZPd|E2i& z2oW3;8I=N+Jb%P29%NUU2OphJ`SbZ3Syj%SqzT@Y8Q%A2Y4x$%73fsWE0h15aWoAU zZ?lzAHi+@NJ62?bRJESS-)?=0wcQ%cWA8wa7$&f>RrDcWHJ-N^UT6l-9JD|W11^1Z z?=zN<@~%Tj7HF;Q`l|E#zl^Sc<$tm!4t%ovQzGd@fsbWM#pV|0(xSR!iu*lVb@v@1 z<9u!t@VeS_898_;RKVtyK{EeamrBwm6qOpYuA=lxUlRhNU(40$5SI<_}5_To@~ zixkV^i74M@0UK66ZVi>@pQ9?(s5TC8UsO$+F399aQsL(dkD-Qkri=K1?*Z(T$9^y1 zhcoy^#G2r`lp>tavcFpNjM;b99JVHIQH67G{cFc52=0|5lZwTIQrucxo(TMrF%10WUp|x zVo{6~oI&1zXPzgLt(;uxUdq`|=@Y_8q`RXZ*swdZu2fsGK@g&Z$;wt2l3*@@^;H&C zc&?)e{F``^=14dEx``wM3sFbHeMZa4PW!kG|o_bS%HN|CKAZ(Wsl-(fDE zeYib5RNZk)uN@LJpd+?VV3o9QPuMM-18ZRsfBJJ^zy?Te<02&4%|=(c4mgGqMQFVo z^GvlLE*d-LKHvYGy`}Uuk_Bn9e|7CZ)j_o-8^@dFKkJXjh7i{1mLi3za?0c?s@{F# zZu-_Q|Du`wy4~l{Zut#&GydB5rWygxv8xpo$plE_&eQm6U3d# zS5RsqU3-Ps^REu(ZJ_o-hwpVA+8X>UhIs6%k?G@pSS8pCc;dH_jq7HqOVw8`fp|R>UtMD`XII_4cg%#hMgE+fLN;bb(@*KS)kR+m+P*zX`~HfmH*uuZ;>1UBcwY#7 z%$R7>P~%hecFM52Z%y=8%I`9g(oD}3IMDck&U7y}HO^KLN`Vl8@5VY-l^_j)s8r0C z7KotiS77L60Tw|EolmOYXPsjv$T3ZFzuzB4Jmh3&22NCO5(LbhGjD=ITeN~Pm;x1a zeSf)pc=7^$veaC_6oq{EEJi6`zh6-H)T(jOz9nX9Xy>ci#9@t`vLHPl8#Khu8JfcS z>GIF^#%Nc!~JMvO{pZw-fNY5jM=)BZddo+jLtw) zn4ESwM`bn3`1afVW#sKrozr0Gj%JOnQL)Bst}^2xA9FfbwJ!(VOCQxnp2k zLDMX<%+#wgt)-B$k3mf?nk#|BKU(_^Gk$P zvjwUC_0y1oe)f!GrM3kf1>!v3E$@e(q`rD7Q%s@@TH`MexClE0rQjR)4L<8P z4x_L(p>M7o_UPE8LmNi^7!Kv~Qx0eJkgT@ZBls(fW2FidIhGJWKqhF2TKo?4Ue$F6 zkg!lC5067xkvmEVwcnGI`)KqQL|5z$lFu^{>>(9(GZKkST39tSlUFjpP2>j#8D+jZLE zD2m*^)DzcHI^ij zw8cmLusNJXi`Tet5U?T&wc5-|uIC!TcYS6llE9LN!>y1Qqtn#QiyfqrDhFAc=Mqqs z0q6Ox+*qPB$&rc+iLW4YMfx}Y;IIvNVrP3H_V^n~aJRciNL886D{uZ2{Ef2Y$U#$B z%z}f%0`GMj!{LI|jYH(Db7%>vW>~Y=_1APVA7Bb^Z}bONokfn%^sa5tyvqe-=4Srp zTX|QUKe-)wz1SW54f?bDby4VzNH1)tVoM*T;HJE7H~qIYVvuO8_&2F83j_YBh>6dw z_*1AlF>77nxU|5~xtN=6w%>&ga3q}>7mVx+cSm=YhuelbwS#g$o?ehJB2N)Qs)k#bUY{oPR*?Uf3V~C2m1|FLE zV_pZm*T6tqOe88(uk8G6BId^L0F>Mo#wW~jnoi5^#K)^{YU;L58VM=Li4d{g-`oCZ z0_dq-yuMM+PCMcI%un-X)x@BfHZGnhT@Rk)$;BATvwxZZqE)C*Rh#Y9l$Hy$<9QTy z|CBj569Rc@tlpX~cU;X|uC#npqM)_Q^j1chFe;VD8g&OyazIHpc%n$D&g9{euYDVb zzRPU-c`d)~2RdD_yvn1U#jYsu{sOx4I~FV$+$f;1^zTp{uETMgx86g~OV5mIGz?eP zgXwDU#de${RIV4L6fxYH1`?+5_=@@~d-EC|RL67*?M0NLmALiezsZ!4Kq1803^Mw2 zg3@@)_{ZOrkJT?Ko4(_(U}|j=`y_(!B;#iS!2_U!pXbez<}~xBv-+c9gCKff*eYh1mzNY?_yNO1buQSPEbFXK_=>EPl?6 z&6{cwj?ywa4d4+zBZ&~3o#vg>>vc0e?Rr*9*siUi(PZDus5AwMdxQoozXI3PLq2iG zef`<}l)VHU*>Enk-Ur z_4C#RFC@jt#C$l@3XsTsx<7n;sKTe4eZGeozYfCASI@9aJOtpG_C8t$R`g}@XZT2h zpm3rrs=V&hw*`f^y1Fw&|4W~3iAC`cy{Br`EjfPUE45qJ8fS>!j07xjyqj;d-ksH7 z)RDhLgtoF@f6&)yVh=wtr6LR<2o@gm*?b4UeUPF4(EV~Unk;Y23nhJkq)6)_^-GBU z*zR884uXa7J?$jK@acVc{g=8Yi1J+KgVjO@trIaK2X75q?wkj7qj&1_o#U~osN3*B zUL=k>ceCm_r>sl)lwX0R2X^}O8Sp#3j zgv1gulou&d?=aPB3(%Cj3KsyiP$e$e_zMN2Xlz)fi;TdJ2)dJVloqTl-Fnqm^mT{j zb|B|*Rdqd9_#~VX9)T?51KWFE^miM8p;b_p=PD{V8dwUE+>U?{UHVB#yWjhkgb7CX z=tG4n1#raQD_k%#Ffm{r!c%kpFt?fW$3#I}F>7aj;72G{GQmJTefj{iV9kAFF!K(I@8;}>@$Dq|xr}{C$qB>047pS6 zqRZ38pm#($F3h&NHx(~QSKuLEvjQHjFZ#;@QvCxeu>(g^_vD++!&PNm3XXGz5+H}^ zrwy)cbFDGij^z)*(gDpQ*+&_XHn6SoKkOkAf{rxRVxFv^4}a9QGOcPRZ>{m{v>NP>v2|A=c#%H_e;xT{!oMH~KOWrbbsH)Z}!eAG&hy_Nw7$kQw# zk4l*G-93eSg>Tu`C3VR@rlA=g`LS6GD8vEy72(2O{<) zEaKKQ6}gIXalN)aqJn>2b^!4t=x9ye1BX$k<%Ki%l#|Z5oN?ZR3Bfy-cT+e0DemEB zuob4a_@owTe_4P=w!P(I-hHcE z$_@zr!FZ4w?#UPL-jKWT@z%0!U!appJvAUb>MGP3pSctqT@8kXa0)n`?kk^Gc33rO_j^>lR1fN941EXVPPi<1EksO-93npi+KHj?DgG)pNR5>>BV zRTK8)(rX=qoGULoa&Va)+up<=Vh*IW?6gC|9}hM;?2`Bx-)tsUHqitd1n2UZ-jT@K%@o z3XdiCYclX=vr*C8iULw14c5_4&xjG$-C4r=b~lC&n~Q^;W%pg}1uvVwL4nX=DxM6i znpXLm$~Up{weTFyQz4@}x~i_ssurRafRv~D1v@23Rv zs+3dfgLt3WlK^rgF`OJ6ofzcnI1np`n%|vo%l>{JZA`V2|C!i#{+XQ+2O7-J(JsBO zIAwr=XkpsuuNiod)gw}mHvb`nFUp?CqN#La0RGvCNZ&Pn(H&~XD_N%!|HfoFMP8Ve zEpJ>XwLz;_VOfcHw^eAk`Ru;?-*Ff${yo6WG-s95tYAW5S`@*I|{ z{dsmJjG2qOKf^?WMEXN~;YC&Jdu>CPXnn7tDgP%@((*%7Nqg&ra-OSljC20ChYla= z%O#NH@b=|QE&i%yYa;_~@py~c1-4&4V1OBNf&vJAlhbkr>u(F&gpF50hP)s!Dk`ck zqXC_m1<*XQ#gp`}UAke+qIC;9{KS{gE~s4>+@C~b(M}W7(e|^^w%i<0)%U z?+q+%nYr@Q1AYtL%YT9^K#%L2{Y)?K!u``ZY z_m+D<6JdMQ8m>ZKbz@LCjmsj25fvcwNmXc7{s>=By##rI5+AMi-s;}AEH?;Cm$5xF zUZ+FlEv$mWzr+Qu4-sT|-&}Y!v=YsatX09^X0z{pZay&^}}MYSksv`-WQrS9%Z^~0H#@Szj&xak?`&+$-5^izwl^3 zzsmZ%zIS-Ivw0Ft@=q>_te2;*)8#rB-_bc_RUTMu+ zZ(78dj1Km$ZlqkJbdT)G;t~zigt=#{_ebbcz(IzM>4D1UB&9p8RBVO5qrambnBwnVsNq}yNA&q+CSaLVB`PV}4m{M8%n6XG6S&WdXm~0gfEw@Y|oGlHc zYFfI+vP8cXFOHOGs(iBX){=r*gMf2N_d8U^**5Hj!w5f9u+d>;lkMsp*5?cyzc|7m+7E4#bOPw8;I7L`eZhwLL?>>A+MIHA54khZ;-ye z40lGZxL)KMI0I6RI^b*`w{Hemb<5-PYZdw+Ub%_sVcdZh0ON+I< z5m+-V1Y=#f^<_8{ye_Vn6@ezjCxs&q0DjRO@a?T=O5VDx9K)sKlq+oi?X zJD@(E^l$fB4KuZo&8N0;$eT<`k$NWcZ5W9T6H5Xnu(@?4gfyDK4k`90=52AhPja3H zgA2+B{nElHy!+VO*YJFBtGal(=W=b3Zv=_ThR2^$)Pw68tBeb^(SJ{a{7Nt zLJZ@)zC*Wd1k5r+RB0Z`6bj!-Q62ld)1`#7p|A?RV=tqvDZX7Oz!xDw>sn>j3V{H1AFx ze~%d~kJ>Py9>w{hM0aw2%={L_Xp)%vjw680T0CgjW?>$SO2xL_nS8N#RyU%i<|6%h*N`01 zgC-OOqf;gL`I=8YG*gMQ7Xb*P zh~v_E`;18V>rdaiQdLpu_ikLdwR-A4~hWM5P|+m&Rk0g4@sxY*Sz+zH+AkrCT<-@5GlLJD!WoP^~zUyC`iBr`tJGy1h1J?1~Qvn^j}BXgg)=) z)zs3u5xPK)C}pxjp?lCrrxVb{q!e8+2Rw9z7JOzF!6AJo`I4C8C0Rzfk}<`NM3YbV zrE%7+X3dYkB*t7l2%1ZZpFoR_7RA1@#~TqV+$H|7=_NH(#Nz7fIG^ilIwQ^t|stbDLx zmC4ZhDSeH(0}>yqF;1^Rn42sy@G>xHM_#hN7m9g;Yl}#r+WuB`>wlr~0klt4)9R=a z^bpN>LNKS#nsAW_aK6VCI2s^CdX|Jdn!IoDsFSBODKrO~kG+5yBY7LqB!|h^$F)ya zKPzW6G=sK=Rd z#2nfy8a6y&b=`D^mKqs9P7rd0<`*nR^*9$7kS#>Vz7!Uq_|K)sjXlX@iD^(dD-yKW`tqu4W2nWG|!z6@hj6W$TRHRs*EC^#x z^UUQ?`V7X1{X+6NZwQzVUr(tU;Xb85)~|IscyNwtm4p;o78&bDC%E+g{7s41g)Jef z{s9+2xix38Ly~zq?(MLD29}$NbhDi!IzdbBsi3798VfD~5>+mTT=$nMNMf@yvOBN8 z;E}MhXiAk68{J?@RQ8WLtCRE218{GvRDJg}z;DJcl#aIfbqQAtk)7M-v<}%nAbhR| z4UVYkVR>WIjyRPGQmE{Evj;%p+c2fwh)!VD0KpEhgjsD4t4N7}Qt7nUOieIo@`X*_ zngDjqhP0zUS@P3(P1qtva*x3Q69C+4;b z`}$too&}!qnqC$qc8UMmHj;oXhEj)W^|s_oEciH#?EQ4kWfr-9NTpRaRB!ac-+uRREnh zvpq`l&IcePT*>-Y$M4@8|G9-=XDd)ronH|3{p4g5B>pHJI865~)76p5BF8IbzkWjb z;=C$g@r#o0O;LVGE7Prt4Y&4tCg2A@(Yyl?i?F%N%S%J?g#fBiKa_$5ESo?vk3h{q zL!($gE`P7AI$U*kN~y&V+?Y)TcVC82{hZzf$@x_Mfl8EeY^Bdr{BtUc_v7h^7(hQ; z>S0hyH(h>wxU8sd>LUR~ww#55!vcFY6NRc3 zKSX8HVAAvw*AJ_6LPH1%FRJl84P3{hFDBJhbiBNpM}FoSB!06lWgA&hd!P8{asw`u zTopiI)9iP{@OuNm_(#GGbAHRT#8m@B&2?doIJ+;DzJ{tyZWOAL-{~`VduaM~)sqx4 zfK%@NJeA;*9K{zmC`E7vSM@6_kU(G(AqsJbf9*oEPtAFh70^*?d7`j?2T8m) zHH-AOf8*@Dr`mAB0NQ?z&|^lgoS@CFw-&#K^Yzm+wv!K;0ZU#NWi`LcLEQo;EODz> zVOR0l6OuV1LB%L~N3oVCF~-YF(+ZCdelI28qT8Ar^+h=Ed^}7iKZ>F0D+bVL`T;*M zd3Du5gD*qqR9puW`%W%~NnwJozwh`V6u61b8*gK7fj5SY;QV=DvQ$n`5L@gj4lp8k zwzI;`D+5=^EtY)DLeqacQblvXjq{cPpwk;NT)l^ZM1aX0R%*1}-K@_QrIj_k6aj`S^BX&dEZ2GJrZGmD_aWft3+G+C zU2@Lx8#%r=r6M=QGIsszsj#ukO}GBBxoo?V;y42<(!;m^;SU2~OZnlG_<|SJC^pV> zVasZ^lD8`!-rGH?vp`M30+{}8tgYpY6+e!_lwhtfihqt4i)C&1Me8EE2euV1VJeKn zDXRrls!Q&$@_XP+?!j=FU$2^k9#ViBgq(K{G&XZ`d_7?;K@*rRl?r9|Gi9u5IBFu ztGKqW{j2X0gJNg{f70Rpo@(F$j~MtsMQ`^^GHh!jgoc;q#;E1i=HB%(ydnSq)nvD` z00`m}O8q3H=*vIpgR)eh#w|VDgmP~gazMvw_v$;WZCF(Xc zMe!?>qr!P6j`4k(>?V_rbfCLC9PS-~anx(!lSm9l@uWn(^WU)#CfLGvaY{GmzuJjE z5Lx!oHmg<5J^y?00=EpXPwkNK9?JGB-rE5y`Ai;ZG`hR=rvN)UYwcaIZ`qsP&Hfif z^9DW#W2WW%#JC;2cD_bt!2?1%56f)Kc(>#gv^u~))V?ZoM7r&VrTYnb++b0+Z-p1C9 z!t2q-dg%^?0a^v!Tw@_2%O)o1g`0TXlQrA+l;gB;XXn*596M!BP27WKL9LaX+>9QN zU-H~yCod*(-GV!Ebl)0Lj$HL+d)-*ISlqa_tb=v^j)J{&-!$5iCcMxo|HQBH?@-PG zQT^(;SsUt60{ANA@HDcXnwpx;>cBLz<1H{$`iIH&Gn#Z0SBf7>5CvbA;>`mD-E4le zynh;q_k=-(5zc(*JN17V+AC!=E1)L#i*Qpcnn${15$VH-Dw^6Vfbf;=dm`5YU>Wx+ zeGb6XAD-$ao>T%1y2wGcq&4|3Q;|4PCuT^#FTdyAbA}9kdrvRLHqP4J48W|0WhmW} zlmNpxEnPpivSbF|Ae1=Qh>Lgj=!&0xR&#&K`G*FIMMs|B)K~Q z$Xh)V26<&ZNPDI0NH{@At5RS404nYM%9ca$_T{35!`&?=si12KTY1TmpL}vvxLq0H z{r|CNP>|lq01xNgGR-t>g;c!`+^(Zfj}h=#5(e@yZ_xGZ{bl3*1$1Ou*F%Jq-!e{6 z08>;tWtiECk#10}FHQ#YdT5smxQajio!(*qDfN=Q^zHa1CAY6mi^P7zpa&Uyt) za8~Smk>S9Zce3?XcHwf_XC#pz`?gnXmg<^+FkPywSwd7^63N9*V%)zb)H#Hn!;zYr z?hr(*p8h<1^o1dauZeG~;XFlm?v)IsS%%$%$#SI{7v58BidDBYw~0N*qTd(~a^23} z`o72Vt59vpTw>jD`(UHb^pRL%ZsE%hT~XNkO8|9K7jXW`_IdECvKjsj5k1eIl=1fS zE8Gpwg5^eket>8U(7X3*4gP(B5OkL>`GT1REWNWrH^JUfH|?=EiW)Y5@I^)!xDSQK z6a+3O?bJLu2S_sYJK~aUZco zj{^01%_2pP*9=A8yT{XfrbawgAMJT9iFEiRSfoDyH;}Fu`(qz6NA>HDbc72er6lXP z)yFv@Y&hn!viqFvpHz+JcSMMV0d^>l*oM9V`IPLcDQv@7%0iV7-c%n zQVN^%MA9UST?&&5#XA3qGX2ENjmW&lu6~7N|BW{}_#p9C>-qx8)1j`3E#}+%HXiDp zIGIF~>}B|i+Rr>bDIzaV;SE#Iar9*#@*ctiQT~2h<*4Q>x1G%@s1Ru4^pM8W>Ts}V zTLx-JtIhca=@n9Ddx-RHi*wvb@;^ih@6fHiT=Tv&4)j|T?6oTBTfw5^CWObu`SaOQ zMj&{f_x+vvZtjP)@N_e@*w+|jX)zMCRwKSA5Jq0F6H{18NqAkJI2i6T*2j>1>KU^G z+mxT)g@#Tz6#?^TvjnYHMBj4J+)cAma~ulS&3JF(r1lnEh8uEXp4V{R2$Pm-r0;f4 z?*G^lv1uDHhWvCdL;d$b>zs{Z5DY!tn%`hDCQ-NjXi!UpW{Hl4+p* zvbhqo&pO3UDX)2H^=1ns{rAhnk?_*ski?1tO|bc1hZa)@w_=%;zq}D3a+i0rt7tm| z(rCcz?pG;2a^9~10cR`qJ+pf58JplY$}PR`XjHc&e4CGj8^JUJvE(#^0xIqy>x*!64IxOUKL%6|*A@)=P+ksSqf~?|WyJc49f8Q*w zhMT)6QImqZPSDPbN%S=6sVxgq7vKT&4)^C<<{#oA^-4?_ocXQ9 z+f1|c!))p1&HTR@jL!J&z8TGgoH6SSkM!B!17zjGft0x`lb8msVg4WBId`aR?vr5l zCM=geA_7916EaDGT^V|NB%1m(`NFv!-KSs8+WnUfDSeNE0E%)ih4&WqEuh?F>!|L0 zuC(+P~yt+oDJKDoLmqwSUjaN*1$&XF4gy;eU9#7p$sO-n^i z0rbvg5_5Kjun^aPdW{CHg@80PS@Pv~#OKMwOz^LZ%5bbq7t*NgpT=h%GRL{}pZSnI zcRn@Fn1i8C0qc!&GpgX$`ufR}mqskRAII(mo|732o7^3K9cAreb~&7=9O>(?$2%+W zJZRn&PS0G%P8rO!9pS4Ackay-qXD)p@Ts0gGTklb;k2VdfJg=6u6KQb$c`KdC%S${ z#w1zu>c@Uq?{e<}0!u9*CFeXxtBMiB*e66?-&Y;8`1ci52#b<%`E1h8uZPq|ha@Li z0YpVcSnHYx)Ni6#*G{SplZhg*WbWOUHxwU@BHOpqh}o0)sP~a38cWLAlb&j2dLxN` zj(30`uY4)^*jhIXc6#1@Dx>RQ7acBdZY0g1wo*WAC``&pg7a%+;dp@oqlhDV4bNADM}a`TH|RwSi51SjJPfiwBS6 zn3uV&{ZbtNOPQo-|LW>{-EXd?c8&XvFe4K?z}WeSeNZVn+TIu6z_AEP?Y|c(j^v#V zH_^@0h_)Vu>=3AwfDYeidhP79dfdA|zgty@E%q=wuBH~R%syiM*&x5B>q{2%jhfMj zIX9bfeKsO7%Xy@>PW5JRwNiXW59u?iZzm$7PC_!k@@TbEK4AO_&*%ZRRPD6(;T1%A6%dBp zxyf5?Ppt~lR5$CXk1NuH1A%x^7X-(@+S7SwXEWlHN5NWHgLG94!e@ip2x7bq6~}@| zHjNNauw+p=J+c}JbHHk5jZP!Px*0>&jZ^ELWbj5-b|94dlqeZ6X$YfM>Ts=sBQ~ge z{8WZ(I&0Q)+%|tw$j%MefG8zf)8gCd3>ak$=pk6xYWiEQw+E@6E|UD< zX4bnk7MGo$S+v!q^2^7=!n6lNBFapd4`B0PR?RGgj;UZTtRuoY9rzydc#v)Q*bxJH z&!Wx*hgf_avUHt0Bx}c`_#0V=Ao#5Whh@1wYDjz$r!_-8vtFm|L#1#vP<`*>m_~Kv zH@9d_WoVg7olg=d2)b&nv+ys-RtansKv?FL{Dd?p7(rWT%<^g$sxreSN=(6T+B1z*hs zQ9z*(7gcNkEGKJVJLx(EOs@d|c?J80G7fCLjbeaEl#NAQ@!w*lgfIZr=BLYidhJUf zqftQ?Srn1PiWv~qR^#&VdSl~a>sV+N`Cay<+SZDr@pf|&gdf(T5A0-3z019$&e7uW zkGG@D7Kr_>zD4opf_;8rjX6hJ6sDigrxRHDHUq#Yr2_KKm%oNsw5TPzs3RJFxytS( z)}?S2^FYU@WtLRhPg*`$L{aeeOn?7QzhWYEie+RZ0Rwxqeut^Z)1k<_VSG1w<+mL> zfYtZzm;8%$Rp&41h#usm7O;_SsA=(Gi64FnnWcwqm&06-zIZ3}6esV|U-1@EKK zUw(h&_cZ?ucDqt&npS_SLGV(AOzD!I-+1!dm+it;5JFMG8J2 zXgu&THOl+p8K!na+HBX;(_@?a#b_a0Dr{#5ecqy)n~SUmwa4Y}-x=_Onk?J9G}ZzN zLxu#B^Sj#EiYEK_yvaQSRL3VGDc)S=-Pmex{m~bI03m)YSm@5Z8}aPpW~Yo>c5|}F z5P8bDL)>V(Kw>$^@A@==id-Z%jgE4r9(?{%&*!8;5SW5puB7o^)@gjGZQdsW7bv8@ zN^tFYkFWs&9;BO971;P3;e?^^A@W0zq@<*4FTUA~MM1hLFd20vjBZ%0Y?MtyK<5p% zt^0wI*ZBf>ZdGA>SSzUUmp4Z*z9-CbFreExka0Z}FXT?66i??uPgYiK%%MxMe|f77 z-Cy|MnZ|@b*x381K=?@{4t<5Y`9ddSkhWCa?2{VmW_UKdCH(tewOz^Wmz^60&G?;Pg6aBh_Sypx9zcjpEa1_9a+J+j1BG_KIP@2#{Q|ZF+Ehp5<#A_(HJL z*J{2B)YWX`<>k%jYp!ht?R|AAnqW97mnK&Er_ji zXiAA0Gq~k8KrHfDygwUKIuUR-TC$oTaRu6=c>s#nqQguXJ+l!%eW^AknUy-#ko4lel*E6nt~JJ4bWLVV#rF;jQq#45MCu8T*V4i3sjQ|q;Q zHz=fV4*X+T=6iP__%$aRqG7-QKmQwRp;+1K9L8bB4+}drMmw<}DI8UlcL|BNS;hFX zT6paM3-Z>jtr|DOuVXN_ysa>6WVeF3kHC-;etgHiLR~7}Y{g50u#Lpy@xL@Ol>yW# zKg{x(B*=>3^Ylf)$nXnv$6jAk*(I<%a233#)_MEK1-O6Nu{2CX37pEz8=eifq|%_c z5*!lE6d^QVHbnkSasKcnC;{f7l%5%PSua4en{VNLNkN%*Zi_x&hBIEzw`$c+Ad=xt z=`Ub~*U7hx!9U;HjrWHFz?X(cx&tTF>Tsz}vwlMv0%&3HX_tX5NbD8?l+4tW7EaD( z%NF^r=r=cbR$<{jc+0@jjPz8q*I_td$-HZB;L)Fz896|F<4TO{ds}V+IecE)6>J~5 zga~8DI9SWjPm`TQl>R%=KWIj#)OGI!&55Na?i1|fhJ zON$*QfiLV@lJ0*0sdgO1j}LQso1%^TGnp_J%EOVA{%`e7fv&JJKUiENNBgq%d`#|= zUjo#6dux@H9&6FyfsR~U9HT=B< z<9-ZHIqVdJo9dbkr*`gwhv4qx+)rp=RPB4MtG|@!ocG>h2UuJSMBZ~q1ney5;R&xq5?X9 zc@Xx|isXl%cc(~5+I!@6_|YZ;E+SqJC}^H<6z>!WfPa+{7JRkKuJzBp09>Z$=7fzq z)Js+|wYoTCRUb)$uojGp#vetwTQz3=k3?jcx_eQl)_~QaK|IZ}IZNwx4mLLS%}RQS zRpKEHy7#xT%aY~HGWb_u$4QUViA2y_=wAxJ^EZFmbEg(Cbt@vyS9BUy_ovsq-TvV=LdyWGP|PlhD1Q zdRt2IUO?afHRo&1cOKv7-LN!fX)!2{J_AjDNmVBo0sBPmfHW!BobPoIsV2F^G-t^? zbcRcqs;OX1`AnH1A(+=uNxb!%J`ex9jB`96(dGwkmaWY&5WEL%Mb zwz3qA3>D6?!t(|@9tMdu4AMjPK#?aIH^KKTe$i(UwVe4jkI$GON7)T7H*4KU~BPBSv{iXWivJMi^y) zKD_-PZe+9mwu9_eydf`~^X;Kq+n&mXG^tOGP4h{wZH$u#4nuF89%cAX1 zV9cn683ipcOURbHM)=-`6ltWys0ZKl1GBvrIQ{kxFhPf1DyiMUj=K4@4J=_fMkI=H zN>2h4`rr_4g19o+n3Hc`VCs|XJpyOeDs50CHqUt*d6b?PAVc&>P4RWb+1@q zKs9rGB0SXUCGptWt=cVwBRfzT^?#2B&nEyk-&xbi(QyG!7;vK!(6~v`vE2bBd_3jR z`1-r5Cxb*#B-18}&am^Et0C8%!OKkjg8S)ZsDG+PjNK3p%a5jlB^!<>&T*mZWAQwL zH(C~MBOkJrK?ma6=m;A&+hg%i1<3G)6~}2d&bNt?TttS_kGIpz2~XF3!mwwMxPuM2 zsD*Q3=iJsc{ZcJ?LDgt;Q4dAk$uGW6Pfly0?q=uZbyE)5H63v2R2hFNFwlx>ez+Gp zZfZaJD0_uTwyY_8oNB10u}8%PG3jAA9Su^1_KXK|{Zd}J(Pxn~cxZ8dwbnVz!P$)@ z6$Z{hwJt@(^Tze%UE>^ zLX=ba%uZ)p#%I#Q!z!9zMJTCHHzE>ZX>-m(j|j8T1P4;C`OPn{Im(xa#B%Fs1UNJG zF=K(Suoc;neOYi^v@vI^xqUMLYQzjsC4Kpmjg|kPp&gTp81Bs2z?e@CZ(@9TTWJCQ z_^#{yLj=9w+A#OQJwWmX(3^{J$HsyoN05EUsyq0Q9U8lqM=uAPC=vvQ-fa!2Y4E9G zgmDA)`3ZH|+9we}#w+ASf%gyWLHwc~@L4hg)*^q~S^CjTQNIbV=})|Qz*Ko5_Lt)Z z?NRXHIQj2kF&PAc#OJlqGaIGJ1GpJ{EDK%Z9Hzj;*6VvDFMCiB*V^OVL07cUIhOq- zuvHXPG>F-A)CpfttFo6}RW?jq6M4%6ZOdw5JeXjL437ZX!QVme;;=qDvbDuj;u}B} zJZGKP?}t^_c^4#b;`7gKI~jbUf6YnAaSWi*Z@hl?}=leTDX2Vx~?&j1ltXr7JF zQXg2)c~GEC9S9=qH>=V(E#jUPzA~gIbl>tAU}*fnWfuDr&Vc3|4|4RE`?>c#X5J!t z_lzSlV=~l9^smEWzo#Z$uSFN2*1}((4v9e>P2xiASwa^CnV;*|*=OYN9wg{@)d;Hl zd1Zz`kd3$J!Cd0!b__7jIM67inPc`URRB!aC8tD=Qbc^9ahSj#V}|BLJoungWDz2G z!5!hyv^0^RerUX486Dqrl`hi%RE_u3^$7~~_za&_-@kwXv4at7P-`N$lg;^#^bypp zdOnYd^le>J+9iYNBCi@NV2P}qCa@%XiLBfxT!aYWpA&Ar4kI2tKJqPDO{$#ryEmXE z?>g}6%M94>(dp=RVBE$+qHc*NqYm}e@38_!%vb0f;;`+T?dosH^9y79o!l^UfOQ0e zNQU*M!RCvMX;E6e3iE929BCb1$FJj3*{m}29|QH#oo_PE-uKo}bcB2oQuj*-{{%U5 z4Ofi5=-nmvL|eA4Pxm|Ys0AQybMBQkTRXA0+BGy^F9Q0b@$~hqZ zG_%z*r>PL@_#>&c9geS(WlS0EZ3Y?yQ{xk{O5NjgPUFYE z`~T!L{lrqNBT68_lR-LAq9a2n-sHsMBDb)jfM_W-x7(|Jer4;rT=KFbv@Ht8h0IPKR_n~Y;f2xNBAe{MXpET}20^r%{j{ZX#S~Cr^O}cW4x41}f=K?QuMe6RCt{6#C znN3d1h)Mtsn53o#!=E4jEKHUEbdnHA6>T&>j(Wjjr_XykQIblwS2$HUE8H3-R?RR8WQDKaU`}g7=^TF zG3NtqPI$&Y;@|)19KIGtW(WKtt5*#CeSp>i?m;wwRE`$7G<#;&THl;*Jf_1_c$_EO z3;$QR3rYhO8n|*YLz2t@9{Qw_GCM5<*wn}dFFFzeK5N0CsSY?&>s+a*8U^mf3Apgx z!4AYe*{`3cKm8p}IP(XXI|z8T=0d5g$n}xMg9Wcj6fy*6A79&LFtKRaMoOhcq{69_LjkCd;3sQ-+G`eASX#)07M;!l3OWf>Mewk3{+t6!*l-Ppf-Ly>hH*M?$rwT z$o0#%IM8$ni36W3?R1hWCk^$jb2o0}HMImSP;vJH0N&gKJmh^|KvV^+vV@&rUjh^? zj(^5r0qd{OKMH*i1p*WUA|&aV9?Pw1>@eU%4Qg8P9s&qqjgeSFazS>wB}obWrgJjC>f8$W*h zXa%HRtc}dlU6P2MR|3@Ezm>OI6h7Kk;!&3#x@h>jWjw_UtA)+kn*V@*5Xc!8h`q7F z1<2_0Z#6p!rZi`_LRiqM#<1t1S}e22X5`Egq!P^A0__@l|KI=@;;&q($g1aY?B%kb z9|JwTqeC;|+HhW8p0@3Wve$7gd%m4D@r#x!+!!k@V4_o^5)Qc0b(D(IStAa(mKXG+ zNcy1tS+1L2!h?rsp_+g&Y8FvW-UIt2{Vz_WqqVPd$Nw9Bct!#7Bg3dz@UuuKIy|f^ zYwbMZ#wg98Id1EWWWpXcHtzgRfkG8!FOjYA^&=WZsg=--`dyhikNUaL>pww=Vx$iK zpCVyY;|)IrF$M3LSsNgu8AjdKMIy4B7yt#UO(!8bha5ox?$l2p`l%-7!PyeEHNXU4 zlxkgDMC`Jz;tK5;|Fljc>|l`8TpfESC`h@OLWtk7K$YEWlqOh9g?;fB%`2sY2FAR- zu&V}N%){2V)#rXx`ZARRTvL$g)9YAW-LjOT9i)Nh0K(l%?({$h)5S5s$VI>V;>!3t z+9`^NHP}L9Y{LP^bJ)VZEHDT=zZ)Id(N{`54a7ug08}H&{HyhAHkmC~Tm%op5vCnA zEia=cm)L!%|D?td?tdTEraa2Eqca%EW_O~9%Vv)A&T|zKK8ROcS7(h&5*9Yc+E$Fy z!zs71p*DEB<4!-*;RKKz{s(4f)3)d;ghypl4-DXkh6jGgBa;kFaJ?7Sv@w|LD7$dr zehGY4ct@!Ov#m`EGw+}y9|+Ylf$)WOK;9tg^;*1P*tUs@$2|sMbM}e(Y zsQ*@F+iZ|PB1J9*9{bb30Y;LB9)8_mu=*Q0s1RE!zS`Ktq#@`c7vOR*H?BbP1G342 zxYW6=-kCFKFlQBDtY$Or<-{e;f{bcXF~7f&D=x-g_?H1xdzPlc3Mv-_3*8LX^V;Xh zZQ#}A#JJMz%EfeD+{P>P-c&})*NZ%OuYwmFLvE?^(4W+zHk$_WQ)lwt6nKbqQ4`u( zzs94gLeF7Pn@dPa$RVe|F49D#gh1ta_i24mM=zWCS~sl1r0gN=gfPw87w#HCZPnQ5 z1vsKa-s@sRL!fju_3Y6k*#f<@GHUtht79hCphc#W&fKq6ukH-U|H&Y7WCC4Ym$Y+D z@L?k5m|3gDx;Ze8z9h&eF{x=s_$^{mh7Zx^L5aeipH~yv*%yg@7RDA8jYqIkkF|nFNx$;_W{HK2ae<h@%}D|F#T;8S&dR2k zq#VE(5%a1mD_gSStz%toz5ONE`X}Dj0eMv4!8=Su|GW zT}(gT`}>*EIRcK;qCKEWX(1^_xDnP3V#sl%TvUj*yg<0^~fPl)mAS;Ifuc3h0R=Ew|!@%&?8Ad-SyJa@6Yd-X%)XFj~EXmVY0kZw8-M6&72 zeE12gPbR~qULmb-O8rqgtayR+^Sn;!*<-+?w-vBD82FK&-^;G7l>9;Ib%vQR?j;B1 zEg@M{HL7MNGS5IkdIX>6dTi)H2?wZx1()fgVEU%Z5T<2&OF7X4Rra3=cnfe4x4fy-*Vd@CuU7f5w%BNpn3Hr26h_{J?CLkwU?_UQIc`rv)Mdmlco-H2Wk=)fO8(m2g^ z>=UbeZZrfsdy*uqJ|Eue(4$_OOmD;S0;Rg*@)lUAIaCq8Bzojae0=xB(QTsZ|By{t zZU`f?PA%Wvl*FZRfvl?l+2LP+*$eN06 z@vW;i=U5lXz~v`Un0;J}uFE7(X)dgvaRRI_NVFQ2mj;vWoU@z3;*n1wf%N<)Ns{|^BRA&TOb)TCik94B2kUg&cf0ajvKB)a@HqB z@dK2Tz9F{_<>35XcC7MY*oE|O*hpNQKhg$zv$(Ir9P+3bIb}boFP;T8h;OKz<@~J` z1IgHCSgmN>%ig&(&d40~)X&qy8a2vM$HvXk(2P8|GbR!2TV(0qOup3)De}()Jb0VC zqqPAS@TPLQIsG-ik!`;r~K$d|Qw zOb4U)r6^*rCtqJ~Xz0x`)h!s-EqjEPMnl*z3^8~U+HTd>O?z(jO{o5@b2Dg0GJGe` zq$e?eEc7zmpWlLYSDX_s(pAdisO?=|K+eK5%;KS4K1i%CJPB6$2pY!PrW-xEY14d3-&?JJ5^ts8a8u1 zd#y0XO)nhZO;>2^SRuUynQ%OjX4^Jb*^PQvsRT8a4R3SjLP<{E6fyzNWZvbct(?y- zq07&SZ5H0}xE)3!nZrB)su(uOJ2UW#akygVZQ~b_dNq%yGa*x-8=uI=vj9tnHV!7F zJ*U-9n0|%FFok6Ho+XbX-8@}`_cF<_ON4CWd?ebEj zV|OHdzqIw4@C^o3SaX*3TAT*LMg$2B8Z1Q&T(JF|={xkF(xjeW;TR)`c*hPnnC&dv zuUTbgV?lry+}2u;zsYxL4kKkSj(v|;;^C`y{vXLL3>c+gEJpIUOgatCdqLQS(xUIR zegFZ`^}uC%c1=mZHV78ACNA#fI$QJvo8%>D$rfFNHer-E-0dHb5yc1tG)0nDIgvIT zuq>Csf;=qzk%8Rf*cu&m`YTJ-*^yi7d~6$_VD48M9rOv`#!7?SNmP-Sc6ND)xNL_= zaS%2>sW$PU{XTTtzL2r7b^<4AHxtpw)-tO}t`NZ;cZW^je8u!#DEF}tb0zrbTH*It zy_Y_%^|2p?A4$0|_o=yfj&FhO<%kaW?1NE{A@aRuRZjOK>x~pYFgvwA4k3KOqiH}0 z%T$pkE>9zf`fI?!aO|1{k~eoioY_WC#ji2=h1R%we*17%oczq7^?G4(vCG}pOJ__^ zZSTh$v&;V6=(*CmMN2)OhaX5AL*xksU9Ova5!7I563={4QBUpv#t;8|ZQ%+TFWjmq zX2?&9WD-nli->a0RG7j>RBARh-R{EYtP&jQ?ts4X8Yn3~bl*f~nFQ5&ks)6}{X$G7mB4$zMLrmzo;xg?BDjXj-t3Bxt*-mAZRX95fi zl5|~XO)ht>o+=EHSG1yUEksyegd}oO&SgTmZ*FXg(%Mzky9 z&x=;^)hr15v}c?-$UHSA76)TcCs^mOiByGpjD#uR74RxTn=|QB#+gBqhwf8bfiOq{ z8c#rXv9i@!!;pxbCm-W|!^J?OQKqTf0n>xZM=GMqCG9_K6sHCN(msIa)t zG3ne2adtGtCJ9!ANJF`G0^;k^cJ`?m0T3;0!);GadY{Tip=6&uwL&~ zY5gu6%nkslh??k;Y6{{=%91Qoi5QMA0()zodYOhGLhD@1vggXwPl|Uc1EJID<=MLeIg1sIA z0lOa!XoAMm@4X`RM43I`zXe37F1jq7Kh?>AjQVchM_%v}`v|7|eF3k~GbRT-ANlNn zXX3%oXC7^C7B~`1Pfap$lW!UF^%!Ac5*A*j$G}JorPF0|M_GD!8|2YjWax~CA>#;H z$+uF;cm5_yynqGrjktg32ZB?54bhchF+}tzlT-AM9Ru++^MI8wDPb5VCWCs(F&2gV zT0SJCaveu|1Q#~UJJidsQCATZSv#uNzi^Uo_8uXYAsUav*ZKMSNExGi07SZGE!Z1B?)v+S6E zwtMm@0Z(dXjxRq()WH1-_CC+8avQ2MkioE^@l+JyvQjXVXt&ax$|8yRr+kkeNHv*Y zsRw&RBqk@{9oBmodz{h7x3!QG=*{h}y@Gj>o(FvEX!Nj2i0H}equBTfMPO|*MYaNV zn1PLmFcmrguw6d^Wo5)vfEZjpl(vD@FMhcB+I0j?c;yH$*a2s=dhnd}btmdCOzUqR-W$>(ftREpjMX)-JqVi84R%>194ZI=k+Ct&9NZ+92U0fqAn`9|5uOA^I4(cokLNSzh_h`cpBWrgR7u z0WHc(rC_?P&2hrzvxoq~@yT$3z<7{-`vBrOqZeRWwl6RPqvw0`ZELzL zkVj^o3>k|Ad?vSTM1FzTb0R|{pec?%bi?1@Jc%{HyRsJdN=~3<@p<3w)xKnS)Z!er zE&oF-1NpsXa_)OskMg(N2bx^2tk|e~(E(I7v2+>WG~V&D`u#ff4{9c}c*Z|kTcaiy zEp{wD3JA;BIyEzkD}@TCPdICmf6wEnu%4@@k9?x(5x@ugg`U-w8VO&?$>WHfh|Ohm z>*IR88mfas#6>U~8&HV1lMu39_>S7|xq5sn=JD%o8At-!^OHyks(T5l4~uRHDg)$0 z_={Xq-Y_$ivEX%F9Kc-8TOR9k+IkyM75wb$>%Id7M{ zXkL?94d@^j7wLSbp=$yp9)Z(j+u+FO@AI^UCJp6tx_0aRrg{Ec%U|7}o)w+v0sn1A4#BwZ!2*K%5Ksk9FD6SEVd==q zNTCXwR9kn^QvhjZvIGsX4Me9zTmaA4LRa?maC8vGe^e1s;~afoUidwt$df9eFMG@x z{`b8N3jn5;cw`m;m?;1rg3mm{G)Gx6)MjDEfy;M+=WZ62|9T5QEZ@MuP2YGS!g``Z z&kdeW?^_VlMJ4e0^(e@)n^`9F%f9(xh#ea5 zOiO8IC!()&+Uva_P&oV{`e5v^B*unAYq@z}6-FTj5XDLv^;#E}JolKIc6Wjz+ik65P6DT&hQY(oM=s(4hc;m8;cP!oK=gy~19!tKx0CYf&iNH&!Nrms;Siv#Y$ zIK5usRqdjb|3&AoE4Eds*Paxnz19e0S`NGs`gxq#cd2+r@XT?2Yia zSU8Q8(gl%2E4uB;d)M9GD#u)W9~9((XTRlxcw*aL?+ct>rq@1q!DY6V&3TBvkuq$~)s4{02h!}H9$X|4&4~a$Xw=_uovyqxlqAIp zGm0OCHh3-`!D{wkzmRbo;^|h;&*9Z{t5`Na>D>D6I?An8-I%VeE4{RhYuUkUuIJHE zut0NaoR1>L8k+B}EZ9mb_2~VKlp1hTW&j9wbY%P#u-te7!8c&h-|!U%j)l;WH{JhD zyyA~fH0jn|T#FND951od%9UpvL$fG{+Bob)YyR@aJU@y^M{jHgjY1T>7!q4eh4MJ_ zk)XA!Y`*u#9WDzJ@m-a~os%N8F$UCj?D_pwHn8xM1B2(^s;kQaU~D-EDkMlod=+RG zdits!xuk0Xj;C{)XO&u;k@f)Qgfnqi;(GHyK7++l$0fWspy1Y`M`uikD$_MZ%-ztn z(-;pVg4coeJ+P=CCo-_?Iw@E}xAk()ifi+jtrn|D9TpjHMUdgEZ$FfDg-=xh3F7n; z_AkwkO`2Dela=)XNoze-q@|RQpCrhpj=~O~B)-2+m(!!H7@XR*(#YQfaBbV_kP%c$ zVEMX`M$e)4c2#G8e25?5*1MT*Or@%atNCSOL_XYXD=sCGN1ZzLAlE-jfjxQu98$Tj zQcI;bU%<9f!>6-gEYhEu3Izfz++euOyyH6SS@tG_Q(a{6e!W~nE1)cku4=k*tQaqrQ>yTj@MSx|NVu5PxEr+~ZDLx` z1}_NB%DExBRUR_nn7%|b%Fc6%ixeqY##nqBP_O1&Hl`R!UIZY>*-k(gy=?$V^rERTDqMSD*xl*$i)4F!gjxdy?oBE4^SPV7Uja9h-1RQj!)7JHc z@|ECl&k6NRO|xGzp%8HkotBuh2cnSCZlW}a&rDgvCEs0JwD9Fd^VKX~XY+=&@-7mJ zE^@SgH#hR$Ef>=9u`{`&2XZ?#<;`dZ%v5U3hS^uZH3O{{WC> z3nW|0ZP7!v$ouOmE}qy}y3#~>;C*4%wFKZ~fGEqrx7r6KKg-$vNf|Q=f%R7jSB~Fy zj(<0nBeG<`l4%YDPpGRwk+R!Cs)rqoBl934uC&h#e1B1X`NVwVcbR!}))Jc*`vVI) z=qrhY*c|eL209u)-v__jv`Bbkg44!K?=gvgIB>by;-wIo;@>1~t-`8TdS$lqT}2SgI5OHaJMi7N#Gf|qlALkNF>wN*$$>W@N-tJG4mlv= zALPOQAnRk3E}{=lhZ)`!2Z4t^e=24NHdTD zWYfVG($n2$?)^%N0WltZ_>x1;RuR-~0Icj_=`R0n^9FAwzS9uBiw;kf)9joH#;NsI zEMqfDv-DtVz02HDYW1jj9OSwRgF7P%_cR9Mm|r(!t>89ZGQnW=xmIVYK&Hnl`HFQ9 zfxF_h3QwQejydbE)AF|au@8O^E=_K|K9`&Xk+3L4#*?onnajMoUUoY#J*90ufNzYM z|2g;Nn(l9CBZA|m-f%%y`bs-L(dZ2CddGhPiUZ^COzFk&=j;&qdIO@)3c3oVgil)b zcwfC@g{c5h@<3h3fmgLV6$(D>VAiaHkEb8XIEg>}KKI)HoO*spOd|VD{H?|zHhVKb zv#H>VI{+oNUVgYbQ-A}woOCmtzO)sgVHSvy&eu1;nt{kCuc4-@YB)_~zw_N0| zKz!_rOi$g}!2x$&J~JRk+ETZNx>`zEX{=Bqv-bq#9}fA%bEFcDnnz){ltgHq6zpro)=hbpa-5?CbHy%g*RG#IY) z2X!}O84FybzdTIdefu1=5LI3a@~Zm$@qkTx8Z6*~k`u4x>(d>}oY|d1+$A9N#`goRb&soRNV6uywGstu4C zc-ffTYpQ+qD|lz*PZ&^we-3~Ajr%KwYS&i1^;EMBv1Siz(SoK%ebHybh-7io6I0ji zp;!}IVuOft$XLNan%hVheK2pOh^qmkxOrgAAeu22qB3{`1JfHIfd593aL8*jI|m5+ zSSm}y-0H>3APB*|5%-P+@g4bZffEb>*c)h^j^?58x?L~#;Y#yLCQe7js}T203|p`k zu2%WmGa#_4ZpFk^t_8Qlof)5l;O?&Gdy=6O!`bL5i~tFWe-i-3WD4k8`7;)H+Vbr* zC8VH?f04%5YQU_K1BrC~zNEEmDa5)W`v4~PzD7;y2L}KCi@q!vDAIRLxzeH0QDPi9 zo5QAai2&Gi-nI?c4f7q4EHkpe zL6T>j)xZQAkxF!23RxX#`W$e~@q5SOL&5TZVF3VOe>)^%DP!Bift}5L{Rx+KwSl^h zE>cIdg{8hx2gjPLwYk1BBo0vFohfvBeL=xNDGViAcp`ELb!D)bK_iO;r}Iw(F3(1n zmrX}fIm4Agk{9-1wPr*}9ATt0hgRgj!vP6>;%Bh|Y5O^O=v!bbznP3sP!7?_lfD`w z&4D}0xnr@T{yf~iofs#1r%0X#MLH_F!sUFCLP&VbO;I-FupR9dQ>OJ#T*%`7oeXiq zy%fTz?Akw{3GvVn^glfp0!FbA9OeqM43FN!);n9TgJJIbZuZ!mZzL|?{(hzrw`YDLze^DV zMgR$oNC6L&A{mUmYmcdh6<>h!W}w>jOs-#T%jLp2u~pf8AUsitFK0&8xRfcpeAs-Z_^c^YT3-kcMWC+5Ofgt& zRjjLQXD9psd~7anwitgyhO@UEacM^YxYy?&N_fqvlq*1;pCbo^#t2dH3Gk_2?wN|w z+DWiNcrCI8CXWu4P@-(kBDrB4KE0JX<7gyZ4&a=r!v6N{k^;8!VH}F%;Hdn55lTEo zx!l|3Qg=7FdioExR|LBC6@b}VewoFE8{jMXVoAr+lIlX%K2Pu$0=gJzcz|2JHYnD~ zX)Thw^5;IIl~^9u_z!!1Dk&K@StbQBkG4h|=gNQY{U<=Q&eLFSR*UU>QYXu};uAH4&Kr|tlPowb4%J{RTr~ff55b&Fv1#+^2gSmSM(1oclu}_FRcS0-TodGxeeD5I zf+_ca4O{IH;0WA$)pDc-HC0?Hip5)tBnod)k@y1l7vESpYt{?w$#>fQyXHX6BY)P*aq|z->D2OGix!%!a@>6ew^b0@Hg_C0?=b^f4Cp%N!xT#Roi$cO z-7$t0;SDPa0f{Kc5&dYqgZNsl-Zzf(z{KI%`-((C5hGpY2APCR8gU)vB8)bacF5cj zaYNpMCR^aq4Tq4{a!xUllK4) zVPH1+HLjvG9@Zxhp8pVHzr@J|T)Jv%QXh!EhQzSWA+ z^ADgKO3dU%Bm?x-&R#&~Z}^W4Ufoo9$r>O%=R(P3C_Nk zH`lq*`+&^Y53i$C+Z&G?^=KI#=G=On59+47gtdI4QqdgR%{e)pl6KKV(p{Y&5is|G zhOq{NQp$bl^lij^Tx9b)U4N>WN*cy}O?7{gny*yHd)`5fEy6Eu^-pRlXhiL2)la^b z&$Jb|t)G>CZFf-{xxR#iBlD2hT^+U_Pi~jG;X^mOWWRIlGocay$JYIt07+yWy*%Eo zLUu)v0!c}TjK;c3qpI<_Xze6F(*h-K5K{pSbo9aK>ea4LFJH%!ebDQx*u?mt`_!aihK$#d^HOF>$Yu#CUDU^DVQ90pX}`oLs6|tXck1 z1bXS%0J|Up)X0?E(&#+P?)5lpX7eoUeXZtK8G(g56<#Az$gy-HuhNaY(ReoP@ThehQ4(gWNCsr%Q|=Pj>ACWy5cR7GmizXr-1DH zHk(n2y-4Ldjkk@teeX9GLU?&+Uu*q`5AlV*p2&ya20IERp9l*KC8s7s@@8InXMlf4 zYGgy6@$Ud$_65dztwF=mpA475vD4IS`u;J4R7Na^g@mdg7tQK?Q31>sGN7K5L&Y4}^^X`4Y9Uh=nZ- z4lc2TS{sg>{@L~pQOhlWvIMklwKPwsxOex(EKIm4ge5wt#zU-*W-QqP>f72%zYFfT z5Rqj6t=Ho|CauJDSx+eB@D+{ zfyYd`OjyYhx1%qm}#7gZL4{ebm$ zAoeGo&rcce&FV5c>xy4FhC`C!4Z+KdRpde36>=;s6VK?=y5R5V1{nb|4q$OqO^hK6 z1xqXVHR95Kg=tNX;fJ00chKf#Rk+YFCo!iX7aeygEwnRdu~+Aqc&Tj&vSD>5XW3H*h*?Nq|oUSy?B*u@wxBJKg%6&>!iT_B!ZR81%!eF>%Pc2yJ~#rc5{ zjm8uvLIK5T=9Per#uUw#hf*7W%n?D4%`_cq14somq1UoV#aUIw3bJ#Hb z!R^M-J|7EN1>oG1y@4O$)ki>uBL28SWiPvx9CZnJtnMeMDOP^Mq|r7o$S%iB+b5FH z`N5gf#5JYym+=Y+uy8pVp@RtE{k%V@?H7wRqA5C&Zzd%q%oJq$T0UE#NQGtc4lB?Y;Y5 zPXOH93JN!Let&y3p!`l|#jD@qv{gTea82|v>58q#VQKzDpZWPUu;M(3l_sg=b=sT( zR&}QD65q+Z>lQeTT>#L)Q-aG*8IjZ-u!rdkV=8|Kw~eX(`!$Eu-yi-DV{a8!h4TFm z)2Xze(jX&03!b5hkY_j#GdP7}q~?`bEa)R0O<89XTIssi^T|eAd!fcHnwL?@aq2y5@+g z)ng(b2Pug+U})`7Hg`&D`3qp)UQM>l0GmT=R!S+JH&uzfu9AvMOy632P19M!$Rt<& z3TNL&^}1=Z^IWv9>k4P`Bi7A6DHd{R`n@-05K$fjpzYN+Kt>jKh5JOGeNP5a+#zBl zx*dMx5f|CL2Hh(HO1qT0-Z2WN$^>z=V;3+_1Zv{>-KLy&5KtV`plzi{eqP1vTh$5V z&H7t*pS}W>tiW5?;AGQL&L}S3pb%T=ekNkAZaQC>rIk;!fT=pmNF@&> zg-VFJk~h3`;Q8mOqs#l?{*dJt8L6(Xp9!>*jIMkke{yqqqV)`hWiQUl>s3-j5=p_W zA_!8W|DyCNw|7dY)2_wBNa9G8(4)LcS3xdxfuLiO_{H$qytB?)jbOWF#%`l#Axr7u zru|t?wh3f!&4;J{;vNVRA=ykITE3H;#s_>F0Fpe1!*0%{AQQJO!G9Wjk@P?4$|4N~ zU-7|2afvJv=)E(Ex(3se3wqQ7J;JVPAikw)Yg^8@?7+#kq&Zd|5Hw1?k(c^^?&e`n*B-CkCgbhxM?t?AWCL44Bep5Re+p6_fS;$*vVrFhq0aVPIrS1W6QI?RpYo7 zu3+tAh~Dm)3g7x!Yb-q6kEIF#{F|;VU)?2Yxd^o6cF6ngV=M6Zd+Wa5DpKs^-ALJ& z3@)St@3VrX+o7w~&sp5mpj~uh+j5@nedk)E##3vl8brl&06)Pcgh}Hj=#i8EU&q7_ zC<3L;{m!i<@~y?s$Zl=V=Zh$gKoP>kLbQ(_Ys=6TB;(b~X!*`|#ey3_T}B_dR#|BCwT=dz;Mp6O=GtXsfc0tB5Z8 ze0Elf;&vofr)StAA<3peqwLh-g3Dfaz>XbgnlS{$gBB?e08my_tFxoagxqSI6njHX zu5m3E;~32)|LqJ@s44a%) zGhfXjsf<}HW&{X&{Zk2Q&7SHYSj?H2m{rNnT{n7951#-Fa(C@J;14qc?Dw|M7!T~v zQi7XnT*(7^?b0|}P(36{@fQn6M*c%ty7|FKB^d>tp~B>}!cx9nq*8;Z#!>0EX%VQT zK`?^)F?2uxVGoE5l!3QBgnE4QBLJz_OS5FAjQdpF9sS!VZ5NBHd<=W;jgJ7m ziM3ljrN>0DugchnOWT3)qpa>l&vUJobK{?1q2~^phHaIrf*wMN8-lKjm7v?jbb|dK z)>b@29w%d7I9c>hrKwK^mQTa&J|ZV>^SCx_!~_O=apcLML#>_xbXzJ!?>04ADJ12O z^39?DQ?&%xqyE6R%)LqTQ@T9GmtB{0MrlVxIvyhc`_5_LWfa;%vdR8UHS+}ouTw;D zRV>@ZW&eE1l&-TxY4jZvD=WF;3I`A)7$L^y=B67Pgc@$l^eR#V((q7Cs`JA1XzKu~ z2a<+-gWot4^U{9PmbztLKy99&10F#iBZV7#SNH}*3UXAmYw_ycH;qTz!3;LXQF4KD z){d6ptOl$h0It3W466-b?-gLw-g;oZFxyxPD7gXd{8KF>>6aL`cle%Uq@=tl_WyFC zPC0#5y#`z&t^{`WzHX=YBq%Hh?P#emBkagh@Q(w2E_Uf59HtWQlW7};i)Iu#D2#*$ zvoM6QboalEWxfvVV9E4IEfgXC8{k^iaf1o_8K^2=JWshy%9TqsgUK@isHnj!*AE|l z^&4NSlYWaV8BCcV=r$kr5zb7}w@`M9FQ!-1Tb$qJ<1`(8#&_IHZMoS^tY)AkfH15w zEnNa>Uy2(0WzU7WCzpdQ({u7t8!P*AAU>gXQ$Tk~ct~D5JeHf_rz;S- z=)`v#ksz7|yR$67Serhq)K1LjwjVp`I@E@BV20X8dtfH;XMhcuxfzQU3mGK_-7>RhB+V$9S5EBAPV&}*zTm%?pDk5u zt`%mHH%6$(CswtJPHk7{qdzj5z}Vz?9M3~?l8Q=&M$~7EldXcixTG4(wL5wKlimxs z9z8vtwI!WD#r&*wOB1vT1^v*TSM9kit&e*>dbkilL*+=B2wx?9UAL00{7G7=*r6nb z-Dzc}$wH%RTFgB_IaC=A#Mdc6>W!?9#UJ&(W}jNtih5Y>s;@Wk9plgdyZH}) zSBS%fz!JM^5>{oXw~a2CegG)(8fCh^xo-{RU*s4lhT!O4#Xb;^o%DZ=iE{E$&N*jK z*X^ri&HO|J&$bEQ*_44L0NbjHnZM$xiB%w5&GCgDpzf8gJNI&3bgQyaCoY zViZ+p0eY2BeGe5@V@s<=d8qpsVwGO7iq}k1#Oi>o%xN{pJ!?0>j2rjC+_ZPPucYsP znMyz&PTmsGIfnyCW^wS6+*Y6oI@Mq+=F_~cOoiY%ZItMZ-xtd;!Y4j&TgbGGNek^= zyW*YwIQDjT$sg+sp5L2SKfo5JSJFnqlnz~26G-3Xw*DOFlKtG_0UdlR#}|jY67EtS zG0HZ&cS)3110*R2VB(_kkEDJ1zY(wS&e1BiATHl+W0d^=T%N0{TrTwkhb~eWpxf(u zc5!CE;b31&XYAb=MXbHgi|;yW56c$*wmyZiaZNtK^%8Z7uG8i!NN0KgJYL$nfS`vw zU)?teqU~!A6BA4Po0dJkNF}luV38ZZIJV()md?b0+3vkBu&rLIkO_BGY$ku(!|in! z(czUZz|t9M1nf0-Ip95bi&DyP=w7l@Jz)?T~G|=ru4?Ca{P-f z7XXYTt8ZGF^gx!A^@<`5z!%eRYh@YQ>1Pg85{3!$v5s{+5Z>VQPjAXcdE5hO>z|)2 zKW!R{?-=YpV#BO{n<#mf)gtiP$8oK$_sJ1GQpP8j7u_APxKPb*kvKctwhnrZ_2TSUjuJ%$AgRSMq`s^H_(S z&gro`&5MIi9p*$@I5rbyJg)c03vcB+d{Qo?G{&SCwEQy$ATPDb z%F24~o_5aXE;_3H8(svTTS};9wmeohrl+E00`}PSb-@PI6~754INyS9Z4DaK|p%_ zhLR{=wvS4VInH1?0!S$XolQUUjzIzW6T)}zalMgj?ShD!-RGJf#G5Ug7S4ZK~nJ>k1ZODG-jHfo$nAI#E6m4~oejG&#S)>92n#yb&PBmHI&Pyo}G> z%c~ii@T`Hcw8|bL*i*3dWkXDSNOq{TRe!S}Ou7g~vQkgufcEqGt7C?o|EX{~$oUM( z3JNiNniN4A{Ir?+$@pb@v4b>^PK8HZ(`9Lm1#ea#x%hTmdpkmKNF0E^4Ot1+02EVT zyB=GDYKje8wnD%8`fth4*|O9+RXB21MoHKrq5G#_4~OBpH=bM?u7*X+oD`oLjKRPWqpR;gw_%CUuFR~+k@jA*s-37TFNX<>A z{|tMU`*_eqJv1C>9QTltzbsEcYO5@)d?2voCoD%CFdO}74?A=@g|jvOa_ex<;^xBE zX;UxTvR6{9xTN6e!&~O~pCVK*4X+->UErCRQ@Xw98O3~g;fK2_d*5?p2eUKagPy*w z*59(LVUKCTrEiXPeD!xYv#A4GH0PyP6Td=*Bk?orN%t~FFO5{JBrO0cZU&}S!iTGW zsTV|MFWbjl-&3~yu=dx5Ud7&th*~{a|5;gBQr{0V5j-uBt~q`G>RB7){eOQiOcqs| z-a0Z=5H#yljS(DVRX26ty~;(Dk&1;-XP5Lx72fPtLj1<;IO+q%2ue%JUlsMV2NyFH zDPf|<(KxuDasAh{p&Dj^$EaqB6+;??bS|z|Nca_hr_6J0Nbpu;ADIc=_caSJk}p{7;x5 z0q{ikwDfE=_V=QWFUO@q=@iebb{Z~lH)X&H>>BpS?>*+7J2p+NIyN{0?F0*X$iO1N4!Q}F~_hs=vY?_A@?=uOKu|sje^ans5n#LrJAqheft|Gc0nAP za{MNN`GmmR%A)&#!139CL)d53V3^bQTsD^x@Y8%CG^7$3s}AElQ3By1r4-a^fL< zLI2AeEuaS`aJ^gU#D&z6pmW<$suTcUowOg8WsTFx@WPIG5jDpng3dhTLz&T<3r=s{ zL!HbvpLFZ$X`{2`G5H#U2*GaR>vF$YM!4O}5)Iv!@reoD;h_gpOub4A{j6$rG_$T! zn9%S%)(IV2Hw74=JBI?=Uko^{Fr!I$L{v$;1nSa8fT=1pOfCHv8jt`|*~Rh1hYb zv?;T^;e?uY|DCoJ6Af|G)ME)Uswn@acFXDD7hX3m@(mTMLrzti;>$6_aF->0A+G&T z>V|xKc@|{YxL7*d8Am2S)3PuC(NQ^DN*{d`>Tv{303^JGX&84__PWO6lFgc5|2M~Y zCaSPGDecVfO^?4P5|pgzVATtyh=90y%7YNrouvxVjLJmHjoVV0ic5kXc)O$X2s!($ zzHY&fvYvw2$FF(@izcw+qnSPb+q@^m*ClYp7q<)jkwnm;*e|0z#XfZNYrh_VIqs}k z)t|<;TQC(`hCkb={5oV|C03qzz(bxj$S0_-&x+0|rDFVA!+)}$A4>3(k&)3e28ivW zmC!f=*-=q?p>EXEK_og1=$hDUfa?;^kimEAu7`;5kAEKMyQ!c~94DfGVZD!XG*kb0 z=v?6(l`^18SA^X-C472moId@t=4QkS2vZ74Dk?_((tR=8ZItt9#Tg0yv8u{{gGOPb z8F1Pg1)g8YB8e|);AUjM-H1_Cw;T|5@cw?%XSY~oT7BO+*-QVU6NrAl>nNX`O7^F%=F3K zJqg@sQJ(Y;0uq0?xg%WaH+Xd~lV$6l^Lw*pNJCuL&9N2F8g?r_r#em~RWAx&t2-%I zW3xeS>x3hK4Dd0|$4{w`GcE<|d2`}>IEy_@46Lkvpu1i1GUH0S zAyiQqGCcF-*hUbia7BATRoMJNSZJke#Ocm;W7b}RHXXB2@KgU3nUVqGN zM0{`VkrEX9yb&w3ETy!d;Mfr&cx}PAo|tX9LvCpqrT0!n5fksGKz?GXSa1^sp%Hu9 zM$w-vG^v+PC%j&-LmXfj7rTC6q=bt-*~D#K3gcRE>Byl(GnnwNyxoM^47wE;6?85Y zZW_X8HkMSE$j{Zx`=~U4k+rli!tK^&vd@L14Al|{^gEK^KZE&vHN~wy)Z`et?r*is zq+Rd(r$qf$)>70%Mh=Ys+68cJ0%r82h#wvIMtg4Y9EAUdOlf)qhZ2ShHWgRu(Kn4p zSLU3?5E6Hw#jv+i+T6}2vnH*C+oAMBh-X{2p}qYR3f6vK@5lI^k_HHDs(1}CN>;-_ zQjXK67fAB*!}|Yb~)ar{LrFml8M0o(HHbVQ-!DUeU3BVVRugIJd-$* zU0ha%qo^6Y{+wR83WqBAu@)9;h*lPKY%}L?)#D36FQZe&chh@`?Fy`q-X`&O!NlCb z&>-*^g?fD^uK#0wqUB%H3s;}BAyw=an!0IrGsKi!*AaaCCSml8z-P`9u5-%h0k>T4 zYZ?fWdY~QcGNaf`^G!RIc%-o^4bmYk6QekbYfj_qHr+#S&u!D|^!rQl>&cc4HLTI9 zHBpjWh5fBS?qRy)*s+pW#U~rQ?N z9PtQBq{i>u+WXUIYTXX9mv&hXTTTO^(eTv|a%vhUwEM=hNiCeTq}`*(F=>Hp$5+Q*~}t zX5ueTpC&C}|HxZ_w=EDL1tSPuEl^(S5Sh(LBGtpv&^|Q331DbCg?+HFB#!jOQR3ng zrc+RjrW19@w=_7pUa9j?`BX&F#m<{2NBMP04TS2osQ(+(04$J*fRff|sZLE<-DvEf zt_QH=&F(J`5wGueQ!!oQx>CFE`}zdvDCZOrF!Xn*)r<2eYIoGrs;Bm!XHj7EmQ-La z6jF@?>P!(;eAW`O1atZG6~kY}GUUbbg~}2IvFcrzGk&@s(4b zNpN<-dJS<-KH##4aGgNB7q)!!W(z7X3JcoWgM6qnJ>(zSQau;9J6;{ECgpRg4Yyw( zEN9qAGY@(|7S=^hIVh?dr_davVSL+dm+v2rV=Oitl!7^tqq{^EfOd={en>EgHie*( z36+pIJK5O~RVb}U6L6b3Bb`l^P76{Ctr}fk`C%ITywpJvni}V>^+#c22Ixw;&L(Z4 z;RbVprpyR!!3p?gt7Lq1__sFaPIspV?k+Elt6fH@_zqeiVm)*ZKf6uT=h;c3D=Mh; zRDDR95&1hJN+}k9o|bx0tYa+{h}^X*FA%bk$J0=Wq8b$YA(l_ZS9Jle;^S5xsuN?C zZl*#rX;klggL4f`6tg?ctN!=S?4$&3?)OjQWTyG;4ojR95?K2-%W~EDW6RV-)1Sf! zH+DM#t8{^IzP?x6rX)Y0>?pLEf5RK=^0~a-&SPQo+QQNV;Q(vlxumk1#%i5esNuDVS3`|E@bS z^QGAPTuUQB_p{;oqA|&CFIt;D*^|NE&?-_>u}-4dSW59&d&QySQLQqL4V$QFST)v3 z26n1kg|=Vu7`(63JPb?t2z^=TT3OQ^95$7XN-Ijbug>@WKyhBj(DFnMzY2zi5oXcR z^OXXH)yCe~zlaJJs^O|~vLxeQhd&fq!pgKNjl$<&-P5{X<>wX=UOqH7(s1NpQhAD+ zLKExlNon_`c?P}AXtg`sU+D4yfLW|ElTVN`=;n6ux1`P9HP2RAaXGW>$M|tlTV8A` zLIO>B@gZv!1*+4T?zhRiJ;4k0XU3E2oQ-`0 zID0V>z2uTuiZ3>rW&VAd6(Ol7t8_(hG$pDOs~fI%r*FOZO~1LHWy7earl_H^<5BHz zVwZk$Sr&2byGxP9PmExOd{gNDd)p9yNN|?cV95(45v#*Al3K6O87e^zs;ld=uuTa$ z^X3)H**OdG(8bc0v#(m`Cp)`cLN{$c-+k0YM&+wDVcy}Au%m4rx~4wlQt|}x3c7`>EhLd zqLnXgqI`WmB#i9cM%78bxC%_zPaWZiiQh?L19JXVOQT?~h4&z`8kYm-wxUj91CkmK zzZ^MXNPx99GU!=BaoSw&_JjHA7nR0QFUDjoc88H4xO_#rRXjSH<1g}`-n}xFn$eQS zA%!ftO~RXnRcxFgs1|vI1a_ht96>ORHFa~-oC-)ihTHbJF$%4grT6m)J|I9?Ndj@R zQ27Ti9Fr>1wJ4Wms_^wmO9EO+A($HI+ulwF4M#A!+higpn@hb{uCHH*@bxr{au1|A zrgv#!<7&PB6EG;e(00ANYQ8{StoUkdG-k#Fku>?rF-uF|fG+7X26&cU0?AWuazVk7uxC8Sh4s0UA5r=Azj|&3Xjb4m%E>uQ)MXa zZn_kWXUxnJLvAMeZKo;WWqGdXf1}p|(?8*p&m`r__AFqmx9cTI_L>te07k zi=y?ITv5Z#1HNX0KHI9oNqTBpjJYtR(t>;^$Fz~ zbNN5Png~H~kKgmY=Z$H%yr5R{Gp~xm6c{iN0bcNst%7Ytue4f0rq`tHcp5xhfOv~F ztRWReEoXyk9~Lk$I2fyth89@j4q~-QDx5^)#ChnnfCn%8pvNn|SIv`QY9_^oVUG|n z@!7sMI;i9u8XNMp7-B4}NgqJ98l0wq@PP58wtI1$-b*ozWdfhe8;7)?;kY9#StLDs z=5I&T30IsNf)wPU;+Uqf7+6@U4Vpc}Zg+Eqe#FS}_B}Qv6W=?b<9jPJLbH@;hvR3) zgSX>wxZ>_ncOdSCQf3MM)-%9yu0>v|YdIm4x|RFdM!rz>Cy+nG^WTVRuM}dof=LE2_p{UBnvmUB?0cuUga94Y@S^z`#H&URN`NjS#vB zhwK~HOaX9O#3@S96rP0^J~&97F4-Ks(6&EF>7LXHEBW4sar?FIg>e}-C0`&xJD0_j zE==u}S)+Q;?L1;|IE$W4{EO1#jm3`=g`WYKTh#SMBA7SFlfmqaUF|of(Wxc5-(XK3 zp>SQb6+Xnf{aSgjQIkL1W?2FmRY_?vINSiW+z;T}JM)#pd~SoHOe4hQiAns~jcrKTUvGNi9s)e&6CWCHv`PCMPb}b8 zHDA4{%m>ceW};-{2Y-m^A$$Fkk!e^4r;vno8tp|coHAxSRuXwAy0)JlGKtUk3I}k5 z3L2x40JW~Wr$3I-a%=Sa*#s~*m0&O(5!Fjcm6V)`#=SR+Rv^PwLfm;YGd7%)qf)93 zL9iO{jpDq|x#R>HyC)G*WsNR#?n8RsJ&}XBnu->2DbNQD^s^-BHK&O8K5RpE>LGQm zB|_!omVOVO7{>(T=iic;aeqe-qyO0kPV|fF6TtX4y6iG9@#B4^&lG_ipYki7b$^>bSqh_c^A0y>YPK7J}Ue=~oCBa__}mXEA=&ApWYZ z?4DY1F&cFXboxku#NdUhxI)ZjRaIxdF$2`{mI&K(9%9xYmkK}2&4Y9r#B}GhQ)ls) zX>X0?MtTD4Tc?#g{JnTUvI5iuC)@#xT!lPnR+@;$vu-mf4`bu>1OAE0rAH4=ZD=Kq zBKFR9pab(o=ostZO#@*I`kk^Tz0Vl+thvz7?hjX1N2;|ZHP^Uxa%9YX5A0%N)0zVy z`wKUq*GBLK9IIdWy?dmO+N@DyRgH*g`cjL_I3kr}`H!#XHQ#0miqL%W)gKTrUU;iu zmSW?)wu*xhh}hOlNjicjk6+7Wei4L1RR>?t(eyCLN0?Tp1HOW&3{cj~D76P*4&e~YWLE%S8mqq^{?9Q|H(ON21_DvDU+)@%~5 z1BSz%ZlNC{ycrd*E+MPN)1GNZF^B|39Rz|hI2?CZ#D$j2rCx?G_YGp4nP$(1!b#1! z7))1`-%W^ic}oAlHXJD7)1A`9k6D;9keXi2dK{57#%6S7&EolX(tYuh^XBBe2^%fQ zFL2@_aackM8}P%jIW)Hm5By2X@u#Fe|X-=;DrY}j2|I-S0dbtNO z!bkpza!%;97(F&*vQ$T?ChsDIpx^rPJE`kh)S-*KvnUTwH1ST-I|uYHj5}sx0@UZ{ zXiy8{Q9L?o>M>5Qiax7)*JkDh=cL)l-zl@3ZSt5@kgVW!XBmeB1>=8!w^QT@9w^t( z1W-NbP04i-&=+eCkuz_>Rpd>AYxaCB5pfq4ml@L$!FO*IKr)6ODPWZw#?vLLddNOL zRld=lR-)8J`c%RPMY7LTP}nu`p8}T6*TrhnS;Dyc{A;=9Ix{rRukCE zFo~$j|AB@8-l^s7)o+&mc(0#rE1&r3(h~^qFFl})x{rn&i)fT}rYBG`8?AN3W4-U{ z!XFE^TitZA?y9=PqWWL1t!wMl`7BK7AQUB#oGurkPo|lZoavJme|oHqOnzK5QS#$H z?M~=yq=#JN+;6{nb%1pL@q}eOro_p&{IP3H%^sM0j&KSt+6)V`p~jF;{HBS9J1qEM zbC7}wd)YnGQ`DgO*mcQ~WTpNmPdZOm)hhR3`0Pxv$g;sA*}~_gWv|4?zf-#fD~;e% z88d7?`;~0a)mEmig#pXQ5iS1OFXQDpfc0@8E>k{#fDkCph215u(8n7 zmw^^x70;)c4=Ru<04)xhz?3E4=6)PWi;DU*I!X_9o_)jjaIE{P--$H4lejf8Wd~O) zEy78MX8R=B`>s+T_{k^dg{E<6z@E4|4#)YE(_6vKjM-6BSaAFE!Sex?EE2u=ydPR8 zDZGR169(-d(=}5{rtOf<{N-Kxm+BE)YcY2}S?bpCV6ptW7=evo;pQMp2&u+tELEz? z&3hOx!q)^pIA?P-r3`rJ5fle|49ByR&qqtn%Z)i<<0ft-UvtzN6|FZrUOQkSZf5T_V{ zfgMlrCIIC40bYhKZo7UOfGzs5Ykp28cFR}R^#whX2M!mEbAIaJJydCRc{%ZLL_2J^ zprpi3naOnP5UcBD7_ISf2!aFOKQaCA8P400t~YtV2NRrT#ae5^8ZVRrX6?6)yia&l zDy3>X{Ri-GlEqxK-{IVYNWI%fmtF-Bi!-TATfjiN=Y zr`*FisX{-yBgw7(Q6Acjti$b4CDO!7wUB)?`lg|VzRluC(~exWT3B3(fh7C>y|P~B zjL^)y^P**;w#$MRH|d_>)oD%a=@XNXi0Z$LBp;d@*f~>WgNFt}&T zazwh`OsUPfE-9f+X?}h+NEOo^*g_UH3(X&$g^>pGe+;>s&t`k0@@D^s-OYkMolR&8 zu5o?2DZe1J*h=DzxOJh!hp|Xi;RO2dN)oh1{+7Oo(Qz1&aGD4}m!mh1#pQd)pYv&9 z?S^z@LykUy8;6dj)FM>)1_zwv6`JvG?5~M^`PNTdk0M1fQ!*F;o-tR2he$}XTtCpA z^KARqz{BS!b$!zI%^t3uvhYqHB>~uf;vtss@J{Mh*jNu}h>cmUp;I$+vF>K2@W4@K z^1B5-auD7sOh=z>!kO{rNL1`q^Q*#fyE*Dfh4#<1lvM79$rhFrhZM<=$q>H3*MR@_ z^X~(g0-+cWZHA$EKaccJ-Sidd-LfJC>n%O9ACFhXi99YprlQu5V0w&fd-Vq`!;Gvg z?JRW{`iwxr?zux2m7>(RpDZ>(~8e;tHU@Rd7d$D#Q_aShz4JwaYpW*71`029#t)jo^tBo&kZ9OV zrm~E-U~n=89I&g1I<_EUyw3fXEcnkz4nwns5usevhYXq@{M>jbmkf8!F*ts8+%^=7 zMqJ^yk6i6I%gOh9@xH@IHr=WtlH7`CS`DY0dd&WbYo}@L7S6;YMKZ?k1s=h|`ndn> zC@o>LTpjTu+wlsyzbFqSr$T2J$j#Mn%F32^rz?w{4;H{#Q$C;j*1}0`?;pG=2TzVo zbcECIN^Id?Mh0D9n_?N%h(*z#dg@q9`*`MrTxB%XT#~C>itRCBW#-$ zJSsp`Z$K5jyux0n@rXw!x?Y3(((~Q31)E>)yVgH}7yKIy>mod3cA2k6bKvn+z_3tW zx_uo*Qq8zaq1cO-6X85CP?P$dhO^AZ=XPT}AHsT?;g3=eVLCSm%6~dGTxn;|9JqqQ ztG?akrWx_PSGmG+2C3h^B#Zj@Pn=bsew?wd5M8PK8MLC#m{-Qv3 zYX_x3-g%LIS(kVX6rC;JSOLJ`?fmnB0f_DIIxIu69ZJx1+$d%L5BTo^6M8CT8{q@T zI8~g2w7DQ`bY*;&MEv2)uQ03bkmaPq!oh(9quJ1!=?iv9)edNqc3_j6HI$_`{j%8A zsjuujZgBL^rMW8S#-@(=)ArN#Mn?*#*1?_FaMKno9tx=%(nk7|aEQ>LrysiwDG@li z+mg9@-0kGqE$k-IOv8@Jq9&5>(Z??iwL^pLa?DHaLf!&*2XyFM!sjsW`ImECc7eeO{P)UcAKR~p z$DwEfbWW&^wJOhzWX4Bz$bGTNJ#We@3EaTrV(-LK1NSZ2r&I-GOnK3|=W+kVt6W?g z%VxQTuPlEEyl>Hv#!@c{sr&tVvxJ`kL|f1agOJly`Pu4p>AtE2Ure2qg`rdQNM-=j2co^f9A?D6ut{e1@b1M1dHE3eJj1lcbiJTTHf za%)CJWri|mR@dnV$0C33d_>x%af4g7{R!UrPW$!sQyb%_&R1Jbcb6Npy;0e7!h(Tw zva!h2>HgMOY1EHXmVBfzsu>g~Kb3{I5r?jA9g>$?=Q;0jOibc1oo~NX5NQyImqD&w z-`JQ1YIPy?w=Do=fTz*0&l;aj?6fmlwjX0|=~>Lkm)1~65Nm8d`@8wyZx5E&bj_(v z4lZ{~Jz=*AG=gpPz`B zksn5E4>sZ89&o%C7kM8W*N|sd&5@$RGfUy3h-36o2$h?v5^=mZ6b)J>dsPtKcf=z7RP+%P)?EsjI&%5@Jp6#H9l3XKWb zELxnZOTG&>-X_@BRFw)>th)K6-hM;w4-&b}57}wXwkNYPR6<}(R1POk7>SHJezd$a z(q-gKa}%i90RzFM6RqWE5W)b6xIxzS5gpFYE3tA8HVTr8uoR}kLP>G9jtw9uI4W1hDj`-!7;46Ed-q4cW<_by};0uK2!?Bg+rQFisA~UGXTNkB^VCN*228gn_afi0-bf zZw-sZ62f)SAS7!DX(DE~#C%gqLjRTW;=1?XL9;02#j6gkgg<)On0iE>Z4MY3O!I7{ z7{EF}`|}MAo6M77NaxTuC-~3XT^&HBGAnYl`cZYNLn8DY*ou|uBiNy9 z8`D8Mi*+}47 z%tRE`7k(slP zo@6*QEaVzxg8wBC1Vz##4hy_Vi4xOS~~(ck1q^TFsrD?$vrF{H{K_k-8w7cu5+ zMYIjCe1h?#m^1D$Hf*ZF+tQR)cfU6{JPx7=rY5Bh(lwKO{e4B1!)0XK=)m=f7Fe?W(BaACeg)l@&xDEuyxKzFEwjj*`6ggu;lmK`D8kElFzS z&&KIvD+L?sAC!nRK}COrH7+6$XR7FU{*s6hI+?5N?&5RS(;G_J)nsI3wQqN^a*Ci< zQ^rmDkhrVrc>iA=oGJ#EykRo|lZBXh?L#^#D?a=3Dmb+Sv{a{3fLYkMlDs3PXHIrU zoZmvhir_4|YEXzU9$s+Ha8kfU^j&+@T|LA2g!Q za$OY?>Jql;-1m=KyVg$kbJcCaLpyk_BW;P)>V$%oCCm*QWEw8B#S;&+ERhLs ziu6v|I;Ak`J&?}``BCv}F4unU72TgvfrfIa)?pBx7#6<`b8N9j4R7Rez7pgIbtHE? z#!JCgjVb1wRRbx4_QeDUIF^@{J@xZ9h6C> z*7v{KgQ-f33LMhbEqclYE46xhJ?Uy!-`@S{F8rNvLMU35>(t3oMbsx@!vS`9C(&s= z=#Yi%B(yzkw%W21*zQi}yiGPT=ngCAcd16fg}S3_a7XA^@hj^%SW1>6ic@5wUj&Ej z12J+f+EB#KS;Z(7kG>K-WOfXt4A>{7PH`L(wM_!)Q0NvLy%V$iB5rW$$107U_ zVRN~UNyLvU zf;h*F^qP{SU6(_A=0)Sz0ZKARgI?M^w|Dbzp+n*8-7#+}{iFd~aeWPX5>bJVXm#!o z304(Lp_qZsJ$i!vm}I$IWm;bsq`s(B3snrS(@VX&FYkF!$pG@s6fipQ@w(Nm!>g!b zQuP;pP$KMVIO-JR#H8b4T_gluE0l*K0EsYy1AdQv_JxD;@5f`+5p+vR zJ&BmVDkE4iwM3Bg!-a?CB7b-=2*Fmnl(Wdz{~6ag>}$3HnIsZVcK?&Na+x=L!7SJt zpQy(&+QO8wrZclHgmEb!M!9Jcgol%CkUlT@8+&jVksdS8n&h_!Vw+R2ypz?m8DKv1 zKC~9Z$=c0L_av-j&&Ja->6J`+uM6jIx{|c|$B@fxoPLrp^N}3y485aC_P31iHn})F zbc(MexJ$p5I(!4(7gePt6IK6A=A@3k(Q7a}V+vwmq#oOoiYTsFZT%u8gCfE>B4p3B z{;^gna=S>2H_>NX4Ha=>OM)T-^tB>a+m$9HK#NP^bp10~Ldtr|XNIk?!{^M*Kdh;u zZ+1iQEk}7arYM6R*rpb_Nzzb8hkQ2Y(IX*!byj@Ar6d3Wv#NjAS1wBNXsDKre~f#F zL38-0O!Yw-v2}f)mAXwOw9Tprg*~T0Z=fAsH$86#(p>rx=c!$#{SvN@6(T0;lz0^% zeLOku$KcNa5YcBmqJ72nS)(CP%_6oZoipp(Px#_fE^*r75d0s>lyNf`pU{80xBB&5 zqtT_j>Gb%GFiNDScua%Hr**lBQ%~$nezjV<4&w-k1N-#8ck6G3Fs=mLkUX{@m*%(; z3ao>~)rkqpyQ6pS`g75qQTn#t$BfxcOD~UWVL-!P$?`M@%2ivp*`Gs>{Dt=VnS{^cjPn@NHlZ)var~>r8zPGQ?F^2z|=&> z4>X-VmVz?5vT#Wj9+Tvw0~k&(G&FR#q#>ccpkw0kZO=}*Zm!BP=qsds)J=boUI%uz z)U7m?Hx}${(8{kq35pW*8zDG2xcmF6wI;4njjfHpKtN;U-XSA9MfcCTK;TVlnW zr5+4UnEB2pEzBoPrzMqsn@-v)DJi*9kyn{i$(8#MBHhybSlS0ky44w}prC+B{`U43 z4-IM8o}M83tE#N}?99iRDpR}et=xeSy1}@gT(hz`*zi3cko`x~<=(K7C478NBXS#I z5JhF}_9?_0_LF>&XcL7gNa7dvtwI9YD~$G@s@2+LYC2tty54tS8@^Mjtol(cBfWY` zv(jwQpvjktnQfkK-*vKjmm#Pm-j2H!a{gMJom(TF2clIbe0F=BaMVhlQmv$-?l$f)xiEmO{%Y;I6L-mx({|U@2=9;&-b~V~lyW^1d=CNE!E>+o z90EVQXe}%(9OxzSzBxMn>0Kx8G^dA(ZZ5@9tnXUD%HpdlsoL`rjW*hS*JK+0MhxMZ zFzka&3#a(91hKw=upeNQDSC#|n5~;ns%4X2y`Cu2pu?Tl`S9pVZRlq&lC@%_OiH*+ z{>PlAMD12@>8XfrPlWnIPS*RXw#L5epsv1L^39ESmB#b@R!wXm9Ra_|slnZCZGz^_ zS}0@b7gTaL>90?TX>jGGsiMkslx193>X?lWdt*f}QKG*OX5sBK5}Spl(}u#8R)$aw zokaWG1LEenH|fiuX9^=ohd79OB!o~;PfuExRrYE}C#QZ+4QuB6JMa6qXG#Ml`NY;t zPZd|pQiE1?B_bk3g(c21nu`!MMqa78;8DPXj}Wdfap2k3Ud=)@@x4v9=5evL+8J$4 zRqsrsV6@4LkL`?s$03CrXiM;LHYW7cqX$Xh#|{nV8@ zsUpb&KVd9Hh@Ce+-=QU-fO>Rcf(16~o&%(Zigyynjyu2ICXBh7GEjl-?18@!K|d;E z4PIxH4E?HZ;BiL)Y%BFPUG?z}1>iBD&81XEUyz-cUtAJZb+%mp(vl2D1tx1Y)<7fVRcSw)$- ztP1?eYUskJ-5s*(o)N3S2($BKp;9p=MCWh1%VwE=z zXb+cPc*Ytd|4jX7y%IEV38bX;>)pWB_L*^-eRb!l`}@h|&8_WfrxN*F{oJa(j*fbA z@+n3U6B`5`mIoKnJ-Pxn7U%iNaZTq_O6!G~@jw}-_ggq;^fv+Pr6d|%Ds6A?^*ZE~ zl)ND0r?t>~ONv122i6A^vI6|63e5hGat5Q?1CcJyyN1Dv1+zJ~V}*fWCTbZPPm>1YwTeeGobkFLLtsTRn(I3+2{*-4Aebr-W9SXXMJwvaa~;z#Qx7+2$D#0f`Aa4l{?+7UUM zV>M58`l1!lV_`hPvtL9qdf2({-tTXZzV<=5WJ34i?v4J(V1xdN-<;iKb}@}IGGUoQ z{XWvUvD`W$_69~6uJzv{{p`<0?#I)sF!>xlg0B;bJDNp; z>)h{O@3+#MaR3$8*33|`ywo*%=pP2Zcv0M{+dE0?KydLALcc%`*{w}ylhhXynH*UV zC1k#be1?QedLLh9-u+CkUYb-y*JJt9;RaEJ{HF$k;IYx;sBM&8`+5}@qa-K?JR)Af zub1RArJq%m;nhTf78{WQQ8Uf!3@8fz(C3*8&?a=2ZsK@MeZ%xjI&{PG&69?=OhqBI z5_1lFBKDIV0TqW)ve4J23TW<&c@&|~J32@w_`6htR$XZ`J;71N9cmbqSnq`fW-6ZZ z4x13p9FB~Gt=yLF@dGtAWZ;}iZPEQ~)+GV7@6p2*Siw(vBF#2X?Zvr`<44AGsQ@WF z)Gy9R#N5sA^b*14!1iAdB5{(QT}+au)_h|2$4`Ly51OXpv*RADcD;xji)U0no*a={p|=YK95dsQ*1!5dShi z0d8FS-q5coB#e~|@u%u+o+8apJTDyufPinMZaF+=*mKumJZfibXJbE$C=@q^sCU-= z)}fOaOfKfLw$RLIc^a5hOClpiSODA|DX{F5CAoT2)>giDWNnJ+VMjnhU*)hE$EPh{ z)c6)P7Ij9>{lc9GQfe;6jq|8d^5`|LtC+iqx(9XMD9HQwOoHa~Q9Qn3bqKh2WIx0T zqjvo9%zpHhY#+#%ab(dNZopjHc?cF5JLf{ym5X2+I5A~kYp9VGWOZ3u~!w}fz4xN@qr?K0~ z$;3UqTADN~p9y1L!5P`V5QCnR06ODvDV3VCP7e-ZpKJUdo8QN#e)=`5EPOD#u}B$jXBzx9jqr6+FJ1 zXEqnhY=?7bd-5idIk*q2+zBsc1rF7)zx)Thz%jPWAfDyX1a%X}h=g;XkMfKb#;FH_ z_MMW5OX_->+w||$?Vh=Rm^v7AG>dx06xrxv@FqP8?6zJxuwj;@=?C5DWN3Wo2;t95 z)@ny4rkQqFA}79%*(sX%HQf!(ugx5g}^Or*}tQ$8v*!I_Enp&$^ zkd^?ZB`u{)mD(%C)L>!GlxX*(Xj8Hd;GU_VMiD70jUp<3Mk!%#9?eUVB z`+}KAfnqbvp?CXe(_&6Jp9b&io4X{`$CiK6y4}|vgakJJ3&asv+#f065Tku4CK^~$ zj5sH;Di-YIS&5fOOz>x?mmE#|5|f}9tRlTqKAxhcdzRli)c!1e*n^V|?5qxgeY$*Q zW)2GPFS;}k7V(Z~(oivpRR1`35^1TFYO@myx2-;=Rh#>RrA=Fyo3G{H{0Yq8f_d1% zARe)u6%=$fCG$QB^RIng=v4GcKm(-(AX4^aGU6g|zEczO-@LrMFDxw!cf=OpC@V#k zLlxC3+S=Nq0m0gl+Y8O^_u9qfzU_qI8g6i7d&En=l}*Mk;`(h+gk-SkEcl(Gge$h^ zFv~`xV=+?1yx@|}+S(e#8roWbVu3XszjixJ%Cj~^s(dtVSucs4Mw_)7#`NTNpmH_i z|Hqj2Q`MW8%7U3`hvfiNIE8{fcoITye%g+b3?=hgCu_wGYZM+bra{7n$YJe8zxc#E zon8-6;bJ|9m`eQhG(^NO88QMm4Mr^s!O1KA()g8w5*vqk0yQktx-Ixs*}6t?w871# z#^I0tz!f0m&@gJAn0k86NE2p)|3Gx;0GEJoVy|uBeL)z0L?iP8#xn{JN+Byh{@r^p z8k$}w~ zWDS>nQ`|)n4O?M{?q#q4am6IS6?fBpKLRHiaTwAUq#Q~0T+b&HTHU_s>*?+#e~tsv zMh(pToZkMVbpXCb_KWKynC2L#5n(SmGKVjw6yrTYW>iSYEZ4T}eL1_Gj^qc^i)Un5 zk{#<#lJb>~PR@Ouc%`ZXhmEVCD`GtONYKB?h5B4iJW^Uvzto$fHTSilW|6QjE7Xot z1}+{>>N}P)?o-KGyN>;7j|AU^A|$YlWYY;h%qZ7SQw*Cl?d z#06)D){~VI{*^Z?NbjcO+F?^CWp9LOsXg|6n!ruzLr`S5FC(5kuJL`Vq~Nkhyz=u& zf1Y`@x(_E}{62y4hATukfBN2&Ii!aZ{GVMtr(r^VucRmtV+2LaRiY-Oyy4;YXNJos zB)XuqUV=%4i29J=vcjZAN^x#!qedR2uzFmaclN4lE!mt2nQ;FF!snF3W+!Gm1^rJgT9)&YIpmNN7&4-6rHy?<)opN|bnbyv;*K+7EA__j5erKZ- z7^Qq(BJ6&_w)!F``c#q_%{*uhe~|XAB(^ghf6d~YA8AcW3g1l_ydB%B$2i@Vp!P1| zEQVtTL?+2R^3HQ^=93N9H3d@E85li>S*MIzEV(y%Zwc>rcvX@wno== z^EZqVhjcT-*Ry9jZ@P!>5C3z7<HwY6Z}gK4A50BNx+rv}dVAvr$7b@ZGsAuQ0f%kN1mE3aJ1%xzrx zF^J=kNF4mt$}wUEW66I6h@fmOlVv}uS?(dwIHS;G`8<)2RURRF`FwW*mH2(#;ytY| zzQ7mhR+-}u9EgtYph+oN`5}cOX*>*Cm(J`eulG%Gw9j2UyIFuI5VfT>-tQs4pzgO| zChGcL#}S;U8D7V;#b`4j;+!x$$}sS9E5vlodAe_1^h_XlY~0YrYyrBfF-q-PC1}yo zuXj0a*D0c6z%N!p?%`}K67FI*Yu;r?Csu+Qv`{yMk9Ve@ibndd1j|a&iz{al!G=y^ zdH+OCUQhSdr}933wfXXmlm`qJ%40+mBE-%=|D$5Pq4bd`3PxC9+Yd_-9YM*`0jq<$ z2@YP=gybr=Co0B+?@V;_M5^^cA zsvc91RxT8QJx4u*ZNMZb0`D{&agAur(hPQ7D;)S9o`=apmLDxtqik0bJ!zTQe@n9TA`Bh8G`%$1S6V7x*0|^3PR=NevcVr8`nwB_OnTeXEHN!3DEF(hWg3B zL4SXI`c)N1{cvi$HaRp7PwZM5AxL#Qoitws1%RVlg){6<{OWK{PDXzHGTHT+DX;Sa zU|pzlXPK9<7Y%tX@9?eLGtr0BY>TA<|_qpET3* zO5Sgc7=_6n>$~A`4Lu91eCsD?+Xu0x)Hn*|HZPv*#TmBC58{je{==QpuMfoCje9MP z2;2j1N3!5NENvEa60r_8fjR-Bm6)kjgt@f0~4ABk64%OY;$}} zi?Od1SRUCXXYcPWy-jbgFDgL0^^}3Qp;PB=IuK-@`Kt1rxM=}H_dK0H*10h3_CsCn01Q*A24J)PG=woP4)GY%73cY(+{Pc1}Z?! z)y>KQ-ikiPl-~--UBgAS(RQeQla9Z6bv>U6%ieUJxk{K1wO`IOb50wcY>gd`$a5sQ z-`9+6&D>SfAL|w*pljeampTeaa@}|=s39J#x;u#;55F}+`xUj|o`sI>GK=TJK9~0~ zr^EV!zRi*=<7pBJhJrA#S0V$nL1c``Hdl;|G;Glx6c)$4=%j%Bt*tGqWPvaI)b4{^ z_NQ9rDQa#{zo?9iWmB+g(+P@D#;=_JDcWBsmIWSA?i9y2Phv*BHfj!2q*AgQx zfZyhnpT6r z)%-!W@@_;S#K}kSsl4s|K{2wL8GCuB&WZqq%6>j@>RMK7`yoIG$x6~_=z09vu&P{9k0ap%3qj1!%*nJSRQpcF89Bv8qV+N^*(EG3-7+D@bm3LYX$YtHqg=F!!`GtIz zCv#LHFVW2IZG-ap>^V8E)B{{O&(mMY8U6;fCydCN;sdAqtmz}sAXeN*NKtZ;@CbCk z=DsrJWJMU(BV|3JN@)Qj99%3xVf>t!pqI==B|jdgdd?i!egCDS z%Er6A_CFyO^uIJl1lqXBrLBCWX^~4S$>y{^bOhoKpZ(f>lz+h7xz0o9eaU|Z^lm~Y zCPuBl0ock0Rx(fcviH#lS6M!feTd1vy`97A-1gr0?LEGU3zm0x$~7-HzVVhx-Ow#K z)HHNhL4wv_u6%rsi#(V6$uadg?!ciH@&w@_GWD9RSi2|KkS>jtF4wVd~g#n3rb@QuN^@DItomDC2Yv+%cpMT$8ZkG;-fbM3c zpx)-IDedXcjd|0sph}F=&iiu%?}xVcT-PI{ZpBXdYxrl43#`v?=49)9gJ!Ua()9RG-;k?!DO2cGAYq08BZT zs0*tWAUPVW(`xT1X3^fZ66~rLtaNdws8~-@xOrpM z7K7iSMk5Qyw>jXkbN3pNW!8+9tQt-=cxpYU4%bY_z@PkHOc`*9Oy`mE7UGQK-V5DR zp`zjHuS4J0rXUriQh>BP63?1(QR~14Oj1~In>Z5z9}m=>`5W&JbiB|&>3ltv%kyJu zt)b6gx`+<%;eKF#r)U7r~GDd?I5R!8xyq zOLsFGpAdSurGbHMF!BWHMx=>4vAE0O;m`aOHr0fdhh~WPICCjIbzi z$OSz-Tnr+32g=)*dK{(9$9kSl_7wI16p+qyI0>YFAwNJLTo4rLD<4lw`Q2kJ;9ZnB z1Ht}?!0P+r=o0jJry{6*aQHc8eYJq0DV1_9SM$zKij5l3ueU+$AL!Mj!L`X_PR$TGky{m|dTD3_A}>s-Owi=O zqpCw`y;hYu1I1wV*O#ORKMIT`^z_n#QSh;{x6sBz+cYwZo@fy=lSA~qWQqF+zBFh> zVlXP_`n8nd?(Xc?wClsp(ODhNSz1A%l9h3>8#$`0Bck|$dwLrWjRmG!%R;uQtE&k$ z5*{|sia=b<(CwU*PBHw9r$x^LB`#<%z5Zu(gv@vl@D({!T9{yWP(T-kiQ-rBah#{E z`G7*Cl?{!`HB<53M`cb>_IGo{y{$L|Ps1!f- zjgeSOyoSmC-@p{G%bC&ObSV8iWu_&U*@4k!Tq2JO_22V4YkcB;>v0k2eU4Vy=BGoV z)AfS%Zjj%iz*Z9`im~DYm?B~EH-z*HK1fs>D*LP@C>;-oKbpFUd4T4hl)-B9O@*=u z($;NrHNkYVVtTN_13;jWOiR~HJx9@jMLcrk`Q~dcwkLQ0$9f}v5KqF-RMuy_-)9Vd zTVX^xK*CCL+O9gLbeVb8a+J2$`%0FQVSgPn3+dOWpBnPfD_l}os#U*ADjJf@d$Ae0=Zx z=m^CQ-M!GCGE0h>k$JZAnyRbE{13T@g;i?i zK3G0|;nj9&Lc&;ollsIay!7z&^fV%PtusB09Krto-;=3;QD?sKgpDdx z8exBAki?g}MSZk$i-^*71E{3BGzeZJczxDF4L3{pE6JKZRJ4Kt;Gman1A9RvtCM8* z92l+)NVTlz-*X8uDw*-#>3p<44<|K~dnSb^)3Me`5$eHi(4vc|7v*-?$F%d5$Kq4E za;QBv#jme3tZv^P{g1UVlOi^AE~6GM*vv&xLq%LtR*}4mlU`;{!iMPIqynqVz&iuQ_-_#Isq@DpjZ~ckp`<*Z(_9 zaOjIbus25vSl41f2t@%+HAGr00l0mptVpj>{fkltJ1Bn^siGt@RwHQ`>G)+k!X)(v z-|@NK8^6G4acO*8Jks5>nBpJ1wQ+2?XNa5vBPVlg;fd>OG*749Shm+VuPBgPWnHNP zv7SJ&X*vh5o6qKBfboix+&D+UH0D>)c{GP5QJtXI=?C`u0|%3+n5*H?`Tt$ZejoVu zK)j@uCZM~3>+yfY0a2Yq>N9z^;Dri&0(ysqVlB85CvbbdygEI9Tl1%^6PGdiY&+KB zk5c|`{BW7?<^r(&GJb6y5;?!$nRXAJXBuN93dYOR{gMsK3eoQFFm9L2F2zQhgRqv_6tXKCSB$NH#jiio;nwseflcY(ghQ^3 zVVyhuUf`TXltew>%P?t(^drt09P7H6BSt=oxIfb~66tzdp-l+K952Z{?;4}HLe0^l zIW!U=qLZAQTUx6`_cMqsj6~fiQ!FkPh(a*FmQfW4%L!)D)rX*9(<>JMT;shD_qozy z7ifM>Rxv}b{2Zb=^XuMMRSK8ZXV+A}E-6KOCAU6GlRuH$f^&8qmesiFQKnTGcVpIr z!l$dCLU=6cZNm%RNmrA1zq(7WE-$Uv@UBmn4_p~P!P&82WHm*O^;XGc{y|@<%!nDT z>c@SGCG}5M_+z8&hs{nkVSZGgbJRe_I1g*H<*Qn(=uMfiRkeTb5c=Wt`1rT6smd3H zC~!xrcQA>2HH4KtA+2>^x{*slwG^{3H?6@)E?*q}p}pg68GVn7W=>MMTCA4+{EL_nB)`RSYo$7f7%C8v5_5#HrF^ z#cG`u>1M7Z!9ZO676aQwlAIl9ZslW6v?uxRCDglR{6+#pqwu{lPFc;v9pWM!4A3tL-yMOWr+SR5RR}OFBz75%C}KnIxX-OptL3Otlop~ zoE1$k#-pNizGZ5xzOl5ljG35sm2A24ZeeAmc9Z(Dg zVzs5%(JTz=Aw!dKlj`whm0MvD7m@4@OKGz`d(PomXO~e2?w~5`-;3*|izW40w0YYZ z7s*$@nEz(}UXAOsKSP@S8c95Qo|Iow(G-aJz1!Um$AEK9s;tr2KJZtRFa7y=Q(}U_7ef&T?7UB~cPPbuAOW6WnIYkJF)k*rz6AY2($SpQV)Zq);ep?MfqRiC4IG(% z?Y{$SDk_`x^gnDeT+E%_$;Y$nFlNl!%U>+)?Y+>Q*hT*uaag6Dpu)^?uXZnmoO(CUC1%VUN!k9HuwKy`}~+qeK@iVSG;AYd`+Fn zxX2wyu&zh=ttSRbE)lv;7x(R#n%rKiXs{mG-0vCF5Fiou)1(USegf%$%g6sQU(qLI zR{D1_1}Xu4Ji-W{XP610t()hXn_b`_IekjKWf+OYe*|YVSUw)74u?tV@h}Hc!~(?9BWz)JvXmZ6wMzlKBAr!w z2($_R!R|-i89T(-O;@bLS?h3|nj!5J>JI2^`x-4?&4U^4*{SYB0u@*3?k}WJAqpxz zUG^zoOAeyqgE5_n?;^!l3HI&pvH+ntfhw>25L)z|{J~RaYm;wP!pjof+ERZemKJKm zix)Mki$3hSU5u4_F(l}>{J<0hDZ0;2ZFk^@KUC2{mp6%lmRAHtN|wgPQ6r;&h!(#wu2n zYWoXITWuaZ92L=O#9aGFD-{`vw9BpUo3|b&{AHCvDeRv>B3H_=?y5M!-STl#DAvo}P^AgA2zQNrco>=Svd$X#IUW017*D2Yw zfrdfe_^PCCxuK<*)a2pu-)J^yn7tG9>f2O&gYuIc87Yfn>$=hcj~fm z?5>Ql=L2Q%8;OU>$(dGix@f^yPCtj=>V0B!ya{37zqrQY=vAB0WpkPJthE9Z<{^+L zY(JzTlRx$k*?Q-R^HJBAgz@bwP3o?0JcO(L?;(-|$gRuv>_iJqNLj#sQ<}Li3hELA z-$Pd|IG-IEfq|rRWz)@mpja$`rAiOU$#V-URf_jU2n!3MSdJQ^?V62!GxuJAAX|J9 zapq0$(IxP!*TJ5cg1L%-icXTXoe@h}TH|pAVYdsF*!1i-;%#FWefYIZbtBe9DBY0~L_=X=B@SLKF~KZ4xLGP|)$|hNF&s75=>Y?Z?K+ zb`i@tM^7akN&U;u(Q98ptxoC$5a+(Msb3{w-KM9svKiwgCfT(6w8!IGU+bzEdhowE z`?+Bi^oJkMqo|)$z2~d)aKs_QCcpMcT#eHZ%ljkb*`^w+y+1$DLZe4=qf(W=kais=RFx&e)OhEx2Xx?iMEjO)S4 zwih7bmcGE96io|u&E>llBVb=WMH^wHBZe{PFQ|@8>UO7wg^^qynHkh-u6xzAxKx zSqta&+32nWl~zc>B&+wG^vcRspCNU&7C839-YxJ-fA3MGpLq4A`iX|T!ws&yLsdi{ z@&QmBf3=?$t%JEA4tvM5mNva6x!J8foMfww1!~{vsc}QKZ>E!Z&o^;U;)TG%X9&gv zf!O~HnMMf_gk!uBV37P5;gaznqq{qs`>VMr8;N zk%iv&b%yP{*So(O67z5vb7p^8W85F$YNH62`pzT&g7nN^=}5HtNe?6=LEpIm)^Z^8 zPFch3t?qQAAk?^?CoxIPkE|DL>Nx8Ej~B??fa+${ZZNH3+$gq%YVJxiAGkbjUJZve z*|DT(zMN3WB6q^O`&t$rx}oZz8OO)-v>#MXV_Q#k2)An7sbPFbPh>}Q&(IWYks^Kr zxw^qmY$D89pVv_nALK^LqB1EskIy<0DEb3*e;@#>!mG;YQb-^l_F3)+=Qm0lh707BMw0?(cUzd*~jyD?RbCca_uI#1 zb*^N-^LMo&xCs2a8XhkV>Axc-2Uln5r>9{le~UWgIaZC!-o|F*7K;J24RL?v&&8Gy zriEN1WO`n9Q^x}AvC|)x6L9H)k(+l(Gf(8kOLWYqy{a`u^Th zO0VkJ*(pWoNLkghuH*1!UM_c}cppBTe~q?MfA14jv@tO_RWb-|zh^Zv{dU2IPu{!# zoo9YuF&yr*1lJBRNyGE^$9>rNYz-t()owR4Zsm3x)@_3G;kbNkW$Hb2ndpges5eME zMM4QX3;&4@nUNv-8KF!P-1`o5FETBXx-l8x=K7*B>Tg#of7fG_8TEb7|6|N=iiG;B z@lgr#8Roln(KrRU*KAuYO?xee5eBWAr_ z8JH0HFJBX15$k~~uTR87fDiEOOSBCq`(zxg1+Xngwn+gy79|*U8;YiF`XKWz_Bu@s0}h>ocqAp{uGe;=#X4vVPmsPA_v05dGSeB^wRX~rz@scWKJ|% zKm@KeKmIk;Ok+}1Gn+{TLvHg1tsP_UFE9s|+qMq9E+RV@crRM2ZdU4xpgR}(&3`%& z8FogeyqfHWyG_GI^-qH51bHQedz_F5YLgA6*e_1`5J}-fykB4BUVA1#5w;$kt>6K0SkiP|C6`Fen#=JEO`>a52uKlfOl!ZaX+es4S8<&`{V3q zt0#JwQr^dJ*+OsCi@qyv&}Ht2hVKV|nW#DV2jc+@aUKWH;6V{v|6Y31=Me=LnMNG1 zZTryQW!S^HskO;%)^xR}v(>e`g15|-L?{cssPjL{GeoT$JZ`c>R}ym~;tNu&q6xk^ zZ3$RyE@XIY9IOt0GG!$~@M)jvw6F=8Nqm%C82(IRoDrh0UB1|~Vr|NHsvepB`4}%> z`r@RuRp0CCY934b*IRy;$CMr~L3BopmJq6DC;aaa#naKxwGeyr&_AOuQhW}><8qUC zFVE1IUbz8`GS+7H6VH0R|6y2xPOBnmM7PD~=1NIik#j>W+g*sjaakt=VQ6wdD%;ZL zD@O`TeK!h>l{9#d<@k0p*WQJRFTf=&bZ{+|GNc|6qYY15oOW`*@0WO3#%QDW$-3-e zjNfiJp>cUKH?e1@CsUBD78V-r|5TU)=-AeG71C+wC@f;@Y~-xF zk9>j=c!zHDXr_g!?PK?uTI?ORg}DJ`o;I4d<^=2bfd-qd(A`gEO}d}?jsRB$tb3{< zilryD%sLakeucE;b2OWLr|?9YkQpEBO;pIh8@Wtjj5ag@e|w_N>YFZebY#X@JmSeI z32V|{Kxe${b0VZ(s?P?b%o)0%$*lc)^VxGva|@$a!$Z3zJ~`(yf8ki}vwuxU{bBWh zt~wp~@HowFSfx3{N>ez8B_jyG-_CrLvq-r_$h!8n9b!5*RsLS3@bKOAtzW8r|Klg# zbHbC3zZ4apww?GTR8qA?m6bRkZ(5zN)f}cl86y$0OaEb&7y#02w`~(k4}DH?tf z%G!9kj_WR&N=phr>U$ukHcwXiAm5`3NN*e71kaS6-*elDk}cZD{~5!Q&;2jNjTA4y z->)=VSZ|7Zaq}c2P8KexxH={vFN_HWD}!8!or7EK?NPI5@t6wR|MQm;nTCc2`Y#f0 zRSnwU))A|Lz&=eqxIb*V*L)WL@ILg%Bwk0u3<^2XyhxV`F(ETEVq&`oy5uq`Ff_07 zQ60utUeX7;;wG@JrAtpsdc4dVxg4qCB8-Z~+$e22j)v8rsB1Mi76@N7qAzM>DR(6NY!^3U^E?OXTT>(kkLyxF8f?$)GDz#BPRejziRJ20lZ(=mu z&>*NaKgF_N{-I;0-hS&{UjOOz@as^)lb>IW`en!q-jByRI#x}O9%?EoL44eo(BahK%gr3te^K2QVQ?RWl)I<_rHYM=cDvLGuqOUahbAH~0 z-JzFmK-IjOn_vL4QSG z6O8C=i7?*KE=cPpqyJ=;kFO8?4~x*?A%F-nT@3KW`Bo6y_7P=+_r?OxJ(i>8S9){8 zqd{*#bz=)HD%`-L9K4L;Mcd!kl@f3EGzJ6}xNE~nq)>451@B0ryq{;{gHIy$W%)(# z6T$%J#j!Sc-F=AeZ-2j$Hrb?oJF+J5!AqM7pEU&imI-7H^u$dLKr1oov z(-V?uz>M@rp-XPU1k{c@(KxVxLo3HR4j{jz69~^!PX9!Q;JguAN&Fpxk4irIrVC^u z3Y^Fj!4gau8MN`87A09(&%P*Tu**`qeNJ^<3a%Ja*Xf&z7*7g~pPJGha4Nlg%Y!9w z@)L8u7@y!H=8B}4k}a3peX_Ljk zC3IJSLx=Wpta(nS=ilf_IT^bDr+>Y7q)2Ej8KePxF`!j`5#hv8`=%Vp`8-N5f1ps% zYjHl9Fa=5zzQQ`7kR|%{y<+G~TB!e6G6h7a=3VK0c+PX12j}M5AO)1cd??I;5zB*I zW&N(XRnt8$qufhYd|C{Bl`+#&2($gVz&t$)I6Rr%rX$>otH!+-;?wF?rEBR$FD9mS7Gp#Ybtk6;bd0vVQlK4kP&+gwN%MX5!a zIxYbX)vy9qhKPC1U^=%fP^M8&zS;U_c0cf@EL(na)Zv`1)F)1$%MZCcO`^VayXlVu z;B)^JCZf{&7!%r3;_$g+X7lTYXWjTm;*i1^dAFR=*9$dD;{yRz35t8;A~euVhf{^T z%PhpIq-GD93gTDwyXAn4w`lWFkTl@%@T*e%$G_v0k!%xb4PSfk4WyMoKAQ>tQdH`F z(DH_|kp(}j|Dah`uaI69Cd{)K_)erOSbQy_80XNj1$5Fx;D>3%d z*0p_}XY)+n?g!GZ8Xbgicit+!kI>3nf2jFIS>KHG6+tKf`axxGEdSviGGOweh4^Lw zhqm28fB5(^rz;oQI{rBz3w7v-rkJPo=p3PF>8-t5+abBF~iWd8(z=;!zLNsZr4XuxeUR5H9BgW8B%XuHk=MavCk+c8~8aJRPoANrihP z*w`-lI!xlf(0_pl;`(jH;jInm3*Blu6u+VG9=a9IUZBScm zY@mt~k(t+9M*%97cRBA8@99--)D8j12Wrll9(>~K=b6xdgyVFwmCir|u0je5u@vVjfNvYWQpOVKZLb-a z)9D|6f2P1t=u69C z-$MnrG@3G9llU=IA0k^$9=G@g2y@Z=nTgL*>|AF_(HeUXvV?O+Iw6;ep zu7NN-+Oo9qCFs4wj)9|@&Q!)+bFWJh&b%wyxaVq4<5P}rJFH(HzFMipE-|C@-vKY% zmTn-=F+IqI@O=uxK9`pth`JVyQPWs7qjO>+&gMW`EcEQ1tU>Vxqyb6Gprh*$i@i=9 z+!I5eJmyY$@!ln(-pZ#JSA)%2@}q0!yQF|Lub0oTf9wtA4s<0X3ou(kK74m8?>J_m zi{)V@0r4Xch0m~-QK6A6`uBc96;jk4b^oLlv)qWwdseXh#7b5Noq7$OOx_`?cHUJb zz5pwJ-oU$A_;~-tv_>Jj=AQ?e1&?gh+QyOE*Wq5@(y*6=fyy@yp5PoVaiO_+$p4=a zZ~!B?Ehb+Bz9thJ-Ji~=ptvBeW?Y^1J1Bxf2PpFv3b(GPk(p7e(D;II8XO!P#*a*+ zX;@vSnISugU*@J~*^uw!E+p_2t8W1~tqfKeDX@C08aQWnJ)d4IdtSN z%QSyIT`!e^Ir9N&N@TFE1MZN3xx{h1^S;7<^~J^PNo$Ol*v03kJiJqXiuDKQMohN1 zwmvr&4&Zk_q$F9#24+;XKNQ0CFL?u!*w#ZJiM`Q5xPLgK{hNZ*2{Gx+8W6_VLg~~Y z?1+L@@-ML_1eLgYnO3(=ZuTSBF>f+FPoo+>evo5`j#l@fz{9EI67nvwt%tDIf8Onc zWH-G_*zR76v46#UCMV5FPOq#5H58^&eMVuehiCTsoenym8Gb))W@n9X33thy*EXA0 zQ|5Vy;(xUOT+1(D-a97~3b4ID8>773Y@b+C^P(T?ND1YtuQ@h9X|N2+?%r_a;{E4{ zZ~Ki=_MJ>fh)T;9GOCL?oM?`KD5{VTf!&fw9u*z>Gi;X_g?8u6V%Phf2u~B$d^#mR zTREDDjz9i*86RsV*5RCaZ+nv~3dvaLjpKX$&#d91KG(eIU&nb7$7A|Q@(lR_%M2yY;#Yxt7}i26TP_qk)Fc;D?o)X?OW=kEBLYlatIw8!-SLh*CDNu^sc@Kwc@EfjI*mo`=f*7R zKLP9seL4)nsC^8`17evJGHlD~Ja$z>GF%tamo#`5Iziz)BzyjG7l5K+5WD?}XS(_* z;`dT|V)cC`MtZ^#Ev<+9N$o<&AtZBJT#Wy2gmciYf{a>>N>3AE-vbE+VChsjecn2$ zlG27gPtcBd^z`Y|#OL8d-kQ?3u>D}^-kLcJR)LGpF{VSQ0u{4iWM*W6xMD@U+}Yya zScbMyq){K4|Lg&*@P#YJAt(a?+^#aRa7n1E`X-Wts=0oW^4x?a$%>J+ECHu2Hmd_R zy`-{1^M~r0a*ujI8Mj87-yRnES1A_%Y=5g6&!nbc{(us>bofC&%Dumy?ExNgjlgnN zj|r9{;GVNExIGb=gaJO}`J8RJjFU{t4)!fLK;WQ*E)8@A9+@2TsTMUIcjh)tXWw@l z{3$yCTFQ=Tu?klo%g13tJXwmE#xN<&!#U%NAeWci@>(Kt(pJ1YHzZUpY>RngaiX=f*MG=plvidFrzH zz~j7B7#f8wyleDpiF`LCXj{2QXw=0`UOrT7)XBv;nNVLv#{|MJ!j>G1NS+`#4XVM{@x zZs*U}5xinv?0E@KUaH>Sq}Kk_M+pO{LD>~jqIa>N~CUo?mn8@mQlxGwnE_c7ejf$UN(<~D65tY@!S zgKg`p(^t0>I97sJbq!WQE@jcaEqCCFz})Pam8(KzFNx28?`-IcUT3c0Xgj0u*h+r0 zq|qo=*}jAXpFxNyh_Q-KOk;hMu_dtdqvYH$L_#kn8#dtNYO4ZWUF5tM`C-iT^rI zQe;CVfz5Uqf=mg42V*{`k+-F*cONEk8Xb(%b-O@!8L{Z84{{cxa8pGjq7W>XXfhkVdb<%jd5zLixY?!*`&Ic4IQ9R6{zSErZI@=o= z9i`Ws($ChD)(Jf&+@YU(Y30&UPuhm7s622HdH3CWZW`g$(K zIjkk?w5j5^t<=`w=_<_m_9nR$XXQNjpNKM37oE7_J4h(8YxF~7bAFJn zLy3d)=zTCAA%Vfu20D>@;#bAg2kP8Fxtnh)e7pm8J3I2q%V=m{!XN!YzTfw2 zQz1}n;{7j-m0iyc%TbniPp>?LExF-{mBIqv)AmarSq2B=vg=^>Cv&ur!^)H z{VN9jVRfslNz0a|_{!fGXW)N(Q{jI;*k^=Rd4m@SAvSffS_a-_alD+rpGZdM10f8O zqKg+4JUh3p#~oTrdC$JL@$~TKY+4C%XYCKrX;mcI_+7<`p2*|+P_*=M?NDGP)7F{n z3~+j=Ys5$6vUTHFfGnOevB|5r0d-5$_QxzJ@|=^gF_|8BB;q7g>oh)j$n!f zHZuLJwp7lPC-)U-k?(X)f5 z>XlqwnbPWoxPXb{>;A#NCOly2$xZdo4i(?TXLd|kP8X05M0eOChXl0nd#Wg#`9m=k zkXjiW-~O-*baIVwzNAfF=7tR-B9Y30r8r{K6Z|J`T2k;_c~?lXJDKI;*2h{r1RP3V*lAiiqfxfj>q%l|gRnS0WOz(; z=#`2wgL$meJ?-d#)0b$Y&giFGKklL*G_=-&RvVx9P-s9;SM9yS4msUty~fkG*zUzJ zKl!rSA&|vQ_;b@oSC*0>FR{h&Zx7r8Hzy|r)_)FBfmzsM`)i8B^dDrH#=c?5o5LG1RpBigSSN}4V~nwcDNJV zGCH~-@_Fi9jjapGMM5ID5sX{hHnYN$bYFMJF(w(?hJNQkhd-mfhH=GX*}O9nL{Mps zRisbYd|xh2tVj>;LZIR8CqWeC0zMU+a^f2MAW<-?-9CW~((m3+3tz(L_Fsb>lC@0@ zo2cYU=3`9}QPYokuEspB2R6g6`lst$J#ck8@765E03NdZuC^eK;;F{z0cZ2~_&tcE z{ogbp%Lk;)_TZr~?VvKl7K4WhA72wMYHcooMRBoJ{Q|Hr&`QdrrE=P?_eJ)0e8y(c zwfH+)dt|MBy_KAoOS+({YBjEOXh+0t`me@f-3t8Pe*}&^T^uZMPe_?4LF^^Tl^Sb3 zAmkM1Xjr4?m%Muz#XEYpN282ObaiiJqjqW%N>Z{FgAm<*z@+GD*aG0q&wB>?j0v*=LJX+vzk zuGTXAbW{$|S8O${8aRU-E^I-XlJ2S2plS#b1bs0@5ogmm3~6nRVcyd_RI=W8k%oX& zT&#?y!GNqSmO$JJwxf24U^3yrD#e2T{_YxEv4D}5kA`E~+vtKdeT z|G+J=QAJ6QboqhCXa2dly5HLfxB`1$+*+ir5M^*O)u#+U*Hf-U${@kwUb2_-s-O_z zkBPwt6f1!`Fku!pDAIOB3fTiQ!K^P#O+R6*BF6vN^u8(YG+)>g{st7bKJg43=C4~D zeAakcDBf}i6C}njU*d1>&}!@zxy_KVvRK7I_;*K>7)o^5rNb$c`g3TesS) zy8+cdaz}zXgz=-FZ8^HMR~G1`jEw@)6)zn`;|*4-WX&Os`X(T$>JEIgvJ(2#f!|cz z4D_pcO{g(qiK8USB8gi*ri}X*F;fnYGhls#DSFv^Xz^8~(j9bpu&lz*^zLO@lXbhv2A z;2>!v?#Bd%&~~5xxI~N|&>D%?*ShSf%;sacw#ibK{-pIWg_7Rsa4f3?^8xi5Gi8@+ zU7|^0oq>Wp-*j8|`{6x<1N@4x8AAC0-)f9fq|D5JQujRwZWk4e2Q+O`81ILGP8~=g ziF?)P#1_PDShzvspRg^JlajG@5n5YaN6B%-5}FUhZkzW%dEQu6BuBzkq`BFU{m0dP zlRmpCsBrZw=~8SMmJq_ ziE`7ioc#**A!iKZ^XRo2oEyyM-y4PhVK|} zEch4|NG@f`(gvKLC@XT><%GT_4ME85KoRMr;G52SiM`U%4x!(Z*GDGA#Cm049H|H0 z%MDBV@Eb-JFJq;tV>e4LqV)XRcT0qAf3?20l_u9hq7VlqwmNUqmD$kmuRmW^zd*hI zR_n4>>wJZc!@T>_uJuI)=_65zP2=1H-Y2-1AkF!=@o(M`az&_XDW&`KYpFX^p zyJ^1MPE0nd)Jb9@d}Ot086Q@Pg@Wb!?b#uB*jm44|0$aG3iE5m@}GeL-~VPo!SQ52 z1c+>cpsMwaX%ga>Mp`I+eSMXFS8w>$*n0*9HrXb?4A1b9Y=+w(V|_H3GaHCTndFH= zL#Toq_BO>51^Gx}w#dc<(N}zFwf?I9@&E>( z!4>`RP#-r>6D;N$tg|Lxr9t8~sg;66fUtX2A^+jOe!RS7G zS9~mRnK-!a0bl(Nl9c^0#FwFpdi>*}SU*qFYo*O`0KJ}rP(*b3zbq?$pvz)9rlw5@QRsz|VnEy$xU}LmH8pV~ z;1-!)pL?@J4Z%_f>B6CqzVZ*+q*w{9)_RgiBzt67o^N#fhp0MEDiOV}#b4t?fNS(q zkv4~?IOvWByqwL!#vwV)zFDTU`P>??Dp~Xz@=vD@<@(%_#)MO7?SWhS*B22x1EZP- zer`Pk;0$VykDXpMQ zNFxpK2wQ0w`0)pGMcYXdAdi!JKT5n9BO&^Wwpw%P#yX|kr(8BCnZD;%XIH!aoP2Bs zY`cvorElGi6J1*3B1Z;WSM{9a+(bhTUX}2#r2PYsFQJG=Q3GbK+qsMcbYyutX(nQE zem2+)N+ux1Ol8w57mF5JM4vE;WY7C7U{3$+ts~o-6_w!?c4ULAz!I#HMLDsenl-kP zC(VmiEJp|zFBJk{su1tXuL*UnYQpB8A{(0*SFtkQHbp}FKM0-M@9}{iY<*URjs9YN z_CCJe7V>7-MB2Dd%lCUi%lz#TRo2_jej04(vvRWm>oX`3vw7% z8$LOoiZ}gvM*|eF73)D>e)&3-x;j;pjw(#*`$u-{F$42R!-xxTpG-=)2L8b+F%$z( zSUi!9xNQv1eu4gi9={dKUX%7smuoEdH`CS=?JDzbE6}pXG$1NNPC+gY2_+JMI6W== zP4IP!NGs9C2OaL(^ol+)v&{At^8kqqf}>3t1v1Es%5{Mmf{vRT}M~Xs`D{f2CM@aCeBvLM) zK&3fZX)a&0#IxP?^$H2F4VK2O)j1FFK=mWY0~WW%m?$tr8^rN zmB(CPN0-gnqj?EAdc~hx8P2gdG+s9doeoMI)c7}!Ge3RGD`TU(nGNHv4kaXOoQ-6a z{E_vuVZQ!<=l>601KfBYu=(VZ>XwKpTJzY~`Fkoz#?Gcyy`pCiQhB^<5!|#5VcJoy z9`3S?8|Rbp2Oe*s1(BDDDk#^PKrG4}2A_(zAE zn9q&#T+XS9c}}fBKp@)pRu_n+Cke@1Y9S1&NvN2JE502j+|0YM+~|KgOe79m#1OS7k)U>?Oa_YDqvhn% zUsObkRe2|09?yC^qENAs1%2`ma zR_tY0g4;W8fKZLtEU}W{osr%{9-Gavt3Fo5l}ZaGnN-6jV5%D3s(#d6 z&JMyHc5M~TOL#+0M(8@YGwwbnlQ46DNj?$F|R z{Y*{X?3LjD+Y~`4C${VLh-yvp!rWeM@NxDG^{r^hpRbw*r|3j(l3Z!bgCW6%aXwab+Ae^*m8mBS$HF83nWk_c|FrmCOtJ^5~^p{48sj^mJZte-&K0>Ap>aX zme03jgx1PNh?OcHD(4902Js0Dq;OOJDqI?RS@YmG3+k7f{XX8=7tzAUTKs_0@%05@ z0%aGy&?fw;%96B1dg|Qq#MSd5?gq#;nS|@Tdd$jI1-gbRMzzfezUZNplaEcP6JlqDKGG5y;iB}H+R0nt&cQuJlN2OEQi@(+j6nj%hreb zyvzxL1U?{n^ABbPZUHaRVzs>q@f2X9w9);eFuQOReXz(goX0-QBq1?cj_9%}N z6GGkO*^sAqX%oh_5w*S6&#y`>m>TG*XOgD&`{r}hSk{va z{;6YY<;w^3&)GcR9olr!AgX*qbG>?ebBq;}etJePm?czK>6x ze=G2HKONI!;B3B(d&2ir4uz*ojTtvY;#W~=-=J7-6ySRsnK7%XV2kCxUQ&miL_o{L zTgIHvpWYapfh_202$H{xUt#zn{1d@OBSDW=BkMy^i(KVQnrQjk08BPAKxd$}?%8E! z?j5utN@Q^mQrDX3(kCXA>3hbeyKfY7+jLQl$k_B;R=<0~LGJpal{I_R^E}bS%Ss=) zm;Dx`0>CWI)1(UCfogw~JFt}4kW?*Pp}l}<$M$>9hf)3?UikMEcYPYNKGK~vawpjg%HC#Mov-=5n;2;5<;7lLc(|J=x)d8=h`z_Sn*5R3K!hcypEc)w z$9Izhmxq|}vxT2(2ytcSp+o0be9Hb5sBLMm^0}U7gz$fk20hT-fq=ZbAk#U*2aKJV z^$bTbCMvV?6TvD5$pm~iCPsSRKiagMhkc(id^G~={hL|>^PF7*GLxOHcCzSqy3Ys9 zO|5jp_dMKM55_;m^w5Bwrxnpzwwe*HNUSkdym6ZmJ8d2IU%Dgt+6rz_m~de;2lXBB z2sIIxEKj`uf1crUjPRWmCYjHFo6+WNP$m~}zbZ#t&5xq5-FJepy+DmT_|l*O7y@Gb zuM7O+R24-e&HK}>N;MvjP)53otJRqvRgJxy852t3|L208LIPVA<7(Z|?YWe~G9A@X z=_s3F@%wKZZ>}$#K?)1z@4MTQSJO0t8aMRW{j0i{seW)xJyizP!;}IwAtmP67j8cf5^0dHS9;16T@t_CYE4Q}=2fl#9@(G+nW^93i-0MC6y>DsTkzR6 zuo5I_P59nA$YboP$~nKKs?B0V%sj!t`rV|Y?)V28FJ<*kS~sSPmr>bZvBUxaTM**U zr70}8sssH&;8>Nvmr2GvDk(DJi#e%qN-aH=I(+=6el;_G)8D`8@&pw7RrF7Pn_Cr5 zC8`OSCBb8r&AF7nJ!L()Rh(eMEUw0+-(_bfJz4t*qWIIaLpg=}oHU8btBJ~;i~3w= z{DdI~myWMlZUKlJGDvFroLeiVU0kTxPj$iXE>==%%)!^}bidJ5YX!ebpLIFIUw6CP zeof8TIpwlorYL8FvXwer0W2}D(90aKULfv$HKaO~$AcBQhPDeUmx*}m2b5dyLkI)e z+|udw4??A%W>}o@9elHv1;Fu50`rYkVxieM##9I+SNgBAFd{^rC$MBLIpS3HCU`AMvU@P~ zVv)o>4lJ|MMUaFe0;gUkFAs}?FKirmJ^1PV8jVX@=sW!z{q%ePPFEx#BV*HlvcoRa z?5uXUt z2xC>R#;Czdih1m=$fLyMfv0V8e*;`n&gC%kF zxLot@VK0;mHNAp{Lwm6Fp{wygp3X-JwiZMpCUov5@J~JgXpVo)(ffvQKPK^B#**`W zl_vLdQB(#PNelOZj$+G-D3MaWbqovG-}6z%)TX&jW<1 zf}TMB?BMdTTsb!7X83ExD`j$nLWE;by4N|`!xXe&x@~AdUmO_0MS%7Rl1v`+I)ygiile>gMC*hHo1^ z#&@aPX~6!1(~Mx)5)(|9<%~vRWDk!ZMHz+RYDMq!rQd+#+46Tjl&r=&91k`A;j@?U z*Sg$#Q6zp8paG0$<(5_m>W_HDNJsRUrxoN@V314SV@kdMX5-AcS4CP^ng%OA=P>%2 z<3KJADr|q>Avmqd44 zgT*YaAQ!G|ZEc-bP|!uZ=L6Qi!8dG5lXQV20rDs^$AyM2i7$Mg6;rIEstAD?qTrH4M zy9<~hqKlBvj7Sfh9H%Tru!)GI1o|=X7`9iBQ3yej#|SD9B9`o7^k;$7O)&}nx@8g} z2e0WFXY^S<77=;XmF_xC0oJPEU4KKwcBLcDSzC@?#Jpek@W@E27&TZxQtfZageZd6 za{awse}CQwVaLJZ!O8?e5>OJzS2gC{F{^onK80Tm&FaT99)@QdXR9#dP->PMYh#?} zNTnLD9{s^_cE{PozTnDq<%|yh zcZ1Gt>bnC}J{nJZy`&H)OmRd}-|zucLC+^^;{DFSPAM=v&tiDmMpE2PJ%Zz>Q?l60 ztyr?C2d0u=ChUW%CwHkHaTKt8Y=4g?+pZlfvG=a#S#c-+9+}2c$>i*8t!v@s!Oc~f z5a6cz^~GLWKv2-mSm~QVU=h)3!88nd@bYZl{ol9%VHzrc28+163&q`rGatoV2U52+C3OlC__e7rWb%8ws7ZC8UwDpPyPTIc)<5ndf9d11n5pK%d`3}6QyVzB~E z={(*y!u_{8aiJqc+KE1Sk#3zPTs9J5-B9h5`0X-gCg{>-t0=&Ctzh6JOZb7 zeHDO&oF`%VD>65Lp0WB*x`1#0iI7cybf{;KNOy0lFwZ~`f0e~pjh~Ihc1`A0>4_T( ze}|jWgVnPOPFz>vlK|UKfnbcF-a*qT_hH6DHgxyj`&N z~@uo_44+W{)5BZV@CcsRQ zT{2j-24+efh-hvIa0cvk6=@6^- zfSZCWAR7LnO<{e7HiOu1_K!oUg}~xq`_@}RMaSmudR+Ed%d5`kexxuxY1jd+?3mvR zj~1b;h~|#Q&smN9JAMX~r}yiw^nUM(_@$l+XB{KnV_-HRsUn-j_q9yI@mMD@y$x^e zZ7SF{S=g!%HK$fN^s}Py;HH! zh_AqzkC(S$-gv1ix{8o4j>hS9p|*oq_Zu?*3A}<**)ihT_D^r)GvXg=z0Z}D1?&7m z4ooWdbjSX4dL7z%RDDmyL$Awoo3g1Wz8Oo4jH|iQwWy9uPi!3(FxUK&|6Hadf$z zpCaAd*>Ii`%JKQadLXk+Jt483XGgD`4+)y|FM2i2GKvRr<-|djPJ5A!f`L66Qv}Ur zhW%Z@SWRuQh?HipCgi_-zrQPr!h%(^v|33q)3%FBaHjdXrffoE%GNXrZ%`F)Fhdz9 znSH1AgV|#xttw+Nnja5xF0*Q0$rIlQZ4S!$p+O|FBy|y+p|fkzJ#*bTlIt4YJ@bjR z*oqCMsjV8|pQ83zqx+^GP9NsJz%Np~Nt7M0Y@mA*BYUBO;&(w0Ut{upQgE)m4Gyc} zeXq!;1|iXsk#9Y$K%#_@HSrL?9`84AM&;)+pE%{R>(};zibUyg5s#l$7U0&U5Ht>2 zij|=YU_xE%&!x1f#D0KkQ^y?i26f1wsHG zNa?G|7Rw|OLb^zjMK7|0z;aA5R}PkAA^_ttO7+8&%UG8HG1!3++c+t+?RiDl*-}a{zM(bkpNCV}=$(jz5H}2)iNXp7l(v*&&I_BFyA=UyxCr zZ?}vfy&-a9M`<7#L&?peS6+ZTNYM1W%W{Eu|AScpt8YTYxjUR2^l}^yK-cZ6J3P|x zGB?9e-tg79P^C@`~CP1(E))!adXJ6 zgBC*?h^zXA3dNRhJxwTzOxH;$ndfu`YpcOC!&^l3XjqlkWt8o^=>iq6`<9k&lXYSU zU4r+H4k|rkjt?!1jwb8BLQND<=Enj;-B82}+@Pn;X>8a~&Bq7d?Sz88(j8Mp5ZXZw zj%<`O--H>wL#QOws`%_0GIjo2mtU|(=p=`T-zV)mG~<46#a2+5acbL{a_}GL1&)<$ zrY{+~+6l>7`9RTD*K3R@tzn{D)R?;z3~$Kq_V zj1@72-x1zzL{5Kuus9aquf>0RvnYdltSZpg4A_WeGNd6v&!L+ZcNzG4LT*7A`i2m& zDY&4VMGTPiN36WbCpDOCE4Ub&{d`7^}pcL|YW2w=MWs)eoEB7u*-=-3h$?AU)L zajN``#xkIJmW-_pBO%cQ((!F zU5m&jA1^iXH%(e3zLFlYTEdNni!$2irF`D&cx6Rr*&12eFIROsB{4c2bvqq8rM`(x zIP}hEA1$yMGFbkfZfjNfh)x)fd#-}Eed{=RYbYgSM z)%NY_j+a?37v4$B{XIfq_cJDyALx1{%_z0Wg{Ua_9d^jy<#+gmsX%gTB<2Ymm13J~ zGfeoG0v>|}k2KEFb}5;&n1oCX$X zb>%(U+8C$!I}ui{%F%7-j~EWs*Wqkvy814!fqq24Pd?^gM;1N#G})1}DJFh4=u@qZ zFxe~-NHp)O(NEagyNm?*#@O2vc5bfbZosl=pNgYFQHbTxtD9c6&h{6G%^0EC8TWhm$5;4#<6Ry%!8pE;TY<#*cKyYUy<w1j}H)*4{iH8Lw10WR{QRNt&bZavN%;PB+t81%(NtG(om4@rFX<4@hJ z&u@GEawtdhsfqV)@JUHYO3y`^6U!F$1EYX?ne<-!f*!?8iVaka4Q{13u^L+;8rBl;D35pXI7y^?j$I2xfXG$m3T*4Gz?#X^)C|2;^P5PJ66d7CwW2%IR$)O_ zB_gAD43)s0{DDDecXnV#9NC$!mARSkQ~ChqMpjI`yM=p*9G{sH`6`W-Q9r}`0YWq1 zj?Q1mGSj3-)gnAHu?_+N20W;Tug_2XZ#>dOd>ia)CsvZ=9~L9;Xp2*p{O0@`hhBUK zxWk)B3ZdXnhJ}!ome z!iVw!@CoPD7@vi<5GfnybJkU;AaQtG%OliLEug_}bc2S|WLuuv3Aj>Hn*cMd69Z0$ zkD8m1+1X)D?jwi#ipW9{t8SVe$$jbkzZC_qm=tLXE}rz0ekyZmFv(d1GP=U>JW;=K zyTk5%GA%Y$tq9y1Q6Q_s0a@>)qyV60dx^>hl+gl_2;79cL!$Wre5TQ%A!CH#w}u<_5{p0B^o-jec$+=P=P|bqCjuUcUIySwH|PUjpvJEGY{k9jQNg&1G_{p! zSCq?j4?hyF(}&FDm;=n>S?FtRaWA8<;$#S$MT?TDtjOxvpcMXsp`VXm(kWs|KK&}O z`*pf9b!gF(2Azefi*TmQ@<@(`pTx6n1yg0s9QKd25-zM_W{}TSdBEX@<<*O_k?FGi zU62dW&D!f74}+ikhUPqyVW#;QQ+pdcN#Ywx+x^OuseRo|Fa>J9+d+o|b$|};d*HW2 z(+HI}Z%Z{FGk2{uQ7|r305`i2?xsQi0*maoyveZkHdrRk)_;k;dx)2 zpKvUMbea&RjlSCbqK(>b+4y2&z|Y*@cl#;iB;6?d#jkqvoV94p`JHE1_{ibz4QMZn zTrt+>rq>QeM^Kr7Bk#z|FhQT=^PsxA4Dn(UVv%Tk(%)qSk7%|nVxrosF57WMtBWiKYQYZVK@q*$ z;XYbZs1mhY(V?f1{mgh)OV@j{rE#Zssd4CF2wc#DEMVM<`xVQ0@uNdw$8ZR(`U)Dl_@C60M3hoN)*L zi`j0bseZxTErCQzS+GlbE7@h#+V(OL0i?Gdsbqjen#7~a)j}}~WLeI+UZdpXQZ-T1V{B*X7;Z+(IlwqT$@CC`oIs+qn-=62-;DmGXzx_74gL zIH~0_3TuJ*UpZ~eDH)bL)BJUd*YPyUhL2_RBnv{)>E6KQcY3yQYZR4Vp-?`M zHc^2&(aL8~(&(fJwx)q;mF(XK#Z?7U?h{T-7v1XxQ_UB;#ju(W9yZ@prhl;10zR%QBJNdLY2AouVU)WLeQ=2FEyKF1e;j zt-=8hWT5DRb<~cQMzNk1Utg*ziGfcnJ7`bPPWt^OJ!$#9ep@s0fMlzlMheaIVj5(o z`MQ{|7XtG{{6SlV{nAKs-y@)S0OhREpD~O-$nk-cR~Ox0&qO5G1N7p~G;(tGdn7E_ z$C5eeze~y1BCR%+9L!cTU81*Z#tf3)GLp|!K6x&-n*GtQm*V5cj4WpkRzwVS`+-Cv zq1C&_CIvq>0J(Or#_1K<4(SU=mK9<2afQf3RIQJqH-&1hQmjT)$OaBv_-vdpfh6=(KRx35=Q9Nm zr{T7sLjL4&zVfr=>I~f97%7@L;(T`FGv$!wYqzAp+j@U1Wz+ClXO@csKI@+9qSJq!W&(tzVV)FadrfyGn#QA^z2(vJ9?fA(0;@}dLHN_*?-t%Dfg%)pxjr3ViQF%?J;nhu-?m=)V^0sh zTBlJmv|gXts)6i(E*it97}>8wIfoks&0eS@XM>bA>L8;%(86@3OMY$u!r3P@c0>qV zGs1%!C5y-oNw^Z5{Lz;UOuu8|pmVekN^LHBH8Efdx)k@b6;l7@0;t$2<@n@qfR6gJ z`o+>69!!;tf}cnCYJ*iC!^Qtinn4+$tJPIEoi1qujuFfCBCY8=W2Zu^E*U%OYe9^} zWmSM{5w_BwVIz8THZWtQGw&QFUVri`gJ&?|MfNN7Q+zKiVhrKLSD)HfRoz5{7`Ew9 z{Lt6t;%H>scb8r#FL?Z>{)ibS} zqc2aS?YfOFQ!f9?^#NTVQ;a<3<6R=xT(AeK{g{1c&+f_ZB;x;bUc5jPyntk9t&9^L zJ`}GmibcmVVh>+r%w^Dl?2?68c6CJfsxW~t+0smL^AAVwvn8Zd&Y_9Wm$Z9zsJ$Iu zh%zJ)uj<{yd1>e}+3-W$J{4Wb>|x+=B!4XLzx8<}X~kOd-1bxQ>Ec#hylevQlA$%p zC3Dm$In?K8T*v>mD{DHg#2|e5%!Z41=aTtaP&-2*NaTLB}#q>CSqy^Qc;(w@i1opDdJ-wdn)lIHisrR`c?=sm;P7z0I+H=nXRJfWOj<< zH0#jrU?o07VAc?H=`~U(kLCPh!)Q^EL6fl%L8MN@fFXZ}W5i4~Y0GZ&#TF=gRA212 z%;^9?N+Z&VR=sbL`%+Pp4f|ZiDZS-UHY~Zm{gWu-Ta*b<2zum#)R~9^a|u5v8@T2P zl9`*z`(gkuFw5#$E1CA4X z{TDmK#MD9Ca%R7I`m>$Im~4Nr2OyU(*!x%RB}vO^NENk37Ic$Dne>FMOJ7Xcc8Tq2 z#4)8MgGxDaq_=#5+tX>*qjVr6ir0T!ofzM*f<=(EVDO z_=gkV2_5G6*94D0(Omzmov^kc8H8c1UzIZFG}2(RBm7B(B_qO{uM&u&x^{1-#ja;tP$aL{DCI53(K~VOy6`C&3BSaq$xmimJ3F41` zdqAM}PVvz{KA+h`Xn{{D-|k!I2+nHMlOGPK8(>{8Q>JHIY0LGS?@Q5wwqOlRe?vNl zh7cdS-b%$Em436`Q*IK4WQ0i#{Q3Z-l30q=L%xcGcUM&YO8o)&?FNGw4ScBK%aKWs zD;ojNIr&v5U$Ze-;F7)#e6dl$UBj;xLD&`A9`2{2w1Kn-}y#;kHZjhmfGc zmk;L%f7T;bfsjrgf{C;WFhDVp>9<05fy6of=$(sbbAZyrctxYtYaxT*S2l+RuL?mh zB^3%ZduXA!C=7Z|@Ikq`8PISeWdEK38THWChHB~U9ucd?c&bIFmFhy8Pw+k7@+W$g zjvH=oHH@`&!icy*;w*thI{6=)5vT&1?}bn*1QQkclUaes*l&`~`OAuGHcZ>{zS*qr ziM}^rV6p?88endvuAcIjFjmRWb?cC}`r>ZsibdB)KpGzzfsD+H4DOaa1~OtTZbKyC z11A~r!ll?y>R68U-+)euI&B_{N#jtO9TbleoeBaCxPtwM^lic(#<;Parrfx{PL~=V zvV{sx){<~I^{F-%zj1n1zh0XI=E{9D=9EMDIoJSZ$z$GI&M23xa|gxmR~COs&)Gt= zcG#xu-%Fa$08Rp8F>`$8hafKQ$SZU~zzbA>z^JQxQ^-q1{49;wkP>N?E1;xHZ5{Gi zhUaRv?7AIC_>c0G&%tYwgve5D(q$gXPOz+5=3kqXJ&Ey_*3qJ`-l9G7kB>;Gh}ig* zVt(A3NVy@NJ0Nv|-h(xIxopQpa#VIWwh~A;##0^_DEFJbO06b@O`K%ox*SWM?w`|V z+7Q=U6drra!ayX&J9z6cw|6iAT}>1@g8eZk zCpxEntmtUiGKN+<(|o4g^r_SFrOQD51dySD{ZWO$SY7s@0gXestq4|y&=N{e)oyDu zx_)Ij=c2)6a2`{prl?w?^8bXOfyh&jeAKK5N{AvE5Uf1V2CZT~86EoAh@o2W{mtVh z^7Zmy+zJ|>UGLiVXhDIZ3L(@gV{B_H6{+XGeZ!k#iOQ+}^HfOHQSf@(%b!Ri5pL?$ zO!g^yAH?`qgOcO4ebbV=O>rcHU=#Wph9O*S%1WXCDwZ3sPq;|BOtfw8{=ol5L@%;+ z5T_dbs9q0l7|T1PyUq^hRA@PukB{o+$@$!iOY~}bN?P2HM{2uvzE7QE5CZbK=zHF5vQ4BVh^$$QWb>xVMUn7-i`G@ek7`co6#KR=coR)gS*0RD0w;r9=H(@UZ;UoKv z7Y}>1CzBkoP-lE|wj`~FXPY;k?d15=JQJ(G(>37o_hA#9`{xXoD-I5$x(X=jIfy*< z?dNMI0E@3>CPd&h(yl>-M3=7$c)ahZ;>hai>J&G9YJaGZV#$=@805RV9Bq52&2O-`cd|NMtvg!9EbnA3Q$RMM^oF(iBb{!6>J?m3aB zft6emr;Be?biZO<%ov)J==qf~O)$-Ef%UJ0`b7hQqBZ8~8~`CA07ZEE9i;);$UABe z{aj{HftiWRm)o{6y!x7Pv^h6kn>8^?{xOXWlJ$uUvL*`^FRm{sd5qq9{fF~wplyd* z3pdL@GRvn6XqF7)lHZeIBIvKdG%R&_NYQaflIcIoA#F5JR9fGuFB)-G=_~Scg3nm= z$7a^v)P?@X-i_jaM2;}de&A>@L$sbiV8@~e_ue`wP4C=%FD>o=XvD6Vl`AT86zUEZ zQhtMGR*RH%y*bBIc+Tu#YmY3c_2%fFqYY(Y#I5^-_{MqsfX9k*2Ws5wqd(^TLO7-x z7JhAqGi6m5nGe)btoB!6EOkvC5V1~+Y(;wdb)WspY&qLE*zhhGz4c!HT6Z-<0AV9) zX)GYgC8mxyFE&ir$Milc;Q6NWlvh{A78)3i+xCDW6Sp4UXKP=Kijs;fV?%M3G(qnS zFrpy2|^9%^vn0CH*;!+u{ zrM2)6rqRjs_PsxZaP$9u0<96?I%%y22bcKEOO(v~q-3uF6B{rzR1F3k20zny7gsUQ zfu6c_NlgL`W0kNa?EVp~B4?c>X(M0ipv}QqpMJrp=Km?Db&A**PWy1I<#3TZ?6BW! z5_|AB4>T-Tlh`Fhm+qv6&SxU36N=2cVtV(>XxgqZ2uom$31fRvdAa|D=weZLACyJf zB8~+jC8!>US*D|MMMd8|<1_(F*cyIK8p9y;Mgl;oqgXo^biyVe)eDfvWbzl1jS13?>UpjsF z>}2G%=%=g`d6&FjO&!y&fR+3^rRkx~fm_i?b~Me^awOyNVY&eyw}31J^KUH*#AF2E zH8K?6d%DN~`8)%j{vD&(ep-^wrMWD$1k=B+x_TUhq1)NPIF*DkqOI5WT7|fDDumv; z>V!E>5dIuV5p+FQ4TN0cK(9pnS@8lZLF$qgg^>x$J8a{yU`IK|`iIWa7$<*P1KKxr z2Upm#%Dk@UYD-oTA_>s|L#JXb>gV+#iYFA(Tsof%*g+D@m7$;Wmg@j!I9@o;Ov z|GElnC*=2s`*;obVOTVs*;Uz4TZW*_ab%<$~Z{GGILXl8PMN}$mqt8Lp`j9O=S&r^;C zl(>b6o_BMr$#bj56__-`K14-60!nba!6q$!xBT=7G4@-H)6rlM5jUFD2We@NK+wr% zQ6W*sYT6a;7W|6Zb0yVc5?`9q7%>kE|4nAN`b&{sSq5^6dB-oSB~i^Cep_xrd5*NB z8MmI`av?PbFKaxA(03h@Ju67@}r7d7?)j^WT zAoVt_5PGM9#308SBQa4bqkfy5VUlfn;(gDpeTSqXO^tzYJ~D^qRj3Gtq%-P) zd>hqtdcBL?`JZ);i|Qv9aq9K$^A|B$KyfT`b|cTnhm@KNgvn95rM*hmSkdK zE+Rfc0G6!Uzv=@flff(qefj(%QbHCel3fr7d1U(b^B;r6`RKiuF6hf-t-KiU_Qhcw zA}Q!D()8|OU0X!i)-6iWqQ5p~&)n?OZRRY0cGsof)f;dJ+x08(O=#cv5}P-cRBJsk zCxcwSHu>J@PEpzlZ_y~2TOFHZyE&5Y&?f}SU6&xB3&=j2v@mJ_@`-KZDI1!?r@SXUF{opz&~@Ye&870)JVdT+~N;}r&Oeb&GVn4`1ZfA{8MYO`#r7iKYeqvzQC z{rDY)t&u(z)#%;G!^e{=j?7!p-3y+WJF+y4c*FajvV6Q47f#*3Ts^%$db#dxhaxe< zH|_DwyXfZ3HS4G##|$_VukeBY#ZoD7TR6a$fW}`j_Vspw3Y4O)eF3_awuK#S_@;Qy$0`KR`tNb>xdx>*ylUUOO${EVu5OKWj30`xq$f#T| z374u6BgypE-G+v5M-Sd?fl=k!IYZB!8J8R1(Mc`5E^n@>lIENt0b}FL?$zRuO(#8) zW6iHPz#!b76pcSI2;zFPCIYbF%M(NhSJIha2xQtrKVP_T$1`bDKBAnN?_Q{5{TMD@5E z!_)c{iM^z*klJ1|t}xH${lMwOfZfJ$;jxTXylH8buC&~NfxPi3Qr>b+J{BZJjBD4w zCAb!8NqH1;)@)12_`_GX4p67m0_+V_f`?oEwe$kqcUGfB$INB5zXpr5;imy`dhuXg z6A_85CHNYvu2bSCtX5h{HXpRBHy&Mt16vq*md@dwlNgwbKX|43Btak+AP_UYGL3nH z*d{lyM^9y;s_kg_JzTsYH~XmaR*K`AHv^hmd4!7Ph(r`QSPfVo(Z9+hm|`p+{#m{L zA0>cZ;Y?cpqXfDLu`a-UNO`8kjZaynv)&fs`1M#(?GQ9i;B=8wY&F%*RUk4ie#bB# zTU*_1Ty1P=@|IZ+-X9@DsL1O9kq(GLPSBtVMf0CFu8K#JJGr z{m|?>U`_qE{UNOnp*xsY2~{O#w)ZiYvDdnfuvcU@o%!1DHFzsYhwBU2 zJp6IMmGoBW0CLV|s-rV=O*Nz6%2Dq8|H%64s3^PcZMp@Np&Nsc6zMJt1Qh88De0lR zL<9sx2^EG?K|-3Ly9AV$8XAV~7#eRDk`1q{)`NWrUepfh<3tb#7!wg)jV)oxfl!FQ^?*3NPl_iFO; z;O0d`W|PPfD6nW3GPJYACFpyR8Z1LYH?+6(AA;`r-xn?G)I(B%6Uu|NmjAqO>c`ei zsbf0l7FB@?6VvK0>H`~;W+6is^NtS0S@WqDb&NjIRE+e_YnaPMC8{^$ejcvieE&!8 zHyBW$Q=nA-_Rp$nzARXX%s9zfaKyv}H!^gJKbxaMi+&CVR*H^vp!y_+2N#KVtLrb# z5_@L7_sw*X3HkygvSOmhyGsPpwd7s+qDo)}lckc09|6P#W5c5tE`9X72%U0)tY>5@ zEs_%N8rd9D@`T-2m)X%;G4)F~bSZ3}^MkoQ4&QMl*+3`d?X~nUred_u;_*Heu(fq4 z>dsdkwt7b@&4jc-uc8@*7yT$4{4X)u$~lLe8jArlQSJh=D>D<2t*KQBx+^I-MZ*??B!6`_ zZ~K}%;JL=zUE}B)Kb&a)XHuB;7YPwwdBrBi=ws7O7*W=ub=XVA1x$NbHn*P^BnD5d3BNtpbX66 zC|z$&U;Au~zdwovOOCxT(@|-Lf%$xa_+&$|sdg_$UJ~?&urY|13u=#Ze!(P$^XnGq ze82?P?@VWmRW38mk}14~$>|sg%d=pnmjLcJvmFBsl&Pv-^y$ej1i!9FQb_UzNO8yn z*EOVYPS5qZ7HV~(ZSl(5TG+k`eFmdwUP3P&3Z)uLFWFer&*zJuleK0TR4fJjyhyOz z^Bo+^8Q~YfFwk{?cXd|-A-Lijcxk09Rt%#IG7H8O73!JlFLdkKBSHjVdY z>HW*CS!qb5PDTkmo5v*G*3(p8U2C51^Ixk4wU#c6ze*zg17h87R3*Re4xERKaJ~~U z3qV<2TUu4;CWGz_lyheWE+mGg`W{JXUv9<`GV?4aByb8eW^1UsoPVVaCFtOkS;p~! z3Tyt!UmH7?L$JpwtbqFzq*^Qu=&E$IC5?#GZC|l^Qn%eMT=Wd!0 zrSz|%5qEfs0CMv5dk)s0D?J+2V-i4Y^pmG=BFZFX-!q#mciXk?%;AMisC7yax?YiA zJ%d-hH5+Llmh|b9L9ZGe;g)9va&5rX&8;KDmvIB9-p@!Ti#HQvY0-PU-SNCDR;1pd z*Z;R%8pDB^SU&CG*tN*Cp*K59Adb5+gU3FT3~G?JK2d~XMJt(iKTS6CxF#*d{y6#h z)R?`yys|bsM@t-mEtqhEq!264W{-PXrX};El|C8yT|}+%U}C@ zdpJY)y-ZHx)0RaX{WoHvulxMbC*jC6(=R7XR&1jcY9RPc=oXdScUoj5=titwCM2F% zL4LjR^Om=}UL^pC39cg%GIex8(0%^ueW2FBXbIp*OB5aERE~B|A*y&kG7yyPZ+9gh zFo38c2mhOeq9eOWDWQ79bBrDcmX9Utr(shn1Cmq{e|8ps5#e$jx&$!XL&|JXmOEfR z_I@&gk`8B!1{E|?o(-Z~eF#mjVBy)LXYi?-qe{L`)_W(v0>pL}!akz1nXr%*e=O$1 zKNho)@sGuzmtZr8OI;GjD5 zf=<(fx_RBW<{qL(%}5u=$G5g*~C?lSQP7uCz`6jn$FIqh#mjCgR|5LQf9jK9cQW9` zCY${v?2-{*zbi4j)oc&CE-o60Vhul`^mvJ-KRV6HJLg7Z2k0Uji|LX+jUPvRzhPnU zZ;{@NutM&->pC}<$GtwjbmI8C#%l^B1?^qFc&u4u(DUfl)p22>h5f=i0ju9d)`#?| zN6_H5+X4QqpL(-qgqeC;&dDfF9;&QiI}0;~?m=k@50~}vbgkW4!j35BPZO^@Hc$62 za9y8XoDz*R_`45f|Lntfsw)A%E0^UQ|6cqbP;E{m22b9s+m;+@q_Z&Gc>J8$o$lpM z?ZH^r6(%wDc@utyjM}5ZU(RlgPiz!frg2X90#4ocu#KKsT=xAUHq!U5;LNzTh(;d>!utl!!TnWTU1ZrPAt$3%r*>v%~FaMO}_jWDX!<>xsZ zNBs}cXaCQqfecuRKZgx7I-1b1Vmel-G5|0Yp7HO=jc%v4K^tNF70_w;@BS7P9By(!^%q&&*}IAZRYo4iwlAIm9U zdu6WsQL+PaDd`jt#ENl=sYX6WGL_ZW>=5~W8m_*s5&oq_KFdV)woBWK#*Ue)ujDO~ zA0O-)${GI~tI^0r&?oNFwgN54Z%?o$Ws5P*JSB}Bb0s9!G*ZW#RK@n6AzTh7*3FqO zDkwU`v#19WCkD+(h|rypUPuAM7pZoH^RKKHB7 zmXR`}>mK8#9^?MiwdcpHLj>hKQc_Y*Qtf_b36E~UDpZMGj^(W+l0&xu{OaFV`z!|# z)7I)kLf}C!q668zL>lOF@Iw^EwLohafAk@HinZ~$DZa>8nuVtX)8SJ1MYjsXthow7 zB@rxLpyumhG}GlOj`#Mg41`c3HfdFQ0IyKTVi=5lPJl z*TNC@5YR1z)%AR&8BD&1^JW{M*#3JPCG^|G4!K>vjVw2V^U$*nl`-l139I#QpQDS< zP!q$_MWYM6{8pqPjr@4;99E#e`kn+Sfg97PN>bAL_i8 zSao`h+>`1?x>tPmIX_xlKVB^;2a+?LV`F1O1jsdtZBab&tS+i^RIoo@?w8J}f4qjQ z5XcscqRMjapj$w}vVxfu9;V{k6+^-jKv87v$Mu-fo`4OPA)GGGyhgcpDJPv?UJ0bOGzqeD9AQFYI1Ul>Bzi__w$K|ylaTtOBD|ebjk2%G3F5b*$DE7KVl9p{{^O}yOMe@o=q2K(13xkb&%zM+n6z7jr7W+ltUSus zw~p4=KiCY|b;fZD+sxjuvY>2j;3JF7Cg;vw@@|b`(SA>^X?>OBI;PA8@6EWxqF`4W zut>7kmO{0~s#G3kK2_z&vZW-N+*4A;tU+V{BlwK##+kh4uO`VjrbwYi=1?0xoB2i3 zS*w({h}Kgi5@e~gKK|+NqYDgNz_xR9#5HNax2BQ5HVsS+BJVbxd~#o{Ec-sQJphMG zVfnO8u=LSm^j~CBbcMWgMuJ~pg693%s$0vUPxI;3z?)*NTfWAplzL%6=aNOoYMgMA zfFWW;=lv=&@iyfg^v_x7DS0LX|RGW6J-yg)|zl zPShb8-IuI4+pE?g`_CjYDIE_!+OL1e*047|ymc|cE;n!mRYMMTuFu%V;-JYm2C-)&z_UA ztqNFwvCsszWD);m$L$*~<0TXhZ64sFlOp8x0S|MHJ-tWaHZ)?ELBHREQfWt(22#j3 z*gLr78z)1OiYy=Zjs!%)GdT43Bik3&u4i8%!5O06x5dJ4ky)IpUJ3jc2Q?<%$BgL-V~(s=$oH&dAxgXutJAebcQ99E6i9k+;5aV` zgKmw!h5!7%jPEVvshXGnw+%xlFSoGz%KJeVf9SG=@2flU7vYO z)tx&u94C)S@H*?Lu|xX#gI2ARWtH8C7EZtak6T++Xjtva>k)I!L%Wti2xi1AAcbX~ zdk2ZxD5;8YG1Rzucp$*A+aN|k`%m@&WGyZY_>-m4W*Ild5`Bcexk&C^(iFf+QB12M zAYo4kyZ%JE5#NjKSOwClZ}JSI6=CE%gG+!cALA(>e-UuLYRmvZeLp^^UV0UJmJb;p z^=cyq$8_}^gylcMGmQb9lEjdze1NP`?*j@&1E0dN@7_AM%uu4hcUD0Q5}q9nGLK>6 zGg;Hy*AyYABa_d6e0Fnwy<8~Weusi5%`-XJOPt}qolr;O)L>d)!^2rq@RAqd>HJLo zvsyx8{UeB)5*sxGOre@bpeecd`figF@redJLLRiwI=!zkw8$W? zg+9$MqA~C-CL7*_2oWs;!B05QO>PG{6j^yQnbe^BgoU=PjZK-II1#4RK|%7*foxLEf<2lzQ*l>FN0gc&&8x!amDTwpq0nTcE~r3&uXj$T%b# z`DfSe48#@?uRbKsu!YkTW`ij|CGbpT$pcbEW(fV;b%g z^!5g7&AaL^=Cv#*MA!E@b}kktyu8@1uibt%;oJ2~*zsJ_XaDzb@@h4SCDJ(nl_h!G zrF%)kc;&k1{$;j_-cS=p;IoYJt^f4u9)NE=^5w&`)n$*f;(zd&ybf^hM~Vn$kK*|P zM%&&nY6pfkva~vr&Ps~hW|;1K5#iqnD}bJA{m)M5v5?+(dS5A|KlHfv{R zJ!?a)+n`KQIFe##yWrJax+Db?NLORGhZCuhcB}W zyHGua^uxHKv1{?l$y*|*UIUdxw_kVW@ z_8ReiM`-m#+H_V?xxwm4flTK4u#wOAU)5gH+@wo$l6L!7uH0irLJ&3;Z&hx=swLWD zvYR)#U!tC41&cR4_5JVE65I+pKMQVzF6~p}A?oT@r6w%>dOpvAhbyLu6YLFVq%N%%}%w%VcrEEQsc0a{AocL)HBQGe?kUdT%Pj9X7*6@rI z*tH~J!IR047NZsk)_mQf%=p%`f zjG?boU}2!#xbT9{xk0JxE5mqp>0J^1``U?&ZiiRh+xYxVQrgy7%XI#z4;I^-(>fguUheE@e$D5`l4G0BQdrC~ zr}=V+lMfx?)E{B7>b%P8=Ujbt5>JKm*lN04<(BzlC!ca6FpwkHx9trr3QS-h`5<7P zOrXk|Eb#mTN6tVYYf@L0G<~(3|CpIa;XjB~aJA;btTzX539uY7FUnTUz!QSlr|)yz zXQfFKj0_t2^6v%A9DDk2lYP1_6MUqW*EZ{KHt33hGjh3nTDoR$S{i6!b7wVd;F|Fnhr5FQ;ooGd5xvPrwAxqPugI+4j5|sH;)jkaVW7Jp#=1B46Dh32 z|6Q+ktot~em=XI@z> z16US-wTuBMv2DObJN*z=kmQ@8I01`d^6us(00^Y$1qa`dL6h#EgD(wYW@Ev1B!Ky) z-6QO+zlnRBv`+NH?4A0fbS+Kh7$8sxb&XE-PiB6Ru5O?qlUPLs!5d#q`w zbx-O}qLD~^Gr@JRK``(F0@UHBKF@-jXAU>_*|{i%=M zPSizau3T5YJ;eg0`HZY~d2%RSuREBb-HY#7litTxMBs15O|1Mt?@7P+pG9~PhVjyt zR9EbUQb?sG2I3&eFJHC7G#%+FIM!p)l`#4XAT|?0CA#+fpk8d4TMA~F(D?Pdpoi9i|||Ef(^r2p9>ZA|{288hez)d^|2!=Z+YmD9CSN%1W4Yp!w;52HTJ%L(+Q zXhSwLc+l3bu7K0a)t?~=304xzi~az%Ixr;lmH*H@{zgC`%(ICQzN;!hi>>4w*cv8= zZ*&^nbnV%n*mKQ@gHUiM@Uz+nE3ucvATJ}>? z-e;0GJAGtbdIj8n(&*zxI%j@NG_tJTtgC(uG@y>U<{{IH9_7E~RI+?t8j--0e;9=@ zXg&w`V>h&L@Mfz4p1fEqYn8JZ;$4_^xA1E-bv_)IaF*2uZ8SCd8Fx^63luf*Zp(0^ z^6QFXZ@0iwK_Be*>CvwJN>O_Sbhz=Rk%n!g+w~Ncs-EAJF&4&A%)Gla5lFemMyak9 zr^~bg4CylWsY32oHwlMlL`4Sl9?;*u5l4orfk6AH2#nA;603={{papUtnR(=19q3bfs?zX?le958VY&3U$stS zh-l|=xUC4~m{Yx*30to;)~ma7hKp!1nf7(dIRf;8?Pg#eW1Q?McDVym zXw{G5`duuJl7jo@1n_dmuTfOLywvN58BfSJk^!^JkgC$$wF3583 z6w(cYzI}#UFtV=l14GQY(IA~Da-03tIX&XX-IfiS32nJU|A1{XpQYIQYsH{5)7Q@A z7VL>_Cd=>EphX?<{n$t)xx8D{5HvW4CW+zXW zj)la*zQmAP87ct_drIJhfi--)$Qnk`S#8SGjei%Pfr3BOW3<>pcz-F|z42&K-&Q%2 z{(BG;vDDd2+YEE_DLHgsc}~;lz){9nYCpC>*{;YswCcl&gB8 zW^iTcBo|&>GdtT6-gpr(zxFc84Z%3Jp7Dfzz4nm$b|xm~&?vqOm=D;=yN5Kh)}Wo6 z$rKYAwMaB}P?J9TQr2KBMp~BNtvbBW&qK`9VRPf^;Eg_xZ$g4QzS+F@yScyJ{|4+$ z@c*~BSXtv-npYNH+;lElN{~D{fu)SrzM<5~&bpI{&9On7f#kQUm@u-f8xsX47*t_y zPpJ|flp4)CLn<%tDxkOzznMZDNMj%w+DzWL{0i5eP-)LXIbkG>+22|p2qpKKy%W@F zO6R}QGtpI}-nbl?L^-$UJ$9Ml=Y+}mTT9u)xz1(M1LM0?LVC13p@{hG`;7KeCzA(uJM$e{F`QNV zpgfszo!D)tPE-jaln+suPq9sA zHwjfstSOrNDM z3I9yH_q*3bucoMR41rjWme?qqI@|C-=kpa9DUdGCw*&ma;etdVA8yd$7HJLfsO5CI z%~7>{Mn@*fe@TY#qxL81{MK=075 zdt6L)Pz+3cw(p$uL5Nm_%qolPrN;!7-LR@H?69$W0d>GPkTsQ|9+JL{kBtC%(#Z

    >4NroOWFK|}CGoCcRyU8rxwezvWa#T=FYW>kBR@K4&%t(1; zbG=whR=k&Rl;>3%F_%|rrfn<}&z*M z;UN#X7stD-JB7Y4A2d@tx>>*9IWqE@4#Kxf^{c<4+>z|JpKDyie7+Tia=bt}5^#*q zj5qfHc)mlq%e(-T-@b2?3W}Qb#9$VWGtQbwB z$R;lun1BXNHF8LQ9i>k#s`!}a@dwTi%LwLm{$meag4w&iTO=$a`3ogp!;87@`CO@g z%T9xIn9E{iT60_gT-opz$65;K#0h8dr|xx}9g^{HcLzmAR#3m)7Xn~5_Zhvu*cUe9 zbvON>NUPaoRm+P)FBU-K9zaP;bo;GcYN%b4kJaic_musCSRqihN+nILeuD6PA7u~b z;1vO;=Wq0^7pwIOBC4ginfHl&>(*y9K^&0ChT^9~(F*Frw}7t&GHfsH>F%WYku<}M zJk-i5Dp&jJ^(&!YdGz*P8wQ;1!_(BbvjSYIpbtIeq@1zz5(Kxu-bm7<{=vw1-G(Lo z-)gJ66wZia??A2hipEXQFw-%{B2S#%cNW2zy{k{8s)F!ympDQ8^b`Vl2E>*}IEyy{ zO=w>%qV3hQsBDFFG^=w}jwMVuQ~-b;Z?N_|MacNA0oL3EuW*yh`8FB*%YmC113=Bv z93b-30C3K-8#ivzco-K)iM~~o$Vj4$X|(^6VX97vV^DC#Vdqf(9o0h0;p3vyqIRYd zeN$b3F!`{uIGR?l?bpyuj8F+)A8LoewYF*Wm7NRBX(PJ#vYm;(zy`fwVX@Dmd-22q z{ELGtsLk^5Mi?U4^$rqGPV$Ja`!JNz{f8+WnI(!$NA16SiI~l!4uu5<=G1)i-l<(Y7s^V1`= zP~u_E8&PF7(zi?H{ksp1UMjCbz)lFMH0W}gy$HAigJOAtQJWNI=&n@tRul0$Xf(hH zNx=AC_1%8NSuj)mNC|W6Yj!ySZI&CHU2Mq=_L3Iu~?MlOCHSNDDd2H&8 zz(Z)?m&!rEn-ZHkzBcZWktb(XC^_D}(!0kyiS>5%XA_%tCp`g^@1zJt_#@* zABIo)`;@9#(!O4Qq9b{SrRWmOFen}*gl$xs3hAW1D@J^9TgA1$iDg5#BG>Gs%YQ2M z;?$~o;gjuJjM^Dm8ZLF*|Ba~vHep--%>Dn!kK%-R%OcOLwx4mKZ<{oZw!<~J`hxb%9wrLqucit4C0FIF6gDf8pq%Y0M8@s8F z;U6sknTecUb}^6|3RAGFmV&ENCAQdlDizYTzJGFZV@RNP5vYh66q?rk$c_B13px2q z6NeD=W-w@xCdknzby*lnJks{@#e9fOSXcN3*NZK-RGTGXs>msQ!fg?TN~}L^rAtc6 z!{_4=Bp)2bYcDh=ND!s2 zr+BOvHj{RbafHZS{T^{6u7KT|5kQU=SzZp?^qM9+8cO)>E|5m-EkhTa8{L_G6}iz#_R|!+=}p=i^>zh zm#KnGvYu{v+YMK&jq&CsA_D2EFg2fnMZXWkrfl(x8c^l@f`$AHmMZuM%ww9}yw4?0 zRzNcXz=dr^CS2c39W?E3Fzj2W+JvTbErJ@3`=4^-W$D420OF1JTZ1Y7lAPmvm4hUj zs2bWk|CPTbD5ugw!k8=P@mL+H~J$guYZby9TCJmfLi9 zEFb)-G%e;pzxiU;Mqn2@7ke^-+$G*X}-}^Ld(mcePs?>BQPgNBNTZ3Erq}k>dj`% zHwW9%Fr2QRpsy}kv4_3Cms=}*>+Tg#o+VORqp{3!_3)s?f;K@<(SlS{7v~3X&uz2C0>Cv- zu87+8no7X{SMesX;mwMFP5*?;X@A(O)E12^(?1yZq=ZZJGANz&`ispc(%4Qr*imOJ=L3^-5Lb`Cx;d~I4r zBin=68c?_J1ww-#NwvHuAD2K5gvvUZmR_$N$BUJ~TXj-%P0x)N>=tc)d|+j2t<=rp zB1xTfs-d%ZC)62kSZeg#r)9U4HKEBFw6j_98J{EkEcNXoXGvvC)2u{!Tf^ug+nWME%Mq!RWP|swf%P zUF4-xi%>D)C`$Gd*Lz=L_$8O?7W}(i2(9`N5CbSeY*sWg`A%b=m@HpgJnp1ul`7Yf ze6=n#450b?f4k2h8N%zQz~h2t36PXNUJX`8BZ*e;iJ|H0tU>2w<>zFDgcR&!P?DF? z;wu~yK%NuUV{91`a)Zbqxj;EmmDF1@X#9lN)ZOg`Fd!}#S?4ywA=NL@C|zDEgUps` z>6=ffONPlM9c~4C_ODY=SXF>&ZQR#t6I~&ul3hwYE3sOOMn0(D7rT@aG(l4JVDR2( zyUaGB^4^|kY%Np1c5$J#nyIAT*)NDPgukjAva2oe^4srxe7t(iKx);i$xws_Z!(wxt0#_a`!BciE#qg0=oyAY^9 zGp{=~l{N3Fsjj+It(oipLc!|MP%(7678aOwokW{W&5FiB#-5A{Gb$=rlNk+ak|iYE z3KAY^jzG|q0x(M#>Qiw!%ysr593fJ_%*|gJEe{FZcD-XCRrq5sPyVB!NE(-E-Q~V_ zvNyoPnuHN_MC_`fVc#CJ-h4HJ|B5Ablh=P3NcWh_NUz`3HmUM6J87O6e>Bo1Q^SV(b@UN! zo_(J04i|vRgQn6O5F!eqEKa)M@tpG849s?}_UjrTt)T+=HgwMq1youp{D4Hu1UCy) zyKI-8ajmF`1ODHR$~R9e-+PA-SBy{6AvJ!$1s15rT?ZC?4UFTm#+EAN&~kQCxR|#( zT}kZT@3c%E84On|T>uj;NgHAPI+jo*l9#!aE6hq7eOI?~Pbf1QnJb)7x>J|Ts^&H+N} zRtiOPyc^4eX@z-d?I{QViS?v$*p~rdTB>)*-^3YXUYA%1UN&Np__GjAsxgcGMv*Dn zOBl)tMe>AjmUnAn;>o7SZurGK6>y~me@O&ppEH%xdR0gg-e-;b{L5KhtYw)aufv6a zs>ZjKC`rOG-1COux%c(CZ#?498vDKj5rneG`v2yRho^o4(brof}!awfnx zW}?nw0Pv3ZHVQ)?)5uJ&Y!}DKtrRbpx?ncDK#Wc_X>=^K(Z>8pwt=2SBJs9$z;y!O zpKwIk`@>&}$-2H!r>_2}#6+Mw^ogR=v3gzD2e38_eI|N)r^ig-Gk@MR$1F#&eQfKtefdo`OB zk*q|Hr)a7}q10T+)}-Dc5vI6vexnSaKKN-c+oaP{_243q(#oI0;SMkwoDD#F0MxAd z$?lWXT|3DZyKaY>HA=PTGj%|M#wbatXj~$dJ=sM9Q9}Ny(mT1D-rr?a;VNQN0)NE0 zozby+t%f){T*pdVWc;y^9;E451|e8#eRy%besuDR7RPtsA3%z5LtVY4?_P5R15cVu zdDFS^Oct_F=8NoPpsq}x&LEgI09%a@C8i$3I^@oxr-HZIH6QI1*Vfk3ab~Mr+Eoe8 z2;af`8tJlBzcMu^f(5viGgZYCMUuotiP z;YpQkL5ZW<$Jx_(4NtQMsZPaEWN_K7gSqW`7mhFA zmJkI=ee6E%xd1>9GRE=5@Ez-t)|v=mLB`w$Zk><&~V0u5+xQ)0lwM&l6t5ux>_W4ReaI zC2}Jb_r@)@g|QP!%cHHk0;dbagLb5R!W|{X5=PfOHC50#?!OIKa>(Klp}7kl|hRVPp5dDd!t z2&wc)-BFa|$owyMeHWKVi&3f!XLF;ah?`+GMX={S%kY^Ot^*muJtFSwfKLseOC!?7 zewz)-s&x`6@k)t z9t&^Dy5_%F6%HAYSRo6rk)XryE|A@lOxv@bujM$kM;{fvuL#vMeM&OxxcCVJ8bgD+vJLlpk|DkvVvJu`?-kFOSm&&30Vv?tWy0!KizxK z5RSBd4<*4NQHH`5p6JADv}E2CL)@y;IhxqK7(PD{v8pT?ZZsrn-Q9mIkj#E9QuJyT z?<)(US@KS?-xo`tqv6dU<*&ma-gVvzo5XE=h0xQ}hmADLepV?Bv`Xrjvg5-ZwJ|VO z7dJw?-=UyDiq5`!ciI%`hGu!b^Efp=-L#zQEk2DBnJfh4{ZT`YDGTDwnt`!T`i4n0 z*YXPi+R*+5R=)m+rHq^Je^rc#uD+%G5232Ah!w=J>&Z6kgp5;{W?;3a4w}BkfvR`e z^gTr-jNbEHe|hkjjUjo<1Dl)M#i?07J;L87V0YCRp`~w+8(T9ib4`NM&ZowaVHMV1 zeb0&TwiP&j$Xn`#TwzLHsjHL`!xN>Fc?B+wK}YX4K!q;}a3#guhhZM0G&=7EUt0-0 zr5T!MeLYu-cONhLfm-TfDc8lwt)vm@lQr`&Cg?Z&`ZH8_PHdAZ_Bgh>dXLFy_;KOe zFF#Vl0{<;&;bPfM^+}aJ=UN`?YFoHfTJE(fJKZf_T4uMYtpEv_?OTG&$ zCbd+;f}aG~?ri#jp+JDcB(9B9ON+DO`rX{LVYYifTXWK@#&*!*O3pl3gXXJSH^_)s zR0MR~%RS)L7I;_vsq5?tDrSiQs4lbiV)A5YynhX=sgf~bD~t+RV|gdmHG;I@VPjIG zRQc&()^sqEU*a$=#BK*n&)A3j=6vU4f1|!uxPV~vkLG;Z3xYz;#h*&>*kn$~E8BPm zEZ-fA8wgcu2yMyhL-{yN=>jm3JIQ0$SNj}3Buvfyk?#iW1uJIJgpca8D=d_kRSNK% zx#B>HhUmMfg+2}!EYLW8wBW(q<#~wNk6skPWpnr(00k`hNdvgu$8~^OL>XTkrNSrR z2t5WWSuoJyWX8nm$p)-hVDZOmo~+B77>Pm}OU%H1ukLV`J=3I6{VaDKhJLFQiPET$G0}u)|{xqo0EqQEcN0Ca$@~EIhQ=;#FrHk*Qa?U*6rBmZq5u(m-{wH ziM%oyuhJO|y%ihM<0=VtyxyOA+|Gt&0{WneG^MqoHq?3loY&_oH)jthpN z-UW+U@ej4HUfnBcHuBroOd?A^?bOvC>qKb^JB*7~)ULSN3xu>U_Ac%j;Asg6Q$9wY zFz~@r16FWJfeu=^F&#eI9KUg$ZJ%7iXK}8)eC>*;Cu#oYO=JIoRxks%hinV2l6TUf z=5J;`HpWeCo2DZ}jXk*!6OJ}FY+Cxpl1>)OY7d!`FJ=uEh}S{ zr<9~($0hi*eb`Q&j`}Yn2@Ah^SSKMTdCqdk5b+I_zK?Q<6#rwJBmwhR6QEE>N`8j8 zb(Jqj+BPzlu&%Je6T{}hOYd+ge z{KTsdh$K!6rS=e1)Ymt~!_b}|2Zn+0fM=gtroQDT|R5acJa(>%e2wVtvhQ%Z@t78|rVjCn|%D9FUh3DPR&gum;(=s^Y}TdK#f;mUpe` z(MV9)LPE&NRHcWszfV`n1J!G1N^F3n7Xa0BW%3wzz7!%)(08!0(fOp%$5mmxOcC#y z=ON8)O1n6F^!!NSE_$~V$W8Pc6{kuds^cmNB;#q*2LJ?Rt&yqXi~!R*;@iA+Za!7# zdt^pN*7Rm|X+M0kM%rrVIqRU+*3;gy*b)2pS45z^Cg2)pg78kV=Z>uTGA+zP+65M( zlv|s>Cu1-|6nTPsdx2*!WwW%7sg0KH|bi}cOAf3wE1~4#*3FyOlh7f`!P{j#m zX>G9}<)`_X4~EfQ(c?Hx2E1coFloKZc{)h#B{rklM2?mYS0ZR}U6^l5VytoJpaS5- zcb_gjRm4=n{c^-f6wIRZ)#J+peBxPS?!bKt#K95kV|5564yF>z-XvS?0|Ihy!k|5# z4%FJk5zNQRMYnh~sc^K`<3I(viCBPnEO>3E2=4y;=z>RrdFs6zLmJ=3)R7iPelvOX zZK%7xPtxz-zjecWhgIJz%}{C^nARV*@=30W9_84-80tSkVY)j$&6&+s)XKa$xI*J15uB9sbaAR<%Jt;ktQk@*xopR*I0#Yb#1b{xny_rk3U95MWF?)e5S-#J*QkuHQvYDHWlmU>*l9Qj{0AmOd7 zlWwQr9?0gucR~bz6@Mx5KAAzoNZ>tkvsXcPJOQYKVk=iuErKVokQ0Ch#fM{t$+ zSV-UMB)xnvlI^Ydq}_nOV@7f#z9J=65-~NetH*7fI7fC5?2c>S1|NPU34$~^BkM{y zq{wMV2@0!lh@IzEv!%zDZM4{)iYvOZc)U=A{`@G>ekt1tS~^m%*+1H@*un^wSKbPF zxkC%G-X0Xc&nbqOCh%%%J=2SNu!S3S1;vSbAo;LS>L4D#V8R>-IklfvgmA{5&|Kri zy7T79CtGKn9{tX;&ez}G)^a&;(GN9B;~VSmUupalTkZxe(fs=G!Sk~`-4ZlkY9n|x zC*Zs}O6>J#1>^XWrCj;Am?tER$Jsc+3l$$URz4pLzhdb;QQ*kO|Far-+&DDs`(F{- zLxP{jFP8_8A!u;hG6_ZTq&vaoki#l%=1XrdE-KgftP|~-nBPv9B;PDLTxV3zc+sFw zhl>Zkh?Vs%_sP5QhlufRN=5Nve34r*GTRkrNWOp~^t2%!oJ!`~O+*AXl}3#shk;*P zUM*_f()X--W~9Y?t$v_Q?Sn~)#lC0nIsOP|mT#BzaZyY-_vVhOS*QWlbUDLlMO;RW zqGLHP3TED*M~RDzes%tNg89y-@w4%WzKbuL9Vn2&Ih6;r1c8aC4O4ZmU{5WpSC6y20Gp-iY*TMWyqi}HQJ3F&F5}Uor)$$Z1ETlf_ ze349L9tD49@|^9h#0Rxvc2>;z*h7+FTlf!HN7=BU?P7{YivHC*a_#Sq-H&(*Ahc0y zw00Q`+L&K)&Y!Kso$5QTA9$Jc%tgyg4jDR1v0Jj(I4LWc*VNjbMc*{eUa$1zuB7w1 zv}6)K9H@oKhQGt@*vPzFFEoGRiwyp#ddiB211-}_KqiNgT=WcPq1Au)e%}MSF#Bn{ zhr(GgL~^SBu6XS>!NLc+t;MOXN&)*<4Eveoouw`hhpdSOE4kuPr@V0I6<~LAN-SnMrms$7#7cju@_z~VbO?1cW8#yN_rjmy`voM@XPK6&ek zbi-t(w37JyRKYkQgiorU-S6L8CGH)MZ_#~}+mmg}HXO^;Z8fM&+Wjzsel=MW9kxGb zfbH^Hm+8cQC~%th(Zl_S1?_kGZuAE0-PsCo|`vbK)`?84wPN-EO~t5TC8zD$)5L# zDoZV>)=l($WqGKh%$op0+^#_oHF-G>)^$qE`8Q)5EhY164#6Dk+fv3jd!QC&MSZp% z;||iW5mDS;J3DoC;iL1mPYi6h!?&?NJ#|ZHn*E||m%ea+__u`az(`?(xZ;pwX(Rp` zD28RP*X(v{@m*9*u=z+@AdA&+_w+t{Lt39~z;h8xfL zyBng2955=$R-xm0aa}r}{h!tHytQoz0HGSK1cCr~&$SIqfq4!TOA2A)m)rf$#)!dy z%~kJYGW3$79i$c&*3yQ>GAe$5oI~W&CP4T=8^M`kTuCe4HTmRHK&%)AG-OLas?u#+ z59%I%A;#ThZZY=JS%5#SEV2o`IbT?(ckV~sV=6260Q08mrd!&-22>9kfms^>z-JgjNR7{sOVg>lw5Q)6E1LI(1KeG=auaoAxF!L>e5qp_ zfVKa{yUk7VCm-|Xme_OVU+v3sqYmyd_1Bw>ik zqdD{me!gZQ$HhSE`Fvg1>O2(Job>eL^{_~>uhQND_8cg8)NtLuCQyMkfr`yrFQ|YC zbOp&ev`btSQ+;M5+n5me@X*b`W5R8{dg?46EvC%G&w0ddWfJ_A3_EtGA1YN@fzQ^3 zY4{xdc9@DRZh3DdBFpmX@@jt4(b2D?69r=4iUxEvW``^O_S#z#7|QhSV2lsDL>sKLRoCqkP80?B1$naw*@2s2JTT z)qNlL<2iR%hsPq!LtHo7&CAdbRuG&l;%F38gG@0~t~}ef_+3kbfajrF%Kiq=Svi)d z#fYr7Cj*!Nkr0IOg#zXzK9c?Z|A_j^uqeB(ZDNo?6b6t`iJ?0L=^9Ev%Ai}ik(Tb3 zE|o3;>F#cj?iLuNyZgHa@8|t~dGJFn_TH=4xz07MM`$}xIa%SU=^SU-IKU+Y zRjc@%E|>J0e)SASux41cML%{M^&n`f9w7Dwh8z|ur#kTvMKfHh!JQdkb<*vChwGX3 zZfAmanavSz{kwQ?rshB<*0Fee=DmB@OS0K>lKzb~YI<~f-`@pz!D51Zv+9Kzzh>9g zeYzg8UfN(97Pirq`Ue@4$BR zHsp3P{cpAIDD7&2;gP;yZ&SZ^aLNQK^JS3DO2ju)C3|DWb9mly)NY%Vx#0XQh)$w) z(#~s69M%lzQBVtTdntYy+3b`1-|fJJ!Owh!c5^Unoau0+NGh861cP&lclcQHh4Kb{ zwQ{~J_DLXxehwol;51JUt_;Uhc;Tfh7jE5MIjPwn&a(pMKl`R{F;F>GW|X`gogX*L zr*;X8PKa}T#~-GyY-N~v0(^*w3(Rx4JUKzpRbG?`jpB`vfZA>%3h4mNR9ot#JP7Q^5KA2u(W1U%2g}_y+i|sBIU?()%daf zg4}nJ2FU!hy0Hrico9z9*0TI@d@O_``~P;6dY z58eDiRmpLyY`dhu$E~<;oAoC()Om-H2IWwL>G%1lPT_FK?dJJiU(hz?GjF%M4R50o ze1r5!bH6*;M};$)U0)qdC#jASk&!!iQL!IU0JJO>Gj>LE;ru%$Iqvt@RcqbCDde4; zJkkWo6BpsnY8MM{d~Xv;UPrEoAOemw@UZt*>~A_k(&g(nCN&oc8HJgLM2G8LeR>=ohEvP7KlRuv$H$Qq*&2qn;oiJ-X#G6QASwX}3>d7VqLxGr-X@Ze_ zfI4-q0tFl`m_XO<1yW08JdgQ(hH`z;N2@?q9o{pxsdYYeq1RpcZcZ)tbZh?{G8IUR za_Gu5c>crQ#b#2-OfU=lY>UhtxJxOWNjA?fd2UF@i{zcp?Q~~)UWq%`O66OrP201w zlx9Zo_Js@Y@mvoF3c(5ZlO(}<4j-vA=Fu|xbU)+KKj_{a1g5OpivAo~tu>9X48@1o zvn&!fLJ*iWr_fu~tYsyi2%T=hwtU;@FsX~3W2w(j&n=mW_;wQ@L`Lm68Za!f1iNq&VZqeV_R7U72c%eq~hPNDyZ}%OZaT7 zG@Wl(Q|~JfL|%-_NA8UkcC=~zP=?phduPT4H9k=LeAxZG>rgj_N*(eK|36B5orgE32K6`j5 z$yGX?)sHWCM+YDyC3_0#S6Vo<0^#(gWpyPbmT;TnoP)}_^j_=wYp>5sb+gJnDDI_4 z=2;onrANVt@WZ>M3SyK@Nr6k<5g~)xKEn zM0?-#T5(nLAuZZ}lO_)0iYYpg*^JP;K{nM6u^MrPGu+NQZhm_sC%XuY?mC`X4^>H~ ze3{35silzqPeXvhH^F;t*@qYLw4Exl*!dUd`QaL0px0t4)cF$U1vh=rb@AH;Vt2q)zUs zx|P>zz?x{9tdNg6Tqs+k^@N~rh;lMHt8P}^eE7qJ&i#>!<8PopPZva@HUf*jPV;R= z_r(EJwC8Q0onamKBQz`>Hz2!dVTT-GJu4_tPKSvCe2EE+SqVBGGl&I2^*2ZTyQFBJ zC_mXeeIJ#d6QDi`pX_9uxt0N8DhE3pCCWSrvWi+mOur<%Y~`KhDY(D&u;;gIDj4Vv zf4M#h7g`3>y#2nvh}LEEFX?WnheQ@g2>)S0tKG@Bi|xG)k*WS%quO2vP&T^l`89*^;D6~j82JQ6ytc>u zgY9};k44Zf{4LrlmSF|fsfNaQj{A0D^$x(D_3V>Jrk2MVzK16#qnje>IeB*szB9v1 z89P0*&q8E^fBd^tw81BV#td1IE2KOY#xmw{M*_1(WzcF(&IL};lDNzAWe1O+&@500NY9;}S0=gW3WcsF&1* zPgeWZYlRa2_KPW8IZV(aEN_GN;ZMwz4s;8y%_>9IfJCFB`F7X(EKvBSHO2Gp(n&R% zmc+lImxRhr=={qcv)Y~L5AN}Cp=Tn)e{j?4LwT^C%XA?4mmQN(s3LylSI0{*|6uD; z7x`tG1ai?zyTDhJl{_4e_?(B$0|1LYCVIFjnXjyrGET+z} zd~5=;IX)cVsvc7iUT~Z-BrK*>h7WUVC4XPbS-Y@$CcXI6`_Uw4@BL~d7ab`g$&~O$ zvj6N9|Fp|?$lW=#qh+G6lTc^puGa>`e}dExbVa{O_o&A-@;C3EKk+ihH~NX3CF5Vo zvP_N@m2*6`YTt!Dn*i9KqkQcC#SF>3B(EVXBmdKPM+x@_4aXYYC4SG=x6x92lJX~G!cgE_gmuf;ZA ze&pIyxnNRwTW99H_q^Bncp@LL;^fsFsdf1Lca)db1>a^t#P4YzVIQA0R6QdE6T ze8(J`#ICifnu*;k-1LwcY+xeO_DNhh2D`zE{$M($1Oe#8nl=`K_k$n4Fx^J7+Ix*C zNK4uz@pVSRnaaCIu}AgUKK>diOU9Fc9JQ7 z=CtX;z>&34_C75CA=5p9LX)8qD|J-0x+2A~M*4dYN%U=-6SSu8TLHZM4cxV35kb7N zx;tQe+!4^dX@?lvIbizN3{xVWGU4M5X^><142|IU$B675c#JW9b=dSrY4kI6*#D&I z^xQRQyB*K_LXcqH)gf6uNhw18LD5S<-dlWVN3s0)Zfh&4Za_fbaoERLR57&QP>z0O z07Jql8u4~3G$`PDuWherS7;Z~xLOB_o5lnJ0-$&)?wqH|Q&~|J)Q}5_(zHUL2(`W} z`#X+E5MIJHDOx@XM*o)Xw%|<|BrLdz+9)W99n$Dk<%`gN6H!`w{MUt}>29L9cIc>7 zzngC+Vofj8;J^e;Az;Ji@<%e*1m{yb9JxsIaaG~sum9?@2RJZ7p37wS3Nmvt-jHnG z?nt<_F*HJrzV|K3nM_uoIsr@BjGgfuP=(wD_M0XoyYAI4vKny?Q=naTWDvI{2dlx^ zt}X0n&7u}Ip9}DRfW8BRvzi0%ws3Dl?;s)Dz;l!^frfKR?;O;?orqME?lI_>c|K>* zJKAQk$v;~=`t(h=#?{qiw|^uN{Oryxl<_4l(c}8uDo8(DVeemaF+2w}3k_)St{JMQ zQ{WAESAcb0{gq@S_$&?wyY=AWqDdEQ^Y ztY%4Nv&q1FRa1t$tv8`G@%&T&OT0Ib*Z6gW&cr0cJ{Qj=sR8j!L&E9V&HNw;|ID|} zhlbo2tle8ozptmIKQSc3+Gr3Vd{=`W-vofx1-M0WFdT;%XmGDEzo*b}#h4Qe9?r)O zadfLd+5Er{vn{Pd@u;Jr3UeQ#ZnGSUBp{K4qNyAL>BhANxTNIGNfuS zZxQbmRupvCai%}_onF3n!eK^8Ub+O5irU6ctX_4LsiE&2-J~8DpJ@9r*yTiv%2Dvh z{`Tm@dG{(K*R$Y{znYU5lSE%IAc1`7SiKS;N?_0%B%rJs;gvuv_XHFmh!SmJNTF{A zPi&~oo8iAgCvz)F{xTX|HGg{QIiM;g0(_4{Y+HgOU#R|5`=jHHQo8!SxyGe6B!$N{TGE)HF~6O-M0vMduK ziH_2agxuv!Brfq_h|_X$=!y$UuIgMg*Z|AjaM<<0piW*!M@B1LXMbXD&?^P06OYWX ze9z6tKn94hSO5|`D5F6O@3U%b^HCq8V=r~WG~gNub+*E{ae9JZtIEug=O4Jbe^xfZ z?ZHDw3YBP!)ioV7BPCH$Qkik9O}QMw_Am+bykygG591UM52XtvnkpyPfokxxsBND3NwABp266~r4U=-i+bV5bLw$sOr z2AloGDDi>>MG6Qn>FLv_sH**R3=mZt;E{D~c2)*~OY9*-J~4%?U9RHuq5`@C!)ftk zAz%ZjUaGEv^+qbqS4!6>Il`9sYxopB{0_`w>V~zXv{sKR=-(G2lpYtf0TYpW{hD+7 z_I$zG^X@ox7a+f}?-%R|hOftYlPEh&B$m*z4uFJ;Mz@Hi@ZE~VewOGILQ~fa*CvPO zO8$ zxCXpMZBQT`PO-4wtdTi-{-NRL&n^`V@}-&eMQ9)TnV^IzV>k@5#u%q9k?C|nzu>~vh1mn(clL;=8xc_=dIVq_W?l!+nlcZ+o!%;POUxSS_Yaos9mtkn zAzOWbUF)ug73g8@0>n3gx9h_9hw8N3f>k{!dfIjJFZ&q!IPz`B38ZX-?hPDN(^uuy zSi?!U2bqb4>le-(JC*|n-dVInuS@|HV3(Z!6EjZ=VX`m>1Fl93So z72##tGiQXs1KJGTF79i=#}8Tpv`3;1PBXU**Xgn0Epsb`ifI4QJS^FuStTYJ&X?QTrtQ^2eLBpZ}5RlZ}fKo!`D(1-+#x z-7Ap}L3vttR&4n>?lWj1nT8^Z!_xp+<1OY{N!q z3a6U>ILZitQLaT3%I)aRO!P!XX1k1}+t{ORqwM*Is%umLjKY`vS#(3sE*o{|A)&TM z@0~{{K4L2q4+b($loa?(y4}YB0$wEbj+{k(l!c44W*A-mryaD`fOc$oQ=_!Q11t@( zUUJ{{CA&$BGu9fh#~fnVU0092R!?Q>c~#>ewTj3_P`m*iKVI1zu<`+0l#Hk&Z3gk> z91W(OThvsaOT*jvwSh8r&#kZPBs)bk7Xf>A#@1?0qA1Hj;k1p(452KEr( zgAj>;*_e7s&co7vN`6ErEfFM5ESB#ALRU*dbvDKuMBj6WC(qN0HSOv7k~+VOfcenr zJ_KLM_WAH$hb%=yNc!&kZa@!+UVtK*RaeMW4u<;TL6h5!^e^qyi z>nt!>w!l{^FOopWh`kn>Dz2vc`xS_fng-Kh2%_^KksuUjO0RVA)i2FAR5e;^^VC{D zRRw#d0N|*)t46)1Vc0~~z#1zHfDD`4=>)2z{ChR+R*k!kt{biBmS^+4ce3`++4(j_ zg}?KSH+}~t55+Bi4<4p2)5iW?PZISCvJnQ`;yw{ty5>23?~)qvuK;i)f>ek<%RrVz zp#T`sCm1M^icI$w;~zZuHhQ}$NT7UsPmnh3Iq0U3Wpv8go7}!3=Cnws%Rh=MWiuHj zHM|!B7mOE^MR#?GA?}o8 zGeb=_N8A>GJ+A)FVO+N(!b1IA!uOcEFR&d6@_hhg`1r2s9B9n|o7YV=tQ#x!QB8e@ zY=e$I1lfFgDg@!`G4WxSF}Xg?xF{8;20jZIFBmAEvqeFiE6dp*ZWU(#oX`A|U3uf# zR{q(BeguGrTQEGIcP(x_7!CbCDUFelsi`1M7TxSxnv%h6J0DTc0dkiPW|}3$OKeL@ zTIaj`>>sqV&-xTyYg*^!>Qx9iq&W<~op}%82iL@)K}T!tjJ804(*mVLdWE$)S}^EJ z(U*rp5C&oBwY96nz}xjg#V!GC{}9*xMfbwvWGuJuD7#VBA3N|t^58}h5AVYoSQ;2d z7y3pMHQ-pbiaGkGb;vP}W_P{;W&q21bUl{hG0ReOfWohH*Gnt=P1o-4ZyR1;PTnkJ z_CPqEOH=huu^t%`MT{xxu3@T@Am}Uq-Nh>KRjd*@?uGG^y8RDch6P8x+sfw>rk zjbhf*$%q9CwWCh`ncS`k;K~rn=ZAEwYtiIB5pGbVpzY{L2engqLn^~E^j&a{)OF`Q zP!_q~Eu~EX2pMa6?dlsWWQ(HYY~anx#%KFNr*S>c?OQ_jNY#;Qd^Nkcu7FO z*bcx{GM|-oDeOjUsBNcES{q^B2}>?^KX2DJ^Bg;sRAyHxelLywqQ8k-oodkJ!x4Li z;_(wdkvJyFZ^(99lQE9dC4mN}CKs#lnEf?b>>Hz$3(K#+&q)ihK#yK}1HSp?;TLU0 z@D_&D@r+C=$3PAX!@rUy`Ow}nx}f(Qf{gmUX@FMf6aH3<6Fqi^3kHevQT~&?r|AjY zH-K(~LE^LQbd+>IOf(b3RDW^A zL%a;m8hp0}7W;XyOtd_avir^Y{`;;)1graq>2B3_uU%(@Ja=XV~k6u;>u2vAL1tF4l0Zj z6H0CIy6G|~{#dpXt2Pft{3{rQi#!}Pp#(DPnoU&2Nwy7JgVzqmZTe0)=hJW^R#eyO z)eZqA+DC|qU}D<&D%iJ}Z$uL3)Oy5%6B;VayGcv)+l;68uE`!#pZ1TI;>hKn@Pk&W zU+rj{zNUlFNr9qMn0opovJr9#K|OH$mcB~rUTAJ@t zNTNHUHlOiv_{w*;1#msGHdoIadwl$tDh#8e$j8b!LhYasH@1{y6UMl?xauXBxk15e zi+Uhj-F`FiQbn{e_)j9m zb|QVTs!k_$mb9krEBl8E!SRoKO=!qJq;Z#kaj8;uOKC>jJ$L8)sFKta+#V7fRQI2?R(A@mNC%|uiFg?ZJ!sH^)Xm!h0m`qK5M|!`o`FO z9Jk#rLdeH<$oU7{VXfan9)<$A0bP2a-QD!;-HIZhNYAiP>}$xiHcZ4|rGNzYd>sEO?^RhzeY4;egeso0gLn>JN(2NgyuRfd;X zLH$W&4zZVk-8G-NI$G)SRn-EJFqjvXhxebb=)E)O#i!vWL0?D(lDCpjfd|Ena{i;Ow^|_qcZlSC9&2J=$$=V`W?6)Sw zh9a5mul~CtT9g_9A!6+FG$Tp6F64(<;^CILm9)p*zK8J`Fd-a#6h4UMbPAejX(6fg zzY(>{_I49eUh5P>%DSr{EQpSio|icRe20VYh^Wx zdvEpW+lMw5l5VaCZw33)NEr!6T9F)9=#s46W~SkDND8u>^5vU~+x3k>Ptb#G9Y5PS zMvhto`bt%R^8zf|niBSk^gDAD&X~6tAU<%XpGp=!55PUH`y=R!arqSVh5%zP};~E6VZ{Ggo6$QRt_jF zP?=W)sf>f^gb0##Rk~B1majRPiqj!3qh~}`h_ZQxj4z?VM{Fi zSttNP+iNCFYQcoWQEkqT-7IDdWw3?Z8fvd{SM=*2LLPd^u#Gk4o^-sytJVC14eir_z z?%?46aRGFk)d=C1bOgiJFGEO!tkAAcG}XwzO7O&_s($C@=9=Rek}c2sm@`{BrEPv+ zclIJbnwXW5HD>6@u^5R_U?gf`!R3bmUzV#7J(;^|ZXH|dnM4Y{7&LVWjk?=fzw;oh z9$}Mwy$s}f*}I9!4OVh+fzyixBf%e&@%@D?K-fT2`kU*KkX@eOCOyr@V!U*kvNc?lV=H^?UC!=49Ub%mvlFYHQRlM(Kr_KQpd?pT%~X%+KX zN9=%S)QIf*8;SiN@2a_?`kCvcdyj-&)wuF;G9MZ_Aw^|HBlws28fg}F&2UB?^3~<1 zVZ{%@(&J~y@YnEDet2%oY;=i*lC==a7y=x>nx1RO~sTqULY5UJwsd|CAPOX1p5AeJk!9Jt#KLppBq4wEmX_@FcOHUGgt7BQB(}a_M*#-lr+94d-(`dB$GT!O z8r}U2hI{k12>z)#j53=0i@%BH&cCajO_bmmdNcC zuEm5|`%(V3N-mc82PYQp!T#R4B5{wJy*5*4#hA7N-k z;X6$~*Ztb=LBV~^>uaEHIQ>4;a-_{)Xah)s%HRsFUZjErp`UgY@=!W(rVH!J`Uv`* zc3E0Rshz0=pkrWOSX{|Qd?TuER6UeRKjWl=N)AE!4W1 zYMvHHOYYcxt0kAbY+RWsBSI5eWGJSx{6spXl%Y6Uwm7$F6!-SgM>->5ZTHX&IXam| z>XIR0V#yYj#yokMI28|z3RDBCn?w{S{@$bDuJb1-o!!2eBZU}ozh0Do@=IPj&&NBo zexQ$@zYWJ*70dSncQxc@canM@Vbp$d?%8Y7xa&7Glz+i#7ON4h|D>IPBD(*2V~(HT zAKnR&Uj*b*sOC%e7(%vrAzpOrVr^wvKpB=<-ox?l_p0uMCOC;X(?IIM2hVqb*4e@I!uyTV_Z0AF##!{Bad-yK9?euHyXDw%`6zQ@?{k1rQ0OwtRln*eg-yY1$k zVPNmEg4+t7m7!|3^oPC8wzbFNPsHnw|JHPk2%jChy21Z5TSU5`;W$kEYB7$49~Z=H zRx0X*EM)+?w)dPNUqzVIH-XDXzrQ8BfkG^4D2aCr(H}}=Hw;0)>*y26md2x17t_~| z@OS1ToBKZ_W=IKbBxn^-;p%zs0bEQ04+`iMn9uciBHes(IfNKrEO(ev>*k-2q?LCo zyr6t&G7ymi=q{*Yuxlh!)bj?89@@3Na)SmXnV#nzsYQQUot9i9>a|S2aW5^vKGAoh zyB_ML9t z#=h)6uuR~e$@Fd+rug%UiYjIf<1hV!6q1oLYHd+mlF=G%On;3|y0y+n4a&BLw&SL| zS##0@piH-4k!R}=P8sJA#+5j#k<_XH}DA(N56u!6G7*2VWc-_FU!Q ztcLl)s(VYe1V3}|Djg^0H~JbBX=QF=Rw0HZ(1XRl!#3x#U6{jKv!k-dPw!+3#0-#%R30&8w|aQ4QQM|9yZO5$pL->BKNG0*x1)j! zrB+U9_RI4eg80Sb*UXD*e`+v_MjjW{onT=QsE}7PGeD0I>;EfE!*uB&Qdj-7!b-^D zW4v&I>z=(gn`%-gSx$M3QwMUuDyQOW2B39zf4y$pl=)mK`aD)_DK%JG>dbM|JNoED zeh=>6hJP%3%(CpyzpwauC}kL&=&CTf4F&l(M-A74%^3q)-u+1(;yAXHyWu*LU^qfU zk%0hH2p9yVgutEp2EzjIa9R)d0)NVAKIeDTj7V*}zZ;3zg`&A=I5nOYD9H%akAEs6 zFm3yAw*hK++0BC}`tQF%ib9Ix=X^P^(-UGuZlJcSt^ zoNXrRb&p5aq4)+wwH%*cI|nd*aSB^<|2e%zg4*Kb1QX%1^QfSaA~az~onn+EbBNu& zs2!Ry%P-oxvvyXHHGqA!Hzl)P4>s`R{$NA%pDSm>kpk)HxP%11L-7=Kbh59w&Z4z? zCbJfhFVoa(JoIBNX87Wj@cqs4!tV3a?$hVz!}r#vL!g_2xJurbr9#WXB6NYD{wJt> zDeDox$kt+JkJktKVFy;7F}%&OrBZ)IKe^G$Ugyi{d^>m2(bVBW@eT8A8q#nqOwbHl z>cnNzV}ODOQ};;>Q`xbrMV#{~p?J9ljA|}I({R!^ zzoy0~)ay}9gn{KfK-xj+xbJ>GtMl49c~l(jCTpJH`FI-Pf&L%|TbYP(+8hRyZ{ESE zEpvMA`|Nv@xw|W-ye3qCK)z&#cCGo}0f1s&V6=!x9!w=<##2c@i%4xdy ztYZd=H(!mlO8$(Zn%g{DKyb^Ed^r%&UOvqKS}jqgY2N7{S6qLxjW8&ckp8@gnt z&_-`g@*b`BKIV~rW*Ao)qFjO{c=B#eFO)e6+{%fmyzXa5Bb8K!^(T>NcF9!W-!#;6 z08)6Rn?!t&c>q$)P@7VSQNG}yI4xE6iCsiz?O;N$XoF%GoBE*PfI8aQ*MfdBw*wK^ zjpe|d5lPZY(;>lawh259@iiRCiv+WYA3H3pj85)hLXyRVc72k@qfL7IFQ0Akzp%JD zcGqtD(z#EelSQEe1t4xGir<;T^5(^DMP{)D;Jwt<%=?*4tNz~%6ap)Flw56GLVWFp=$Sa1LZC@)6YgL4g^n~VT(oly$l4!)Hy-@}qU8&1 zKlvb`*-FM+0$;g6U$Q1V^ab(jaaID0M#p#f!uqe{qB04y2sy zTHgv^cTF{0E_0QNeV7OHiSa=hsj zBM}kmDG+zPq{K8-&e8O^T(go(QLcn_#Rn5B_$FA@YLa^qd3OT6hPP)~M+r*qMNh|% zuUrTF>QWT=ooT6Ne@KNt1==A^R};mv+OE5X=7p8o z(reW~P99o4WLkR*EI)*M&qMQP4M%#T-Qrap^C=tOO|F5y9P2yO{Hslt$byJ+`xy$= zM951a#)glNG9@OBRm&PLRzeZ*vYF!hb5Dy2>HOIOHS79`m&))aMa{XvBCK=QUlPj! z3AT4n#rvE-EAIHFxXnom3H7)I*%g4CW=(1Nw{kNrfSnNz{jHrxoUB~#&_5CE|Aj%y zxG3^`Qi^!sM2t;aoCR5Rv5<4B&cqf$%(5mi5h0sAl+Cb24j(rcCY;mD1;bD)N?l{$ z`Ol32M%nQ`_Iek==A&U%KN0$p!=+-|anHP`NPNKg!w}_|Jh^$4o4rx#Ip(M?S+Sjy8I!86$=UPG8sK7mM<$Mnud$EI5z_tcb(X(?8k%;v`u>VKb#EatTe#t$edO|V!W*a>}p=KSdEf7YowIZaesD3ZDX zT^WTK;7mnOWXyJR1As|_f3Fr`=0r^w&1#;PK1 z_V#&f2G0E4+zQ@u<2l~-WOHHuV`EaDZ$ucq(EvQkVLlX}Sfow$PHvbe5 zdkXI~{Sw!eLBNT(LQn`aFAm#T6K+9AwsyT+U%Xp>zIc`%#^o4lhtm4Va^ub-Tjq;` zd`qs4Dw$~0|LQXUlp)FfooA|U;>Pd?w6Qk{B0l93MxhwzeW$8F#+nlr9h1{{`P~x} zq`3`F*t1+El(LujjVCPPj#7tZ4=)ZBcTpzI85l`_?-v3On>4a>(IV|=~{tFd;EGW~fO(9Ms`qZ*BmZIo1<9nWh-a{Wqv@Jq6&$XEDc^Gypun=5McT2ns- z^G&TO;dj}(`fTGwvW{Ku73XV!zKP=_IzHKyURhqRJKq*66{&pl%FinrfzMO8o{UKD zaswLPmG+{V(Yk;4?G|0BTrm5njZ}(XUyJp3p2DbfI^{?S1^H6hE3V6rPymjoDvwFX_=cbh8{$m|Z`{ zP--xlR?{5Yx6KL!+CrdV)QhiyUt4sT_raq{q@bGwoV7Ex>wzZhtjw5Cj!@u*7V z)(+mi-!)|zG3d+wW!6bzFRk@M<0Bmb&q!|<0*X3cRY4oFii#?AojOVqU6SPD&PtOy zc_;!iqiHeZNfh67u#lmqM5ri$ACOK`3?$Ew`SiIInZ^ky4(mKYNM|ipN9_ zvV^1gYSGLd_=iZ$%-7oO##$%q-2?rro9|7$c0WZO&aCBtQFGhYR41boPzPwAAqu}{ zPH!m~J5I4^JM{*hv-5RKzPzw%{==kKw(>`vb#XL5=R~k$0VcT|!TPJsD5o_F{r~DI zpP*2!s1uL|Z6)W(fY}6#TrQ1XVrl0NK#Z_ekz)x=1f1=A3jf(t`#YF=9`2at^esyQ z-5K(J6RS^7+=Sw{U9j!oq2|#+!@T)Eod8w^%+Do@4By=KoJkb!1^7=BEN9*{Hu={G zKg4BiFenZY(G2V@-dwIGpSM!Z*H`liwI>36q?WLx$MGq+=6?8Z3#b5Qv~WRyCe`tn znR|{pLF+6$AZ+3-6^#MCFwU+twvAB2jw}_g#^6V?z21T2@U~T8=pJ~p61T#UT%514 zQ4UHX9}^eg4W6K(WK*!SlT2CR{3VfBN1y=-m{k8v)LxO@1HkqhXEiq?pJP}wWr+Y? zB40-GO!mo|YI^?1*#+th0WxKCx)(2po&fgEM+8Z4&OO%rkL>UtzFJq8j~=oS&qiF1 zfnqEX8kY9-cv302zdi3G0LEOOVBhfj0?l6AfviFxn(dZ^7>%za^N~G1&u%(ido*aENU7;Er#fHcBFB(NQR0B1@;b;1H|ERrmTo_Wn{b`lr18 zEVWYS_G+qX=5M0urdvL1@i|s5Up1JSFV$Xe^J_fgf${lD$vn}F@J|zWXo&#Wge^aq z?@>+9OL#AUMAVzxKTu;eSnV6vsG^Eh4Z;tgu1_RGym`-sIk!%KQ z<<-!`p9?BC8LiJq3Y~o7KlH=10OmbP)YT$aJxNux?yxv(Lpnd%yBv25+af4Epzk)o zv7+kwoy>yBufm1)^uDIK+k>pCp*{Ss>BBpD^)aOE?S-#}F!~)9e6K4Lbev~?3g0)# zC2|drdfwO|W@25Sy1%`%d0oIONtP6SGe2W#zSs?Ao0pO_Aqt;vOO_QD1{4tefT+vG z%n5|!hi>{((~3LS--L}_cKmQ#=?Hf0>s_i419qcMs+!B0Yh?{G`_)KcF^M#w7GSYp zFh)J`ZhJqhlmuwth&uyS7UmE$7ZpL+%d(g{SXt{(9bam6p-zq#^0rM;=L& zJ0FRdULGGHNG|9jLJL^^aDO_okbl0l{b<8A#xp8oML0Li6;3V5cM}U z@yyjKDEU(a(8+4Q!r57h@JVnq8G7}8Dg?bMaY|b@ryqH z{rvGxv(O<1ZCmM0n%LtR5o|(CQNA?DIyE1*jr@87*4r&MLfMy@6bQ-81w&<|WMa@{ z_ylIhJcE?seS+un`uzJfnWpJgBGDYYQ#8CW*6Oq6M~&P^rxCChZlYdkmH(%L`DtcprNj4wCuD%%Q~;g-7dR|ue5I~UlfL^6 zq-)`8=rVMh7WSJwK}S)ibHM-rk1+)4D1dsV@P%fM$N{`JX4lIX>x4oDsImTd@gr6e zRDg@Rd-vg<_ll9c=-eM^KlI$MAg}~#6Rs~6{DL{Zn_MN7hTCj=yC9t&@5$8$Wiv(D z%@Ymtg>$vUA`xxHwdKqtd7J+=7gk^`VTP}1bicNI^U=2lbw@5ima}k4oTTpJ_)T3a4$&6{QXP4 zG%vQ&Bt?mi?BR5o1?@W)p+5qE1qjI!yT{6S>G&XIy>juSs+kN#{C}A+Z;d?Yu1NM9Ax~_0e&^@qDJRdg-t8MFv^x@f>_H%mZ|O zIi`s2Syd&w=(zp-JLa>Z2;&UDY^oPLkl=MB(f_@hA%)lYQ`1`6pcOrYCwz?pPB|K7 zr{#wBseI=F@H|?Mi!&Z)OTy)dIkd&^vQ|pAsi}1#i$h}~;8IO{Jz)q@Ef|Vf!e`Wp zF=+rX!Pg&{ zzhew|jrVJBNHd1gLM>c@52zGd0;f5fCM+xraZ3L)6bafO@SvRr?4Dxqv?(ZkFAcIl$aS7@Vc5Bq9*O4>Z=V zHZp+>V{!wdU{%Nj{m=LJ;)q-J1i3*OWj--gLi_4Dp#=p|u2@kyHKuxBRErF!K;CW$ z=E`Ev+x%p^LEbW^B1cTtAje0!jSKEi2y6vWFFi=VJ=(i9c!`tH`ouP=P{Ge6RorVs zj%%hvo^O-NX|t0*;2Apq%}g{|zRosovSnhK5~*M2rjU z9W{MZ&J_yS%R?M->`P7cD>`{LBC*9h0XD|K0lyM~qI-y6Jq-^4{4wAiTaFy#`^3z? z#wq-nv0I;&2WTsF?q{bg(9tIHqvIqJ_yQv}1e;I;n`YnpA}Sf5L2k8`@JAlfHjSdR zIhyfpPlST4TXf4m?D2l{x<1yqvk<=QRlxtYZAjY{B?-x)VhWS)WvwE6(xw7g>&Ld; zEBkUFL-f5*(yZ*AzkE7t$0S-h8k+?d9G%wcWI92^iYieUd0%6 zpue|Aw#i{YI~5~uYGqdT#{K^>^_Brqc3s;rASp;ApmYdGcXxMpNl15h2-4jRlA?4< zhcw90-8po3edp+Pzt8tyN7>9?d#z&~Vc>U#<9)gwdIV%CH9&Y$n*gSWDg}5Jyb)_^ zF&-S}Et(Kl=sU=IkS9j`!B;IHoYb+Y-y{6@^^g@M2_Grak97X~nv`L~qVxIeZxJ`R zT~d4NLOaFW4QYxc`7d+apN5vJ*}Rp-c9xD!R*9!(1D>7`LKwUBqCl$ipg|7!y0{%J zER#Q9LFW+F+so56-GhCT*E>PKR`!odnq(SHf`de1Q(bc5TSq79Q_L#x&;uctIh|gx*g*74+yYrfb52b=^-4n3T-V8MS%)u;tq_*)Y^^zbq7Kuagk77Fl`&n zqFxBdjxpNFu=DaSFupwq#5;Tp9Rr`U-W+4n9%XLnf(sNE z^!}u57vCG9@03HQUnVELeqiwa_mH-sOOe&i?r}ldWT8*nqycN|tX@+Vx?@uo#6BL2P!7T|CB#R21cWYoZEi9koW)~t;G*PIj5}qmpL_N(3X$NJHFjS_g}k#V6%iEv=cO^EO#`d(FcR7 zPl39L#3WBO00U$JLEsdciWqUI?`ml1YZF|$kv$U!IRb3N%MaRVpfu*+27qq@)t}sCM(2TZK;WJRAd}m4 zvAc*7N@yo(W%&ps+}PD$T`8zhtZv<5O2SS4`Yr`2AT%&>O9OAduqQ0RMIv6PP>ssk zJZCjQh~Hr6ia!9Ae}8`;Wg;nwEQqy#6g|c-(dg*d2kk&Z{^|Wc%Qje;HuO(L8Hk5$%m8w+ zvbX1KO0_Ud%i@bpH#)9Js6(^3GIQKMk{fq&PK84S*GPBEVV@9tfp6csj@C_xM|`Qe zkL40UcT<-?BHxVGLZ1Bo{|rwks+$h=93hMdi0@RucKB7jt6em+`wHK~G|1m5G?JQF z(CCY9hG;^|iy(hujK#m#>s+{V8~&A+FG-&-$xmUcQo1^a-xD(v##+wVXTOQ(Ai{7g z95K8|6ZjewInp6gjcOU9h$Q&lCw|_rb4ornxh^$Xd`q$-jLhLbzn=OL{7_V$vwl7T+Y>Z@80oA3|UvUTU8E}+)b4fFR+66Oh5|$ z6}$15(%^mve+hPs(1P9b^OG?0*yrEpzu!VCQ|AB#+=#y!E$9vGj3b946&|aLsZj8K zX+D?-qDS^%CA8IxMg&`0Rkg^z1c@oN|J$T&1wjQ(ZgCXJy^>>I@k3Ew0eCa`Iy;YP zbWMKG!-jJOvHWH~%NsJ-hZ7>vfSUbBwb4)mHkCN<d)OoX693BcMeCNbI}me^20TCP03D8=X4_5*b{^yHc4xoux66A*c z7^Enr4xcwbZ;D3~cFrfn7(jPRLuDkb(4COw9`4HBfv`fJvI}dQ&1RY4yUV*;4YA#u z(Xpnd;#qQU^Fz==$j_a4Q0$!r)R_SeVp zKx5-{`;OHtN-(z_*(;`JE`mjhkCvZ`&^d;uWYk?lI`Ktt2*ET1)bDHwmt8lPz~;mW-m%w zI(q#g4R{Vzl4OLKLbz>&Q!TjV-bM8f37KOEH3Q-0;pb75JhZQQSYd-Z!87(@;kadR z7TbJ7c4Dr>yi(Gf>Q3ltIrPwMxVj&5&B+an3*R!;}=PLy{kn7wTph%o+`uj^n zU_N}nKtkiH-(p3!Pd1@<_nE<;YLmW&FClQE2HW2|ha{nvgA|M-*@>_yZfOO9w(_Vp z_sIs$NQrC*#@!Ib>h{;F(;nIKFH_gVYto_r^~X_iu;-*o_hf^sfp||iSL)zeCV1mA z*gN?soDa9vO!gL5E;kMk!_#H&6JH4uC76H-f9+omMj?)x-~4iix_k*t$`=-NW=#gq z37-0?qWcpR3S)ahlg=p!!Bl@qGbs^J{*3?Tv(nS^E%IID${FPXND~Jju^#a%CCCX` zqnWxK-^n2qrLK#Ci}FOphDw4v9Ec?n;P{k|h;(I!b5-ks@F3 zRj-@2HAY@_Yw-e+=bA7i66q+$`}jIv>-Z45=A40xEJ^q| z)21f;fX3K7ujSFbU{$hc>8wg5@RMzpB83Qqq0vjb|KI-UbOi$(O9yiODk7v5!;IZ+ ztEFAEQAX|R<}!5pU4HYsg7x_8rdb^8?RZI|YTlFP$!GrU)oXa#t-kV&xBETD-%wDJ zWorG#XlYqCnMUgyXf#5XLX#~%S8846NUw`+F^6paX5Rk0mubfsXk<)#Zog-sslX}qKHTOoYyz3XV?I(0Q-9ClwF2$q? zgcGNg#i&Q?BI@FcyzNI}WS9f4c`Z*dYp>6bLA9jFzWwf-ueerAEnf?G8O3#v|8W5<3p%MwHb-u;cn zZyHO(b$8^x(xuN~Hf7;%GGFt(SHGNzJ8H$a2G`yAXkJ})>qvg>8*LCZLOSsIFNhSQ z1sz#!FQfOv#Iwk+08Je7CchXxOrTK^a4>Nj_=1%?f#={nN4vwh>h?q5%<_f?L4B8a z+skz{UF7GXS_;@Z@cR^XYAe2M3Bvz|Gh*0g(!N@tZHD2M31M32(DxHyd|E8Jt~Gq@ zjx5E2Zk9^XjF*6i0b>eCqn%~ql}In9lf5IM_PgkKv3@vgYb>X!X|1jQvmjnvn;$M@ zEq8vd+f9$>XSyuuSprkdUBt|C8maLYXaqVjJ{T~LqPB{j>>3-<1VP6K3uc0Rv>+hy zMJtkZ9QjQD=b+!*Wyl@!At11*oo5m90u-=Er13lc9hXj-9aUYC*=&vp4a+lAb6XO! zQNI^V#h@Hh`>ah5+d!_DpCNq?_qPSA zI8GS$+BBUdunYoo@E%=G+U~PXmZ>o0uo2?gX`Vy7q-{$#BV`9uu73PkW_$tAiUF18 ztY4{g63F-1Ib(z{ReLaLTKKWJ>ihs{YtWHSn%Jx(%0l7q@DmgZ#h}!@?KELx0zUh^ zpZm+TX_OhY+n*aKt!ydX%~`?1P%n6_Ml>--7?#gVof1bD4>@cOjlammF zVQ0JvV%5>vmnv*(uV$_jiJ#^K>W@l3yH*q(Yd6xd5jeG~-R+GCOK^D_OofSUL$Eg{ zjLvsyU6hWfW`o9QpEO@?cLk58PJCzkEX8Fvzra%snc#7y*%vY8^aj)2BVqlvFl z@cBRcEIJL-ABCD{87|Rk z9Tk?qtW4IP=*?L1%|30a*H`cBrP4b^Pw(mQKqjjAO6?G-sQQ5**E^tZu!V%XKJAv4 zh-C?`-`zr3$nP2JEsC&j;wRFgpQ!JipGg2a+(COi~T}()FE}T{)VIXWll@VJeS8v8n(L+9v@8 z?%5aP7^ODnG2_AX$7;9PYtDT7ph`Z#IF2DtP!+%_FO6(ZH| zf+$_=;}eRQkPm*2?t>9asC%53*eT$$G_O-2+ZhOMaf`hdVQjr5EAlqDB=ur~JCbW= zBF^6b3N)uo-565-tWRC&{;E%;YH73az04YPBkoxBuVEuF0m8bfCyxVl=({`D&x;@O zjUIn7U)NXqE-P?v>uP+9(c{b(E^0{8c+c(@<&JWO5DAxykgH6^@DInkBkL5Z5e<@s z(Z(3NfFxX==5kwGRmHnLw+X0SP-}q{rA-Ac zA-*I{b)6O$>_UOESz{-#*IUuMFM-*`!f#@+3FD{6GvyB^ME8RsE6>;fYo{ue&~>mL9K zv`gUq`}f`}@HgB0%Q?u^e~G6eBv-VnuHR;no+Zd}h+)QK8Qb08vZKO=Uo?R^_a9C*kGPhabxaM7ySSiZyD&Lx{_(rLxj zl%2j!AoSk^6G#P%pUZc4w2g%M|sF~-E_m)$@6T!CbK&z)728#H=Woi@r0FAKN@dde{r6r38hYxTYQ zg+~tFEl}jMo7ESbfA*W-HsEMZoL0WT!Nc}7$PdVu?Q_O|3V)VJZ5Vu?9g}(#@ zM44ma(F(?7(~Ysy-IHLQCW6GE-uimQt>XUQ^v?j8@Zb@@6r#uyA~0VYPZcIr9FY9X znaGw^phlyuBQ{jUCMK_G{KnTg?~R)qL5^^;?~DG||W1sQ8MIq>gUE#`>)c zI-~!};f7(tF?ymGeH(nwrrf%<{+A3MD0D_XrYnH!ADIsa%%)W;7*g3>4L&6OSi+-k zyP<0Wp6d7<%3#2rRdwYJHTF3^H9nokM?FZeq95&xGSbSh#c}N#zYTHhIj=NBW?z?uQrZu#_nFWK zH;MIKEIM0z8hu0X@Z?Ya|0xIKFb3q#nq|&~b|~d6A`k7xOfUR%9%F&L_iVQZ+eYtG z#UFk9A6@VhC!+S!uqAGowf}fj$a#5oeYwjZIexd5((_OIg~tb2L=p3qZAwG5TO{$X zY_c6N@u7r8WWwT`<3@}V%De|pveP9r1)>fgL4|Y{6+!hT8WHsduW)CtOuqhiR zi6E_P3ONkzQ4r|#glTV|)iQab3vqCVSnSxIucIwW3bckNZdn>9`+!kg5Q#@s;dz3K zHnoaPO3RT27C^q<cu<~DwG|9p z1ijE^P0HRXY<7IJ)8+fe{0Ni)z^*_EwjpHL5N;UDHBgEo8Ha_NT__C(iOct@&fg*@ zki7_@(*S8Z9pNl(9MZpyo(Cf$MS=>^gdJ6WH~L}{0Q4Cq~r@IK0hnF?8<0sXdfLGd0`3*g$+II8+xDrc-BvR zL%9P9HwRGI{viK^(4J4k{1TbBaaQc(Uoz7@FX|ulEMpn{27Ob2u*?QK%hVzFR9doG zthY&`Z5FRw-6ob~!~T_62uKXZ$U9K&F04($ZjK7Kcfq|U6!C!s(*YXh6{HI_T|}qL zcf=nC#w*Lf8!P`tHWW=*@NmC_pS1yyCj7EL zSM=RiJw~1h54O>!{g$C@3j7wM&;frhX4vj-ggd|y)Yg#up4$7cy5FWd7>P*fmp(L} zW0x>fANY=LHTIP!>fj%!bZGWqrXZ_{U)7sSRD4|-(gU|Z+pvULJ<5p!M8x)xls^r*LgY*izy=;OeU*9)o2O)x~GZ$%CND9JhvYs4X1; zng-V8zaiSnmizsm*?c8+K;XG2@2}7YPa*+LT3XsHI(sXd8igi5?oWVIYhj{74MYaU zj|C@vGtTf>llUu_M`<U-lk{GFEeO-5!$dBM-g zA?!k%%d~NR2JI@ne#5(UppnlUdLtX61nQepGT7hfpn2-MB`ls+c|N3btNv^9@%NN5 zp)XY%FV(4<)oCzR%Q{6W6VuqtobYQNhkjPn&^|xA3&tX|-)nA}090WV<p<3%!|wDn?gb&zP53euc2MVg-ccySs|8qGr-PS>P8=a^|&FN1m0=Q z!A}S72{0ui2U3Vnyrn${R;K;WfaQvxtgU=Gy;VGcN-TmqF+**fVEnlRlxM6>r4l+L zjOT_OCEWgFw_VF3Zu_nHqD4XUp(ycvTy!pzfyVSNV@s#*Uq62En3U6Frmq=FOWyuY zL>(JW*d5X*(HucPEXDwDPf$>6TUUB+f&_n>WQSz1bOc z*jeg0oprSaVom)t`|<=BQ?ESK1~+LC3&DI+N39;MJ^S4*B>YFpJj<;akaZZ@g~u%7 zOTnv@47kqvuNAK1*-rf-0w=||{W~N`Mfi>(WbY=cn5=2)f_r6YZJVghWv3>?lCrI$ z16Fp~2dRWS_8pEm6Q9*eN5CCzwxw zEO7qmPpF{o1V+sv;4|J~2|#GleI?n5!4c=LJ%0YX1DBBj!>2j7wHkwGY++6S%XOE2nZcPUd{Vqe+nPgw!w zBWO7fZ^*Og)Hs{Jd=8dLQ(|KYMDdHyeog-)}K`Y5G#Qmg*rC zJlHjDzx`{Vvv2*pO;4SQN=VKho0)Q5MtP6UNlyf^#tiHXAR8kmL#Uggri0WYdKh%v zLNOa5#8c8DdO~`{AEu52m^To0k3-;^fT?&M7SkVIt9kFXfPY0S4-GbsF`SE1HbI=h zog&p?5HQ}YoZHs<@c1;@ep0kX1lvf9o`Jr{-_FKL_A{0$x^?oTlO@tNVK*=E>e5(S z-aP_EBF4ULTBG4a;K8eElzm2TQri0b43#9mTI@H=d%<-rQ&F-P|Lf6LoufZ2e%H?D z{4rBS6yGDnP=ei?Xvv$R5F&Ajdsp~f@SU0(&jbacG?*S8Gee3sFAwI63+x{Bgm**g zi|@`clB}GYeZrp^?m+-pp6$5dy%`zdbvBcVPnaa1y-3Hhr4Q_40LUM$P3p(8TD!Z3 zRew?sChN^O*ceg&czX5`R96&hhzXg!Zo=9~kSudI*6(-DHyGd8yLU?B*#`OwCo(9i z;Y3Bj?NA1K<>)u!^BDRDR0zW|L*@dWL)gm?8rQ?X{2k4)FmSQz96P`+h&!9-Od$!y z!k`1GQjn4{mV-z~;xm>k=0skwOIroyT`pES;ef~~HHtwK!zT*AiRa#5yTx9r4T+F^ zPnG`&;K22btDcMY2u-0QqJ5mU(h8i@j1ba8=w8Nn8@~ zisv_2cJ<&}IX@k;H$bu}tFG_Wbauepr=T}%IQ}`bx}QHnZQfbb+t&TXhB8D09N{;r zWkPg721R6gv}$p+3lT{$6pFBR(G!3(I~R^PVShBS{mac{u1?VmD1(1EnoqHalsqO0 zFZjl*&>n@~Fpz*HGbA2mC9VT~<&)$$#uOtpAPU>7;l=M^5nAx^o9%tMy*6X~pexy! zDzhAC22QxdmH;qJkQ66o3GD@^*+sp#$FwbHFO!o8QL!45)RNR%eY35L=m+=D@b2dO zdR8zt+Be65Y=VqH^=BIfch5H+FUt}!1eUnIY}hgS+uJy&-NY# z^2Y31TCj|sA3bLp4Fy+22d>^-b-={$z;!EAU2LEI+vEU8V4(;bCov$jrJs@g6~zU= zGIPKl?OuB6?gxOSx}Z*IkQu z=Gr5t1{h#NWXbJfP(R81a11vvav{GHIM{@$?QBgl$~k(Z`H2aY+?alriHa=1;T@34 zSo7|Qh*2rK!9^GhjJ>nL`6p`@C-3A6`u4R;{kzYmYsA|SY7h=adS$*Up7S=Dqu|{Z zR?F4(;^BrY!&!cpD)v+4w;lLz4Wv9DD@ha!TTnRL@;{?@=GpR8c(bKz6j?a5gEBc+ zf%JLnMO{mc>lJT%#yM#LhrUOV_(KMSchTz<@437Zko-RIOVSVcTy~V-?E2%(r%W#v zpGW#76eQ6&n}e!n4gK}^w4P0IpRYOn0(~DY>*q6)q438_D$QhQD3NW)zP zHLF3u6X<>Lhw}*7wO5Z9NG`s&Z?h~sB~{7V+r*aE_ zT0*I55h9oK>e+BM#d9a5$`2fnQT*=(Pk9gXXHag-J;#(UW)*+3Slj*&48y*2JqA(>G~97Z@wst}`NhRzCZ;?n$IRfZq)8nSCdvO^<(D4%C!rhKa0|8RlcM3NmyH zUD$-^@doqgTHv6CO2kQ!bXPn{wGtg%w`C}h3cG=b72B~q;p@fK=NW+7F%5SUNd_0* zx%DtZA@??mL;&)?niYc@W@uzq4jLuG%_bZTu}=kPv1=>xIbo4_!mN@vvJpy2@Wc0RD>&**})&IyGXJ z4>(J<{c4)nd zkLQr2VRI7uQBpnV?0`u_4}%rN2%lYfP19fEC})lm%G5Wu3`El%_FyU2wOua_7YzNt zR*znn^}F?n--+79-rH)z=9EyGrQIlF^%ADJ<#z5vVSJo-|N6X7<$9f-zefsn{Oidr z^YoBaW2R-~W6};nJ^^N{61VQ|Xr{F!f!i-aV4Q0xipZJ}9L&runMdKmoBii_x?4x8pL(lu%&e(?4q zzl020H=fuinAxOnE}GoFMw1-}FTd5tuL;p5e&d}pp1lVKjh<>rX{XZ|obq!AKU@^G zP&l+4`OEcMSCDP0zMC?eD{&^Lc}4QT?VqoYI4N?&W+Uz_S`@XzFze-LFW#pLHNhKZ zm*qOk2rNIv#;?TU1s_j;LtMlckv|&D{M0H{-wIBr+JH*P)2Ole>i2YnAb1=22A`#8 z@O-12te;AAQT+eT5(|baCVtNVO`;jv^7vicLqg<$v<){|w$p|Brr2VF-NhhPZe2_A z^Dz>4D$TRJ4yOy-z`4ayBov4=vyU|vVk3tSpii+mkd8$*`0v-!$*EAe>O4K)%+TlT z>znr+BY^Z@aenMsY{G; z3e&H&wYAsJT{Y`ubfD7l_&T5x%m?5sz z24djk6lyd(^zG$3++JG*7}=13SY9&c!D#8@T>^0~ONZ*gTz|Vw_UW4xUHkgomosoPL*0I4b0J!Vagr?QVk89DOR>gRV(ZxRUb!xIVb6s=kyXiQ%Wp*6(lOFoBBTv+9f z$Z@4j=}^o4fX4+n6`RKq8LD^RE)-zrFCWMEzd?W*j)8*VY(p=T{+064pOAv9NrzOY zojf0^$f|;D05?uOj^Pfj!h;#=-+jrWgvGOG8rqjW5;j4ZSOh{X3|r2MGY@Bg4zhHz zhc*PkgVd zp!u>Nx6LntIV4ZQ%=SJeWIJ$z)@HRH#0CwVBL`V#gVT z;KGf3LR#^@;RjX;2uBmL4ApzJW(yIoG%oXVxqM~SmYf04?G&m#w@YTp#nK<+)q6Xu z4fhfyD9R7`o~5i|0VOX^F>yg>oKqqD8ki7~U3Fae_Nlc-sN~IF{F=h50ZviLOaJ@-q z*ekW0-Xd;r%lE58sj9%N&-wD6)_nNU=T`6>#3q7=9ftZgiV)AF@anr}g_DIuzJL0T z_Z^ProJs7}Iv<)gs!JqVJ zel|W`KEBjKgjE{4zU=;H(-D24rl0sNt(Dq6;Sr_%8?wGM`CS310X}1RPJ(TeS@&gX5OAFibd7Xr! zdYR1-qFolH+G!vdjh^W1d;vW%?AWG`m281-gUbk{*ENHk;F?W8A+3NM<^m#gKHKon zy@wS}J{k~0y+?}t5qq%dOk%YP5)O48^mGF%}ii;JD7JMqrDH zA?|Q^c{pYW3vSxYv!M#s#Q1529dM)QGv_!kqamVvjC5P1%b<0x)Z+Y(PYz zwmJDj$T*$`j7_OOkE$q3iBZY&P?GDFL0B?Ho9ScCDnA&C^8JFkS?#J->MJO%Z#KOEmG@dT z;wMn@iD0NdUQK9W#*d8PXe1 z`m7wtfH>?4({WT{pETR1?UaV28QsOc)ukSU+g6IFgw=WPi8cM;?1=i)Y*)y{)+6JFtGkor_c!Xj)-~8aYd5&jaj>oyQ z_imeexuRuh;@*WCU7f=CcAHw`4;>0#XwC7z9|T53%u7U2Uctx_(-S2b>%t%@`Pe7e z!)b|@fl0Lm^+6=S4Fot=K1X~AjVn#*eg!QAt4~(-IxKJU`D*KnZIsp};U*+B02T(B zbWP^9P6VPMsGyt~&iG95hz~8er*fe>3wQ2Li z%IESUg?MBWL16%go3W>f(V+sYu$~nJ-%$p7v6Fl>4m(y5b*-C84H{HmNM7Rmsd~xMf1Nc4 zgFqmiSikD`FfWWiXbMqt;4XG|rJqNA;peXB?|m!QgtB5WcO@e6vTODF4hXNdxQT6B zJ#KN2lF#HHmU$hy)D^&I3J>dPaDj{*^>`vl>|1vPL`=@;idPQr{;VovqDNne`Ponq z==l$m0=_qStR!o~suOQond(h5W^+Xh$B;c!$i301e7{~c{1rRcw;II?+<*VO=$qe? z)}VN(QgW*O(JWJ{Nx{kcTfUzi!k23l3Sg!y$aarhjLw9-kVO(g1#qU^F9ZC$H0p(G zmuerAwQJ4hBWO{o5*2s`V+7Y>ADWBP6lbSg257^anAsxe#_IUu4_#G)!{qEUR((n< zY1|+m#1Ji{qN1cmGQ`{`aJ%;EJrI))F}l43K?(6-khzi$F)#60Tg&J3adYBZ)3o*8 zBA>})OtH^uO`>wGg}R*zBP_zdx5={vQ96D4L0v?EiQc$2P+y1}Vz(>q%6$nx$hu%E zKFH5%^kv!gMxSGSu*6nD{cE!2YwnmZ8F_L>92(Sb3I$cWNC~lk?_s)${&xXnWz>e} z369Gfi~pLeKp}G>D8jB+*c5$LM~GHqFqJsJoi1bb_6Ug_86NE0&4@eh_pRM>2}WiO zUJyEZ4Mx~z9DiUd8(^`{^87Z5wMKz$hJzV|KYGjgo)Z#LFdP;jfs+3l=`1+O*h|0k zd<28CD%@$&!0Al9VN-$EyN63$k7OvE=*ETqutb9vrmJK}+A#v!0zX&skO?fjg0Ybq9y&x9k0<`IG{0z5 zTi$oNBBCxXkQuj*jJQ}w*XEx1Jo9Kfq@Bg+`62F|)xn{D5p=WSxZ{X}$4dcPd6{Nu z*tyJ4Y?^>GLp3#vWSnF_sr(_*k;Vlp+Jm3nbFK@-xMJPBZJhqkTJM3M>+gBh3BnLD zkA9ZA5%DKYXf;sqRHXgT2EFSOE3rJ%I9?2^$^8DH{o$n6(S*2a&)H0uc=}REvQ*9V zzb`Eh3=DV+gJSBxI){(0lm|7wwWZ-&qdTNHRL$eDM)J_h=x6la&xAa82aP+Y`0he` z9jsu%PVH_Tp>c@PNHB{B{9le@p(130*ixE4KDt!C_K3k_?tXqc@i)&;7K2S(#LQnR zNWrt`u>`(aOQd6TB(dO$TV#R4hdC1v|Iw%TEkKi;cy+RBIE-^tN`og5$Y)#BMX3CnLFj4ZKwiNvAMUyBjzuplJ44^d0&1Swx?`!E0Z@HJR;qj(%EhEAmUTJ5#H?lu4zY72PGpDmppE7=`3 z5)j{oS*ZR55h=`hgq5T@@>zeiQI$AmyEN*+v2I0DyX%XvVCgzR*6qLy zxw!ms=-He*-LjB^98UJ%&%5wGu<)Ys#;*;!Kl6*60q+N&^KYh@$|+ z(C*=^s`ij~^)6=jwV7^%(Y@z4ClIrI+mF`naOW3>4LHiu+C&|~$N1iDI2e8SK!RwR z?PMGQefOR>oO5j~W%t)d2bQ^fR?;S~;opVm{5!mD?hYmH!QIbfbsS3$qLt*;p!SEk zABMWq{cHIf#%QT|0aQI)A+~+#rM*$(EEefHZ=SgX3O=Jlp=m!FI0sE}$WfLE%|~-C zn_@lRmtB24woH~`{Q!$2Or=MOR=T^60bXz`$#$zDN9A1to<~Mq%c5i!j7PFz<)MQA zH;@zJ2a1s}XQE}Ig)(vw?)4xtx$}z<>otx=pSH=As?RYfnsVi=4MjLToc=~T0-}AY z95?$H4Rd_Wy6Aq!_?$S}0+)S^A6;rwFSL1ah7Fr{D!R897ABhjI%4nJ7P@lG`734i z&qLUZN^V_@A&VbrEAxMBt7H@scqZkCy{!yjpp5v=n?#NMaRyF$Wsp}?&yS=k3XuY? zP*2r1J>h`6k6j@SRHFx%8%8&jS`cmFm}Qs9KJ!Tqqv_#%n9*B|JBAn0sSk^D;$46G z=hiyZ7VpVw=gt6Vzmuu3Pu#bGaJiPPSn3A4s@AKweVjIHoq^B!9#o6!BaE8QHry=i zACOxaZ;bq3ehAXp^BF|Vt3WtKKJV*MsI*^oFoJ z7saoW3tEe1Fq{_X6ctR)t5UG9>Hw^M1rorDqt4$65Q7LAHFS0LO_G0{1SS>)m=~BR zVFgcd1$MZP-$HnokW&*zmnvn$Ewr{y3YB-oxqM>)_T-AR7OR+*(WFhvD)89#24g1JM1me2tO`W?D+qaupS3lB4l3muJzcaQh@CK`^P^ivG)F&FP$Phw#wwrqT0pF!tifl=v%_K7^t*TDpbVeTskunky zU*Ik`6vXfhLD*LJfQ0`CR^VvME(5}Dv56~gpPjbd8yix1aISa+dS!`0=(8}C-2EYI zi~ph4`vQV{5Z?`_JKnC00cO2nDZVkK5kHJfh^cVk|M7rrayaHYVI_$}aZa z3+1t6Am+ESk4KpRB>)dP7=JvRn$toEJ1|qg_b)TR4M0lgfiTTd8h07r02bIloI+XL z<2R1hfkFqQLOrat>Ll>eSHfEulP;tI>{X%QVJ!xgxm)JoQNlZfz;j_YuPWhe8DkQ3-V(Ne)Wq zYSYb!=d9NjQS3^cX;5)%(rDiUDCeB-&8j)Bp;P#<%og1}(#gn%Om2Mccr!epr*V(o zol`#{3p=m4H{Aq?uNo3i2?V_#3cze0@ab8ehu>hO&6}p!g^@jq1uv85{ zbVneQE0Q#hOdOAwDS(7HQvH?iOuRaCug1+oJXw@PG|}hA6~9dRbiUq60V6I9<~KBQ zJ+|(oLrsQOVh$%Uvpz@2Sqg0hya*(_eQoG_XFYei{@WHj_KoG9JzGH; zT7ir$-dkSaUf{o`q!{rM-AGrrgdm0Nm17TvysS>-JACy*!*l_Y5dLQ%&Tv=Xec^Y+ zOc4gY{3RO=U06)W<5#w0)M#cdZg`K-OL*jzAh@(R%wVzvNkaaq7`}6+|FnY7l(UTyZ_df9LtY+BQ_hz4wAyOLqj?trkG7C*JgV9Qqo zzB+IDRhQa!lk0vIG0fOlLiO0Y;(O8tw?`ZH{loTajOnet*a(4o|pzIQhazB6uyw3OmW1A}^ya%LC0btpVhihx! zI%3*Alk{EoiZo_QMjqJ2xZ@oLJ0%%*hJZisnUT5pdq+J9c$dp0Wtp{V0RkiIO9a1G^3AM2p3X`N@!cA)6&oW01shA1d!u0NC+}^S3*DxVNt6iOyiQYo(L&K83 zbQ(2A@F99~FMCr$7X=0;YQTqV3yM)vjMKCCr{f_tD;s@J@Da>S9N2-M$MZx-N!1d2O z+dIae>fM5B5kPTmFFBh#)XltO zIgc+%B3|2~(PiUFq<#O$EaH1Q(~MWEs%Z6`eMx)F_x89@f|QKG@X0wv1&+VqajS9F zv1IwBQ%ewWZgULEJclsmbNtuj5Hq`jISOnS&J7JepVXw6Z^LkdW;D-?C4mB zo7$g-wfG!0auxYH4rg`*{og!FX9zo{9G42lgH>BslOR%oeV-owNtEcGj-ERuK6M21 z@vs(j2)H#g46_$F01YGukP#xc)fDraxh1Hg(I;2#fjE0NO+M26zXKj4bv?Kpue&yh z0gf10l>`d~hMj-ht}n`VUukk%3q+XzkU@s3Endwc^&UG5TRA8DR`=REk{nVGs3e3U zSd?qoq;!kdS=@_4`!aWPJZBi%4q4v6oQk#!h+_$Jo#UI(itpDzueJn<{CVuUuzzYmr}o+~s+DzlZnU$M&GoVj00%=ZvAQxIn@q zOUC&t*xg1`kKP&E$bf@KTkoM1&|ATb6y^w^de2C7hNntUhOClQeoe;6M-Sh5yq|41 zOO0$@FbX}<1|{UcBL&2x&5N&a1AEthxI-|M1jb#xWt4E~cEku}GZ+9F8d(+i|CptM zhJ$&m5fCNGzLVmqVkioT#xatRP6jrgdYdg#?wV(3CG*>cI4-604Jozf)?-QDorqd%ww^f`Y= zGcw9DaqajVEoHj=#60u?R?S+ zCO}GJrZjo~ULd8deHF|+_gb#`kT}^4;1|b z*ETRQTm{28G=7xSPOs^1BKoH%^0&o#Bf3f1buLhiz6*|(`t)1ql)=bt%L*dY_HNi; zy`K5QH2jV^)+^|VANr>Iii^24(n-=`%sO-dMAuq&oI>KeM&kCz-X~WZq1pZMaH2jM zW>dPp)54cm47-Ew$1;wBbBV{Ph#Zdh zMvGJl+O;qGh};qQ5DeyYUF*@@Tl5SPX~blu>W8wh?d$Kn#XrSE9i3wBTS^*Ek5rl( z=P>aGmW0I@X*8FMiecbU&k=6)yw!m!CP~#2=GJ8-v+{9Lq6YS9$45#kKb|Yy+xZo| zh1mzD>~)ceZuxI}`1v;}>!{;e5JguSYQ(Y;sbX-kmK-ZMhOretXlom{dR|^sS`K<& z&H_?Uvk}qDmUZTwI%#g~CNJxLyVo&k3oaACuN!gSa_=q{4mtxP?d~MEsS4vdASp&G ztIb<@lYWhF7&T3Xj929v|6vIRI<7=Uib;I8#0p@K3IrUb8KUsvTBhrTHo(WS zPy$ygQ}@SK#;gy9QdUK6@evPayR?`p90D-3Tjz87nYLT+WnTgXmCeSN`ca7KdS&-F z7tYs%mkBo!Yux+nUVoVpe~+sR2q~^fO|vjnlW8OBZXiBNt;2??uMd!Z{FII+w}sd4 zc6Fy_g3O%6v@@niPd4`1~@C<=) zzvay+2kh0;j^D4WhCfFfx3vz~XcFy*kb8XJZ

    fA=JaJILk}P9VIRj`5KX;~9IOCb4V>Do{jkFT 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%0D?p_4cc_Sed&rQtUh_;HPr0mu^>^#m2| zmCcoI6B@OFA*zWsXQXk)O^2s1!_c0ih;ev`sQ8G@jfmQA5bYIhU?7VsoMlap!ONK& z5|6PF4igJjH7b%4@RPFmLkw=~R+otsu~YUHrgo=*HbDkV4YC}E$r03VJ6_3>GHd0hx9|ZJkoX)OU0a$2QW4i zH-vaZzH%$pKGSs5U;r908rDc`)%7(As4o9rj`E2m)d46nY8n9=DBCiwbz*?X3cg%6 zjZLh?wXrfwQ6s|O0$nR^0lP* zoES|>2af4RbwCGb(j!j^_#ka#8R`zvw=4-F*2$%NLB=WYtsJ`W!kXL?C`(^|)?Wzv zRk3+1Q1MCL4ey$_#i?-ZX#wJ9IpQ<-=%Z8we$6M>JpH*BFBQ)=0L^~>>XZJ!7stS; zISP>9%XuL}{99T2awG~kkc#|%?!T9<@%p$v31B}74oCsy#uyUPp0&RB8ni9!u+jlVGK#T2Kg_`Uf4drsG3 zAqeAATJ;+;f?l!x{_uA{AWwgqw1((@->`5b1&sc=#__3iofJg*FmxsD`O9Je06+jq zL_t(A+ytabo`Zz;C2YVkzZCNp+sdZ+-OI9OxgnuZe6I0dQ5 zBbiq^5@K<#uY=WU!H5G42%PjPcz&z84IX?{auPBA{NS1=$xGow@7F&o-0g2g?DLL0 zg|ThyG{UO%%nL>-(??}XU5NN`dFOd7c$izllYU@iIdOB`6+ZKN3lNa(GIRXA0zm8QhcLBV z#_PRWCEBAxHH4eH)yw?Tl)#g;y9sfbZoSQswcL|$c?MtN+P)L3k5_KJcOPxRxA)3Z zG|kmN+vgvAq~a}A;@B^8r%(I?iCEDVmDZ)6eR$x==#xQS%_Rq8HeG2$$=R|dF;><$ zBAQh@ZNx0u1#ua(sHDPZdWP*ebjc&laI|G;Ni(A@?azG&ptW;}BOG$Dyt@i5d)z(z z{2^<1NB~fGKELEtE&6QEQ6-H`4xtY+5JN;H+TPh$ z4eKjxgq(Q@G7E{0ZT=0hy65vo^)18^?Bi$Q2if(v-y=7F)lGh2#~MoN6Lzr4Y0g+E zJbQh_YCd8SY$`h#%rI_6>%avu_W16!8=3ZqMWhKD1TIEer)-tCGBk`bKCK739rXs& zo;gtjt~jS~)3GI*;h<^s7&3C@KCGVZJw$M`(P-o%(!9qHe*tVdB9YmXpCT+x*%>8% z#-r{z&E8I}92__C!ARjaWO+o~^guZUBe$D+N*uZoi>Vskg*#L%m3V}SW{ zs{BBL@4~l=4+cb~&q60po{3>V;VAq?RsEY2B?sirx*VM4x*@=UJ%NSooW>EsD-lhE zcXw}*Xb8Cjv>DSTnU(o&zi^;sr){(f91Q$pz>WBjG!oV{P0;`TZW#x!^bTI}{NMrx zeca|A{75c+z}AKdXF?=J9+h5wCu2Qyub;H3U%4z)z0`xU^kSOkvGCBZ58pc%5N*p; zg+>tWb@flbsyuPYPoRZ!4Sf3BUs|wv_uJ-e246mL7iAJ!SKa3xg9DGnED2s0JrNRUSwwZhX>_usGFSyy5sUR0Rj4 z6T-0T(A?0G)wYACJL~jgOJhmszEe6Oe})-wWR>UGxuhCovHci0$8bva%Wz3FjvFzw z3tElLyM)_6JFx^$nrkX$ zLCl&IEp43fQPv&Nnn2&DO^oFoxG*XU;62#T^opdUn;6G_aga=H-{b)}#H{UIuurp8JeM;DGn7t@c zD6yvetGD6EOPB$>47M_1nzT?hZ74Y68y9R-XWQO<`6TTrYgf^Shrx4!Pa2Z-rF2fB zJ8%*(>whGnHpmUC$4e0Fha6-0_!qxmZwZHmpRsoYQQ3^VeFlG2%VYDE{ce40#Kyk+ z91FPvCydd#Z`ow`^f02_@$xolQXtB!VJYR_+K5`)TkReoI$6Tp$MhQM!;j-@M^na!MU=f%45T80AUvJKOu%3VF~SGLqR; z8P-6Uu%?7HWr=9 zX29M0p!t|X<9 ztlPsJ!TuLd!dYB+b{?%ek}K@fpnQrC!esz2cPmznEv0YmYu;f~`gyIabFTLI$QJ-r z8tLTC)1>CNk@=XXlkf5eariQR`3srKhBrH4{tO|+#Lo!ef=iWEKG6)a8LHKXEPIESW{v_zh9G5CAK3)qS zz}Ye{UVW5u>-}!)E0_ys$ty`2rVrO%(?*M_{(bKYaSaA&ba9VF7!792J|*O$v8tA7 zqt@Q_Sg1EMY()&N1I3S@YE$YU*jw2O3a#bhX2l2~G0%{1VfqVh7G~!1lA{@?7;9U` z4nGI>ZtU!L8=D-6j;M5o>^g^b!0fr-!8HIad7iQ7;??tKFgJ*~aD$4523V##OuaKSW!NJsxOooKIOOq<>0uuhBem&0_3PebA8eGj={RSi9gjb{_#_ z_Wnb-bu{4)H+H+1U;o4!96J4oVVzmuV7=7a{BAoO5~S&co<+pTB(D zEwQ5SWm8&syQLf{vzsI#()SAov9m$CY63x~Lx70Xkj7%A%O$;V_8Fc{oJf|ZmC1Sv zkX+WuMDl53c!9uuPzQlvrw`seZAGmE)2z-#NZ?_)jq6)dbTyIi#*rA;B`3ixhXa$5 zuq?(F8$onNdhLt5U?%6Bqpm~-Y)G@42pWQZCo`6nHLN18%sA2t4x$5wh)z}*+%Q(a zuFs3^^$%EZ+}Q8#VIm;AKgn}U8z^UYpozGP!UnF+zxpd}+dk5;xAh4OT8Avc-0D9k zxB*E(T^+sr3r6~V_-!tg+#J%n@CR)0u+#N%t3(yfUm#RJEloemU2LgvHhse7JE@v7 z&5WxZ+B}How`z)T2;i`U8sf#%T@7;FSy&=qiNegOQuWQgP+yg2-2N$kOf>K>IDDMs z2XG0jJ`VB6epCBCFL9dMlzbQ>=FHTt*;g%3>YE6JbudeeatkLeo-I*r&T(6QYK zL*UBGH0=+@PNF>hc7Ox_<$KxhA(OL&>~{ytriwPUIGt)48MWQTS*+^`jmPrv-KTW15{xo69sJJVOU zpTV7?Eo)1ir)zmb?AXK@AA^Q_Kjd~-*=(pSqZJNXpRrDMh-l-6H9r?ModK%3GNxZ@ z!$>1j*Eb9txXWZNVg6#mD&`IJ@5R&S-Qo8yFt!KR&7i5()pZm;?tlJCw|Niaehg$2 z*X5}Cl!0v((;@p0m@ORbbO)C&vsqA>NAdu9aVN0YOYjC@Ud3@;{8^N_wGioazW3h= zY}lT-LC8*z-gK{CzUc07YR|^rT}BVK6Vp&~M9Dm{X^E z5$)B7>FdWcgH7uc@$yFk%^h81PsaIQnZ zJ&W)JEyQ=-(lt8voc1!hIO2ZC;LgrcrkK}E$Bxmbe}?JYRSf*^U{*lW09seH5pC$4 z>P;D4uyxT>PTcwj1Xh+Sb?yNYPka~PCqDGfrn^W~;#aBU_v0U=~BcyY7Ns*5gL2P^3y?Od9Wz0@)U^#^8(gu<>l)+R~?0T9NvR|JvYj_C(e~V08 z)n++6H(Fod?l85^X2mhE){M4HM=4k!I%RO#f3V9M;d|^Ny(KJMcxD`knb<4R2zWJH zfZW=^_d+8ZsNTZC^j`~YrLUpvG@c&f$o1yc3ktP|O_RrD{<=HGRIJq-V`fw07orSz z46GR?8Fe7y%GImG^ofgjjFccrEtZf|?}dBe34T%t-MOU}^YVaq+3bR6h`K!>VcSz3 zb^k!z+dt9}k>#Avt1)mf1)98ln*md-3_R*~+E_GRo)FG!^&-bK1fq`#^0LVaTl3w- zWO(tEsjoVS^Qb$7XhNgx>nM-QeWMZuRQ8Ta#O2hu^v| zCf<9dazCLSxxxze@)n2BS`W%CZ0)cTaFNk+^@ATysS7`K3A9iKD|LGrt|uNJ`jmU` zXKHnS9I9LwQoMcr;Egg9waQm%R9m-lnLGi)-TB@w+r!ZD=BMKHzCNqH?D)<^rq)qC zemfelK0h}$_>~bJ0KLuBXk!2i`tDrxNjZh`{HhLUW8h@_ zm}$W=Xcms#I1+LC2kST67?8X7DQh|4@AQVldyy*}0(%2+#H3Art|QGNVkBAn7gL6F zlpj`5TYkd9;2WG~_3W!}Q5AlXor+@yY4f$NYMCsviN@2kE@$lVV4cY|F10&Gn()9@ z(Q6M3KYRm0X24kU)c5sn|2}(6HZh9;w|>QWy4ogkW8fB+MIWGHa{3ONO&rjEqntI` zEf7=0Kpq03Twg};iUEa>aQY``(Vb%}N@>e@r09-Ccm@K^ZyaN7_32mNb&tMy2#sVx z^PGblNLC_0gih=-$i2J!zB|Eew^m~V*NC5KJAxUq9__b4-n$#TIG8N%wa~4NDu(dp zO&x1b6Vb-W1-pyhazO7M=Q?hG`UJTZG9IQrGp0q+VCg$cIw$b~YUR}OH9-qvMk19t z@Sn2LIAMDAhG2>CA>zJ=BdE@;6vK@#Mhq8b$C%$ZJ6!=m6h-GUXi7ma8b4=Qs%8Xn z&H=H=#8@g0Cl}TLcTXQ0Y7EJny62Es(*aor=&_Gkc<{I@)t7FtCp`l(F(eCexo~1R zX#(0=yUjN&#InN42+uKf*FUhx`5nvQKXN$ibJjE&dDYBeyb+PXQlk| zdt`yzqwW`X?{}Nz<+M14|E)uVZ=U1^1ajfb)!@bdyc2kZU)4uQzC_x;1qc`+7)^u;34LT2EGTi&bSegJ>KNk?+2Q*n)4(gd40H`q5B zoVY2>$vH3qpUMgykt8_$o1m{BTpxdb;Q5dFNbNp~s2dqkkGbzW-}%c&asJ`Yz+WcG zH5o+*sMD^(y{<$2cJJK<*lK~|DOAzl>HPB37`|a2kk`YsEse!s9#Jf-b z_IF4LnB7vR*<_0KQbd{1r`44wCb(zhsmQ zXY)a`eLN7aLq2R$^AnK>FXEW1*S(1zvUqFN1rfgusfKIj*xvO^1vUO zpvZ519nsR-QO-Y5LO^a25j6sC5qfm#k%T~t7%au4Q2k{;fw>8;$CZ||z*ba(CRKd< zmeo^KcQ!zfm3I%YM#wk7m^rloSoAL9J5rLDH)&{#+3#EuZ!y9Q%&>p(YLE=*rr?J< z+zBIsn66L!&dA57VhdNcdG?wnTJsWVCB~k+>CslsAl%SnRn1ny8=C{|xGVM8ZrdQ|;%R(fOuZVe9`8{ZbbTrY<_Md+^egb;>mcF|`8ugyR{N8J~@cbFV7 z;J^u7x$PF%fGbrQ9{mNh0-+#V$|yi})W-|>@$P34+=`)31_SCDcjLtE_L(MY?zUeB z`|_Uunp)au5y!~06(ZsMN&!;RI5qc$vQ#R#lc9rk%AA;q6%8A_Y)7qP4p^HR-LPAj zJpNRlz1}>-r)$ryPrJZ zpb?l0)}lOk+5s=^4bG%5Ie?X@j9&pYePq&X-ByZ-OdPo8oLk=jB-W-g&vLd3#? zq4na&0z4ZW?VA*W@*t8}+d|zA(c#47@!(G3j-3fepw%L}Vv+99*}MBmST9=JMh=Y} zTc*hqimu!_EfF6x|N9y5`br(a`4wOLBz8^D9TmLs7(C=Lv`00 zk7K8|#XLn1`=^_485~x--TQ1#M20QHgBU8g-9ce&)%<->639sv@-T!nWntr&Vp*hf9=- zTM_3aB|Kn%ar2*)-%}%=DL996Ivq^w+N2y znJk0cJxux+Q}uH1r~KjzSuH>U>>Wb2EZ85(rKR`q2VM*FX6UuE`-Xb7h0 z3b{AIAO{dx)RDDVdO?3W!SuDNgG<;&+PdROO4NjS^mOVx~O(ZkPCS z(BZ5>J~?7JW{EX-ukV_jRv50*NR^|v9JXOYjFT>DG)~+DV-=~Suh;+(R*9~Q3yNzb zv@yI-qtT+N z7(3%2%2?%4rhPIj?(CG{oPs2!Cyf_>6F8GqM(A?}g&#P;VvEBeHaxr26>+K=0Rs7y z+9L&MaOLHLYu@_4c%}DO_;RRU+b9H=bef9@z|}{*b#8C-hau*~i1)O&Zo-Am7409> zwZ2@HEWb1lRjq(2fWGZ&#V~B)p=7xDJXiV^gH2d0&Z+Hk;E1#)<4wc|n3QEvINAi@ zVg>}d9XM*VclgDUFYHO6T)40ufBfmau~Bb=Hpu2Z^rW4cl9q9&?t;W<)cq%)FtBh)I%`Abe}$M)^;yeTS~Jxbf-8z5 zfRO{2$`UENjFkHX=*Mq=dWmMq28*k89O96=D2kCW(=gxOz5CrObiY7pH!e7b0w{KH@S(0?F0v~JBiT!H6qwoMi#%DPIYeD@BjAOULaCVXfJ z@^2h|OVWqw=IN{7|6-T$`7raU`-g6eUxBSS39(#8C2kYEh^PY5o|-7ZCHj~&!E;>c z0f0gR!wStRgdLHKICcq>a1B0gAv?eM>~WZzm%sat?!$s3o18*$z(?1e3@?#SlUNw@ zr`%v|0gyhYvV$D3_JVq`X$Bp#zd%J!BJLvU7+dQCea42i^8*-_zxuj+GWd13d55(O zW~dG@&U7cNaqQgP?cT8)@)Udjmu{jVzcZM|>#Ke6U>$zZjeNU&OkLyhxI0P_ zcMa}2W7ZtVI~F(XSF795n+!&B;Ph&MwG2_-f8YFfs|-?`YewC?k6#ZiQKd<2&LML>Cgei>tTYYdGKg51$~%+R1{Z zBdr{@B8!M7$Vjd_wo)R_V4JHPvodLkF!`ze_Gu8ggnSDJ(;|Lk*W~+qvk=|s6arjBwF1ix5oz2A+UE0?AMpycxct&%7ah2rPL{wI^-88QpBEAU^30!nKQRZXr`5x29cTq><{L}ZC=0p=9S}ti@W=(*dQMkr}mT#4Co?&zSmv~f- zt#w`17QO?nKYXR=U=d7?++a9fh?dDj#6&;4WP$PpDtYIeQ7Zvg-E#ZkX1Dto^A^OD zE{PX?qtp(G-D3>~PlZ+m{F3 zC6+~{1MfI+W%uqq2)+cI0h@j-&dB|5Ztb8SzJs|A)}C0gGH*>|-#~mXsp|!rBPSf< zvVw_g2`mM(8qk#~`s!Q2VXu3&gg6Ni>KW@%r)*?g*`kk|2Zam0aOQ*9$utyuM&u&l zMhrv+qq#DY$xw^~lc%Az8^tONpxNLkz$DmdL+KIiCLI7g&V5p#>MFjsyP(_<0$&GC zZfaP>-FL!B9J1lX@N&3~xJTbqju`okTcJG|_ML)Zrf#dlM**NCrlO8iG)+JnaMc4j zXoYUasi|arl zfptqmtE@&J8Vn^NxCR>y8{xwv z>i(Mgur4rw`$m-FqT^-b_8dbK&tKjhVkO{F2lGj?Kr2Mp)7l-_Trod*jY`yC|27@- zS6_Y(0Rzq;w%maTZL2vDdq{89&+_qF8IodshsdWhRRQ$2Dt#N|iC2a8r8-8wKYGV^ ze#KvK_>wx#y^>f^Q2zzzpL-1+%sohqrnEjqM3|j8h`|i3a~Q}9_H|B9h8)I?Omuk2 z?Boet)n*9z=^6U9;HcbAso9aUGeIws74|+Gc;fso@)INwXkM*QbLjs)&`K2j!Eu3< zI#qo8R(2dhJdT+yzhz&+8H;%CH1w=i4>g%}``w-U4}s?jA{RE&V3K(SQPl38-R=Q9 zfuH{E*Ey+5mAWudp{U?OWZ;(7EbX^FwFS1|mFo{PP9|DX?T>O@D6#>;6lpB8iEX?I zF?-`I(XDG}jc`(u{cd`3%sI3#yKS^r)`%;!XnRS-rx0-u5#NLpe}D9f^sl=2^oJAl zsJGFzUcz2GynV`a$%$N(B}9(wg!C+4MM_zeRdAgJDR%90_U|#={3dd6iEnTYZ^b>* za@U}$&di(Ny(6DvL@sv`!$Msh@FGt$jyp1PR6b*y}}pDqnHYeQZ!0EytX;Y$vS{y+Ze zud%go-u?Q^&%66~_ljT>J~BsOVq1+|>?8rpY%v9ocdA5VWN@|=W=Y%(82Eb`E(af2 z2JTzJuCHCT+wA-eznO7d~%2{y%;buetoK!7FcZ`}=>W4Gn0W zB!+J6nrN5D!Pyp-m_j@+5m{VeG)_Zt1LWN|=V0b@W`*o&*jT?4f~lzn``>H?9)mCs zpFHZ`zB=sQoV@_U*%BXovM+^&Azw=-0MiN5P7ahe5IBjeL@J^h2-ggPC$397hNxGJ zF%`l2jC2dJ+qNYYM2RX1ey*b%A0$DZlWQ27Z*@v~{UK0I0^DBa< z3Cc~c=C6Ywk}LCB>65PI$3Y#>@-UF%4mt)Wx(wvB*%m)yJ~Fy_$I0g)5wgf3)1?8n zfm!=>J%jjO{!$+iAcIi3ibO!9B@dDj-V=IUNEy=(6F70&zI%;<_`mtPuR^e|u0HGT zqJ5xVt@^LZ`K_z%WYVdF_3)kBYLXOBesGtNXF%jL!%H6*j5nG;Jps=r2_{X`(xJbI z=l7yp4|9X~e*4!)`uS&w5(!la{H0|n&xkUQVHP%#Z@QSf3XU>4re4&Qj(CNc(4*Jv zVBKanADcB!38(F4aWJd?!DS)*|D($WS-AYVCE~(u!SnZCTf+ib&wf2)@S1Rtig0$u zA>NGS7}eBp7b7^bG;xs-W&(n7e#9BD*xg@c@o))_b=t8oNILF4UqKa60;EdaC8CCF z88Y!Dtm=UUa&c31$9OjNtFvr$R?POSj8Ocn8VAj-!oHg zeL!y3L1KnH{v7UfcDWs~NoWJ;S#<$>Z)ho8~zQf7!n+=L=Gd&VIUE);mqTexUA>7;|7^6&NZl zDG9_W1u<@J5z=Z?cfXZO@X)QlvYXApBWNJ$fV&>RY1}w9g=i1mG{BQh0TU2&LON=v z4AC@+b+qJ@p^PL=9~kJyRnt(BNchw}!_V1^_34T6gmzVo^y=-K?&|O03}}o0=s)=L zZUWQgL-O2;S9hEe*cr zSE`xZ%E`7*?(wj8e&NQq@BNiQlMe?qW7tl$W<#E2D4MQfXJSi^hs`3BaA<@CSv=b8 z1}&)5mn@_|!uABZ^b@!*3HTNA&M|GEj%~DsQZezMT`5Q9*ymh63#BXXK1RXl_AAv} z{Jec%NW)q!e$E5o9vJCqOWX$gAhq+KVT};Q0U&q^hdySr&i&6G zarW(dj8%ObS{2O@+h0Wk;RKH5OkC@rsMR{<0qyB&0iiBoOclEfut>-!X`4TTBm~;c zQp+61zP7&(=luz0XR$VjZI+XhHzdcv1>(jiAMc*OIztw2zaN3i55L%Fpxo(xz*ft_ z*J}Sro0t`BJbH+Z3q*Vk{bxob3$=n?=fo)xjiAi)nl0Zq%Bs1mQBt-PY|0eF+Xc>W z#!MrkLI?p@&OB4Zfvo8U8I)!dubGC7KL4Uy-rws^*baNad7495$brY80T|T_g--?x zDo>*6s0A%N<`;3~4kaK#PKg=i%5X@WOoQ=L?$%$nN0KPw7>>)vVSyk#E$_j7ki@4* z=!&y|l5~+H@$pC+K5@5^rH20JX;|cS+6X{3aKN_tAtqo)V`SbpSUQ`%LFUKIf(BxK z7CNSNVL=vDB)Vxz5rRvGF;17%pV=bI<=$pl5#}vvCV?4%XP#dxR_lSY>FaP!{ zWb4=6fASyxo9+o#*~UxCA06>&AA*XYBeivbq`VTDKttzTse^A;;A2?m6ofKBi{NW6JmbgHaPilT zaO6=J->nS!7C8FXe+vR!$vgO%GT_{z8{9!@fDHKpk;O5KdiNjRNA9}Uy*oODa6`-) z+^!o@zQlOiOg(EE0z{ZDB+l4!?gE|tD;i+Pi_d}eB@6v>lbiJCBe+9=Mwf*%m2g-d z;g`Blp1_QJWO`sO1`H0ZlV*OGaq3rRB1eYkC+h^!W;Cw)s9g4J3t7A3LgWV@{1xr?lSn`TGLMWuMmSf3$g^32;Yc2v}M ziBTyA0kuhv4}QXi_@^xJ-lzY;xyv73ER3Z^YFF=wu9$mKbPoSt2e`3Gx`msXC26JS90&)CmHvz3FR4 z{TcOTsx(Bub_|!3Spdm_))Y6rl;kQ;%bFs$68O0N?z6Rw71BXwe%X1fn4WM5+L-wI z+wYU2Hj1A-dcZ&;Lc;yHIjHI48sBMUU_yG5TZyA>l6(TEf>qW8_;%dVQ~%q`{4E!y zN<{o|NSO>Is475x@SD%Hb4$zkeT9ATojc(675qwiz|nwq`XyArHr)M-CAW2OP5)Ey zRzm)pFTZ3_Zj7P+zk^FU;aI+>-Eg02C~9?MWZ^Ton!yQW1pHBDlndp~I)J$BP20#N zS)5eMGV$hL3YRwUoiOEvvlWR`3!{gZ?iDtl3FCKSF2vDSw{jON3{@q_3qRsME&-zW zW7_2x?v&5SWa(#@5Mo6aYjEA3H7h|_VU~UO{v$*HSKZT--{mmwYgKWXy@;<8&=ZK& zF=DwT7UE(M3j!sBvqZmM28mH+z{N<3v5G+yZ>+H( zuDI#VD-L`>{;#^C$0thEHFt5$qUjDhLnpLFY_8MSUDH!$?yk;daC6LHpk_^Qneyu{ z;w?Kn#^;LuDA&$NL^*72)+kuW98#wTsBm5)7JB{tOPFpD&J!Ol*{*s`K?Y1)&LOx1 zfa_((7fh*gx;!h!rE({M7MT;E5o|Jn_OA_V0C< z$l^{R;NipYx524Txe?@NcnpLCf5g-CsbLsa8{%L&0Gr?kOP~6m7~8SzZ|}@JjE-5Onb~;p+&+XZ^b)Rf^znq zn}5lTTv+fy&vrSRDL2E~h9*ZN8jbw&o!G6_b?D<-1{scoH4~PN5CyI?72nxjg@Chh zf^UaacUC#*{_>Y!bieuY|GfLx|MsB!-~Z}a_kVr&1KXxwcKa-5ZmfUG!Q2dVvExij zpyGKwVPVX%*gV1OXx)huaONpwE1U0zp*AhB-}!3aCV-zf?Bk!~sself=Q*^1o46h3 z25?+5#ee_q1aSg{gB^_OV@oSk8{FJtL2ZrmY&o-5PB*onp*=)FjffNOCG285TdzYH z6y0Id8kN4yy*>K&Pt=ll>4Q!Qt!%InH{09xpnu58gZ~n2XX=*`pPCVO7@49mwF{A% zzu0D4M7O_6ouYIRc!~$Nuun_Cv?xXyY0CtzU2a)1u4hd?{rVeH8(=)@({2sZ3Ntn` zDW*Ba7K?i18_1+M)EymB=i!V z-YF(jzz*b5XfAGC%h@TDf>XalOJacG_ATxig8vInws(tbc2B}drOD;6LclXUs0OrS zH)7Hp%$7{66NTD@2%59aM4>IC4eXU3)H+<8D7S6p_MV+#f-9VQA!e1%S{EGg{YPCQ zhp_2jQw2<3wvyi!r-B%~Paf)csHY^Na4k{qO&~?(0`S zB2Rpb$)3IL3azL!Hd1LfLmZpIeKQUR$7?$@nNlc=p5mu2mc+|?^_S$kzxp@pY$bI! zcJJPYYtNtan&bONVL$#P{VG@Q(em)&>><8jBibLw994L@j`)&hl%RW1u3YUIn^vOf z0Ou{R9V9KQgiI}q3&e4QZZF@{&;f7+0u-x%984|~W9?NCsP-g-4=&S^umeYv1{0-D zg)?SJzqL^IVFTCzK{}(DvM>~uial7rfOGaz&KwPqWJmrf8-0P9d^laiM=lJi%8D<}GBf2m-B@D}Y4`vG-7lHwPZw_7fbpi=|jY+}cJg zbQg6*W`~HNW-xuWtg{|rqH5wUy6$(MJnqJ)Km9Xb?BNsZU(@YVB3KYr|l9O994vl9TAYuq40(MtS;m$T*ce@WBcURkcS@4`9 zD`%)AD~P?L4&1*+_XT?Jnnq2V=c}P=Iu!3A(l%x9uA7{*1lg5fAeeN>pZcbpHg3vAA0^wo@{oRCz)S`|=a~Prmx9Tf1tAB%v(Z=CSd$JFa%m_dh;Eetg9O%6a#1 z{`@!5)Cj^t;A1*~@=Yl8gwB>l7&@{=b&{1qTezDC;qsUhh&bWV;|DNkL~q_kM3h6b z(;D0K9PE;k&DLNL0)RUq5>_8xDPL7I@$KZekHO1T2>1p>WCPW~HROs@ro5Nb5fo+$ zj69RmjJCFx5EpdafBB!??|$`UulxG>-=UKBUAKOp1y4H6j785YWUtPOQVz>Qp6+^$ zScQHd7WPL82Eh5TOavqrLEGiGce_lZQte&-gy%fbKM<$opK`ZcleMrT3T+vCCBmH9 z^)VV5**ORqdyLi{5+ zPFl*@-3OAs5AnXnil=mCBFGsgZq*XH^Z0Jm zHeetbVIDWNSQbnBLfF_~tODhn7jRT*qIatBaa2A=7<7%lRzvKD;=4!1Lgb5@7gi!0nL^g<` z8!e|j!}O-2Cp+sekqK@gJD#k04kxzA(aOj=0EG#(_(^(I(8P;`$#00a9K2~&AZwt9 zIi~-^Zg@5tLal>in3TrAmisj(ICFIa^ zJ(!|WJlaWp-xX{2E{1E7mxe`o#CmqW` zoF4WKy8_oF1u>c;CVh`3zZ+#I;fQ%a;4(Oxj8)I5>I|CxN`i_y6t}n@B7Ly%*+mV3 zvd_weYoO`^4pn9$eZ#Wg*I)JOZ?$Wf7W+pCg`sfAyJ!jUrYtfLVUlc9`xbwyB5R#+ zbsdd1{%V%T0Ft^G5Zs`g##dD1?#3x1VAo0L0aTe;CrGlqib-9xQruFXGdYQBU*VUh zYXGDP0ap?*!`+!2;LA?bZPXmq6j2=YdYjEaoVKGRfsDG>oJzL)fCJw5)*!Z=$U{8K zK7~P!ISaTt_awYK)UG(%X<8!97JkajI>g(HL-JxFmbkkQ*hGZrc1F5OEXZQMD}&4u zDv223B5|}qMwm0S*b?xpgbHH{Dl`k|yfea}#7oJ^|%3Vn!9b6884jUSnls-g=aw>p}DJd=47Wc-Y zE1fN(iV#>ri%r2Oi7kW}G02dOH7+!&-Zvie4iR4(9YbibzssO90&&sH2qCEGzzRg^ zwP3Q-GHIGNbxkKHj8j1hUZZafZo$)xw0KGMfQG|kX;v(juT}O>eOPysG2XmW=*FJ| z2pBEFhQEM_Uv)2DvRmyh|L<^DzrYaCy*qmlJx$hva1377#m-@h)FkQplz@efT3_lZ zr{uKNkmhgauQuSTFHmsF53a0T&?!O~aZ47aYUgr?2L(f8i* zOhshh%Wy10+r=-%U!Lc<&fv6$SVaQvv~)^4KYoZCi|9v}s9IuKZ?g1&Zx-|?in%n2 z3>WGQFcq~t-~jNLAqGn!>c`4(*Oftx*M64LyXOgvs71xHzU{I;1-a(X1F;YAM?G7D zJ<$5H^=(%`Y(RxN+g3EO2Q?S5EKbwGF%~rOx8GGeR72R#5@{_vN>C;08MsM1JFgi? z-3^R{9S0J(QE9WZ?Lr-T7}XjEkz0STh?QYIeDC|duori;&IGtUqme$ z_TabZfPsu>FL}1<)y(qM6vl9LpT^xB+Iwu z63*=k%*z89G%v$~inq=M002M$NklnN?Iw{-zo6gy9?lh6vqz$B zuzPZIXDeZ|rsRykHXxqmxIiEK^w=G?ia=#oxTFcZNF>Lum!SH%<>of%-5FL3waTd9 z2$2is$+4%x(U7P{s@FY%fUiNM?>xAV_ykLVlq|-*;EI=#BB%=Z>6f1|OJQdF?Flm+ z4#D8Cm0ixdoL~%0v6LcMW%9x=8_r-PmXPC^0m?|~dwlV56eZwxQW2|HW15ZxBW~I|Z7qW6{uZ5T^^HRmI2fHuA8fV); zkmoxM7DwEJjfB!)I!gzU@C}?2vFM4|3?uBE+yfVW2jFNSPW$0E$mPmVJmG+NrXLb- zx>9nTXDsqL99a$lugnTrp2IK%Li-@J4#iMRVp@)za`ei&X_N`8%5dK+6YK?}?&roD zWINo<1Vm`%{Q$+?jX;e7fs&9{m_|p9cBShI2kRSHP+2Nm(4xNl_3!0xP#d(l3NPyE zR$!9}&ihRI`k6NWc+@K?8edqJM+;mr5{>Y6Ex6%e5e1_iPcysbYX>-BDyOH&{~NS5 z_URm1KmkFGqxCf5DgjTf;sxzVLctdc-Pb93wA}Tt!V$hNie<3e-ncpVH0((l@iIuR z7N&ifgkcMI%C!-lFyQQ9*F-LRnJKa}D~soVPU#@>lWrFVK`VMF!)68|vTw7fxku-C z`UB>BS=Ap?zX=YYX27LqerEY!LIovDWmzFA6hQ$VVNp?p5Ute%=D!q z8L*9z1gNuR##^llcdqL0#=0;_0^0fmyPUo18cNEkd*5gK0uU~Ky!G>~u7$GE ze)jv68v-b2zl4d`y$5$=J~q}A31M5?FQpsK^xr_w&RC>OzomSNXG2Ru;aM|5g>VBA zjB6+8#o_1Rj3}tnu+|Dj&)#$|zj=;cH*`_DH{>wn35QFtf8fFAkI5f~lf{&ogFF@v zr_h?M%|~dqJYn#E*S-AVs~FU}_xK?uLl`6|m&{)^FN^C)8{9yon&N?rqin&J6OR=_ zwqiSLaE5Zh?$#qjEZbOKoS=Tlut8aYlA|pzFfec@`**w7?9Ot<75Ytw1h6&|f6A`u z6*%I7yvI?(OSo4;yxS;vC*63YRT8FL37m#Dq5%_<55FlA##-LPd2c;H8-OE)PO+;X zXD7!aS7%|<7g8o85kK6m<*ZvG;0W!MYvSe&;>}>071wE#dyE4AfDH-*W!qz9-8@&> z%(4t2UqT&l404P@{A)3%072TqfIkPG^hp6k$ucFfD7gw&nH{A5Af40fl#_B1H(ZWo z<&DW_!G^He#1!C}Zes9bo!fUk%Ez?xmX;wUo=IC*JzD@jxy-fP>gh}>L0W#1i-W*& zsB#l8+2C=*f{J#>fAh;y9B+eVwy208 zmt$;kM22aeai3=Oslwe>kcyIc^<%qBq)39ivKa>1?+7v27Gl0#Z2M&MO9o`%E)H^! zkr{jViRVXV%Q+aKxHE%q@ZL1lV1Z0yL`nly7pwzhCJD|I>pOyxJjGxZhUU(|cSMSG zS<+=o{uPW4{m6qJTwt{2r)ZhDf$V~X#tn4IpZw~VY(he|jWMma=!$P)EKAN_Ak`ou zZMp(~84$4zHHKbYqKglLQ8t+lufiQS37uf8=Zqbz%gFnsBN;r?Ul@okPER6#KEYP) z$s0_XLTIy1o|1`-!c{xM$|}bWxe_otRJ+o-d>1%A(&6%olZcEv|HTpUP5gueQ?(=D zy9Q%U4iBk39SYs>8H-4lAOk)oNExh{jYz)9+E^BlI|D-tLm4Ls`FCjCbpRugef#Pa zjiHemryd;5G&*9z3!?4j8hY&zsz{Zg4PnUHmRL z6Dn8BZKD+dFHWZq7g0o_GK&xr<{6@;jc2cLA0o_tP+WroKl77uz@!tRErL_K`)1g;z1-b*-e%y!U0KXJpz_J11*28czz9SG+Vc043lR!IGZv`&(k%|Ry4a--P5Y_?xEL+iV%i=q*7xL(FQUQJpwnHQXEa&3;2cvmcH8Dw+}BH zjHqcH!l(Tl0Bksu>{|^an4-G%9vi-ozx=cAnvV7S z4E6NW-IN<&2k7Vn&+AJ)D0|h6cZye>CrA~dtH;t=2o zE9dKoDx3z!UIXwmr5uPsN=`gKpgp9kA*58#@^JZUzNMdwC`NyQ!n0p2YoQ2dXx-~J zelB5(pJJZO9O1sVHrJ4WQ#N2~2N0!fLz9@&skgWHyDz}0tsP8!DsFR;4cJ3-N)_zE zBL*)PtWY=10oSCXJ&uT4NCT}n7#Fm1k~bZPgxwRN{p%^|cq^*ArgL071*TWJ@JS9l zxf>@Hyb|w)L<5$!^s|0!hkA7osvz++z(4M4(etpu`sB>O%SYbvoCh)>SNpbgZxEqs z%UT0b5)KdY%?ue>xTtB^b7anL)6dzo)LruyNrL#cWg5md%{x9e(1Lpra-AywemzBw zN}_wC*@-MXVk#DMu~%#^bWtyIcam~8sfz3s#P`j!SL_Hyh&^?&m6;P0$I>W)o~R~G z7SS$)^PX{dx+)&_0n8*vP1DKeUsSO}~DAfaGGgyT8enc?W#Ui2nEq z=66R740jQo96bFI3xXKYdV@Jy4v&^%o39M9ys%s3JriIZ(cbAR_TeA_ATmIpjC7vR zHwfjFh1mBP3%feMOMetT#20)r)u)VBr<^LWfjxm$PL4ljl(=aPG*V7&FC-3i_yb6V zr)kKw%C&UhMi5WAUlX85b5^>TTBlk z_$y~fg|&Hb4UxV=9(6VKxF~kwp$@pZ%CSf*uW0}*lm#}Jyo7@o0`Quw*x7AV3nJ2S z+fcIN-sBrxv#j`L27$Ah4RT=VXbB(?ym;amSr$<4K|&OeNW#u2Z~E;o-;_2S3xP>7 ze=Q{+A6!-Maw?g4pKpp<<3@}2wN1_8T;%~dTj&gz61&pR4g z$+YrGBlr25u#vrzKkx0cUd-PD+Z$ZZfIu>+s^qZ6;-w?!k@%Zj&jabwgyX78ciSw z%p%GrKnG;S*!EoC+6Bki6{Zz3rVxd7M6j{!SnX*nH-u!fO?F7ys2Ghxvt)LC)SY6} z;pF(QSs*xMYRqCK(_(432jPqkM_z6IS2X5IfxE@K!e-Bu&(qB-~51k2hqR z3Xzs^Ke*L$fs8xA;_j8A2*3W;O>j{-t8R$?nU_|^R)vaKKUHlx!RqP2HPE&>cXj02RC9JW6bG)`CtD>tTrCd z5g9BPq-JnR*G!w;GVj8YctD~IIP4K%mggp~5ky>^8e^Eu+ePsK_Yf7-Au4G@I=HQm#s+f_?a2X;(4I?$C4rRs>g6<8Def0lj5SXnKYk z@puhfcDFKzOt`VYZcVr=)d-``=;6>1f31r$OPEPBS!dBS!4c;Hdmw{nk#4X~qe4a5 z5vT0_gRj!vw}xXDLn71&uHWLce&s2pTUV@|7h_~|dY z6D*Wna3H9f&no5xMZkJFg&!L1!nLG8! zpd=GTJl6(_Ti`oa)jzEq>IAaz6fXHBQ6WP#`Uef|%)}l;T>_`PRNj7DTRp0i@oU(h zy9`*#%zc|ved}jiwfvGUK9YQ!PIWv@|2l}R!rj96aI()~_to#d#+c8&?$3Vx=NLgc z&Y)`78q{vcCGs}0u#rlQ= zC;h;YgqG=W>#7aHfy;e+*^a?g%9Tx2gxO(Mxrb;_E1F`b({y)cig#)yjDg24YGkgL z*g@3q9ZHxeo?uBucvxO{1uF}-%mq7VF6i&ViMtS;u%z#z?+v%yxE#2fhUhve9|k01 z>wV6JhZApNmh>sP^}48iU=l(L&V*PSrsYnC^H;;(UX~8n+6aa#&(cGaTxb*Jc_rwb2P@R|VAb@}@Yr zClAV*?|Ho{SQgv~A*t|^$hvW7g*KnTti{+BZKX(J>>@kubqlp{Tv+u) zOA%zIk>qd`nxkMY<$?J?Ws;7|?x7oGV6N7WSe+iSz@aT+pi}hPt(S~QF#$;<*i;hE z?80+_06C&WRrw6%LYNQYQ>ar+C+;w0;ARS3?K~Tw18K(`Utb3rmn_ipgy$xPCXJ8ABi-4|M zq>R{soF&2%L|k&GhGINlB20A%0wo3Gn^MIWL5nZ}m2jyb8NSBqJ5S}yS2D-*qpLcA zsaKdPOG?qolnR4jJh`hgP`19~>TKsCe`V3=ZGaf)%|fU~$UWWA@gA<=J==vJJ^oGi z`Dg!@bay~j+Y~K&7Ob>8zC?Os2%Ifr=a%!%0w;N<#?39|pe`|xg^x$N1z`h7+lAVb zR&MK*Z|jFl+Vm-}B9pt=pWZ`5#$A`%Hg_YBZQ!)?iq1KuQtOBXAASBsw|)P9cY}<3 zN?9(Uq*rt<2cI2g79`xgWH;)+|KI+7_w2`?LX6$Wvn)O<^aPKYz5#U!6Q!Z-a_==9 z12fVol{*TSHo}JvIRu7s>IfIu-N{KT-f-YcaOHzA8gS}x@tRz4V6ZuyrP&9lJpaOh z5AZtLOmOzXVB~C$+$F}5x#H#tPhoOkUesewV&aK}o4y-kP&Pt38BV?j-n@Xjxq}-b zgE+}dgO1{?R*}*2-bT0o$)oJBv;o}7c#ddO&U=D5p<}bl_kaCWcm7&M0jBp1SS~7h zh>K;(ehdebz{fs@b6U$XiUZ;bGai^Jt7bd;bP&i6NN`E<=mZY-F2>hXrMqC`j`lz@ zh(NQJAf}gW#Cq|~4{T}24D3vCii4p<&O~V!`!{%4W_9Io!2=FjU)^3oG((?7Gi}NN zD^VGQCatb)AWxT}d>#Tm!RS=ZC4jq*s1c@9_)J!Z-6pE2pdpuK=MaV^c1}8|qYXnr z(Xiv(P;}DQ*SEo6HBuD0*v8_LhPF7n6*1ls4AbTR!`hqmShi&MeLLsMtjwBk)g61d z&F&_})?f+{Nyrvu7=ADe%ZBV1ThH>7K7>At0Rs|jL4rV;lnhanAd@1SWK*Ij4$bbq zb5-5CRh2blR?g|)@4xmsXXmNBErL>H?i16B6)RRmte7KM2wovQD?HfXdzkW5LG4z@ z^{r+0m0x2w3WxBNiHsyx?Tt7PK4bXtit8eM=4_k2;fJ&=Cv2rzwdZWh%CLp%Mj+s= zNlXD4xs?WP59=`a=9>()DUi=T=aw!OB#&Qs!jXj!GXZynldVU32Puby#SJQGxvCOc zppFq5&%Ss>CFD|<+i$a?%;6p~MA+J|NiUnYmuXPWPdR+Edd!?Cdj)vKV;x~^1zK`` zNqU(Qm?;X3nVzj)MD4K0LNrqtU8IU?*qJAO7IaC56aKr9rorA^wiQ}dEF|e}P~q+E zn!XX2A&oz`72+I!3fBs7PGhOM=h1P*k)Pmci+aE-%*2RC2%JGmv+>XA#w?6d10`PP zr=2EHz}jQTOW6ns7X}ZgSdVzl=|Av1+s$il4e#Fj+Hk}$?)mPg+-}Gr7#iE_X_c#dYb(BAbE;p-s^b-@-$Ml+Jv)u@PNiNffvtuoY-{$`u9d`MUF*?E7VI_Vko3 zZzp`{XM9v+;8=9SL=?p{SxEh?JMYC}J+u<(uF_!5($7ex2RoHM0w)oRF^I-sV_;zQ zPL@fqzN9hbLo;Pzi+i(oSO}JP$DEJwT4_8GSO{wt^d5csAP@gi<=~f{5I%6Ffk974 zix5R8ahT6Qjj@q_8%Rep#5&fe)Xz|g2xjU^wZ@v5(-)>xdE$1#Ol?7qrzi8)DVJM%I8Ano=HsKc*LdxPQc*EZb}gq;cVD?IYHZT>Rdok=y2)5Rb#}J$u5=6^_@l zWqX~pxNhLggYkNut*-*zq_c7Glu-ernPtj{qlk=Tq1(}e3&pS4p|?g{X`qQ?^$h7R z;U~`#;455kfA!jM{TBOWiSPy6SA599mcTay(^IshGHN|{T7}_@g2!^barM^l?$_Vp zqVyf+p|*yPVD;`ff*0H_Ae@m=h>Co=K^d7zrV-c-w}8!f&AiidHqdWw-5BoP{mJ3v z1qo)$kS(!ujOXkM@OiS84Fv$NK%;MME)832%vaI#@${9*EGE)cLK8E&<7ZC_M{?@R zmA;0HlGau@Y1PM`X6C7I$dT|Qz+xi26{*rz1)BIrdmuL(3b2(I0Y*IQ2-+jckdh)hJ*Whk!Xl0(dYQuX z)Q%)~rI(N46%teKM1XTx#{)Z?EM#sVRC2U94Q51chT3jLedoQeaqT8odV0ekI}^lf zZ||H%IU8Fm&kCnD^W>it$PC!hc@rMVE1XNs3^SO@!@_Ie%5U?~PySj4zIevu3GePHkEOe{ zZl7EC9({73UL*7W;I|<)e}hQc-R#`nWVFtd z4Eg2lil=OVxXD!R-LHIY_?WwLPI<%u;Q~F325I1>SDyMH#Q}FnU8Co{yl$*ckC?a4 zb}I40O*gX-j&z90^A7A5gi+2PB24XZzo56Z!}0nZD#1%0)6BdP>33df$(saWtU{6J zO~PP@d2;RG<>TSm?gJ|JmEi`94SVcn*>`21lSEYjDR9Y9GS$*yp-Ux)FX+J;E|Vw{ z{|a0$9&Ze9y!8{qHRh6@vPu4kOZYuSxx^lBU%6T5&WfvBR0W2Zu#yokOeVvZY}w3w z{^;|NXvCAf;RtZ;#%~X+3meHY?lGgIw^{dA;v5TBJ6RYgN9myizc8e&Dzov-RTbj0 z7Y#-U^eE6fj2NaWwCND%i+)qMxmg%1PpW6k6nMqyZH-G%M^im(B@ zgjP=}pkwhVJZaP6gK4w8FI)K?67#LlLtnK+;>U2@?P#ZG^m32r?efCP36Be(Gn{vC zIWx})mlFJ0T%`d>=SOj+(53fk>asXXe3^zpAR28IS<8AzO}JQ0P{`~w>wpt^CB2?T z-QYdZ>@=cI>gLqOD!p5$7oITvwD*K9y71Uj(6v=^M46V)k__&kmk^9FB=v)M+>HUk z*uCvh_bdxQu=Q0TC9hU!ti80#Ua_z4Sm%zY>uwEnO5}w4<0B;}@OGJzST&f0uP7@{ z8wWZRHhh(K;v(ED&OJQiPVb%VcgYKOn=nf9{evTRsdzH{?mKS|PuViKd-w?aPH)ij zM`n7{qK$wv5H_^=csa<@mWSL)nvW9OQ(xmO!V-<%0r#qW!NV2GS6?ym(FSh@U1xjT zE6(FwW7_Yn_nBDZrJa`#e4pVtBOVJnoekETe8GN&vY*9p$^+!Xn=3#6cfDRw;V^2HG28SiYjInp-0wtfT_C7!6%j_#`5%Ds83-S`N{1+L@L6D_*&megTWL#>#cA>*;2ahpfhYcD z3@+SfI7c|`soa27Y=x`g8d1mHf-X+wTjQ}ZduQEq?ixZc(nO1Z9 zWP{FxRo_w2F+KEs7MGUk>D+tgtHXQme=8Ri9Woz&kdY(8WfZ*jSMuTzcKPlWuYdDz zetr1(qYuI7v{>bZy|ttz5?EnC3iu-I!^X15-H-+zRm18y7CVgQDSz^mbcH95TCxD| zffI(^2=W!ya#pg-#T_mz(BZb`P8REg>ow$4jgZ7aeG1Qlx$r|nkwPRgFgc7rX;s$y zk&FPTht`ou&18JSY25V4`rCIHvbz{d9UYaz+869U|B!vokDn7}-0^{6kemo@1+t&z zVdSAc5u(yH3U24rb#sTys+Wz?6V-mkT{KE4WsGZM*LcLhMMbA=-F@NY>Ms-bq*OO();ja(JEXf}05Bb9TSclu%v~vXs4L?h5fjwOwxQ7QywgS8osx@n^&j-8S#l z;!+WE;XiXT&$$Y5lOEQsyKgbS#l_{kV!`|b43#wy5A!VvR!Qe4SLwlfvAJ*5J>}uh z+Z$a>mitb9&w^2Cc8SrHhQ=2x|6#GpCwE78F#mSrFAvNUWtbg;t%vQf7jcYNF&t zN}#DUls^|Bz*~OS1?P^1w{lpq6($O0g^tR?JFm=fnz^@s3-N}XLoJvJ<;>AW^de<# z15nRViT6@92MHpFdxcXDQ7|}A(DTyksboANyZ2=HgFpBlyEZ6%^vvFW|EFlkIq1Va z*y~KaU86UC{DK2vyZ4!2e8`E~-QgA6z1*^yd`DC4x=!LS)kr_FkENe``$aevT}|4<-vJ?M{rZn<+E9- zfUap5db9AxUR#E;nB|mifrSUUM5saYv>2Gz!uiF0#!E2ZP}cD`RhJym>waGmS#w@ z=wnCnQN4+gXmPZ_CWUjYtfq1l_Q?y!tmX@4fI}m0i_85%DeGf8NZKo=PhKG# z$zw-FuKBo#=?KQRM7<;2DJJve6g{3b^?uWqj-2 zu>U3g~Ov4M=;_(m*aoRO>cKd_**<+!>wSnK1+vNld&aQxnB64%FMdEFVUGI>LlTA@Yh(@s zCC4Z!I8K+ihr*1OCg-svl@yU!3k-CU@%pz)L7&*;UXJC8S!j7PuaqWxtf2CsV#Lw- zYD#8}`8kJlb!decaW5etNX5VC*6v27Y7tPj`VGr9b`p#d5<=e$5SsP3@CrJ@R!Rys zPW;4QP~rRtlfw=mb!*icL%uo8)=JJL|V7$nKH# zZA649J@e%^?q&+?`4?2g-A5eo*rgCN!g9z=Y>Jk3@>3ahPUTn3I?bohwo-*~G#9Dd zWpW*%eVhHdH@Q*JDU>x=h)~jdNDtc?@@?Y1_x8IyKzolVUl)_?tGU?bqF@bYH#i}u zusPsWne|K!a6p3c=@gI)PhL)BUS*CGVzOYL&Wf?g+hVBt)J!3i8i7zUSAkKyH7}AT zy_gPJVuyr0XB_yF3W)e z4k1N7tQ|xMR>PBTbr(_9!|G|9(?()VwEkHi;FZh)$4xqTZ+`W?OuHqw=!F}O-T8TT z@sOkN)i8JuIa71QvCLH3F^#`1`-!_#sBg|aZ}X~-^W-b+jIpje&0_g2x(SEdIy8yr4tof6r%fEToH6HxB&INuSqGBJXSpGQeR|*zKl%ZcVQIK??*@-V z+!!8z%n;%9NqS9gPg6)MwAcL*=&KYInVq{)Xl)cGDfr@LTIGo0)C!TO=;N3DDhy3* zNf{0hKlD5F;jex%S#c<#EyQY0&2rPF)-0Ht2^tm63Of3>E_D7!xP%5*Dzl9s=Ctr; zAT4m>!%g?D>=i@(R!<#jM`6%<_J@Xc=?Au=tw7j8SMIum&hkn@EhmE{ISJq1qg(s6 zb5_%_B;L_6bF1ShBJh+A1?&|HorUxri42CH)juhl7?OZ-%3Afs2AkdDvio ztS2t7v+Lz10(@tOEmTx;bJ?k}B?UEtcZI2wH{Rqf^S9okQf&|1Kg2W*yl1gg!J!aP z@R-JWrKQS+ymVFn1@An1cl0LHG;?L?01iH+G{^|lG%u&-)Y`!KW2GYADon}4f<-tw z)KFQ*(}IDWa$I+*5XLg&yr(^A=#7*Gbk%$7mzXNV{oMI(_nOlI^2Fx}_3)VQ3?W{N zqHb&^Eo?>0+&tmkRwwSzWYm7f#i#JLhpKRpbi+8*m(n^DVP0Y3CmTi5_&CCKdm|^H z$xU~Wx&6@I`k85DbYT*V!?;rKaQ2!4dEw}HpAp*W>0K83XpoGP=~VYcZ(ZZ=ZFY1V zGp(vz@?@h^z*dVaUgQ=by@Q85CQ9Cu#=`w8+AS-RWa~%ZDrwg%m zCSSauys&s(gToBsA(ndcy+t%%P1igigZv& zi-@2Zf10QYKlPcKP3uKvC7n7Nehv{{ku+hHEAG|^6J^4fbZN20_udiR9^U_S__cri zt2FTUhM&3hmk(0Q@i=H_*_pxt8s?j7du*v|Lh0}d*D%J&&V*3TJ9IbDEY zrDkRE3v+sB(BOjQ6$HXnul%I&RCGPb&XQf369lv05ubOL z%NzH)+ex)f+Bmoir4QF6TJzp7yzdyK4|AqhQ!dW0oo*UfwTbszO=#kj1nT z&u@M{-2Mh9G~axC*ySxYALz`UZJ0_Ho6oj4!-g+UFc)-armZq;cxT2aGBS~%b~Ru#m9nw@JIiC_*J&) zedRs2kiPd$D)50rYjWDl&>YTgT;r4(J?EjUshJ;Fu7jZ4MLZ&?^J>!MJX4l4k?UpD|io2O`fyVS`CcWE5aDLQ6q z@`POxC&x^~ur+b%Y)3X=20ti0e_WqCDvkyn}CMD5t zaG>VRufNCa49ETG^{&&9=0KPgj=WTe6EL5n9~buAh2f@%SG&CbNQC=rRet)#=Ll=I zDcbvXWX6>Zb_8y)U3Kq1_Zq!K=+f99u?O0PMMwV%G8^8$rzv$Dq2QBao~ZO58|$ko z`7_onY$Tc7utyJ#9#q_7@$m}f>zIqU&bT^a_mj_PESMreG~K$#?Td^iy|!4n=bm&A zC0cfD&~U6Wf*?0{R+sE#D1_;yGYoW({NqnQ<@6?<6{ZySbvlJ}3s>m4TyfvKg1plK?Prz|8VE-K``p(0l6~x4|M0Va*M|#4Xn_WbJ8-Rn zQ~;olA$XH}Qm)-%DrJwSr^o<%2DYiozN1M>*RL-z40vPs`nTSrCqyEy*t4c(I^-(X z7Yv;d<}1u=>E==QCH8I)yoPhmk=Qflm=xX?N;5*-7RnHAL8GO~L39~iX@*astc#$-vIAa{6j!;d5gaAorhu*fGpcVJhqr0oiFC$&% zMsp_%J${!P9JMY{m)+UrUy;`(z|qeUl#Z-SkyCT~Y--qJBrl(==PpLxU<9=WKG(g>1Jk?C^v^z9 zkPr5}rH}9kv#V?;c1K!jw*p*xu%*lrsQ-c>HQ!#Z`6*626m%5GUuln2VM=42k%Jp0 z_E}ua1$4;2BOaM~!D~7%m>Y*`IuBeY>^hIb1IsFnjK|+~v(DzD0b5z(B`fywAJXXD z|KOA1^AA2`(Gqz{-rDFWjY?Ukr40trpt@E26^|gldd7MTw-WAis`Qjcn2%@#_Bjms z>LpjozT~n$Zdly?{KfF(zAptm$^}@fzT28oZuyd{bju~$N^7_OaQDUV=z|{&-}s9^ zlLgIJ&z{m!vDMH`<~xY*WAc%zuIHIUqVT|UxRlQg z@x8d?JePu+98BEsFg=0V1%bQ0G)tNBkh#tyS`B*21VTeCKnQtgHywh{l*Ol%>H1SE zK~uVmAD4x*umvMOM%#jrPAUb*g%k=r9)2Dm32h)!7gm24&HVK5p5RnSTo&)5oABK` zU-bKr*}LFd!TgIN-Tsx$^qUT5_gKAmC}=w zQB@i>c;x9j=e74)pP>VSooA-r{u=k@yfZ9c+2Q3JI!&HuKnR3p_zOzPiRHPJ`Ba?) zO$Y#f6&TL7_qC|A@giTC!Y<@K1n0VoUI>^I=6b!uBX@ux zFlui(c}S)88r(D;%uag(bJe2BpG6kIVDS zwWo0g9HEdk70PK*V24ye?z$qQrkCt*;ho@D?2LK&`Ln?1B_SFf4@oKL^SR+j32Pe0*~TDSfXmc7_ZEJ{A5wL1Jj z1~L@kN>{Rs%tL6?^TL4w6%NZv`AK1^*342`3q`ga5J;vg&sEhMM*t*Sm@iH3c0-=#*v*3S{SQTeYB8*iLb^5ZA2* z{}iUfm+)v?>FuW8I4?q6gj@78Tnq2e4%bq|OqdR)Ftw7hL1C23Ze_A3Z4crR+fM)K zFaHv+-h6HN8~@Yab*t1h@KI%soC} zsLoMkrZP5}D%oOwb(=^E-J{?1&`)zir+o55 zsIwcUK1Vf9Zj!4!$}9QCSKB+OlWb!<;l7hqrn6iC&hC=Xgn(y+o_pjKDAqWVVrnEw zK2;}+x=6mRGHtNQ7P%{LZnNF^)v$+9beh70e!JXXvdz}d_4RG?nkiavZ80@>o4wx; zKl_OD2TaLA#~$1LRyhIc^n$xXjyQXALg&DB4W~EUNvAwf+1c=shwMtzS!$f3wFEK> zaY59%>ScEDy!e7%zOxDTW+~4u5<1#*y6E7k_ndz+Jf+9GLOpgN((Qq3bU;dgGY!aI z@*E=MH0{Yg^YtvOmx8a<^IVceXD1z2Mje?79Qmw_GxJs*9nf)cOY{j-K?ii4YuA?E z$`9qG@&n=XhF(0dcy-sE1}<8k{`3LhC{>s@9Dw3a2q5#YA&E)EdB zwgKU9iLzvkpR{Frl{Cr_{4u5UC|nrz$8L7fjF^O((toBFjF(nU0?Un7G0&|@L;2w| zanD>LcGKvvt%Z2*Od&w`#v^EeX%(JepSm|)`Yo!<+!kT}G^}bZ7Q`-_E&~)f9u-=eE{-<)q8@v_u9&1VWyZ- z*;owPd1H9zn>UB6toA?n(f5b@pM5|j*rPY>zHcVY2-pkS*=fOo+%c7FZH)sBJos_@ zov#mPJGVK!!;qRr(wv5C6bDn15@L#yC)!hl;GY#nHrhz46x{X5EHp*{j42j~|L~r` z<(eS;XzQ=tMtuaFhk%w@zUc{4!@{?kTF|V!A1bg$EUi{r*ogU*vl1taVr&E){<{O% zdsbj+Xe8ND(XBsDm7p)N*5tJlt85s^wnWyej@dtc%tdr3=qKzgPu*k?Kuc{hKv0o}jE*5cqMg0#&NpY#4FSA! z{SLiZ9*<^}1`_T%+8v(Xc+N$7T$zFJI^yiWb8Zs#esMd3dD9jdb-?t?ryu-?T_+m| z^}V{n0RgVywukOQr=3B!H=2gD`y{(|`Bl_8$fAE;Omk)+Jcen-a=KAmw1nX>{S=rz~4T~n;QIbUyTT2-Mu?le8 zc2D&={4=9VKv7vVr?ORL(%r)u)+>8ihKC!;z$6k|=#QH|CPt^R#}MQz^bn3-yc&M@w|;&2 z#e27hdw=_H5BIp3=M{@WSJ-c@(D%Jn?-XC=J2q4332su*zy4Eyjv*{PV1)K#b}y~4 zIJd&KGWs!8QhU|(7+L#p&f7_k>ue{y!L*6J@8?u9dqRw+sjL(ndW42F)6M@9B+yJa z*=zQg&PtF%pETL?p|@o`^eHPF<)zR9^O-ZTSIC(=If=XFl(3-ro{!4GtQ`EdJIvm>4l8hsIqVio4Z4dVNr~+dS~<6@D>r@JOBVd07*naRPy;}+8=)Jcfcx>_=wk@b@gb?E8OIK8g#7C zPnH5Iv6Vi4t4;&a@yc7#L8I;Q~oiO+=5rK+J?a*7WpI%lpTA*%j|;5 zJhFL`z2DGpCx^Z1HUO4?%bDdPG)s@sh!lf)?g1rlgUq&0=+G^rHsESHxnxQaN{Yzu z)x5rQzzQ-i*x2(u@kskM63Ja7&TB0*CwaQhPz+8y`QZ15?X|brfKSC?n0x98D6TcM zWjd#qzCuA_PK6-_OoTZrRz7a)l0YlI!>lfxneW3#B_m~=y`g+$xBfXLhk$d~X5maG zDA-|wY17{G=sKj*pc^&{IA4w_p(PhWN%`?xOqp4WpJA|oGTQXa)rgg7F(n?sMwnTY z+ABj$m#Se*yFGCQw?lsSFzaWUb!&Is{E~seV02ba3t7e2Fpa+&yn-8p%wXHTh_7+! zZiQ@n>y|NDfHy`frdvLN#eU>AKn!`6h&7H|^om~58~Vk6`1h!s!|=cVoxj6rvTa^? z;(A|t$u9UN;qd6QPip-HT&biK@I4lp4yb6` z+!25E7N>)`;qtRDp0f>%`E~T6s#x(M)0%A3t2|;`r-4hxZ5^Hp$%%FbJ-3~6xv2q1=mkzz?P&Hj;^1dv1{O!33JajuWzuUWMD{@;hGHM z%e<4pO}zOf#!zBLO0O1}q*I^7=W$xUL zm%b$i6cU>K!Bys<%0C|Ero&8WX@}B@zVZd1zmy6dX3pbm$O3Ye>hJryO!&hsNOxuf26zfcWtDawa=uNqf?Z z98uu9Q!IyBC=B){onkOzg^9u&J;K-oL7N=|-Seoj0c_4ffWRApqoT~U3$s7dl0xI&P zsniSv@0qzh)uq{>=q}}kx4yXJ7N>+Dfu8@NF9UlK-Yimjb?f?7S@bN62fjb)`+zP8 z*vivJ*dSo{s|ajmi&w^`Kq)^N-@--4w7>{$_@zf~51z_3g>5+9Qn*JhwcYUTK7&mm z8)+IDCS0jY+0&jgy=k2}V3^@IQ9nir*Wp|5`EUj95j!yKjSHvliNKzdO{0Z-H)#5| zc`?dqJd1vdcIoizFin^C{-$9XR=3y8@bs99x`OofwWCdX$6xR&%0K%jzs$2|Zx6rl z*Zv#iFZ+Dy-O@Q`ev=`!26`WBY&(0-NwqC5&tGF_${vE^v&WBkj}tM^zU3=ily#FW zYOD0%uk73y?mv1l{LUYJfB5xZ`_17QZv>vu?Q!4uHv7ikynBlWC*B#p{mpL-f9Ws% z`QaPi_y%+H3U8xg5RNd)8=i~^D&0<-xCM+mui2w+o_KAp!ps}y%+*<1DT}G+qnqXY z$Ezyu!W8Hjz+}(dE@D{B3j?-W@Ms^gC1h&-hltn&t>%CJgIsAl7V78q6bKV(2%UrRYt#j5fmY74I?P7tK@{>V55skunnR(q6 zJ9rBEh;bs+Z0|ZXzxWzKUW65t0vO@X{C%l0QQ_Xi30x)E^$)|)iYJ|4fgZh!`J-h- zDRh^AVWq0PE&!BUm{$0W?t;Q@hq^*xu`UTP{ungA=yB3Is`$Z=c5mGvV{#g_^ada{ z9;_iE7e~Av)(i~@f|F8urhw)SV-}~`e|gS5;kYxka?I92r%qT_0Nx%I0Y?HlQpwLk zn2`l3cFbKUn`zOhWUaI-xD?(h?Fy~dbrVOcsd>?_Q=@z68dKL{|J3>{4f7Dm=3>^| zabjw^T5qpThv{oUu3*+~4_pDR?$);Eh5YD7t?{VqFMjn_i*D_|NJodC>caHb_@?@0 zxb?TBNWZ!Q^(q%!ef*;jhF|(e|9E)w#+$=``B(oddebaUaZ#EJ>c`HRA}BnhW6#?q znD2k`a`>I!{H@`KfAWJIR9I!s@fzn3-ucQ7TgUDU*H&&1Um!Fdyj&d~?s5=lm!2KH zWUwJjo((_z;68V>{Cn)+`gOK_!6$@|vn(_>^u8JH zTNbc;$Bu`LHaM(-xFP-HNH4s#T;r(3cGMx8=d8x^XIIlay9|r5Da75r( z7hcC#_02K0!qWR}R878uvW1+Y!z-Qb(R-rSMZ;xwu(&?JY8FxR;lIi8c3YQR?K3yT6kz3X4pGV6;E!9yl&Ov4Nr<(;wLlP}?FCH~2(2!>3NHnO zdJ0MsTVaH+#COOkE(s`iHAe(dI7f}v(RNXr_$8w)O&w0i(foSFnbXsBbvoLvkk+gK zkKn_s-A`ez0N1Z^cR16pf4ff!p1Nu7Fb%WlwrKD88@_ej8+V&8;--2sZ+y)5FMD9_ zi@m~p_&M{TfB1X9H~iCI{Ketkjl09wzwth!YZg8c4z97Su$R{6fA{&>@W+4n@$mos ztA9Ow{}2C|Xx9+jcgQw+g`a;h{Qd(T)xExp5Pugx7E9OP9Kbb_ zXDqrOaToa^-!9*8{KkJ6e(snMlw@?ly80K8NM3c&CySOpskR9C`D$cy}}aJnV@n3o2N z3Yx;@Z|BYEJAu(?$t_($Zar0y=qNg6i+G(Q&l(eEUt>}hc(t>Y*)^nGC9NQ*SM00n zXM872IUO@se#rdwDHkps`??S(J{`T}-W7!U(%BYa5b)qNW)~^bO;z3`9;d9ptKV!2 zM=L_!21O#HFr)m1()?r%jl5Ssy!R=M2{CgBP|WNvgv)`^!-`>2rdg> zJjujm1ooAyY_i{BPw$3%9d{An2yZH(dwUV5S*RqNp$_3Mb0H+MP9)-WTp^+UkA*Uc z8)=)Gb($8)%izag(WbCE2%kzuBGoOFVH$p&2NlrYWhwe*bf zgsViUzm1d1dDm{3)TfP>ejUdm&W=lcn%*|I`xI{KHietIx4HdWZ}+LLxs{7(p2~FU zC%rw&!8*H5ymIvO2M;JShr|2d`WAOy@Y0jL+07j;*IOSxd3Z4V+u#3i`1SAp-tcdK z?+*vAo#!6<`^=K#GN-e*mLt9J?w!UEnf^D{P0J^5BZ$F`6{s2b{O(Q%O;0J4xG|~$Ig3y z^x+4?zx&VdvjL8Q_l-V(ryt6!~FjJl!3EGJmhm1JOqbg%nftx4l`iUZX9Hzcy zZokgssorK`MAhPW42f3dTzli075K5-6>TG2$iXG}ERnj8X>C6RHD6DsIGO52av6m% zz2r&GW$rHWj`9trRdav2C#-YInhbQxWQ99TcsO^7hgLjPGyq?Vr!))^lvtI+)>jB7 zY7>{A2){HIjIfX$`c1#G35#ol9;SpfH8xS?j{=kiAZJFD0g9#mObSzYCMn;{ESxw& zmN_z!@&&i?wRv=p$7nW;X&FDE125q!GcS5+b35*OsloQNSyMckJ08rTt@Q*${%)-Q z?BDgBNf$F*G_)XCa2!gl@L0l?ZF+;7+=0uru1g+!XNBK%IwUi0g?9uv-x zx+ppwt?L#Vk~3u{)j9{ZM-r_ItMF5ZcMn^03-=BeoMRp>nu+C7+JsXze4FEV$&YX) zsOAjnu#IamSf|@6wC2GPD}d8Jpg80J#xAFKH<&JY=j+T%-`pM!s7xPxb~JqVcmHVk z{XhB$;mnl^9P-$H1A%<&J?=!~9YXHdIN*l8bB5^W?8kk{7P42I*t^0ZpgV7Vh4%yB z&56$g8jcl?F<;^NJs+N30p2~vTRXQfZw#N`|77^!M}LB_9)@pzM z72qF#_~G!q@BQ}h!h<3a;FM|k#($M^&GN-jpi_KbF2KX1S+SYt$tYzOSvSkGnFnFz zXY*9|?6VFzc%qL#gjEV&ROUgcs`{ot_?dfqA{0C zxZy|ZMmhu(#*ph@;T~trJ%F6nZ4>42T?DUQ9!J`>` ztJ$JwV$B@KlN8R(X?kNITLl^El4gcUY!%B%O|sDhSxN0}Ic?%Ne{oOxxS6eJao|^VdxQ=vTteDWMuTnu942BMss$O6K$=?ipWAwmC&bHY9e8{-*cgU8}( zTG~9NH37tZ0a3X&T*IhO-KJq0cX(v`?=FLEQ!Bx38Cc^EW2RAu2ai4)e({(7(Xjp2 zJHvN={=Xf*|M8RIxBuNA4j*&2V3);6-^+{u=H|keY)5_hVwb5qZX)Es&W0xdS$JG| z?q&Du!(H6mRs7`hkB2Wf6>L@6-l9j(9@~8mejIW0+ZHz@-XX5%PqC z{QG~OW8CY*|N1}wcez+e`g~E|do3&*UKeUl-D`;*QCRUUvrhfVsyquvY;Fb9EtQVn z&fYnnaM80pTF3E%Gk6jv{`$=GBw5qp%uoEP^kTLmYqzdW)GTib)##(eG64psETn+0 zXw?bLmQZmDW*MvcVrCtlyUWE#Apu#E+&WWe3NU_3;h8iBh@T=q@u!1m{f2C3 z1?}$Akxt=ZEhMH{4%}ipQgohP;P3>k^2G|} z{ST*@LZhebh^R+vO0p1N{d*Kq#N^Nnu z{ubBB9&;4mMb9hr;IDEhXrC9tciH9gg!?8|uX2&nb)Ir#Ti_vwhP;Jti~H+$xX1pK zW7Y?r_yq69%QuD(KmNh+5C8Em4)4Bmclhgn?dP&+XNN^0?!{c$aY0@x#O-|41xTcc zKRF^>s^@L_8~HVsqdC7Oyc-MB#3gu&XJZIFXNzOuJAu>_s54WyayFDDcB;&e*YczQ zA<_~u5~47SVD8Y3pLC^e1CGD#R`u-dRGD|I%OITHdY9?3QBTs-kU4UvOe%nKkrq#i z5iU&}C$-t_$zF0UgF0n5(eX7FKUu)$1g3S<*M;%`1*3Pb3J5POIF=i5I0BF=)hyjf zzJguBj{;WT`rJ{26OG);*zm?36a_KzE)(76YvUFNDDk!zoIKDWd4eXGLLVAaPfUEw z0%7D6rl*JWD|Zu8{{AKn35zW-aJ)cs28T%Wh+ooAXD%HHc|kpjTgt3Fs*w{r;oUY> z(dN$D5yig<9oZv&;X?|V z<|=TP6*?2uUl@=?h8Ht;{TIWwT_N6c#|l4H;wu9z9Jw{dGiPqmnCu-ht;4D>Dsf(> zrtVYoBCLL$&Q1^P8q-C_AXL)Pf!yka&nUl`h9K@VHBGHotm1FgaT)PQVS7y>^`JnM0LfO}%tmE&!|8)-a+@WX3j+8HWT=(S* zuATL*&YK+n-sc^{M+gpfPq83+_3$3O@ehaZvdiWF;HE=&o&1%b`-`ctrwFeduJH8r z@OrF-a!qBWR1*&$=`g)k&fNP<1$XC4m!0OeFyVBwJ0AXAa40s*uMQZdjn2l^`31fx zM=ayZo^v+kAc3I1n0Nh`4&S;4PenaO-Jp;kV<6RJAig8)pW{5c!jlY3h?P?MQlMH{3I02L05B} zBas~ex@AG~t1uKz6Ym*~Q@6{^(@bCVHy!=8pYwK#3y13IZKuVBzf4KxSTgC8*TLI` zU<@qHQmlWOM~{hSIOA0PINJ1YIL#{U9lp)&uCCDS5kmMY|MEe*4JmB)zVAJzL0;~E zfH3Fo__dqE^{t!3EuLTFuB6-*?K;4XTeny^zm^5Xql0G%*PY=OhjqLeZ*TVrk0|d9 zH#i)$!4;oRxR2)v!uyadir2hql*Q4P+?TQY*_XiIshjHnMzQ%P@7lL!iVC`q};^MpFl>)%`zd* z{7k^LkP}oP9XlMxh8e-jM?Q|GnS(KnA=^*;Xr9wYfcnSRax>N~ZN#Ne&MR05+{!!4 zN9}U5H*7tVsPv2#NZ9-_ng}t>y7@&QMs^}6xLd?|^Q;gu4T3|aRabNRlZ(xmFF$3G z)7|CXD}Tb&$}vyF9Xq{3V{E>O&rKDngPlf&AaodGH7*i>TRxmaiNxS8ukuM0UxHPd z%v0|dF`Q-E)4A!K20!VioLcAbga^vKiX%N?;|>j=jnZCt0519hPuK`s#H;>%-f`k% z#gZcK{Gsar+qu!zlfzYiQ$GtZG*(;{t`J~0ef)5eVYHB|r`$o{YVj%ucQ!X!Fyc-M zw)HZ%$pRb554fj70i6?&N;wc@IwksO&ajFEBqlP#)*T8HAHOX;E*3aYO;r1Z!6ueZ zH}z?cqj4Eje}#2#zYF7_(fpTBRSvLAgN;gfCzr$@3^7-lw3q6*r}j24>J2-kt6@4# z+NDjqX_>lrcv)v5b^bU#aC)GprVn^`NQ7JwjRv!#_^YE~XAm>{G@dEUqI&{Ne!k3K z_m0O=mlQaaBHcDc`sc{Gg2DlXX=2Nt_fQ-^=VhJ;T-wi_->;sm4Z9p|_Z*o!Nj4GU zr`&Y8L|MFj`&O>0^$7pd7hGcu-ZkdC_ZfnJ{OORmYRkMZ)bk;D|x^VFv5?a^g#tfOroh?EV^O*nffQZP&(r$4WqeAujP02 z$6b2-3QyUC(lFu@Mc{)tZWW(pPZ$LpBWq!L%3_RDyuCpoVF-|P0q38>xu_EnX!9uW5~SWtRY6#$T_io6 z)N%CFc!>&;DN*HV!onD=mzk%2hG@G&v5%w|CQ~3T$&~R}NvA2Rg~5WV@cIKNJA@lm z<8J$9`V=OaI{|8Y>r+_4imoaYSy!MTN`bS0Nsa}}g4gszT#@K+5Cn(DMcj*aVWvv| zrmOWY^PjrU&Cm@uT}w$(Rfx+&hSO3 z#<0Wnus=aEtK@-f?Q4cc&7)Rb4Xpj0YO*9g9?fXjvl>kB)5-c9!{O33;EJZy2h6#sD#YWSIbsEFh$X&?@Qea?8bNBjA+B`%{j0SM zV4>d((MS+%^Pup=&Y%kZ@{E;McKy~mBmrn(fO)OG$Z&Dvvleg zSt(tK1rfXDNc3W~SO+4gDnI@%@g8(~rCn4|Z?C*F}*i$aP+=+#s_iDCSaKjK$4%~Kku zbhQ5%bVgs>8;5Y@GDPxAZ!A4;7sLSY*UQZCLYen$Kc!IWut5)P?qpeF+u;)P-5>t&hr>VkzyHB- zo0q2E|LRwVyZ7FTAm1ZC1-Lit<&awvTRdyN%y^|=s|#hN@<1*WH>Nj=t=Pqbr2n@E~S_BZ5F-sjzzq1-UU2oyBV@8ay3K&vyes>VpqUOD}2U z84JvN>-tAVHjI{)_ zaC~Vrh$pihz=kr?9YL-DAK?tnf-%fx-uu-3-7GY$AS5=JPWzk*#F0ie)TMH-M(~GdRh7|2H z*di^Ag~efZgr!5S32B10bxMPHT20;CZK~@(g`fI0t-`cm6;^i}8)G5wk#+nq+{`mj zG@uqVU+9pU=aJX^% z4p%t5LAd4NId3W+^CHh0tLy9Bba?;%$6RszDccKIhj0G5@6h?!7#=WtwbGEP@upM@j$Ch8Po8`N|@ms@R`15~d_}Y8l9Nu{2D|Ap8vWNdQ zWtB^r5NgIvy@p{X(2`SSNeE_$@@N#AL{&XqgA#{5@-d9_@E*4J!RDhQwv@i$j-~VGl;^8l;juv)H^IZACh0d7 zr%dCj=xT;1vc-6kLKec!D=)@!H;MA6gdqM3K7_eK(0ZmI&4RlLFj;q4Qyws;6=u=L`<7R^lG3|x72q;{h1Oce$=nbo7gC@LXOU2Q zn(fVmaT1PN6au;h&*-mR)o`urR)xRxcJHtj=Be^J$GT_SVW9%kLRZ4F_WfG4^y@-w z8j41f)2i_spI_53wKq)rwOt%jw-(wh$fs}?IC+|M!Q**Pi@b$)cXT+H=5c((_s$zH zlXB{)E46VpZJJe6y4xO)$&a)w!cAe@uhXMn-V&rtrHH~i`ct@8<(7pCavvqgRzu7r z0M;_x=2YLakG@C8?bWb;Yv(TgSFP`(%)s5i}i<~Qz$;X`fe5UYb{&kBUw>QHcz4(HQtmyS$=K%pWIC#g* zQ=aL%!b?8ScK3!~{(t_(@b$0!G?ifo-XbjQNy6tmhCmHTrA#78k>xyvqC}NRQH3X1 zW;~%@q?9$hOrXrbseA<|CMssiT9{X5Gj-Ko9_4Z@lU50js8dN3S1{pbysBBev9%ri zz;u16bqaIHxDaxN9mAI}B(M@e5``I+Q=zB8)#73Wse4tbCtBSz0!f<em; zi-(vL+%yQ8DhO?EIzT>PUg6Z{s@GEUMBl&;l@pHUzw+X|{hJ7|o8&!>KBNCLdg-Qj z$p>QO34*OI;^MFn3!(#a>Py^~>WR_t1z7R7*<@wP1viy`W46T3P@u9Tep8?kP9Djg zk#`lSewBgExfUVqpN4?D)+@4hZQW2VaCYc+FFpCQ=qLO6R?k_%hbxY3vpvdtB76nS zOp-BXTm%YJ5i9IQarjXJs03bD=#HvVSGMYb7xU^a;BsI5ofg2x*M+lTr!ehynchON z{lueN=?ZWP?^rPugtf!N(|mIwZd@H->*AZzq$j>isor+Z#v0Q{ZV_ zS~)-OHc8Xt=S_x{7tGm??j48W{q$Eg{>IgAZSQ#7eQIx*%XINlT2d}aRTVSJq2^SK z&|z7rFZe4&rYO9;|JkEYhGniP=1#)llyt8vdb;{Y@Iq7UhX~`&YtZKH+iP*#`SwN0tj?2vhtqt zGp2F8x8>7MKO6qpKl^|47U!}1lcBfDkiEI4mb{1ev?w~j)8cKHb-{`cb6q&oZ1bfG zKSoou$q!MYEEAd5{Gt4~agl7sF3!fPoL0cMKq}h_!1=EQ+r&@bk1Si3TZnN zMWRD5Bgn)_C)AE;+zh4~bwb4$o|eyr-%L&AKori>6(l2w4Uu&y-{`iW74`*3tgFiq z>^ziV*PMT%+p^As#l~Q7@PyQ?qOWsXn=eQAk#7rm3&VM#dOd>nQ=girknOIU8SB?> z>hnS|4OQl;e}_>pw|j@xZsVhx3Tu0lawlR9PlAX6vKifRm|u&Q*$Ff#)=#D7^Gm;Mt>UTnZl@zK}abq6ZVwn z7%pi>Y}T6J48zPISf;DxOMquyk-bYCIxB<|_dkVkwYJYlBr({+z%`G~dLTBJZiY`@ z8H==^2yg|6%xU4EfSDGiY1}`~z5Rqw0c=K25F``6#6Ar#NZX}nicfbxZ_JZs{S#qt!)OTnXs)=-{({%9-M%cmupRfJS-VQUOScO>PNVqs zo#NdvO$E4a!mBq8g{giQX}-*_>DI4lZ(P&x9kyZ0UV=g1x-ctzZ8bzTSY{BWzNN?`VhDW3oVC5|a~3W)c%gok0|~DX$S2HUU%mPUz3;o+PtRQ^pZ;*zXW#cG zTL;~Ja=ef-4SmA#M5P2Tv`;7k+g4YutgYGGPc+^Z7EKHov

    zvm1BBrz#^}(i&xS+Nh7wnr{N_&Rd%M3UC{|KZ%Qgepqe&#R-81? zjf5DI|6x)E$ZvD6=#chxdfQuE=W&cII%AsU1ObUE|8d=$ zz?1My_#>pxnH)c1KE>%11-Q)g1?W}gmbexr!cSqK>H;J~W=x6C+)r!!sT-#4`c3V+ zFZv1d<5a^pEe+fD)*CK@WTay%=nN-p3;yi}Nq zZc{vM*3VC+-taMx{ zT3__nZrH{x_1d%90iKTJ6@CPq+sRJ2)BE(~1qaf&PvhkJaJ>6q*ynPo<0lW#dW3R=?;sCja z5TGIE_sib+*buIYOk9cDb4j>i6y0QMTMrZ2^ch#J(k+GTXL>@6? zVE$wg)vhu2q(LN=5a`pb>VUE21ZhPFjDBrF?=VR}R>F3k%%B4A4`1L5!6ZoulP!+M z{Uxf_3ClBRM!3W$xr?pgm*AN?d+Q7|5fY3p(&TfCAbU2ml?_3D!h9l24B3TZWZk1v zAXu1Go#-w=ZC7u%hHJm6d;6)kYPhzyJ`L9}txx?lPlcJ`b+aObZqp3IoqiC`-fas= z^OFgPj&hcUj%QI9@1k4B*X}c9qe1s6z3tz)+D~12h4+(A=`|mk_V({MO@{*AgH0{G z73RW;uW>iL`jpN^^CGpRkB|bJ$^y`xQs&U$Vu}p4#RX z`@Jc@drY^y++0ps%dGj{I2)5;7Q=P;j-$hv z4znSGCkZocV?N>|Prx>!uJnkbdf=6GpyJr- zI72dev?jmWte$iVEFb;-vVa8}xL`;?F%&)*A?IyQ+~+^$@!U2wttOLYFcsdFQiZl% znI(2_Af9RA7{0LB!@!-POfB>&H2f@33IxAa7cypywcRd*X}77~1yB9URO4)zwlBiB zd+WkCz0yAwaJsi}FT6GF&|$@`S>f67F2=WL7k&!6Xm5C7rt!4)b5Ou9wJ5_=bmZ+mlmpJ0-Hl0@WHY z?xb0wvv6>5e^}e*!C?;f@S--0k<3@~tlG-<>ah2e*P!UBFSE7vjeBpCMy{*n-jfs3 zZpF?XVxIjup!a^b_hQ&)@%=hGP;T;?{W4Q1*LSY55XGT18Vs+YJzP5)*e;%3EE_D4 z9v#|j!<%^mFlke`m5SfYVuh}JsU1M`kbOQv|5ODeXTy%DE@<*GWfK&_wUXCeHm7+e zeDl8ZL%qML{|r|fqL*MGNaC|ioyXdM;=`ODbVn&@Nsl`Agd2O{!N(S8M+eCV6Qe>4EwkJ! zxA^6!=$_d-U)!M*I@)LH8SS0UBu?0Ax4dznCr@OY2B@7Mz_s~*PSJN5lS4>WMU!8!LaAN$ZLi$V$m1%!e@!W0TBnVJHKxeJ!= z$&`uP)USJm!l@dz^>VG>X*m7;+O6#kKXq@n)*DtB=~a+x?%r$*KjG}!-bY*)D9F9^LgfP5P;X>rY`WPT^GAFH^!d zOzVw9dw-XOEjL7UaA>Qz;%->tPrYa1(*5}7l)-b3&9gAWzSyV3-s2CL8h^>6=3CtV z&4UcwEJ*2OCxVNbH-_yyZw-$hJs6%df1L$PUZCISC7>s}Y%zSk8{9qvc9rtFO(S>C zRLgAy`SuRS@j3any!3)?SoHXrayej{(EGtnk9+M;$?M!r1nn?wOp3ZysqB@S`qiyi zIP%M26{?eq1F#oZaIp*v*!=Wf_3k81%cJ?^XC6$|W%<He*fGjw~Ga+h< z6!#R5nRhin4IVxa94L||;!1OaN9U(>p;X4#s>-f$NLwKBc9E7`Ku&WqoJM|)C-Ii{ z0iswq#gW}@Uj7uZLjb2z`0|b>2g+2PM~QAGR6FjXB!CM)Lc})-2T$`Edvd<*3*oeO z-d*BVP8N0vsu}1B7%?*Ik(dKBdP#_MjKSinIS#Q=8(18Y`70b_UEQcTQxRo`3!H8u z_rc>67M6~W*auFjP6410wGe9oK1*!jp8d9a>+R8YbrY{@w}w$~zp0yWQ&?dd&yRCo z#HGFIH$8qWv|G4aVRRREDo8J*Z4v*J=0B@>5of0_0@xmqi_g%gpw`W=m1$|=E}q8K zLZH(=<()8XZ#;|k#-o4J)38&&3vS@G>{$_(Q%TLk*eHWkLddp$a1a_{{(@fgr^E5; z-f+#sKJ>6(K6=D`8T8(n%RZw#KHYuJ;v;j{^t64(ZE2NxezDWL_HE8J+}02RODu+Z zz344^;z#U4`Sjt#VVm`XBZU14k3{&eaZOjiANl7TuhK%bP+`i^G@!yy4WnSwh$?;v zL14q1?ulxCHJ=vwZQl5qH!e^+lF~fQgT_%2%#kA~gzyjtHUx3CqgTpBYbAkV* zobXgC3a8segk`H=LsjN!0Q^Gg$8ZuHK4HH=ylD=G4qUoUd3*udcs!m&!yhn~m>lSC5AC?W5s^gig+hOe z0>FYd6(DnBNZ^=Lt+(GaGpBBv^-F;nJ*Htbw|~1gZ2L8i_8-wi>#(Mw&8EwqkMQ<< z?9D2?O;@X~TpeZ+x9*E>9rn+vi?damTeswN3`l(bGN| zUNMY5M5Wu3gPLn5*1B zee=e(;VHfI>u1};A*0G8-f{C4p5!h>rFSQBb5b$Zp8~~Ph*x0cmnqGUhSyZ{t39TC zYBzP^{JN}ZHV-X>mQV9+s`M{D&nSxbm*Jm=ycpdtorfb>M8VK; zeJR3V?Vs>b1PyL*7eQ3gE!&AFX^8Xa7k_^y3Yw^86NkA`-pxpxJ5NmF9f?r$OP);P z6FSzp+v=^K{1#Ir%m=dQv%d6%a9+>3l$P777Im zm_kFPeOlNSGjEn*fv%r+o9c#}hHZ1}4J!uCU*;}7`cL5}QHS1Xcxms($*{dePnfP; zhSzVZI{vBKe-3lwozgf>Q>Uxlq}_SoZhZ7NZ`Av%vQ&j2Qy2DZ7Ao1I{l}%HX=q*8 z*TNHB@90U{>@sLR^H(SLEVl}E8XhY-C+`O4yZ68NfR}n6PI}LtNhh30?D7(cm!1Q&|Y^> zomeLOo8_SxC2mw5ZqdHzUNXWQm@5TzyEk3YrFo2EYA^E`KItg4vQC-f^b8b_09Eb` z6J)|0J-W2%9$t;Q=6oS2fH)|`Y3?gig6Euf3}V#}gvRK$NLBsD_}WkWj9{jwW*i|? zykoM#g})ZUK;qn^!_R{2DV;NihKL^5%e~@HNMh<(H3KaCEZ)&?4w7&@fJEh{_r1ii zd0(4$e&&?J5gfW?6Ft!361swrAPO`Enap1lc9j`(Dl5}S^O#x2*lvqv@pWOlOgCH$ zDZ{pE*v7jUmo%yxuEVK|ZxOyn6sED~j;%O(^y%iOn*v<=OoMinIJE1YImWS|S=}@T)bD3&-F7sP-YkX2(70vvWj@KYV zPln5sL(e7Dqryz-Q6YSX_2}pkvfR6PZg4Nk+dOp6`<7}@Ep|H;qoKy(s1kG z7B>%W?A#o7xs2`MhdWH6> z2$dV*dx)RYEd7;^67F-Ki>9P=UKK!A{tETQ{A{~C>wKIxz~-Cz06Q zX;64IZBv15y7e=iO^0DLci7e&Z^!?iqD#vn-bG$D%~pQ>6yP>AhHIs{>DI0BYHs|k z3)e!t-KOxGJ6sH3^3!m{P!N-{Eegp~*EvU@nb-6{Lz-NN;|$N&a(tRm9lHAs78~!pS zk6W3C_P+g8)-yk0`fJ$cZ|l0Zxp8W5bB8Ov;*=)EJ!7o$B^Cf<|X99zC7^jDnQVB+Q(*n_IMo@d@ ziyx~?ToS}Ml-5fj&J+o~m756fgQbn(IeTi4xhwpX&p6ynh#ZSjXv=7oOxLb%B3q!8 z5YTNd6onV2^<>_HT|aU4Hx(wjwQ4*K-|kbr;TLtoR>7O&YZ(2kNc#IJ5cN}t`*n{< zw+_>BF527uKSlqtbm}f|{5oFUto+(-fEvbhXx3e`s?EBmVDO`x_J;2;>YWdZX-W8r z=fSP4Cx=haz36|5M;qQ6KA{7$ z$1aprrbRZH_dcTVAF{*5`!hCqFyh{OH|UvPp(6rrDu);LU*)aM!^0y4KRa~b(VAr$ zd{6^WQ7K_b2faP3uzz*Pr&0rWXdi9!aOE)jy^I&q{$;B9ukL3awp-_O+Z%V=r#Pp6 zx>s7nsm-*`Rl$yVVTMeUaN;*i5*%#~ll)5<`85fsk&LadWBlzc9C+eKpxj4b?s8zzH7kl6cc%Yl!+y9+9g)uY`IWidNe<|jMmCK1Sl_t z(YJpruTe7(Z9vQjE$`{CR9E<^>u8=K1jYqNV|0b+73#(@^7Y5qRgs%Km;GAx#VYz;tNtcC<|nY z(A>sH2jgV#2`49+*MI&oyQALau?CLNZ*2@O*gAN8cy-vmbuXQam(O@RlXCZp`@f%Y zc<0u&YwSv)A>MQQAVqqa)2STO_bOT&3Ey}%4fe+Bb3cnT_(2bTfs?3-kGATG7rok} z#x$DP7)QIBY5}?&ah1pBqe^qo_nMDp6BofW2$cHk-=^pOc_n&rFT)ZCN>dzz<| z(=*mJ7=rIQ5_e9$iZ3y8 z;UaPKYMPgOt>zgYF0m5HF^|UX?H>)dZgC?amj$h|4eQLizd?Mk$7($Zus7X9Jc)ET z>9O-tW`KgT7}h<8?#-%OpmbLcQzZ&>f8x=-{gPrRm-zmzLa1GK=+kT|o#0Vw(_x&j z#-nOI7Jj5@QR(KMV4rA`p5BgU`lnMV;_?uQl`V7=g?ciwqKjE0koXxt{v#iB&<)R` zYYfxLOSq<+qO79$ao&mwf;6f_GNXHN7jLECyzp!OM(Bgka5El{7$u^rqNMm&aa8&O zRFJ@R9yVTeRpT^H)#zMlGl8a4cd_d!ZP?lHL?%eLl}}+wnZl2Iso+2N(R+st73rMk z);5{XUf%m~I6L|_u=b+2=s+RV_ZfMxSb2Eh)uUYfu)Q(tzI-zL=%bH@yElGv*rqqN z!szmxJ;lphJ<4)#cA%Uy_wK7O^2E!hJg$AFP%_`?34skF;HCVbF?Wa7EForG5^0J` z38(+eMFA2|6WLIuTUqO*Bk|a>pe#pzs^)9eDMJ%(##HIWWwgut{$?PSvoO5`pk}B6 zuF7=0h$rC)s$Tf!~$p%|* zg+Ewp&${B!>ugzf!W9zIDEklu69fn{I$0dVTH@jL^9@F8hfEvp^R04mqI7|;;LUJSIpa>N|tQ~a2dWBj?Y z$^w(HFuDs2o?)uR5-PDuGDuJo*eb*Ze+loYU&E;DKF2M(!WCT_1Jk%kkYpzT@zPQ% z>5)3ViC|ug_X7SgsG9D=TDGc}OHp8Qt%tK#CQm)O(4BvDKK%IKyoe)sTaeSZh70mSh8O}^D~@p@g5#d}#&mTa39Gv_ClW)9 zI6zWmGm=LfLKl4Vr(9nDo#B{zNgvF(5I6oNEASXhu00y@Gj1D&9&V(?KcD`xr{bHL zN4#yha=1I3zhY{IvkW(=K*uMm!_&u)IE2IDot=$giyH|oha#un0M?#4^Jn=C+$+FL4B$g?Nh%?%p)UqL#yeS$&_&snbD+iI3Mf{sNQMgh~Gv;!D!o_cxH51rxfw{`)mFo zaJ`!(yR2k~Zs-Z(RUuBBZ190|nGw&8H{KY&#;&I29k+Gt4{N8J!^{7lw>Rz4BuVo7 zBG1aK%(|<(yJouQ*xA|P3KA&2p#*{g2nf(SeFMGOZ_=Mm0`x)#V4TwpG0D zbN1%>nvZznF0-gj{wS+l&==!#IH}d6fN9>U1QrKya%b`26ue6f3`s9Olf_Rh=s{M*rOjZ6z1s%K7(c>R z)z&GERkx*E;j-T|ba@?m$rESSF;Fe?g!^D1`9ns02qZ;9yEhFxYj`ACuh0%S&|dQO zl2g8udG_WD4E0a41#&uyddc6mFDV)J^E;fEyz%^Y?{xazS8u1k{KZFkpK-Iv&6iHM zK?n0i<^~4bdCc=59pRO;75l55Mb-a53e|~ipMFJTAbxqXBdco4F?0<&o8Fwo z(FA)|bl^|BM27hRhRmcJ1^ejNVR_K;{iYOQhoYyiJU1QlH0%FR(6~xdZq9>F>5obO7tBs`;=* zOJFXU&E#&Z&c=Jp{yC37dNJ*N`7KX=P&8gFLsjU}kfufuT(Fw=eKjxQv;y9(;$$OKhi;RsU3l)Yxv#Sc{uGpV{HT9C3e9Y=y+;GF6;Jd9BKB( zf6V6uKmI9OE^Ba>^0iX}$ldE6b7>zwe9B8BHc-FjtKPoFcQs~!MNGvbgb)>g!}QMU z##F$@J$tl4Y1lLXxEikUF3#4eq{1+8iC3=Crhl2dD3E#!a`~HvUtT8GX?->kQuE`< z?<882wEKALPJkM5UuvGwc$?(viK{r-nt*E>jK9FBTo8WEQ$DIKpDFg4ZNVlYhCK z!BrH)Z9d0(1cN4y5MC(O@-?~R=5;$I9rbNNrY4bd2w!9`+px;)4!<@q~98=Pae)XV=5weftrU4TeV2i6PZ*zS`V1Y@mTr z4zw%$gqPsx48t$(|MYdnRS(h<#)0q0<$b9}6OjUmBHws&~+ zf)9Ov{A}7g`3=Q(Ne!pBUo`9Ahz;$hN9nG*>W&Q|qs_ySub2pus$Ks#L-=2=<{oo2l07!+1#0c$!4^6Bx(o~EZUaVQ0; zkmpPs4Y-)>Y&KYTGt-K`x^F|1l`IHWj)S*A^24RvnVzf>7h^awT`=ms~1f)jrHOBxClys4{6RpXi0XC0m2X9*NG^p4-~OhI)jA}|veLtYAv zL>1hQnVBehJyK{Vz@V?O3D(}%e>=V7(e?SqpE3sdtLcE1nipqme8uCh?Zj@ed>Gj$ z@cYv@Zw{xw{l{;opYdfLzv8pDR(qxRWVObldgg*VOGTByfa{e-Mxm|bA1)#jDgE<9 z$w0nG**op^$1pZHBp?ZYltm#^#`V=6bya$cW^oD;hY#F7^iJ2D`P*aM&TpsMuLgc8Iq%yjlI&7yM{e7IV=MSg*c+S_Wd<8+{ z%{W~?Y|UpScb+gB@zJyC;QZBe`5r^+d#6llfM$l4SGO2)1Lx(*(R8@~mhBl{GW+QX ztAUxphar|0b=sSXFDO@e$5MtIS*Kr^?_?M7oHK0}@A{fijtA8H?B&PP0oy)YvjYAG zXM>lJ`MCK#rpRvZ-iL1-7W|pPw@gmiTl)2z)#>Apx26}5A0r6%Vc@H4egJfpCCpbK zao0G%j;`_QJAdv(LvbptmB>by)@943Ll4F4ytyK#!1$?h5RMRh@dqXI>|AzADciW> z6m_yQj-b=Sd@gXwR7`}fmdKHr&s z{Rtm$bANQSUkgS5j`0gU3t2;f`pjRo&>%{=LgPO<%yAeO?~jF<%%cy&=4EOXvQ4{v z9S*v!Goly2v=_XQkifOZvz#piMq=6=F!34Eu0t-$BW07rkLd%>qy_rq7pz58>1x>- zgz1!be7hYzZ$dqsl``C5H{oaH;db_KKjNfJtw&qaL%iYr zZ@xwj)xXt6KfPA^L6!7*w34T~_tU}NyXnC*7Lak%IX_39(5TG(u=fUfm{~NwAcqRm zYfKww5`OgjSJ@KaiamN(c|zD^E8R`@0Xm&Y4ketkJpH^<_Fgc|X1ShkrZ0c=^-m$uIv~_Cn#Yo5$DlV_pQgzX}~= z+u2l?htrpT_-gv?@19OSeeoOSf{<`;Id)j{bFkbZv!zlMy z!TaE&$J6=_TY_Nh&$-#J;GpK?+l)$F_)&>__Zg4IAn!60h9Qm{p7L&(8RBdv>CFpR zJ23|Kggxr_`8w3IpT6KDB+w-f@Tl=Vc>8X8{qE}+=vBWi6z7R@42jT;*ijwi^$eG2 zbT*jAcy<7v%)DA<29~xW4i{{#vBRbd(k^&XSl`-Z+6rS!SG?(zZy#ZJKqZ0^0^u6_ zEb>4ePV> z@K?1AMFx*!e~h>Wb&b=RSMVl^J3Lso@WDYG@v8J)w~U+Tf77O%+n_ExbLBUT<%Ka{ z_&yeh0POsw2VV6y4$pJ^#y!OSA(*B)T2>%UcHreDMd8JBj5racr_QDI6amJ@86?gM z$o?fbASds>oPPK3{x>?@)%5sh|9skK%=C+|zM8h4{A7B;?380ZZpqdjgBEUdu$Xhs@b&6tr6S?Sd7j|zXInf@9Wl?^MA#d^)<)FL&l^XOW(Xdz5I(` zOrQMnQ^u!Rl*jn@1;-IL_mtOr2mczj&pvu`a>)GdmFeL}Pp3zpyqHek?K50Lp9lBN zsV^oOes*X><`|9ejp7-O+y!x;5`34k$qtzg`y9VJp1%F}f5#p^Y>|6SdCP$73VX4R zL3U4{mT(Otd2_h*Pg=xNa za&|GjdG~&L`~c5H4;}6{DRAw;KaRBodS{mKdJ*BB(@+Z!97fP682YU8&ch$;?825( zs!ZOoW?D8wr82}BnIUfl0YenDJ70seviJ3zwvI=>^IEAy7P_qGHhk`8=T~67_NC?p zoh1g)5h^?ZbO9=9kYO~va{SGZ=NBs@=vj)x4!C4-#Hc^x!-4c?ba<2?{DML(O;_{m zS)9$+JT4Z~r8Q%a!7*q-=8Gm9^a*chTrG>f_T2G;l%7x;NeZ8Kw2H7*GKB?rD?SUJ zeAC9oVq84Q7B0`wcQ^NWVRVMf-~Qo0A#2kVrP2z^eJEZdCNX28gjNucIQK6VJKb(nOqm`oN1e;Jv0iN0z*S3 z?@stY5)h+Zg&hDTyOx8xJA(l}eNOm!vezTnwg$zPGl(jZ z$^76L?PY-v27zu9qnvKx1fuCF*Ep3FwwMq-&=PV|c?iSTEQivRMx2_Eo&-*dTVwJUuwV zi1U#WZW@kvYr8fu;`i2fxUpE)OvdfyU zMSvTa@iOl?gls&70kh$wW|U_TLs7~n{Er<`$vZI8@71;JwtD>JVH8)>#~uz24l+D=%yRs9uU}1j@7_?3Z@}VdI~JRTCUYi;-)8Cd)sow4 z@8$I}mJ)NEBg>?gok_Rl+5O1+yUwaZxb81qi=K6P*M9W~out!SOufrfmH5#MFw*+Opap_&pCRl7le_%#shZMxYPJBRwU}Fa*ZG5%gZ>R z47=?4$v9z_y%RvmR^4h{Fb2d{pID?M;*KctM7}jv;hGCS9 ze=>aH%#b{OIVBMV-QhETI}FuiUwLG?&J*DZUwS(Jj=k#-(8){onc@kYmI&=WDXd=L zWouHo8LcpB#P2Swwmh`2h|*y&x76Ka`{buDKgo2$wU7SU|NJ=|vj+;(2A{CUGC&7= zUxMX~6`8vrWeA-)x8A|dFzy;Br}^0EX;?8szjt`kO*79hSE^1+#_Xq+!*eTar?oIIZN++;ro$znMNXEem#%JbGBgakuX-^ISIE6)oHw$Nw4L6^6<`@ z$3pLr{;7z%;Ka@Q9-ovAav*wGij*V?ZxEzI%O>Xr?9AD@>$y#H0d(4&?{s#ut1kFS zCq}_c3mw%yZEzb$*Au|mPtz$U`RjIy0Z}Gp9GeC`7{yzx4mopStlL-g$pWw?gsIa++sV@yeg4e<(gLzm#c1HVuW# ze2>tXPG3)7t{SxewT?y~rQJWyt*;7qssHMu{aA@d>RstLFZr9(I0tIkM5n9|p*HW) zBibgbx_RpN+WGi8L(-t}u5o^B3vGAI&3Tongb!XYeU6va2aFn=@Iep8bLn>&euhz; z4dPh0t9ZT9uVT#Cyt_lc-nqv0k`aYXzR0x8e)2Y4Y?i|p3?r}eVTg-E-<+^?ABT0_ zZHxU(8|B4$@OF=njPOZ678b3sWPgR5!wvSZrY;J`HMHKtz&>WkrRHs8u%U0_8?Q&N z_gR1jALkDFAPGoY*+tIzUqjv#`q8+GWm+}pNWn2&-voX1p@SLKa~i7_8M$mrJOM@mv2w z2%Mwnt9pzZn&x@D^8zr32~K`Y6R9}lc~BW#sVpD`M}E`1OuZ8mM~=eVG=+{q`<)W$ zymrEF%c2F|fJc*Jz&ChVd@(#rtgStFI>i{Av4~<5PyE3y9d(D7l|0t^eqx<(UJ8H4 zM=+nVV(w$6hw1TM;&Jc2dpo^;^>w`PQ>KJTmeULM!edZ0-s)ELtNB@;!_(Tn*}}&Xq8Z6=#-I+Cr+T?b7Gsu`cDk ztV?|;oe09kPtl*YByCPZ(ncMEtK~7+(pw@xmi5%`M2HIxX|_F;cMr>6VZ0nha46;6 zp^^_NHo_lai`J*T@7_(<2N>Q>yl1@CYhNb1`q9Y%jDzQfL7mrl_@zI@wOwpv zc6e|&z4?aE@qPPx+WYF;>HQzRo({g@>FeNZdc^t{y=%Wh79$N0(s#jD4JU7TiesOW z)eCMm)D=(P;SPDc#_;1!ukCD1kD0^0#{Mdo4AJ0kaci8Ua_;7D}{q;9IRvuCC zdivzkpG=?r>eoCj@I{dGcMx`x7rF|0Eh~YTF6S&1grFfe*kJ0W9%LKfr2D~8gnPimF-T}txJ_IblpMGGzuKATfU*$ z?}=&jfLbb378)tlloNK-mBghnodXN4HtST3RtgQd}o8zK`+$6W;n>0(L{W<>#Sw4Uyiq~XE5DIZKmGMz{bG9ZY~GF2sCUo+rn#A9y5NLwxYNR z=S+y4I4}51>Yx5IuSc5X+q0pY`op@cysFmFPrQs-mF@E4s{RVE@D%;B5<=JA^(FBG zKa2diOa_kNk&fi4sYO>)uj5z4Hr^aD=oo52)qyyj(SHmU4(vL^6sOEMdi(Yd)B62q z7;$dSj7#q`yW^UtsujHR`XZ0YL3#S2dW#PQE*cOObv=O_W1aG)rqjLsj4G@+34=;+ za7MAV%=!Lkdin$}|2g~XF#dhX)10#NiQo~-?GK*qO?wC5FyFd3k4=?P^n^i+OfNiv zCJptYCr>G>>Gejy-aI%B6B|)o-8-JvnVz`GeD2MsEXH9owl!aDLc#^k#5u!(mpm6U5bn4dd+e(tz%)$mEFc*)F!(TPN<(!-G_%!g@cdgl4_cz41%ocS8QrZF@W2}yH7k2E>97Xv!;+B5_UZ)7OC zcqG1fF^a;Byn0z|jRbibl_BO_43?8QibPgT?}A1ObXwm`!&|BrOEA?L*p_{lS>Rq! zDV@r^ZW0ts@Y>Mj6Q7ky=J-*2{41+nk}jMjTjM2%!ihair=-%Vmky^_sT*;Fg8SHs zEuU7H4t9YjbcGkT&4(Xu_z=W}ofu27=3_Ps(so#R_mD@?hdxTe*ZdV2Ns z7t;}O7Yo@|df^$DC2nZGylVLsdrO%GP&yVeO-lVF-NJ=$mh-)6%hHU3)(CdIVhyvP zE3z57*$x#1D#z%o<<&>^mv|3{5{*pn;)7#yqHKc9LQ%9x$fX?f*LBIGipqcWm*Fgs zuH#cq4h9MsCrLO9#o#s6au%C5$C=yg2hXsEGvKC;?P+)Sqv_glWxld>?pQd(A2$ps zI4prOP@#qyo~&EP$(sR3ZWIiM#6x#$Y-XLTFlT)IlpDwi!=Ko=HD;MSVi~>D3r{au zg$^PY;cW3D@*0?i+-LTCjPU9)H-LxJgHIkoHI6R&g@-X+up!{y zn^&Rnqrdw3^zt`9pPv5m#q{*E7tA$(#=&eCXS`sT?=uqOOUg^uG+goiChZFwGNC8# z*2zzJ8d>|zzx-c6zu;xh$sq&mEOt<7A3*rS`#jF@0`r=El~;LuS;rkLrLKlXvZJAF zuw{o!hqRty1p3^HA%pXf#)5nEZ#8@a*$Dh`B2Z~6uDTOfK@653dAVG~%`f8>7*Q;O z7X$M^onkY33bbfz8k@+g518;5Skm#>r|r%x4){Z^DA4l4qwE-Cgp|xoPTT zi4>pz;YSzAkk*@>E5EYBP(=elX90fAw^L-fkP3$@PKGN|{T!Qy>5QQer@=matS7X= z6Qwz+1$YpOGe9+{>Z17X|gGA_=lnzCBEq)1^IsAO7gRXuW3%94Y&I!jm4R!li#NZZo7VxGgW&i@wg zhI$b zVw)=qbRuzalV%^FzKpX2ZyW3BUa>;cSszbdzMSr}Z@i0Tl!Z&^x7dCdPhdKD^9EZ< zdgKC4Dj#=_l?!h`(BKLL=A65iiZ3HGdf_-dH>fj)Wj5Kn{^hTKF+KeFX;yOjlI9$J zb9ugti|#+#i2--tdZ#SFzF52$`nC-TPcC-T2qr+{bNFG#?N_k}lZi(_39nE+p4F!VkrB^%BM#qs31rNw5Qz=FI_v^0Q zqP=OZ`pvN;@hDHjDHG?PIvy@ujX#zFU95DZ@pC7qGKXPYG$D=-DoM*rehPop(dp9e zzx3wl!Z{cHGS;*b38Tud}m`nCKoI)W=>Pe=`p5LW%yn;WwQd`${}z zX_YosB|2-w#XGBvANwl0+5lR(IdAW<4?N#TJve6J;r;ba~*>{}v2TvdHB9a*{;C3VG!uWFi8fPVqMIUxZaP8jnfARSlD=$xv*?fgDMaP0}82fq1_{>B0 z30PqxD{eQ`Uq*w{vJc;mTRAo~4wZvz8_mPcnS5bphaLVyoqkzvj-$#()Z!H<^?J^s z@TJAWv@}T3*KLy}_<;%3sC%iXmajnRLYK=@KGW)GD9@cXKUaMPD}VCrxVIj<2HarB zlFn)|JC(e0@RyF}&{TR-(JG*q;w#d+qlryEo4%5PDS?%dDzKo{66x5sMe{VyUbpd< zr*1FHNWX`n`R(@W>txP;OrM8_`_NgqhVT5Qz4I37b69yFfOb^HTF!;^<4IwZt~o9k zcR9Pj`M`kRfB1~P#!dC?c-lq3SJ=F0ef4a5$=K!%FF9X-^J@C?_y0J(d-n}IJAKTl zZ8#~EQSTxnD~jAg-H=;RQY|8p{^v)aYO2w12FaCv=ePNs%R`V`xRfpb9p-IeTDP4z zbOx&Js!esS%GiPtKKzT$Fx1j|Q!)fm^f0+zZ~%R)U7LtX@4R4*d`zcQz{++AQw|xn zF7G9T=Oy)?bHXXhO3L&W z`&CsQoQ2F^D=B_*H7ZRRlhFe|y|>POInMN0W3Q8QHcE5YVjVg);^)U_(;?&Bmz=Zc zho=k2*&W7-!RJfEesE!%VU%5#>N7i$CHfd%Xj*p#CpgwD!@Tcx^$MC?X78dO=Z-t` z#GN$F-{1zZyUX;+9d86omu1$}HDlzy%h}``u3mXxbo#GUQ;l&vmgdce47*-`&^4u&KPjI_Lv>Yr&}%3;Q!fgd zj-&iZm);?=zs>>5!*<^x=lJ4*Lhw#3U7l3t7a&V=hCTk-4(Ah4k`a zu;fTROHP-uIeig{BuJY?5lpKeBY#?$%e3?XT0|%AP(kWwS1}4dKP;0cx)1~}BY#;t z$VgM~G>glyrHgD*_HNzzP z%rig5vAxe&a{~3c$(4P2mlxlgY$kR3{y2Jv0C4~u?lFLfp&ZA(-52GI&8=2<;h9Mv z8Jg$DBhTwR)m;H|a)jf|aE$M3p1$~mr$y$7bF=VEMB3PM#=t4Sy!D;wlVAKiD?Q)* z0bI!Q=-oROe>x83CC3lxybP3cHn|l`#!qBZz#!WgaE*2%bu+J0+WV|J8M`=qq6km~j!@ zD35v|mTI+IkX0bR^K>9b12Cg_5`KdACuSplR=g>f6w}(7bU1iMk zs7qRPxH913eN-%L%c9G9-D#fZFh%Si|NWsdR$FXQ2RzGm+K7zgk+LoTo#E`9MLO(U z_~7ZY=@Z`VI7DdYTw#3idgTdwR9sJwnX$5ZZ;LTY>GWnPBBaBi-dTqayT-l$r54gs zrF^RH%UW`o zCyHfSaVRUqQhpG)1WEdBdWG@$J`amx3$oP{R}=bzpLZ8Lm6lg-eZ_;g@&Xg*F&||B zukxqaYBMS#XAF5A?Z2L$KmT-k!lIdXyKne{4xTbzuw%qEwq5invSpBRwVrS*-2`== zeNix)r|igjz&!Kq=j_YP(}8ofFIm@qi5I@f9xC@Rs4K7E^X>#5vbTxoFycF4aVjI@ z)`xuN?`ZD;NBB7;abuw0xjeo$wPMWz3xi&N^?P2#zD1`truPqCO%I`<_xa=LBRW zmtD3tn3w1ra651N`UxC<{1 zQEl>67vYlf~B2O zMpOtDkT?`^7V`9MUnP+z1yunT6I_f0;8d)wcKD>*>ME$C-ES(123LT< z*mCm-X6nCS8sHgw(r-G3&-BzxdnLZTzRUh77t_&qOiBDb!*#3%W&nOV`Qp22@6p%U zcl^`e{3RbB*_rs@6g)5#$mqC>iJrXV0~2q4!u~&djKv>fz!`UOLnW6aD@=`!vO>n( z{hSj^nu9M$b%T!U%Q=nFq7#!9eUNNmG8bHE-Ja8!JaXu-~zONz>=@L?crV5H(X$u2ULj*+vJF*0%Pbari= z$=z~+C#{3m^P8{y7#8i{fU~oFH2-saoo2qF&t0_h`?}9};VQj!3S}5z%f^pb&_M?W z*aU^n<@TV=BW8v1>o2yZ&v?_nz4hF8VbiN`m~nE#q8`R7*VydHeVj2fX_NBeh6j!m zBhn_S&&Vg~RNBp9)>48ESZCER>;nJ?NeqT2{{scXzv&;yyDPK4whj-`ir;z-;%XSL zyV}lcS@+p=p{%-bBq={h9hX+t*g7tU!g!OH1`T-a<&hyluHy`n7n!7ZJw2>BrmSI4 z8Z^^>x(&6b3r-NWiJh#NGyN7r_mbg<#~9r27?+-r0etDgAaOz7h)A0BHQk<>iQ-7a z4gK^z>tl95c``lu`Ev{?dGwiUS7uW6!;hX!`+OnfV*eEzThZU~x*d91_oi=PD8_wE zj@gI)_zj7W;`7Es0{JYIkyp)N8{$@roq|Z zwdtK_vUlGoosYA&NDQRu@TF0=q0`oKU;~KApDx>-ywd)h-&Xck=)M+*@lK!PG))6% zzPw4F2Has3kNSL)vnI;BRe>ZoJP*8i`ARzfxuJTNw*_Of=wP*37Es1>=a!ZfCCT=v zn}s)6u0g6~GK7LmyOUWa<;;in>}p55d-Jiq*{pRAA+Cf zcUYg+Ud7;*zWV_yXo8C9Zyd`{%G3y^a)=0`t;pb`^@j< z@%8AE{l%FohF7)Di!i#D-0`Pki5Jf-?woPcmHJ@blX?CtyC(3?c|hMu{qW^oEaEf` z^l96!+S1BPId;6-q)Jp;vKBv)d0#Dv5_jP+tLk6sPSVK#@wTZ_g;HF^is0yrQ!?!j znRzjAMUN!dYb!CTgF*2+==(H5bQ4`HClL?aAq|Gcj`qHup0S|k*^5WhH_YtVX9F|K zxdkg2f>6B15{w97$jJ(chXx#IylbZ09>sX8yTG zea*dG7)NKrlIeo<*T4UgA(N-m?n`D(`4qzaz!@kfesGzOJv?R#;mLRJr}ba{)qgd8 zb?=Mm^&kGg-OSIY(II^E&a&e*Cd}V|z-QGi_t{s1MG#CYykX$op#bOJYH-S{bUvro z7-RA^;2Nonh#|pMgQdBvMLSYX?RliP`Lp>#b z%h+ySm!4RewWU(ZR?X6*oC+6d18=oCdG@1Zi)X~Sz7-EeU_dTOUx1A=mV=J!pOqE{gD`jd2}2yb8+5h$Ir~HD zd_BZ~zhyDl2@^gvu365{e&Jcj2fbLw>HPiK^zFglr`|Zd(8g#8nu@KPMpyMbG2>s$(q-KfS(Co?XNrBakWHHB5P^>irJ?yEoT9K{`= zO?xR|@gfgiYt&qEcEQ_ny;(b#LsHULs$IXiQ0chLA?}c9CyP4cHJecIf#D}~ELjOf zX^mN$QE3d%Gro=9l7oUWB)#OQVy-hrY}-4Bca0mlM%~9^pOS0`5BXI$q^E~p3Yi|t za&}A5Q*r2SfIs!z^p%#SRCptnHcb1YbI|2bh&Qhl^wR}8Zg%y}-~HR^lV9QCJpCy; zeZ%(2Y#YH-ro)DAj#SQv?IuEXQTagsqTWB1(0>}-yiL;Hw!4h}Kqy&O`wAwxk;f0f zFYynZxC1BqKT_SuEnQL97VyZu%bBizXhYQvf$R(FLJABlU7j93r~m`}YPc%Rc65NF zuCh1NIU7WsF^t0U`t4nuOc!NQN49eH2E>2eTtG>E%Ex-{hRA5ZCLaey^XgE?@!S1r zV~4c^z6im-#E|0Pulqt=1HOHbr-X?)=}Id*6~Y71GEBYLpghw#Q$-pm?3-{uFid|A zoX(m}y06zKvi9bxhoe`1dHY#hZPn!q~AL zZpl`S4B!jnA-qSIHQu;9&yQ~8O!6PXS0=4=p4-6RJ@*rV@V1w*`Lpe`cm~g-ElbH2 zsQ=^YPw1?7jgQyOLsbI4$c%L5hRo^-#<65nglnm3Jb6q{y+vDi9W*9BqbWRvH)|@O z&Tf1n4>!`Fd_51Ku2*_Hm{r^tO+`D{K_6Oy)%yt#7;$e%wyW}&9&uU5YtM~)Q737I zb9wH%JvZDu?St{qIRq04%0p3JJa}pTIAoT%o!gLGB=le2!ki|Ur#XgiSNHafX+5BY41@*%SGNg+|6&jv%F6q z=J(PQU@)~asdbrtvFzu~_ zAqn1yOHT)(R#5z;PUEQ(Lrp|Oic#HQLCpiUh+T8BjbB(84&f?WA6~Ez%aQxBuoVg0 z@KCS)*_)G|Bsc(fDkO>UYk#O4mpYWObNHYVulUmw2gY3xAy~V+{fIqZp1LHTr$3$m zox!ugOd02lpW<|{fAfdG$LONSPd~@pIMFTym$lQ1!FYZ3=KVg#$)NJ zj~478HpaSrgq}BkM2e!T6z!?$ecNf$fZT@7)4;aJE|)P#V>=jKuGqeki|_4<834c^faTNhve zuP}gC>9NXCkay;IjDv=vN7)pRol1QuZBK5BQ;Is2U)3c<0@v|iWM#-#8RZ3$vNhjy zI|6n1^ri2VDkx$N7A*y7H{7ZL-u!s!G57G;RUKlCKAzJ=?1a}GkDLWFr`|>|d+b{mz^z3JUojs#3 z_$t*2n-uwdLLa@+RQf9KFnDXFL1~$EegA)*i}&JV$?fghm8)ZYGJ+&G0W}!S*0Y93Yl;I`tQH;M z(>eCDY7U9`*)sPWKYaC;9RxpRG=gRA?jq<4U)B)lq&kf9h8ZxYOzpeYIAdchN97nx zaGB<`M!LBKOM_pjzs8g1ttK}aXa13nJ+$AroL@dyc}jHa+2c1X++i2Q4c_5gk?xm% z&KVBWfbU?~*Hz^A@4w|G&kplsSvmCd2_5rwI2@uhKnu?a!kuC53ZxToNewqBEChuWdftzx+yGE zQoIE_zv%i+Gk%wj@}AM4L2JLjjB_*U87;LyD;*dFDS?)_k|d~u;Kx8p=r!(cEsggb z+5y{Pzn*sZFwM@R?dcsJ?A3|GWu>=)6T41=dJ+c3BLT{gv%--^>)@_`!*EE-v3~LN z9b@gU_wa@pUBDYZ&C?C}80KByqhQ3{;qV4;Tpt3Htt$lMxGM!Bqaa4E{!F9K z0AN6$zq;$7o~^>L4PCVee!tSQx&0*0<^fapE)Ox_EJ>%U#U|v&p>xu~D2JRjk0wZ} z9(`{W^>urFTmpz+0>QR36wr8j;)LFuL(r^$U9O?v*0J z%GA2owx0iYpKEAWcm%%B$BXY_>Gh%y-oFju+kEucj(KwMW_q-FIX%yt`v*}jJrs?b z4ddf;hD_+pXJZ2=^9?fPFiMykild?Rx{tn2f!U8rZ1CL1yp3UB_qo#>-jdxwDn{zE z-rW6?Q)vY?py9~Io7F2mL#K6Ie1<;fVo_uLL#^nUz7g4fb^~ z9Qwfz+TXJMPQ!HJ3kMg24$}=Sm%6(BYu+CVff)D|LCwq{mH#wBMXe|@a%f05#}6c< zjMII(pdX}tkE3$JeROT>$+QLE8t|j{U*HApgmB~RrMqCKX&yPWU zFz-WrFXRMMnU*^%*?E1oU6pwoaIbY-O8B$|vRE9W-5WlAC`M73Xc*;6xxBVqhr990 zuiW5A#GTf#T~FBo_X(<-y`@4S1*!_$NnX`$#;%dMHb$td7Uy$g*zK%I(TKX?)wRp> zxgl)aXLmnl7aj4{`U_@uT(g%pV`edo&Y`vfXNrgpY{k=(t>iNXlHoJ%?v%%P;>2Fz zoci%$_aEPRx7j7IGjzMSER_^7i^XGiBFPJgJQk?d3%m)vA=h?&Q7tHJayiivraDhSwy{!ma6 z%xi^+qKq`tKXkNVcYIG_mdA>aa;<_?UBP9gi^ep4iL>bueChQr%Xa>)v$&v-|0s+~ zXnoR>J1q+3jZ=lrA}XF13O)tHXY(lD;(I6^*YZ~M&*)5Dsc9&vESc!JewN<136)>` z7w)Rl3`$t2iW8A}Pu5p6PMij|$%~#NHbQf1p}hE2m3ZP54EP)c@!(w|HRV<)J_W0a z@17UHqwVT?(9T7ZtcJyQNrdg-U(WJ@?0j@ZC(n5tzGC|94juggo#lj$tPb9P!wrd> zEBfmP9>lpypIF0KP=vA~t-8WbS8Dp8I{+X2sj?r;`aoi67N>QL(CzMJ=X&MoOKe)A?bA@(k@-z z=xxG=51LR^`kYMVnPCnc3i?Olq+vi;n9ipWbwuTwZ%$tE1hviz$K40a?`Qbr5M!zw zR-ILZjoN`$_WXKR($z_0Vkvkm5d>j-$0_q&u#_J}KUML*S$ zZm|K{laHTgjGWs8^e9tIEso47@3f9w35xfebgZ_!5+cmdyA}`rab8HeSIQOd6j$6M zWgGGF<+Jy%(YYfQ?BHOpZ{SK`#7mOY!9M4H$MYWF=yXG`jO{B6#`D*H{XhQA=Qjv+ z4MXcEf?PnfL1pI{?8Eop#n?P%Y)Qj=ALIU%JINJq>rdGgi$PqxS<3mvW!}(kvUArq zZ|t||)c3~jTI=AA5vRe{NndzqC`*ixWFoXu1TJQw4R9yTVdiBzKF?QCRFGEox+ZNH z@5UVk%8#{BU>tK?UB7waY2#VAE4Sm86N`#rhw{SfN-ysyFAzy{80s8PT)6s_lnUVi zJl1DUgK^=4C%hFc#aGGFa!sQSr{lJ9SD?Tw%Qj9*2i6j)FL@(AEMKLQCXm9^^&xl@ zFwu0|)8OX(@)NY==q2c7NpolvI>oDdTRIegx9Muyf{>pdN-v%%r+h=VxCf7x%V9kg z6JPTpYl`K9M_bL+78h%5Znb%FfCujU_G4zG@WmE9Aw72Igs%hZ(w;RRhoL&65YMPv z++i+f<9}M{^0%N%#KCR)TqYH_{=RuHY3N}shp#*wo`?YlpXEw-U|bGhAUt@544tu3 zQ$ei}o5K@$#?S|km0G_|&)u`Rl~zKC^f7L=pvHG0=stLbk*?4dl&ue56kW!YvoFHg%ff#tF^XR>M(^(S^0}o|% z6dD7et2B8@K$(oirgNv+5R!($N51OtUUx^;V9tX|Fh4r46sWH(Z+s|7^va(k1_(3> z*3+Tm;*u6a*JZr(JMLY+gYYV5VXKbP)isXfQ=iwy!!P{l0r^Qb$MokBo{Hi2?W<{>ypyPF=m24LrTo~JMI$USW< zpB2l7ZF{S9Akt%~X@{bV6e4t0;MMhiTKEt>oz`@B4V~WC=FefwpC7`tW74pl-#9?9 zh%O>wblC{TmQYoPum#a|R!Y-jJ)-XVge~~d?xSAwyPtcbu_kYe$~LW$LVYd5!dYkI zb;LQ5gp@`Pc~9p!^0^L5L4-1+)GhVq(u-7HdEWiOoTgUjiN zCFz&vd<%iDe7%L?P4(R1eVK^KG{FUmM>wr--@cw6yNxYI)m;%Y#?4KB`yrzj?A?8} zkBxM(4mW#U1V<$#`Wi3(fU4;q^LxC+*<~K(&V2^ydE{^tmObtU z`|K^?M>@B*{5b5^^!Onk>)gdVXO_x7AAvn(8kzep-!NR_bets^ezvhgz{*SH`lEYrq8ciF--4xpEVM9k0=W6mg()yHoOf|ir^ho zjLXpV->q8+%NxvVT=TTf1HdW(w2{lmnP({YG6d}{$-k)UrK<&{TN>*QZ@H$&bIGe^ zRp-zo-1xI@;|4J0oH!Nrbz;_|oHS7*uW6iLOP}->zMdt%`(cibY%>mK$kao0J z0|5?l#7A7jqlwZc=H)5SIy3ahPy}Yj`1bY#wp_iQ-o0X4A0F^34(T?wW(WgX*IA0Q!Zxnk4re^cmvk~6 z5CiX!q5F1U9kRZFdFYo6C+dNR1%~FFt>W663kY&n%6;Z`@9@6S8M+`;3U@_%OHd@2>UhuJb5!>e0!Hdj){<&{aFBtGYXXmU#rmejH z_7yJz_~HZ|5sw{4II(@>&hF~8vyGA*w*hA=92LT52y_#C=QG~mdB=`3MstBzf2je- zYj?(qieh8xy{R}Vop%(|ZP2-KYK6V6gtn)msdL9;sBP$RRKALU0BP|k6!E%NxlxUz zdsg9=XX9OWDjIclyw6=`;Yq_wc;IaL;)l43Yp($Ba&L3w2G5zn!_6&T9-gW=Z6WD3 z{(V{+Z^^Fclp-tes9?GQ4E`+Q!Jni`tU88VMtubxzbIwJQS?v)Xmbc89_Y;eC|o*3 zCeLRm@cGy`CB{U&$U5_Wf$LR{K{05P-sacz4)e6;X`a{d`MKf3>&R$4l}1}bcTFdg zjcR)hw%;JU#CZFT$7`n(O1B?(aPdg!9D36@=XL+Fc+=E03g2mW&v$Wk-{^Mk`aP?I z=KDU&zT~xsdFpr9Bd--o2Ii$d+W&?DFSFe3p>EjFC8yA6dk!p1173VAXaaARu>+fa zFvl-GLdn3m`1ljA^R12^#FFvhULu-ZP#p6;MvPsKfgQvq(UXox@3Gc=-Vz zdbr2jZ+B@}?$d!8x!#rZ_{`sTn(a&B?JD-q_H}1H8O$>B&xG6Z4!RHhu;5q?D-cXm{~+ zUMr=gI!!vegLpOwXXkMr7#qc!f|CkW^uo`x*RX=!$((+a8<^#aNaRpTL^UHUjk5_g z4%*(mc~p{r)tUxI(VNz2jD?zUjc^Ul1tz%Y2$BWH0uv=Ki(Fi!*N{$aIe`KLZwSy% z)t;4}$S$AalXs_+dc#&vyixBkoZ{Xo@*IWsrY5EZ&Rh-|Rs8O+9mV?lxSKz}E?F;A z7P25oF*uXP`QWyT`j>suk%=3&ZP9rgc+AWNB|=|_p+K(bIVGVb@;@^+r^TXP-=%ks zQazGR!yK;Tjn8xAQdXVcxYGRU$YQvn^i%xHKt1-ATWQPOib+jDd>@V!%Qs5UX)N<% z)W#;Xv(|9p5I)8`Wi4C?f+uN`)pDX!fU1nF^793=6zPaEBZ?0XW3{Q6adEn)OX4qh z(SF2d(5CC3W%ck0P6qS9Frs|enr~O`^U;q}_IlC<&P*_MZ8W#DO>Q*kAiHF)_c42g zJC^O2nlACGue@oZFMdPQVU+#NZ%6}|hMTf77blWFrjz{L?|#oG;T}z&{raz_hs>IB zi`w_+ucqS-w#Q|f;wQiU#dPxvoeAE%@B(xF0ps$U*jc|D2N`K3!r`O#9I_>UxUdH(C{K9Nq{##9ZH+m0wbRT6j_IlwU2#$E-D2olA zvX&pP6$97oM!4jcO6(vOlX2r-8Yc*sc;^pfO}D;GfsV4|do2%v5pkick^_%<&PFll z8EC|7ikL$bK6zol)gKIY+6DN23JU&IS9#)^%e`;{5Zudi)7IuR)=|re=WdAHQ}g%px=h#K zXK_ZC09Z^GAl~`5kKB-uG-d6fKIKNc@W3M#!8j-rcuShl=UgREdJ+nC%A`)Dr{VTV zvtE)ad1YUH-MSORFD=xyq_y;9kehl14^0$ub*8g1LNaKZ7f6^68P`5>8X=ze>J1<1 zV1djPqYPKfsor_Q&V`@2!z%ymH?p(I0vWvYLxzM;7^5~lW9Zm5Kan=Ed7IvS{0$8< z!y!&BefZ=VH+rU!0FSTCJHJ(4h*J;yi61gne#tO&_B?@}#a=AXtgc--%^G?fX1=$v zgJb-VFGf)h-t`Sb8jg8yGo5>boe|d=vT*~gOQyT3xbnQl3>kJpp+2@hE=5xE5UV^D z5);)m&NqzTtU;`=)$)=JkL3zuead5i)5fsK%)!*aWAIrSgc;`rF^`_!b@V3T`kab0 zj1uF`<0*s(!Uux%#xU-K?z6rgSHUX5Gx^nC{SGkdIbF;e7bXAqKhOi1*%eK$T!MOB! zHuUw6#RE8g=4CtHXEF8);&o-< z&Eq`nZoFY^9ox|BP7}6qE{xfb-yBawN!3H7i*sP4>2?z@iiTXhTsxC6fvx(($($eK z>Xv`%7P=7K_u8xhTW4{Ia#^w2)t6$7V%W^Ko+Xq9zVrj+7&i0`*YgTT($ABvF?xW> z!y`ZA+mR2b!#%jsLxxt4AM+9u{lm;LQ-qJWGreSok0%_k6Xg}xyts?~(~vt9g8xC? z-stG3%n~_yz0Y_z?*@0DFl?yn1Ajbau47!Evd!yvPoJ~#-;vzL;9lXxXscX!6Jt() zKltXm>6EXYo&552`fU33ba|hBg;-gs!M@=0YnSvDB*(i$oL~3?b$D=+iBq&Um|1hl zjcV=wgMan8V|(r!k-M6m7{2OD--rwZ?&7w_OUfPQEi$j2Ari)yxQqDcaE3eYcAOWi z&%b1w#Tafn^f_bdXAq+C*7!R%*T%b*&Q4wis~R;%ZZvKyr|0MlXB*mJT9mYhE{4at zRNT6g+uRyfLzIQ6LajgXXtTUp2IIndq#nmWnJSmzlDGf>P*Ai@W0!7B4iRLi0J+w< zosH~E-SW0=OgDydBdE-WMLs^Eh%e=+r*Ve{(mgkw-WYuBS6&9amqh?5ye>6erc=LV zmQMomh39}5T90?t8Jce@94M{TINVWhWV4_|j!`qx1uM1x{UJbV4AXaZykB`CaEW#dH5sGd_&_8 z9`(|{&?_(f9tw+=<`!=qHmndCE(1RD;5Yb6Sjo2zBY}>1iZ)Yhx9FJllBbSKbJJ8E zT<_9+of~l3>8Z?ii6g>gW@eEkM_{L2j5{Q!4lnxvV&FwOv@*+NgCUBW3x*&V8u3Z+ z_-HRrDf&U*mH64DtH~rz?{}vA%!>ZOs@CsT_EMAz#fdixC zttyX~boQESsayCvutRgCX0$yTI*itaVQI?C=;(8p54LGx=vY8Vh2BveB^0u@Zdfv(p?6cx9DrUK%%XWnZcx-TqCfJ$E(pX$iJa^me$A@N}7+(_uOg1 z{IRfvLC@_(i(sb$mpJ$@{eds))~L9GTmGUW@>@bq+5*L&7-<^%Y_aC?2T_bRn&(@l z57U*qIMtoGOgg?SyKKj5^|bsV+bbQ6v}r(056J(xMI35i$6NM5ghDNRxPG#(a)`AB+ zkb!g?CMlk}0nH;+YgU}btul347t0iRN?)|{QBGw|=kiRkrXgOKU;}P(mJTjdD>+J- z;qcmgzp5dB!dZvL`<$1T*=`qaWSeVuc=VCo8(=&qjW}UoEj;4#5N~qL@4o^L&6etd z11_C=(AzWzMnr;h1her*KFTgm$wMbRk3`Rcw}K-}1 z7eOH%Qn}osB=`nj>V@&v1$ptNWiTGPC6v%{&wqXxIJ#h%5D$lO4Fh<+@xWR1H0_H) zaJpJ*{6Mu$Q=?s+!C7r@`&Zqa*F5*N=W5|Zl5APwJ{0CMQf|>508MY1N!MLDg$iW~ zZ0C2GTO?K|DY-NOT4PEsIS~(-tY`d*E92kXsAES44W@get~$$>#6zb)D)-PF?BX*5 zA0GV0$SX_RM_Yo4tbJ0XqM&`t-^Xq1){8j2y-1)W<94h|}S?`8?q3%FZ?y zzpZA^WXjD=w!^aHXw+er8vL%CkNq1=m+_6SqvPyH$QU?pXQ{-YlzjeYjdHAja*ntL z{1OlTf*}_@nl!2n=-8q*ow&HEwDQ0qF)C{g@(V`B!IwjLOVqXcm22}xT3^djhrn^& zNu?+>&hW0IB5B-(DYg>ep~vSn3X0$V4z2j66@NhFhNFDJGYBXiExMYa0~Od8P7a;e z>3l-jzPvvju^+YD%sRxoeZD_=^B`tJYP8g5&#!YK} zrMKf&-}I-R1wG63S<qnHrV!+o zQ{hksaWjXUgsW1aCGaf^&LvO);ETTG)0jhtRm5>*3>Ik}YEvtXWm((8okj_L3lfJQ zZHF?l!=PfslcwF!NK$kS^S;wt_1z4%N^(~jj*y8wi1!K(Qap_EsYx~Jt)zc>5-7K-P>0hxS!qMlQ4(Mox?-)b0 zH>enB-<9#+keMkLD~#pTJni7D;U(nCFpRK%hjV@V=RX6HUIrD1IK{zBDK>BM>@>oB z;DO2S57-gw;X@uf80)?{=S*W-_szZNuI@RFb;}T2jR)rNL~g`){M<2_YAY>&k>hgOVoOmQ-mI=Taprh2+9OR$trb z)+YX}B$Xily%yg<8Zt=l&R~nSvPx$MJD6U!_?3fa71;$bdgU%j?@lQ!710J%WczT= zxIMD6T=OhRl44r_S)bP(0w2OjS&}p2mEf;Ol~TTi%|-}+A_E}&R1rxE9l3F(zCi&r z>H@@DqOdP6U7GIRI2vmCbURvQ;Qr_ubZKnkWK|vH)1$-uI((5gKMN;Jr*%26NrWBb zhprSS&4}D;WGrVlgnxC!!``XI!${bs@p8FT7F|bhcSWJ#@30k#gx(_Idb!%jW#iC_qNzDj-~WhJnh9Z&JBXH zC}f5J9jVh+Xk0P6%GntvYP@ehy-uU28q%UF+BTij+7oA$X?*sJn@e!`r#;sQJA(z> zS&>P6H3nQ1;DkPJV(v7kLC;W)jx2LRd{WQ>c41_Jmd-26d~BIW_9}ND7!3S1H>mY> zDo>*ay%k#tkRYlt5+CUi3Pb4IjA!1z&!h3heL5zcjc>-e{h=?X+@sd1E;qcuymA^L z({Cz{Jc*lTn;gw}Bp zSuNwa>5a>j2S@6oOi5(caR*-oE{8)5oQ;?4iXLHR zQ^qx3`vMc`(lhzM^_XSAnJgq)&t$iVs`1NP@v2N(@zq2NVbG0=W-ssVTQI1D2^r;sVU zD3*1k(TX8E{laKMTPvk?XzZ!+me7l(`p z2@&D3N-7v(Y$;{s&8dw71qfBY(88MM=4klj+_2nisOFDrygi&v;S-39f95kPf+@6E zJv~4rrR-WRfiPSwit}-Xhwvu~iUx}x1$x`9!I_{#KU(aFY z@i|Q5w#&fl^&)N)+zE@kkv_jJUgo?m5u`mRli44f7f;4KRofqI7oo*hq;N(KHOyi< zVzJIf>3PIG<%wGvT7Jk>dhCn7Td2NP?O4W7+0&EAkIGmBEd3*dz7O9d__tTRm}+J)E=*_1fpfVFP0j{p$RRqXjy^GC;m}J2ku95M2>%Mv?)7 z8bynotgnV(%D$F z?4tPk)j%M2k#RO?puB4Vx3;4<%vWT`LO%L=#CD9QmwW_5 z!P#KWA!kaBojDr=QTZxk=Mt@#>A0eeTAm~XCC=lH!X;j-H63c7WSxt_@Lf~} z-ZDf+O2o2AR~e!d2-&(-oQ%71tr6D?FT<;Wm$vd^MJC>Ovo;?z^ix!VB;dpa{V7UcwZEm(syRcu^cO?*P3MAJvBndV&5*>^ z8Sx9oyBTG;X6L_~4di4yUSW%PZ?|&Iy8`w&VPy=%5g3l#ga?l645x2U&WCIggR;?iHbI^!UY@=YkNg(^vPdf-N189YA$qpB6|fA5 z;dSOPIv5_nKoJLtjk4kZx_2CM*LHbJd&0{#=6$=B?7`tXhD7}O4&F6WZ|r<&SSVg& z4`pW|_++rbV~O)=FOdpp>#%Ww?{QweE*A*7WVsbG-ghge1qt$OBO943e=B%^_-VzC zyr_#?g6=?G$9iRhyF@&9HjN(!GDZ=lErTEKBedMvQH&Mf>k)6%qM(CYy1PyZEkhqA zD2j{l1#uzJ0vzB4uwc35QAhSRk>5ER+4!ZK+_<=jxl~v{X?8lG$AvR~Oin%G^}qhQ zy3X>tJAUFLqsv-K`7T3sDifQ&oCB1KBtHhh^mIdb3O?lmh|~yPQCq{#TQr(0Y&`*? z8x%-8V5l`9?sn;Z>5h@NH?EN>1FT`8BUw-CDBVh3;vj6d>IwFimxkCYcUq++2A+3(ETT#927qDr9p0j?QlIq?9fJ<*ETNE|LG|KA`f5m} zWXGBtf_cJ2A5m%aQkg^+R_URVaUMT{SKtN_`Fr0;Q8IKYut#ew-)A{Lf`RaOSZNgR zyj5ZDF5=aIk*A#OSgx!)Vd%t#J2*^~#kc_z~RO&>=WPzeAj&}p<)fVW952S zy@69c>WiXitjqhBehn&YV)U0o2TOsLkYEZ9J<_NYTL^sc-FJ5JEd)kf_*QfcgYwm& zN5=e!Cx%^~OQOLjn%q1Fe)BAsdXQISmb_{m;eFERx=MgK(oZz+$bM; zFr=&z5>hW^mQ;0JmNj12md_9ua;xF4wY=PPrivS$?Xd7igHp1l^TptnSQ=whDb}iu z7BY#T@JI!)bjWj3{PF*Lp>@lQv|lw=+GjDmr@r{q#<`DM+D0uiUy@X@Mq}GA_9!}w}z{BEI#EeLnyRE^s8wSSLzm7^^*lYaamDdD_>oo z^JKflnGz46_A}3O(j?Wi)HAC$vc&*-PB3rC+@YV2t5KJHeBm5DxnysVs~!3&3t(b| zG(;F@KL+7?75V2@#cqY*wMy()hE^5?iFU{kdyqP)OSQ`$CzO$e&}%mF=%nOmKeW8i zDXC$F^E@ngF;SZGj5DQ|UM zBJZ6tMi*!e&IU_BHyF>5K}}xX$B-5SZe2V=t8dYDigoQG3Mr^0H>AlL+3?< zxYd;Y^9|}Ovj?_MFZ`bp&|{wd?Zb}Q06)UV*(N5$@H2KzUjY|O~`ps zAUu`qbVh)IJnVPke36s0Z#3b|Z@nczT=IRC;EBVD=;A!a`#wIlQ|TeP!j7@=c#FGy zPm|SjY=)jCqZ%?cipefrt{~zC<^_iO90Q((DppB3U!KI9k|$fA;5d>>vl#mZm)=*5 zz3JwIs~fP(^;sN?cu*GJ$W1}{XI=caVn&$o=cM}1H!t~uj&dawYp9Sd2xy=P7doX$ zB}<^3>3RFiV~}_kb&{T!px&tmaL%UF_;~{Hg)4@fbyvtke(@NfqhGuRA7wS3`NK$e z)m|?G)h;eaviX*8!!E4Of(RC}GjS0LqaX>glAB#!=CPNkVhxj4=>NEJRQjNb^a3kv zmR(EbRTha2K8nUIwgwEEON|AF@hq_W`>eVgRfteDgDEfDS7GKX}Xe5ce|3 zqiyrSU~-Z6z3l2l(2KL-VMv?P?uN#D3-_pIN!t$~4+cmcbj{nL;zNgkYZ9BDu6tf4 z@=pfkly4Ur_4G+GNs-yzC(m#i`~Zt`SKkbUyJ=VE9LQNiTK{Zb(z%WuSjdi|_N^gj3pHI`C&WsmRbZT1`K=CYolon0CG2L6&qT5} z%JuaQLo2jf3_1DG=x_<0F~sL3B(}|dmUggy5eh;y!D|EOz>Ij(9Ep)eVd$63@PT;a z5s3ClKb97QBF}vCE;rJX0e)=`W9!ae=M+;7*Cgg{q!A+^5crTsC4v#Tncna zyYs-ue8#yo^sL>#$Jcwdc3e3`gHz`8w2Y31M`P@EvYy48*$0f1>t%vHjnbV!Lwx~U zHtjp4=gr(3$xE8C%u>nN8?(>F>~Y-kXw}BDO02y z@FecYlst8}P!ygZBHuyOX@+(Bfct{ju9i_>Jwjh@vMHA~)z_9*%nD9QhnYUg`YbJT z__6ITTI`7VhAuoI)X5 zXU^U^azl!R-4)Na&z0}lfM0u)84GxXUJ8-`IWPrswZjn;Y*`Cz3~vhQEz7&k-fvBZ z5AnWvn@JCGYx5qPt+1&J#@i>ZGM%|$s92-(ZTh}F65oKin$v~KA#@u>V!d^aq1Rhy zj$8#W&xe~D@a6Q04Ob0S+(yvWH5$Q*RCUdESnnM;1?%7tRAK}S&_ zgFK*hROH_v9Z{m_wTV@Sif+9z=qfjSgCNC}b$9llF@4}u4%rdVo+UOi>`V@LkpqgO zyfauNzl^+f)&C+UKXNf+1mQ;4=_FE?`6P2`y-OK3aLQYS^m0XP=(2THzjyI8jPc#PF4r)9{bRA^8_(@Bkql%F!WIaGTOMW= z^a5y{ioe=WO#E??{myX|;(-sNTF+j}5Q99XU4xt!(V`Rg=FqU#YnHLJU1``|FK=Bas4|-a_@rZqHyBf10Ltg#NUH5thnAGr zIKl@Pd5{Oq=e`YVhoGEK=!;0HFM3iyl0C#>+(8iOHa++|W5f+R@`Pa;WhVJt~=6Z`E!5VJJc)H!`i)zp9fnuJz!&R`*IC>(l-F4dPLjb-)^L5I_404nFI`kCKqMd+h&)hzpSdnx182Z%BM zB|?8~k4j5c`X%;+*s0YH;sYw>6H7S-8n4cvI#5mxYsiOeW*Dw}(DCIkp2)G-=BKXmM#P`=4_PuR zxKgHcHn4$D?)b4%3DR(Q%K7M%0f;PfX5AdX*^a&5J;ev4QAim-;XS-qf<(((!0K#A z;JprcT-e6@Or0p3m#_FPD@zR>^sf)Er$fGm;vlU)1rfjEZ#{`u2M*=jxA!xz*5@Cz zSm!d#Fe6c?LYmTnz-1kcPmtiSEk+1GeesdF^FLN@l~?pdrr@YLZR2sLLYn8|h<=2N zqM@%FS7n9af<>8spH=A#&6 zAaI$YI1K*QlouzqKYyF)L+G@5wu$mI=2|)oO;;}XG0*mQ1<0jzv&MUek8{{ZPx)lp z#q(d0$4-Ip=l3SBStPK=mb2^E>>7Bp&B4NnEH}h)kgq=AVLoquLz6WZZE@6iX(vvv z$%~LS88j;#sV{cKiw%%oq8o7Ar&HIclT3=(20E+Ag~2Iyg$n&9CmuKj!M26bee}~W zrpI4CnKu2T6u^E%fW@=VW^iF|T+S3(n{P-vpC`4kFH zo6hy_Ri-?Kdc}8Cw4h5GY%q{6tk>Zq?ZKIK6cBtX zleOvL!-vzGH*fNA)0cnDkN1VV3_TYv?e$>TcCZb~vk%bVFR16AL3jYbLz$HvR_7yo zj)Yr=F4JjCJe{_TGng$CIB%Si>8*2WxLwVi61Oh}4O_R9>uO|Lhu&?bJdvH}vXbXk zJfJYY4-1;7&DUtn`jvDtV#!2Iz0%Cjvj4`JNp9s!UCYV1pIx{>KrKj~h=Om#oVO8A zna&fA`fpf0bUL9{t zpMCZjQz<;abhB~xNa4#4jM{@CcvKnd0i;tPc-#sJ<|RpGsA-h(kOM-aK+vIlG*+y^ z2<(P$7p4p}(%IXa5{JQh`rPYViq_Yq_GSZ6QU9udhAtPh{3N|$AzGv4?q)G;3YfI= zC=|HDmKKb%3K1lOC%o+0yRb1v#hD||Tdt$Lyz^(iNA5tlrSpX-m(BUr8@HR4|KJD6 zjv+mP9e9nbrTJRbSUDmuiK;@J&?qIZ;0CcZ)FDiytPSFR{C(}iyw z&0Bb(?$9GMO^?-+9)6lB(|$*og(T@wK}v(PecuG?wwcGl&8&FA*C*qOEGGhVWT6MZT2p0lg>~ zzg7vI=}#K21g|}4H^Dsa@-~vIkx~d+s(gO=xnO4CO1r_cJs1ENG`OJ@{S9M8=OUf? zVwafu;L%O^Hu#3`8un}5w>9~Au%X*aG7M?U1wE#9UY(8pdk021>5bgRxiS;FaFU3e z5-6K=E;99$xNJ)L7k2oXHljFs?JAU_m1Tdt5`WCsD&9ZB17Dxsyn43eQ+Z3v5-9IloRVT)s|r}g2)rskZ77Z6p2-`R!IjD@Z>FD1X$aSp%>cTPt$ZlM zlA{PbmoG~cAHmH}1_1HN1H{x9!llVXe+UB?kr%6UoQ2$G)6vqIgPIy<`l~)EEqW=+ zxe}FU=f1r|(RkNq+xS#1-ng*+3ce*WePT&F^^A*i|BI;Lvz+jT$dq`QpA3FlAA3+R z7QS^;xGraG-tWS<%tD+dw-)N?{*dVgNl$TT_wS3fR+PSLrsv;D?Cc zJbyMFKRKEnfAI+h{oVBJ*MB)ZU;E8;^CxT5mtXyC`ts+0GVQ!LlQ_#s8GTC zAWI`{McH3BBOOx!Fmj-O z(m2xi)D^Ep`G3#4$Lh z3XzG*{yvQ%mj6yDVCiv75(vK&8qVZ`b)Z`Xad8D$L4rVB z0q|FO+cwAqyNQv-1JuqUA-dV7b4`vKZhU@zdNLiqd_L{p-_1^N_xM`!8$Q1IcYpbx zruQdrrzc;1K0W^IEBcsQ$J${>qgvSzaJ(>;0dKVxLNemD6UVc5lN3m})cA)fymtO< zi~wmsmcQKYC}eP#VRt#9(=cPYB~_IK>@?P4hyvuSe)?M7TA3yR7eExP(w49E#+Nwx z4mu7vm_EJW!Iv-G2;)i`PFQtQgOj3{7Ztv|K1Hpd5&9V5FUFJW+pwqqhQh+by1F^-lgF#!z2U(Qb;4piTDVS zHR-+w7Hk1)`pJh*;j4HdND^te<03chZF$J(`cr4qXE8dB^oC~O0WHEZy|T>bpzg}M4ZkWH25w)ju7aX3i`6pV4#4tYAN7HK56I2SDlXY~TQ{!A z&DM!fNrk*nJpas)^NISdp^cm%rYNUfu?RTy|QQ zSpbk!T8+&lIST+_LfIDXhNV47j}Es?Xsdda9%HoTo0HsnzJBrDw12cWefq`c)7mdK zroZ6p$|rnu({+fhQu*WymJG5O{_2|BROe_hEL+^>U;3#Z=91!ld#jJJ%ev0$JcRNI1cif#nokXc)9q2QDwnV%-^M zS%fwv(%6(0ox&u7gHjsX3+dpmZaY1z5SA^^i82el$XofQXMw_97sC~We(Y_^JY>`0 z0BKp>00&#&(sX{@-3-rIHFa{uo*1-G){>*EsZ)I#G&f;hrsL$KsV$oOx7thADnGPy z-s#33%lyu39ErQ`TZzB>qHuo*({**d%lcMQm$RzWcu+6H=+KHE+u!|YV50i4%Zf*k z<>uF!@1PkAtT#S}_x5eA%vi}VjHI<|&h88Tc3oVC@Isn0*EO?PS>bxF&LwE;ua(0&-A z0b15`CMWYOOj^L}r#sDy~-6LVWvI*ce;t z2w$@jC{_g-4CMh=iWukgk{j0yEO`I}{f>NkcctKE1T?7PyQ|dF=G=AG!&A2(vpDCl z`NflcUO3mVJM|PJtZewB6=W`WLlZFOtLS+UY@Yae<=66Ag6Z=H%G;=gLH_F+(7-1K zk4luz!g=lhqOYV2PDmcWE$^gNM#}aBsTnUc7_7cf3`BA=Xezn_B}+p4Lw>sGxJDkK zwP^rGSknaVJgO6}(v<`9v(uB%)hRvYv&GxOwwXG2&fA54i_@y}SvLk$(=8;t6iILD z;@qGtItY{hMVh*B3x>SDp7m}4AN-5!hF!*eE^Nb_CXb;JktGkpmh~5X{z~VFLpyhHHXpD%P$__KWLOh_9=bn1;e1#!KFabG(k z-#wT1s7Y+}QRza~luDmSOkU)Loy^A<6ce|b;SYCo14nkvJ90lo$;Trss7m%MOY~E` z6pM!C-0N{jI%(;f?vL@8;}! zI)3K96ThMWo;KUXZcl!JhlfNj*+%viZ(Sa+7MCZX>r}AGmb2T;&2F)G;`%1*!8cD? zjl;u7revM>^<3|&jlC`1%52<)vx$Jq(Xq?P}1YjKC_Bcnje7R?d!N)ph_C(?P-cTZ3Gi zTePAGmf^3{*5TDFaksomMwYCQv-u|_lcDSk;+D4zFldRiroPk?0IrEswbJa4h>=}gk90r!1{tqr~u zKE2Hf6?f9qQP@A&&$9)$EiJjzNkXJ@2*N>6)hJ(;UpyAALuP=dLqTH8+qmT@>4q-f zaitEKjr?jO(<*na2inZ5qjaM424ojdYIV+UpAB>)-K$lK{Y_^e`-@PIUrO>WWfMJ4 zAiq8&-sL*hh^eSR=>gCNj>&megUc^hfgtZ^eZd zz}gPY3@NFbEc;4qSDd!$|H-9Zru8wtc-$L|N;eu=D7n-le({Pzr=X!Rd2N3E9>$zW zqc^WG*pD`*2P`qhQE@d~ZXc^cWUd$(L=;2jl!Bx4`FL$UFJUM^ z1;CHWWDI!3m0zw~S&hx_YpR|@6otH$C$-@OxNFcYuVFPdG`{6E5*)#k;!o0=GI`x{ zTEyjr-aWvVgOv5U>5?9%56}(|4q^yTxurj0I|2u-9X=54DhcWG8?hNH_h3hx> zvRSAvC0a-9Z+pX5p#J;1`gj2^Qy*aR4fM4w`>phr(U!0{Ca!vdzUYC|I))@Q(Z=I^ z@GO=jRR;sy!6L&2=@u5DFfO-t(K|+G?L7vTS4?kM8n}+fa^r^%U}}q3<=0%sCK3do z0eR;K96)%*SCd_d=*<#0C>RY0q|z8R6yO{IGciI<*K{7{gE4B}UTM5F;_-Y`9E`R> zCPTbG3Lq`YX^fPOWy1|-1EP>BZKWh)vUo7%yvqc?c*oIjjYEM$@{Ci#6+z27DFt0B zDc~r4%^B)ZYX~m6<8Z#!!9f`3z4sXWT+b~@>+js-+JW(`1~iQKE;7)_C^zTG(*bCq zbOvJS(8kohDD~j4I#zktdQZ~nU5hO%pO?<{5pS}xBU{ZCGHmkT)r1Nw zIR%Qu4}nZkwfr}fti4#t%=Be@Brn;w+q2=iz53dC*>+y1LfgSpe&8~3lOjub2!~8; zn|{Hk?q-~Ny39*JPOJE4XQs7)P2H4LzCGw$g~7b0qf$QpE3XE>Oif50_#rrA_3&Xig1`r<9F`jrkRO!yx;N7i#SX@PN7@`>Dm6nkn&B?S_- zvmP%;96hT`(xjt~5LCr({fg7}nRQB=6Piojm)wC};e9*%Aly3B58F&X?6Kwb+8#EH zSM1kVeX;?-%_Vop82hyg-evJ+9^TNz8%sGWjS)uAXi@asL5;UKV~63DKBj&1b8Sv> z;?AMRJ3RtO{n-C9(hRp*uWT|Y@+{8+$rcfLtn7>Qojz$ER@+qo|u9?KpHx$D}iwJ1r^OufD z`FSbUkZsF!C1VQG_P1*p@(|ym^1Cu^TtFpc;1OM2@w+I@)$R5uD1VoD>bxsf9~w>u z^B;KIWi)5-YE+#%*<)$pTlZ2qK2EHc=Cqd2Ed0>4x2yGK`qH(=ZoM8qMx$_@*RT!W z={+czem68sr{9G!e}-8Um;aBTYcxL|4_OHi9a4`5kG8c{#28y|1Y7k--uY1$Rd);> z@I_zgSDx|EC(5`k2o@LE150u(H1LGvyFt*v6D^ojj;?%g9zKo_Z704fY>`gl6^c%e zjDzLiy|?2a?(#ulm@~jgZ{WQ8TK(iaIE%z@uy>`O!!E^R);ME4!4^u$3Yi!?SH7;{ z#b0N?ZQNLFgZ4I#H$a_juSHt6_igHE1aIgOMe6+(}z|^KR1+E_{DhFryNNi z#W(MN{`qvq3p`nB!vuMD#MAp`RN7c)zI*Edqt+8fCcJRAiCx1eU-I!{-%ND}mD9`P z>E<1CN6d>uJDtFaYAQq((AZpH#NDV$p=-o7PCaKV9Z?Qr%B4{yT19eEJ%9DEq}YgX zY6t|XLMvUDUE*n&Wqh||bY7SD8rusI2s%nb-O>}O4LUpr$d^`f^F*@qZ#hs}#a{co zTxLmId)O{#J36{Qy}3c=tdLL+*9>mT#Jb!^M#T?L(!o*6iX2GSLw8^(9?2wRAR(_F zczCVM>W)C8CB>t?=aVc~Ldhfh@D^105qI(3Y49$R9LnK#0DKWF>*Z~zCC=12$_U$? ze}UwK(`DO4HWci7Qy=)UHh3h89($Dbuxz$&z?!Q|%H$p&Ocu{umdBp3eAYWeJ#h!o ztirH-WO`dCC2UEH*UNA>ujQCF1n|f5mpDA{a?A9_(PAc&q?N{w_yMB4oPUy{I zjTD-O4_NhBIn4$fK+Dd@q5^Rjei2mgI{ns071vmEXE;pQxf|AO`{~CuY@8q0 zzQU$qokn#4GoS5uH#MwSO<*tx@}GeNSz*+D&ZO*Oz+I;3-Ig2r8K^6=2F}4GvL)G8 zSoWZv^L9U~00}F^h^Z)TlRj?g;8NZS3pqUa?8)@zhiB92^XCu;lI+UG-0tqdw7vUy z+PwFOC$?p^ZSsRrpXeH%wV{aR&?Y619|=%#No>~#;!h5vGhXR_7p^T0$VX48VH{O^x!7E zp~}|u2;iwR(<$UH2d>35)MzB_Z-e#>*^C2Y|q+0`bYE%k^|0{kaeLJY(? zr48*~h%a|Ke)V3QZ}7y`+2c251T^BdQ3gNowyqfq|GPrd+cXKUz8i|}lC#%$`8Msx zf@PQb{vq5D_=g#3=ex-((NrG{?zCGOZ#wqM@ApbgM8 zR=oLHM-2b^KFBcKKHJ;yAtna-(mP|k=nEHTXuMgB!4&ZgQ=M55z*L4W+SN1)w8j2l zq)FRASGM-<@oivtH!OOuwT&8i>b`UZnh%7%BgWy2C#_))tPU2o3}-dQU%oR|gkkXM z<^#)YM}1VA>__@$VkQ9&)$Q>Y3srH zbhh!1uh5@PC#*nO$2e`_VQ;W{#qDFADtXWMGS5#~C(da1{tN@p(!z5F2ODm*Xc5n4 zl-PbaLauF~cmNR1xyqH1518Z=o0fE#>5d@^(@JqFT>*9(&yJ7a>M0Xt z(6^=HDZ+w+`n-ZL<-uR`WKwcSpVO*H{R(e87D)KlCcX_=9*>yA=_zYcN$EKyN zz}9yFp?g8wvMq1b4`8>g_&U$3yskP(A9Z*#!vLgL-Q^-r0L=G6vTgHraD zVmjhQiCu0<-o84;i#dVd)9LCh^Wqq9jgrRc+I5U$M6%H(91TK2IQYw#plQT39Qk$} z6-VN2xN&2W&LI853DccQW$bAP)6F+6_y)Y?44qb2A6_?1a3J2hp>cyKGzwA%H6_z< zYMC9uPtWB^xV+*WxD>D+FrrF&dFuy}Lq6P#A%DN-J|4)*dp-uw80}Gy>vFeA&x1~( zFgB@|wx!a9YaeH&P$XfQT#8Yo75&(6 z1=J-uKat(y9=l637+p>*t>sRU!;UY*|4B$wYZsC0{qJEn9W1)Gyn=j5jJ_ci& z`L?Tnx5BtIzuQW9lQl`oOTN^ptzon@KDn!7(2KyrOEkt3ImBnVtuduXV%o?w`*e)0 zFs751>!EAH2Agzy4xIjo)r3FOrI)apI?%5K_nUFS881AU*AT^^@uIpM8lDW??o?Y|#bHIJxgI+|T}YbNc>QEM8!1?)6Px zpwa7hjXL#RU!CEw?Mz?&@{dCQ>D$-CZm`sW{ixpl@Mb!D!-H4gCCQ;S<-p5a#c#kJ|3pOf)pdX!~cm%vLQ0?$v%hJ;GD<2PItlXd~Bjw-k6NP&eu zAy(5yG$3hu-OkzCxt$+(HG~g7eX)trEyhGRYNWBmK(nDZS2Uva*&%Aq*UPFioy38W z{7^)?>;rl`a9wk3i)7#|We2>?qv*wB9m3RaMM0FhOifx&3U8OIE9p>v4LD$kObY%5 zp?%%4(4IGaRmxP)f+2LsuW(j0lQQt$s@wblVC>zJZ))yc?qxc~rJlB#4v0ovPu&O6 z@?d(?)v{{Zq^I*dHwa@}w(fe}={fl?{0YA+ZhsWp(25x{5`q@R+-WMi$Q)c>s8Iwaz)fkqmoWf<%s zQ*oFsp!(q|6c=LnP%wrj6=BQ3wZ;;`P4+(d*@9DA7a4Iz;k_$!1B)z4Da%ykW1+@C&kFFf@JM;8o{T8}{yXfW}WLdR=(l<(6@u2db*5`e+jK`p*{16v&_> zdFJOR#k@<4b=JWE?jXtF6~4Wdi)X>j8tFEUWmN#ti&I$3kd=B(6PLG+8WdxL@caS> zfBun>LxL+a*Irgq<+nU$_))HSsDZ@tL4WJl`XGw53?K!NwB}cc#v2+2OwnlWDhOxj zc$KqCYZ(?b(qB+gVJ9x~Dt#u0Ea6hd#3H$3^I9L#FWW+yX2lc(szyOMbbEe`Hc-qo z&%ByAf;1b<3yFiUkKwvo{$p~y3lq-3{QuSU-6$$4&QyRg9>~ug~w#fC?1Dvr#r$oFnW(p4bVEqTB}aan+{V}*G0A0vkcPN zgtyZTjx28_&7t*>kkY~=6U7@HuH%##`Bk2R{1@Iz5$4Cjip~Xuv@DCx=XH`_ep2no zYw8!}%ReBUk<{wXxi3VF|M1#$d=@QRnfqDv`jvZ~}RID^wQpbnG*brFUURTxl z&W&5eW}P;eI8CsR`6VX}?9maQgv3j}ddE`g^JC_x-$Lst_%Z4le(kqD6|3?<#v#2N zW@upfbLC!EqU_#Gho3ya&aqMtFT0$1?jSJe(!I@H+~oyJs#(H%Mg0biv2fQsIOVzL zw0FqYrtWb^jzQOmZ@Pkpl{BZ=lmo$IL0=Su>@wb#QOG&xTi9*L>vo#jmH=&;E)xG{0wLIi;~7iivkO zBXZ9PzgEAu&sPh_EvOzit&z%Y_)@wu+-*2YX~SPJDWfXb2(8Rs+R4nTG9}PHH-A~K zudB|gyVE+J;k&xBGwA~UsPG*^$H?y-DQH}`;KoJKTDMmYoGNYaE3QG;h@Yci*3)+= z8Vox^i>}4lJBIEoaLRhHYZJ66_WnB9>Er&(^HppbCkUq6((9%-VGz{0#P+j^hH{uF+o%~%NP~k z>ekYTw*hZjY?qdgH55(7L&J1>Q_#9uZPomDZe1_SN?Mocx;nq(Dn01G#Vk4SNKTy$ z-uu#2lhiwLDT_cl5K*y)&M73Hy~Kb56Zu3hs=hd0r1zlaYO`$Crcu|>TISZ#l@fbO zJsvG<>y;+Uv`)t3%>Xj!6{6vSMXFc9rM-IJ*Lc#}E2n|sD0BQSv|vP@j#;$v?(8+Y z`7xcryX04IpYxFM88#V1&buy|I>v_GxOe!a7Ty(P_CpY5!0>Bf(CVlFuhwiwhsryY;14;`O`cV#gp^1YTJBQ@RH2;togoS8U!DDT4!!(m)DLReK8d* zUD=zC?!nmE%jwNG|C!wi|Au+PH^_wt0*p{Tsolnd-`m?^7KRs8?y&(Dw-Bz~v_YdK z{P;I6(qJ}$jaj2_%`?hn!IiP@hF&(j!*;qt_b)-Rsl$UG z$(nO3si|y^8tW)75W(`*VdRyDwez4<<;kFQD3=eBTp!*FZ0CqqWO*C9Pz9fK=pkwN zHRctH&Z1TDuDj|NuSrRT9^u+JSiY}2&FkPwX8n*fhr%~%DWt#`o@Lp>p*)97r7VbQ z0G<&pPUd<^yLC?4_PV+=8&~L99_zfx%@sektApYazIa;k(fVM$p11DhE(uwiu8dkv ztv9B38Dm3VH%{Y^=UH~eYvXJjmgysi=bs-*Pxbr^o&zp^P8zqe=zghuiZ1W&dJ`tK5*hj{(oCVCi>@385fdp2#dy3YQjhx-o0eR}*Y&;Fi4Jl{FE zVm02)3G`dHbKp!Z^McPBt5dS21u54&)AM!v80TTYHRM;M?Xt{zXODLbkV&RBl{Ix~ z%;n7o<_>Jx1BwUbrJu+FzVzg`u&cWVyp`>jft+V2O|Scc-C|F9zIf?$4^}xZ7lC_o z9l!mOHQOiG-%rokg7eWI{$hIgz4AAk(pfz z*Leba%G1#^p5*FzN2GKLg|*9V#6F()K2t3ceZ?9~m55(Fd4!9gb3uZNl56rxsYd?H zUNy9N!WvYlE>jAZI!ZyTfux5P`9O}eC}3w!D=8ok?W6lc)jvoQWj!}lnTChb|=k*02QQi_TjQYW8|uoJZRPB zl{P$J(!E}ZrnPLOS;k-+B$Bt9RuQ2rX{5p$=avfoWaznLv~^IBcLqY^;Hr9K>^0i_ z1;6@UlqSt@%qA}tST}WGOxM_GZjHHTapNAbYah#UdE0V>eNP11~gm+nHCa@up3#uXwlRLMQ12r2sD8H3pT~iM^B@q)|F15DmRayPMS=Cd!~ zUQF+Pc*{CRUaJS`1z!WdKBD3)cK2e7M$CCC(!^}R*fvXboHDt8{{gQq`{pJiVw4_S z-c}&&bV3`#M&;Uu;-uz)fgxw42PEf$7-Gcg6a}cIgnsm)ZufjRh(H0J|3*2BL^piU z!HFVB$aQi7$Upfgp(7p1S+kt80*?YwG&q1$;et(c98pk4PI9V1ssVyg9q?3OBjkzo z#VHRckgdzOFzntUakGYTpz&Ng&&r1@6yqHDZ3bAHss=F#+rX1>x+>2bP*Qw=G`f|B z22U1YHWtXH&*g6!I(?Z|=SWkYWiUdNpJnMV`C+k{+xA9bgPP1H}o8$E@ zT+owz+o0QZ&}DkV+CC|t-}+HMOb;CA{-tsJrJ>xYte(xF+2V@#SGsyen|P+)_(zKb?xYA`l0xTr=;YJLhFIPj>B|5R$XOtC3kzRdUyuf;p9U3&+(qbDa zXZy0}fKtAlx`Iznv|JeQr^*EZ=PTUh!CQw93jOY-9SH@JB%TuTuvv?o=;bw zemQOOF!Ra>srE@7Fr7B?&)A`LYn`{TpM09-*3bXu*YtU80Y?0sS&#QGUSn^W$vDKQ zYcFu8Qzb4;Moc<-{Vac}$Hba-?$-GA_a3HkNu)NNFm z(+@1lo=sn1O`+$3oDFF@jOy9+iV8sZ2hP?YbR(-=Hgw(MvGmawVW_}E&(=Ku4Dn8L z#yRzwYGWou!|IwMobaRVHxr&*zbdfs^Rz<>s{+-@^3i3}D3q*dj`ajfs+l#p>ow+Z zyWLH0lYYi0?0){mXN;yd)8G8vv*|a_Uf?MpXQrI|kcPnrz`hjV`usKsPJKl|r3PO5 zWt{MmQn!DUiy_Moi6tW`U0~3cPA1?8tLtJ?KKp2#gZVC!c+R_(`r$>xbv+$_2)RnJ zOv$?>ZPOJ)C3|rcOfglQ4+evVa$Uyc0vHt(oH#ZxTG+7YTJ)AQ4Y#X>&Uhf@hfT6V z2)*0g<)aaJ?HazSUp=)0)8Wur4YV(qxHpjcJ}6I}E6P0Mke)%)?<0@!KB&JNE$dn4 zrC(W9>xEUeE`Tt5s-t&07WS=WkS2L@0Cp*G24d(n&LE)tDbRd{hmmH6c@BIA>9}EQ zW#!a|`5jVME`SU|Jz8YypL96zL5oLS3sjZl!^NrB8D*y*pjSA~bT~665!1rtFoof| zY~l;N^Yiz3=NNVS;e;K$y5a#RgBkvO-q>^lELXc+Uo(e(&73tx^^%#3Grk*q{g4+M zneV>h&RL!mtIn$rE8UNLhv$fozW8!_&pR`3zr`rC{q_a}#3f4_PoBT#n(uTSOY(p!w60)(1W5Z{p z9}2Iam2?Z-hVoD#DwH0#hladYV<@OktdOjK zrBO$bOth-fEKdoJkfw2r+hOTSrk*(&s*wDC!o%Tz{a^o!>0kZnKcBYXNm}cJ3$`9 z?Eq?Csyw+eLRemVzUu6Su&*1wQh)#7Zj*ly9_R>lp;3XaXlXivx5*H$h0$pp+eY(9 zP>JHuQ`EZ_k6vO{Fr+@Z1mC=2nYA-r$5DDzu*DtF}8FkM*byVMSF1i z$#lpv?n_?s(FVJ#=+OhFR_-57Kd?63dH5~n=r`_7|MIEp6iYZZAr(Q7w;1k7m^GDt z*#b{ueb2qG*?|^!e}h|wBOXvrlTUNMfgtu3XQ0}~``*8Ie>!As`8}5CTyHQUvCo7{ z3mr{tyaZw!tCr5y=%=g|vL1|{jC1Gi3sSd0cr*N|06qZln}^xgnU13&w81DHKJoy? zR#sm8WrQ9LXkIsD;-pu-o!5$Cy&f5LqZ}#^b%3L8b)}e~$WTD<9O9)x3t%zQWvUBI z*;+#VTSuOI7~Vhr$yd|=@TdP``fq;uPo{tN^FNsWt6%FeMAHu$#L z!O$rc>yGCEO>M-DWjzm@c=GKnn?c_Ch+Mn|)+6*M9%rlEjH=b!&=ne2ds8xB1^VZ+O9qo6-@P|GN9^-bhw|7eJ(~)-IF&D_;ZV62Q|G-E72%BU8-TO zJ;kkriuu>k^1~+fVS~6+mX#Rxv+zEH#}Y*brDH`dwOUQ&Zdng$5tj(e3tRai#j5SE z>if|7R9+bkkXSsBNO}4RtM3jT|75y%|7Q%+Jn)3%b>^bixKr?9rmwl*_zEUAGK0QG z+y|!^R(Cr*c>G|xcesmF#hP!7Z@h5m&<4;@JU*; z)Wsr~y9l^$Ih*hK67KG`#Xpwz5wyQEX<5hb1YBe`ohCI6;>mm{%r>80#5TK?>b1hn z|0)(o=4@#P4U@WTFkQLEI5DMijbl-Fgnac!Z=AVtS6|tIP1lp9NS4^rtfcWnH97=l zs3ZBa>LSisqBkVXX+I{L=2;xJuCc*$+d58TB_-V-tBGSkX4Os_gHo-67U&ujA0^oaNyzJcf4VOcl)n)#CDDS={S#1Jt%dS}`{}NQT0=kDS z%3UjRRz{I|;-V=lTC7J4hT~au$}<7DI`M*2@kI!Aee0L>Eu2}UaOpcPtOwsaV0#PN z?u=(umptHH_qBVbGuC*mSbl~{q5BdD$CbrKd}I^W{b# za$daSZO~77rT_i`Z)xsNzxd@p$}9P=o_(M8v7aCRaLg3T^|a3(Dc7!e8PCHGSz@@y z^vf}C%wMB#jGKS<^a^X@?e{g-e~tN>YmDm+j9_J1`be5gk?t3J{5ZhYrXvG{F;BdI zgd(pqS9EpC?V%MOO-BceK5Wgo#japC>%Mu!2+qotc;F6k1P!HmdSt!H~a^0k*So=SHLMQ){EoQ&qQ%`JM%$?5O^pnp% z=Sx0E(>K5Ue)_v_S?0umf>JoFxZNM)*)JgO~7B@C{pWxV@b;uH-WWaP7JEfgz-%9FW?nq*Kc2X26x|El6)NlNhZttCLGbqe<+QU8V;9WfFbd!2;|~uHA7vE^Q}Q(E z>nvQa*ISj428fDnh#}xitI!BNg1cNxMaa&E7=K4@M`Rl}u)zXt;;=DjBoB@0su9gM zO+#04j4kIevKnm5a-BmQ{@LJ?IYJtKburf^tbhex<+^TT1)cdg05U=gZCw^aLAN;Z z>)Bg$;6s%23Aaq2?z4uJH?gjmUZHPKpJBwe81eu5SARQw_wDzr)Av?I`aBT7{3FZA zjSh0=eF5Tme6%|eWJ*LuC~W5 zp!!~Ow5|7!qYr-og1=J^)y+Zr8@!;9YFSm#BY4PJ#`W1ZyY4!8DP<}V0tRz&;w8a9lEiWv9R^hJF<$bVG;7J~NOPe52 z$_wT^DIIoPE0H#AiYHD2;1_P>hS3WwFzvMX5HoxMtC5aF(sHFuZCmBs2MNH}z#7^m zWtKpc?a&F{9hHLzlPrG*iUk_`_a9ID>|VIBd59N|srDnlEFsLZLl=Lz?p(6b z3nQNFFGb-ye+N-F)BT4J>Ny|I@y^}>+mW!sk5zu^ z#wN0Q_{n3otK~f!W;kpWSDyJ!&07rkdo~T+*!|+)J$3qIo#jFs6xhU2@8At;)P4JM zhsEPN?1SQ$oOh2t;nmIi?2p2Bj69yzv)tHzKW*P*2^F75-scYg;l0BcqD|)!c`|#$ z>-P~DQ!i1(D5K67MTFO9YW(Fg|#7moNgtj0Kv#7`Sl8>bChV#?*V zi^g!8Mx(ExQt=F}U@C8}iA~F&F$$6_z%7%;ud{JpIOa}B{bF`-TOBqi!3^<`XK-+F z*GCQb9-ZKj(e|P8M%Hfb4kwYr0b3kAdiZ$y+u!`%^qX(KMpir&fvDxqc=2%H%Z=mR zHBvdte{NY}VU`aiQ~#hNMq8RWGT4o_DY>l5NpGil9(Z7lgU>`lUoX>sS9%JKa(&+M zvc66;o_V3}IoM3;+$;IsrlskuGHGp2DMHAPlBvJoRRb3M1gz4!g!O57=C&78Xeh7J z`pYXN9XNGbk6ii@R17*54&#r8aNb^Q+EZLs#&38ThD|uj`#7zpo(WOa6V~>D&jNF@)y(TnwY_^l18{ z4=nXs<*p9-c2KY?k4&k8clN$RL#ioy$8YXlhMc6*worEdg=)&h<|H;n{Kh5OB={qa zahRQUpbz6aYZ z(ZdH1$Nq;4AA?w#F?48;DbB8Slg0H8#Y;b7U%o@l_Kd<({ zaHHJu!ZUK$h^#c?aSyNAM$X8rGN1%CAheQ|@J#n;!|l=^uM-e(jo7OOQ|SFb#ztI* zZqz8o80A%(mB&?hETdvbtG9_h6LxvML5w-X9p$M=o^22x{$%AJOshO%E=-mG?%B7~tJg2dtJ}Qd3wUx}*nh>#SeZs4C5k%O5l*P2QKxay zYq>fX$1=?6gJxxsGDEhW8}7<%iNo{8^D(%_*|>hJ?A`QSSM{r`!N)40>h`*5SnwL! ztK42?d6oFwu zpFHG+GWj%P=D$x&8*K^R@RpwisyhAP*LpiN?#OH;%A<~hD^Wa;GlU*QucBKTJsk$& zTqej}Wem5^w{)JoqpZ7NQFeXRE@uIpd|%32@Cikc&yk4)rDs$SrP1X)xvkK-FTi9-FAO3ewZ)lur)_%u$^Tl+Hc@Dl6c)_MC=TvrX zI$zkiW*+F;$EsAK2Yz|+8q62dJ>K0vU^8=GykyS-CiIy;@ri6+L8eiC2KrA$NVxwet5%Uewi^q>FvpH08~ zr~f2;mFEvWG{CQO>~Y8Oi=TeQ>$N-62_GDADV8rsNzVp~W#_nN#mc1y9DD}rm7~z5 z!Vg-MQ>P^c&bULL8!JykWCP=!W_rUd`EMM5U)*Jc6Hnv1Tkd1&t2EnS5yT^ti?G7o zbrgh9&GKBv#74=v=?#-)^}|CTmEcZj8JS#AD;T||3)_V@w`_T*7&LX9N*aH36qpPU z!9VD2Lb}edxuP$POJ4D1yU9R+LbHaYFg1c7j|;WX;^=bd7WC)gBz>ryBXl5oppEm~ zsU`X{`fBjOoOg+>E5^!5{p|K%=Jolq%@oY)TCDP1M>RoOBQo{6+edjy|H^m|US>H8 zEWQrl0YQ=wRu**7_w3IOM#+JG4fyuXBUasEklAMY;*!0@-~B+dGGMWHcV3CtYAZMn zZH>l%@6heKd6ScuCH>B3CJ!*?C$CLoc)5m!6EOR`5!|sVkpZ!lyz4h)OboO1Z$lFV7ntslD$YVaOcH$@2@cF$>@HVXGyj=`$W0t~}@}k`Q zIsaRuwuZVIV!r)i1oIYbR#50uk$PUv=@oD9R5DOSVd`NL9zN4FG2rsl4F(q~g|Mw0 zxo&|-(VaY%&Ed86q2LD`@Yme>*pBjor1I&z(P|>?{Qq002M$Nkle$+~^B-I{V^NZpUc+mo)w{gQ}x;zWU=^ zT;OufHS^$fC`gd0>R?_Cnwn3IhxuNs8>57!=8l((@zb3w{FBxlvGFZof8X=px2$lt z!)UkLiMhH9+eMcc8fM9}g>93f$-!%sh^~;Ml~7V59LEx;04n#Vt6z0-Fm$t&DtnuQ^CHoX1B}Op zcde17Os0!jI?8j9OgS+n?KZKKThy|eWSuFNe17s2+xWvP9%%B~zEjWc28)cK0E5oQ z9N4Gj?DQ4qhs>2fh6Z0Ib0Eat;mDqxV89=K`9D9^Kqx~Ec09$Honl-T{KNEMIC-ea zd;Ctu`zfF`&oL%6C$G<6PLJ`{zu@cnjvOSQ-=| zw&1D;gszmSu#l182Jukv1RFquUhrkOK@;58<5O|tRw5g(N>LwY{w%%Y zcoPVt6-OgC=VuO29H`YjZ~;%q}lIZsOqbnRD!iZ&C7gD=+lCN>97xK?}KW5|6&;OUFdW%lDXGsp$h8C5D+a zrXs|cvYS_JQey)#C$yV^wtIKr!)*4=VctHYBIur zZ&m^@J5R=_*0)_z>L@mbJR{$t(J`WFkhDoPZawVa9Gbt;*Pb zD%0|a@m68LQys4qu@&-mj64E2V8o^3MqV0ljGkV4wLM0h%Ex)hfD35YWW|ZoOfTOs z67wwL0gd>JuYSs%3=b-JL(6F`r?56yYUJ8+zmWY91HQwGl^3txOy9j^{~F%z%IM6X z@t$cE`IpvoL@HT!f+fE>A00%pTd7U&@^&VVzFwB^yiOCt?-PXY@b{IqjtT=;(r`52s7kz^HveXLp85phUtFk1;=&=l_;cP?BXe~i z=cGA3s8O4z66vs^g}jQZESH6lRL{j%haO911!fQ$@B%D6f%?c#;~hAIE4amJ9lof< zbE{hhTt}+(LjN9W9{y?Zva(ar@w>QFmctxw8LSqQ7%dM;1ig{NPKAqiZC`6{Ab z$*LjjgO<&rh0!O2Mu55SfF3x~h9s4}qb$a{wv^TLVhTySa)mu&3grfe=^YN~2G9Er zStYi{zENEAVhyy!fJ-|w6<~21`3BE>`@sEAd>G6}ac=kqruocjoUyy$`x9m;&bZS? z7Duc~ag#fzrT5st$~$yFr{=@WU8Zhyp0i~J1Iq?*8wa2N+oxMB9lX@IQY`z-X5@49 zqahFg6jBT$dxNLPnTyQVxm{S_+K=~lg8|vxe9K%e3k-LUr+24cetkn04 zIh`6^VGCtlKG-PFn;M)R8B-)S@T!q(zF6rie`KBxQ)i{bDvtQ|0#vlKF;%1C?hZsT zQPcr^@F$@%Y-E+E>(-!~oixs+vpY-%F0Y}p4~>4#EkjX1YJn7KRO$Aw>J~;5ufn1w zJQQIxrUQKY?7MuQ?;rpCkETx^@R42M_Bh`Bzz%4ou84|~&5PVMt~(xexDJ;LaUO6ae2JJf8Pgc|V1ZNRLn$`k#LkZMML z)w#m=JBodfRb|zJyJ5wnIm)FhX`YP_A&bGpP;3BIJ&hRo@d&_wT zqaMIgC#Z@B>*CHK2Aqw%9Dum?P@GO(+Ws2&=rd_LT?Y9vv@ROg9Y-ytZ2f7z%RZE| zAP((_>BbSA6Sab)H3hst*_IM zc}D0aTWfqW=>0L@(|k@j7&&LZDfgiAyO`bb9^{qLr&+QHTSv zQLi1$TSnuYlO8(AY^JdR^91e((AG=O=c zCsb@bb+|>d2HZW1tP`_Iy_D8|?63-Nix+hCpqW0|;C1;=zND}6cKQi-(&um9Vhec} zW}D5but(S2Vc)RKdJ8XnYY&@>M}Ea3^IaZ)K7S%vc7K3%7?XQwS1DBG8kiI^}_5HFJ`g{vW|Q`m{Y%0tZT zLdeLozJ@2h#RrZ#Hm{yd)7cN1ZgD%x^GRi7B?SxEeSqgO8jr$N@`^#Fp?xr7T@D#8BhN50+Y3SFhrVEcgO!tFg#@{}9KQ}~3m3(5fvDn^uiG~3((ghgtW*J!C2 zL?$Gy(oJ(YWYtx-y)~eC8)^L%4jvU-*i<9#(gceWo4J9Ptx8E~&o@y5BO^+6{U zQd=rS&NQJ$pbfYsLI?ShOuE;W@GhqAEQFDX3PnHHz@>dUgLu?5QdVUYLZPU*NV)?J zfcRQIBB}PT^g=4mI!H~DFdZ7+>m>VA;HE&Jr3ya3To+w5Zmnizz@`i@4 ztMQBRw*H#qUVY?PBbz%;^5UHi`{4H=GlfEWWJBS(zj5Ae`mxwFVdFV#Bj~HCeBiQy zgo%97$((yVj_`mSm4&qF7^a`gz#`nfDk(&sW@v2Ee<<%|n#v#QAuszIZLkaA77sCr zF*%raUb5M~nI3)e1lrc7cWe=R!L-QDdj}(2S7^D}WCN=`?zUYLs5eW;-Db{wgJs#T zxr4r7#vn_9dG6&4L|bfNx5EpR>-7C=ymlXeG9{l?DfUG@@=eQcAO5SSSKJEtlvT^G z0l(ljTp$gY9eKmipL7juga?tCA7=r(w+U;^=WJ~sPdiMbtY3VK7ygD%t{p^(@7W=5 z7vtfkEPhGax3IFjXc%c5NUyv+iV~)>wox?BK9EzU)gjG6EodMBGQVA4Nm+T_mg`V` z(wmM_B0ct+7t`adI#h?0i4s&=yeN%tl%$MsD@hsll(J-36&&TA3m@{5*5#zX&n+|? z_kqEDmCd`HH^;9Ty*H*m{DYrPk6C@PgJ*ruc`;<^#~<9?(FeWmC2_zy@m*y4%{Sjp z&$xy2r2{wQrve(-J0;4=|7bgvNm-XcMhMg!>43uEAe<;2 zIf<*ZoHdMP=3sqZR9tm8;HcNS$I->^UUz!Og{QApc&rT03ZHe3zp7C}I092;O;0Lm zo+aWeYGo2Z9097!`8?TOpdl-<@OTa)qoy}slp)P22ygrQHS>NTs8JWTJo`a4*F{5+ zS52ed*5xG5^#DiFK&Nc+v(#VVgR=`RV(YhNcf8C_f*?{?WlEZzR>|D~*E_rnsFT#X zzM{}NtFJBNuBOwhOP=%Wi*w5tuMJ5Io(yI=9XJP^x|l&=IBK(=Cx6JGBtgmuR5I6t zuJqs@+TEZEI7JiGFR9b77E!X9x~?EWWyiHG4Pj`BH6y7jQ#I`)8vnm#Ay-bVjaEqoFu3Y?Nol5?I z^`l>W_5_%X>2JRNc6!0O(n~&Zx6Qn|x8!yPD9^mOgO_r&9`)3^tx;9kY%M8W|HF7ZjgB6Rv9=|@kOu#Kl;aTZ>ivEdSr zbdd%s^%t$eb}%pUOIl^fWBx2N=x*}oBr@HS7OL+dj@E4?o7{>sA#As%?8y9z~PC0P0qzz*{2v~%R*wx4+|?e?if(|&+@ znP8cc!B~QbZaeTsp48Wr3CDj0Vs)&p(X}?-xjUdQ*`J`v!>~Lr1dHF)p#=CF^2$ex zNw3&J)Mo+MCD>YLcES1Y%!fngd+wb5u=_qc3_f8ma5euO&jByk#V}43U61<1Tek6gN~qm60Am-9}Y>6@LSfBn=H zji(<5*z#7J;F?aEiGcJD@WQ>dQ$=!3WTD;tHI9IA`O^s%y_Bf$HSv>T%YONnx^~2``sza>`cr#fXQ-k!Pn%Cnvu< zU|*+wp zSFzQv^6J#VZ)IA>vyMHlT9Qg;aNjB;3zaU+?+QgvLG<~@%Sr^i!-E9*7n(XAG=8iu zNmFe?cZ&NHG-ONdGcj`7phL-lhmbKXqW)JgaCnku#4DlT^epE$=+$i>eAKDXA^fVc6kcRJ)# z8Aw9Th_R2f)3)>2yxM-nx^ee?x?!EScg8z@O^20ZXRI#Cz~sD%i$HL8{aCV|w@%uI zb`k^rmi_Ah_o@9J_!H7;P&fN_N-DK7x2l=yMETe2NvwBlCY^qg=A<$Nc$HcrKE#N;M%kM%=Qu*i2Ia%$Pc_^KWI` zx%d#K>JA&S5_XC(VFMq!7c_FZh%b?(=D-QRpgGl0VTrCP?Q@OKoDT-eWo}&3 z9GK|`>bpk3JnL?q3XVZr(bqJ4HU7kh(-JyEVg1-=0SV3`waQwmC^Eb8EeZlGymX}h z;rYcIBvEgB2s9pd9FOrF$UEo879P|8I;HS6e_fl`b*Eegd`XWbr6IJ=^6zUBD63vu zUgt%bitkq7@@|?CrWHKpTpgkT$F})pd-o-Bwt-d%KU=vYA&+k(Xc9MB{IR*^@;C0KdpwqNP8QEpq--;z`1Y|g9K=LH3dgU zCj(eUBRp`oN%T#_ZRTqC_t=GNjfZW_gM$I30HN=5YJg&<57{YT~p0T>Lf= zhcFqnz^TDfa(ds+3wro6gzLMneA9_P8ye8iEZu#?^B&BmA*%}Npq$dT^@tLd<;_^& ziI+`U%@Ggf7)HH17j^b^rc^{N@(N8)6cGNF*YfJMc*45_64%a)z5L;2Zl%8X^wa6d z<4<_9&EV?#c<0cV6IZ{oTV6NJ zP^ZdrR3una9sX9DacJby6w4*$N9Yj2Y)Hg1%5jkBekvYi7lj98$)S;V9l!}HO!O0dRc8&-+47d| zbB=ySq+tA8-Vw}BN()82(#atn^E3aAE;n9T_K2rprJ=;A%0(`u$$xLRQT^1~Z->U2 zI?a+s4|SWm^@=s%{$1mcx}@7xUSv`|w1IG&HgcaQo=|E5v5h)V?sdY;cfes-rcJLr4>3!4#mqHE)+v&0-p6-I(u&e6#AjxvD& ztl)sX!FPB3=;kp80|FycO>xv~-dVMw@G(@gvX66d#=vXDWFsx-7*cOkdJCZ!&<}W^ z7(&tx)eu~!K}@HtUbqHJAW#?0qv2D~N(K?ZWikKKupwZan>KLg#DXNGaK$Na@(7WS zb@g>;1dm!#oinoGTr4WT{ON|f?9A<9UH<2%l=gX8>1ga4e7AhRr1R848V`uqFzPNL z{EYeVdpv*mt6%+U`Yr3n%XrgvcqL`PX}>6BQEa_AgD>k>P%3k#7IGOi%@mYE=r*ZN z0DuSvj*{D)Fz3xeF3?e5U1T7&`~tT*k>5!7`eUJKS?1kJlOF>l$>X>hX~lWx8+X1< zTxF7*^Kn+uz$e@XbORyn=5_TQTSIV*oDfmZzV5afzyE3z)*ce_zDtb8KZ^MXC_(V&(cQa7XD@?R_r9b>NhvEHoe9i z`JxXcuJORHeD-9&kq`dXsdqEW3bkt(WbI*QAJ|2d9a`P&Zyz^h@@>=}C8Fh2AC)K3`LgH?MI_otoB0y1&sSc6bx#_<(N= z!)9#q4Mx~Ijg8$0|K_PeQ~=(BIBnuXGMBMz`8gkNiMXaVh^|*T*A+U4LdY9OFai4! z;Ql?{Al;}^F~H})qM_4JG<+vTp}YQA|oTS zvNE$+ZKP92#8Q~>n1QQDxS@^I8huJzr4OrD45<1G&LU(&>!0tgKqA&-N)uCLbXF?nKR#yu8*Dc@PyE*H_po7nu}A|=n_lM>Lw8bA<4ms{=1g#H?;&kHXRA11 zj*Qt|ee@bA4hv*TW}ic?^t(@A-P_n=9e5fi(Q*YZ2*;_EjZB`)+{uwA-%$yydsGN( z4CAdV#LW-AkcNSgAvHh+oUlS-Vm|z0+TUZyk3df8MfiF_jDA;Gga__2a#j%4G_Dq` z;f%gBZQ}fSO|7(%Pa_0J;Grx%C^WP(XvjekC$4twH{a4VO~xfi09GOo!M7!)#1AEAP|6`U2eunY>yPtl70sqPL zw?FyE>94ta{g^k{pMCWe=q~alq&xTTPxpDL>GG$~zk0$p{a2Z$qEaPZZWe!%F(@@n zg(WI*b6BOWMxOZ8Gjb-~c$lQH5^4pD ztN4oRBAT`V5kfkDXaYy-Gdfa)Hr<7^a{4Rg7>EK39ZOofOykOs6z{EmZ|P0oEUk>R z=4_L=jIK0(P65g<@w&n*&TAJCtGI$K`23o4#xVOB+>o&q}}LSLFg8E>L(L$P%b;-(&kLexpwmW5P$s?}g{f@S^esBkwO6k^dB<{`a4JI{nR$ems5g#V^?W z^KkmLk3M2K6W`eU<~P-f=^sD+YRHP0^Lnu8k zop^3h3qAS?RK1YHPRw!(GQaZ=@pfFv6xz#Ydh1zGntxoCX8S5b7vt3!f=dYL;Sn9V zn=dcfDW(lnK~%W$n$~`)o&804vK0EHCOtgoM;R0^BMAK9_*#D9DygP8eG;|}x>7?L zq+6b(IWiO>S$v9)K^=64?-tTvC^V419H|!{@@Cr@$Wn$f#(oeL80yK@Wf|e4i;l#z zRCeh2D58jI7T~4$Q6|l?cvrM1dlCyGGbt46IYch3lV_I^vU`VEB0`Vtri?~Yb9uCD)fzH58W3HKd{U}sULH++0z;}2$hjiVKP z%Zk>;P^^L6!^XE6so!7$``z0tvEfnS^^%=y&ILkxBl$I7WuM+BM>KjOnV@{ZBQ zaP^#b=8F}yU|!40Ai}K6D|iIH=AvZ8Mft!t;~8+FXW*XGg1Z`mg?D`2Rkl?ez9J-) zHqsRlc2q#jIFw7~{s+$*Z@c|8P&6hZFl6kzh-2%8ydHdW0=zGdPN^qf>b}BAzyIjL z^qt@M4JwwGU>NUbEKT}{AOD08LA<1HOWA$l9OVFq+82ouXXkDG8@BQ6GA-km)!kf@ z5g`g`C!7Xs#~T@`UGm%f4S^@B;!~E%!i;$Hny+r&>uM~^@O6K~tnMN%7uZ2e=}8#^ z8}Q~ydW(-ivv@~25@){T9c9=?dOGPU@#ZIEAq!jKuZi#; zngrs3z=!m&dC_w@g*4}>{AY;!fe3E5pQdG)IX&+Q7<@jJVS3z z>Dsuw$r?rs0dTkYx&!SW1*EshVdgvv45A`L1qWePx-LC7odA(JTcM7hg$9^ZaSD#g zQ?LjqvQE!imDd$xU5)w@Rh;E^dc_DMhI0CsSJgCW10+f=UL#i7lDYF4cq^UqRpIFS&f9bzo#8l79U5z&Th6$UL&OOr6r+MR=A()yqa4FVfEMJz+Ah;u2Ny!D-zMD6e9+nCT7kie<1;#tfjo7icXLa z-bwFi6wB*QU%E;L1sB+n*ZfQ4EzZWJUz(D4jP8pUz|Gfb|fyK zq}chNwsZJhRr^4`G8A~%<}*+BfVlI!|YmujQ@am!uF=x>KCN_LS{0$oQjES1>M^F6c>>U#0saWl~H zG|bh4uR_grWu2wt5_u!gD-VMgVSWW&<`k;k>>HlWFG}lB=Q%ZwU7MF0u_h@pQttA& zO??_+J^3We3lTHT{0q}O=ROxca9z1U3Gn9kPuJj~5t_UkSNtdk{gx+ee(;nL>o&Kf zCuoyLu)^L()No%-vtj+>^1h6hJ_j#3M?Z)ez=+eU2!kThmxY=s9IV<}#}vl_s2_1i z6QNaF@tkFYF)4(ROOB-ot=c%`f!S~--0k$3JlcZwr2)stQ$>duU=~wOcQ~YKYoC=V zd^zXz99zkH?{hx<{`~Q0w3&nH)}8mKjbH!H^!X=`rzbz<_z?`ggJj#`CbJcuhUkhU zA9S*s&;CN&$xGxHUp$#!e)%l2*rd%u2oD7$dU%xwswkM6gN0D$ZjN8S=EKDd+gZwX zc*a(38gC9JXO)RPpN(M+Bj8DfOtmwFyqz`V&zPgVbN76@$9%XiGhItLS1Q6wHCyT0 zr6Easm@|4952#YeRT^u@T&0R&ncv4A@V0_arplOw-9$oV+7u>)hZyUQ^ zdFTY*L&=^ofA*jM@~@^(KKmKR(|#3$eaw6swND3Hoo<#}@uVYeWvR@q1Ru{*m(b@L zRSid<>=^xk-i!#DS}}Zhglf^z0!``sr7?oa3SGLH&uWOX@g!gT@IZEiu*d{0%0eM1 z+thjVL>(%)`CSN^ha>}^RPw#$%y%W;fRRH-sLSy2R>oz-fSnNyVmb`3qV(2IdC)J1 zZbj{Kw5qdWIl3#4WF$Gxr%^}YwRwiR;K|82(VDlfS?`*RK+J*QQZ}hq3G-5Ch2y`u z0idFVnB^cnQY41@O%G*Z|~b4!g50_IObv8;50$I@ES9UP#=X_pr z4V!p*#+P&szF-0M171{e;2fKDJTBUW9vb`SPd+El_H_Tzx52l?+V8XJ&11fpMUJv(WTFY?DCPdkTfbf4U~;ces7T> z``)f6aB=tw2a+?;p7?q(jSL2W^90#Q4fk&xs~C%h5Jz>^>jveVehmoJTjOo4B`@nizxZ|XGj|*doWWs(^vFkf#KGk~vY98{7%ik7ZcDS83`r@5o~0^M#=DS8sg!(s)Nk zBmFvVh*}mOr1I=^mqyruhCZK^bsL#}A{Pe9GJTTs3D?f0FXvz*#}WcGuwFTMe(So^k&gF^tI;qtNtAE)=8QrN610n%3t+o z_VJXOc1;n=L%FGw(Fa1@fuv0HsuKmHKmQ_5K9ei1;tRiJKp|>EfGQY`UgF8GSA23Kh z%7Iq48+LXc!V~lCejwufj8%ZxP)GP{EN@hx#;;#`t_ls%(Y8iAPHE$08L9>kD1ry> z@admzM&aA*cbIJFpq7aPSJ=d}ehRzb$WlQbAUsLyj477m^Ibmburc}R#v8&-d>Tx_ zO9U>XSIU+B99`>@9C`*P^Yi5&C!ib+C_J@9s#=hQRj52#iA#EuhR?KuPI*@T(rGYt z;wr@`#Wb$Nc+%K9Z{H&n;YNP*ES+$UV01+*9_ge^mCVNC<{S-s-r5gCBfZj}yL|c= zevE-$c?jLrD3zIWV;V&ttyC~OMn`z(HUtmNp}Z67<&<;M^Ed{I-~>*2>Gx913Qc3U z&fMNQ_2Wpx)93Qik`6%Q3{d0~<_X!Mc&YHkcjFx8h#xrfl`A>Ritt`%YB>lyY?@(R zt!mKdR9I|?jc~>JNE@e)qzv&?l)qhi#hAbaO)0M;MTQT&{3S)%VSEw_u8L2hKg3mZ zehbThOF(}iTBR8`E@h>Y^yt3>7c#gSAup}0gYcta6j8~c^`~?q(Tg8xCjY3?tbSmv6T?-WY1S{$m=DZITn1CX3YEb{riT*&m|@y|0dfAHaVr*D7nJJYArC)4XMUNd<0WLUp_dxLp# zI>AfUjm2c<|2+k=JW>R{_2p!%lECl>OD8<(lXM7kSHC@tHgO^OarB&lrWXy zP37!HYy?r1Sw>?XAsB}%Sjrj|Wu>b8t=xSVHoQu^MwI*VTE+=Gmu~>qd9TNt*5$Q< zGfudQAI46VfDs>`V~|F;)ird=L-;M_(dcVf^K^pj{F0BO>d=A&HMaU^MW#%rSv;d+ z6Q!`Tb959JdXQIysoctdcYbM|r*eSx=_m4`e$?{7rG7x5Z8thU10i{$Q^t=dAtki zXU9{2=r33zb>w~FXp#B}=YGs3MT{`z`81z3?x7!e$`FIJ7am1S2i8g{h0s+cNC|)B zVR(^u0~VkhH_`FSt&~QG0?pvppvq$O4Uc(s%DU=+$oe;tf65_EsQ8;8!oeX|;H|u3 zdfT}eueQ4Lj*0h#r$-zo;sIAXoJi=_c=u4d5ePuv?H#<}9B|t6{*AlS``>s(+OJJN zI{2IE@bOoC!3Vp{Q|$Vg$CU7K2Rh1W9Yf9li*r~Z3Pa9X^36MU-kTPc*H2&FT|X{ zP-viw_OPBy7_e#?2cQ!wjn$IUQ+5n7$|P#*xgOsjWe7d0Y$8He*6k!+XG2vndbC!t z_1l%;-3pB{KvCM?;boq8`Gsq@^c!abTb-(=QK*+w9#7y-%P512s+>n>Uef_as7T6F z0|!VH+ISU%$1kQ&jLQj&loNWTMREkQ@u}v_VfUI{3XIa618>>lPUok?;M1;78OFDG;C+_Rcc>in4pi&)CH;S$!87kR!!z)sZvkcSi zY;s9|>Jgpk`UEPl(hu_FS^X^d3OT`Oawt|VUgIxxkT8!rB^Ka}q(l3hGkE+72+^g( z(p7W^Z}03j=ZH_#cZH7$~(8R&3# zW5NA~Djz~YZU-3hL-gf@w&Bci~lxz){wseN7qZ_eImH6$;^Roj6O}yk}1npCh zv}pqz=36&TJALulkAv_2dk?15-~P_@$zT6uI(fwu=o-goFo(W5-AC!%qW^-$eDFls zm+KmFcD#T1;YX}5bYh(^>4Yc}p$0ZeF$a?&3n3jH(yOqye}_i{zOtKbp6MkyJHQ^{ zl4+H5KL2yh@c)b+_vG>xM%;sLco7PIcQLtQ!cl;B%Lhdn(g=4$i{LagUQv`Gl-x!| zfy;EO$hXyLTqC_86seV5X`SAJ_uh>>N2jViCpxB} zAwQK>`HUjT8mBTl0&Uq;Y#E;Tfm89ro0(IKV6yC_RE{(bbq$cTjghbM1qbCXJ6LI0 z8u3{eWC}j-07>(bkZ_6 z<#lkyY+_Oe#5u2Qy@e;rmj_yQ@Ygam>#hurU^!-#b`o8IhSeD%1s9s6XI!hiRd>c4 zr;a$ne#8#G2RHYodp9{(hbR4Q8vlhGO3wJ8HuJBqnIe6~w8{aE|0TNtU-F$>UPWaP zzz=Zf1y&u^NJoHW;y#8>7`$Q)4R8)c?kGRHfuT}&HJH+q4jW(x8Ez#PwCoLc|5O-k zg9{!~$w3S%TuC2~Ae5tQ@&XfiY z4?q0&^!~TLVWHEffA_QL^fk-1vo(Jo*k$;*BuQ$PpLv__3}NZ<1;JB(3=%UghbEA{aL} z`eD4=fOoq0WrZ2G(w2DicYHUR9(m{d7Gz_*4JisN9cY%h135UNxQeYCj}>U4IBBxT%G$qW3^l6#f>k(2ES9U^KkF!e zG{PnSmo_~AgyRw>JmRlH>y}^mF&eb9lhp!M#?j-7AP@@q>GHg1MS!K?H(#Dg7(vc` zBk?ifp+f+Q5{F@AlJH#m$|G13lV!zE)28vb;zFD;(!y;Nm6$=ZG-maQ!%xyLsEc&A z5@bFFG0O8Ue04y|z4TZ8QLf(GwX7p=@{}ydfYYxIzNW8wPTRZ5&gh#D?oA(k_+Yws z17mV>FumdI_yf-8a0=xRBmEk~{epL0&-f(R3$}E>WUcZ6cEM@8W1hBsr{ds?^+_10 z(utU@@F@e*SiH$sc=I`}!H{1$ATrNm$u{0;pn#z?KvbzT6AL+i#|_yr3&HhBTL z!4%JtM~Wc7OiWRh`l~_qN$Jh2XA_5T)3&#!d+$F0_R;heOAJq5al9-mRp^GHo6lFW z!f%bEY^glxJef8>`^O*U4DeXNh{VE+(A;LP3P$D8o4X?AgsGCf-8(!6>`|#6TJ9V; zFif;-#4j-7=j_xxJ=vX(c!7DrM+q)jkpcn;Mt~IJp;%`K(sh;gS;|Ox_+@5auv}=F zrKa^2VVCQ>%F^^!iq+LhJ%AH#<80-$OGQD0X`S9_%e!#m)OG&88)ur0N+a!MnwyZi zgD|ZPV8eUYB`^7dk9^)&6jqr=WJw>5(MD~B=jCPcK|6WKC^8Iz4d1xpNhL4ZoVFPw zr7l7A!l%IMx>Nqh>)dPQDY{Y@R#L9IiQlr)=t2VN(6Oom{lMx{&f78+he-w2z~09t z0&$CDflQeMrM$-lB4rC)byjIbk7avda$H$c;3Dn+_)`PI@i#E0(a$_}aaCx3ujZK% z2S>>?2JYXnFfrcE|?)~8$dSc1(5$hXfp=!ypy-#Tu?-wvXsg z$@A>VXVdKmm(!zfKFHwqtDioePG329PMhE6b8NiRU}7AB`*_4O)N3ZvHx7#M(V2u+ z2|}h3R7nk$V-?y4qil~iJZELYC12s$W2?O*-ebQ!LBm+{W#$F*GmN+|8GWBIXLCeF zo?h;;dWF6IYfQw0cnd>!acaZ$5es2>At)amoj6c_K6Y7lE3)ECrKT1Q30L=01^fsx zBU<83YvsOvpA{ome)Uh6(~!%C)Key1(KecXL>I1MyUbRU%MWaQd?&E~7?eq6~53#uKxhxJnD2G#r&!1s2Z6BaoSJ zDu%cGz@PCWuHvnYqH#bOJzV8AAd5*)R7xnEhDpn9Cb(deCEk*YfCJpv{LffJlR6fptE@A;b!k26q~Egr5rh8JoBkvizrwB8{L<0on_4BD}6Zt^#dD$y`LtW{S}a6nBub7*zC>4?GCYYj4=-23s*znFgXi?61C{zpHY z{@L&UV7kZC+$rB--Q-F5FrVaO`7ilTk8ey*j&4m~u?<{Z@S_oDgcc)Syq2KcFq0?eMB16*WSC2NMYt8q zZ^=*)+uSCjRtGiuV|)QtM!H}(f82;uhFW)m(TQQ{wKF<9c>VsRZUi)|S;!j$?qH4M zW6Ow}=sPJX!`T5i=glZ}lWC$GH+C_~_ow}hhnj9?&e%PTZxi91Fi+)buUp4=U}-Ii2O4qG{4?(D|hd+hDMO`#A%PtB=UatRZxO?Gbkj5pdC@Ka=kWNy@pB$M297kx2(O@*=h6*m50Mxe2LkMhtnHjx@~Z zQy>DcN*knCwt=GxHedgl+@uGz2qS$3D+$8;Z?vRHPnTsp8k%;ML=g#u=)+erHW*BJ9R z_}Pt(?ws*>&uk1Y7@-zf=f%AQ!BZRY@DU-}PUQ^CBK=yOW^Zt7zUIB<=iQE?-VgW; z;gf1Dg>ZUt9^}L@kQ-es`ACN0DkODk+tcn@S5T0)A}u3qtj;{PLGil;(^W4Taob6j z?~?8i)KNYL4g-C_=MW!H>$jgyXKsKam32W>4DA#7oGK&?`UZnrcVIqv#PKA)pSXO5 zUEQ7D|Fye$Z}{p9UW76rTW3?yHfN8sf}FYV`{0r(%97b)$leDbqyZ0tNvp3-IM)pc zC|C}gVvfhvC9VzM+}qE5+c`bPmPTgH16lm67etZXumAuksYygZRC6^PoA~n0C1(Jz z(Ssvqc_k9#a_V|$2JFZUK`Bh61wEc|5e|_aMW>P?WQCba!Q$akfTm@-f)2romzRv* z5t8#v?G$`fphyO9#MNWZs#oudZI}R$AJe)L?e)FHso{3y9Xb$D!@cXi#8>`etf(5s z39@_VoiC5959xR6#A%ucMiIa-lm|^@qQI2M;9KS1;!?rdfOq*qwwnziC{ zbMYc}!j>^I8^3a+ZlK>c`9)nruAt&0IytS&cKXGas4Anp1tWZncf)nQEB7TmR}$U| zqy$h$c5|xyc0hjG&t3nVwum2I2PC@2JEG@XMs|X5r3~&3n-Mql)N)?Q)eNK1+@w#s ztcP}0CkYX`q&dcf%_Tnh?a)q-ndUsi(Ej~rkEj3r`Sa)fBbdV?W< zl^ww^-Mp7U1UketYEBLuoa8A+w&EmMPQ1gvJs3{8g!AZw=_3y2GDsqEHJF)^6&yyz zwe@X?qyN;6Po}n|lC3zEW9j^SPeG$>{gj{5x!V@3!*n#<#lMLGcG`%6F>suGf&q5H z2EycEs#nwVFMiGrn0wRY@hHw^vqy#r5oe^Cp@0^6-e!=M?f5(3+oSWz<{dWa@$rZE zKDfi81-=RJ~zLi#!ywGLs9UBqXCf0SJ3J_2D*8?FZDQfgW*a zIiHNlmeI}aeGEGza3|PVVtB#4%^J#b!F0;u2}b;oGraaLr#&7k+*opg5?!zzI|ru^ zVUz(cW%HG{0#X*bOgW57tr*|dmtnF)u?LMJ&;g_o*pYzOim66X@rG4^Ht2nCoZWCb zPs)Y}!#&Tf;WjKT=ezwr=ewp&mU$bW_bYCQ9pdXBoPKe`25pqIT8?E~ZhHM0hk43` z3j$T!WTd%`){=O5vqDzGa*NAI9C{Qt!a!Z>oMOL&$<0>J3bf)1c$K~CpD^j+g@UC-UH$)cg9CKRyjMzp2dV`>q^{)jHfZpM<@^-DC_*e6 zk6c9Pu>9@ZB`_o77-JPDTf6i1ZkNfNnJY@=CZIh`|Rzhqtf4+?_=H)qUYnPQ| zxA%F+1(7#s%Z|D~U=e72@CqcHdRBJY14qf^=hArB=vPLK^R8T!LBY(^U8FcL&5Q5AnWgkR@z#q7 z3W0pX!{=YT`cVhlusuCLl0_JS8T5}zbe`wfjXN0Uz1;`X7Hh*<7|y5~a`ottwyUa~A^^UbvD@+n8*jKJxnFyK6Lbp=F5DjfLv%NgL@%aI5z{Js@d zxOvlSfhkxQzNsS%Y&SSg=)UD%=YBj1FY>ju1yv?>OZ=kty zQ$IkpaB^w2hurX%7$T}p2&E$ItlW87Q%wQ}mvG{fcK*y`rx&A7w0SaWFkRk>n~NtL ze+Vi+U@_i#3d7&DN|R}3Xj#n>7SH96X+i4E%$;C*yBMDe6nKz!YVOH)C58a_3Z1mb zFCqWKgvAce^?dINhnd2eoQ)&*C7uN(%jkFE6rEJjX6zUuGYPB#C8=dFq9Yie{LMIv zr~fMp%9G2Ru2^Up)ZH>no~g!T6OL(NP@v8l-rd?@W8TZ@fBnz@KKE+FRXE11+4mA0<{)LZ?CBo@rX*prO`+{!>+Xm10 zmgaQCw-wlX^MIG3YmC^RefgBLR-S~8&6~_$=Oe}tS(`+B0moDT8%AVOR}B_}#c{H} zl~9>tA7&Cr(a^&eMluLUhjaRtUm`V)ssQ?9L4JZiZV7i@*fu@0(o%FkeutqB2Coc6*q9?W4_$@Uu zv#^A6oBj1t)3kEpu)w*@IiWpQ>%mybPQC#m?W4FsleEfX;Z0gH8h)#!fn{}T_(1wY zgt!V@!!=Ze3v2y0#9Mcg+ju7pCYF5UscNQg$Tyr>R#ASXgo+Lh4QJ{wvaseu_7Ieb z149y4wC9B#^(yoR?bWFaI~g~TykLIz@slrkLAEp9egFOG3Gb(l7=XFjWS#d|yBOpx zb`px)HOzJd&TwA3p^T@_eRc&oAH2`EAa6TW$|#)0DbvHRy*K^F2k%W^F}3pJ&%c^} z^m9h!81kB(kxN5@?1 zv`(GYfP1etG~|su<$)~08-q<;%er7ml(hP(yHUiY%@cFZJ{a36fk!R*2baXn#BzsySJDt+wdG{Dmy&^6}Ao$myDWoo(hjw7n>M*SD0Yb z&w0$+1UBE%JlkPp&7%S{KOSgx=~5XcfINZgh}wPn{PnbZieY(Yj^NUR>CWVztX0hEAc%v6AJX-K;Q`fgm0qRnZg>dYg|GS4zj7)RSyn1)+J zXL>vRrgb@;cbVR4bDSP=3^c(vD%WLlp^Y>jx6Lcqaw;L9#*h4#-~5CRcqL=&%PPNd zWE$C^yA-h$T)yPPtVK-dYT(f9&u}BYY0x;#hyk&bGHL|GnZ&{?hTzsS-1TtB%Y|uu zRT<(LCP3U{K*fiMKQUio0+_90StKD|u)f3Sh`SNtHwO zZ#UD{SgJBYbEhR&gib~RT~}u5x#48ji21w@4#rHRRVTg8B<%U|>*?qJ_@n9Y^^57z zg9o(l6V9h*0LJXhB)z^nS?s-|sWIbI8mCYMk2-#+S?fi6WdVY8~-GIUUJ18;nF~|~6 zZ!ZV-m&UoY$k04$K}cE}jXeP51%_U$T{rBoQF0!Y+7NZOqH2V1rIx`qZz_&5-ethe zsS;_xd&;ECGp+MGGU$fXcV*kSg-y*w;1YTDvRT&%wv^2>Q{nQigU-$o5Ak8uALT-N zjZEQDWz3)DYd8XFVBqPyLGXGhUu3JZ+?K_Pt|Zlue2rkEPLS+v#6z}WsT5uVn|m;h z{P?TL1@h!D<3OpACZo7CNYGgg!DOizMm*5QSjY&x<5u-i2^JCFgS_(2bw}E-!nH&% zA2Ti!BqIzDe?c6zx&(i(@#I0zV^XCneIM(pZ7U;mA&Q7N{Y}(mi-gjb4_!jNe zQRW_voF&fFYmSU|KZosd3#0wu&W&lGk@y={syLPKfKQ0+Y~90n^Rx{eCv*@_FRU@0 z;#Y^#!iR2K<2?eGbVE9AM-AEt5LE*`J;HdE%!XP={)vUp(v>oTwhJ>jc+)23r7C{g ztbXNF7`Y9a@DU{*OR{X+RDAjM$MU0n!G--`>5ZMSM+G?dpEFQ+CwO`KicatjBXXve zacTfVUwk|jQ9tKQx!9p>vSV}IgZ=W(09;HtyZiFxv&T#+UrZl->o=#bee3Jg6W?ms z-ush}8A>{jK}P_Q;9GNBByXV4dAoed8|4$`u}=8QLRdS`m(Gk0hCMG3-dRLUBP zu|bdSm$Y{{@M>fGE>ko2c>LlGDqoD*VgK$vZ&x>&wLg8yh8`ZjZW4c!9bxCJ9X+#A zQakmM6eEZ%Jr&MPJ=R)1*4K1`jaR48W0(M0_MTQ!Dhu({va8(8Dig@T2mbW&xkm4ME)+9C|+ zD3=Ns1w$w)H!#tw!lN-z`GU9T_i3n)Z!P0(e8C8}ykfA4v-kIDOFliJ((mu>S$B+_ zSWWgixe$a{L*K#D|z^8BNl(ThP?IQg%gC#fGct-pyjO~N>KAe92d%w-n zwYwZZ=Q=UcnfA;y0MoE*ZUSNCWOLj?7d%SE`P>6+!6}Bu(dQ#@dbO=Of)!p^7XkQ*vMoL!>WZ14*Y% zR=Mb*#^1|y__Jf&QcgU<_)B7zah^ik2HzLnz4aaj{4TsXvq8z6m*TOsZdzP()GamY zj><%yUUKPlvobp3gF1d2^VXf))9rgKG2Gtyp5mC?(s`b)p~QlhacFM%e>45YrS_c+;3hoH%$4E%1C!k3*dd1BVmIARl%kV_dF(gHAHpCb?+?B?l@EaDiI?!?X zqm1}NNH!Y(ZKcXA(({Hh9Ag?Kuou7DfpjAhb}k$I77?_fPPocQSpr{iMTfZjOU6NO z;ed}Q2nqpDjj!mgf)WRC<1jV~rVK(15skB$OgTxK;{~aX!_x~@d^?V9jCXw~wgJg{ z&6!VnuE+xz>C$z20*NYI;TP|6uo##tKfk=(#$U`ScP}z~zk;IzDR0CFBCv}(BCTl> zK{f8iTevMlK38R5FGz+4p6f}5Lm;=|Z#ukp)f7l^&~YmnF69AC{nO^E+$ys2mcPoX zawsDt(4Oq@X;(Hmx5sbur2T{6{~<=<0Sgp-a(1#r6NJt=8g%mr`n1PLdK)XQ0pF!P z@9pta4#7FD*c`MuX;OdA@SkJRj53d_R~(&7>M=(34YtL*<3)8`=dm1lIjB5_til^< z8OWfMWjvuP#nbE-GB{m9Jr1 zmSMTzpbPfmXV@&&JgtBmV=NwdxO9bzcFa#sGO(R6;C6_1pdQ_vmzUT~I3z#tHV7*! z4nK5zRTaYz0^OuX+~Fx`WAEla{a6A_ge`hliG>ONZ2S?Dm7stPQxS-X8uF3KQcx`v zz|p(&;}-|?yHtuF-aKL6=H%HEdQ%^p*j~>lf9)6??B&1U>lG&_oUX3r|@aCs~2D0 zqbyB`rGR`^sw&8$6CXO-ZzQfuk`n@0g-t^IT zK7u3+GKN&0-s6ed_I+~X$60C#a4!ek#)$ZYrnOK{cNo>);Jd549D|zoX4nA_M!UqA zTI4pydzWvwu9L@8_MY(c{(|}NLpByUy7hfqrbQ`NBNh6j5!Th^7;xc~nFwXUKS$gE z)regq?o+aZEeF80^fn(7L7xqiC2eH&L6E{H&P+RUufbonvGT8A!b}7R4TF}@LvxGW z%ILdz@MY{JHj}vtEE{cUlP}8e@$L@;f9`@1VzVkoJBK8#82_q_Fc?|H7LT&dsjnjj z(4lv0_m4jIXxDHH$38}vXpB-gkzRm>@hlV>iXTY7g5i9Pt5Y`DscgcR%!&KxwawN~ z=W)&s*oDN)%nJ^~nT~gP1Y^#J7n~=j&*=SmiAwLEk)F?4Os8D%Sm7M?7IW(Lbq(l~ zm(WA!Ax$CDRVVlpZv_^;O}CXB*yQ%7DxrMJs4A+GN8@lvV!j~-JEJz@8uG}aGR(h) z=c=(Zu{*-L&)~ss$Wn@SJ$k!b>1_Hm#L@|VD-gKls32KJUg=AvE{u2M6rUxoibzDt zjNHiU=p|D{G+qJwi#p;Q;t|)zQyJ0FTpT2Ca*aatM?ok?Hi@)4Mwh4n4ed3Sn3S8#!zLCC?3Okn<Lxt%=k#GQ6!zrBKUp+S_DsxeNBJ1X1P4zT z^OT6~WpNehz(PmWE!d14m*th0c8N!vW#kntag4x?3y=m}^T>}P+SPB8Jv)0a8R$svcd^rUSPo!Ipo!mKJK2rW0Tf2Ywaik@ECAFCuA|i}ZZj30I>+LTE ziBO?qyuC8*LS=2xllY;BGkWa(+jp2#yEVNzX0D6%;hP&Ael@+%OAU5pvOfIu!UN5p zQMn$_MDM)ou0|f;Swp^sfHx;M22qGxmZZeW;nG1GKSK%i>qdIP8RnA6`cEFRB%gV` zsxc9_z+WX8=c8avo%Hlc#hNt~I8sM^_27g$+u~lO$WC8_U~?yblmo>oMdD8G zt7XYQk%MpZo1P_ygT55_uHwz+h3qx_j$T}T*z^1H4WW zMQ;d~Cp|MQ301z4x#icS2kSt+0Gz!I*JYV7ga3-m(Glz1KjnuU>Ir7h99#oiZZbCt z2pfYJ`5ECA{goDuA#zz~&9$_fb!3judTiI;lBcxIDNS|gnbS!Q?wOW`=T2VB5=Ces z1jdRVLOf({)u+6__=~^DMjkuz$VJ1$NroP6>@Mp|rYD%j#zxe1hj`T=_2w8OpR?+T z++i^0qJ=G{4SZ_n`IR-`EKMe#kN?g^V>y_PJ)2&>V1)%n+~cPmv7XXqZFgZ>+MzL@ z>l>qQii{DCyrmx)ZIo>^?Ub@2UyP_Q4ovb+iF|edyL^Js_dD|2t69o`gRA~6be3lX zXQ4XM>*{(PZQKF@Oe@70(`aKaBWLKbeL)=M^U1WGn;7tYn83cd)S8jGE-3O-{;Dg* zQ28yv!hK3eX9n!X!*Bhok9XJ#@6thy@@%jaAT-e3GO9Ks1Q3prQ(+#YmhWW}>D|W> zr%_TU1-OiGjknypH}*3Jbb5+{FrwbNyl>1l=aI^6(LxyX?cX_Hpz#>;L+Rs#sch#UC=qe7DvzN!(I*j3DQtPSl10T8n9C~<+#XygGut;+qZdh%Dl}@kAt;`bM2>(*b0GRKi{uhW1V*lYQK%5 ztaA!FV>gj6R(F{9GJMXq`E|B{+WTd}`v!aaFP>8#=PsPHnuT}YE^XTL)Gd#o<(0M_ z$^~2VThXeqDK|KSp)g+D%YTGW#vS^sMA85YU*;Vk11{1rQ}UKE3o!6@W(s^Yg;Id4 zUtvnP@?Q$0(&(1)hC}z_zKqk~PWt36_*2R-M`Q!|JFU2KIqI8TKTS1ZgQKTl2IvRrxzNA<3l+Qx2WwF&vQ z{J1vr_}&v&qsNF}{v`!W^EC%8Jh6$XdZ?(>SMpR+piJ_76dmRjvnfp=5m9r^=BCGlhY##xy2VEzBAo<^k}+upOLdKv=EA;QY)$69HRifz?68Efj`Ev zEJ1<+@c7mGEeydf-+enhpoaz4-{$Y5G;8LgB}S~cj1K!Acvd{&p{F-lmo7p?*s5#gzfb~RKVy9{@^DW}m} z0tE&i_cF9KN);pxWdYmX>+x^ltjy#WS6@~lhTQVRJ@Y0X#mkJp(>o$}Yvr1og;goi z;p!7d;69@HrTblW=h<*9M7op3JE)2d`5fgFk#viRUwC1KewV9q!_5pbd*%$kJb#yW zHBV!m5$G8pNoxS&mbeRqm@okl|MAL0JR+)ieM{GQO}9SE&7O)|1sj0-fH#dRwKU+` zU;5FRL-Zp5@OJVtrHGni!t08-nNH)Q!$U|K^zVQF`_p~edre39Sj+|-2Vg8;yWnYg zhh>2`X~V86*~MtmNH}DP(KY%bVvS5TiAfiiOAEam$Zs+zVc5r@5BtH$bC;!x*f!2l zd6UDi-Y|IdL)V$211E+v&#LZ~u#rPZ?D|d-??p_++|$ z{{hC9uOVZ=-LtRp-sf{*y)kp*+3W+;J&#qD zMcHZ^qrYzQm<7-*Tkg#@l=0 zY}^6=|NF7h{6nVwm}D&$jo~=>LX*DmFGqtbSQ+e$IO2n|X)0a|D5{yP@|HPFdUn_H zYrJcnEOi<=fKJ@}sjHT6k(L#|$w|i(KaiGd;TDbyCJoizLrPc6%i$e+tq#l<^RkC=)N7AtQ`S z#`4dR39e{tZd&$(m=+qrf;F3dpWRYH-gPER3og`Qd^FhV@OQrZ-CXLN#$}B&sMj1w zjU9y?O3Q{lu+mm{cwy<;DJTg?Z8$(?1K zYx1-4hY|UgY$|%rDE|U`q28ojbJw`ePe$Yo4myrD&bIG*??d~OmchDwm;OnSB*JNr z+QGwrL{fUHUwH3T@0B-DDbqGtIK>t&^~}B)aS*ie#`;ALj>p~Xw2n-q4=rGhcz?S6 z@EaUo@DWP^`A|Hw6b_)Ri({s#JdaA)%v6j*s&oU4yp;>r#?He(`&gg@)^NKk(;n$F@#76QIrCdZe);qXk2@|RXJ-|sWF4~Q)Z1`{LOjNgikb;kp_yh` zcWpRJj4n8x&=2kM*=3A)^~lp22ea@pQv>ez;x0M(YX9afI+Af70L;%DXcVF4Dc3mg zk3b8z?qy6>%63(a6%vQNw8~Hl0#1@NRvCFq_o(c|5nm0n3a-j6T;hllai8M@W{K~( zNK5j73Hk90Ui_&<;_6HJ>n~R285|Xu?_!mA%LH`cDm;oy872k?d}Zz%xw}hFoIYx5 z#2vXW_e$s{?)KZY!ID|r+q|3u9B;vYIz8LE&l9KvSWN^XTC z$>V2`oia)`olk&Hy$T#$p^H~o=zx0s&2N2c`kmkX-JIWl>U%AB2KoY%lSj|^ej`SJ z?ez6w)t;lvqaCCJ zpv)Sy;8E%hrfk~|RE<%r{FJ^LSMfk3UHeBXN&B#ibiUsqr0eKC6KaFOt=~X8rE}b3 zx%HigA8;1U?zG3E51$}h%6n{Q$qYuyv0O;8u2Qz8gftBJ{s({lu^VZ${>Qute*GL{ z3jF>}zP*Ov?G1KF^J5H;Kl^lg{PRyzF?U$-@0qlY+D|<*L8DD??C4uQ6hzi_BG7CC z;_EwZ!C&9CVtgE`r9@kv)`bDTIDdi$X}~>Kn+j$H#Qtp#Ip>Xub8PnR3N@o?xOms} zMwT~*$r8APs8HsUb1NYZlCtb)7~G6>Nw?B#^j*r=m1umsrQbLOT%CX&LE#ttI$ZJ( zG;KZ%3Rmc@{HmZf)~zJD55BCqLNk6FXON75sDN(=iQ&J)xdSRDmD)@B+Ob-1u0C;Y z(}rT%#mm4=W__Wei_6I53ijl)+?2hbWeHVjiHUW zjBvxHAR(FpeDPLH$BxJux4Gp{BU$Za%Jj((|L}*?y}Nh$yc$MC1IqN~IcJ2QaAwLD z)1tTc*jeqS9CRlWl;Eht@alsmEZ1m{2R2=g5d%Lfxpo_Npn!=v8_#-U^fdvK83245)1L6)#*QjS0{e#vbCY<t9YO{z))ome9iGAe=)3>&<1>t~rxH5v`R4hv z>G0)C4EBCT;)g64ca*)idxMYAZ%?nDK4ypI^BDE}y!>=d{Ls&-@rdPu^*m<4oV@_7 z=g+UKT^=ByO%A!a?IQkt2qT@{NT>#LIexX7gIVa8d}ZP%hRz_`)iL{Y9=-sOku)Uf zCoNliM}=4!M1zlCJ*n05Bp>M!JPLysT5D7u2n9hF6Xwcv^Z;%vf2kOPrHpac?_~vd z$0AIPQj3((W2BA(ElV=vQt>&LM9m#&PD zO3PH37jxh8>z3hNI&?Qa_+*w*N3x1T3`Irg88lr(onlg^8QzsRuq>0LN4F|UU&kh? z(#CJajQC_4F;$tV=aTjU2X$=yk6I|w1`%@Akm0a#CeN~>^cSqU5wbhEi4Q4_ErI$0 zPTey_UG}ewX`Dd_O;v|dvhuGmne$z4z>fTHK`i4}1&5}rF9xffxud{8_=6u#AAa~@ zbiz62bxs_8!{F`>=W*=vlzo>k-0#rdebnCsZw5rP(;P=lTg_;fkz`hr&_3)S6j#0h zz>7RAS9I-wO+0?4%`GB~+wvXGC(mATz#VNA9n@%NCos&|KGjj%rdQP^3FK8y{_9dN zdZ0@|X&-dUfsvWph^LJUAUN@{GX}|@C+iq%WouluiNjxe{kX zJ7+|!o9WmgIwp6o`lX^S(0000 dict: + params["function"] = function + params["apikey"] = API_KEY + resp = requests.get(BASE_URL, params=params, timeout=30) + resp.raise_for_status() + return resp.json() + + +@mcp.tool("get_stock_price", description="Get current price and daily stats for a stock ticker (e.g. AAPL, MSFT, TSLA)") +async def get_stock_price(symbol: str) -> str: + data = _call_av("GLOBAL_QUOTE", symbol=symbol.upper()) + quote = data.get("Global Quote", {}) + if not quote: + return f"No data found for {symbol}" + return f""" +{quote.get('01. symbol', symbol)} +Price: ${quote.get('05. price', 'N/A')} +Change: {quote.get('09. change', 'N/A')} ({quote.get('10. change percent', 'N/A')}) +Open: ${quote.get('02. open', 'N/A')} +High: ${quote.get('03. high', 'N/A')} +Low: ${quote.get('04. low', 'N/A')} +Volume: {quote.get('06. volume', 'N/A')} +Previous Close: ${quote.get('08. previous close', 'N/A')} +""".strip() + + +@mcp.tool("get_stock_history", description="Get daily price history for a stock. Returns last 30 days by default.") +async def get_stock_history(symbol: str, days: int = 30) -> str: + data = _call_av("TIME_SERIES_DAILY", symbol=symbol.upper(), outputsize="compact") + ts = data.get("Time Series (Daily)", {}) + if not ts: + return f"No historical data for {symbol}" + lines = [f"{symbol.upper()} - Last {min(days, len(ts))} trading days:"] + for i, (date, vals) in enumerate(sorted(ts.items(), reverse=True)): + if i >= days: + break + lines.append(f"{date}: Open ${vals['1. open']} | High ${vals['2. high']} | Low ${vals['3. low']} | Close ${vals['4. close']} | Vol {vals['5. volume']}") + return "\n".join(lines) + + +@mcp.tool("get_company_overview", description="Get company profile, financials, and key metrics for a stock") +async def get_company_overview(symbol: str) -> str: + data = _call_av("OVERVIEW", symbol=symbol.upper()) + if not data or "Symbol" not in data: + return f"No company data for {symbol}" + return f""" +{data.get('Name', symbol)} ({data.get('Symbol', '')}) +Sector: {data.get('Sector', 'N/A')} | Industry: {data.get('Industry', 'N/A')} +Market Cap: ${data.get('MarketCapitalization', 'N/A')} +P/E Ratio: {data.get('PERatio', 'N/A')} | EPS: ${data.get('EPS', 'N/A')} +52-Week High: ${data.get('52WeekHigh', 'N/A')} | 52-Week Low: ${data.get('52WeekLow', 'N/A')} +Dividend Yield: {data.get('DividendYield', 'N/A')} +Description: {data.get('Description', 'N/A')[:500]}... +""".strip() + + +@mcp.tool("search_ticker", description="Search for stock ticker symbols by company name or keywords") +async def search_ticker(keywords: str) -> str: + data = _call_av("SYMBOL_SEARCH", keywords=keywords) + matches = data.get("bestMatches", []) + if not matches: + return f"No matches for '{keywords}'" + lines = [f"Search results for '{keywords}':"] + for m in matches[:10]: + lines.append(f" {m.get('1. symbol', '')} - {m.get('2. name', '')} ({m.get('4. region', '')})") + return "\n".join(lines) + + +@mcp.tool("get_market_news", description="Get latest market news and sentiment for a stock or topic") +async def get_market_news(tickers: str = "", topics: str = "", limit: int = 5) -> str: + params = {"limit": min(limit, 50)} + if tickers: + params["tickers"] = tickers.upper() + if topics: + params["topics"] = topics + data = _call_av("NEWS_SENTIMENT", **params) + feed = data.get("feed", []) + if not feed: + return "No news found" + lines = ["Latest Market News:"] + for article in feed[:limit]: + sentiment = article.get("overall_sentiment_label", "") + lines.append(f"[{sentiment}] {article.get('title', 'No title')}") + lines.append(f" Source: {article.get('source', 'Unknown')} | {article.get('time_published', '')[:10]}") + lines.append(f" {article.get('summary', '')[:200]}...") + lines.append("") + return "\n".join(lines) + + +@mcp.tool("get_top_movers", description="Get top gainers, losers, and most actively traded stocks today") +async def get_top_movers() -> str: + data = _call_av("TOP_GAINERS_LOSERS") + lines = [] + for category in ["top_gainers", "top_losers", "most_actively_traded"]: + items = data.get(category, [])[:5] + if items: + lines.append(f"\n{category.replace('_', ' ').title()}:") + for item in items: + lines.append(f" {item.get('ticker', '')} ${item.get('price', '')} ({item.get('change_percentage', '')})") + return "\n".join(lines).strip() or "No market data available" + + +@mcp.tool("get_crypto_price", description="Get current exchange rate for a cryptocurrency (e.g. BTC, ETH)") +async def get_crypto_price(crypto: str, currency: str = "USD") -> str: + data = _call_av("CURRENCY_EXCHANGE_RATE", from_currency=crypto.upper(), to_currency=currency.upper()) + rate = data.get("Realtime Currency Exchange Rate", {}) + if not rate: + return f"No data for {crypto}/{currency}" + return f""" +{rate.get('1. From_Currency Code', crypto)} → {rate.get('3. To_Currency Code', currency)} +Rate: {rate.get('5. Exchange Rate', 'N/A')} +Bid: {rate.get('8. Bid Price', 'N/A')} | Ask: {rate.get('9. Ask Price', 'N/A')} +Last Updated: {rate.get('6. Last Refreshed', 'N/A')} +""".strip() + + +@mcp.tool("get_economic_indicator", description="Get economic indicators: GDP, CPI, UNEMPLOYMENT, INTEREST_RATE, INFLATION") +async def get_economic_indicator(indicator: str) -> str: + indicator = indicator.upper() + func_map = { + "GDP": "REAL_GDP", + "CPI": "CPI", + "UNEMPLOYMENT": "UNEMPLOYMENT", + "INTEREST_RATE": "FEDERAL_FUNDS_RATE", + "INFLATION": "INFLATION", + } + func = func_map.get(indicator, indicator) + data = _call_av(func) + vals = data.get("data", [])[:10] + if not vals: + return f"No data for {indicator}" + name = data.get("name", indicator) + lines = [f"{name}:"] + for v in vals: + lines.append(f" {v.get('date', '')}: {v.get('value', 'N/A')}") + return "\n".join(lines) + + +def main(): + print(f"Starting Finance MCP server on {HOST}:{PORT}") + mcp.run(transport="streamable-http") + + +if __name__ == "__main__": + main() diff --git a/example-apps/focus/finance/icon.png b/example-apps/focus/finance/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..90f6234f6eb0c290a740b5e4154fce5286139854 GIT binary patch literal 13371 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

    s?5AM<2Oorv8m$Mro(EdA2{DqpjAjEON5e5( z7<~0L)P&({melB^@W1aYDZ{&W`tKwjx z5ATpzjqXy04)HHo->CC}73T5-&AO41%DEBGbtd-k;Snaix6J%QR!__mhufHy(d#g( z)om@L^yOp(kN8ti^5$F)N~1jwZwOVlw#U9AmXGD zovQ)?gc&rFMauVql~F!&Gb2r*e4}0+zDd|d3;>`^1YY?!xxpec27OuN**H zh|?B{E?6G=J;_j;`-gIlw1MEIemGarj^3;j;EBjiZc12gyqGuHEOJMa7)%$cvtVu_ z-)Hd=up<7lS~g~rN*Tp6L7^-`&u{Pe;%WkOC|O}dPFI(_DbcvR?E8RB*xWGulIHhr zY7+&Ph4p>yIBEq`6D>B^fH)ccE$Mcd+R5~MMkmwrEB8un+D+aTmIsM>Qh1A_s9r-i z6X6QB1_JyQa|g-w`Zu9ZQM-YR@mnHwQ+f-O8U6=f{t2R+0d#R8sL@-nC242(7tgUh z>t=tl@+ax7Rc{J!z3&$`Z>=^Koo82j@Z`pRSReB!{txcmr5Wnk(gjNBY_2W7B z_u0kmA9PO)IJr>6KTS5aW0~}po-!r_*g&3a!rafr2gucV^IX(EXX+k+)s~3>Le#Z` z3HM@ME9m~^!?4hfAD1pRNzN$)&AK1Sn9C_1USAyk6Y*+xN7K^eNC*czGRrP1Q_qXy-`p`r*snu^Hb=QLdkpX#^FF zT2@h<$@f+d1t{%FaNS&WCq$$-%n*IQeNN`y&l)%YUIASF5~@EM@xv@~Wnj46-l?Nt z?js9s7M{?Mi}neY)4BEZ_df|>e6^#xjha^4itk9}Xd)*giI~wjXz~H>syE0SZqVq% z!8z!UkpMVnVEYx3zT{Se!m7WXuh?7HGDDH^iIjN&+}rL)(i3Ne#A2b5>Nn(Z`@z#? z<0f*+od%oQn+&D0_a7b^pKZB}&fS?+auDUNq1+pNNSV3~u6dE;Q5TYa#);&-T#1UR}=Mvf(3Y(p@>c_t4|SLOQuP5-|J{!cV;%_2<{D>(hj SQv2o~MN}0vkrncm!T$p`X?SV? literal 0 HcmV?d00001 diff --git a/example-apps/focus/finance/truffile.yaml b/example-apps/focus/finance/truffile.yaml new file mode 100644 index 0000000..6d64ce9 --- /dev/null +++ b/example-apps/focus/finance/truffile.yaml @@ -0,0 +1,38 @@ +metadata: + name: Finance + type: foreground + description: | + Financial data analyst tools for your Truffle. Get stock prices, company info, + market news, crypto rates, and economic indicators powered by Alpha Vantage. + process: + cmd: + - python + - app.py + working_directory: / + environment: + PYTHONUNBUFFERED: "1" + icon_file: ./icon.png +steps: + - name: Welcome + type: welcome + content: | + Finance provides tools for real-time market data and financial analysis. + + Available tools: + - get_stock_price: Current price for any ticker + - get_stock_history: Historical daily prices + - get_company_overview: Company profile and metrics + - search_ticker: Find ticker symbols + - get_market_news: Latest news with sentiment + - get_top_movers: Gainers, losers, most active + - get_crypto_price: Cryptocurrency rates + - get_economic_indicator: GDP, CPI, unemployment, etc. + - name: Copy application files + type: files + files: + - source: ./app.py + destination: ./app.py + - name: Install dependencies + type: bash + run: | + pip install --no-cache-dir mcp requests diff --git a/genesis/client.py b/genesis/client.py index 5e3b71f..19503c0 100644 --- a/genesis/client.py +++ b/genesis/client.py @@ -170,6 +170,101 @@ async def upload(self, src: str | Path, dest: str) -> UploadResult: raise raise RuntimeError("upload failed after retries") + def _load_icon(self, icon: str | Path | bytes | None) -> bytes | None: + if icon is None: + return None + if isinstance(icon, bytes): + return icon + path = Path(icon).expanduser() + if path.exists() and path.is_file(): + return path.read_bytes() + return None + + async def finish_foreground( + self, + name: str, + cmd: str, + args: list[str], + cwd: str = "/", + env: list[str] | None = None, + description: str = "", + icon: str | Path | bytes | None = None, + ) -> FinishBuildSessionResponse: + if not self.stub or not self.app_uuid: + raise RuntimeError("no active build session") + req = FinishBuildSessionRequest() + req.app_uuid = self.app_uuid + req.discard = False + req.foreground.metadata.name = name + if description: + req.foreground.metadata.description = description + icon_data = self._load_icon(icon) + if icon_data: + req.foreground.metadata.icon.png_data = icon_data + req.process.cmd = cmd + req.process.args.extend(args) + if env: + req.process.env.extend(env) + req.process.cwd = cwd + resp: FinishBuildSessionResponse = await self.stub.Builder_FinishBuildSession( + req, metadata=self._metadata + ) + self.app_uuid = None + self.access_path = None + if resp.HasField("error"): + raise RuntimeError(f"finish failed: {resp.error.error} - {resp.error.details}") + return resp + + async def finish_background( + self, + name: str, + cmd: str, + args: list[str], + cwd: str = "/", + env: list[str] | None = None, + description: str = "", + icon: str | Path | bytes | None = None, + schedule: str = "interval", + interval_seconds: int = 60, + daily_start_hour: int | None = None, + daily_start_minute: int = 0, + daily_end_hour: int | None = None, + daily_end_minute: int = 0, + ) -> FinishBuildSessionResponse: + if not self.stub or not self.app_uuid: + raise RuntimeError("no active build session") + req = FinishBuildSessionRequest() + req.app_uuid = self.app_uuid + req.discard = False + req.background.metadata.name = name + if description: + req.background.metadata.description = description + icon_data = self._load_icon(icon) + if icon_data: + req.background.metadata.icon.png_data = icon_data + if schedule == "always": + req.background.runtime_policy.always.SetInParent() + elif schedule == "interval": + req.background.runtime_policy.interval.duration.seconds = interval_seconds + if daily_start_hour is not None and daily_end_hour is not None: + req.background.runtime_policy.interval.schedule.daily_window.daily_start_time.hour = daily_start_hour + req.background.runtime_policy.interval.schedule.daily_window.daily_start_time.minute = daily_start_minute + req.background.runtime_policy.interval.schedule.daily_window.daily_end_time.hour = daily_end_hour + req.background.runtime_policy.interval.schedule.daily_window.daily_end_time.minute = daily_end_minute + req.process.cmd = cmd + req.process.args.extend(args) + if env: + req.process.env.extend(env) + req.process.cwd = cwd + resp: FinishBuildSessionResponse = await self.stub.Builder_FinishBuildSession( + req, metadata=self._metadata + ) + self.app_uuid = None + self.access_path = None + if resp.HasField("error"): + raise RuntimeError(f"finish failed: {resp.error.error} - {resp.error.details}") + return resp + async def discard(self) -> FinishBuildSessionResponse | None: if not self.stub or not self.app_uuid: return None diff --git a/pyproject.toml b/pyproject.toml index c7830e8..dd74c0f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,6 +20,7 @@ dependencies = [ "grpcio>=1.60.0", "protobuf>=4.25.0", "httpx>=0.27.0", + "pyyaml>=6.0", ] [project.optional-dependencies] From f357583150823fe01e4a0a4038e8cf85796e5d36 Mon Sep 17 00:00:00 2001 From: notabd7-deepshard Date: Thu, 29 Jan 2026 01:18:21 -0800 Subject: [PATCH 05/15] starter doc for ambient and focuses --- APP.md | 412 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 412 insertions(+) create mode 100644 APP.md diff --git a/APP.md b/APP.md new file mode 100644 index 0000000..480e4f7 --- /dev/null +++ b/APP.md @@ -0,0 +1,412 @@ +# Building TruffleOS Apps +tell ralph i said hi + +this is without cli +sketch for what docs will be structured like and u can just feed this to whatever model with example app code to make u an app or ven an exisiting mcp and have it port it + +TruffleOS apps come in two flavors: **Focus** and **Background**. + +## App Types + +| Type | When it runs | What it does | +|------|--------------|--------------| +| **Focus** | Always on, waiting | Exposes tools the AI can call on demand | +| **Background** | On a schedule | Runs periodically, posts to user's feed | + +--- + +## Focus Apps + +Focus apps are MCP servers that expose tools to the device AI. When the user asks a question, the AI can call your tools. + +### Example: Finance App + +```python +from mcp.server.fastmcp import FastMCP + +HOST = "0.0.0.0" +PORT = 8000 + +mcp = FastMCP("finance", stateless_http=True, host=HOST, port=PORT) + +@mcp.tool("get_stock_price", description="Get current price for a stock ticker") +async def get_stock_price(symbol: str) -> str: + # fetch from API... + return f"{symbol}: $256.44" + +@mcp.tool("search_ticker", description="Search for stock ticker symbols") +async def search_ticker(keywords: str) -> str: + # search API... + return "AAPL - Apple Inc." + +def main(): + print(f"Starting MCP server on {HOST}:{PORT}") + mcp.run(transport="streamable-http") + +if __name__ == "__main__": + main() +``` + +### How Tool Calls Work + +1. User asks: "What's Apple stock at?" +2. Truffle sees your `get_stock_price` tool +3. calls `get_stock_price("AAPL")` +4. Your app returns the result +5. Truffle responds to you with the data + +### Focus App Requirements + +- Must run an MCP server on `0.0.0.0:8000` +- Use `transport="streamable-http"` +- Tools are defined with `@mcp.tool()` decorator +- Each tool needs a `description` for the AI to understand when to use it + +--- + +## Background Apps + +Background apps run on a schedule and post content to the user's feed. + +### Example: Hedge App + +```python +import os +from datetime import datetime +from gourmet.ambient import run_ambient, AmbientContext + +TICKERS = os.getenv("HEDGE_TICKERS", "AAPL,MSFT").split(",") + +def hedge_ambient(ctx: AmbientContext): + for symbol in TICKERS: + # fetch stock data... + price = 256.44 + + ctx.bg.post_to_feed( + title=f"📈 {symbol}: ${price}", + body=f"{symbol} is currently trading at ${price}", + src_uri=f"https://finance.yahoo.com/quote/{symbol}", + media_uris=["https://example.com/chart.png"], # optional + content_timestamp=datetime.now() + ) + +if __name__ == "__main__": + run_ambient(hedge_ambient) +``` + +### post_to_feed() Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `title` | str | yes | Card title shown in feed | +| `body` | str | yes | Main content text | +| `src_uri` | str | no | Link to original source | +| `media_uris` | list[str] | no | List of image URLs to display | +| `content_timestamp` | datetime | no | When the content was created | + +### Background App Requirements + +- Import `run_ambient` and `AmbientContext` from `gourmet.ambient` +- Define a function that takes `ctx: AmbientContext` +- Call `run_ambient(your_function)` in main +- Use `ctx.bg.post_to_feed()` to post content + +--- + +## truffile.yaml + +The `truffile.yaml` defines your app's metadata and installation steps. + +### Focus App Example + +```yaml +metadata: + name: Finance + type: foreground + description: | + Financial data tools for your Truffle. + process: + cmd: + - python + - app.py + working_directory: / + environment: + PYTHONUNBUFFERED: "1" + icon_file: ./icon.png + +steps: + - name: Welcome + type: welcome + content: | + This app provides financial data tools. + + - name: Copy files + type: files + files: + - source: ./app.py + destination: ./app.py + + - name: Install dependencies + type: bash + run: | + pip install mcp requests +``` + +### Background App Example + +```yaml +metadata: + name: Hedge + type: background + description: | + Track your stock portfolio. + process: + cmd: + - python + - app.py + working_directory: / + environment: + PYTHONUNBUFFERED: "1" + HEDGE_TICKERS: "AAPL,MSFT,GOOGL" + icon_file: ./icon.png + default_schedule: + type: interval + interval: + duration: 5m + schedule: + daily_window: "06:00-22:00" + allowed_days: [mon, tue, wed, thu, fri] + +steps: + - name: Copy files + type: files + files: + - source: ./app.py + destination: ./app.py + + - name: Install dependencies + type: bash + run: | + pip install requests + pip install gourmet +``` + +--- + +## Metadata Fields + +| Field | Required | Description | +|-------|----------|-------------| +| `name` | yes | App name shown to user | +| `type` | yes | `foreground` or `background` | +| `description` | no | What the app does | +| `process.cmd` | yes | Command to run the app | +| `process.working_directory` | no | Working dir (default: `/`) | +| `process.environment` | no | Environment variables | +| `icon_file` | no | Path to PNG icon | +| `default_schedule` | background only | When the app runs | + +--- + +## Schedule Types (Background Apps Only) + +### 1. Interval + +Run every X time period. + +```yaml +default_schedule: + type: interval + interval: + duration: 5m # required: how often + schedule: # optional: constraints + daily_window: "09:00-17:00" + allowed_days: [mon, tue, wed, thu, fri] +``` + +### 2. Times + +Run at specific times each day. + +```yaml +default_schedule: + type: times + times: + run_times: # required: list of times + - "09:00" + - "12:00" + - "18:00" + allowed_days: [mon, wed, fri] # optional +``` + +### 3. Always + +Run continuously (never stops). + +```yaml +default_schedule: + type: always +``` + +--- + +## Duration Format + +| Format | Example | Meaning | +|--------|---------|---------| +| `Xms` | `500ms` | 500 milliseconds | +| `Xs` | `30s` | 30 seconds | +| `Xm` | `5m` | 5 minutes | +| `Xh` | `2h` | 2 hours | +| `Xd` | `1d` | 1 day | + +--- + +## Daily Window + +Restrict when the app can run during the day. + +```yaml +daily_window: "09:00-17:30" +``` + +Or verbose format: + +```yaml +daily_window: + start: "09:00" + end: "17:30" +``` + +--- + +## Day Restrictions + +Use ONE of these (not both): + +**allowed_days** - only run on these days: +```yaml +allowed_days: [mon, tue, wed, thu, fri] +``` + +**forbidden_days** - don't run on these days: +```yaml +forbidden_days: [sat, sun] +``` + +Valid day values: `sun`, `mon`, `tue`, `wed`, `thu`, `fri`, `sat` + +--- + +## Installation Step Types + +### files + +Copy files from your app directory to the container. + +```yaml +- name: Copy files + type: files + files: + - source: ./app.py + destination: ./app.py + - source: ./config.yaml + destination: ./config.yaml + permissions: 600 # optional +``` + +### bash + +Run shell commands. + +```yaml +- name: Install dependencies + type: bash + run: | + pip install requests + apk add --no-cache curl +``` + +### welcome + +Show a welcome message to the user. + +```yaml +- name: Welcome + type: welcome + content: | + Welcome to my app! + It does cool things. +``` + +### text + +Prompt user for text input (saved to env vars). + +```yaml +- name: Configure API Key + type: text + content: | + Enter your API key to continue. + fields: + - name: api_key + label: API Key + type: password + env: MY_API_KEY + placeholder: "sk-..." +``` + +Field types: `text`, `password`, `number` + +### vnc + +Open a VNC window for user interaction (login flows, etc). + +```yaml +- name: Sign into Twitter + type: vnc + cmd: + - python + - onboard.py + closes_on_complete: true + description: | + Sign into your account in the browser window. +``` + +--- + +## Environment Variables + +Set in `process.environment`: + +```yaml +process: + environment: + PYTHONUNBUFFERED: "1" # always use this for Python apps + MY_API_KEY: "secret" + DEBUG: "true" +``` + +Or collected from user input via `text` steps (uses `env` field). + +--- + +## Quick Reference + +### Minimal Focus App + +``` +my-focus-app/ +├── app.py # MCP server with @mcp.tool() functions +├── truffile.yaml # type: foreground +└── icon.png # optional +``` + +### Minimal Background App + +``` +my-bg-app/ +├── app.py # Uses run_ambient() + post_to_feed() +├── truffile.yaml # type: background + default_schedule +└── icon.png # optional +``` From e0661cc493f60f6c75fbc4bd4898f6cca8e077a5 Mon Sep 17 00:00:00 2001 From: notabd7-deepshard Date: Thu, 29 Jan 2026 01:54:09 -0800 Subject: [PATCH 06/15] mcp setup as well --- APP.md | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/APP.md b/APP.md index 480e4f7..8125954 100644 --- a/APP.md +++ b/APP.md @@ -62,6 +62,48 @@ if __name__ == "__main__": - Tools are defined with `@mcp.tool()` decorator - Each tool needs a `description` for the AI to understand when to use it +--- + +## Local Development (Focus Apps) + +You can run your MCP server locally on your machine instead of deploying to the device as well. This is great for fast iteration during development. + +### 1. Run the server locally + +```bash +cd your-app-directory +python app.py +``` + +You should see: +``` +Starting MCP server on 0.0.0.0:8000 +INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) +``` + +### 2. Get your machine's IP + +```bash +# macOS +ipconfig getifaddr en0 + +# Linux +hostname -I | awk '{print $1}' +``` + +### 3. Add MCP in TruffleOS Settings + +Go to Settings → Add New MCP and enter: + +| Field | Value | +|-------|-------| +| **Name** | Your App Name | +| **Server URL** | `192.168.X.X` (your IP from step 2) | +| **Port** | `8000` | +| **Path** | `mcp` | + +Now you can use your tools immediately without deploying. Changes to your code take effect as soon as you restart `python app.py`. + --- ## Background Apps From 99ca4266134092cf4cb304bc3aacddf9dd762b0e Mon Sep 17 00:00:00 2001 From: notabd7-deepshard Date: Thu, 29 Jan 2026 19:33:25 -0800 Subject: [PATCH 07/15] works pretty well, sdk done --- genesis/__init__.py | 13 +- genesis/cli.py | 411 ++++++++++++++++++++++++++++++++++++++++++++ genesis/client.py | 55 ++++++ genesis/storage.py | 94 ++++++++++ pyproject.toml | 4 + 5 files changed, 575 insertions(+), 2 deletions(-) create mode 100644 genesis/cli.py create mode 100644 genesis/storage.py diff --git a/genesis/__init__.py b/genesis/__init__.py index 5c77188..7a81239 100644 --- a/genesis/__init__.py +++ b/genesis/__init__.py @@ -3,6 +3,15 @@ except ImportError: __version__ = "0.1.dev0" -from .client import TruffleClient, ExecResult, UploadResult +from .client import TruffleClient, ExecResult, UploadResult, resolve_mdns, NewSessionStatus +from truffle.app.app_type_pb2 import AppType -__all__ = ["__version__", "TruffleClient", "ExecResult", "UploadResult"] +__all__ = [ + "__version__", + "TruffleClient", + "ExecResult", + "UploadResult", + "resolve_mdns", + "NewSessionStatus", + "AppType", +] diff --git a/genesis/cli.py b/genesis/cli.py new file mode 100644 index 0000000..da19f0a --- /dev/null +++ b/genesis/cli.py @@ -0,0 +1,411 @@ +import argparse +import asyncio +import ast +import signal +import sys +from pathlib import Path + +import yaml + +from genesis.storage import StorageService +from genesis.client import TruffleClient, resolve_mdns, NewSessionStatus + + +async def cmd_connect(args, storage: StorageService) -> int: + device_name = args.device + + print(f"Connecting to {device_name}...") + + hostname = f"{device_name}.local" + try: + ip = await resolve_mdns(hostname) + except RuntimeError as e: + print(f"Could not find device: {e}") + print() + print("Make sure:") + print(f" - {device_name} is powered on") + print(" - Device is connected to WiFi") + print(" - Your computer is on the same network") + return 1 + + address = f"{ip}:80" + existing_token = storage.get_token(device_name) + + if existing_token: + print("Validating existing token...") + client = TruffleClient(address, existing_token) + try: + await client.connect() + if await client.check_auth(): + storage.set_last_used(device_name) + print(f"Already connected to {device_name}") + await client.close() + return 0 + print("Token invalid, re-authenticating...") + except Exception: + pass + finally: + await client.close() + + print() + print("Make sure you have:") + print(" - Onboarded with the Truffle app") + print(" - Your User ID from the recovery codes") + print() + + user_id = input("Enter your User ID: ").strip() + if not user_id: + print("User ID is required") + return 1 + + client = TruffleClient(address, token="") + try: + await client.connect() + except Exception as e: + print(f"Failed to connect to device: {e}") + return 1 + + print() + print("Requesting authorization...") + print("Please approve the connection request on your Truffle device") + print("(waiting for approval...)") + + try: + status, token = await client.register_new_session(user_id) + except Exception as e: + print(f"Failed to register: {e}") + await client.close() + return 1 + + await client.close() + + if status.error == NewSessionStatus.NEW_SESSION_SUCCESS and token: + storage.set_token(device_name, token) + storage.set_last_used(device_name) + print() + print(f"Connected to {device_name}") + return 0 + elif status.error == NewSessionStatus.NEW_SESSION_TIMEOUT: + print() + print("Approval timed out. Please try again.") + return 1 + elif status.error == NewSessionStatus.NEW_SESSION_REJECTED: + print() + print("Request was rejected.") + return 1 + else: + print() + print(f"Failed to authenticate: {status.error}") + return 1 + + +def cmd_disconnect(args, storage: StorageService) -> int: + target = args.target + if target == "all": + storage.clear_all() + print("All device credentials cleared") + else: + if storage.remove_device(target): + print(f"Disconnected from {target} (credentials cleared)") + else: + print(f"No credentials found for {target}") + return 0 + + +def check_python_syntax(file_path: Path) -> tuple[bool, str]: + try: + with open(file_path) as f: + source = f.read() + ast.parse(source) + return True, "" + except SyntaxError as e: + return False, f"Line {e.lineno}: {e.msg}" + + +def validate_app_dir(app_dir: Path, app_type: str) -> tuple[bool, dict | None, list[str]]: + warnings = [] + + truffile = app_dir / "truffile.yaml" + if not truffile.exists(): + print(f"Error: No truffile.yaml found in {app_dir}") + return False, None, warnings + + try: + with open(truffile) as f: + config = yaml.safe_load(f) + except yaml.YAMLError as e: + print(f"Error: Invalid truffile.yaml: {e}") + return False, None, warnings + + meta = config.get("metadata", {}) + if not meta.get("name"): + print("Error: metadata.name is required in truffile.yaml") + return False, None, warnings + + cfg_type = meta.get("type", "") + if app_type == "ambient" and cfg_type not in ("background", "ambient", ""): + print(f"Error: This is a {cfg_type} app, not an ambient app") + print(f" Use: genesis deploy focus {app_dir.name}") + return False, None, warnings + elif app_type == "focus" and cfg_type not in ("foreground", "focus", ""): + print(f"Error: This is a {cfg_type} app, not a focus app") + print(f" Use: genesis deploy ambient {app_dir.name}") + return False, None, warnings + + icon_file = meta.get("icon_file") + if icon_file: + icon_path = app_dir / icon_file + if not icon_path.exists(): + warnings.append(f"Icon file not found: {icon_file}") + else: + warnings.append("No icon specified in truffile.yaml") + + for step in config.get("steps", []): + if step.get("type") == "files": + for f in step.get("files", []): + src = app_dir / f["source"] + if not src.exists(): + print(f"Error: Source file not found: {src}") + return False, None, warnings + if src.suffix == ".py": + ok, err = check_python_syntax(src) + if not ok: + print(f"Error: Syntax error in {src.name}: {err}") + return False, None, warnings + + return True, config, warnings + + +async def _do_deploy(client: TruffleClient, config: dict, app_dir: Path, app_type: str, device: str) -> int: + meta = config["metadata"] + name = meta["name"] + description = meta.get("description", "") + process = meta.get("process", {}) + cmd_list = process.get("cmd", ["python", "app.py"]) + cwd = process.get("working_directory", "/") + env_dict = process.get("environment", {}) + env = [f"{k}={v}" for k, v in env_dict.items()] + icon_file = meta.get("icon_file") + icon_path = (app_dir / icon_file) if icon_file and (app_dir / icon_file).exists() else None + + print(f"Connecting to {device}...") + await client.connect() + + print("Starting build session...") + await client.start_build() + print(f" Session: {client.app_uuid}") + + for step in config.get("steps", []): + if step.get("type") == "files": + for f in step.get("files", []): + src = app_dir / f["source"] + dest = f["destination"] + print(f"Uploading {src.name} -> {dest}") + result = await client.upload(src, dest) + print(f" {result.bytes} bytes, sha256={result.sha256[:12]}...") + + elif step.get("type") == "bash": + step_name = step.get("name", "bash") + print(f"Running: {step_name}") + async for ev, data in client.exec_stream(step["run"], cwd=cwd): + if ev == "log": + try: + import json + obj = json.loads(data) + line = obj.get("line", "") + except Exception: + line = data + print(f" {line}") + elif ev == "exit": + try: + import json + code = int(json.loads(data).get("code", 0)) + if code != 0: + print(f" Exit code: {code}") + raise RuntimeError(f"Step '{step_name}' failed with exit code {code}") + except (ValueError, KeyError): + pass + + print(f"Finishing as {app_type} app...") + + cmd = cmd_list[0] if cmd_list[0].startswith("/") else f"/usr/bin/{cmd_list[0]}" + + if app_type == "focus": + await client.finish_foreground( + name=name, + cmd=cmd, + args=cmd_list[1:], + cwd=cwd, + env=env, + description=description, + icon=icon_path, + ) + else: + schedule_cfg = meta.get("default_schedule", {}) + schedule_type = schedule_cfg.get("type", "interval") + interval_seconds = 60 + + if schedule_type == "interval": + interval_cfg = schedule_cfg.get("interval", {}) + duration_str = interval_cfg.get("duration", "1m") + if duration_str.endswith("m"): + interval_seconds = int(duration_str[:-1]) * 60 + elif duration_str.endswith("h"): + interval_seconds = int(duration_str[:-1]) * 3600 + elif duration_str.endswith("s"): + interval_seconds = int(duration_str[:-1]) + + await client.finish_background( + name=name, + cmd=cmd, + args=cmd_list[1:], + cwd=cwd, + env=env, + description=description, + icon=icon_path, + schedule=schedule_type, + interval_seconds=interval_seconds, + ) + + print() + print(f"Deployed: {name} ({app_type})") + return 0 + + +async def cmd_deploy(args, storage: StorageService) -> int: + app_type = args.type + app_dir = Path(args.path).resolve() + + if not app_dir.exists() or not app_dir.is_dir(): + print(f"Error: {app_dir} is not a valid directory") + return 1 + + print(f"Validating {app_type} app in {app_dir}...") + valid, config, warnings = validate_app_dir(app_dir, app_type) + if not valid: + return 1 + + for w in warnings: + print(f"Warning: {w}") + + device = storage.state.last_used_device + if not device: + print("Error: No device connected. Run 'genesis connect ' first.") + return 1 + + token = storage.get_token(device) + if not token: + print(f"Error: No token for {device}. Run 'genesis connect {device}' first.") + return 1 + + print(f"Resolving {device}...") + try: + ip = await resolve_mdns(f"{device}.local") + except RuntimeError as e: + print(f"Error: {e}") + return 1 + + address = f"{ip}:80" + client = TruffleClient(address, token=token) + deploy_task = None + + loop = asyncio.get_event_loop() + + def handle_sigint(): + print("\nInterrupted!") + if deploy_task and not deploy_task.done(): + deploy_task.cancel() + + loop.add_signal_handler(signal.SIGINT, handle_sigint) + + try: + deploy_task = asyncio.create_task(_do_deploy(client, config, app_dir, app_type, device)) + return await deploy_task + except asyncio.CancelledError: + print("Discarding build session...") + if client.app_uuid: + try: + await client.discard() + print("Session discarded.") + except Exception: + pass + return 130 + except Exception as e: + print(f"Error: {e}") + if client.app_uuid: + print("Discarding build session...") + try: + await client.discard() + except Exception: + pass + return 1 + finally: + loop.remove_signal_handler(signal.SIGINT) + await client.close() + + +def cmd_list(args, storage: StorageService) -> int: + what = args.what + if what == "apps": + print("list apps") + print("(not implemented yet)") + elif what == "devices": + devices = storage.list_devices() + if not devices: + print("No connected devices") + else: + print("Connected devices:") + for d in devices: + marker = " (last used)" if d == storage.state.last_used_device else "" + print(f" {d}{marker}") + return 0 + + +def main() -> int: + parser = argparse.ArgumentParser( + prog="genesis", + description="Genesis - TruffleOS SDK CLI", + ) + subparsers = parser.add_subparsers(dest="command", help="Available commands") + + p_connect = subparsers.add_parser("connect", help="Connect to a Truffle device") + p_connect.add_argument("device", help="Device name (e.g. truffle-6272)") + + p_disconnect = subparsers.add_parser("disconnect", help="Disconnect from a device") + p_disconnect.add_argument( + "target", help="Device name or 'all' to clear all credentials" + ) + + p_deploy = subparsers.add_parser("deploy", help="Deploy an app to the device") + p_deploy.add_argument( + "type", choices=["ambient", "focus"], help="App type (ambient or focus)" + ) + p_deploy.add_argument("path", help="Path to app directory") + + p_list = subparsers.add_parser("list", help="List apps or devices") + p_list.add_argument( + "what", choices=["apps", "devices"], help="What to list (apps or devices)" + ) + + args = parser.parse_args() + + if args.command is None: + parser.print_help() + return 0 + + storage = StorageService() + + if args.command == "connect": + return asyncio.run(cmd_connect(args, storage)) + elif args.command == "disconnect": + return cmd_disconnect(args, storage) + elif args.command == "deploy": + return asyncio.run(cmd_deploy(args, storage)) + elif args.command == "list": + return cmd_list(args, storage) + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/genesis/client.py b/genesis/client.py index 19503c0..e141408 100644 --- a/genesis/client.py +++ b/genesis/client.py @@ -1,11 +1,14 @@ import asyncio import json +import platform +import socket from dataclasses import dataclass from pathlib import Path from typing import AsyncIterator import grpc from grpc import aio import httpx +from google.protobuf import empty_pb2 from truffle.os.truffleos_pb2_grpc import TruffleOSStub from truffle.os.builder_pb2 import ( StartBuildSessionRequest, @@ -13,9 +16,35 @@ FinishBuildSessionRequest, FinishBuildSessionResponse, ) +from truffle.os.client_session_pb2 import ( + RegisterNewSessionRequest, + RegisterNewSessionResponse, + NewSessionStatus, +) +from truffle.os.client_metadata_pb2 import ClientMetadata from truffle.app.app_type_pb2 import AppType +def get_client_metadata() -> ClientMetadata: + from genesis import __version__ + metadata = ClientMetadata() + metadata.device = platform.node() + metadata.platform = platform.platform() + metadata.version = f"genesis-{__version__}-{platform.python_version()}" + return metadata + + +async def resolve_mdns(hostname: str) -> str: + if ".local" not in hostname: + return hostname + loop = asyncio.get_event_loop() + try: + resolved = await loop.run_in_executor(None, socket.gethostbyname, hostname) + return resolved + except socket.gaierror as e: + raise RuntimeError(f"Failed to resolve {hostname} - is the device on the same network? ({e})") + + @dataclass class ExecResult: exit_code: int @@ -54,6 +83,32 @@ async def connect(self, timeout: float = 15.0): await asyncio.wait_for(self.channel.channel_ready(), timeout=timeout) self.stub = TruffleOSStub(self.channel) + def update_token(self, token: str): + self.token = token + + async def check_auth(self) -> bool: + if not self.stub or not self.token: + return False + try: + await self.stub.System_GetInfo(empty_pb2.Empty(), metadata=self._metadata) + return True + except aio.AioRpcError as e: + if e.code() == grpc.StatusCode.UNAUTHENTICATED: + return False + raise + + async def register_new_session(self, user_id: str) -> tuple[NewSessionStatus, str | None]: + if not self.stub: + raise RuntimeError("not connected") + req = RegisterNewSessionRequest() + req.user_id = user_id + req.metadata.CopyFrom(get_client_metadata()) + resp: RegisterNewSessionResponse = await self.stub.Client_RegisterNewSession(req) + if resp.status.error == NewSessionStatus.NEW_SESSION_SUCCESS: + self.token = resp.token + return resp.status, resp.token + return resp.status, None + async def start_build(self, app_type: AppType = AppType.APP_TYPE_BACKGROUND) -> StartBuildSessionResponse: if not self.stub: raise RuntimeError("not connected") diff --git a/genesis/storage.py b/genesis/storage.py new file mode 100644 index 0000000..25e9e5b --- /dev/null +++ b/genesis/storage.py @@ -0,0 +1,94 @@ +import json +import platformdirs +from pathlib import Path +from dataclasses import dataclass, field + + +@dataclass +class StoredDevice: + name: str + token: str + + +@dataclass +class StoredState: + devices: list[StoredDevice] = field(default_factory=list) + last_used_device: str | None = None + client_user_id: str | None = None + + +def get_storage_dir() -> Path: + dir_path = Path(platformdirs.user_data_dir("genesis")) + dir_path.mkdir(parents=True, exist_ok=True) + return dir_path + + +class StorageService: + def __init__(self): + self.storage_dir = get_storage_dir() + self.state_file = self.storage_dir / "state.json" + self.state = self._load_state() + + def _load_state(self) -> StoredState: + if not self.state_file.exists(): + return StoredState() + try: + with open(self.state_file, "r") as f: + data = json.load(f) + devices = [StoredDevice(**d) for d in data.get("devices", [])] + return StoredState( + devices=devices, + last_used_device=data.get("last_used_device"), + client_user_id=data.get("client_user_id"), + ) + except (json.JSONDecodeError, KeyError): + return StoredState() + + def save(self) -> None: + state_dict = { + "devices": [{"name": d.name, "token": d.token} for d in self.state.devices], + "last_used_device": self.state.last_used_device, + "client_user_id": self.state.client_user_id, + } + with open(self.state_file, "w") as f: + json.dump(state_dict, f, indent=4) + + def get_token(self, device_name: str) -> str | None: + for device in self.state.devices: + if device.name == device_name: + return device.token + return None + + def has_token(self, device_name: str) -> bool: + token = self.get_token(device_name) + return token is not None and len(token) > 0 + + def set_token(self, device_name: str, token: str) -> None: + for device in self.state.devices: + if device.name == device_name: + device.token = token + self.save() + return + self.state.devices.append(StoredDevice(name=device_name, token=token)) + self.save() + + def set_last_used(self, device_name: str) -> None: + self.state.last_used_device = device_name + self.save() + + def remove_device(self, device_name: str) -> bool: + for i, device in enumerate(self.state.devices): + if device.name == device_name: + self.state.devices.pop(i) + if self.state.last_used_device == device_name: + self.state.last_used_device = None + self.save() + return True + return False + + def clear_all(self) -> None: + self.state = StoredState() + self.save() + + def list_devices(self) -> list[str]: + return [d.name for d in self.state.devices] diff --git a/pyproject.toml b/pyproject.toml index dd74c0f..c7071f1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,8 +21,12 @@ dependencies = [ "protobuf>=4.25.0", "httpx>=0.27.0", "pyyaml>=6.0", + "platformdirs>=3.10.0", ] +[project.scripts] +genesis = "genesis.cli:main" + [project.optional-dependencies] dev = [ "pytest>=8.0.0", From f3aac08e0d25e923436ef2a9b2d06df9d890ec9a Mon Sep 17 00:00:00 2001 From: notabd7-deepshard Date: Thu, 29 Jan 2026 20:18:12 -0800 Subject: [PATCH 08/15] list app, ctrl c handling, nice logs, and make it pretty but still simple --- genesis/cli.py | 405 ++++++++++++++++++++++++++++++++++++---------- genesis/client.py | 10 ++ 2 files changed, 327 insertions(+), 88 deletions(-) diff --git a/genesis/cli.py b/genesis/cli.py index da19f0a..832e7e7 100644 --- a/genesis/cli.py +++ b/genesis/cli.py @@ -3,6 +3,8 @@ import ast import signal import sys +import threading +import time from pathlib import Path import yaml @@ -11,91 +13,180 @@ from genesis.client import TruffleClient, resolve_mdns, NewSessionStatus +# ANSI colors +class C: + RED = "\033[91m" + GREEN = "\033[92m" + YELLOW = "\033[93m" + BLUE = "\033[94m" + MAGENTA = "\033[95m" + CYAN = "\033[96m" + DIM = "\033[2m" + BOLD = "\033[1m" + RESET = "\033[0m" + + +# Icons +MUSHROOM = "🍄‍🟫" +CHECK = "✓" +CROSS = "✗" +ARROW = "→" +DOT = "•" +WARN = "⚠" + + +class Spinner: + FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"] + + def __init__(self, message: str): + self.message = message + self.running = False + self.thread = None + self.frame_idx = 0 + + def _spin(self): + while self.running: + frame = self.FRAMES[self.frame_idx % len(self.FRAMES)] + sys.stdout.write(f"\r{C.CYAN}{frame}{C.RESET} {self.message}") + sys.stdout.flush() + self.frame_idx += 1 + time.sleep(0.08) + + def start(self): + self.running = True + self.thread = threading.Thread(target=self._spin, daemon=True) + self.thread.start() + + def stop(self, success: bool = True): + self.running = False + if self.thread: + self.thread.join(timeout=0.2) + icon = f"{C.GREEN}{CHECK}{C.RESET}" if success else f"{C.RED}{CROSS}{C.RESET}" + sys.stdout.write(f"\r{icon} {self.message}\n") + sys.stdout.flush() + + def fail(self, message: str | None = None): + self.running = False + if self.thread: + self.thread.join(timeout=0.2) + msg = message or self.message + sys.stdout.write(f"\r{C.RED}{CROSS}{C.RESET} {msg}\n") + sys.stdout.flush() + + +def error(msg: str): + print(f"{C.RED}{CROSS} Error:{C.RESET} {msg}") + + +def warn(msg: str): + print(f"{C.YELLOW}{WARN} Warning:{C.RESET} {msg}") + + +def success(msg: str): + print(f"{C.GREEN}{CHECK}{C.RESET} {msg}") + + +def info(msg: str): + print(f"{C.CYAN}{DOT}{C.RESET} {msg}") + + async def cmd_connect(args, storage: StorageService) -> int: device_name = args.device - print(f"Connecting to {device_name}...") + spinner = Spinner(f"Resolving {device_name}.local") + spinner.start() hostname = f"{device_name}.local" try: ip = await resolve_mdns(hostname) - except RuntimeError as e: - print(f"Could not find device: {e}") + spinner.stop(success=True) + except RuntimeError: + spinner.fail(f"Could not find {device_name}") print() - print("Make sure:") - print(f" - {device_name} is powered on") - print(" - Device is connected to WiFi") - print(" - Your computer is on the same network") + print(f" {C.DIM}Make sure:{C.RESET}") + print(f" {C.DIM}{DOT} {device_name} is powered on{C.RESET}") + print(f" {C.DIM}{DOT} Device is connected to WiFi{C.RESET}") + print(f" {C.DIM}{DOT} Your computer is on the same network{C.RESET}") return 1 address = f"{ip}:80" existing_token = storage.get_token(device_name) if existing_token: - print("Validating existing token...") + spinner = Spinner("Validating existing token") + spinner.start() client = TruffleClient(address, existing_token) try: await client.connect() if await client.check_auth(): + spinner.stop(success=True) storage.set_last_used(device_name) - print(f"Already connected to {device_name}") + success(f"Already connected to {C.BOLD}{device_name}{C.RESET}") await client.close() return 0 - print("Token invalid, re-authenticating...") + spinner.fail("Token invalid, re-authenticating") except Exception: - pass + spinner.fail("Token validation failed") finally: await client.close() print() - print("Make sure you have:") - print(" - Onboarded with the Truffle app") - print(" - Your User ID from the recovery codes") + print(f" {C.DIM}Make sure you have:{C.RESET}") + print(f" {C.DIM}{DOT} Onboarded with the Truffle app{C.RESET}") + print(f" {C.DIM}{DOT} Your User ID from the recovery codes{C.RESET}") print() - user_id = input("Enter your User ID: ").strip() + try: + user_id = input(f"{C.CYAN}?{C.RESET} Enter your User ID: ").strip() + except (KeyboardInterrupt, EOFError): + print() + raise KeyboardInterrupt() if not user_id: - print("User ID is required") + error("User ID is required") return 1 + spinner = Spinner("Connecting to device") + spinner.start() + client = TruffleClient(address, token="") try: await client.connect() + spinner.stop(success=True) except Exception as e: - print(f"Failed to connect to device: {e}") + spinner.fail(f"Failed to connect: {e}") return 1 print() - print("Requesting authorization...") - print("Please approve the connection request on your Truffle device") - print("(waiting for approval...)") + info("Requesting authorization...") + print(f" {C.DIM}Please approve on your Truffle device{C.RESET}") + + spinner = Spinner("Waiting for approval") + spinner.start() try: status, token = await client.register_new_session(user_id) except Exception as e: - print(f"Failed to register: {e}") + spinner.fail(f"Failed to register: {e}") await client.close() return 1 await client.close() if status.error == NewSessionStatus.NEW_SESSION_SUCCESS and token: + spinner.stop(success=True) storage.set_token(device_name, token) storage.set_last_used(device_name) print() - print(f"Connected to {device_name}") + success(f"Connected to {C.BOLD}{device_name}{C.RESET}") return 0 elif status.error == NewSessionStatus.NEW_SESSION_TIMEOUT: - print() - print("Approval timed out. Please try again.") + spinner.fail("Approval timed out") return 1 elif status.error == NewSessionStatus.NEW_SESSION_REJECTED: - print() - print("Request was rejected.") + spinner.fail("Request was rejected") return 1 else: - print() - print(f"Failed to authenticate: {status.error}") + spinner.fail(f"Authentication failed: {status.error}") return 1 @@ -103,12 +194,12 @@ def cmd_disconnect(args, storage: StorageService) -> int: target = args.target if target == "all": storage.clear_all() - print("All device credentials cleared") + success("All device credentials cleared") else: if storage.remove_device(target): - print(f"Disconnected from {target} (credentials cleared)") + success(f"Disconnected from {C.BOLD}{target}{C.RESET}") else: - print(f"No credentials found for {target}") + error(f"No credentials found for {target}") return 0 @@ -127,29 +218,29 @@ def validate_app_dir(app_dir: Path, app_type: str) -> tuple[bool, dict | None, l truffile = app_dir / "truffile.yaml" if not truffile.exists(): - print(f"Error: No truffile.yaml found in {app_dir}") + error(f"No truffile.yaml found in {app_dir}") return False, None, warnings try: with open(truffile) as f: config = yaml.safe_load(f) except yaml.YAMLError as e: - print(f"Error: Invalid truffile.yaml: {e}") + error(f"Invalid truffile.yaml: {e}") return False, None, warnings meta = config.get("metadata", {}) if not meta.get("name"): - print("Error: metadata.name is required in truffile.yaml") + error("metadata.name is required in truffile.yaml") return False, None, warnings cfg_type = meta.get("type", "") if app_type == "ambient" and cfg_type not in ("background", "ambient", ""): - print(f"Error: This is a {cfg_type} app, not an ambient app") - print(f" Use: genesis deploy focus {app_dir.name}") + error(f"This is a {cfg_type} app, not an ambient app") + print(f" {C.DIM}Use: genesis deploy focus {app_dir.name}{C.RESET}") return False, None, warnings elif app_type == "focus" and cfg_type not in ("foreground", "focus", ""): - print(f"Error: This is a {cfg_type} app, not a focus app") - print(f" Use: genesis deploy ambient {app_dir.name}") + error(f"This is a {cfg_type} app, not a focus app") + print(f" {C.DIM}Use: genesis deploy ambient {app_dir.name}{C.RESET}") return False, None, warnings icon_file = meta.get("icon_file") @@ -165,12 +256,12 @@ def validate_app_dir(app_dir: Path, app_type: str) -> tuple[bool, dict | None, l for f in step.get("files", []): src = app_dir / f["source"] if not src.exists(): - print(f"Error: Source file not found: {src}") + error(f"Source file not found: {src}") return False, None, warnings if src.suffix == ".py": ok, err = check_python_syntax(src) if not ok: - print(f"Error: Syntax error in {src.name}: {err}") + error(f"Syntax error in {src.name}: {err}") return False, None, warnings return True, config, warnings @@ -188,25 +279,31 @@ async def _do_deploy(client: TruffleClient, config: dict, app_dir: Path, app_typ icon_file = meta.get("icon_file") icon_path = (app_dir / icon_file) if icon_file and (app_dir / icon_file).exists() else None - print(f"Connecting to {device}...") + spinner = Spinner(f"Connecting to {device}") + spinner.start() await client.connect() + spinner.stop(success=True) - print("Starting build session...") + spinner = Spinner("Starting build session") + spinner.start() await client.start_build() - print(f" Session: {client.app_uuid}") + spinner.stop(success=True) + print(f" {C.DIM}Session: {client.app_uuid}{C.RESET}") for step in config.get("steps", []): if step.get("type") == "files": for f in step.get("files", []): src = app_dir / f["source"] dest = f["destination"] - print(f"Uploading {src.name} -> {dest}") + spinner = Spinner(f"Uploading {src.name} {ARROW} {dest}") + spinner.start() result = await client.upload(src, dest) - print(f" {result.bytes} bytes, sha256={result.sha256[:12]}...") + spinner.stop(success=True) + print(f" {C.DIM}{result.bytes} bytes, sha256={result.sha256[:12]}...{C.RESET}") elif step.get("type") == "bash": step_name = step.get("name", "bash") - print(f"Running: {step_name}") + info(f"Running: {step_name}") async for ev, data in client.exec_stream(step["run"], cwd=cwd): if ev == "log": try: @@ -215,18 +312,19 @@ async def _do_deploy(client: TruffleClient, config: dict, app_dir: Path, app_typ line = obj.get("line", "") except Exception: line = data - print(f" {line}") + print(f" {C.DIM}{line}{C.RESET}") elif ev == "exit": try: import json code = int(json.loads(data).get("code", 0)) if code != 0: - print(f" Exit code: {code}") + error(f"Exit code: {code}") raise RuntimeError(f"Step '{step_name}' failed with exit code {code}") except (ValueError, KeyError): pass - print(f"Finishing as {app_type} app...") + spinner = Spinner(f"Finishing as {app_type} app") + spinner.start() cmd = cmd_list[0] if cmd_list[0].startswith("/") else f"/usr/bin/{cmd_list[0]}" @@ -267,8 +365,9 @@ async def _do_deploy(client: TruffleClient, config: dict, app_dir: Path, app_typ interval_seconds=interval_seconds, ) + spinner.stop(success=True) print() - print(f"Deployed: {name} ({app_type})") + success(f"Deployed: {C.BOLD}{name}{C.RESET} ({app_type})") return 0 @@ -277,32 +376,36 @@ async def cmd_deploy(args, storage: StorageService) -> int: app_dir = Path(args.path).resolve() if not app_dir.exists() or not app_dir.is_dir(): - print(f"Error: {app_dir} is not a valid directory") + error(f"{app_dir} is not a valid directory") return 1 - print(f"Validating {app_type} app in {app_dir}...") + info(f"Validating {app_type} app in {app_dir.name}") valid, config, warnings = validate_app_dir(app_dir, app_type) if not valid: return 1 for w in warnings: - print(f"Warning: {w}") + warn(w) device = storage.state.last_used_device if not device: - print("Error: No device connected. Run 'genesis connect ' first.") + error("No device connected") + print(f" {C.DIM}Run: genesis connect {C.RESET}") return 1 token = storage.get_token(device) if not token: - print(f"Error: No token for {device}. Run 'genesis connect {device}' first.") + error(f"No token for {device}") + print(f" {C.DIM}Run: genesis connect {device}{C.RESET}") return 1 - print(f"Resolving {device}...") + spinner = Spinner(f"Resolving {device}") + spinner.start() try: ip = await resolve_mdns(f"{device}.local") + spinner.stop(success=True) except RuntimeError as e: - print(f"Error: {e}") + spinner.fail(str(e)) return 1 address = f"{ip}:80" @@ -322,85 +425,211 @@ def handle_sigint(): deploy_task = asyncio.create_task(_do_deploy(client, config, app_dir, app_type, device)) return await deploy_task except asyncio.CancelledError: - print("Discarding build session...") + print() + spinner = Spinner("Discarding build session") + spinner.start() if client.app_uuid: try: await client.discard() - print("Session discarded.") + spinner.stop(success=True) except Exception: - pass + spinner.fail("Failed to discard") return 130 except Exception as e: - print(f"Error: {e}") + error(str(e)) if client.app_uuid: - print("Discarding build session...") + spinner = Spinner("Discarding build session") + spinner.start() try: await client.discard() + spinner.stop(success=True) except Exception: - pass + spinner.fail("Failed to discard") return 1 finally: loop.remove_signal_handler(signal.SIGINT) await client.close() +async def cmd_list_apps(storage: StorageService) -> int: + device = storage.state.last_used_device + if not device: + error("No device connected") + print(f" {C.DIM}Run: genesis connect {C.RESET}") + return 1 + + token = storage.get_token(device) + if not token: + error(f"No token for {device}") + print(f" {C.DIM}Run: genesis connect {device}{C.RESET}") + return 1 + + spinner = Spinner(f"Connecting to {device}") + spinner.start() + + try: + ip = await resolve_mdns(f"{device}.local") + except RuntimeError as e: + spinner.fail(str(e)) + return 1 + + address = f"{ip}:80" + client = TruffleClient(address, token=token) + + try: + await client.connect() + foreground, background = await client.get_all_apps() + spinner.stop(success=True) + + if not foreground and not background: + print(f" {C.DIM}No apps installed{C.RESET}") + return 0 + + print() + if foreground: + print(f"{C.BOLD}Focus Apps{C.RESET}") + for app in foreground: + print(f" {C.CYAN}{DOT}{C.RESET} {app.metadata.name}") + if app.metadata.description: + desc = app.metadata.description.strip().split('\n')[0][:55] + print(f" {C.DIM}{desc}{C.RESET}") + + if background: + if foreground: + print() + print(f"{C.BOLD}Ambient Apps{C.RESET}") + for app in background: + schedule = "" + if app.runtime_policy.HasField("interval"): + secs = app.runtime_policy.interval.duration.seconds + if secs >= 3600: + schedule = f"every {secs // 3600}h" + elif secs >= 60: + schedule = f"every {secs // 60}m" + else: + schedule = f"every {secs}s" + elif app.runtime_policy.HasField("always"): + schedule = "always" + print(f" {C.CYAN}{DOT}{C.RESET} {app.metadata.name} {C.DIM}({schedule}){C.RESET}") + if app.metadata.description: + desc = app.metadata.description.strip().split('\n')[0][:55] + print(f" {C.DIM}{desc}{C.RESET}") + + print() + print(f"{C.DIM}Total: {len(foreground)} focus, {len(background)} ambient{C.RESET}") + return 0 + + except Exception as e: + spinner.fail(str(e)) + return 1 + finally: + await client.close() + + +def run_async(coro): + try: + return asyncio.run(coro) + except KeyboardInterrupt: + print(f"\r{C.RED}{CROSS} Cancelled{C.RESET} ") + return 130 + + def cmd_list(args, storage: StorageService) -> int: what = args.what if what == "apps": - print("list apps") - print("(not implemented yet)") + return run_async(cmd_list_apps(storage)) elif what == "devices": devices = storage.list_devices() if not devices: - print("No connected devices") + print(f" {C.DIM}No connected devices{C.RESET}") else: - print("Connected devices:") + print(f"{C.BOLD}Connected Devices{C.RESET}") for d in devices: - marker = " (last used)" if d == storage.state.last_used_device else "" - print(f" {d}{marker}") + if d == storage.state.last_used_device: + print(f" {C.GREEN}{DOT}{C.RESET} {d} {C.DIM}(active){C.RESET}") + else: + print(f" {C.CYAN}{DOT}{C.RESET} {d}") return 0 +def print_help(): + print(f"{MUSHROOM} {C.BOLD}Genesis{C.RESET} - TruffleOS SDK") + print() + print(f"{C.BOLD}Usage:{C.RESET} genesis [options]") + print() + print(f"{C.BOLD}Commands:{C.RESET}") + print(f" {C.BLUE}connect{C.RESET} Connect to a Truffle device") + print(f" {C.BLUE}disconnect{C.RESET} Disconnect and clear credentials") + print(f" {C.BLUE}deploy{C.RESET} Deploy an app to the device") + print(f" {C.BLUE}list{C.RESET} List installed apps or devices") + print() + print(f"{C.BOLD}Examples:{C.RESET}") + print(f" {C.DIM}genesis connect truffle-6272{C.RESET}") + print(f" {C.DIM}genesis deploy ambient ./my-app{C.RESET}") + print(f" {C.DIM}genesis list apps{C.RESET}") + print() + + def main() -> int: + if len(sys.argv) == 1 or sys.argv[1] in ("-h", "--help"): + print_help() + return 0 + parser = argparse.ArgumentParser( prog="genesis", description="Genesis - TruffleOS SDK CLI", + add_help=False, ) - subparsers = parser.add_subparsers(dest="command", help="Available commands") + subparsers = parser.add_subparsers(dest="command") - p_connect = subparsers.add_parser("connect", help="Connect to a Truffle device") - p_connect.add_argument("device", help="Device name (e.g. truffle-6272)") + p_connect = subparsers.add_parser("connect", add_help=False) + p_connect.add_argument("device", nargs="?") - p_disconnect = subparsers.add_parser("disconnect", help="Disconnect from a device") - p_disconnect.add_argument( - "target", help="Device name or 'all' to clear all credentials" - ) + p_disconnect = subparsers.add_parser("disconnect", add_help=False) + p_disconnect.add_argument("target", nargs="?") - p_deploy = subparsers.add_parser("deploy", help="Deploy an app to the device") - p_deploy.add_argument( - "type", choices=["ambient", "focus"], help="App type (ambient or focus)" - ) - p_deploy.add_argument("path", help="Path to app directory") + p_deploy = subparsers.add_parser("deploy", add_help=False) + p_deploy.add_argument("type", choices=["ambient", "focus"], nargs="?") + p_deploy.add_argument("path", nargs="?") - p_list = subparsers.add_parser("list", help="List apps or devices") - p_list.add_argument( - "what", choices=["apps", "devices"], help="What to list (apps or devices)" - ) + p_list = subparsers.add_parser("list", add_help=False) + p_list.add_argument("what", choices=["apps", "devices"], nargs="?") args = parser.parse_args() if args.command is None: - parser.print_help() + print_help() return 0 + + if args.command == "connect": + if not args.device: + error("Missing device name") + print(f" {C.DIM}Usage: genesis connect {C.RESET}") + return 1 + elif args.command == "disconnect": + if not args.target: + error("Missing device name") + print(f" {C.DIM}Usage: genesis disconnect {C.RESET}") + return 1 + elif args.command == "deploy": + if not args.type or not args.path: + error("Missing arguments") + print(f" {C.DIM}Usage: genesis deploy {C.RESET}") + return 1 + elif args.command == "list": + if not args.what: + error("Missing argument") + print(f" {C.DIM}Usage: genesis list {C.RESET}") + return 1 storage = StorageService() if args.command == "connect": - return asyncio.run(cmd_connect(args, storage)) + return run_async(cmd_connect(args, storage)) elif args.command == "disconnect": return cmd_disconnect(args, storage) elif args.command == "deploy": - return asyncio.run(cmd_deploy(args, storage)) + return run_async(cmd_deploy(args, storage)) elif args.command == "list": return cmd_list(args, storage) diff --git a/genesis/client.py b/genesis/client.py index e141408..b8903fe 100644 --- a/genesis/client.py +++ b/genesis/client.py @@ -22,7 +22,10 @@ NewSessionStatus, ) from truffle.os.client_metadata_pb2 import ClientMetadata +from truffle.os.app_queries_pb2 import GetAllAppsRequest, GetAllAppsResponse from truffle.app.app_type_pb2 import AppType +from truffle.app.foreground_pb2 import ForegroundApp +from truffle.app.background_pb2 import BackgroundApp def get_client_metadata() -> ClientMetadata: @@ -109,6 +112,13 @@ async def register_new_session(self, user_id: str) -> tuple[NewSessionStatus, st return resp.status, resp.token return resp.status, None + async def get_all_apps(self) -> tuple[list[ForegroundApp], list[BackgroundApp]]: + if not self.stub: + raise RuntimeError("not connected") + req = GetAllAppsRequest() + resp: GetAllAppsResponse = await self.stub.Apps_GetAll(req, metadata=self._metadata) + return list(resp.foreground_apps), list(resp.background_apps) + async def start_build(self, app_type: AppType = AppType.APP_TYPE_BACKGROUND) -> StartBuildSessionResponse: if not self.stub: raise RuntimeError("not connected") From c5a7e8029f6bff6cd344c2027d52f0377b3f756c Mon Sep 17 00:00:00 2001 From: Dylan Lanigan-Smith Date: Thu, 29 Jan 2026 21:40:53 -0800 Subject: [PATCH 09/15] tty --- .gitignore | 5 +- example-apps/focus/finance/truffile.yaml | 30 +---- genesis/cli.py | 164 +++++++++++++++++------ 3 files changed, 134 insertions(+), 65 deletions(-) diff --git a/.gitignore b/.gitignore index 3b4ab82..9357ae6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ .venv/ truffle/ *.egg-info -__pycache__/ \ No newline at end of file +__pycache__/ +ggggg* +.DS_Store +dist diff --git a/example-apps/focus/finance/truffile.yaml b/example-apps/focus/finance/truffile.yaml index 6d64ce9..75c1a1e 100644 --- a/example-apps/focus/finance/truffile.yaml +++ b/example-apps/focus/finance/truffile.yaml @@ -12,27 +12,9 @@ metadata: environment: PYTHONUNBUFFERED: "1" icon_file: ./icon.png -steps: - - name: Welcome - type: welcome - content: | - Finance provides tools for real-time market data and financial analysis. - - Available tools: - - get_stock_price: Current price for any ticker - - get_stock_history: Historical daily prices - - get_company_overview: Company profile and metrics - - search_ticker: Find ticker symbols - - get_market_news: Latest news with sentiment - - get_top_movers: Gainers, losers, most active - - get_crypto_price: Cryptocurrency rates - - get_economic_indicator: GDP, CPI, unemployment, etc. - - name: Copy application files - type: files - files: - - source: ./app.py - destination: ./app.py - - name: Install dependencies - type: bash - run: | - pip install --no-cache-dir mcp requests +files: + - source: ./app.py + destination: ./app.py +run: | + pip install --no-cache-dir mcp requests + diff --git a/genesis/cli.py b/genesis/cli.py index 832e7e7..dd8310b 100644 --- a/genesis/cli.py +++ b/genesis/cli.py @@ -267,7 +267,7 @@ def validate_app_dir(app_dir: Path, app_type: str) -> tuple[bool, dict | None, l return True, config, warnings -async def _do_deploy(client: TruffleClient, config: dict, app_dir: Path, app_type: str, device: str) -> int: +async def _do_deploy(client: TruffleClient, config: dict, app_dir: Path, app_type: str, device: str, interactive : bool = False) -> int: meta = config["metadata"] name = meta["name"] description = meta.get("description", "") @@ -287,42 +287,45 @@ async def _do_deploy(client: TruffleClient, config: dict, app_dir: Path, app_typ spinner = Spinner("Starting build session") spinner.start() await client.start_build() + await asyncio.sleep(5) spinner.stop(success=True) print(f" {C.DIM}Session: {client.app_uuid}{C.RESET}") - - for step in config.get("steps", []): - if step.get("type") == "files": - for f in step.get("files", []): - src = app_dir / f["source"] - dest = f["destination"] - spinner = Spinner(f"Uploading {src.name} {ARROW} {dest}") - spinner.start() - result = await client.upload(src, dest) - spinner.stop(success=True) - print(f" {C.DIM}{result.bytes} bytes, sha256={result.sha256[:12]}...{C.RESET}") - - elif step.get("type") == "bash": - step_name = step.get("name", "bash") - info(f"Running: {step_name}") - async for ev, data in client.exec_stream(step["run"], cwd=cwd): - if ev == "log": - try: - import json - obj = json.loads(data) - line = obj.get("line", "") - except Exception: - line = data - print(f" {C.DIM}{line}{C.RESET}") - elif ev == "exit": - try: - import json - code = int(json.loads(data).get("code", 0)) - if code != 0: - error(f"Exit code: {code}") - raise RuntimeError(f"Step '{step_name}' failed with exit code {code}") - except (ValueError, KeyError): - pass - + if not interactive: + for step in config.get("steps", []): + if step.get("type") == "files": + for f in step.get("files", []): + src = app_dir / f["source"] + dest = f["destination"] + spinner = Spinner(f"Uploading {src.name} {ARROW} {dest}") + spinner.start() + result = await client.upload(src, dest) + spinner.stop(success=True) + print(f" {C.DIM}{result.bytes} bytes, sha256={result.sha256[:12]}...{C.RESET}") + + elif step.get("type") == "bash": + step_name = step.get("name", "bash") + info(f"Running: {step_name}") + async for ev, data in client.exec_stream(step["run"], cwd=cwd): + if ev == "log": + try: + import json + obj = json.loads(data) + line = obj.get("line", "") + except Exception: + line = data + print(f" {C.DIM}{line}{C.RESET}") + elif ev == "exit": + try: + import json + code = int(json.loads(data).get("code", 0)) + if code != 0: + error(f"Exit code: {code}") + raise RuntimeError(f"Step '{step_name}' failed with exit code {code}") + except (ValueError, KeyError): + pass + else: + tty_task = asyncio.create_task(_run_ws_term(str(client.http_base or "").replace("http://","ws://").replace("https://","wss://") + "/term")) + await tty_task spinner = Spinner(f"Finishing as {app_type} app") spinner.start() @@ -374,7 +377,9 @@ async def _do_deploy(client: TruffleClient, config: dict, app_dir: Path, app_typ async def cmd_deploy(args, storage: StorageService) -> int: app_type = args.type app_dir = Path(args.path).resolve() - + do_cool_ass_terminal_shit = args.interactive == True + if do_cool_ass_terminal_shit: + info("doing cool ahh terminal shi") if not app_dir.exists() or not app_dir.is_dir(): error(f"{app_dir} is not a valid directory") return 1 @@ -422,8 +427,8 @@ def handle_sigint(): loop.add_signal_handler(signal.SIGINT, handle_sigint) try: - deploy_task = asyncio.create_task(_do_deploy(client, config, app_dir, app_type, device)) - return await deploy_task + deploy_task = asyncio.create_task(_do_deploy(client, config, app_dir, app_type, device, do_cool_ass_terminal_shit)) + return await deploy_task except asyncio.CancelledError: print() spinner = Spinner("Discarding build session") @@ -490,7 +495,8 @@ async def cmd_list_apps(storage: StorageService) -> int: print(f"{C.BOLD}Focus Apps{C.RESET}") for app in foreground: print(f" {C.CYAN}{DOT}{C.RESET} {app.metadata.name}") - if app.metadata.description: + setattr(app.metadata, "description", getattr(app.metadata, "description", "")) + if hasattr(app.metadata, "description") and app.metadata.description: desc = app.metadata.description.strip().split('\n')[0][:55] print(f" {C.DIM}{desc}{C.RESET}") @@ -511,7 +517,8 @@ async def cmd_list_apps(storage: StorageService) -> int: elif app.runtime_policy.HasField("always"): schedule = "always" print(f" {C.CYAN}{DOT}{C.RESET} {app.metadata.name} {C.DIM}({schedule}){C.RESET}") - if app.metadata.description: + setattr(app.metadata, "description", getattr(app.metadata, "description", "")) + if hasattr(app.metadata, "description") and app.metadata.description: desc = app.metadata.description.strip().split('\n')[0][:55] print(f" {C.DIM}{desc}{C.RESET}") @@ -525,6 +532,82 @@ async def cmd_list_apps(storage: StorageService) -> int: finally: await client.close() +async def _run_ws_term(ws_url: str) -> int: + print(f"{C.DIM}Starting interactive terminal session {ws_url}...{C.RESET}") + import os, termios, fcntl, struct, tty, contextlib, json + try: + import websockets + from websockets.exceptions import ConnectionClosed, ConnectionClosedOK + except Exception: + print(f"{C.RED}{CROSS} Error:{C.RESET} websockets package is required for terminal mode") + return 67 + + def _winsz(): + try: + h, w, _, _ = struct.unpack("HHHH", fcntl.ioctl(sys.stdout.fileno(), termios.TIOCGWINSZ, b"\0"*8)) + return w, h + except Exception: + return 80, 24 + + class Raw: + def __enter__(self): + self.fd = sys.stdin.fileno() + self.old = termios.tcgetattr(self.fd) + tty.setraw(self.fd); return self + def __exit__(self, *a): + termios.tcsetattr(self.fd, termios.TCSADRAIN, self.old) + + async def run_once(): + async with websockets.connect(ws_url, max_size=None, ping_interval=30) as ws: + cols, rows = _winsz() + await ws.send(json.dumps({"resize":[cols, rows]})) + + loop = asyncio.get_running_loop() + q: asyncio.Queue[bytes] = asyncio.Queue() + stop = asyncio.Event() + + def on_stdin(): + try: + data = os.read(sys.stdin.fileno(), 4096) + if data: q.put_nowait(data) + except BlockingIOError: + pass + loop.add_reader(sys.stdin.fileno(), on_stdin) + + async def pump_in(): + try: + while not stop.is_set(): + data = await q.get() + try: await ws.send(data) + except (ConnectionClosed, ConnectionClosedOK): break + finally: + stop.set() + async def pump_out(): + try: + async for msg in ws: + if isinstance(msg, bytes): + os.write(sys.stdout.fileno(), msg) + else: + os.write(sys.stdout.fileno(), msg.encode()) # type: ignore + except (ConnectionClosed, ConnectionClosedOK): + pass + finally: + stop.set() + + with Raw(): + t_in = asyncio.create_task(pump_in()) + t_out = asyncio.create_task(pump_out()) + try: + await asyncio.wait({t_in, t_out}, return_when=asyncio.FIRST_COMPLETED) + finally: + stop.set(); t_in.cancel(); t_out.cancel() + with contextlib.suppress(Exception): + await asyncio.gather(t_in, t_out, return_exceptions=True) + loop.remove_reader(sys.stdin.fileno()) + + + await run_once() + return 67 def run_async(coro): try: @@ -591,6 +674,7 @@ def main() -> int: p_deploy = subparsers.add_parser("deploy", add_help=False) p_deploy.add_argument("type", choices=["ambient", "focus"], nargs="?") p_deploy.add_argument("path", nargs="?") + p_deploy.add_argument("-i", "--interactive", action="store_true", help="Install dependencies before deploying") p_list = subparsers.add_parser("list", add_help=False) p_list.add_argument("what", choices=["apps", "devices"], nargs="?") From 9f9031276a964d989a92ac578aef9e6fd0aa4472 Mon Sep 17 00:00:00 2001 From: notabd7-deepshard Date: Fri, 30 Jan 2026 00:21:25 -0800 Subject: [PATCH 10/15] remove api keys minor improvements --- .gitignore | 1 - example-apps/ambient/email/email_ambient.py | 328 ------------------ example-apps/ambient/email/icon.png | Bin 3469 -> 0 bytes example-apps/ambient/email/truffile.yaml | 78 ----- example-apps/ambient/hedge/app.py | 2 +- example-apps/ambient/hedge/truffile.yaml | 41 +-- example-apps/ambient/hn/ambient.py | 131 -------- example-apps/ambient/hn/icon.png | Bin 21055 -> 0 bytes example-apps/ambient/hn/onboard.py | 72 ---- example-apps/ambient/hn/truffile.yaml | 50 --- example-apps/ambient/twitter/ambient.py | 335 ------------------- example-apps/ambient/twitter/icon.png | Bin 453872 -> 0 bytes example-apps/ambient/twitter/icon_aidan.png | Bin 3641 -> 0 bytes example-apps/ambient/twitter/onboard.py | 72 ---- example-apps/ambient/twitter/onboard_test.py | 73 ---- example-apps/ambient/twitter/truffile.yaml | 61 ---- example-apps/focus/finance/app.py | 2 +- example-apps/focus/research/research.py | 2 +- genesis/cli.py | 174 +++++----- 19 files changed, 107 insertions(+), 1315 deletions(-) delete mode 100644 example-apps/ambient/email/email_ambient.py delete mode 100644 example-apps/ambient/email/icon.png delete mode 100644 example-apps/ambient/email/truffile.yaml delete mode 100644 example-apps/ambient/hn/ambient.py delete mode 100644 example-apps/ambient/hn/icon.png delete mode 100644 example-apps/ambient/hn/onboard.py delete mode 100644 example-apps/ambient/hn/truffile.yaml delete mode 100644 example-apps/ambient/twitter/ambient.py delete mode 100644 example-apps/ambient/twitter/icon.png delete mode 100644 example-apps/ambient/twitter/icon_aidan.png delete mode 100644 example-apps/ambient/twitter/onboard.py delete mode 100644 example-apps/ambient/twitter/onboard_test.py delete mode 100644 example-apps/ambient/twitter/truffile.yaml diff --git a/.gitignore b/.gitignore index 9357ae6..3b348f7 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,5 @@ truffle/ *.egg-info __pycache__/ -ggggg* .DS_Store dist diff --git a/example-apps/ambient/email/email_ambient.py b/example-apps/ambient/email/email_ambient.py deleted file mode 100644 index faceeff..0000000 --- a/example-apps/ambient/email/email_ambient.py +++ /dev/null @@ -1,328 +0,0 @@ -import imaplib -import logging -import time -import base64 -from email import message_from_bytes -from email.message import Message -from email.header import decode_header, make_header -from email.utils import parseaddr, getaddresses -from typing import List, Optional, Tuple -from truffle.app.background_feed_pb2 import FeedCard - -from gourmet.ambient import run_ambient, AmbientContext -logger = logging.getLogger("email") -logger.setLevel(logging.DEBUG) - -from dataclasses import dataclass - -@dataclass -class EmailConfig: - imap_server: str - email_address : str - email_password: str - imap_port: int = 993 - imap_ssl: bool = True - mailbox: str = "inbox" - - @staticmethod - def from_env() -> 'EmailConfig': - import os - imap_server = os.getenv("IMAP_SERVER", "imap.gmail.com") - email_address = os.getenv("EMAIL_ADDRESS", "") - email_password = os.getenv("EMAIL_PASSWORD", "") - imap_port = int(os.getenv("IMAP_PORT", "993")) - imap_ssl = os.getenv("IMAP_SSL", "1") == "1" - mailbox = os.getenv("MAILBOX", "inbox") - cfg = EmailConfig( - imap_server=imap_server, - email_address=email_address, - email_password=email_password, - imap_port=imap_port, - imap_ssl=imap_ssl, - mailbox=mailbox - ) - if not all([imap_server, email_address, email_password]): - logger.error("EmailConfig.from_env: Missing required configuration: ", str(cfg)) - raise ValueError("Missing required email configuration in environment variables") - return cfg - - def is_gmail(self) -> bool: - return self.imap_server.lower() == "imap.gmail.com" - - -email_config = EmailConfig.from_env() - -LAST_SEEN_UID: Optional[int] = None - -def connect_to_email(cfg : EmailConfig) -> imaplib.IMAP4_SSL: - try: - mail = imaplib.IMAP4_SSL(cfg.imap_server, cfg.imap_port) - mail.login(cfg.email_address, cfg.email_password) - return mail - except Exception as e: - safe_pwd = cfg.email_password[:2] + "***" + cfg.email_password[-2:] # logs are private to user device anyways - logging.error(f"Connection to {cfg.imap_server} as {cfg.email_address}:{safe_pwd} failed") - logging.error(str(e)) - raise - - - -def _init_last_uid(mail: imaplib.IMAP4_SSL) -> int: - status, data = mail.uid("search", None, "ALL") # type: ignore - if status != "OK": - raise RuntimeError("Failed to search mailbox to initialize last UID") - if not data or not data[0]: - return 0 - uids = data[0].split() - return int(uids[-1]) - - -def decode_mime_header(value: str | None) -> str | None: - if value is None: - return None - try: - dh = decode_header(value) - # make_header handles joining parts + charset decoding - return str(make_header(dh)) - except Exception: - return value -def parse_single_address(h: Optional[str]) -> Tuple[Optional[str], Optional[str]]: - if not h: - return None, None - decoded = decode_mime_header(h) or "" - name, addr = parseaddr(decoded) - name = name or None - addr = addr or None - return name, addr - - -def fetch_new_emails( - mail: imaplib.IMAP4_SSL, - last_seen_uid: int | None = None, -) -> Tuple[List[Message], Optional[int]]: - global email_config - try: - status, _ = mail.select(email_config.mailbox) - if status != "OK": - raise RuntimeError(f"Failed to select mailbox {email_config.mailbox}") - - if last_seen_uid is None: - last_seen_uid = _init_last_uid(mail) - logger.debug("Initialized last_seen_uid to %s", last_seen_uid) - - start_uid = (last_seen_uid or 0) + 1 - search_criteria = f"UID {start_uid}:*" - - status, data = mail.uid("search", None, search_criteria) # type: ignore - if status != "OK": - logger.error("UID SEARCH failed with %r", search_criteria) - return [], last_seen_uid - - if not data or not data[0]: - logger.debug("No new messages since UID %s", last_seen_uid) - return [], last_seen_uid - - uids = data[0].split() - messages: List[Message] = [] - max_uid = last_seen_uid or 0 - - for uid in uids: - uid_int = int(uid) - if last_seen_uid and uid_int == last_seen_uid: - continue - - - # one fetch: body (no \Seen) + X-GM-MSGID - # hopefully other IMAP servers just ignore X-GM-MSGID - status, msg_data = mail.uid("fetch", uid, "(BODY.PEEK[] X-GM-MSGID)") - if status != "OK" or not msg_data: - logger.error("Failed to fetch message UID %s", uid.decode()) - continue - - meta_bytes = None - raw_bytes = None - for item in msg_data: - if isinstance(item, tuple): - meta_bytes, raw_bytes = item - break - - if meta_bytes is None or raw_bytes is None: - logger.error("Unexpected fetch response for UID %s: %r", uid.decode(), msg_data) - continue - - meta = meta_bytes.decode("utf-8", errors="ignore") - gm_msgid: Optional[str] = None - if "X-GM-MSGID" in meta: - after = meta.split("X-GM-MSGID", 1)[1].strip() - gm_msgid = after.split()[0].rstrip(")") - - msg = message_from_bytes(raw_bytes) - msg.add_header("UID", str(uid_int)) - if gm_msgid and email_config.is_gmail(): - msg.add_header( - "GMAIL_URL", # this assumes inbox 0, not great but whatever - f"https://mail.google.com/mail/u/0/#all/{int(gm_msgid):x}", - ) - - messages.append(msg) - if uid_int > max_uid: - max_uid = uid_int - - if max_uid > (last_seen_uid or 0): - last_seen_uid = max_uid - - logger.info( - "Fetched %d new messages, last_seen_uid=%s", - len(messages), - last_seen_uid, - ) - return messages, last_seen_uid - except Exception as e: - logger.error(f"Error fetching new emails: {str(e)}", exc_info=True) - return [], last_seen_uid - -def _decode_part(part: Message) -> str: - payload = part.get_payload(decode=True) - if payload is None: - return "" - charset = part.get_content_charset() or "utf-8" - try: - return payload.decode(charset, errors="replace") # type: ignore - except LookupError: - return payload.decode("utf-8", errors="replace") # type: ignore - - -def extract_preferred_body(msg: Message) -> Tuple[Optional[str],Optional[str], bool]: - text_body: Optional[str] = None - html_body: Optional[str] = None - - if msg.is_multipart(): - for part in msg.walk(): - ctype = part.get_content_type() - disp = (part.get("Content-Disposition") or "").lower() - - if "attachment" in disp: - continue - - if ctype == "text/plain": - decoded = _decode_part(part).strip() - if decoded: - text_body = decoded if text_body is None else (text_body + "\n" + decoded) - elif ctype == "text/html": - decoded = _decode_part(part).strip() - if decoded: - html_body = decoded if html_body is None else (html_body + "\n" + decoded) - else: - ctype = msg.get_content_type() - decoded = _decode_part(msg).strip() - if ctype == "text/plain": - text_body = decoded or None - elif ctype == "text/html": - html_body = decoded or None - return text_body, html_body, True if html_body is not None else False - - - -def email_ambient(ctx: AmbientContext): - global LAST_SEEN_UID - global email_config - mail = connect_to_email(email_config) - try: - messages, new_uid = fetch_new_emails(mail, LAST_SEEN_UID) - logger.info(f"Fetched {len(messages)} new emails, new last seen UID: {new_uid}") - LAST_SEEN_UID = new_uid - if not messages or len(messages) == 0: - return - - for msg in messages: - body, html_body, is_html = extract_preferred_body(msg) - - uid = msg.get("UID") - gmail_url = msg.get("GMAIL_URL") - subject = decode_mime_header(msg["Subject"]) - sender = msg["From"] - name, sender_addr = parse_single_address(sender) - if not name or not sender_addr: - name = "" - sender_addr = sender_addr or "" - if len(sender_addr) == 0: - sender_addr = sender - - recv = msg["To"] - logger.info(f"Email UID: {uid}, From: {name} {sender_addr}, To: {recv}, Subject: {subject}, Is HTML: {is_html}, Body {len(body or "")} GMAIL_URL: {gmail_url} ") - if is_html and html_body is not None: - try: - # just use trafilatura if we can - import trafilatura - extracted = trafilatura.extract(html_body, output_format="markdown", include_tables=True, include_links=True, include_images=True, deduplicate=True, favor_precision=True) - if extracted: - body = extracted.strip() - logger.info("Extracted text from HTML email using trafilatura.") - except ImportError: - logger.warning("trafilatura not installed, skipping HTML to text conversion") - body = html_body.strip() - except Exception as e: - logger.error(f"Error during HTML to text conversion: {str(e)}", exc_info=True) - body = html_body.strip() - elif body is not None and len(body.strip()) == 0: - body = "[No content]" - - if subject is None or len(subject.strip()) == 0: - subject = "(No Subject)" - - - - card = FeedCard() - card.title = subject - rich_sender = f"[{name}](mail-to:{sender_addr})" if name else sender_addr - - card.body = f"{rich_sender}\n{body}" - if gmail_url: - card.source_uri = gmail_url - ctx.bg.add_feed_card(card) - except Exception as e: - logger.error(f"Error in email_ambient: {str(e)}", exc_info=True) - finally: - try: - mail.close() - except Exception: - pass - try: - mail.logout() - except Exception: - pass - time.sleep(0.2) # sanity check everything closed ok - -def verify() -> int: - global LAST_SEEN_UID - global email_config - mail : imaplib.IMAP4_SSL | None = None - try: - mail = connect_to_email(email_config) - mail.select(email_config.mailbox) - logger.info(f"Connected to IMAP server {email_config.imap_server} as {email_config.email_address}, mailbox {email_config.mailbox}") - logger.info("email is properly configured!") - return 0 - except Exception as e: - logger.error(f"Failed to connect to email server: {str(e)}", exc_info=True) - return 1 - finally: - if mail is not None: - try: - mail.close() - except Exception: - pass - try: - mail.logout() - except Exception: - pass - -if __name__ == "__main__": - import sys - if sys.argv and len(sys.argv) > 1 and "verify" in sys.argv[1].lower(): - logger.info("Running Email Ambient App VERIFY mode") - ec = verify() - logger.info(f"Email Ambient App VERIFY exited with code {ec}") - sys.exit(ec) - else: - run_ambient(email_ambient) \ No newline at end of file diff --git a/example-apps/ambient/email/icon.png b/example-apps/ambient/email/icon.png deleted file mode 100644 index ef9739d228b11d75dd9105795a0d627d6eb11c9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3469 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 WjKdPW?Wu6h0wAp%Et@W0CHw~|zY2r^ diff --git a/example-apps/ambient/email/truffile.yaml b/example-apps/ambient/email/truffile.yaml deleted file mode 100644 index 838f0a4..0000000 --- a/example-apps/ambient/email/truffile.yaml +++ /dev/null @@ -1,78 +0,0 @@ -metadata: - name: Inbox - type: background - description: | - Connect Truffle¹ to your email inbox and notify you of relevant messages. - process: - cmd: - - python - - email_ambient.py - working_directory: / - environment: - PYTHONUNBUFFERED: "1" - IMAP_PORT: "993" - - icon_file: ./icon.png - default_schedule: - type: interval - interval: - duration: 5m - schedule: - daily_window: "01:00-22:30" # optional -steps: - - name: Email Setup - type: welcome - content: | - The Email app is a generic IMAP email client that will allow your Truffle to post emails on your feed. - You will need a one time passcode from your email provider if you have 2FA enabled. - For Gmail, you can generate an App Password from your Google Account settings. - [Click Here to get one](https://support.google.com/mail/answer/185833?hl=en) - - name: Install dependencies - type: bash - run: | - pip install --no-cache-dir trafilatura==2.0.0 - - name: Copy application files - type: files - files: - - source: ./email_ambient.py - destination: ./email_ambient.py - - name: Configure Email Account - type: text - content: | - Please provide an IMAP server, email address, and password to configure your email account. Port 993/SSL is assumed. - Common IMAP servers: - - Gmail: `imap.gmail.com` - - Hotmail/Outlook: `imap-mail.outlook.com` - - Yahoo: `imap.mail.yahoo.com` - - iCloud: `imap.mail.me.com` - Be warned only Gmail has been tested. - - fields: - - name: imap_server - label: IMAP Server - type: text - placeholder: imap.gmail.com - default: imap.gmail.com - env: IMAP_SERVER - - name: email_address - label: Email Address - type: text - env: EMAIL_ADDRESS - placeholder: robert@gmail.com - - name: password - label: Password - type: password - env: EMAIL_PASSWORD - validator: - type: bash # [bash] - run: | - python ./email_ambient.py --verify - timeout: 120 # optional, in seconds - error_message: | # optional - Could not connect to the email server with the provided credentials. Please double-check and try again - - - - - - \ No newline at end of file diff --git a/example-apps/ambient/hedge/app.py b/example-apps/ambient/hedge/app.py index 39ec288..f643e14 100644 --- a/example-apps/ambient/hedge/app.py +++ b/example-apps/ambient/hedge/app.py @@ -8,7 +8,7 @@ logger = logging.getLogger("hedge") logger.setLevel(logging.DEBUG) -API_KEY = os.getenv("ALPHAVANTAGE_API_KEY", "JJ3Z7KZVSHIB09WP") +API_KEY = os.getenv("ALPHAVANTAGE_API_KEY", "go get your key dudes") TICKERS = os.getenv("HEDGE_TICKERS", "AAPL,MSFT,GOOGL,IREN").split(",") BASE_URL = "https://www.alphavantage.co/query" diff --git a/example-apps/ambient/hedge/truffile.yaml b/example-apps/ambient/hedge/truffile.yaml index 6cd1f2f..3313d37 100644 --- a/example-apps/ambient/hedge/truffile.yaml +++ b/example-apps/ambient/hedge/truffile.yaml @@ -17,38 +17,9 @@ metadata: type: interval interval: duration: 2m - schedule: - daily_window: "06:00-22:00" -steps: - - name: Welcome - type: welcome - content: | - Hedge tracks your stock portfolio and posts updates to your feed. - - By default, it tracks AAPL, MSFT, and GOOGL every 2 minutes during market hours. - - Each update includes: - - Current price and daily change - - Today's high/low range - - A 5-day price chart - - name: Configure Tickers - type: text - content: | - Enter the stock tickers you want to track, separated by commas. - fields: - - name: tickers - label: Stock Tickers - type: text - placeholder: "AAPL,MSFT,GOOGL,TSLA" - default: "AAPL,MSFT,GOOGL" - env: HEDGE_TICKERS - - name: Copy application files - type: files - files: - - source: ./app.py - destination: ./app.py - - name: Install dependencies - type: bash - run: | - pip install --no-cache-dir requests - pip install --no-cache-dir -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ 'gourmet[ambient]==0.1.dev45' +files: + - source: ./app.py + destination: ./app.py +run: | + pip install --no-cache-dir requests + pip install --no-cache-dir -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ 'gourmet[ambient]==0.1.dev45' diff --git a/example-apps/ambient/hn/ambient.py b/example-apps/ambient/hn/ambient.py deleted file mode 100644 index 267340d..0000000 --- a/example-apps/ambient/hn/ambient.py +++ /dev/null @@ -1,131 +0,0 @@ -from gourmet.ambient import run_ambient, AmbientContext, InferenceClient -from truffle.app.background_feed_pb2 import FeedCard -import logging -import requests -from bs4 import BeautifulSoup -from bs4 import Tag -from typing import Deque, Tuple, Optional -from collections import deque -from urllib.parse import urljoin -from abrasive.extract import extract_content_from_url, ExtractedContent -import datetime -logger = logging.getLogger("hn") -logger.setLevel(logging.DEBUG) - -logger = logging.getLogger(__name__) -logger.setLevel(logging.DEBUG) - -# pip install requests bs4 -def summarize_post_title(infer_client: InferenceClient, title: str) -> str: - sys_prompt = ( "You summarize updates from a Hacker News front page scraper, to make a catchy post title." - " Only respond with the title text, no other commentary." ) - user_prompt = "What is a catchy headline for the following article?\n\n" + title - response = infer_client.generate_simple(sys_prompt, user_prompt) - return response.strip() -HN_URL = "https://news.ycombinator.com/" - -_seen_ids: set[str] = set() -_pending: Deque[Tuple[str, str, Optional[str],Optional[str], str]] = deque() # (title, url, site, item_id) - - -def _get(url: str) -> str: - r = requests.get( - url, - headers={ - "User-Agent": "hn-scraper/1.0 (+https://news.ycombinator.com/)", - "Accept": "text/html,application/xhtml+xml", - }, - timeout=10, - ) - r.raise_for_status() - return r.text - - -def _fetch_top(limit: int = 60) -> list[Tuple[str, str, Optional[str],Optional[str], str]]: - html = _get(HN_URL) - soup = BeautifulSoup(html, "html.parser") - rows = soup.select("tr.athing") - - out: list[Tuple[str, str, Optional[str],Optional[str], str]] = [] - for r in rows: - item_id = r.get("id") - if not item_id: - continue - a = r.select_one("span.titleline > a") - - if not a: - continue - href = urljoin(HN_URL, a.get("href") or "") # type: ignore - title = a.get_text(strip=True) - site_el = r.select_one("span.sitestr") - - next = r.next_sibling - points = None - if next is not None and isinstance(next, Tag): - points_el = next.select_one("td.subtext > span.subline > span.score") - if points_el is not None: - points = points_el.get_text(strip=True) - if points.endswith(" points"): - points = points[:-7] - site = site_el.get_text(strip=True) if site_el else None - out.append((title, href, site, points, item_id)) # type: ignore - if len(out) >= limit: - break - return out - - -def _refill_queue() -> int: - global _pending, _seen_ids - try: - batch = _fetch_top(limit=60) - except Exception as e: - logger.warning(f"HN fetch failed: {e!r}") - return 0 - - added = 0 - existing_ids = {it[4] for it in _pending} - for it in batch: - if it[4] in _seen_ids or it[4] in existing_ids: - continue - _pending.append(it) - existing_ids.add(it[4]) - added += 1 - return added -def _next_new_item() -> Optional[Tuple[str, str, Optional[str],Optional[str], str]]: - global _pending - if not _pending: - _refill_queue() - if not _pending: - return None - title, url, site, pts, item_id = _pending.popleft() - _seen_ids.add(item_id) - return title, url, site, pts, item_id -def get_comments_url(item_id: str) -> str: - return f"{HN_URL}item?id={item_id}" -def scrape_ambient(ctx: AmbientContext): - item = _next_new_item() - if not item: - logger.info("No new HN items to process.") - return - title, url, site,pts, item_id = item - logger.info(f"Processing HN item {item_id}: {title} {pts or ""} ({url}) ({site}) {get_comments_url(item_id=item_id)}") - - - post_body = f"HackerNews: {f'{site}' if site else ''}{f' | {pts} points' if pts is not None else ''}\n" - url_content = extract_content_from_url(url) - if url_content is None: - logger.warning(f"Failed to extract content from URL: {url}") - post_body += f"[comments]({get_comments_url(item_id=item_id)})\n" - ctx.bg.post_to_feed(title=title, body=post_body, src_uri=url) - return - - if url_content.text: - post_body += f"{url_content.text}\n" - - ts = url_content.date if url_content.date is not None else datetime.datetime.now(tz=datetime.timezone.utc) - ctx.bg.post_to_feed(title=title, body=post_body, src_uri=url, media_uris=url_content.images, content_timestamp=ts ) - -if __name__ == "__main__": - run_ambient(scrape_ambient) - - diff --git a/example-apps/ambient/hn/icon.png b/example-apps/ambient/hn/icon.png deleted file mode 100644 index 342e56805975f58a251193535cb0cc8ddf12fc7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21055 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%0AI}&Xw$1T_ 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 None: - loop = asyncio.get_running_loop() - deadline = loop.time() + timeout_s - - def logged_in() -> bool: - url = driver.current_url or "" - if "login" in url or "signup" in url: - return False - try: - return any(c.get("name") == "user" for c in driver.get_cookies()) or url == "https://news.ycombinator.com/" - except Exception: - return False - - - while True: - if logged_in(): - return - if loop.time() >= deadline: - raise TimeoutError("Timed out waiting for user to log in") - await asyncio.sleep(poll_s) - - -async def main() -> int: - err = 0 - try: - driver = create_driver( - app_url="https://news.ycombinator.com/login", - fullscreen=True - ) - driver.get("https://news.ycombinator.com/login") - logger.info("Waiting for user to log in to HN") - logger.error("Please log in to HN in the opened browser window") - await wait_for_login(driver, timeout_s=900) - logger.info("Logged in to HN successfully") - driver.quit() - driver = None - err = 0 - except Exception as e: - logger.exception("Error during HN onboarding") - err = 1 - finally: - try: - if driver: - driver.quit() - except Exception: - pass - return err - - - -if __name__ == "__main__": - ec = asyncio.run(main()) - exit(ec) \ No newline at end of file diff --git a/example-apps/ambient/hn/truffile.yaml b/example-apps/ambient/hn/truffile.yaml deleted file mode 100644 index 380b078..0000000 --- a/example-apps/ambient/hn/truffile.yaml +++ /dev/null @@ -1,50 +0,0 @@ -metadata: - name: Hacker News - type: background - description: | - An internal test app for VNC and auth flow. May or may not scrape Hacker News. - process: - cmd: - - python - - ambient.py - working_directory: / - environment: - PYTHONUNBUFFERED: "1" - icon_file: ./icon.png - default_schedule: - type: interval - interval: - duration: 1m -steps: - - name: Welcome - type: welcome - content: | - This is literally just a test for VNC - - name: Copy application files - type: files - files: - - source: ./ambient.py - destination: ./ambient.py - - source: ./onboard.py - destination: ./onboard.py - - name: Install dependencies - type: bash - run: | - pip install --no-cache-dir requests undetected-chromedriver selenium beautifulsoup4 - pip install --no-cache-dir -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ 'gourmet[abrasive]==0.1.dev44' - pip install --no-cache-dir --force-reinstall requests feedparser trafilatura==2.0.0 tld==0.13.1 - - name: Sign into Hacker News - type: vnc - cmd: - - python - - onboard.py - closes_on_complete: true - description: | - A VNC window will open. Please sign into your HackerNews account to continue the installation. - - - - - - - \ No newline at end of file diff --git a/example-apps/ambient/twitter/ambient.py b/example-apps/ambient/twitter/ambient.py deleted file mode 100644 index afde180..0000000 --- a/example-apps/ambient/twitter/ambient.py +++ /dev/null @@ -1,335 +0,0 @@ -import time -import random -import os -import undetected_chromedriver as uc -from selenium.webdriver.common.by import By -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from selenium.common.exceptions import TimeoutException -from selenium.webdriver.remote.webelement import WebElement -from gourmet.ambient import AmbientContext, run_ambient -from gourmet.desktop.xvfb import start_xvfb -from gourmet.desktop.chromedriver import create_driver, human_sleep, human_scroll - -from dataclasses import dataclass -from typing import Optional -import re -import subprocess -import pathlib -import logging -from pathlib import Path -from urllib.parse import urlparse, parse_qs, urlencode, urlunparse -logger = logging.getLogger(__name__) -logger.setLevel(logging.DEBUG) - - -@dataclass -class Tweet: - author_name: Optional[str] - author_handle: Optional[str] - text: str - url: Optional[str] - num_replies: Optional[int] - reposts: Optional[int] - likes: Optional[int] - bookmarks: Optional[int] - views: Optional[int] - images: Optional[list[str]] = None # URLs to images - -def tweet_to_string(tweet: Tweet) -> str: - s = ( - f"{tweet.author_handle} ({tweet.url})\n" - f"{tweet.text}\n" - f"QT: {tweet.num_replies}, RTS: {tweet.reposts}, " - f"<3: {tweet.likes}, Saves: {tweet.bookmarks}, Views: {tweet.views}\n" - ) - return s -_stats_re = re.compile( - r"(?P[\d,]+)\s+replies?,\s+" - r"(?P[\d,]+)\s+reposts?,\s+" - r"(?P[\d,]+)\s+likes?,\s+" - r"(?P[\d,]+)\s+bookmarks?,\s+" - r"(?P[\d,]+)\s+views?", - re.I, -) - -def _parse_int(s: str) -> int: - return int(s.replace(",", "")) - -def parse_stats(aria_label: str): - m = _stats_re.search(aria_label or "") - if not m: - return (None, None, None, None, None) - return tuple( - _parse_int(m.group(k)) for k in - ["replies", "reposts", "likes", "bookmarks", "views"] - ) -def _normalize_twitter_media_url(url: str, *, name: str = "orig") -> str: - # https://pbs.twimg.com/media/?format=jpg&name=small -> name=orig - try: - u = urlparse(url) - q = parse_qs(u.query) - if "name" in q: - q["name"] = [name] - # keep format if present; don't invent it - query = urlencode({k: v[0] for k, v in q.items()}, doseq=False) - return urlunparse((u.scheme, u.netloc, u.path, u.params, query, u.fragment)) - except Exception: - return url - -def extract_tweet_images(article) -> list[str]: - urls: list[str] = [] - - # Primary: tweetPhoto blocks - for img in article.find_elements(By.CSS_SELECTOR, "div[data-testid='tweetPhoto'] img"): - src = (img.get_attribute("src") or "").strip() - if not src: - continue - urls.append(_normalize_twitter_media_url(src)) - - # Fallback: sometimes media shows up as - # chatgpt did this shit but idk if we should guard on not urls tbh - if not urls: - for img in article.find_elements(By.CSS_SELECTOR, "img[src*='pbs.twimg.com/media/']"): - src = (img.get_attribute("src") or "").strip() - if src: - urls.append(_normalize_twitter_media_url(src)) - - deduped: list[str] = [] - seen = set() - for u in urls: - if u not in seen: - seen.add(u) - deduped.append(u) - return deduped - -def extract_tweet(article) -> Tweet: - # main text - try: - text_el = article.find_element( - By.CSS_SELECTOR, "div[data-testid='tweetText']" - ) - text = text_el.text - except Exception: - text = "" - - # author block via data-testid=User-Name - author_name = None - author_handle = None - try: - user_block = article.find_element( - By.CSS_SELECTOR, "div[data-testid='User-Name']" - ) - spans = user_block.find_elements(By.CSS_SELECTOR, "span") - for s in spans: - t = s.text.strip() - if not t: - continue - if t.startswith("@") and author_handle is None: - author_handle = t - elif author_name is None: - author_name = t - except Exception: - pass - - replies = reposts = likes = bookmarks = views = None - try: - stats_group = article.find_element( - By.CSS_SELECTOR, - "div[role='group'][aria-label*='replies'][aria-label*='views']" - ) - aria = stats_group.get_attribute("aria-label") or "" - replies, reposts, likes, bookmarks, views = parse_stats(aria) - except Exception: - pass - - url = None - try: - link = article.find_element( - By.CSS_SELECTOR, "a[role='link'][href*='/status/']" - ) - href = link.get_attribute("href") - if href: - url = href.split("/analytics")[0] - except Exception: - pass - images: list[str] | None = None - try: - imgs = extract_tweet_images(article) - if imgs: - images = imgs - except Exception: - pass - - return Tweet( - author_name=author_name, - author_handle=author_handle, - text=text, - url=url, - num_replies=replies, - reposts=reposts, - likes=likes, - bookmarks=bookmarks, - views=views, - images=images, - ) - - - -def collect_tweets_on_screen(driver, max_items=50): - articles = driver.find_elements( - By.CSS_SELECTOR, "article[data-testid='tweet']" - ) - tweets = [] - seen_urls = set() - - for a in articles: - t = extract_tweet(a) - key = t.url or (t.author_handle, t.text) - if key in seen_urls: - continue - seen_urls.add(key) - tweets.append(t) - if len(tweets) >= max_items: - break - - return tweets -DEBUG_SS_DIR = pathlib.Path("/opt/tfw_x_debug_screenshots") -DEBUG_SS_DIR.mkdir(parents=True, exist_ok=True) -def save_debug_screenshot(driver : uc.Chrome | None, name: str = "screenshot") -> None: - if driver is None: - logger.warning("Cannot save debug screenshot: driver is None") - return - timestamp = int(time.time()) - ss_path = DEBUG_SS_DIR / f"{name}_{timestamp}.png" - if not driver.save_screenshot(str(ss_path.absolute())): - logger.error("Failed to save debug screenshot") - return - logger.info(f"Saved debug screenshot to {ss_path.absolute()}") - -seen_urls = set() -def scroll_feed_and_scrape(driver, num_tweets, batch_limit=30) -> list[Tweet]: - all_tweets = [] - global seen_urls - MAX_TIME = 200 # seconds - start_time = time.time() - it = 0 - while len(all_tweets) < num_tweets: - if (time.time() - start_time) > MAX_TIME: - logger.error(f"Timeout while scrolling feed after {MAX_TIME} seconds- only got {len(all_tweets)} tweets") - save_debug_screenshot(driver, name=f"scroll_timeout_{len(all_tweets)}tweets") - break - # scrape what we currently see - batch = collect_tweets_on_screen(driver, max_items=batch_limit) - new_tweets = [] - for tweet in batch: - key = tweet.url or (tweet.author_handle, tweet.text) - if key in seen_urls: - scroll_amount = random.randint(700, 1300) - driver.execute_script( - "window.scrollBy(0, arguments[0]);", scroll_amount - ) - human_sleep(0.5, 1.6) - continue - seen_urls.add(key) - new_tweets.append(tweet) - print(tweet_to_string(tweet)) - all_tweets.extend(new_tweets) - - - logger.debug(f"\n[iteration: {it}] collected {len(new_tweets)} unique tweets so far") - it += 1 - # human-ish scrolling - scroll_amount = random.randint(700, 1300) - driver.execute_script( - "window.scrollBy(0, arguments[0]);", scroll_amount - ) - human_sleep(1.0, 2.3) - - - - return all_tweets - - -DEFAULT_NUM_TWEETS_TO_SCRAPE = 30 -def scrape_tweets(num_tweets : int = DEFAULT_NUM_TWEETS_TO_SCRAPE ) -> list[Tweet]: - tweets = [] - driver = None - try: - logger.info(f"Creating ChromeDriver to scrape {num_tweets} tweets from X") - driver = create_driver() - logger.info("Navigating to X home feed") - driver.get("https://x.com/home") - logger.info("Waiting for X home feed to load") - human_sleep(2, 6) - logger.info("Starting to scroll feed and scrape tweets") - tweets = scroll_feed_and_scrape(driver, num_tweets=num_tweets, batch_limit=40) - - logger.info(f"Scraped a total of {len(tweets)} unique tweets.") - - human_sleep(1, 3) - if not tweets: - logger.warning("No tweets were scraped from X feed.") - save_debug_screenshot(driver, name="no_tweets_scraped") - - except Exception as e: - logger.error("Error during X scraping", exc_info=True) - print(f"Error during X scraping: {e!r}") - save_debug_screenshot(driver, name="error_scrape") - finally: - if driver is not None: - logger.info("Quitting ChromeDriver") - driver.quit() - return tweets - -def x_ambient_app(ctx: AmbientContext): - logger.info("Running X Ambient App") - tweets = scrape_tweets(10) - if not tweets: - logger.info("No tweets scraped.") - return - logger.warning(f"got back{len(tweets)} tweets from X feed.") - for tweet in tweets: - body = f"{tweet.text}\n\n {tweet.likes} Likes, {tweet.reposts} Reposts, {tweet.num_replies} Replies, {tweet.views} Views" - src = tweet.url or "https://x.com" - title = tweet.author_handle or "Tweet" - media_uris = tweet.images if tweet.images else [] - ctx.bg.post_to_feed(title=title, body=body, src_uri=src, media_uris=media_uris) - logger.debug("Finished posting tweets to feed.") - - -def test(): - print("Running X Ambient App TEST") - tweets = scrape_tweets(10) - if not tweets: - print("No tweets scraped.") - return - print(f"Scraped {len(tweets)} tweets from X feed.") - for tweet in tweets: - body = f"{tweet.text}\n\n {tweet.likes} Likes, {tweet.reposts} Reposts, {tweet.num_replies} Replies, {tweet.views} Views" - src = tweet.url or "https://x.com" - title = tweet.author_handle or "Tweet" - print(f"Posting to feed: {title}\n{body}\nSource: {src}\n") - print("Finished posting tweets to feed.") - -if __name__ == "__main__": - logger.info("Starting Xvfb for ChromeDriver App") - import asyncio - asyncio.run(start_xvfb()) - logger.info("Xvfb is ready") - time.sleep(1) # socket file exists, still might need a sec - - run_ambient(x_ambient_app) - - -""" -:cp ./apps/chrome/chromedriver_app.py app.py -:cp ./apps/chrome/chromedriver.py chromedriver.py -:cp ./apps/chrome/setup.sh setup.sh -:cp ./apps/chrome/xvfb_vnc.sh xvfb_vnc.sh -chmod +x setup.sh -chmod +x xvfb_vnc.sh -./setup.sh -http://localhost:80/containers/edb88273-c414-4b48-9a14-682317018cd6 -http://localhost:80/containers/dc33ce5b-f37b-4d65-a803-c7db4e045cb7 -""" \ No newline at end of file diff --git a/example-apps/ambient/twitter/icon.png b/example-apps/ambient/twitter/icon.png deleted file mode 100644 index 1980b44a971df4c20f9c52523f5513c7fa04f765..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 453872 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¬ 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

    ;3IzJ)>H|%;n|$ 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 diff --git a/example-apps/ambient/twitter/icon_aidan.png b/example-apps/ambient/twitter/icon_aidan.png deleted file mode 100644 index 51516fb00d22d5acc0c0f570471865ef0c6fcbab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3641 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 None: - loop = asyncio.get_running_loop() - deadline = loop.time() + timeout_s - - def logged_in() -> bool: - url = driver.current_url or "" - if "/home" in url and "x.com" in url: - return True - try: - return any(c.get("name") == "auth_token" for c in driver.get_cookies()) - except Exception: - return False - - while True: - if logged_in(): - return - if loop.time() >= deadline: - raise TimeoutError("Timed out waiting for user to log in") - await asyncio.sleep(poll_s) - - -async def main() -> int: - err = 0 - try: - driver = create_driver( - app_url="https://x.com", - fullscreen=True - ) - driver.get("https://x.com/") - logger.info("Waiting for user to log in to Twitter/X") - logger.error("Please log in to Twitter/X in the opened browser window") - await wait_for_login(driver, timeout_s=900) - logger.info("Logged in to Twitter/X successfully") - await asyncio.sleep(0.2) #dont need this - driver.quit() - driver = None - err = 0 - except Exception as e: - logger.exception("Error during Twitter/X onboarding") - err = 1 - finally: - try: - if driver: - driver.quit() - except Exception: - pass - return err - - - -if __name__ == "__main__": - ec = asyncio.run(main()) - exit(ec) \ No newline at end of file diff --git a/example-apps/ambient/twitter/onboard_test.py b/example-apps/ambient/twitter/onboard_test.py deleted file mode 100644 index e234237..0000000 --- a/example-apps/ambient/twitter/onboard_test.py +++ /dev/null @@ -1,73 +0,0 @@ -import time -import random -import os -import undetected_chromedriver as uc -from selenium.webdriver.common.by import By -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from selenium.common.exceptions import TimeoutException -from selenium.webdriver.remote.webelement import WebElement -from gourmet.ambient import AmbientContext, run_ambient - -from gourmet.desktop.chromedriver import create_driver, human_sleep, human_scroll -from gourmet.desktop.xvfb import start_xvfb, stop_xvfb -from dataclasses import dataclass -from typing import Optional -import asyncio -import logging -logger = logging.getLogger(__name__) -logger.setLevel(logging.DEBUG) -async def wait_for_login(driver, timeout_s: int = 900, poll_s: float = 0.2) -> None: - loop = asyncio.get_running_loop() - deadline = loop.time() + timeout_s - - def logged_in() -> bool: - url = driver.current_url or "" - if "/home" in url and "x.com" in url: - return True - try: - return any(c.get("name") == "auth_token" for c in driver.get_cookies()) - except Exception: - return False - - while True: - if logged_in(): - return - if loop.time() >= deadline: - raise TimeoutError("Timed out waiting for user to log in") - await asyncio.sleep(poll_s) - - -async def main() -> int: - err = 0 - try: - await start_xvfb() - driver = create_driver( - app_url="https://x.com", - fullscreen=True - ) - driver.get("https://x.com/") - logger.info("Waiting for user to log in to Twitter/X") - logger.error("Please log in to Twitter/X in the opened browser window") - await wait_for_login(driver, timeout_s=900) - logger.info("Logged in to Twitter/X successfully") - driver.quit() - driver = None - err = 0 - except Exception as e: - logger.exception("Error during Twitter/X onboarding") - err = 1 - finally: - try: - if driver: - driver.quit() - except Exception: - pass - await stop_xvfb() - return err - - - -if __name__ == "__main__": - ec = asyncio.run(main()) - exit(ec) \ No newline at end of file diff --git a/example-apps/ambient/twitter/truffile.yaml b/example-apps/ambient/twitter/truffile.yaml deleted file mode 100644 index 141675e..0000000 --- a/example-apps/ambient/twitter/truffile.yaml +++ /dev/null @@ -1,61 +0,0 @@ -metadata: - name: Xeet - type: background - description: | - Enable your Truffle¹ to browse your X feed and post curated content to your client. - By downloading Xeet to your Truffle account, you assume full legal and financial responsibility for the use of this software on your Truffle¹ and agree that Deepshard shall not be liable for any actions you take with Xeet. - Deepshard is not affiliated with X. Users must abide by X's terms of service. This application is for demonstration purposes only. - process: - cmd: - - python - - ambient.py - working_directory: / - environment: - PYTHONUNBUFFERED: "1" - icon_file: ./icon.png - default_schedule: - type: interval - interval: - duration: 30m -steps: - - name: Welcome - type: welcome - content: | - Welcome to Xeet. - This app will allow your Truffle to post tweets from accounts you follow directly to your feed. - This app does not condone the use of bots or automation that violates X's terms of service. - Using this app violates any and all terms of service of Truffle. Deepshard will not be held responsible for any actions taken by X against your account. - - name: Copy application files - type: files - files: - - source: ./ambient.py - destination: ./ambient.py - - source: ./onboard.py - destination: ./onboard.py - - name: Install dependencies - type: bash - run: | - pip install requests undetected-chromedriver selenium - - name: Sign into X - type: vnc - cmd: - - python - - onboard.py - closes_on_complete: true - description: | - A VNC window will open. Please sign into your X account to continue the installation. - This app does not condone the use of bots or automation that violates X's terms of service. - If the tab glitches out, press Ctrl+T to break out of fullscreen mode and try again. - Installation will continue once you have successfully signed in. - - name: Finalize installation - type: bash - run: | - sync || true - - - - - - - - \ No newline at end of file diff --git a/example-apps/focus/finance/app.py b/example-apps/focus/finance/app.py index 2106d20..8deff0e 100644 --- a/example-apps/focus/finance/app.py +++ b/example-apps/focus/finance/app.py @@ -1,7 +1,7 @@ import requests from mcp.server.fastmcp import FastMCP -API_KEY = "JJ3Z7KZVSHIB09WP" +API_KEY = "nope" BASE_URL = "https://www.alphavantage.co/query" HOST = "0.0.0.0" diff --git a/example-apps/focus/research/research.py b/example-apps/focus/research/research.py index 63e08b3..2dffc44 100644 --- a/example-apps/focus/research/research.py +++ b/example-apps/focus/research/research.py @@ -5,7 +5,7 @@ from mcp.server.fastmcp import FastMCP from abrasive.extract import extract_content_from_url -PERPLEXITY_KEY = "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" +PERPLEXITY_KEY = "you thought" class PerplexitySearcher: def __init__(self, key : str = PERPLEXITY_KEY): self.system_prompt = "You provide concise and accurate answers to queries, aim for recent information. This is presented to another LLM which will use it to help a user. Cite sources where possible and format your answer in markdown." diff --git a/genesis/cli.py b/genesis/cli.py index dd8310b..6de31f8 100644 --- a/genesis/cli.py +++ b/genesis/cli.py @@ -101,12 +101,16 @@ async def cmd_connect(args, storage: StorageService) -> int: ip = await resolve_mdns(hostname) spinner.stop(success=True) except RuntimeError: - spinner.fail(f"Could not find {device_name}") + spinner.fail(f"Could not resolve {device_name}.local") print() - print(f" {C.DIM}Make sure:{C.RESET}") - print(f" {C.DIM}{DOT} {device_name} is powered on{C.RESET}") - print(f" {C.DIM}{DOT} Device is connected to WiFi{C.RESET}") + print(f" {C.DIM}Try running:{C.RESET}") + print(f" {C.CYAN}ping {device_name}.local{C.RESET}") + print() + print(f" {C.DIM}If ping fails, check:{C.RESET}") + print(f" {C.DIM}{DOT} Device is powered on and connected to WiFi{C.RESET}") print(f" {C.DIM}{DOT} Your computer is on the same network{C.RESET}") + print(f" {C.DIM}{DOT} mDNS is working{C.RESET}") + print() return 1 address = f"{ip}:80" @@ -213,35 +217,35 @@ def check_python_syntax(file_path: Path) -> tuple[bool, str]: return False, f"Line {e.lineno}: {e.msg}" -def validate_app_dir(app_dir: Path, app_type: str) -> tuple[bool, dict | None, list[str]]: +def validate_app_dir(app_dir: Path) -> tuple[bool, dict | None, str | None, list[str]]: + """Validate app directory and return (valid, config, app_type, warnings).""" warnings = [] truffile = app_dir / "truffile.yaml" if not truffile.exists(): error(f"No truffile.yaml found in {app_dir}") - return False, None, warnings + return False, None, None, warnings try: with open(truffile) as f: config = yaml.safe_load(f) except yaml.YAMLError as e: error(f"Invalid truffile.yaml: {e}") - return False, None, warnings + return False, None, None, warnings meta = config.get("metadata", {}) if not meta.get("name"): error("metadata.name is required in truffile.yaml") - return False, None, warnings - - cfg_type = meta.get("type", "") - if app_type == "ambient" and cfg_type not in ("background", "ambient", ""): - error(f"This is a {cfg_type} app, not an ambient app") - print(f" {C.DIM}Use: genesis deploy focus {app_dir.name}{C.RESET}") - return False, None, warnings - elif app_type == "focus" and cfg_type not in ("foreground", "focus", ""): - error(f"This is a {cfg_type} app, not a focus app") - print(f" {C.DIM}Use: genesis deploy ambient {app_dir.name}{C.RESET}") - return False, None, warnings + return False, None, None, warnings + + cfg_type = meta.get("type", "").lower() + if cfg_type in ("background", "ambient"): + app_type = "ambient" + elif cfg_type in ("foreground", "focus"): + app_type = "focus" + else: + app_type = "focus" + warnings.append(f"No type specified in truffile.yaml, defaulting to focus") icon_file = meta.get("icon_file") if icon_file: @@ -251,20 +255,26 @@ def validate_app_dir(app_dir: Path, app_type: str) -> tuple[bool, dict | None, l else: warnings.append("No icon specified in truffile.yaml") + # Check files - either in steps or top-level files: + files_to_check = [] for step in config.get("steps", []): if step.get("type") == "files": - for f in step.get("files", []): - src = app_dir / f["source"] - if not src.exists(): - error(f"Source file not found: {src}") - return False, None, warnings - if src.suffix == ".py": - ok, err = check_python_syntax(src) - if not ok: - error(f"Syntax error in {src.name}: {err}") - return False, None, warnings + files_to_check.extend(step.get("files", [])) + # Also check top-level files: (simplified format) + files_to_check.extend(config.get("files", [])) + + for f in files_to_check: + src = app_dir / f["source"] + if not src.exists(): + error(f"Source file not found: {src}") + return False, None, None, warnings + if src.suffix == ".py": + ok, err = check_python_syntax(src) + if not ok: + error(f"Syntax error in {src.name}: {err}") + return False, None, None, warnings - return True, config, warnings + return True, config, app_type, warnings async def _do_deploy(client: TruffleClient, config: dict, app_dir: Path, app_type: str, device: str, interactive : bool = False) -> int: @@ -291,38 +301,54 @@ async def _do_deploy(client: TruffleClient, config: dict, app_dir: Path, app_typ spinner.stop(success=True) print(f" {C.DIM}Session: {client.app_uuid}{C.RESET}") if not interactive: + # Collect all files to upload (from steps or top-level) + files_to_upload = [] for step in config.get("steps", []): if step.get("type") == "files": - for f in step.get("files", []): - src = app_dir / f["source"] - dest = f["destination"] - spinner = Spinner(f"Uploading {src.name} {ARROW} {dest}") - spinner.start() - result = await client.upload(src, dest) - spinner.stop(success=True) - print(f" {C.DIM}{result.bytes} bytes, sha256={result.sha256[:12]}...{C.RESET}") - - elif step.get("type") == "bash": - step_name = step.get("name", "bash") - info(f"Running: {step_name}") - async for ev, data in client.exec_stream(step["run"], cwd=cwd): - if ev == "log": - try: - import json - obj = json.loads(data) - line = obj.get("line", "") - except Exception: - line = data - print(f" {C.DIM}{line}{C.RESET}") - elif ev == "exit": - try: - import json - code = int(json.loads(data).get("code", 0)) - if code != 0: - error(f"Exit code: {code}") - raise RuntimeError(f"Step '{step_name}' failed with exit code {code}") - except (ValueError, KeyError): - pass + files_to_upload.extend(step.get("files", [])) + # Also check top-level files: (simplified format) + files_to_upload.extend(config.get("files", [])) + + # Upload all files + for f in files_to_upload: + src = app_dir / f["source"] + dest = f["destination"] + spinner = Spinner(f"Uploading {src.name} {ARROW} {dest}") + spinner.start() + result = await client.upload(src, dest) + spinner.stop(success=True) + print(f" {C.DIM}{result.bytes} bytes, sha256={result.sha256[:12]}...{C.RESET}") + + # Collect all bash commands (from steps or top-level run:) + bash_commands = [] + for step in config.get("steps", []): + if step.get("type") == "bash": + bash_commands.append((step.get("name", "bash"), step["run"])) + # Also check top-level run: (simplified format) + if config.get("run"): + bash_commands.append(("Install dependencies", config["run"])) + + # Run all bash commands + for step_name, run_cmd in bash_commands: + info(f"Running: {step_name}") + async for ev, data in client.exec_stream(run_cmd, cwd=cwd): + if ev == "log": + try: + import json + obj = json.loads(data) + line = obj.get("line", "") + except Exception: + line = data + print(f" {C.DIM}{line}{C.RESET}") + elif ev == "exit": + try: + import json + code = int(json.loads(data).get("code", 0)) + if code != 0: + error(f"Exit code: {code}") + raise RuntimeError(f"Step '{step_name}' failed with exit code {code}") + except (ValueError, KeyError): + pass else: tty_task = asyncio.create_task(_run_ws_term(str(client.http_base or "").replace("http://","ws://").replace("https://","wss://") + "/term")) await tty_task @@ -375,8 +401,8 @@ async def _do_deploy(client: TruffleClient, config: dict, app_dir: Path, app_typ async def cmd_deploy(args, storage: StorageService) -> int: - app_type = args.type - app_dir = Path(args.path).resolve() + app_path = args.path if args.path else "." + app_dir = Path(app_path).resolve() do_cool_ass_terminal_shit = args.interactive == True if do_cool_ass_terminal_shit: info("doing cool ahh terminal shi") @@ -384,9 +410,9 @@ async def cmd_deploy(args, storage: StorageService) -> int: error(f"{app_dir} is not a valid directory") return 1 - info(f"Validating {app_type} app in {app_dir.name}") - valid, config, warnings = validate_app_dir(app_dir, app_type) - if not valid: + info(f"Validating app in {app_dir.name}") + valid, config, app_type, warnings = validate_app_dir(app_dir) + if not valid or not app_type: return 1 for w in warnings: @@ -409,8 +435,9 @@ async def cmd_deploy(args, storage: StorageService) -> int: try: ip = await resolve_mdns(f"{device}.local") spinner.stop(success=True) - except RuntimeError as e: - spinner.fail(str(e)) + except RuntimeError: + spinner.fail(f"Could not resolve {device}.local") + print(f" {C.DIM}Try: ping {device}.local{C.RESET}") return 1 address = f"{ip}:80" @@ -643,12 +670,13 @@ def print_help(): print(f"{C.BOLD}Commands:{C.RESET}") print(f" {C.BLUE}connect{C.RESET} Connect to a Truffle device") print(f" {C.BLUE}disconnect{C.RESET} Disconnect and clear credentials") - print(f" {C.BLUE}deploy{C.RESET} Deploy an app to the device") + print(f" {C.BLUE}deploy{C.RESET} [path] Deploy an app (reads type from truffile.yaml)") print(f" {C.BLUE}list{C.RESET} List installed apps or devices") print() print(f"{C.BOLD}Examples:{C.RESET}") print(f" {C.DIM}genesis connect truffle-6272{C.RESET}") - print(f" {C.DIM}genesis deploy ambient ./my-app{C.RESET}") + print(f" {C.DIM}genesis deploy ./my-app{C.RESET}") + print(f" {C.DIM}genesis deploy{C.RESET} {C.DIM}# uses current directory{C.RESET}") print(f" {C.DIM}genesis list apps{C.RESET}") print() @@ -672,9 +700,8 @@ def main() -> int: p_disconnect.add_argument("target", nargs="?") p_deploy = subparsers.add_parser("deploy", add_help=False) - p_deploy.add_argument("type", choices=["ambient", "focus"], nargs="?") - p_deploy.add_argument("path", nargs="?") - p_deploy.add_argument("-i", "--interactive", action="store_true", help="Install dependencies before deploying") + p_deploy.add_argument("path", nargs="?", default=".") + p_deploy.add_argument("-i", "--interactive", action="store_true", help="Interactive terminal mode") p_list = subparsers.add_parser("list", add_help=False) p_list.add_argument("what", choices=["apps", "devices"], nargs="?") @@ -695,11 +722,6 @@ def main() -> int: error("Missing device name") print(f" {C.DIM}Usage: genesis disconnect {C.RESET}") return 1 - elif args.command == "deploy": - if not args.type or not args.path: - error("Missing arguments") - print(f" {C.DIM}Usage: genesis deploy {C.RESET}") - return 1 elif args.command == "list": if not args.what: error("Missing argument") From d41efe2ade50e70c9dbfd18c125a3760057354e1 Mon Sep 17 00:00:00 2001 From: notabd7-deepshard Date: Fri, 30 Jan 2026 01:19:48 -0800 Subject: [PATCH 11/15] clean up interactive mode a little --- example-apps/ambient/hedge/truffile.yaml | 2 +- genesis/cli.py | 169 +++++++++++++++-------- pyproject.toml | 1 + 3 files changed, 112 insertions(+), 60 deletions(-) diff --git a/example-apps/ambient/hedge/truffile.yaml b/example-apps/ambient/hedge/truffile.yaml index 3313d37..c8f2779 100644 --- a/example-apps/ambient/hedge/truffile.yaml +++ b/example-apps/ambient/hedge/truffile.yaml @@ -22,4 +22,4 @@ files: destination: ./app.py run: | pip install --no-cache-dir requests - pip install --no-cache-dir -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ 'gourmet[ambient]==0.1.dev45' + pip install --no-cache-dir -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ 'gourmet[ambient]==0.1.dev45' \ No newline at end of file diff --git a/genesis/cli.py b/genesis/cli.py index 6de31f8..d1fee8e 100644 --- a/genesis/cli.py +++ b/genesis/cli.py @@ -74,6 +74,55 @@ def fail(self, message: str | None = None): sys.stdout.flush() +class ScrollingLog: + #felt a little fancy lol + """A scrolling log window that shows the last N lines in place.""" + + def __init__(self, height: int = 6, prefix: str = " "): + self.height = height + self.prefix = prefix + self.lines: list[str] = [] + self.started = False + try: + import shutil + self.width = shutil.get_terminal_size().columns - len(prefix) - 2 + except Exception: + self.width = 76 + + def _truncate(self, line: str) -> str: + if len(line) > self.width: + return line[:self.width - 3] + "..." + return line + + def _render(self): + if self.started: + sys.stdout.write(f"\033[{self.height}A") + + display = self.lines[-self.height:] if len(self.lines) >= self.height else self.lines + + while len(display) < self.height: + display.insert(0, "") + + for line in display: + truncated = self._truncate(line) + sys.stdout.write(f"\033[K{self.prefix}{C.DIM}{truncated}{C.RESET}\n") + + sys.stdout.flush() + self.started = True + + def add(self, line: str): + self.lines.append(line.rstrip()) + self._render() + + def finish(self): + if self.started: + sys.stdout.write(f"\033[{self.height}A") + for _ in range(self.height): + sys.stdout.write("\033[K\n") + sys.stdout.write(f"\033[{self.height}A") + sys.stdout.flush() + + def error(msg: str): print(f"{C.RED}{CROSS} Error:{C.RESET} {msg}") @@ -277,7 +326,7 @@ def validate_app_dir(app_dir: Path) -> tuple[bool, dict | None, str | None, list return True, config, app_type, warnings -async def _do_deploy(client: TruffleClient, config: dict, app_dir: Path, app_type: str, device: str, interactive : bool = False) -> int: +async def _do_deploy(client: TruffleClient, config: dict, app_dir: Path, app_type: str, device: str, interactive: bool = False) -> int: meta = config["metadata"] name = meta["name"] description = meta.get("description", "") @@ -300,58 +349,62 @@ async def _do_deploy(client: TruffleClient, config: dict, app_dir: Path, app_typ await asyncio.sleep(5) spinner.stop(success=True) print(f" {C.DIM}Session: {client.app_uuid}{C.RESET}") - if not interactive: - # Collect all files to upload (from steps or top-level) - files_to_upload = [] - for step in config.get("steps", []): - if step.get("type") == "files": - files_to_upload.extend(step.get("files", [])) - # Also check top-level files: (simplified format) - files_to_upload.extend(config.get("files", [])) - - # Upload all files - for f in files_to_upload: - src = app_dir / f["source"] - dest = f["destination"] - spinner = Spinner(f"Uploading {src.name} {ARROW} {dest}") - spinner.start() - result = await client.upload(src, dest) - spinner.stop(success=True) - print(f" {C.DIM}{result.bytes} bytes, sha256={result.sha256[:12]}...{C.RESET}") - - # Collect all bash commands (from steps or top-level run:) - bash_commands = [] - for step in config.get("steps", []): - if step.get("type") == "bash": - bash_commands.append((step.get("name", "bash"), step["run"])) - # Also check top-level run: (simplified format) - if config.get("run"): - bash_commands.append(("Install dependencies", config["run"])) - - # Run all bash commands - for step_name, run_cmd in bash_commands: - info(f"Running: {step_name}") - async for ev, data in client.exec_stream(run_cmd, cwd=cwd): - if ev == "log": - try: - import json - obj = json.loads(data) - line = obj.get("line", "") - except Exception: - line = data - print(f" {C.DIM}{line}{C.RESET}") - elif ev == "exit": - try: - import json - code = int(json.loads(data).get("code", 0)) - if code != 0: - error(f"Exit code: {code}") - raise RuntimeError(f"Step '{step_name}' failed with exit code {code}") - except (ValueError, KeyError): - pass - else: - tty_task = asyncio.create_task(_run_ws_term(str(client.http_base or "").replace("http://","ws://").replace("https://","wss://") + "/term")) - await tty_task + + # Always upload files first + files_to_upload = [] + for step in config.get("steps", []): + if step.get("type") == "files": + files_to_upload.extend(step.get("files", [])) + files_to_upload.extend(config.get("files", [])) + + for f in files_to_upload: + src = app_dir / f["source"] + dest = f["destination"] + spinner = Spinner(f"Uploading {src.name} {ARROW} {dest}") + spinner.start() + result = await client.upload(src, dest) + spinner.stop(success=True) + print(f" {C.DIM}{result.bytes} bytes, sha256={result.sha256[:12]}...{C.RESET}") + + # always run bash commands + bash_commands = [] + for step in config.get("steps", []): + if step.get("type") == "bash": + bash_commands.append((step.get("name", "bash"), step["run"])) + if config.get("run"): + bash_commands.append(("Install dependencies", config["run"])) + + for step_name, run_cmd in bash_commands: + info(f"Running: {step_name}") + log = ScrollingLog(height=6, prefix=" ") + exit_code = 0 + async for ev, data in client.exec_stream(run_cmd, cwd=cwd): + if ev == "log": + try: + import json + obj = json.loads(data) + line = obj.get("line", "") + except Exception: + line = data + log.add(line) + elif ev == "exit": + try: + import json + exit_code = int(json.loads(data).get("code", 0)) + except (ValueError, KeyError): + pass + log.finish() + if exit_code != 0: + error(f"Step '{step_name}' failed with exit code {exit_code}") + raise RuntimeError(f"Step '{step_name}' failed with exit code {exit_code}") + + if interactive: + # interactive mode: open shell after setup for testing/debugging + print() + info("Opening interactive shell (exit with Ctrl+D or 'exit' to finish deploy)") + ws_url = str(client.http_base or "").replace("http://", "ws://").replace("https://", "wss://") + "/term" + await _interactive_shell(ws_url) + print() spinner = Spinner(f"Finishing as {app_type} app") spinner.start() @@ -403,9 +456,7 @@ async def _do_deploy(client: TruffleClient, config: dict, app_dir: Path, app_typ async def cmd_deploy(args, storage: StorageService) -> int: app_path = args.path if args.path else "." app_dir = Path(app_path).resolve() - do_cool_ass_terminal_shit = args.interactive == True - if do_cool_ass_terminal_shit: - info("doing cool ahh terminal shi") + interactive = args.interactive if not app_dir.exists() or not app_dir.is_dir(): error(f"{app_dir} is not a valid directory") return 1 @@ -454,7 +505,7 @@ def handle_sigint(): loop.add_signal_handler(signal.SIGINT, handle_sigint) try: - deploy_task = asyncio.create_task(_do_deploy(client, config, app_dir, app_type, device, do_cool_ass_terminal_shit)) + deploy_task = asyncio.create_task(_do_deploy(client, config, app_dir, app_type, device, interactive)) return await deploy_task except asyncio.CancelledError: print() @@ -559,8 +610,8 @@ async def cmd_list_apps(storage: StorageService) -> int: finally: await client.close() -async def _run_ws_term(ws_url: str) -> int: - print(f"{C.DIM}Starting interactive terminal session {ws_url}...{C.RESET}") +async def _interactive_shell(ws_url: str) -> int: + print(f"{C.DIM}Opening shell... (exit with Ctrl+D or 'exit'){C.RESET}") import os, termios, fcntl, struct, tty, contextlib, json try: import websockets diff --git a/pyproject.toml b/pyproject.toml index c7071f1..5a2ee8a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,6 +22,7 @@ dependencies = [ "httpx>=0.27.0", "pyyaml>=6.0", "platformdirs>=3.10.0", + "websockets>=12.0", ] [project.scripts] From 4aee6140b808fb9b9ce11a198a74c28becb12786 Mon Sep 17 00:00:00 2001 From: notabd7-deepshard Date: Fri, 30 Jan 2026 01:56:58 -0800 Subject: [PATCH 12/15] genesis scan --- genesis/cli.py | 118 ++++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 1 + 2 files changed, 118 insertions(+), 1 deletion(-) diff --git a/genesis/cli.py b/genesis/cli.py index d1fee8e..ea9676b 100644 --- a/genesis/cli.py +++ b/genesis/cli.py @@ -713,18 +713,129 @@ def cmd_list(args, storage: StorageService) -> int: return 0 +async def cmd_scan(args, storage: StorageService) -> int: + try: + from zeroconf import ServiceBrowser, ServiceListener, Zeroconf, IPVersion + except ImportError: + error("zeroconf package required for scanning") + print(f" {C.DIM}pip install zeroconf{C.RESET}") + return 1 + + devices: dict[str, dict] = {} + scan_done = asyncio.Event() + + class TruffleListener(ServiceListener): + def add_service(self, zc: Zeroconf, type_: str, name: str): + if name.lower().startswith("truffle-"): + info = zc.get_service_info(type_, name) + device_name = name.split(".")[0] + if info and device_name not in devices: + addresses = [addr for addr in info.parsed_addresses(IPVersion.V4Only)] + devices[device_name] = { + "name": device_name, + "addresses": addresses, + "port": info.port, + } + + def remove_service(self, zc: Zeroconf, type_: str, name: str): + pass + + def update_service(self, zc: Zeroconf, type_: str, name: str): + pass + + timeout = args.timeout if hasattr(args, 'timeout') else 5 + + spinner = Spinner(f"Scanning for Truffle devices ({timeout}s)") + spinner.start() + + try: + zc = Zeroconf(ip_version=IPVersion.V4Only) + listener = TruffleListener() + + browsers = [ + ServiceBrowser(zc, "_truffle._tcp.local.", listener), + ] + + await asyncio.sleep(timeout) + + for browser in browsers: + browser.cancel() + zc.close() + + except Exception as e: + spinner.fail(f"Scan failed: {e}") + return 1 + + spinner.stop(success=True) + + if not devices: + print() + print(f" {C.DIM}No Truffle devices found on the network{C.RESET}") + print() + print(f" {C.DIM}Make sure your Truffle is:{C.RESET}") + print(f" {C.DIM}• Powered on{C.RESET}") + print(f" {C.DIM}• Connected to the same network as this computer{C.RESET}") + print() + return 1 + + print() + print(f"{C.BOLD}Found {len(devices)} Truffle device(s):{C.RESET}") + print() + + device_list = list(devices.values()) + for i, device in enumerate(device_list, 1): + name = device["name"] + addrs = ", ".join(device["addresses"]) if device["addresses"] else "unknown" + + already_connected = storage.get_token(name) is not None + if already_connected: + print(f" {C.GREEN}{i}.{C.RESET} {C.BOLD}{name}{C.RESET} {C.DIM}({addrs}){C.RESET} {C.GREEN}[connected]{C.RESET}") + else: + print(f" {C.CYAN}{i}.{C.RESET} {C.BOLD}{name}{C.RESET} {C.DIM}({addrs}){C.RESET}") + + print() + + try: + choice = input(f"Select device to connect (1-{len(device_list)}) or press Enter to cancel: ").strip() + except (KeyboardInterrupt, EOFError): + print() + return 0 + + if not choice: + return 0 + + try: + idx = int(choice) - 1 + if 0 <= idx < len(device_list): + selected = device_list[idx] + print() + + class FakeArgs: + device = selected["name"] + + return await cmd_connect(FakeArgs(), storage) + else: + error("Invalid selection") + return 1 + except ValueError: + error("Invalid input") + return 1 + + def print_help(): print(f"{MUSHROOM} {C.BOLD}Genesis{C.RESET} - TruffleOS SDK") print() print(f"{C.BOLD}Usage:{C.RESET} genesis [options]") print() print(f"{C.BOLD}Commands:{C.RESET}") + print(f" {C.BLUE}scan{C.RESET} Scan network for Truffle devices") print(f" {C.BLUE}connect{C.RESET} Connect to a Truffle device") print(f" {C.BLUE}disconnect{C.RESET} Disconnect and clear credentials") print(f" {C.BLUE}deploy{C.RESET} [path] Deploy an app (reads type from truffile.yaml)") print(f" {C.BLUE}list{C.RESET} List installed apps or devices") print() print(f"{C.BOLD}Examples:{C.RESET}") + print(f" {C.DIM}genesis scan{C.RESET} {C.DIM}# find devices on network{C.RESET}") print(f" {C.DIM}genesis connect truffle-6272{C.RESET}") print(f" {C.DIM}genesis deploy ./my-app{C.RESET}") print(f" {C.DIM}genesis deploy{C.RESET} {C.DIM}# uses current directory{C.RESET}") @@ -744,6 +855,9 @@ def main() -> int: ) subparsers = parser.add_subparsers(dest="command") + p_scan = subparsers.add_parser("scan", add_help=False) + p_scan.add_argument("-t", "--timeout", type=int, default=5, help="Scan timeout in seconds") + p_connect = subparsers.add_parser("connect", add_help=False) p_connect.add_argument("device", nargs="?") @@ -781,7 +895,9 @@ def main() -> int: storage = StorageService() - if args.command == "connect": + if args.command == "scan": + return run_async(cmd_scan(args, storage)) + elif args.command == "connect": return run_async(cmd_connect(args, storage)) elif args.command == "disconnect": return cmd_disconnect(args, storage) diff --git a/pyproject.toml b/pyproject.toml index 5a2ee8a..abc1009 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,6 +23,7 @@ dependencies = [ "pyyaml>=6.0", "platformdirs>=3.10.0", "websockets>=12.0", + "zeroconf>=0.131.0", ] [project.scripts] From b77da7a99e53e45e74b1fd4855a29878274574d0 Mon Sep 17 00:00:00 2001 From: notabd7-deepshard Date: Fri, 30 Jan 2026 02:18:45 -0800 Subject: [PATCH 13/15] add protos and rename to truffile test everything end to end --- .gitignore | 1 - README.md | 4 +- deploy_test.py | 2 +- pyproject.toml | 10 +- {genesis => truffile}/__init__.py | 0 {genesis => truffile}/cli.py | 36 +- {genesis => truffile}/client.py | 4 +- {genesis => truffile}/storage.py | 2 +- truffle/__init__.py | 0 truffle/app/__init__.py | 0 truffle/app/app_build_pb2.py | 36 + truffle/app/app_build_pb2.pyi | 19 + truffle/app/app_build_pb2_grpc.py | 24 + truffle/app/app_install_pb2.py | 43 + truffle/app/app_install_pb2.pyi | 23 + truffle/app/app_install_pb2_grpc.py | 142 ++ truffle/app/app_type_pb2.py | 36 + truffle/app/app_type_pb2.pyi | 16 + truffle/app/app_type_pb2_grpc.py | 24 + truffle/app/background_feed_pb2.py | 45 + truffle/app/background_feed_pb2.pyi | 52 + truffle/app/background_feed_pb2_grpc.py | 24 + truffle/app/background_pb2.py | 91 + truffle/app/background_pb2.pyi | 203 ++ truffle/app/background_pb2_grpc.py | 237 +++ truffle/app/curator_pb2.py | 57 + truffle/app/curator_pb2.pyi | 71 + truffle/app/curator_pb2_grpc.py | 183 ++ truffle/app/default_app_manifest_pb2.py | 41 + truffle/app/default_app_manifest_pb2.pyi | 35 + truffle/app/default_app_manifest_pb2_grpc.py | 24 + truffle/app/foreground_pb2.py | 41 + truffle/app/foreground_pb2.pyi | 30 + truffle/app/foreground_pb2_grpc.py | 24 + truffle/app/system_pb2.py | 38 + truffle/app/system_pb2.pyi | 22 + truffle/app/system_pb2_grpc.py | 24 + truffle/app/task_runtime_pb2.py | 128 ++ truffle/app/task_runtime_pb2.pyi | 124 ++ truffle/app/task_runtime_pb2_grpc.py | 274 +++ truffle/common/__init__.py | 0 truffle/common/content_pb2.py | 38 + truffle/common/content_pb2.pyi | 21 + truffle/common/content_pb2_grpc.py | 24 + truffle/common/file_pb2.py | 40 + truffle/common/file_pb2.pyi | 30 + truffle/common/file_pb2_grpc.py | 24 + truffle/common/icon_pb2.py | 36 + truffle/common/icon_pb2.pyi | 11 + truffle/common/icon_pb2_grpc.py | 24 + truffle/common/led_states_pb2.py | 40 + truffle/common/led_states_pb2.pyi | 47 + truffle/common/led_states_pb2_grpc.py | 24 + truffle/common/tool_provider_pb2.py | 40 + truffle/common/tool_provider_pb2.pyi | 33 + truffle/common/tool_provider_pb2_grpc.py | 24 + truffle/infer/__init__.py | 0 truffle/infer/convo/__init__.py | 0 truffle/infer/convo/conversation_pb2.py | 40 + truffle/infer/convo/conversation_pb2.pyi | 25 + truffle/infer/convo/conversation_pb2_grpc.py | 24 + truffle/infer/convo/msg_pb2.py | 38 + truffle/infer/convo/msg_pb2.pyi | 26 + truffle/infer/convo/msg_pb2_grpc.py | 24 + truffle/infer/embedding_pb2.py | 40 + truffle/infer/embedding_pb2.pyi | 33 + truffle/infer/embedding_pb2_grpc.py | 24 + truffle/infer/finishreason_pb2.py | 36 + truffle/infer/finishreason_pb2.pyi | 24 + truffle/infer/finishreason_pb2_grpc.py | 24 + truffle/infer/gencfg_pb2.py | 48 + truffle/infer/gencfg_pb2.pyi | 88 + truffle/infer/gencfg_pb2_grpc.py | 24 + truffle/infer/infer_pb2.py | 55 + truffle/infer/infer_pb2.pyi | 43 + truffle/infer/infer_pb2_grpc.py | 701 +++++++ truffle/infer/irequest_pb2.py | 46 + truffle/infer/irequest_pb2.pyi | 44 + truffle/infer/irequest_pb2_grpc.py | 24 + truffle/infer/iresponse_pb2.py | 40 + truffle/infer/iresponse_pb2.pyi | 27 + truffle/infer/iresponse_pb2_grpc.py | 24 + truffle/infer/model_pb2.py | 66 + truffle/infer/model_pb2.pyi | 171 ++ truffle/infer/model_pb2_grpc.py | 24 + truffle/infer/tokenize_pb2.py | 38 + truffle/infer/tokenize_pb2.pyi | 21 + truffle/infer/tokenize_pb2_grpc.py | 24 + truffle/infer/usage_pb2.py | 40 + truffle/infer/usage_pb2.pyi | 51 + truffle/infer/usage_pb2_grpc.py | 24 + truffle/os/__init__.py | 0 truffle/os/app_queries_pb2.py | 52 + truffle/os/app_queries_pb2.pyi | 55 + truffle/os/app_queries_pb2_grpc.py | 24 + truffle/os/background_feed_queries_pb2.py | 52 + truffle/os/background_feed_queries_pb2.pyi | 63 + .../os/background_feed_queries_pb2_grpc.py | 24 + truffle/os/builder_pb2.py | 48 + truffle/os/builder_pb2.pyi | 54 + truffle/os/builder_pb2_grpc.py | 24 + truffle/os/classification_pb2.py | 40 + truffle/os/classification_pb2.pyi | 28 + truffle/os/classification_pb2_grpc.py | 24 + truffle/os/client_metadata_pb2.py | 36 + truffle/os/client_metadata_pb2.pyi | 15 + truffle/os/client_metadata_pb2_grpc.py | 24 + truffle/os/client_session_pb2.py | 50 + truffle/os/client_session_pb2.pyi | 72 + truffle/os/client_session_pb2_grpc.py | 24 + truffle/os/client_state_pb2.py | 52 + truffle/os/client_state_pb2.pyi | 54 + truffle/os/client_state_pb2_grpc.py | 24 + truffle/os/client_user_pb2.py | 43 + truffle/os/client_user_pb2.pyi | 35 + truffle/os/client_user_pb2_grpc.py | 24 + truffle/os/hardware_control_pb2.py | 40 + truffle/os/hardware_control_pb2.pyi | 24 + truffle/os/hardware_control_pb2_grpc.py | 24 + truffle/os/hardware_info_pb2.py | 39 + truffle/os/hardware_info_pb2.pyi | 27 + truffle/os/hardware_info_pb2_grpc.py | 24 + truffle/os/hardware_network_pb2.py | 38 + truffle/os/hardware_network_pb2.pyi | 25 + truffle/os/hardware_network_pb2_grpc.py | 24 + truffle/os/hardware_settings_pb2.py | 38 + truffle/os/hardware_settings_pb2.pyi | 21 + truffle/os/hardware_settings_pb2_grpc.py | 24 + truffle/os/hardware_stats_pb2.py | 47 + truffle/os/hardware_stats_pb2.pyi | 85 + truffle/os/hardware_stats_pb2_grpc.py | 24 + truffle/os/installer_pb2.py | 83 + truffle/os/installer_pb2.pyi | 178 ++ truffle/os/installer_pb2_grpc.py | 24 + truffle/os/notification_pb2.py | 45 + truffle/os/notification_pb2.pyi | 62 + truffle/os/notification_pb2_grpc.py | 24 + truffle/os/system_info_pb2.py | 51 + truffle/os/system_info_pb2.pyi | 52 + truffle/os/system_info_pb2_grpc.py | 24 + truffle/os/system_settings_pb2.py | 40 + truffle/os/system_settings_pb2.pyi | 22 + truffle/os/system_settings_pb2_grpc.py | 24 + truffle/os/task_actions_pb2.py | 77 + truffle/os/task_actions_pb2.pyi | 87 + truffle/os/task_actions_pb2_grpc.py | 24 + truffle/os/task_error_pb2.py | 37 + truffle/os/task_error_pb2.pyi | 17 + truffle/os/task_error_pb2_grpc.py | 24 + truffle/os/task_info_pb2.py | 42 + truffle/os/task_info_pb2.pyi | 51 + truffle/os/task_info_pb2_grpc.py | 24 + truffle/os/task_options_pb2.py | 37 + truffle/os/task_options_pb2.pyi | 10 + truffle/os/task_options_pb2_grpc.py | 24 + truffle/os/task_pb2.py | 55 + truffle/os/task_pb2.pyi | 70 + truffle/os/task_pb2_grpc.py | 24 + truffle/os/task_queries_pb2.py | 62 + truffle/os/task_queries_pb2.pyi | 55 + truffle/os/task_queries_pb2_grpc.py | 24 + truffle/os/task_search_pb2.py | 44 + truffle/os/task_search_pb2.pyi | 46 + truffle/os/task_search_pb2_grpc.py | 24 + truffle/os/task_step_pb2.py | 52 + truffle/os/task_step_pb2.pyi | 82 + truffle/os/task_step_pb2_grpc.py | 24 + truffle/os/task_target_pb2.py | 36 + truffle/os/task_target_pb2.pyi | 13 + truffle/os/task_target_pb2_grpc.py | 24 + truffle/os/task_user_response_pb2.py | 42 + truffle/os/task_user_response_pb2.pyi | 37 + truffle/os/task_user_response_pb2_grpc.py | 24 + truffle/os/truffleos_pb2.py | 201 ++ truffle/os/truffleos_pb2.pyi | 107 ++ truffle/os/truffleos_pb2_grpc.py | 1635 +++++++++++++++++ 176 files changed, 9806 insertions(+), 30 deletions(-) rename {genesis => truffile}/__init__.py (100%) rename {genesis => truffile}/cli.py (96%) rename {genesis => truffile}/client.py (99%) rename {genesis => truffile}/storage.py (98%) create mode 100644 truffle/__init__.py create mode 100644 truffle/app/__init__.py create mode 100644 truffle/app/app_build_pb2.py create mode 100644 truffle/app/app_build_pb2.pyi create mode 100644 truffle/app/app_build_pb2_grpc.py create mode 100644 truffle/app/app_install_pb2.py create mode 100644 truffle/app/app_install_pb2.pyi create mode 100644 truffle/app/app_install_pb2_grpc.py create mode 100644 truffle/app/app_type_pb2.py create mode 100644 truffle/app/app_type_pb2.pyi create mode 100644 truffle/app/app_type_pb2_grpc.py create mode 100644 truffle/app/background_feed_pb2.py create mode 100644 truffle/app/background_feed_pb2.pyi create mode 100644 truffle/app/background_feed_pb2_grpc.py create mode 100644 truffle/app/background_pb2.py create mode 100644 truffle/app/background_pb2.pyi create mode 100644 truffle/app/background_pb2_grpc.py create mode 100644 truffle/app/curator_pb2.py create mode 100644 truffle/app/curator_pb2.pyi create mode 100644 truffle/app/curator_pb2_grpc.py create mode 100644 truffle/app/default_app_manifest_pb2.py create mode 100644 truffle/app/default_app_manifest_pb2.pyi create mode 100644 truffle/app/default_app_manifest_pb2_grpc.py create mode 100644 truffle/app/foreground_pb2.py create mode 100644 truffle/app/foreground_pb2.pyi create mode 100644 truffle/app/foreground_pb2_grpc.py create mode 100644 truffle/app/system_pb2.py create mode 100644 truffle/app/system_pb2.pyi create mode 100644 truffle/app/system_pb2_grpc.py create mode 100644 truffle/app/task_runtime_pb2.py create mode 100644 truffle/app/task_runtime_pb2.pyi create mode 100644 truffle/app/task_runtime_pb2_grpc.py create mode 100644 truffle/common/__init__.py create mode 100644 truffle/common/content_pb2.py create mode 100644 truffle/common/content_pb2.pyi create mode 100644 truffle/common/content_pb2_grpc.py create mode 100644 truffle/common/file_pb2.py create mode 100644 truffle/common/file_pb2.pyi create mode 100644 truffle/common/file_pb2_grpc.py create mode 100644 truffle/common/icon_pb2.py create mode 100644 truffle/common/icon_pb2.pyi create mode 100644 truffle/common/icon_pb2_grpc.py create mode 100644 truffle/common/led_states_pb2.py create mode 100644 truffle/common/led_states_pb2.pyi create mode 100644 truffle/common/led_states_pb2_grpc.py create mode 100644 truffle/common/tool_provider_pb2.py create mode 100644 truffle/common/tool_provider_pb2.pyi create mode 100644 truffle/common/tool_provider_pb2_grpc.py create mode 100644 truffle/infer/__init__.py create mode 100644 truffle/infer/convo/__init__.py create mode 100644 truffle/infer/convo/conversation_pb2.py create mode 100644 truffle/infer/convo/conversation_pb2.pyi create mode 100644 truffle/infer/convo/conversation_pb2_grpc.py create mode 100644 truffle/infer/convo/msg_pb2.py create mode 100644 truffle/infer/convo/msg_pb2.pyi create mode 100644 truffle/infer/convo/msg_pb2_grpc.py create mode 100644 truffle/infer/embedding_pb2.py create mode 100644 truffle/infer/embedding_pb2.pyi create mode 100644 truffle/infer/embedding_pb2_grpc.py create mode 100644 truffle/infer/finishreason_pb2.py create mode 100644 truffle/infer/finishreason_pb2.pyi create mode 100644 truffle/infer/finishreason_pb2_grpc.py create mode 100644 truffle/infer/gencfg_pb2.py create mode 100644 truffle/infer/gencfg_pb2.pyi create mode 100644 truffle/infer/gencfg_pb2_grpc.py create mode 100644 truffle/infer/infer_pb2.py create mode 100644 truffle/infer/infer_pb2.pyi create mode 100644 truffle/infer/infer_pb2_grpc.py create mode 100644 truffle/infer/irequest_pb2.py create mode 100644 truffle/infer/irequest_pb2.pyi create mode 100644 truffle/infer/irequest_pb2_grpc.py create mode 100644 truffle/infer/iresponse_pb2.py create mode 100644 truffle/infer/iresponse_pb2.pyi create mode 100644 truffle/infer/iresponse_pb2_grpc.py create mode 100644 truffle/infer/model_pb2.py create mode 100644 truffle/infer/model_pb2.pyi create mode 100644 truffle/infer/model_pb2_grpc.py create mode 100644 truffle/infer/tokenize_pb2.py create mode 100644 truffle/infer/tokenize_pb2.pyi create mode 100644 truffle/infer/tokenize_pb2_grpc.py create mode 100644 truffle/infer/usage_pb2.py create mode 100644 truffle/infer/usage_pb2.pyi create mode 100644 truffle/infer/usage_pb2_grpc.py create mode 100644 truffle/os/__init__.py create mode 100644 truffle/os/app_queries_pb2.py create mode 100644 truffle/os/app_queries_pb2.pyi create mode 100644 truffle/os/app_queries_pb2_grpc.py create mode 100644 truffle/os/background_feed_queries_pb2.py create mode 100644 truffle/os/background_feed_queries_pb2.pyi create mode 100644 truffle/os/background_feed_queries_pb2_grpc.py create mode 100644 truffle/os/builder_pb2.py create mode 100644 truffle/os/builder_pb2.pyi create mode 100644 truffle/os/builder_pb2_grpc.py create mode 100644 truffle/os/classification_pb2.py create mode 100644 truffle/os/classification_pb2.pyi create mode 100644 truffle/os/classification_pb2_grpc.py create mode 100644 truffle/os/client_metadata_pb2.py create mode 100644 truffle/os/client_metadata_pb2.pyi create mode 100644 truffle/os/client_metadata_pb2_grpc.py create mode 100644 truffle/os/client_session_pb2.py create mode 100644 truffle/os/client_session_pb2.pyi create mode 100644 truffle/os/client_session_pb2_grpc.py create mode 100644 truffle/os/client_state_pb2.py create mode 100644 truffle/os/client_state_pb2.pyi create mode 100644 truffle/os/client_state_pb2_grpc.py create mode 100644 truffle/os/client_user_pb2.py create mode 100644 truffle/os/client_user_pb2.pyi create mode 100644 truffle/os/client_user_pb2_grpc.py create mode 100644 truffle/os/hardware_control_pb2.py create mode 100644 truffle/os/hardware_control_pb2.pyi create mode 100644 truffle/os/hardware_control_pb2_grpc.py create mode 100644 truffle/os/hardware_info_pb2.py create mode 100644 truffle/os/hardware_info_pb2.pyi create mode 100644 truffle/os/hardware_info_pb2_grpc.py create mode 100644 truffle/os/hardware_network_pb2.py create mode 100644 truffle/os/hardware_network_pb2.pyi create mode 100644 truffle/os/hardware_network_pb2_grpc.py create mode 100644 truffle/os/hardware_settings_pb2.py create mode 100644 truffle/os/hardware_settings_pb2.pyi create mode 100644 truffle/os/hardware_settings_pb2_grpc.py create mode 100644 truffle/os/hardware_stats_pb2.py create mode 100644 truffle/os/hardware_stats_pb2.pyi create mode 100644 truffle/os/hardware_stats_pb2_grpc.py create mode 100644 truffle/os/installer_pb2.py create mode 100644 truffle/os/installer_pb2.pyi create mode 100644 truffle/os/installer_pb2_grpc.py create mode 100644 truffle/os/notification_pb2.py create mode 100644 truffle/os/notification_pb2.pyi create mode 100644 truffle/os/notification_pb2_grpc.py create mode 100644 truffle/os/system_info_pb2.py create mode 100644 truffle/os/system_info_pb2.pyi create mode 100644 truffle/os/system_info_pb2_grpc.py create mode 100644 truffle/os/system_settings_pb2.py create mode 100644 truffle/os/system_settings_pb2.pyi create mode 100644 truffle/os/system_settings_pb2_grpc.py create mode 100644 truffle/os/task_actions_pb2.py create mode 100644 truffle/os/task_actions_pb2.pyi create mode 100644 truffle/os/task_actions_pb2_grpc.py create mode 100644 truffle/os/task_error_pb2.py create mode 100644 truffle/os/task_error_pb2.pyi create mode 100644 truffle/os/task_error_pb2_grpc.py create mode 100644 truffle/os/task_info_pb2.py create mode 100644 truffle/os/task_info_pb2.pyi create mode 100644 truffle/os/task_info_pb2_grpc.py create mode 100644 truffle/os/task_options_pb2.py create mode 100644 truffle/os/task_options_pb2.pyi create mode 100644 truffle/os/task_options_pb2_grpc.py create mode 100644 truffle/os/task_pb2.py create mode 100644 truffle/os/task_pb2.pyi create mode 100644 truffle/os/task_pb2_grpc.py create mode 100644 truffle/os/task_queries_pb2.py create mode 100644 truffle/os/task_queries_pb2.pyi create mode 100644 truffle/os/task_queries_pb2_grpc.py create mode 100644 truffle/os/task_search_pb2.py create mode 100644 truffle/os/task_search_pb2.pyi create mode 100644 truffle/os/task_search_pb2_grpc.py create mode 100644 truffle/os/task_step_pb2.py create mode 100644 truffle/os/task_step_pb2.pyi create mode 100644 truffle/os/task_step_pb2_grpc.py create mode 100644 truffle/os/task_target_pb2.py create mode 100644 truffle/os/task_target_pb2.pyi create mode 100644 truffle/os/task_target_pb2_grpc.py create mode 100644 truffle/os/task_user_response_pb2.py create mode 100644 truffle/os/task_user_response_pb2.pyi create mode 100644 truffle/os/task_user_response_pb2_grpc.py create mode 100644 truffle/os/truffleos_pb2.py create mode 100644 truffle/os/truffleos_pb2.pyi create mode 100644 truffle/os/truffleos_pb2_grpc.py diff --git a/.gitignore b/.gitignore index 3b348f7..29c5afc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ .venv/ -truffle/ *.egg-info __pycache__/ .DS_Store diff --git a/README.md b/README.md index 725f63d..cfece36 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -genesis +truffile hope the name survives used same protos (copied it over) @@ -6,7 +6,7 @@ setup pyproject ```bash -cd /Users/truffle/work/3fw/genesis +cd /Users/truffle/work/3fw/truffile python -m venv .venv source .venv/bin/activate pip install -e . diff --git a/deploy_test.py b/deploy_test.py index 304b79e..5741f7a 100644 --- a/deploy_test.py +++ b/deploy_test.py @@ -3,7 +3,7 @@ import sys from pathlib import Path import yaml -from genesis import TruffleClient +from truffile import TruffleClient # add your truffle ip (get it with ping truffle-xxxx.local) DEVICE_ADDRESS = "192.168.1.32:80" diff --git a/pyproject.toml b/pyproject.toml index abc1009..846b92e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,12 +6,12 @@ build-backend = "setuptools.build_meta" version_scheme = "guess-next-dev" local_scheme = "no-local-version" fallback_version = "0.1.dev0" -version_file = "genesis/_version.py" +version_file = "truffile/_version.py" [project] -name = "genesis" +name = "truffile" dynamic = ["version"] -description = "Genesis the TruffleOS SDK - Connect and deploy apps to Truffle devices" +description = "truffile the TruffleOS SDK - Connect and deploy apps to Truffle devices" readme = "README.md" requires-python = ">=3.10" license = {text = "MIT"} @@ -27,7 +27,7 @@ dependencies = [ ] [project.scripts] -genesis = "genesis.cli:main" +truffile = "truffile.cli:main" [project.optional-dependencies] dev = [ @@ -37,7 +37,7 @@ dev = [ [tool.setuptools.packages.find] where = ["."] -include = ["genesis*", "truffle*"] +include = ["truffile*", "truffle*"] [tool.setuptools.package-data] "*" = ["*.pyi", "py.typed"] diff --git a/genesis/__init__.py b/truffile/__init__.py similarity index 100% rename from genesis/__init__.py rename to truffile/__init__.py diff --git a/genesis/cli.py b/truffile/cli.py similarity index 96% rename from genesis/cli.py rename to truffile/cli.py index ea9676b..433cdf1 100644 --- a/genesis/cli.py +++ b/truffile/cli.py @@ -9,8 +9,8 @@ import yaml -from genesis.storage import StorageService -from genesis.client import TruffleClient, resolve_mdns, NewSessionStatus +from truffile.storage import StorageService +from truffile.client import TruffleClient, resolve_mdns, NewSessionStatus # ANSI colors @@ -472,13 +472,13 @@ async def cmd_deploy(args, storage: StorageService) -> int: device = storage.state.last_used_device if not device: error("No device connected") - print(f" {C.DIM}Run: genesis connect {C.RESET}") + print(f" {C.DIM}Run: truffile connect {C.RESET}") return 1 token = storage.get_token(device) if not token: error(f"No token for {device}") - print(f" {C.DIM}Run: genesis connect {device}{C.RESET}") + print(f" {C.DIM}Run: truffile connect {device}{C.RESET}") return 1 spinner = Spinner(f"Resolving {device}") @@ -538,13 +538,13 @@ async def cmd_list_apps(storage: StorageService) -> int: device = storage.state.last_used_device if not device: error("No device connected") - print(f" {C.DIM}Run: genesis connect {C.RESET}") + print(f" {C.DIM}Run: truffile connect {C.RESET}") return 1 token = storage.get_token(device) if not token: error(f"No token for {device}") - print(f" {C.DIM}Run: genesis connect {device}{C.RESET}") + print(f" {C.DIM}Run: truffile connect {device}{C.RESET}") return 1 spinner = Spinner(f"Connecting to {device}") @@ -823,9 +823,9 @@ class FakeArgs: def print_help(): - print(f"{MUSHROOM} {C.BOLD}Genesis{C.RESET} - TruffleOS SDK") + print(f"{MUSHROOM} {C.BOLD}truffile{C.RESET} - TruffleOS SDK") print() - print(f"{C.BOLD}Usage:{C.RESET} genesis [options]") + print(f"{C.BOLD}Usage:{C.RESET} truffile [options]") print() print(f"{C.BOLD}Commands:{C.RESET}") print(f" {C.BLUE}scan{C.RESET} Scan network for Truffle devices") @@ -835,11 +835,11 @@ def print_help(): print(f" {C.BLUE}list{C.RESET} List installed apps or devices") print() print(f"{C.BOLD}Examples:{C.RESET}") - print(f" {C.DIM}genesis scan{C.RESET} {C.DIM}# find devices on network{C.RESET}") - print(f" {C.DIM}genesis connect truffle-6272{C.RESET}") - print(f" {C.DIM}genesis deploy ./my-app{C.RESET}") - print(f" {C.DIM}genesis deploy{C.RESET} {C.DIM}# uses current directory{C.RESET}") - print(f" {C.DIM}genesis list apps{C.RESET}") + print(f" {C.DIM}truffile scan{C.RESET} {C.DIM}# find devices on network{C.RESET}") + print(f" {C.DIM}truffile connect truffle-6272{C.RESET}") + print(f" {C.DIM}truffile deploy ./my-app{C.RESET}") + print(f" {C.DIM}truffile deploy{C.RESET} {C.DIM}# uses current directory{C.RESET}") + print(f" {C.DIM}truffile list apps{C.RESET}") print() @@ -849,8 +849,8 @@ def main() -> int: return 0 parser = argparse.ArgumentParser( - prog="genesis", - description="Genesis - TruffleOS SDK CLI", + prog="truffile", + description="truffile - TruffleOS SDK CLI", add_help=False, ) subparsers = parser.add_subparsers(dest="command") @@ -880,17 +880,17 @@ def main() -> int: if args.command == "connect": if not args.device: error("Missing device name") - print(f" {C.DIM}Usage: genesis connect {C.RESET}") + print(f" {C.DIM}Usage: truffile connect {C.RESET}") return 1 elif args.command == "disconnect": if not args.target: error("Missing device name") - print(f" {C.DIM}Usage: genesis disconnect {C.RESET}") + print(f" {C.DIM}Usage: truffile disconnect {C.RESET}") return 1 elif args.command == "list": if not args.what: error("Missing argument") - print(f" {C.DIM}Usage: genesis list {C.RESET}") + print(f" {C.DIM}Usage: truffile list {C.RESET}") return 1 storage = StorageService() diff --git a/genesis/client.py b/truffile/client.py similarity index 99% rename from genesis/client.py rename to truffile/client.py index b8903fe..ead281e 100644 --- a/genesis/client.py +++ b/truffile/client.py @@ -29,11 +29,11 @@ def get_client_metadata() -> ClientMetadata: - from genesis import __version__ + from truffile import __version__ metadata = ClientMetadata() metadata.device = platform.node() metadata.platform = platform.platform() - metadata.version = f"genesis-{__version__}-{platform.python_version()}" + metadata.version = f"truffile-{__version__}-{platform.python_version()}" return metadata diff --git a/genesis/storage.py b/truffile/storage.py similarity index 98% rename from genesis/storage.py rename to truffile/storage.py index 25e9e5b..b35e675 100644 --- a/genesis/storage.py +++ b/truffile/storage.py @@ -18,7 +18,7 @@ class StoredState: def get_storage_dir() -> Path: - dir_path = Path(platformdirs.user_data_dir("genesis")) + dir_path = Path(platformdirs.user_data_dir("truffile")) dir_path.mkdir(parents=True, exist_ok=True) return dir_path diff --git a/truffle/__init__.py b/truffle/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/truffle/app/__init__.py b/truffle/app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/truffle/app/app_build_pb2.py b/truffle/app/app_build_pb2.py new file mode 100644 index 0000000..28406bb --- /dev/null +++ b/truffle/app/app_build_pb2.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/app/app_build.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/app/app_build.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1btruffle/app/app_build.proto\x12\x0btruffle.app\"D\n\rProcessConfig\x12\x0b\n\x03\x63md\x18\x01 \x01(\t\x12\x0c\n\x04\x61rgs\x18\x02 \x03(\t\x12\x0b\n\x03\x65nv\x18\x03 \x03(\t\x12\x0b\n\x03\x63wd\x18\x04 \x01(\tb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.app.app_build_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_PROCESSCONFIG']._serialized_start=44 + _globals['_PROCESSCONFIG']._serialized_end=112 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/app/app_build_pb2.pyi b/truffle/app/app_build_pb2.pyi new file mode 100644 index 0000000..d62fb0c --- /dev/null +++ b/truffle/app/app_build_pb2.pyi @@ -0,0 +1,19 @@ +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable +from typing import ClassVar as _ClassVar, Optional as _Optional + +DESCRIPTOR: _descriptor.FileDescriptor + +class ProcessConfig(_message.Message): + __slots__ = ("cmd", "args", "env", "cwd") + CMD_FIELD_NUMBER: _ClassVar[int] + ARGS_FIELD_NUMBER: _ClassVar[int] + ENV_FIELD_NUMBER: _ClassVar[int] + CWD_FIELD_NUMBER: _ClassVar[int] + cmd: str + args: _containers.RepeatedScalarFieldContainer[str] + env: _containers.RepeatedScalarFieldContainer[str] + cwd: str + def __init__(self, cmd: _Optional[str] = ..., args: _Optional[_Iterable[str]] = ..., env: _Optional[_Iterable[str]] = ..., cwd: _Optional[str] = ...) -> None: ... diff --git a/truffle/app/app_build_pb2_grpc.py b/truffle/app/app_build_pb2_grpc.py new file mode 100644 index 0000000..8a82ac6 --- /dev/null +++ b/truffle/app/app_build_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/app/app_build_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/app/app_install_pb2.py b/truffle/app/app_install_pb2.py new file mode 100644 index 0000000..1f90b58 --- /dev/null +++ b/truffle/app/app_install_pb2.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/app/app_install.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/app/app_install.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.os import installer_pb2 as truffle_dot_os_dot_installer__pb2 +from truffle.app import app_build_pb2 as truffle_dot_app_dot_app__build__pb2 +from truffle.app import background_pb2 as truffle_dot_app_dot_background__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dtruffle/app/app_install.proto\x12\x0btruffle.app\x1a\x1atruffle/os/installer.proto\x1a\x1btruffle/app/app_build.proto\x1a\x1ctruffle/app/background.proto\".\n\x1aGetFinalInstallInfoRequest\x12\x10\n\x08\x61pp_uuid\x18\x01 \x01(\t\"\xa6\x01\n\x1bGetFinalInstallInfoResponse\x12\x32\n\x0eprocess_config\x18\x01 \x01(\x0b\x32\x1a.truffle.app.ProcessConfig\x12\x42\n\x0c\x62g_rt_policy\x18\x02 \x01(\x0b\x32\'.truffle.app.BackgroundAppRuntimePolicyH\x00\x88\x01\x01\x42\x0f\n\r_bg_rt_policy2\xce\x01\n\x11\x41ppInstallService\x12O\n\nInstallApp\x12\x1d.truffle.os.AppInstallRequest\x1a\x1e.truffle.os.AppInstallResponse(\x01\x30\x01\x12h\n\x13GetFinalInstallInfo\x12\'.truffle.app.GetFinalInstallInfoRequest\x1a(.truffle.app.GetFinalInstallInfoResponseb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.app.app_install_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_GETFINALINSTALLINFOREQUEST']._serialized_start=133 + _globals['_GETFINALINSTALLINFOREQUEST']._serialized_end=179 + _globals['_GETFINALINSTALLINFORESPONSE']._serialized_start=182 + _globals['_GETFINALINSTALLINFORESPONSE']._serialized_end=348 + _globals['_APPINSTALLSERVICE']._serialized_start=351 + _globals['_APPINSTALLSERVICE']._serialized_end=557 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/app/app_install_pb2.pyi b/truffle/app/app_install_pb2.pyi new file mode 100644 index 0000000..1d428e6 --- /dev/null +++ b/truffle/app/app_install_pb2.pyi @@ -0,0 +1,23 @@ +from truffle.os import installer_pb2 as _installer_pb2 +from truffle.app import app_build_pb2 as _app_build_pb2 +from truffle.app import background_pb2 as _background_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class GetFinalInstallInfoRequest(_message.Message): + __slots__ = ("app_uuid",) + APP_UUID_FIELD_NUMBER: _ClassVar[int] + app_uuid: str + def __init__(self, app_uuid: _Optional[str] = ...) -> None: ... + +class GetFinalInstallInfoResponse(_message.Message): + __slots__ = ("process_config", "bg_rt_policy") + PROCESS_CONFIG_FIELD_NUMBER: _ClassVar[int] + BG_RT_POLICY_FIELD_NUMBER: _ClassVar[int] + process_config: _app_build_pb2.ProcessConfig + bg_rt_policy: _background_pb2.BackgroundAppRuntimePolicy + def __init__(self, process_config: _Optional[_Union[_app_build_pb2.ProcessConfig, _Mapping]] = ..., bg_rt_policy: _Optional[_Union[_background_pb2.BackgroundAppRuntimePolicy, _Mapping]] = ...) -> None: ... diff --git a/truffle/app/app_install_pb2_grpc.py b/truffle/app/app_install_pb2_grpc.py new file mode 100644 index 0000000..9170a0f --- /dev/null +++ b/truffle/app/app_install_pb2_grpc.py @@ -0,0 +1,142 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + +from truffle.app import app_install_pb2 as truffle_dot_app_dot_app__install__pb2 +from truffle.os import installer_pb2 as truffle_dot_os_dot_installer__pb2 + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/app/app_install_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) + + +class AppInstallServiceStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.InstallApp = channel.stream_stream( + '/truffle.app.AppInstallService/InstallApp', + request_serializer=truffle_dot_os_dot_installer__pb2.AppInstallRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_installer__pb2.AppInstallResponse.FromString, + _registered_method=True) + self.GetFinalInstallInfo = channel.unary_unary( + '/truffle.app.AppInstallService/GetFinalInstallInfo', + request_serializer=truffle_dot_app_dot_app__install__pb2.GetFinalInstallInfoRequest.SerializeToString, + response_deserializer=truffle_dot_app_dot_app__install__pb2.GetFinalInstallInfoResponse.FromString, + _registered_method=True) + + +class AppInstallServiceServicer(object): + """Missing associated documentation comment in .proto file.""" + + def InstallApp(self, request_iterator, context): + """bidi stream for install modals and flow + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetFinalInstallInfo(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_AppInstallServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'InstallApp': grpc.stream_stream_rpc_method_handler( + servicer.InstallApp, + request_deserializer=truffle_dot_os_dot_installer__pb2.AppInstallRequest.FromString, + response_serializer=truffle_dot_os_dot_installer__pb2.AppInstallResponse.SerializeToString, + ), + 'GetFinalInstallInfo': grpc.unary_unary_rpc_method_handler( + servicer.GetFinalInstallInfo, + request_deserializer=truffle_dot_app_dot_app__install__pb2.GetFinalInstallInfoRequest.FromString, + response_serializer=truffle_dot_app_dot_app__install__pb2.GetFinalInstallInfoResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'truffle.app.AppInstallService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + server.add_registered_method_handlers('truffle.app.AppInstallService', rpc_method_handlers) + + + # This class is part of an EXPERIMENTAL API. +class AppInstallService(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def InstallApp(request_iterator, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.stream_stream( + request_iterator, + target, + '/truffle.app.AppInstallService/InstallApp', + truffle_dot_os_dot_installer__pb2.AppInstallRequest.SerializeToString, + truffle_dot_os_dot_installer__pb2.AppInstallResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetFinalInstallInfo(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.app.AppInstallService/GetFinalInstallInfo', + truffle_dot_app_dot_app__install__pb2.GetFinalInstallInfoRequest.SerializeToString, + truffle_dot_app_dot_app__install__pb2.GetFinalInstallInfoResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) diff --git a/truffle/app/app_type_pb2.py b/truffle/app/app_type_pb2.py new file mode 100644 index 0000000..2c65e37 --- /dev/null +++ b/truffle/app/app_type_pb2.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/app/app_type.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/app/app_type.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1atruffle/app/app_type.proto\x12\x0btruffle.app*f\n\x07\x41ppType\x12\x14\n\x10\x41PP_TYPE_INVALID\x10\x00\x12\x17\n\x13\x41PP_TYPE_FOREGROUND\x10\x01\x12\x17\n\x13\x41PP_TYPE_BACKGROUND\x10\x02\x12\x13\n\x0f\x41PP_TYPE_SYSTEM\x10\x03\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.app.app_type_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_APPTYPE']._serialized_start=43 + _globals['_APPTYPE']._serialized_end=145 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/app/app_type_pb2.pyi b/truffle/app/app_type_pb2.pyi new file mode 100644 index 0000000..9f2aeb0 --- /dev/null +++ b/truffle/app/app_type_pb2.pyi @@ -0,0 +1,16 @@ +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from typing import ClassVar as _ClassVar + +DESCRIPTOR: _descriptor.FileDescriptor + +class AppType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + APP_TYPE_INVALID: _ClassVar[AppType] + APP_TYPE_FOREGROUND: _ClassVar[AppType] + APP_TYPE_BACKGROUND: _ClassVar[AppType] + APP_TYPE_SYSTEM: _ClassVar[AppType] +APP_TYPE_INVALID: AppType +APP_TYPE_FOREGROUND: AppType +APP_TYPE_BACKGROUND: AppType +APP_TYPE_SYSTEM: AppType diff --git a/truffle/app/app_type_pb2_grpc.py b/truffle/app/app_type_pb2_grpc.py new file mode 100644 index 0000000..7886f3d --- /dev/null +++ b/truffle/app/app_type_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/app/app_type_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/app/background_feed_pb2.py b/truffle/app/background_feed_pb2.py new file mode 100644 index 0000000..abc9691 --- /dev/null +++ b/truffle/app/background_feed_pb2.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/app/background_feed.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/app/background_feed.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from truffle.common import content_pb2 as truffle_dot_common_dot_content__pb2 +from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!truffle/app/background_feed.proto\x12\x0btruffle.app\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1ctruffle/common/content.proto\x1a\x1cgoogle/protobuf/struct.proto\"\xe3\x01\n\x08\x46\x65\x65\x64\x43\x61rd\x12\r\n\x05title\x18\x01 \x01(\t\x12\x0c\n\x04\x62ody\x18\x02 \x01(\t\x12\x32\n\rmedia_sources\x18\x03 \x03(\x0b\x32\x1b.truffle.common.MediaSource\x12\x12\n\nsource_uri\x18\x04 \x01(\t\x12\x35\n\x11\x63ontent_timestamp\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\x08metadata\x18\x06 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x42\x0b\n\t_metadata\"9\n\x0e\x42\x61\x63kgroundFeed\x12\'\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x16.truffle.app.FeedEntry\"\x8c\x01\n\tFeedEntry\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x10\n\x08\x61pp_uuid\x18\x02 \x01(\t\x12-\n\ttimestamp\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12#\n\x04\x63\x61rd\x18\x05 \x01(\x0b\x32\x15.truffle.app.FeedCard\x12\r\n\x05likes\x18\x07 \x01(\x05\"?\n\x14\x46\x65\x65\x64\x45ntryTaskContext\x12\'\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x16.truffle.app.FeedEntryb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.app.background_feed_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_FEEDCARD']._serialized_start=144 + _globals['_FEEDCARD']._serialized_end=371 + _globals['_BACKGROUNDFEED']._serialized_start=373 + _globals['_BACKGROUNDFEED']._serialized_end=430 + _globals['_FEEDENTRY']._serialized_start=433 + _globals['_FEEDENTRY']._serialized_end=573 + _globals['_FEEDENTRYTASKCONTEXT']._serialized_start=575 + _globals['_FEEDENTRYTASKCONTEXT']._serialized_end=638 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/app/background_feed_pb2.pyi b/truffle/app/background_feed_pb2.pyi new file mode 100644 index 0000000..f9bbf1d --- /dev/null +++ b/truffle/app/background_feed_pb2.pyi @@ -0,0 +1,52 @@ +from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from truffle.common import content_pb2 as _content_pb2 +from google.protobuf import struct_pb2 as _struct_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class FeedCard(_message.Message): + __slots__ = ("title", "body", "media_sources", "source_uri", "content_timestamp", "metadata") + TITLE_FIELD_NUMBER: _ClassVar[int] + BODY_FIELD_NUMBER: _ClassVar[int] + MEDIA_SOURCES_FIELD_NUMBER: _ClassVar[int] + SOURCE_URI_FIELD_NUMBER: _ClassVar[int] + CONTENT_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + METADATA_FIELD_NUMBER: _ClassVar[int] + title: str + body: str + media_sources: _containers.RepeatedCompositeFieldContainer[_content_pb2.MediaSource] + source_uri: str + content_timestamp: _timestamp_pb2.Timestamp + metadata: _struct_pb2.Struct + def __init__(self, title: _Optional[str] = ..., body: _Optional[str] = ..., media_sources: _Optional[_Iterable[_Union[_content_pb2.MediaSource, _Mapping]]] = ..., source_uri: _Optional[str] = ..., content_timestamp: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., metadata: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + +class BackgroundFeed(_message.Message): + __slots__ = ("entries",) + ENTRIES_FIELD_NUMBER: _ClassVar[int] + entries: _containers.RepeatedCompositeFieldContainer[FeedEntry] + def __init__(self, entries: _Optional[_Iterable[_Union[FeedEntry, _Mapping]]] = ...) -> None: ... + +class FeedEntry(_message.Message): + __slots__ = ("id", "app_uuid", "timestamp", "card", "likes") + ID_FIELD_NUMBER: _ClassVar[int] + APP_UUID_FIELD_NUMBER: _ClassVar[int] + TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + CARD_FIELD_NUMBER: _ClassVar[int] + LIKES_FIELD_NUMBER: _ClassVar[int] + id: int + app_uuid: str + timestamp: _timestamp_pb2.Timestamp + card: FeedCard + likes: int + def __init__(self, id: _Optional[int] = ..., app_uuid: _Optional[str] = ..., timestamp: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., card: _Optional[_Union[FeedCard, _Mapping]] = ..., likes: _Optional[int] = ...) -> None: ... + +class FeedEntryTaskContext(_message.Message): + __slots__ = ("entries",) + ENTRIES_FIELD_NUMBER: _ClassVar[int] + entries: _containers.RepeatedCompositeFieldContainer[FeedEntry] + def __init__(self, entries: _Optional[_Iterable[_Union[FeedEntry, _Mapping]]] = ...) -> None: ... diff --git a/truffle/app/background_feed_pb2_grpc.py b/truffle/app/background_feed_pb2_grpc.py new file mode 100644 index 0000000..eb25b60 --- /dev/null +++ b/truffle/app/background_feed_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/app/background_feed_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/app/background_pb2.py b/truffle/app/background_pb2.py new file mode 100644 index 0000000..82b1a94 --- /dev/null +++ b/truffle/app/background_pb2.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/app/background.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/app/background.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 +from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 +from truffle.app import background_feed_pb2 as truffle_dot_app_dot_background__feed__pb2 +from truffle.common import icon_pb2 as truffle_dot_common_dot_icon__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1ctruffle/app/background.proto\x12\x0btruffle.app\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a google/protobuf/descriptor.proto\x1a!truffle/app/background_feed.proto\x1a\x19truffle/common/icon.proto\"\x9b\x0b\n\x1a\x42\x61\x63kgroundAppRuntimePolicy\x12\x44\n\x08interval\x18\x01 \x01(\x0b\x32\x30.truffle.app.BackgroundAppRuntimePolicy.IntervalH\x00\x12\x46\n\x05times\x18\x02 \x01(\x0b\x32\x35.truffle.app.BackgroundAppRuntimePolicy.SpecificTimesH\x00\x12@\n\x06\x61lways\x18\x03 \x01(\x0b\x32..truffle.app.BackgroundAppRuntimePolicy.AlwaysH\x00\x12\x37\n\x14\x66\x65\x65\x64_entry_retention\x18\n \x01(\x0b\x32\x19.google.protobuf.Duration\x1a\x39\n\tTimeOfDay\x12\x0c\n\x04hour\x18\x01 \x01(\r\x12\x0e\n\x06minute\x18\x02 \x01(\r\x12\x0e\n\x06second\x18\x03 \x01(\r\x1a\xa5\x01\n\x0b\x44\x61ilyWindow\x12K\n\x10\x64\x61ily_start_time\x18\x01 \x01(\x0b\x32\x31.truffle.app.BackgroundAppRuntimePolicy.TimeOfDay\x12I\n\x0e\x64\x61ily_end_time\x18\x02 \x01(\x0b\x32\x31.truffle.app.BackgroundAppRuntimePolicy.TimeOfDay\x1a\x91\x03\n\x0cWeeklyWindow\x12\x10\n\x08\x64\x61y_mask\x18\x01 \x01(\r\"\xee\x02\n\x05Masks\x12\x19\n\x15WEEKLY_WINDOW_DEFAULT\x10\x00\x12\x1a\n\x16WEEKLY_WINDOW_ALL_DAYS\x10\x00\x12\x1a\n\x16WEEKLY_WINDOW_SATURDAY\x10\x01\x12\x18\n\x14WEEKLY_WINDOW_FRIDAY\x10\x02\x12\x1a\n\x16WEEKLY_WINDOW_THURSDAY\x10\x04\x12\x1b\n\x17WEEKLY_WINDOW_WEDNESDAY\x10\x08\x12\x19\n\x15WEEKLY_WINDOW_TUESDAY\x10\x10\x12\x18\n\x14WEEKLY_WINDOW_MONDAY\x10 \x12\x18\n\x14WEEKLY_WINDOW_SUNDAY\x10@\x12\x1a\n\x16WEEKLY_WINDOW_WEEKENDS\x10\x41\x12\x1a\n\x16WEEKLY_WINDOW_WEEKDAYS\x10>\x12\x19\n\x15WEEKLY_WINDOW_NO_DAYS\x10\x7f\x12\x19\n\x15WEEKLY_WINDOW_INVALID\x10\x7f\x1a\x02\x10\x01\x1a\xbf\x02\n\x08Interval\x12+\n\x08\x64uration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.Duration\x12K\n\x08schedule\x18\x02 \x01(\x0b\x32\x39.truffle.app.BackgroundAppRuntimePolicy.Interval.Schedule\x1a\xb8\x01\n\x08Schedule\x12N\n\x0c\x64\x61ily_window\x18\x01 \x01(\x0b\x32\x33.truffle.app.BackgroundAppRuntimePolicy.DailyWindowH\x00\x88\x01\x01\x12K\n\rweekly_window\x18\x02 \x01(\x0b\x32\x34.truffle.app.BackgroundAppRuntimePolicy.WeeklyWindowB\x0f\n\r_daily_window\x1a\xa2\x01\n\rSpecificTimes\x12\x44\n\trun_times\x18\x01 \x03(\x0b\x32\x31.truffle.app.BackgroundAppRuntimePolicy.TimeOfDay\x12K\n\rweekly_window\x18\x02 \x01(\x0b\x32\x34.truffle.app.BackgroundAppRuntimePolicy.WeeklyWindow\x1a\x08\n\x06\x41lwaysB\x06\n\x04whenJ\x04\x08\x04\x10\n\"\xe8\x01\n\rBackgroundApp\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x35\n\x08metadata\x18\x02 \x01(\x0b\x32#.truffle.app.BackgroundApp.Metadata\x12?\n\x0eruntime_policy\x18\x03 \x01(\x0b\x32\'.truffle.app.BackgroundAppRuntimePolicy\x1aQ\n\x08Metadata\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\"\n\x04icon\x18\x02 \x01(\x0b\x32\x14.truffle.common.Icon\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\"\xdc\x01\n\x19\x42\x61\x63kgroundAppNotification\x12\x16\n\x0e\x66\x65\x65\x64_entry_ids\x18\x02 \x03(\x04\x12\x43\n\toperation\x18\x03 \x01(\x0e\x32\x30.truffle.app.BackgroundAppNotification.Operation\"b\n\tOperation\x12\x15\n\x11OPERATION_INVALID\x10\x00\x12\x11\n\rOPERATION_ADD\x10\x01\x12\x14\n\x10OPERATION_DELETE\x10\x02\x12\x15\n\x11OPERATION_REFRESH\x10\x03\"\x90\x01\n\x16\x42\x61\x63kgroundAppBuildInfo\x12\x35\n\x08metadata\x18\x01 \x01(\x0b\x32#.truffle.app.BackgroundApp.Metadata\x12?\n\x0eruntime_policy\x18\x02 \x01(\x0b\x32\'.truffle.app.BackgroundAppRuntimePolicy\"L\n%BackgroundAppSubmitFeedContentRequest\x12#\n\x04\x63\x61rd\x18\x02 \x01(\x0b\x32\x15.truffle.app.FeedCard\"?\n&BackgroundAppSubmitFeedContentResponse\x12\x15\n\rfeed_entry_id\x18\x01 \x01(\x04\"\x1b\n\x19\x42\x61\x63kgroundAppOnRunRequest\"\x1c\n\x1a\x42\x61\x63kgroundAppOnRunResponse\"\x1b\n\x19\x42\x61\x63kgroundAppYieldRequest\"Y\n\x1a\x42\x61\x63kgroundAppYieldResponse\x12;\n\x17next_scheduled_run_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xeb\x01\n\x12\x42\x61\x63kgroundAppError\x12=\n\nerror_type\x18\x01 \x01(\x0e\x32).truffle.app.BackgroundAppError.ErrorType\x12\x15\n\rerror_message\x18\x02 \x01(\t\"\x7f\n\tErrorType\x12\x1d\n\x19\x42G_APP_ERROR_TYPE_INVALID\x10\x00\x12\x1d\n\x19\x42G_APP_ERROR_TYPE_RUNTIME\x10\x01\x12\x15\n\x11\x42G_APP_ERROR_AUTH\x10\x02\x12\x1d\n\x19\x42G_APP_ERROR_TYPE_UNKNOWN\x10\x03\"m\n\x1f\x42\x61\x63kgroundAppReportErrorRequest\x12.\n\x05\x65rror\x18\x01 \x01(\x0b\x32\x1f.truffle.app.BackgroundAppError\x12\x1a\n\x12needs_intervention\x18\x02 \x01(\x08\"\"\n BackgroundAppReportErrorResponse2\xb4\x03\n\x14\x42\x61\x63kgroundAppService\x12|\n\x11SubmitFeedContent\x12\x32.truffle.app.BackgroundAppSubmitFeedContentRequest\x1a\x33.truffle.app.BackgroundAppSubmitFeedContentResponse\x12X\n\x05OnRun\x12&.truffle.app.BackgroundAppOnRunRequest\x1a\'.truffle.app.BackgroundAppOnRunResponse\x12X\n\x05Yield\x12&.truffle.app.BackgroundAppYieldRequest\x1a\'.truffle.app.BackgroundAppYieldResponse\x12j\n\x0bReportError\x12,.truffle.app.BackgroundAppReportErrorRequest\x1a-.truffle.app.BackgroundAppReportErrorResponseb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.app.background_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_BACKGROUNDAPPRUNTIMEPOLICY_WEEKLYWINDOW_MASKS']._loaded_options = None + _globals['_BACKGROUNDAPPRUNTIMEPOLICY_WEEKLYWINDOW_MASKS']._serialized_options = b'\020\001' + _globals['_BACKGROUNDAPPRUNTIMEPOLICY']._serialized_start=207 + _globals['_BACKGROUNDAPPRUNTIMEPOLICY']._serialized_end=1642 + _globals['_BACKGROUNDAPPRUNTIMEPOLICY_TIMEOFDAY']._serialized_start=502 + _globals['_BACKGROUNDAPPRUNTIMEPOLICY_TIMEOFDAY']._serialized_end=559 + _globals['_BACKGROUNDAPPRUNTIMEPOLICY_DAILYWINDOW']._serialized_start=562 + _globals['_BACKGROUNDAPPRUNTIMEPOLICY_DAILYWINDOW']._serialized_end=727 + _globals['_BACKGROUNDAPPRUNTIMEPOLICY_WEEKLYWINDOW']._serialized_start=730 + _globals['_BACKGROUNDAPPRUNTIMEPOLICY_WEEKLYWINDOW']._serialized_end=1131 + _globals['_BACKGROUNDAPPRUNTIMEPOLICY_WEEKLYWINDOW_MASKS']._serialized_start=765 + _globals['_BACKGROUNDAPPRUNTIMEPOLICY_WEEKLYWINDOW_MASKS']._serialized_end=1131 + _globals['_BACKGROUNDAPPRUNTIMEPOLICY_INTERVAL']._serialized_start=1134 + _globals['_BACKGROUNDAPPRUNTIMEPOLICY_INTERVAL']._serialized_end=1453 + _globals['_BACKGROUNDAPPRUNTIMEPOLICY_INTERVAL_SCHEDULE']._serialized_start=1269 + _globals['_BACKGROUNDAPPRUNTIMEPOLICY_INTERVAL_SCHEDULE']._serialized_end=1453 + _globals['_BACKGROUNDAPPRUNTIMEPOLICY_SPECIFICTIMES']._serialized_start=1456 + _globals['_BACKGROUNDAPPRUNTIMEPOLICY_SPECIFICTIMES']._serialized_end=1618 + _globals['_BACKGROUNDAPPRUNTIMEPOLICY_ALWAYS']._serialized_start=1620 + _globals['_BACKGROUNDAPPRUNTIMEPOLICY_ALWAYS']._serialized_end=1628 + _globals['_BACKGROUNDAPP']._serialized_start=1645 + _globals['_BACKGROUNDAPP']._serialized_end=1877 + _globals['_BACKGROUNDAPP_METADATA']._serialized_start=1796 + _globals['_BACKGROUNDAPP_METADATA']._serialized_end=1877 + _globals['_BACKGROUNDAPPNOTIFICATION']._serialized_start=1880 + _globals['_BACKGROUNDAPPNOTIFICATION']._serialized_end=2100 + _globals['_BACKGROUNDAPPNOTIFICATION_OPERATION']._serialized_start=2002 + _globals['_BACKGROUNDAPPNOTIFICATION_OPERATION']._serialized_end=2100 + _globals['_BACKGROUNDAPPBUILDINFO']._serialized_start=2103 + _globals['_BACKGROUNDAPPBUILDINFO']._serialized_end=2247 + _globals['_BACKGROUNDAPPSUBMITFEEDCONTENTREQUEST']._serialized_start=2249 + _globals['_BACKGROUNDAPPSUBMITFEEDCONTENTREQUEST']._serialized_end=2325 + _globals['_BACKGROUNDAPPSUBMITFEEDCONTENTRESPONSE']._serialized_start=2327 + _globals['_BACKGROUNDAPPSUBMITFEEDCONTENTRESPONSE']._serialized_end=2390 + _globals['_BACKGROUNDAPPONRUNREQUEST']._serialized_start=2392 + _globals['_BACKGROUNDAPPONRUNREQUEST']._serialized_end=2419 + _globals['_BACKGROUNDAPPONRUNRESPONSE']._serialized_start=2421 + _globals['_BACKGROUNDAPPONRUNRESPONSE']._serialized_end=2449 + _globals['_BACKGROUNDAPPYIELDREQUEST']._serialized_start=2451 + _globals['_BACKGROUNDAPPYIELDREQUEST']._serialized_end=2478 + _globals['_BACKGROUNDAPPYIELDRESPONSE']._serialized_start=2480 + _globals['_BACKGROUNDAPPYIELDRESPONSE']._serialized_end=2569 + _globals['_BACKGROUNDAPPERROR']._serialized_start=2572 + _globals['_BACKGROUNDAPPERROR']._serialized_end=2807 + _globals['_BACKGROUNDAPPERROR_ERRORTYPE']._serialized_start=2680 + _globals['_BACKGROUNDAPPERROR_ERRORTYPE']._serialized_end=2807 + _globals['_BACKGROUNDAPPREPORTERRORREQUEST']._serialized_start=2809 + _globals['_BACKGROUNDAPPREPORTERRORREQUEST']._serialized_end=2918 + _globals['_BACKGROUNDAPPREPORTERRORRESPONSE']._serialized_start=2920 + _globals['_BACKGROUNDAPPREPORTERRORRESPONSE']._serialized_end=2954 + _globals['_BACKGROUNDAPPSERVICE']._serialized_start=2957 + _globals['_BACKGROUNDAPPSERVICE']._serialized_end=3393 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/app/background_pb2.pyi b/truffle/app/background_pb2.pyi new file mode 100644 index 0000000..7847843 --- /dev/null +++ b/truffle/app/background_pb2.pyi @@ -0,0 +1,203 @@ +from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from google.protobuf import duration_pb2 as _duration_pb2 +from google.protobuf import descriptor_pb2 as _descriptor_pb2 +from truffle.app import background_feed_pb2 as _background_feed_pb2 +from truffle.common import icon_pb2 as _icon_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class BackgroundAppRuntimePolicy(_message.Message): + __slots__ = ("interval", "times", "always", "feed_entry_retention") + class TimeOfDay(_message.Message): + __slots__ = ("hour", "minute", "second") + HOUR_FIELD_NUMBER: _ClassVar[int] + MINUTE_FIELD_NUMBER: _ClassVar[int] + SECOND_FIELD_NUMBER: _ClassVar[int] + hour: int + minute: int + second: int + def __init__(self, hour: _Optional[int] = ..., minute: _Optional[int] = ..., second: _Optional[int] = ...) -> None: ... + class DailyWindow(_message.Message): + __slots__ = ("daily_start_time", "daily_end_time") + DAILY_START_TIME_FIELD_NUMBER: _ClassVar[int] + DAILY_END_TIME_FIELD_NUMBER: _ClassVar[int] + daily_start_time: BackgroundAppRuntimePolicy.TimeOfDay + daily_end_time: BackgroundAppRuntimePolicy.TimeOfDay + def __init__(self, daily_start_time: _Optional[_Union[BackgroundAppRuntimePolicy.TimeOfDay, _Mapping]] = ..., daily_end_time: _Optional[_Union[BackgroundAppRuntimePolicy.TimeOfDay, _Mapping]] = ...) -> None: ... + class WeeklyWindow(_message.Message): + __slots__ = ("day_mask",) + class Masks(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + WEEKLY_WINDOW_DEFAULT: _ClassVar[BackgroundAppRuntimePolicy.WeeklyWindow.Masks] + WEEKLY_WINDOW_ALL_DAYS: _ClassVar[BackgroundAppRuntimePolicy.WeeklyWindow.Masks] + WEEKLY_WINDOW_SATURDAY: _ClassVar[BackgroundAppRuntimePolicy.WeeklyWindow.Masks] + WEEKLY_WINDOW_FRIDAY: _ClassVar[BackgroundAppRuntimePolicy.WeeklyWindow.Masks] + WEEKLY_WINDOW_THURSDAY: _ClassVar[BackgroundAppRuntimePolicy.WeeklyWindow.Masks] + WEEKLY_WINDOW_WEDNESDAY: _ClassVar[BackgroundAppRuntimePolicy.WeeklyWindow.Masks] + WEEKLY_WINDOW_TUESDAY: _ClassVar[BackgroundAppRuntimePolicy.WeeklyWindow.Masks] + WEEKLY_WINDOW_MONDAY: _ClassVar[BackgroundAppRuntimePolicy.WeeklyWindow.Masks] + WEEKLY_WINDOW_SUNDAY: _ClassVar[BackgroundAppRuntimePolicy.WeeklyWindow.Masks] + WEEKLY_WINDOW_WEEKENDS: _ClassVar[BackgroundAppRuntimePolicy.WeeklyWindow.Masks] + WEEKLY_WINDOW_WEEKDAYS: _ClassVar[BackgroundAppRuntimePolicy.WeeklyWindow.Masks] + WEEKLY_WINDOW_NO_DAYS: _ClassVar[BackgroundAppRuntimePolicy.WeeklyWindow.Masks] + WEEKLY_WINDOW_INVALID: _ClassVar[BackgroundAppRuntimePolicy.WeeklyWindow.Masks] + WEEKLY_WINDOW_DEFAULT: BackgroundAppRuntimePolicy.WeeklyWindow.Masks + WEEKLY_WINDOW_ALL_DAYS: BackgroundAppRuntimePolicy.WeeklyWindow.Masks + WEEKLY_WINDOW_SATURDAY: BackgroundAppRuntimePolicy.WeeklyWindow.Masks + WEEKLY_WINDOW_FRIDAY: BackgroundAppRuntimePolicy.WeeklyWindow.Masks + WEEKLY_WINDOW_THURSDAY: BackgroundAppRuntimePolicy.WeeklyWindow.Masks + WEEKLY_WINDOW_WEDNESDAY: BackgroundAppRuntimePolicy.WeeklyWindow.Masks + WEEKLY_WINDOW_TUESDAY: BackgroundAppRuntimePolicy.WeeklyWindow.Masks + WEEKLY_WINDOW_MONDAY: BackgroundAppRuntimePolicy.WeeklyWindow.Masks + WEEKLY_WINDOW_SUNDAY: BackgroundAppRuntimePolicy.WeeklyWindow.Masks + WEEKLY_WINDOW_WEEKENDS: BackgroundAppRuntimePolicy.WeeklyWindow.Masks + WEEKLY_WINDOW_WEEKDAYS: BackgroundAppRuntimePolicy.WeeklyWindow.Masks + WEEKLY_WINDOW_NO_DAYS: BackgroundAppRuntimePolicy.WeeklyWindow.Masks + WEEKLY_WINDOW_INVALID: BackgroundAppRuntimePolicy.WeeklyWindow.Masks + DAY_MASK_FIELD_NUMBER: _ClassVar[int] + day_mask: int + def __init__(self, day_mask: _Optional[int] = ...) -> None: ... + class Interval(_message.Message): + __slots__ = ("duration", "schedule") + class Schedule(_message.Message): + __slots__ = ("daily_window", "weekly_window") + DAILY_WINDOW_FIELD_NUMBER: _ClassVar[int] + WEEKLY_WINDOW_FIELD_NUMBER: _ClassVar[int] + daily_window: BackgroundAppRuntimePolicy.DailyWindow + weekly_window: BackgroundAppRuntimePolicy.WeeklyWindow + def __init__(self, daily_window: _Optional[_Union[BackgroundAppRuntimePolicy.DailyWindow, _Mapping]] = ..., weekly_window: _Optional[_Union[BackgroundAppRuntimePolicy.WeeklyWindow, _Mapping]] = ...) -> None: ... + DURATION_FIELD_NUMBER: _ClassVar[int] + SCHEDULE_FIELD_NUMBER: _ClassVar[int] + duration: _duration_pb2.Duration + schedule: BackgroundAppRuntimePolicy.Interval.Schedule + def __init__(self, duration: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., schedule: _Optional[_Union[BackgroundAppRuntimePolicy.Interval.Schedule, _Mapping]] = ...) -> None: ... + class SpecificTimes(_message.Message): + __slots__ = ("run_times", "weekly_window") + RUN_TIMES_FIELD_NUMBER: _ClassVar[int] + WEEKLY_WINDOW_FIELD_NUMBER: _ClassVar[int] + run_times: _containers.RepeatedCompositeFieldContainer[BackgroundAppRuntimePolicy.TimeOfDay] + weekly_window: BackgroundAppRuntimePolicy.WeeklyWindow + def __init__(self, run_times: _Optional[_Iterable[_Union[BackgroundAppRuntimePolicy.TimeOfDay, _Mapping]]] = ..., weekly_window: _Optional[_Union[BackgroundAppRuntimePolicy.WeeklyWindow, _Mapping]] = ...) -> None: ... + class Always(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + INTERVAL_FIELD_NUMBER: _ClassVar[int] + TIMES_FIELD_NUMBER: _ClassVar[int] + ALWAYS_FIELD_NUMBER: _ClassVar[int] + FEED_ENTRY_RETENTION_FIELD_NUMBER: _ClassVar[int] + interval: BackgroundAppRuntimePolicy.Interval + times: BackgroundAppRuntimePolicy.SpecificTimes + always: BackgroundAppRuntimePolicy.Always + feed_entry_retention: _duration_pb2.Duration + def __init__(self, interval: _Optional[_Union[BackgroundAppRuntimePolicy.Interval, _Mapping]] = ..., times: _Optional[_Union[BackgroundAppRuntimePolicy.SpecificTimes, _Mapping]] = ..., always: _Optional[_Union[BackgroundAppRuntimePolicy.Always, _Mapping]] = ..., feed_entry_retention: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ...) -> None: ... + +class BackgroundApp(_message.Message): + __slots__ = ("uuid", "metadata", "runtime_policy") + class Metadata(_message.Message): + __slots__ = ("name", "icon", "description") + NAME_FIELD_NUMBER: _ClassVar[int] + ICON_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + name: str + icon: _icon_pb2.Icon + description: str + def __init__(self, name: _Optional[str] = ..., icon: _Optional[_Union[_icon_pb2.Icon, _Mapping]] = ..., description: _Optional[str] = ...) -> None: ... + UUID_FIELD_NUMBER: _ClassVar[int] + METADATA_FIELD_NUMBER: _ClassVar[int] + RUNTIME_POLICY_FIELD_NUMBER: _ClassVar[int] + uuid: str + metadata: BackgroundApp.Metadata + runtime_policy: BackgroundAppRuntimePolicy + def __init__(self, uuid: _Optional[str] = ..., metadata: _Optional[_Union[BackgroundApp.Metadata, _Mapping]] = ..., runtime_policy: _Optional[_Union[BackgroundAppRuntimePolicy, _Mapping]] = ...) -> None: ... + +class BackgroundAppNotification(_message.Message): + __slots__ = ("feed_entry_ids", "operation") + class Operation(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + OPERATION_INVALID: _ClassVar[BackgroundAppNotification.Operation] + OPERATION_ADD: _ClassVar[BackgroundAppNotification.Operation] + OPERATION_DELETE: _ClassVar[BackgroundAppNotification.Operation] + OPERATION_REFRESH: _ClassVar[BackgroundAppNotification.Operation] + OPERATION_INVALID: BackgroundAppNotification.Operation + OPERATION_ADD: BackgroundAppNotification.Operation + OPERATION_DELETE: BackgroundAppNotification.Operation + OPERATION_REFRESH: BackgroundAppNotification.Operation + FEED_ENTRY_IDS_FIELD_NUMBER: _ClassVar[int] + OPERATION_FIELD_NUMBER: _ClassVar[int] + feed_entry_ids: _containers.RepeatedScalarFieldContainer[int] + operation: BackgroundAppNotification.Operation + def __init__(self, feed_entry_ids: _Optional[_Iterable[int]] = ..., operation: _Optional[_Union[BackgroundAppNotification.Operation, str]] = ...) -> None: ... + +class BackgroundAppBuildInfo(_message.Message): + __slots__ = ("metadata", "runtime_policy") + METADATA_FIELD_NUMBER: _ClassVar[int] + RUNTIME_POLICY_FIELD_NUMBER: _ClassVar[int] + metadata: BackgroundApp.Metadata + runtime_policy: BackgroundAppRuntimePolicy + def __init__(self, metadata: _Optional[_Union[BackgroundApp.Metadata, _Mapping]] = ..., runtime_policy: _Optional[_Union[BackgroundAppRuntimePolicy, _Mapping]] = ...) -> None: ... + +class BackgroundAppSubmitFeedContentRequest(_message.Message): + __slots__ = ("card",) + CARD_FIELD_NUMBER: _ClassVar[int] + card: _background_feed_pb2.FeedCard + def __init__(self, card: _Optional[_Union[_background_feed_pb2.FeedCard, _Mapping]] = ...) -> None: ... + +class BackgroundAppSubmitFeedContentResponse(_message.Message): + __slots__ = ("feed_entry_id",) + FEED_ENTRY_ID_FIELD_NUMBER: _ClassVar[int] + feed_entry_id: int + def __init__(self, feed_entry_id: _Optional[int] = ...) -> None: ... + +class BackgroundAppOnRunRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class BackgroundAppOnRunResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class BackgroundAppYieldRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class BackgroundAppYieldResponse(_message.Message): + __slots__ = ("next_scheduled_run_time",) + NEXT_SCHEDULED_RUN_TIME_FIELD_NUMBER: _ClassVar[int] + next_scheduled_run_time: _timestamp_pb2.Timestamp + def __init__(self, next_scheduled_run_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... + +class BackgroundAppError(_message.Message): + __slots__ = ("error_type", "error_message") + class ErrorType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + BG_APP_ERROR_TYPE_INVALID: _ClassVar[BackgroundAppError.ErrorType] + BG_APP_ERROR_TYPE_RUNTIME: _ClassVar[BackgroundAppError.ErrorType] + BG_APP_ERROR_AUTH: _ClassVar[BackgroundAppError.ErrorType] + BG_APP_ERROR_TYPE_UNKNOWN: _ClassVar[BackgroundAppError.ErrorType] + BG_APP_ERROR_TYPE_INVALID: BackgroundAppError.ErrorType + BG_APP_ERROR_TYPE_RUNTIME: BackgroundAppError.ErrorType + BG_APP_ERROR_AUTH: BackgroundAppError.ErrorType + BG_APP_ERROR_TYPE_UNKNOWN: BackgroundAppError.ErrorType + ERROR_TYPE_FIELD_NUMBER: _ClassVar[int] + ERROR_MESSAGE_FIELD_NUMBER: _ClassVar[int] + error_type: BackgroundAppError.ErrorType + error_message: str + def __init__(self, error_type: _Optional[_Union[BackgroundAppError.ErrorType, str]] = ..., error_message: _Optional[str] = ...) -> None: ... + +class BackgroundAppReportErrorRequest(_message.Message): + __slots__ = ("error", "needs_intervention") + ERROR_FIELD_NUMBER: _ClassVar[int] + NEEDS_INTERVENTION_FIELD_NUMBER: _ClassVar[int] + error: BackgroundAppError + needs_intervention: bool + def __init__(self, error: _Optional[_Union[BackgroundAppError, _Mapping]] = ..., needs_intervention: bool = ...) -> None: ... + +class BackgroundAppReportErrorResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... diff --git a/truffle/app/background_pb2_grpc.py b/truffle/app/background_pb2_grpc.py new file mode 100644 index 0000000..a731773 --- /dev/null +++ b/truffle/app/background_pb2_grpc.py @@ -0,0 +1,237 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + +from truffle.app import background_pb2 as truffle_dot_app_dot_background__pb2 + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/app/background_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) + + +class BackgroundAppServiceStub(object): + """ + The service exposed to background apps when running in the Truffle OS. + gated by per app api key, available in the environment when the app is run. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.SubmitFeedContent = channel.unary_unary( + '/truffle.app.BackgroundAppService/SubmitFeedContent', + request_serializer=truffle_dot_app_dot_background__pb2.BackgroundAppSubmitFeedContentRequest.SerializeToString, + response_deserializer=truffle_dot_app_dot_background__pb2.BackgroundAppSubmitFeedContentResponse.FromString, + _registered_method=True) + self.OnRun = channel.unary_unary( + '/truffle.app.BackgroundAppService/OnRun', + request_serializer=truffle_dot_app_dot_background__pb2.BackgroundAppOnRunRequest.SerializeToString, + response_deserializer=truffle_dot_app_dot_background__pb2.BackgroundAppOnRunResponse.FromString, + _registered_method=True) + self.Yield = channel.unary_unary( + '/truffle.app.BackgroundAppService/Yield', + request_serializer=truffle_dot_app_dot_background__pb2.BackgroundAppYieldRequest.SerializeToString, + response_deserializer=truffle_dot_app_dot_background__pb2.BackgroundAppYieldResponse.FromString, + _registered_method=True) + self.ReportError = channel.unary_unary( + '/truffle.app.BackgroundAppService/ReportError', + request_serializer=truffle_dot_app_dot_background__pb2.BackgroundAppReportErrorRequest.SerializeToString, + response_deserializer=truffle_dot_app_dot_background__pb2.BackgroundAppReportErrorResponse.FromString, + _registered_method=True) + + +class BackgroundAppServiceServicer(object): + """ + The service exposed to background apps when running in the Truffle OS. + gated by per app api key, available in the environment when the app is run. + """ + + def SubmitFeedContent(self, request, context): + """post to curator/feed + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def OnRun(self, request, context): + """must be called when the app is run by the system scheduler in the first few seconds of execution or the run will be considered failed + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Yield(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ReportError(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_BackgroundAppServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'SubmitFeedContent': grpc.unary_unary_rpc_method_handler( + servicer.SubmitFeedContent, + request_deserializer=truffle_dot_app_dot_background__pb2.BackgroundAppSubmitFeedContentRequest.FromString, + response_serializer=truffle_dot_app_dot_background__pb2.BackgroundAppSubmitFeedContentResponse.SerializeToString, + ), + 'OnRun': grpc.unary_unary_rpc_method_handler( + servicer.OnRun, + request_deserializer=truffle_dot_app_dot_background__pb2.BackgroundAppOnRunRequest.FromString, + response_serializer=truffle_dot_app_dot_background__pb2.BackgroundAppOnRunResponse.SerializeToString, + ), + 'Yield': grpc.unary_unary_rpc_method_handler( + servicer.Yield, + request_deserializer=truffle_dot_app_dot_background__pb2.BackgroundAppYieldRequest.FromString, + response_serializer=truffle_dot_app_dot_background__pb2.BackgroundAppYieldResponse.SerializeToString, + ), + 'ReportError': grpc.unary_unary_rpc_method_handler( + servicer.ReportError, + request_deserializer=truffle_dot_app_dot_background__pb2.BackgroundAppReportErrorRequest.FromString, + response_serializer=truffle_dot_app_dot_background__pb2.BackgroundAppReportErrorResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'truffle.app.BackgroundAppService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + server.add_registered_method_handlers('truffle.app.BackgroundAppService', rpc_method_handlers) + + + # This class is part of an EXPERIMENTAL API. +class BackgroundAppService(object): + """ + The service exposed to background apps when running in the Truffle OS. + gated by per app api key, available in the environment when the app is run. + """ + + @staticmethod + def SubmitFeedContent(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.app.BackgroundAppService/SubmitFeedContent', + truffle_dot_app_dot_background__pb2.BackgroundAppSubmitFeedContentRequest.SerializeToString, + truffle_dot_app_dot_background__pb2.BackgroundAppSubmitFeedContentResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def OnRun(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.app.BackgroundAppService/OnRun', + truffle_dot_app_dot_background__pb2.BackgroundAppOnRunRequest.SerializeToString, + truffle_dot_app_dot_background__pb2.BackgroundAppOnRunResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Yield(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.app.BackgroundAppService/Yield', + truffle_dot_app_dot_background__pb2.BackgroundAppYieldRequest.SerializeToString, + truffle_dot_app_dot_background__pb2.BackgroundAppYieldResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ReportError(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.app.BackgroundAppService/ReportError', + truffle_dot_app_dot_background__pb2.BackgroundAppReportErrorRequest.SerializeToString, + truffle_dot_app_dot_background__pb2.BackgroundAppReportErrorResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) diff --git a/truffle/app/curator_pb2.py b/truffle/app/curator_pb2.py new file mode 100644 index 0000000..3893185 --- /dev/null +++ b/truffle/app/curator_pb2.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/app/curator.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/app/curator.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.app import background_feed_pb2 as truffle_dot_app_dot_background__feed__pb2 +from truffle.app import background_pb2 as truffle_dot_app_dot_background__pb2 +from truffle.os import background_feed_queries_pb2 as truffle_dot_os_dot_background__feed__queries__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19truffle/app/curator.proto\x12\x0btruffle.app\x1a!truffle/app/background_feed.proto\x1a\x1ctruffle/app/background.proto\x1a(truffle/os/background_feed_queries.proto\"\x16\n\x14TakeFeedbackResponse\"q\n\x13TakeFeedbackRequest\x12;\n\x08\x66\x65\x65\x64\x62\x61\x63k\x18\x01 \x01(\x0b\x32).truffle.os.BackgroundFeedFeedbackRequest\x12\x1d\n\x15\x66\x65\x65\x64\x62\x61\x63k_request_uuid\x18\x02 \x01(\t\"\xae\x01\n\rFeedOperation\x12\x15\n\rfeed_entry_id\x18\x01 \x01(\x04\x12\x43\n\toperation\x18\x02 \x01(\x0e\x32\x30.truffle.app.BackgroundAppNotification.Operation\x12\x30\n\x0cupdated_card\x18\x03 \x01(\x0b\x32\x15.truffle.app.FeedCardH\x00\x88\x01\x01\x42\x0f\n\r_updated_card\"@\n\x14HandleNewPostRequest\x12(\n\x08new_post\x18\x01 \x01(\x0b\x32\x16.truffle.app.FeedEntry\"\x17\n\x15HandleNewPostResponse\"\"\n\x0c\x43uratorState\x12\x12\n\nstate_json\x18\x01 \x01(\t\"\x87\x01\n\x12\x46\x65\x65\x64\x43ontrolRequest\x12\x38\n\x10last_known_state\x18\x01 \x01(\x0b\x32\x19.truffle.app.CuratorStateH\x00\x88\x01\x01\x12\"\n\x1a\x63urator_user_session_token\x18\x02 \x01(\tB\x13\n\x11_last_known_state\"2\n\x11\x46\x65\x65\x64\x62\x61\x63kProcessed\x12\x1d\n\x15\x66\x65\x65\x64\x62\x61\x63k_request_uuid\x18\x01 \x01(\t\"\xbe\x01\n\x13\x46\x65\x65\x64\x43ontrolResponse\x12/\n\toperation\x18\x01 \x01(\x0b\x32\x1a.truffle.app.FeedOperationH\x00\x12\x32\n\rstate_to_save\x18\x02 \x01(\x0b\x32\x19.truffle.app.CuratorStateH\x00\x12\x37\n\rfeedback_done\x18\x03 \x01(\x0b\x32\x1e.truffle.app.FeedbackProcessedH\x00\x42\t\n\x07\x63ontrol2\x91\x02\n\x0e\x43uratorService\x12S\n\x0cTakeFeedback\x12 .truffle.app.TakeFeedbackRequest\x1a!.truffle.app.TakeFeedbackResponse\x12V\n\rHandleNewPost\x12!.truffle.app.HandleNewPostRequest\x1a\".truffle.app.HandleNewPostResponse\x12R\n\x0b\x46\x65\x65\x64\x43ontrol\x12\x1f.truffle.app.FeedControlRequest\x1a .truffle.app.FeedControlResponse0\x01\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.app.curator_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_TAKEFEEDBACKRESPONSE']._serialized_start=149 + _globals['_TAKEFEEDBACKRESPONSE']._serialized_end=171 + _globals['_TAKEFEEDBACKREQUEST']._serialized_start=173 + _globals['_TAKEFEEDBACKREQUEST']._serialized_end=286 + _globals['_FEEDOPERATION']._serialized_start=289 + _globals['_FEEDOPERATION']._serialized_end=463 + _globals['_HANDLENEWPOSTREQUEST']._serialized_start=465 + _globals['_HANDLENEWPOSTREQUEST']._serialized_end=529 + _globals['_HANDLENEWPOSTRESPONSE']._serialized_start=531 + _globals['_HANDLENEWPOSTRESPONSE']._serialized_end=554 + _globals['_CURATORSTATE']._serialized_start=556 + _globals['_CURATORSTATE']._serialized_end=590 + _globals['_FEEDCONTROLREQUEST']._serialized_start=593 + _globals['_FEEDCONTROLREQUEST']._serialized_end=728 + _globals['_FEEDBACKPROCESSED']._serialized_start=730 + _globals['_FEEDBACKPROCESSED']._serialized_end=780 + _globals['_FEEDCONTROLRESPONSE']._serialized_start=783 + _globals['_FEEDCONTROLRESPONSE']._serialized_end=973 + _globals['_CURATORSERVICE']._serialized_start=976 + _globals['_CURATORSERVICE']._serialized_end=1249 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/app/curator_pb2.pyi b/truffle/app/curator_pb2.pyi new file mode 100644 index 0000000..7317d86 --- /dev/null +++ b/truffle/app/curator_pb2.pyi @@ -0,0 +1,71 @@ +from truffle.app import background_feed_pb2 as _background_feed_pb2 +from truffle.app import background_pb2 as _background_pb2 +from truffle.os import background_feed_queries_pb2 as _background_feed_queries_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class TakeFeedbackResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class TakeFeedbackRequest(_message.Message): + __slots__ = ("feedback", "feedback_request_uuid") + FEEDBACK_FIELD_NUMBER: _ClassVar[int] + FEEDBACK_REQUEST_UUID_FIELD_NUMBER: _ClassVar[int] + feedback: _background_feed_queries_pb2.BackgroundFeedFeedbackRequest + feedback_request_uuid: str + def __init__(self, feedback: _Optional[_Union[_background_feed_queries_pb2.BackgroundFeedFeedbackRequest, _Mapping]] = ..., feedback_request_uuid: _Optional[str] = ...) -> None: ... + +class FeedOperation(_message.Message): + __slots__ = ("feed_entry_id", "operation", "updated_card") + FEED_ENTRY_ID_FIELD_NUMBER: _ClassVar[int] + OPERATION_FIELD_NUMBER: _ClassVar[int] + UPDATED_CARD_FIELD_NUMBER: _ClassVar[int] + feed_entry_id: int + operation: _background_pb2.BackgroundAppNotification.Operation + updated_card: _background_feed_pb2.FeedCard + def __init__(self, feed_entry_id: _Optional[int] = ..., operation: _Optional[_Union[_background_pb2.BackgroundAppNotification.Operation, str]] = ..., updated_card: _Optional[_Union[_background_feed_pb2.FeedCard, _Mapping]] = ...) -> None: ... + +class HandleNewPostRequest(_message.Message): + __slots__ = ("new_post",) + NEW_POST_FIELD_NUMBER: _ClassVar[int] + new_post: _background_feed_pb2.FeedEntry + def __init__(self, new_post: _Optional[_Union[_background_feed_pb2.FeedEntry, _Mapping]] = ...) -> None: ... + +class HandleNewPostResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class CuratorState(_message.Message): + __slots__ = ("state_json",) + STATE_JSON_FIELD_NUMBER: _ClassVar[int] + state_json: str + def __init__(self, state_json: _Optional[str] = ...) -> None: ... + +class FeedControlRequest(_message.Message): + __slots__ = ("last_known_state", "curator_user_session_token") + LAST_KNOWN_STATE_FIELD_NUMBER: _ClassVar[int] + CURATOR_USER_SESSION_TOKEN_FIELD_NUMBER: _ClassVar[int] + last_known_state: CuratorState + curator_user_session_token: str + def __init__(self, last_known_state: _Optional[_Union[CuratorState, _Mapping]] = ..., curator_user_session_token: _Optional[str] = ...) -> None: ... + +class FeedbackProcessed(_message.Message): + __slots__ = ("feedback_request_uuid",) + FEEDBACK_REQUEST_UUID_FIELD_NUMBER: _ClassVar[int] + feedback_request_uuid: str + def __init__(self, feedback_request_uuid: _Optional[str] = ...) -> None: ... + +class FeedControlResponse(_message.Message): + __slots__ = ("operation", "state_to_save", "feedback_done") + OPERATION_FIELD_NUMBER: _ClassVar[int] + STATE_TO_SAVE_FIELD_NUMBER: _ClassVar[int] + FEEDBACK_DONE_FIELD_NUMBER: _ClassVar[int] + operation: FeedOperation + state_to_save: CuratorState + feedback_done: FeedbackProcessed + def __init__(self, operation: _Optional[_Union[FeedOperation, _Mapping]] = ..., state_to_save: _Optional[_Union[CuratorState, _Mapping]] = ..., feedback_done: _Optional[_Union[FeedbackProcessed, _Mapping]] = ...) -> None: ... diff --git a/truffle/app/curator_pb2_grpc.py b/truffle/app/curator_pb2_grpc.py new file mode 100644 index 0000000..000ab71 --- /dev/null +++ b/truffle/app/curator_pb2_grpc.py @@ -0,0 +1,183 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + +from truffle.app import curator_pb2 as truffle_dot_app_dot_curator__pb2 + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/app/curator_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) + + +class CuratorServiceStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.TakeFeedback = channel.unary_unary( + '/truffle.app.CuratorService/TakeFeedback', + request_serializer=truffle_dot_app_dot_curator__pb2.TakeFeedbackRequest.SerializeToString, + response_deserializer=truffle_dot_app_dot_curator__pb2.TakeFeedbackResponse.FromString, + _registered_method=True) + self.HandleNewPost = channel.unary_unary( + '/truffle.app.CuratorService/HandleNewPost', + request_serializer=truffle_dot_app_dot_curator__pb2.HandleNewPostRequest.SerializeToString, + response_deserializer=truffle_dot_app_dot_curator__pb2.HandleNewPostResponse.FromString, + _registered_method=True) + self.FeedControl = channel.unary_stream( + '/truffle.app.CuratorService/FeedControl', + request_serializer=truffle_dot_app_dot_curator__pb2.FeedControlRequest.SerializeToString, + response_deserializer=truffle_dot_app_dot_curator__pb2.FeedControlResponse.FromString, + _registered_method=True) + + +class CuratorServiceServicer(object): + """Missing associated documentation comment in .proto file.""" + + def TakeFeedback(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def HandleNewPost(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def FeedControl(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_CuratorServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'TakeFeedback': grpc.unary_unary_rpc_method_handler( + servicer.TakeFeedback, + request_deserializer=truffle_dot_app_dot_curator__pb2.TakeFeedbackRequest.FromString, + response_serializer=truffle_dot_app_dot_curator__pb2.TakeFeedbackResponse.SerializeToString, + ), + 'HandleNewPost': grpc.unary_unary_rpc_method_handler( + servicer.HandleNewPost, + request_deserializer=truffle_dot_app_dot_curator__pb2.HandleNewPostRequest.FromString, + response_serializer=truffle_dot_app_dot_curator__pb2.HandleNewPostResponse.SerializeToString, + ), + 'FeedControl': grpc.unary_stream_rpc_method_handler( + servicer.FeedControl, + request_deserializer=truffle_dot_app_dot_curator__pb2.FeedControlRequest.FromString, + response_serializer=truffle_dot_app_dot_curator__pb2.FeedControlResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'truffle.app.CuratorService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + server.add_registered_method_handlers('truffle.app.CuratorService', rpc_method_handlers) + + + # This class is part of an EXPERIMENTAL API. +class CuratorService(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def TakeFeedback(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.app.CuratorService/TakeFeedback', + truffle_dot_app_dot_curator__pb2.TakeFeedbackRequest.SerializeToString, + truffle_dot_app_dot_curator__pb2.TakeFeedbackResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def HandleNewPost(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.app.CuratorService/HandleNewPost', + truffle_dot_app_dot_curator__pb2.HandleNewPostRequest.SerializeToString, + truffle_dot_app_dot_curator__pb2.HandleNewPostResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def FeedControl(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_stream( + request, + target, + '/truffle.app.CuratorService/FeedControl', + truffle_dot_app_dot_curator__pb2.FeedControlRequest.SerializeToString, + truffle_dot_app_dot_curator__pb2.FeedControlResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) diff --git a/truffle/app/default_app_manifest_pb2.py b/truffle/app/default_app_manifest_pb2.py new file mode 100644 index 0000000..1ae3978 --- /dev/null +++ b/truffle/app/default_app_manifest_pb2.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/app/default_app_manifest.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/app/default_app_manifest.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.app import app_type_pb2 as truffle_dot_app_dot_app__type__pb2 +from truffle.common import icon_pb2 as truffle_dot_common_dot_icon__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n&truffle/app/default_app_manifest.proto\x12\x0btruffle.app\x1a\x1atruffle/app/app_type.proto\x1a\x19truffle/common/icon.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xb7\x02\n\x12\x44\x65\x66\x61ultAppManifest\x12\x0f\n\x07version\x18\x01 \x01(\t\x12\x30\n\x0cgenerated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x38\n\x04\x61pps\x18\x03 \x03(\x0b\x32*.truffle.app.DefaultAppManifest.DefaultApp\x1a\xa3\x01\n\nDefaultApp\x12&\n\x08\x61pp_type\x18\x01 \x01(\x0e\x32\x14.truffle.app.AppType\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x12\n\nbundle_url\x18\x03 \x01(\t\x12\"\n\x04icon\x18\x04 \x01(\x0b\x32\x14.truffle.common.Icon\x12\x12\n\nbundle_md5\x18\x05 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x06 \x01(\tb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.app.default_app_manifest_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_DEFAULTAPPMANIFEST']._serialized_start=144 + _globals['_DEFAULTAPPMANIFEST']._serialized_end=455 + _globals['_DEFAULTAPPMANIFEST_DEFAULTAPP']._serialized_start=292 + _globals['_DEFAULTAPPMANIFEST_DEFAULTAPP']._serialized_end=455 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/app/default_app_manifest_pb2.pyi b/truffle/app/default_app_manifest_pb2.pyi new file mode 100644 index 0000000..a06eb47 --- /dev/null +++ b/truffle/app/default_app_manifest_pb2.pyi @@ -0,0 +1,35 @@ +from truffle.app import app_type_pb2 as _app_type_pb2 +from truffle.common import icon_pb2 as _icon_pb2 +from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class DefaultAppManifest(_message.Message): + __slots__ = ("version", "generated_at", "apps") + class DefaultApp(_message.Message): + __slots__ = ("app_type", "name", "bundle_url", "icon", "bundle_md5", "description") + APP_TYPE_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + BUNDLE_URL_FIELD_NUMBER: _ClassVar[int] + ICON_FIELD_NUMBER: _ClassVar[int] + BUNDLE_MD5_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + app_type: _app_type_pb2.AppType + name: str + bundle_url: str + icon: _icon_pb2.Icon + bundle_md5: str + description: str + def __init__(self, app_type: _Optional[_Union[_app_type_pb2.AppType, str]] = ..., name: _Optional[str] = ..., bundle_url: _Optional[str] = ..., icon: _Optional[_Union[_icon_pb2.Icon, _Mapping]] = ..., bundle_md5: _Optional[str] = ..., description: _Optional[str] = ...) -> None: ... + VERSION_FIELD_NUMBER: _ClassVar[int] + GENERATED_AT_FIELD_NUMBER: _ClassVar[int] + APPS_FIELD_NUMBER: _ClassVar[int] + version: str + generated_at: _timestamp_pb2.Timestamp + apps: _containers.RepeatedCompositeFieldContainer[DefaultAppManifest.DefaultApp] + def __init__(self, version: _Optional[str] = ..., generated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., apps: _Optional[_Iterable[_Union[DefaultAppManifest.DefaultApp, _Mapping]]] = ...) -> None: ... diff --git a/truffle/app/default_app_manifest_pb2_grpc.py b/truffle/app/default_app_manifest_pb2_grpc.py new file mode 100644 index 0000000..8507aef --- /dev/null +++ b/truffle/app/default_app_manifest_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/app/default_app_manifest_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/app/foreground_pb2.py b/truffle/app/foreground_pb2.py new file mode 100644 index 0000000..730276d --- /dev/null +++ b/truffle/app/foreground_pb2.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/app/foreground.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/app/foreground.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.common import icon_pb2 as truffle_dot_common_dot_icon__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1ctruffle/app/foreground.proto\x12\x0btruffle.app\x1a\x19truffle/common/icon.proto\"\xa7\x01\n\rForegroundApp\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x35\n\x08metadata\x18\x02 \x01(\x0b\x32#.truffle.app.ForegroundApp.Metadata\x1aQ\n\x08Metadata\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\"\n\x04icon\x18\x02 \x01(\x0b\x32\x14.truffle.common.Icon\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\"O\n\x16\x46oregroundAppBuildInfo\x12\x35\n\x08metadata\x18\x01 \x01(\x0b\x32#.truffle.app.ForegroundApp.Metadatab\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.app.foreground_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_FOREGROUNDAPP']._serialized_start=73 + _globals['_FOREGROUNDAPP']._serialized_end=240 + _globals['_FOREGROUNDAPP_METADATA']._serialized_start=159 + _globals['_FOREGROUNDAPP_METADATA']._serialized_end=240 + _globals['_FOREGROUNDAPPBUILDINFO']._serialized_start=242 + _globals['_FOREGROUNDAPPBUILDINFO']._serialized_end=321 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/app/foreground_pb2.pyi b/truffle/app/foreground_pb2.pyi new file mode 100644 index 0000000..e946641 --- /dev/null +++ b/truffle/app/foreground_pb2.pyi @@ -0,0 +1,30 @@ +from truffle.common import icon_pb2 as _icon_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class ForegroundApp(_message.Message): + __slots__ = ("uuid", "metadata") + class Metadata(_message.Message): + __slots__ = ("name", "icon", "description") + NAME_FIELD_NUMBER: _ClassVar[int] + ICON_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + name: str + icon: _icon_pb2.Icon + description: str + def __init__(self, name: _Optional[str] = ..., icon: _Optional[_Union[_icon_pb2.Icon, _Mapping]] = ..., description: _Optional[str] = ...) -> None: ... + UUID_FIELD_NUMBER: _ClassVar[int] + METADATA_FIELD_NUMBER: _ClassVar[int] + uuid: str + metadata: ForegroundApp.Metadata + def __init__(self, uuid: _Optional[str] = ..., metadata: _Optional[_Union[ForegroundApp.Metadata, _Mapping]] = ...) -> None: ... + +class ForegroundAppBuildInfo(_message.Message): + __slots__ = ("metadata",) + METADATA_FIELD_NUMBER: _ClassVar[int] + metadata: ForegroundApp.Metadata + def __init__(self, metadata: _Optional[_Union[ForegroundApp.Metadata, _Mapping]] = ...) -> None: ... diff --git a/truffle/app/foreground_pb2_grpc.py b/truffle/app/foreground_pb2_grpc.py new file mode 100644 index 0000000..b0258f3 --- /dev/null +++ b/truffle/app/foreground_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/app/foreground_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/app/system_pb2.py b/truffle/app/system_pb2.py new file mode 100644 index 0000000..fa84ae9 --- /dev/null +++ b/truffle/app/system_pb2.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/app/system.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/app/system.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.app import background_pb2 as truffle_dot_app_dot_background__pb2 +from truffle.app import app_build_pb2 as truffle_dot_app_dot_app__build__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18truffle/app/system.proto\x12\x0btruffle.app\x1a\x1ctruffle/app/background.proto\x1a\x1btruffle/app/app_build.proto\"\xc5\x01\n\tSystemApp\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x12\n\nsource_dir\x18\x02 \x01(\t\x12+\n\x07process\x18\x03 \x01(\x0b\x32\x1a.truffle.app.ProcessConfig\x12\x0f\n\x07no_ckpt\x18\x04 \x01(\x08\x12\x45\n\x0fschedule_policy\x18\x05 \x01(\x0b\x32\'.truffle.app.BackgroundAppRuntimePolicyH\x00\x88\x01\x01\x42\x12\n\x10_schedule_policyb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.app.system_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_SYSTEMAPP']._serialized_start=101 + _globals['_SYSTEMAPP']._serialized_end=298 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/app/system_pb2.pyi b/truffle/app/system_pb2.pyi new file mode 100644 index 0000000..1529d8c --- /dev/null +++ b/truffle/app/system_pb2.pyi @@ -0,0 +1,22 @@ +from truffle.app import background_pb2 as _background_pb2 +from truffle.app import app_build_pb2 as _app_build_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class SystemApp(_message.Message): + __slots__ = ("key", "source_dir", "process", "no_ckpt", "schedule_policy") + KEY_FIELD_NUMBER: _ClassVar[int] + SOURCE_DIR_FIELD_NUMBER: _ClassVar[int] + PROCESS_FIELD_NUMBER: _ClassVar[int] + NO_CKPT_FIELD_NUMBER: _ClassVar[int] + SCHEDULE_POLICY_FIELD_NUMBER: _ClassVar[int] + key: str + source_dir: str + process: _app_build_pb2.ProcessConfig + no_ckpt: bool + schedule_policy: _background_pb2.BackgroundAppRuntimePolicy + def __init__(self, key: _Optional[str] = ..., source_dir: _Optional[str] = ..., process: _Optional[_Union[_app_build_pb2.ProcessConfig, _Mapping]] = ..., no_ckpt: bool = ..., schedule_policy: _Optional[_Union[_background_pb2.BackgroundAppRuntimePolicy, _Mapping]] = ...) -> None: ... diff --git a/truffle/app/system_pb2_grpc.py b/truffle/app/system_pb2_grpc.py new file mode 100644 index 0000000..ea78c67 --- /dev/null +++ b/truffle/app/system_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/app/system_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/app/task_runtime_pb2.py b/truffle/app/task_runtime_pb2.py new file mode 100644 index 0000000..9a46ed1 --- /dev/null +++ b/truffle/app/task_runtime_pb2.py @@ -0,0 +1,128 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/app/task_runtime.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/app/task_runtime.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.os import task_pb2 as truffle_dot_os_dot_task__pb2 +try: + truffle_dot_os_dot_task__info__pb2 = truffle_dot_os_dot_task__pb2.truffle_dot_os_dot_task__info__pb2 +except AttributeError: + truffle_dot_os_dot_task__info__pb2 = truffle_dot_os_dot_task__pb2.truffle.os.task_info_pb2 +try: + truffle_dot_os_dot_task__user__response__pb2 = truffle_dot_os_dot_task__pb2.truffle_dot_os_dot_task__user__response__pb2 +except AttributeError: + truffle_dot_os_dot_task__user__response__pb2 = truffle_dot_os_dot_task__pb2.truffle.os.task_user_response_pb2 +try: + truffle_dot_os_dot_task__step__pb2 = truffle_dot_os_dot_task__pb2.truffle_dot_os_dot_task__step__pb2 +except AttributeError: + truffle_dot_os_dot_task__step__pb2 = truffle_dot_os_dot_task__pb2.truffle.os.task_step_pb2 +try: + truffle_dot_common_dot_content__pb2 = truffle_dot_os_dot_task__pb2.truffle_dot_common_dot_content__pb2 +except AttributeError: + truffle_dot_common_dot_content__pb2 = truffle_dot_os_dot_task__pb2.truffle.common.content_pb2 +from truffle.os import task_user_response_pb2 as truffle_dot_os_dot_task__user__response__pb2 +from truffle.os import task_actions_pb2 as truffle_dot_os_dot_task__actions__pb2 +try: + truffle_dot_os_dot_task__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle_dot_os_dot_task__pb2 +except AttributeError: + truffle_dot_os_dot_task__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle.os.task_pb2 +try: + truffle_dot_os_dot_task__info__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle_dot_os_dot_task__info__pb2 +except AttributeError: + truffle_dot_os_dot_task__info__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle.os.task_info_pb2 +try: + truffle_dot_os_dot_task__user__response__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle_dot_os_dot_task__user__response__pb2 +except AttributeError: + truffle_dot_os_dot_task__user__response__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle.os.task_user_response_pb2 +try: + truffle_dot_os_dot_task__step__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle_dot_os_dot_task__step__pb2 +except AttributeError: + truffle_dot_os_dot_task__step__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle.os.task_step_pb2 +try: + truffle_dot_common_dot_content__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle_dot_common_dot_content__pb2 +except AttributeError: + truffle_dot_common_dot_content__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle.common.content_pb2 +try: + truffle_dot_os_dot_task__target__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle_dot_os_dot_task__target__pb2 +except AttributeError: + truffle_dot_os_dot_task__target__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle.os.task_target_pb2 +try: + truffle_dot_os_dot_task__options__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle_dot_os_dot_task__options__pb2 +except AttributeError: + truffle_dot_os_dot_task__options__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle.os.task_options_pb2 +try: + truffle_dot_os_dot_task__user__response__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle_dot_os_dot_task__user__response__pb2 +except AttributeError: + truffle_dot_os_dot_task__user__response__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle.os.task_user_response_pb2 +try: + truffle_dot_common_dot_tool__provider__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle_dot_common_dot_tool__provider__pb2 +except AttributeError: + truffle_dot_common_dot_tool__provider__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle.common.tool_provider_pb2 +from truffle.os import task_step_pb2 as truffle_dot_os_dot_task__step__pb2 +try: + truffle_dot_common_dot_content__pb2 = truffle_dot_os_dot_task__step__pb2.truffle_dot_common_dot_content__pb2 +except AttributeError: + truffle_dot_common_dot_content__pb2 = truffle_dot_os_dot_task__step__pb2.truffle.common.content_pb2 +from truffle.infer.convo import conversation_pb2 as truffle_dot_infer_dot_convo_dot_conversation__pb2 +try: + truffle_dot_infer_dot_convo_dot_msg__pb2 = truffle_dot_infer_dot_convo_dot_conversation__pb2.truffle_dot_infer_dot_convo_dot_msg__pb2 +except AttributeError: + truffle_dot_infer_dot_convo_dot_msg__pb2 = truffle_dot_infer_dot_convo_dot_conversation__pb2.truffle.infer.convo.msg_pb2 +from truffle.app import background_feed_pb2 as truffle_dot_app_dot_background__feed__pb2 +from truffle.common import file_pb2 as truffle_dot_common_dot_file__pb2 +from truffle.os import task_options_pb2 as truffle_dot_os_dot_task__options__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1etruffle/app/task_runtime.proto\x12\x0btruffle.app\x1a\x15truffle/os/task.proto\x1a#truffle/os/task_user_response.proto\x1a\x1dtruffle/os/task_actions.proto\x1a\x1atruffle/os/task_step.proto\x1a&truffle/infer/convo/conversation.proto\x1a!truffle/app/background_feed.proto\x1a\x19truffle/common/file.proto\x1a\x1dtruffle/os/task_options.proto\"\xad\x01\n\rToolsProvider\x12:\n\nmcp_server\x18\x01 \x01(\x0b\x32$.truffle.app.ToolsProvider.MCPServerH\x00\x1aT\n\tMCPServer\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\x12\x0c\n\x04port\x18\x03 \x01(\r\x12\x11\n\x04path\x18\x04 \x01(\tH\x00\x88\x01\x01\x42\x07\n\x05_pathB\n\n\x08provider\"K\n\x16\x41\x64\x64ToolProviderRequest\x12\x31\n\rtool_provider\x18\x01 \x01(\x0b\x32\x1a.truffle.app.ToolsProvider\"U\n\x17\x41\x64\x64ToolProviderResponse\x12:\n\x16\x63urrent_tool_providers\x18\x01 \x03(\x0b\x32\x1a.truffle.app.ToolsProvider\"2\n\x19RemoveToolProviderRequest\x12\x15\n\rprovider_uuid\x18\x01 \x01(\t\"X\n\x1aRemoveToolProviderResponse\x12:\n\x16\x63urrent_tool_providers\x18\x01 \x03(\x0b\x32\x1a.truffle.app.ToolsProvider\"h\n\x11TaskContextUpdate\x12\x37\n\x0clatest_convo\x18\x01 \x01(\x0b\x32!.truffle.infer.convo.Conversation\x12\x1a\n\x12\x61ssociated_node_id\x18\x02 \x01(\x05\"\xd5\x01\n\x07NewTask\x12-\n\x0cuser_message\x18\x01 \x01(\x0b\x32\x17.truffle.os.UserMessage\x12:\n\x0e\x61ttached_files\x18\x02 \x03(\x0b\x32\".truffle.common.AttachedFileIntent\x12\x45\n\x15\x61ttached_feed_entries\x18\x03 \x01(\x0b\x32!.truffle.app.FeedEntryTaskContextH\x00\x88\x01\x01\x42\x18\n\x16_attached_feed_entries\"b\n\x08PrevTask\x12\x1e\n\x04task\x18\x01 \x01(\x0b\x32\x10.truffle.os.Task\x12\x36\n\x0elatest_context\x18\x02 \x01(\x0b\x32\x1e.truffle.app.TaskContextUpdate\"\xd5\x01\n\x10StartTaskRequest\x12(\n\x08new_task\x18\x01 \x01(\x0b\x32\x14.truffle.app.NewTaskH\x00\x12*\n\tprev_task\x18\x02 \x01(\x0b\x32\x15.truffle.app.PrevTaskH\x00\x12(\n\x07options\x18\x03 \x01(\x0b\x32\x17.truffle.os.TaskOptions\x12\x32\n\x0etool_providers\x18\x04 \x03(\x0b\x32\x1a.truffle.app.ToolsProviderB\r\n\x0btask_source\"\x87\x01\n\x10TaskRuntimeError\x12\r\n\x05\x65rror\x18\x01 \x01(\t\x12\x14\n\x07\x64\x65tails\x18\x02 \x01(\tH\x00\x88\x01\x01\x12%\n\x18\x61ssociated_provider_uuid\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\n\n\x08_detailsB\x1b\n\x19_associated_provider_uuid\"\xc4\x01\n\x11TaskRuntimeUpdate\x12\x33\n\x0btask_update\x18\x01 \x01(\x0b\x32\x1c.truffle.os.TaskStreamUpdateH\x00\x12\x36\n\rruntime_error\x18\x02 \x01(\x0b\x32\x1d.truffle.app.TaskRuntimeErrorH\x00\x12\x38\n\x0e\x63ontext_update\x18\x03 \x01(\x0b\x32\x1e.truffle.app.TaskContextUpdateH\x00\x42\x08\n\x06update2\xd3\x03\n\x12TaskRuntimeService\x12K\n\x08OpenTask\x12\x1d.truffle.app.StartTaskRequest\x1a\x1e.truffle.app.TaskRuntimeUpdate0\x01\x12S\n\x0fHandleInterrupt\x12 .truffle.os.InterruptTaskRequest\x1a\x1e.truffle.os.TaskActionResponse\x12V\n\x12HandleUserResponse\x12 .truffle.os.RespondToTaskRequest\x1a\x1e.truffle.os.TaskActionResponse\x12\\\n\x0f\x41\x64\x64ToolProvider\x12#.truffle.app.AddToolProviderRequest\x1a$.truffle.app.AddToolProviderResponse\x12\x65\n\x12RemoveToolProvider\x12&.truffle.app.RemoveToolProviderRequest\x1a\'.truffle.app.RemoveToolProviderResponseb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.app.task_runtime_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_TOOLSPROVIDER']._serialized_start=300 + _globals['_TOOLSPROVIDER']._serialized_end=473 + _globals['_TOOLSPROVIDER_MCPSERVER']._serialized_start=377 + _globals['_TOOLSPROVIDER_MCPSERVER']._serialized_end=461 + _globals['_ADDTOOLPROVIDERREQUEST']._serialized_start=475 + _globals['_ADDTOOLPROVIDERREQUEST']._serialized_end=550 + _globals['_ADDTOOLPROVIDERRESPONSE']._serialized_start=552 + _globals['_ADDTOOLPROVIDERRESPONSE']._serialized_end=637 + _globals['_REMOVETOOLPROVIDERREQUEST']._serialized_start=639 + _globals['_REMOVETOOLPROVIDERREQUEST']._serialized_end=689 + _globals['_REMOVETOOLPROVIDERRESPONSE']._serialized_start=691 + _globals['_REMOVETOOLPROVIDERRESPONSE']._serialized_end=779 + _globals['_TASKCONTEXTUPDATE']._serialized_start=781 + _globals['_TASKCONTEXTUPDATE']._serialized_end=885 + _globals['_NEWTASK']._serialized_start=888 + _globals['_NEWTASK']._serialized_end=1101 + _globals['_PREVTASK']._serialized_start=1103 + _globals['_PREVTASK']._serialized_end=1201 + _globals['_STARTTASKREQUEST']._serialized_start=1204 + _globals['_STARTTASKREQUEST']._serialized_end=1417 + _globals['_TASKRUNTIMEERROR']._serialized_start=1420 + _globals['_TASKRUNTIMEERROR']._serialized_end=1555 + _globals['_TASKRUNTIMEUPDATE']._serialized_start=1558 + _globals['_TASKRUNTIMEUPDATE']._serialized_end=1754 + _globals['_TASKRUNTIMESERVICE']._serialized_start=1757 + _globals['_TASKRUNTIMESERVICE']._serialized_end=2224 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/app/task_runtime_pb2.pyi b/truffle/app/task_runtime_pb2.pyi new file mode 100644 index 0000000..dce11c1 --- /dev/null +++ b/truffle/app/task_runtime_pb2.pyi @@ -0,0 +1,124 @@ +from truffle.os import task_pb2 as _task_pb2 +from truffle.os import task_info_pb2 as _task_info_pb2 +from truffle.os import task_user_response_pb2 as _task_user_response_pb2 +from truffle.os import task_step_pb2 as _task_step_pb2 +from truffle.os import task_user_response_pb2 as _task_user_response_pb2_1 +from truffle.os import task_actions_pb2 as _task_actions_pb2 +from truffle.os import task_pb2 as _task_pb2_1 +from truffle.os import task_target_pb2 as _task_target_pb2 +from truffle.os import task_options_pb2 as _task_options_pb2 +from truffle.os import task_user_response_pb2 as _task_user_response_pb2_1_1 +from truffle.common import tool_provider_pb2 as _tool_provider_pb2 +from truffle.os import task_step_pb2 as _task_step_pb2_1 +from truffle.common import content_pb2 as _content_pb2 +from truffle.infer.convo import conversation_pb2 as _conversation_pb2 +from truffle.infer.convo import msg_pb2 as _msg_pb2 +from truffle.app import background_feed_pb2 as _background_feed_pb2 +from truffle.common import file_pb2 as _file_pb2 +from truffle.os import task_options_pb2 as _task_options_pb2_1 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class ToolsProvider(_message.Message): + __slots__ = ("mcp_server",) + class MCPServer(_message.Message): + __slots__ = ("uuid", "address", "port", "path") + UUID_FIELD_NUMBER: _ClassVar[int] + ADDRESS_FIELD_NUMBER: _ClassVar[int] + PORT_FIELD_NUMBER: _ClassVar[int] + PATH_FIELD_NUMBER: _ClassVar[int] + uuid: str + address: str + port: int + path: str + def __init__(self, uuid: _Optional[str] = ..., address: _Optional[str] = ..., port: _Optional[int] = ..., path: _Optional[str] = ...) -> None: ... + MCP_SERVER_FIELD_NUMBER: _ClassVar[int] + mcp_server: ToolsProvider.MCPServer + def __init__(self, mcp_server: _Optional[_Union[ToolsProvider.MCPServer, _Mapping]] = ...) -> None: ... + +class AddToolProviderRequest(_message.Message): + __slots__ = ("tool_provider",) + TOOL_PROVIDER_FIELD_NUMBER: _ClassVar[int] + tool_provider: ToolsProvider + def __init__(self, tool_provider: _Optional[_Union[ToolsProvider, _Mapping]] = ...) -> None: ... + +class AddToolProviderResponse(_message.Message): + __slots__ = ("current_tool_providers",) + CURRENT_TOOL_PROVIDERS_FIELD_NUMBER: _ClassVar[int] + current_tool_providers: _containers.RepeatedCompositeFieldContainer[ToolsProvider] + def __init__(self, current_tool_providers: _Optional[_Iterable[_Union[ToolsProvider, _Mapping]]] = ...) -> None: ... + +class RemoveToolProviderRequest(_message.Message): + __slots__ = ("provider_uuid",) + PROVIDER_UUID_FIELD_NUMBER: _ClassVar[int] + provider_uuid: str + def __init__(self, provider_uuid: _Optional[str] = ...) -> None: ... + +class RemoveToolProviderResponse(_message.Message): + __slots__ = ("current_tool_providers",) + CURRENT_TOOL_PROVIDERS_FIELD_NUMBER: _ClassVar[int] + current_tool_providers: _containers.RepeatedCompositeFieldContainer[ToolsProvider] + def __init__(self, current_tool_providers: _Optional[_Iterable[_Union[ToolsProvider, _Mapping]]] = ...) -> None: ... + +class TaskContextUpdate(_message.Message): + __slots__ = ("latest_convo", "associated_node_id") + LATEST_CONVO_FIELD_NUMBER: _ClassVar[int] + ASSOCIATED_NODE_ID_FIELD_NUMBER: _ClassVar[int] + latest_convo: _conversation_pb2.Conversation + associated_node_id: int + def __init__(self, latest_convo: _Optional[_Union[_conversation_pb2.Conversation, _Mapping]] = ..., associated_node_id: _Optional[int] = ...) -> None: ... + +class NewTask(_message.Message): + __slots__ = ("user_message", "attached_files", "attached_feed_entries") + USER_MESSAGE_FIELD_NUMBER: _ClassVar[int] + ATTACHED_FILES_FIELD_NUMBER: _ClassVar[int] + ATTACHED_FEED_ENTRIES_FIELD_NUMBER: _ClassVar[int] + user_message: _task_user_response_pb2_1_1.UserMessage + attached_files: _containers.RepeatedCompositeFieldContainer[_file_pb2.AttachedFileIntent] + attached_feed_entries: _background_feed_pb2.FeedEntryTaskContext + def __init__(self, user_message: _Optional[_Union[_task_user_response_pb2_1_1.UserMessage, _Mapping]] = ..., attached_files: _Optional[_Iterable[_Union[_file_pb2.AttachedFileIntent, _Mapping]]] = ..., attached_feed_entries: _Optional[_Union[_background_feed_pb2.FeedEntryTaskContext, _Mapping]] = ...) -> None: ... + +class PrevTask(_message.Message): + __slots__ = ("task", "latest_context") + TASK_FIELD_NUMBER: _ClassVar[int] + LATEST_CONTEXT_FIELD_NUMBER: _ClassVar[int] + task: _task_pb2_1.Task + latest_context: TaskContextUpdate + def __init__(self, task: _Optional[_Union[_task_pb2_1.Task, _Mapping]] = ..., latest_context: _Optional[_Union[TaskContextUpdate, _Mapping]] = ...) -> None: ... + +class StartTaskRequest(_message.Message): + __slots__ = ("new_task", "prev_task", "options", "tool_providers") + NEW_TASK_FIELD_NUMBER: _ClassVar[int] + PREV_TASK_FIELD_NUMBER: _ClassVar[int] + OPTIONS_FIELD_NUMBER: _ClassVar[int] + TOOL_PROVIDERS_FIELD_NUMBER: _ClassVar[int] + new_task: NewTask + prev_task: PrevTask + options: _task_options_pb2_1.TaskOptions + tool_providers: _containers.RepeatedCompositeFieldContainer[ToolsProvider] + def __init__(self, new_task: _Optional[_Union[NewTask, _Mapping]] = ..., prev_task: _Optional[_Union[PrevTask, _Mapping]] = ..., options: _Optional[_Union[_task_options_pb2_1.TaskOptions, _Mapping]] = ..., tool_providers: _Optional[_Iterable[_Union[ToolsProvider, _Mapping]]] = ...) -> None: ... + +class TaskRuntimeError(_message.Message): + __slots__ = ("error", "details", "associated_provider_uuid") + ERROR_FIELD_NUMBER: _ClassVar[int] + DETAILS_FIELD_NUMBER: _ClassVar[int] + ASSOCIATED_PROVIDER_UUID_FIELD_NUMBER: _ClassVar[int] + error: str + details: str + associated_provider_uuid: str + def __init__(self, error: _Optional[str] = ..., details: _Optional[str] = ..., associated_provider_uuid: _Optional[str] = ...) -> None: ... + +class TaskRuntimeUpdate(_message.Message): + __slots__ = ("task_update", "runtime_error", "context_update") + TASK_UPDATE_FIELD_NUMBER: _ClassVar[int] + RUNTIME_ERROR_FIELD_NUMBER: _ClassVar[int] + CONTEXT_UPDATE_FIELD_NUMBER: _ClassVar[int] + task_update: _task_pb2_1.TaskStreamUpdate + runtime_error: TaskRuntimeError + context_update: TaskContextUpdate + def __init__(self, task_update: _Optional[_Union[_task_pb2_1.TaskStreamUpdate, _Mapping]] = ..., runtime_error: _Optional[_Union[TaskRuntimeError, _Mapping]] = ..., context_update: _Optional[_Union[TaskContextUpdate, _Mapping]] = ...) -> None: ... diff --git a/truffle/app/task_runtime_pb2_grpc.py b/truffle/app/task_runtime_pb2_grpc.py new file mode 100644 index 0000000..0fe0e2b --- /dev/null +++ b/truffle/app/task_runtime_pb2_grpc.py @@ -0,0 +1,274 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + +from truffle.app import task_runtime_pb2 as truffle_dot_app_dot_task__runtime__pb2 +from truffle.os import task_actions_pb2 as truffle_dot_os_dot_task__actions__pb2 +from truffle.os import task_user_response_pb2 as truffle_dot_os_dot_task__user__response__pb2 + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/app/task_runtime_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) + + +class TaskRuntimeServiceStub(object): + """task == foreground app, bear with me + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.OpenTask = channel.unary_stream( + '/truffle.app.TaskRuntimeService/OpenTask', + request_serializer=truffle_dot_app_dot_task__runtime__pb2.StartTaskRequest.SerializeToString, + response_deserializer=truffle_dot_app_dot_task__runtime__pb2.TaskRuntimeUpdate.FromString, + _registered_method=True) + self.HandleInterrupt = channel.unary_unary( + '/truffle.app.TaskRuntimeService/HandleInterrupt', + request_serializer=truffle_dot_os_dot_task__actions__pb2.InterruptTaskRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_task__actions__pb2.TaskActionResponse.FromString, + _registered_method=True) + self.HandleUserResponse = channel.unary_unary( + '/truffle.app.TaskRuntimeService/HandleUserResponse', + request_serializer=truffle_dot_os_dot_task__user__response__pb2.RespondToTaskRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_task__actions__pb2.TaskActionResponse.FromString, + _registered_method=True) + self.AddToolProvider = channel.unary_unary( + '/truffle.app.TaskRuntimeService/AddToolProvider', + request_serializer=truffle_dot_app_dot_task__runtime__pb2.AddToolProviderRequest.SerializeToString, + response_deserializer=truffle_dot_app_dot_task__runtime__pb2.AddToolProviderResponse.FromString, + _registered_method=True) + self.RemoveToolProvider = channel.unary_unary( + '/truffle.app.TaskRuntimeService/RemoveToolProvider', + request_serializer=truffle_dot_app_dot_task__runtime__pb2.RemoveToolProviderRequest.SerializeToString, + response_deserializer=truffle_dot_app_dot_task__runtime__pb2.RemoveToolProviderResponse.FromString, + _registered_method=True) + + +class TaskRuntimeServiceServicer(object): + """task == foreground app, bear with me + """ + + def OpenTask(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def HandleInterrupt(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def HandleUserResponse(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AddToolProvider(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def RemoveToolProvider(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_TaskRuntimeServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'OpenTask': grpc.unary_stream_rpc_method_handler( + servicer.OpenTask, + request_deserializer=truffle_dot_app_dot_task__runtime__pb2.StartTaskRequest.FromString, + response_serializer=truffle_dot_app_dot_task__runtime__pb2.TaskRuntimeUpdate.SerializeToString, + ), + 'HandleInterrupt': grpc.unary_unary_rpc_method_handler( + servicer.HandleInterrupt, + request_deserializer=truffle_dot_os_dot_task__actions__pb2.InterruptTaskRequest.FromString, + response_serializer=truffle_dot_os_dot_task__actions__pb2.TaskActionResponse.SerializeToString, + ), + 'HandleUserResponse': grpc.unary_unary_rpc_method_handler( + servicer.HandleUserResponse, + request_deserializer=truffle_dot_os_dot_task__user__response__pb2.RespondToTaskRequest.FromString, + response_serializer=truffle_dot_os_dot_task__actions__pb2.TaskActionResponse.SerializeToString, + ), + 'AddToolProvider': grpc.unary_unary_rpc_method_handler( + servicer.AddToolProvider, + request_deserializer=truffle_dot_app_dot_task__runtime__pb2.AddToolProviderRequest.FromString, + response_serializer=truffle_dot_app_dot_task__runtime__pb2.AddToolProviderResponse.SerializeToString, + ), + 'RemoveToolProvider': grpc.unary_unary_rpc_method_handler( + servicer.RemoveToolProvider, + request_deserializer=truffle_dot_app_dot_task__runtime__pb2.RemoveToolProviderRequest.FromString, + response_serializer=truffle_dot_app_dot_task__runtime__pb2.RemoveToolProviderResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'truffle.app.TaskRuntimeService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + server.add_registered_method_handlers('truffle.app.TaskRuntimeService', rpc_method_handlers) + + + # This class is part of an EXPERIMENTAL API. +class TaskRuntimeService(object): + """task == foreground app, bear with me + """ + + @staticmethod + def OpenTask(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_stream( + request, + target, + '/truffle.app.TaskRuntimeService/OpenTask', + truffle_dot_app_dot_task__runtime__pb2.StartTaskRequest.SerializeToString, + truffle_dot_app_dot_task__runtime__pb2.TaskRuntimeUpdate.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def HandleInterrupt(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.app.TaskRuntimeService/HandleInterrupt', + truffle_dot_os_dot_task__actions__pb2.InterruptTaskRequest.SerializeToString, + truffle_dot_os_dot_task__actions__pb2.TaskActionResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def HandleUserResponse(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.app.TaskRuntimeService/HandleUserResponse', + truffle_dot_os_dot_task__user__response__pb2.RespondToTaskRequest.SerializeToString, + truffle_dot_os_dot_task__actions__pb2.TaskActionResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def AddToolProvider(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.app.TaskRuntimeService/AddToolProvider', + truffle_dot_app_dot_task__runtime__pb2.AddToolProviderRequest.SerializeToString, + truffle_dot_app_dot_task__runtime__pb2.AddToolProviderResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def RemoveToolProvider(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.app.TaskRuntimeService/RemoveToolProvider', + truffle_dot_app_dot_task__runtime__pb2.RemoveToolProviderRequest.SerializeToString, + truffle_dot_app_dot_task__runtime__pb2.RemoveToolProviderResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) diff --git a/truffle/common/__init__.py b/truffle/common/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/truffle/common/content_pb2.py b/truffle/common/content_pb2.py new file mode 100644 index 0000000..2eeffb8 --- /dev/null +++ b/truffle/common/content_pb2.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/common/content.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/common/content.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1ctruffle/common/content.proto\x12\x0etruffle.common\"\x1a\n\x0bMediaSource\x12\x0b\n\x03uri\x18\x01 \x01(\t\":\n\x0cWebComponent\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\r\n\x05width\x18\x02 \x01(\x05\x12\x0e\n\x06height\x18\x03 \x01(\x05\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.common.content_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_MEDIASOURCE']._serialized_start=48 + _globals['_MEDIASOURCE']._serialized_end=74 + _globals['_WEBCOMPONENT']._serialized_start=76 + _globals['_WEBCOMPONENT']._serialized_end=134 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/common/content_pb2.pyi b/truffle/common/content_pb2.pyi new file mode 100644 index 0000000..f31bca8 --- /dev/null +++ b/truffle/common/content_pb2.pyi @@ -0,0 +1,21 @@ +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Optional as _Optional + +DESCRIPTOR: _descriptor.FileDescriptor + +class MediaSource(_message.Message): + __slots__ = ("uri",) + URI_FIELD_NUMBER: _ClassVar[int] + uri: str + def __init__(self, uri: _Optional[str] = ...) -> None: ... + +class WebComponent(_message.Message): + __slots__ = ("uri", "width", "height") + URI_FIELD_NUMBER: _ClassVar[int] + WIDTH_FIELD_NUMBER: _ClassVar[int] + HEIGHT_FIELD_NUMBER: _ClassVar[int] + uri: str + width: int + height: int + def __init__(self, uri: _Optional[str] = ..., width: _Optional[int] = ..., height: _Optional[int] = ...) -> None: ... diff --git a/truffle/common/content_pb2_grpc.py b/truffle/common/content_pb2_grpc.py new file mode 100644 index 0000000..308017e --- /dev/null +++ b/truffle/common/content_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/common/content_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/common/file_pb2.py b/truffle/common/file_pb2.py new file mode 100644 index 0000000..604fc59 --- /dev/null +++ b/truffle/common/file_pb2.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/common/file.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/common/file.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19truffle/common/file.proto\x12\x0etruffle.common\"=\n\x0c\x46ileMetadata\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tmime_type\x18\x02 \x01(\t\x12\x0c\n\x04size\x18\x03 \x01(\x04\"L\n\x0c\x41ttachedFile\x12\x0c\n\x04path\x18\x01 \x01(\t\x12.\n\x08metadata\x18\x02 \x01(\x0b\x32\x1c.truffle.common.FileMetadata\"@\n\x12\x41ttachedFileIntent\x12*\n\x04\x66ile\x18\x01 \x01(\x0b\x32\x1c.truffle.common.AttachedFileb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.common.file_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_FILEMETADATA']._serialized_start=45 + _globals['_FILEMETADATA']._serialized_end=106 + _globals['_ATTACHEDFILE']._serialized_start=108 + _globals['_ATTACHEDFILE']._serialized_end=184 + _globals['_ATTACHEDFILEINTENT']._serialized_start=186 + _globals['_ATTACHEDFILEINTENT']._serialized_end=250 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/common/file_pb2.pyi b/truffle/common/file_pb2.pyi new file mode 100644 index 0000000..79b2d95 --- /dev/null +++ b/truffle/common/file_pb2.pyi @@ -0,0 +1,30 @@ +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class FileMetadata(_message.Message): + __slots__ = ("name", "mime_type", "size") + NAME_FIELD_NUMBER: _ClassVar[int] + MIME_TYPE_FIELD_NUMBER: _ClassVar[int] + SIZE_FIELD_NUMBER: _ClassVar[int] + name: str + mime_type: str + size: int + def __init__(self, name: _Optional[str] = ..., mime_type: _Optional[str] = ..., size: _Optional[int] = ...) -> None: ... + +class AttachedFile(_message.Message): + __slots__ = ("path", "metadata") + PATH_FIELD_NUMBER: _ClassVar[int] + METADATA_FIELD_NUMBER: _ClassVar[int] + path: str + metadata: FileMetadata + def __init__(self, path: _Optional[str] = ..., metadata: _Optional[_Union[FileMetadata, _Mapping]] = ...) -> None: ... + +class AttachedFileIntent(_message.Message): + __slots__ = ("file",) + FILE_FIELD_NUMBER: _ClassVar[int] + file: AttachedFile + def __init__(self, file: _Optional[_Union[AttachedFile, _Mapping]] = ...) -> None: ... diff --git a/truffle/common/file_pb2_grpc.py b/truffle/common/file_pb2_grpc.py new file mode 100644 index 0000000..d037a40 --- /dev/null +++ b/truffle/common/file_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/common/file_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/common/icon_pb2.py b/truffle/common/icon_pb2.py new file mode 100644 index 0000000..25b47f3 --- /dev/null +++ b/truffle/common/icon_pb2.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/common/icon.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/common/icon.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19truffle/common/icon.proto\x12\x0etruffle.common\"\x18\n\x04Icon\x12\x10\n\x08png_data\x18\x01 \x01(\x0c\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.common.icon_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_ICON']._serialized_start=45 + _globals['_ICON']._serialized_end=69 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/common/icon_pb2.pyi b/truffle/common/icon_pb2.pyi new file mode 100644 index 0000000..7ebe6b8 --- /dev/null +++ b/truffle/common/icon_pb2.pyi @@ -0,0 +1,11 @@ +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Optional as _Optional + +DESCRIPTOR: _descriptor.FileDescriptor + +class Icon(_message.Message): + __slots__ = ("png_data",) + PNG_DATA_FIELD_NUMBER: _ClassVar[int] + png_data: bytes + def __init__(self, png_data: _Optional[bytes] = ...) -> None: ... diff --git a/truffle/common/icon_pb2_grpc.py b/truffle/common/icon_pb2_grpc.py new file mode 100644 index 0000000..7c5c6b0 --- /dev/null +++ b/truffle/common/icon_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/common/icon_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/common/led_states_pb2.py b/truffle/common/led_states_pb2.py new file mode 100644 index 0000000..1ebad80 --- /dev/null +++ b/truffle/common/led_states_pb2.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/common/led_states.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/common/led_states.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1ftruffle/common/led_states.proto\x12\x0etruffle.common\"C\n\tLedStatus\x12\'\n\x05state\x18\x01 \x01(\x0e\x32\x18.truffle.common.LedState\x12\r\n\x05\x63olor\x18\x02 \x01(\r*\xfd\x02\n\x08LedState\x12\x15\n\x11LED_STATE_INVALID\x10\x00\x12\x16\n\x12LED_STATE_DISABLED\x10\x00\x12\x11\n\rLED_STATE_OFF\x10\x01\x12\x15\n\x11LED_STATE_STARTUP\x10\x02\x12\x1e\n\x1aLED_STATE_READY_TO_CONNECT\x10\x03\x12\x18\n\x14LED_STATE_CONNECTING\x10\x04\x12\x17\n\x13LED_STATE_CONNECTED\x10\x05\x12\x13\n\x0fLED_STATE_ERROR\x10\x06\x12\x17\n\x13LED_STATE_REASONING\x10\x07\x12\x12\n\x0eLED_STATE_IDLE\x10\x08\x12\x14\n\x10LED_STATE_TYPING\x10\t\x12\x1d\n\x19LED_STATE_RESPOND_TO_USER\x10\n\x12\x15\n\x11LED_STATE_ONBOARD\x10\x0b\x12\x19\n\x15LED_STATE_ONCE_ACTION\x10\x0c\x12\x18\n\x14LED_STATE_ONCE_FLAIR\x10\r\x1a\x02\x10\x01\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.common.led_states_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_LEDSTATE']._loaded_options = None + _globals['_LEDSTATE']._serialized_options = b'\020\001' + _globals['_LEDSTATE']._serialized_start=121 + _globals['_LEDSTATE']._serialized_end=502 + _globals['_LEDSTATUS']._serialized_start=51 + _globals['_LEDSTATUS']._serialized_end=118 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/common/led_states_pb2.pyi b/truffle/common/led_states_pb2.pyi new file mode 100644 index 0000000..3e2f122 --- /dev/null +++ b/truffle/common/led_states_pb2.pyi @@ -0,0 +1,47 @@ +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class LedState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + LED_STATE_INVALID: _ClassVar[LedState] + LED_STATE_DISABLED: _ClassVar[LedState] + LED_STATE_OFF: _ClassVar[LedState] + LED_STATE_STARTUP: _ClassVar[LedState] + LED_STATE_READY_TO_CONNECT: _ClassVar[LedState] + LED_STATE_CONNECTING: _ClassVar[LedState] + LED_STATE_CONNECTED: _ClassVar[LedState] + LED_STATE_ERROR: _ClassVar[LedState] + LED_STATE_REASONING: _ClassVar[LedState] + LED_STATE_IDLE: _ClassVar[LedState] + LED_STATE_TYPING: _ClassVar[LedState] + LED_STATE_RESPOND_TO_USER: _ClassVar[LedState] + LED_STATE_ONBOARD: _ClassVar[LedState] + LED_STATE_ONCE_ACTION: _ClassVar[LedState] + LED_STATE_ONCE_FLAIR: _ClassVar[LedState] +LED_STATE_INVALID: LedState +LED_STATE_DISABLED: LedState +LED_STATE_OFF: LedState +LED_STATE_STARTUP: LedState +LED_STATE_READY_TO_CONNECT: LedState +LED_STATE_CONNECTING: LedState +LED_STATE_CONNECTED: LedState +LED_STATE_ERROR: LedState +LED_STATE_REASONING: LedState +LED_STATE_IDLE: LedState +LED_STATE_TYPING: LedState +LED_STATE_RESPOND_TO_USER: LedState +LED_STATE_ONBOARD: LedState +LED_STATE_ONCE_ACTION: LedState +LED_STATE_ONCE_FLAIR: LedState + +class LedStatus(_message.Message): + __slots__ = ("state", "color") + STATE_FIELD_NUMBER: _ClassVar[int] + COLOR_FIELD_NUMBER: _ClassVar[int] + state: LedState + color: int + def __init__(self, state: _Optional[_Union[LedState, str]] = ..., color: _Optional[int] = ...) -> None: ... diff --git a/truffle/common/led_states_pb2_grpc.py b/truffle/common/led_states_pb2_grpc.py new file mode 100644 index 0000000..276c1ac --- /dev/null +++ b/truffle/common/led_states_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/common/led_states_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/common/tool_provider_pb2.py b/truffle/common/tool_provider_pb2.py new file mode 100644 index 0000000..024bb84 --- /dev/null +++ b/truffle/common/tool_provider_pb2.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/common/tool_provider.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/common/tool_provider.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"truffle/common/tool_provider.proto\x12\x0etruffle.common\"\xce\x01\n\x14\x45xternalToolProvider\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12L\n\nmcp_server\x18\x02 \x01(\x0b\x32\x36.truffle.common.ExternalToolProvider.ExternalMCPServerH\x00\x1aN\n\x11\x45xternalMCPServer\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x11\n\x04path\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x07\n\x05_pathB\n\n\x08provider\"d\n\x1a\x45xternalToolProvidersError\x12\x15\n\rprovider_uuid\x18\x01 \x01(\t\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12\x14\n\x07\x64\x65tails\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_detailsb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.common.tool_provider_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_EXTERNALTOOLPROVIDER']._serialized_start=55 + _globals['_EXTERNALTOOLPROVIDER']._serialized_end=261 + _globals['_EXTERNALTOOLPROVIDER_EXTERNALMCPSERVER']._serialized_start=171 + _globals['_EXTERNALTOOLPROVIDER_EXTERNALMCPSERVER']._serialized_end=249 + _globals['_EXTERNALTOOLPROVIDERSERROR']._serialized_start=263 + _globals['_EXTERNALTOOLPROVIDERSERROR']._serialized_end=363 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/common/tool_provider_pb2.pyi b/truffle/common/tool_provider_pb2.pyi new file mode 100644 index 0000000..843d87d --- /dev/null +++ b/truffle/common/tool_provider_pb2.pyi @@ -0,0 +1,33 @@ +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class ExternalToolProvider(_message.Message): + __slots__ = ("uuid", "mcp_server") + class ExternalMCPServer(_message.Message): + __slots__ = ("address", "port", "path") + ADDRESS_FIELD_NUMBER: _ClassVar[int] + PORT_FIELD_NUMBER: _ClassVar[int] + PATH_FIELD_NUMBER: _ClassVar[int] + address: str + port: int + path: str + def __init__(self, address: _Optional[str] = ..., port: _Optional[int] = ..., path: _Optional[str] = ...) -> None: ... + UUID_FIELD_NUMBER: _ClassVar[int] + MCP_SERVER_FIELD_NUMBER: _ClassVar[int] + uuid: str + mcp_server: ExternalToolProvider.ExternalMCPServer + def __init__(self, uuid: _Optional[str] = ..., mcp_server: _Optional[_Union[ExternalToolProvider.ExternalMCPServer, _Mapping]] = ...) -> None: ... + +class ExternalToolProvidersError(_message.Message): + __slots__ = ("provider_uuid", "error", "details") + PROVIDER_UUID_FIELD_NUMBER: _ClassVar[int] + ERROR_FIELD_NUMBER: _ClassVar[int] + DETAILS_FIELD_NUMBER: _ClassVar[int] + provider_uuid: str + error: str + details: str + def __init__(self, provider_uuid: _Optional[str] = ..., error: _Optional[str] = ..., details: _Optional[str] = ...) -> None: ... diff --git a/truffle/common/tool_provider_pb2_grpc.py b/truffle/common/tool_provider_pb2_grpc.py new file mode 100644 index 0000000..1d2335c --- /dev/null +++ b/truffle/common/tool_provider_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/common/tool_provider_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/infer/__init__.py b/truffle/infer/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/truffle/infer/convo/__init__.py b/truffle/infer/convo/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/truffle/infer/convo/conversation_pb2.py b/truffle/infer/convo/conversation_pb2.py new file mode 100644 index 0000000..5ba3cc2 --- /dev/null +++ b/truffle/infer/convo/conversation_pb2.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/infer/convo/conversation.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/infer/convo/conversation.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.infer.convo import msg_pb2 as truffle_dot_infer_dot_convo_dot_msg__pb2 + +from truffle.infer.convo.msg_pb2 import * + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n&truffle/infer/convo/conversation.proto\x12\x13truffle.infer.convo\x1a\x1dtruffle/infer/convo/msg.proto\"R\n\x0c\x43onversation\x12.\n\x08messages\x18\x01 \x03(\x0b\x32\x1c.truffle.infer.convo.Message\x12\x12\n\nmodel_uuid\x18\x03 \x01(\t\"3\n\x0c\x42uiltContext\x12\x0f\n\x07\x63ontext\x18\x01 \x01(\t\x12\x12\n\nmodel_uuid\x18\x02 \x01(\tP\x00\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.infer.convo.conversation_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_CONVERSATION']._serialized_start=94 + _globals['_CONVERSATION']._serialized_end=176 + _globals['_BUILTCONTEXT']._serialized_start=178 + _globals['_BUILTCONTEXT']._serialized_end=229 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/infer/convo/conversation_pb2.pyi b/truffle/infer/convo/conversation_pb2.pyi new file mode 100644 index 0000000..8366e78 --- /dev/null +++ b/truffle/infer/convo/conversation_pb2.pyi @@ -0,0 +1,25 @@ +from truffle.infer.convo import msg_pb2 as _msg_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union +from truffle.infer.convo.msg_pb2 import Message as Message + +DESCRIPTOR: _descriptor.FileDescriptor + +class Conversation(_message.Message): + __slots__ = ("messages", "model_uuid") + MESSAGES_FIELD_NUMBER: _ClassVar[int] + MODEL_UUID_FIELD_NUMBER: _ClassVar[int] + messages: _containers.RepeatedCompositeFieldContainer[_msg_pb2.Message] + model_uuid: str + def __init__(self, messages: _Optional[_Iterable[_Union[_msg_pb2.Message, _Mapping]]] = ..., model_uuid: _Optional[str] = ...) -> None: ... + +class BuiltContext(_message.Message): + __slots__ = ("context", "model_uuid") + CONTEXT_FIELD_NUMBER: _ClassVar[int] + MODEL_UUID_FIELD_NUMBER: _ClassVar[int] + context: str + model_uuid: str + def __init__(self, context: _Optional[str] = ..., model_uuid: _Optional[str] = ...) -> None: ... diff --git a/truffle/infer/convo/conversation_pb2_grpc.py b/truffle/infer/convo/conversation_pb2_grpc.py new file mode 100644 index 0000000..e3a3b17 --- /dev/null +++ b/truffle/infer/convo/conversation_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/infer/convo/conversation_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/infer/convo/msg_pb2.py b/truffle/infer/convo/msg_pb2.py new file mode 100644 index 0000000..2ec02cd --- /dev/null +++ b/truffle/infer/convo/msg_pb2.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/infer/convo/msg.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/infer/convo/msg.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dtruffle/infer/convo/msg.proto\x12\x13truffle.infer.convo\"\xa8\x01\n\x07Message\x12/\n\x04role\x18\x01 \x01(\x0e\x32!.truffle.infer.convo.Message.Role\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\t\"[\n\x04Role\x12\x10\n\x0cROLE_INVALID\x10\x00\x12\x0f\n\x0bROLE_SYSTEM\x10\x01\x12\r\n\tROLE_USER\x10\x02\x12\x12\n\x0eROLE_ASSISTANT\x10\x03\x12\r\n\tROLE_TOOL\x10\x04\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.infer.convo.msg_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_MESSAGE']._serialized_start=55 + _globals['_MESSAGE']._serialized_end=223 + _globals['_MESSAGE_ROLE']._serialized_start=132 + _globals['_MESSAGE_ROLE']._serialized_end=223 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/infer/convo/msg_pb2.pyi b/truffle/infer/convo/msg_pb2.pyi new file mode 100644 index 0000000..1594747 --- /dev/null +++ b/truffle/infer/convo/msg_pb2.pyi @@ -0,0 +1,26 @@ +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class Message(_message.Message): + __slots__ = ("role", "content") + class Role(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + ROLE_INVALID: _ClassVar[Message.Role] + ROLE_SYSTEM: _ClassVar[Message.Role] + ROLE_USER: _ClassVar[Message.Role] + ROLE_ASSISTANT: _ClassVar[Message.Role] + ROLE_TOOL: _ClassVar[Message.Role] + ROLE_INVALID: Message.Role + ROLE_SYSTEM: Message.Role + ROLE_USER: Message.Role + ROLE_ASSISTANT: Message.Role + ROLE_TOOL: Message.Role + ROLE_FIELD_NUMBER: _ClassVar[int] + CONTENT_FIELD_NUMBER: _ClassVar[int] + role: Message.Role + content: str + def __init__(self, role: _Optional[_Union[Message.Role, str]] = ..., content: _Optional[str] = ...) -> None: ... diff --git a/truffle/infer/convo/msg_pb2_grpc.py b/truffle/infer/convo/msg_pb2_grpc.py new file mode 100644 index 0000000..db9c591 --- /dev/null +++ b/truffle/infer/convo/msg_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/infer/convo/msg_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/infer/embedding_pb2.py b/truffle/infer/embedding_pb2.py new file mode 100644 index 0000000..42cda6d --- /dev/null +++ b/truffle/infer/embedding_pb2.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/infer/embedding.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/infer/embedding.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dtruffle/infer/embedding.proto\x12\rtruffle.infer\")\n\nEmbeddable\x12\x0c\n\x04text\x18\x01 \x01(\t\x12\r\n\x05query\x18\x02 \x01(\x08\"V\n\x10\x45mbeddingRequest\x12.\n\x0b\x65mbeddables\x18\x01 \x03(\x0b\x32\x19.truffle.infer.Embeddable\x12\x12\n\nmodel_uuid\x18\x02 \x01(\t\"H\n\x11\x45mbeddingResponse\x12\x12\n\nembeddings\x18\x01 \x03(\x0c\x12\x0b\n\x03\x64im\x18\x02 \x01(\x04\x12\x12\n\ndtype_size\x18\x03 \x01(\x04\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.infer.embedding_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_EMBEDDABLE']._serialized_start=48 + _globals['_EMBEDDABLE']._serialized_end=89 + _globals['_EMBEDDINGREQUEST']._serialized_start=91 + _globals['_EMBEDDINGREQUEST']._serialized_end=177 + _globals['_EMBEDDINGRESPONSE']._serialized_start=179 + _globals['_EMBEDDINGRESPONSE']._serialized_end=251 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/infer/embedding_pb2.pyi b/truffle/infer/embedding_pb2.pyi new file mode 100644 index 0000000..6608a08 --- /dev/null +++ b/truffle/infer/embedding_pb2.pyi @@ -0,0 +1,33 @@ +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class Embeddable(_message.Message): + __slots__ = ("text", "query") + TEXT_FIELD_NUMBER: _ClassVar[int] + QUERY_FIELD_NUMBER: _ClassVar[int] + text: str + query: bool + def __init__(self, text: _Optional[str] = ..., query: bool = ...) -> None: ... + +class EmbeddingRequest(_message.Message): + __slots__ = ("embeddables", "model_uuid") + EMBEDDABLES_FIELD_NUMBER: _ClassVar[int] + MODEL_UUID_FIELD_NUMBER: _ClassVar[int] + embeddables: _containers.RepeatedCompositeFieldContainer[Embeddable] + model_uuid: str + def __init__(self, embeddables: _Optional[_Iterable[_Union[Embeddable, _Mapping]]] = ..., model_uuid: _Optional[str] = ...) -> None: ... + +class EmbeddingResponse(_message.Message): + __slots__ = ("embeddings", "dim", "dtype_size") + EMBEDDINGS_FIELD_NUMBER: _ClassVar[int] + DIM_FIELD_NUMBER: _ClassVar[int] + DTYPE_SIZE_FIELD_NUMBER: _ClassVar[int] + embeddings: _containers.RepeatedScalarFieldContainer[bytes] + dim: int + dtype_size: int + def __init__(self, embeddings: _Optional[_Iterable[bytes]] = ..., dim: _Optional[int] = ..., dtype_size: _Optional[int] = ...) -> None: ... diff --git a/truffle/infer/embedding_pb2_grpc.py b/truffle/infer/embedding_pb2_grpc.py new file mode 100644 index 0000000..b32d5d9 --- /dev/null +++ b/truffle/infer/embedding_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/infer/embedding_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/infer/finishreason_pb2.py b/truffle/infer/finishreason_pb2.py new file mode 100644 index 0000000..ea0eba0 --- /dev/null +++ b/truffle/infer/finishreason_pb2.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/infer/finishreason.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/infer/finishreason.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n truffle/infer/finishreason.proto\x12\rtruffle.infer*\xab\x01\n\x0c\x46inishReason\x12\x16\n\x12\x46INISH_UNSPECIFIED\x10\x00\x12\x0f\n\x0b\x46INISH_STOP\x10\x01\x12\x11\n\rFINISH_LENGTH\x10\x02\x12\x14\n\x10\x46INISH_TOOLCALLS\x10\x03\x12\x10\n\x0c\x46INISH_ERROR\x10\x04\x12\x10\n\x0c\x46INISH_ABORT\x10\x05\x12\x12\n\x0e\x46INISH_UNKNOWN\x10\x06\x12\x11\n\rFINISH_GOAWAY\x10\x07\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.infer.finishreason_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_FINISHREASON']._serialized_start=52 + _globals['_FINISHREASON']._serialized_end=223 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/infer/finishreason_pb2.pyi b/truffle/infer/finishreason_pb2.pyi new file mode 100644 index 0000000..c244ecd --- /dev/null +++ b/truffle/infer/finishreason_pb2.pyi @@ -0,0 +1,24 @@ +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from typing import ClassVar as _ClassVar + +DESCRIPTOR: _descriptor.FileDescriptor + +class FinishReason(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + FINISH_UNSPECIFIED: _ClassVar[FinishReason] + FINISH_STOP: _ClassVar[FinishReason] + FINISH_LENGTH: _ClassVar[FinishReason] + FINISH_TOOLCALLS: _ClassVar[FinishReason] + FINISH_ERROR: _ClassVar[FinishReason] + FINISH_ABORT: _ClassVar[FinishReason] + FINISH_UNKNOWN: _ClassVar[FinishReason] + FINISH_GOAWAY: _ClassVar[FinishReason] +FINISH_UNSPECIFIED: FinishReason +FINISH_STOP: FinishReason +FINISH_LENGTH: FinishReason +FINISH_TOOLCALLS: FinishReason +FINISH_ERROR: FinishReason +FINISH_ABORT: FinishReason +FINISH_UNKNOWN: FinishReason +FINISH_GOAWAY: FinishReason diff --git a/truffle/infer/finishreason_pb2_grpc.py b/truffle/infer/finishreason_pb2_grpc.py new file mode 100644 index 0000000..853a3ef --- /dev/null +++ b/truffle/infer/finishreason_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/infer/finishreason_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/infer/gencfg_pb2.py b/truffle/infer/gencfg_pb2.py new file mode 100644 index 0000000..1218626 --- /dev/null +++ b/truffle/infer/gencfg_pb2.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/infer/gencfg.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/infer/gencfg.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1atruffle/infer/gencfg.proto\x12\rtruffle.infer\"\xcf\x02\n\x0eResponseFormat\x12\x34\n\x06\x66ormat\x18\x01 \x01(\x0e\x32$.truffle.infer.ResponseFormat.Format\x12\x13\n\x06schema\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x45\n\x0c\x65xperimental\x18\x03 \x01(\x0b\x32*.truffle.infer.ResponseFormat.ExperimentalH\x01\x88\x01\x01\x1aS\n\x0c\x45xperimental\x12\x17\n\x0f\x61\x64\x64itional_ebnf\x18\x01 \x01(\t\x12\x14\n\x0cold_root_key\x18\x02 \x01(\t\x12\x14\n\x0cnew_root_key\x18\x03 \x01(\t\":\n\x06\x46ormat\x12\x08\n\x04TEXT\x10\x00\x12\x08\n\x04JSON\x10\x01\x12\x08\n\x04\x45\x42NF\x10\x02\x12\x12\n\x0eSTRUCTURAL_TAG\x10\x03\x42\t\n\x07_schemaB\x0f\n\r_experimental\"\xda\x03\n\x10GenerationConfig\x12\x11\n\x04temp\x18\x01 \x01(\x01H\x00\x88\x01\x01\x12\x12\n\x05top_p\x18\x02 \x01(\x01H\x01\x88\x01\x01\x12\x19\n\x0c\x66req_penalty\x18\x03 \x01(\x01H\x02\x88\x01\x01\x12\x19\n\x0cpres_penalty\x18\x04 \x01(\x01H\x03\x88\x01\x01\x12\x18\n\x0brep_penalty\x18\x05 \x01(\x01H\x04\x88\x01\x01\x12\x11\n\x04seed\x18\x06 \x01(\x05H\x05\x88\x01\x01\x12\x17\n\nmax_tokens\x18\x07 \x01(\rH\x06\x88\x01\x01\x12\x11\n\tstop_strs\x18\x08 \x03(\t\x12\x10\n\x08stop_ids\x18\t \x03(\r\x12\x36\n\x0fresponse_format\x18\n \x01(\x0b\x32\x1d.truffle.infer.ResponseFormat\x12\x34\n\x05\x64\x65\x62ug\x18\x0b \x01(\x0b\x32%.truffle.infer.GenerationConfig.Debug\x1a\x33\n\x05\x44\x65\x62ug\x12\x12\n\nignore_eos\x18\x01 \x01(\x08\x12\x16\n\x0epinned_context\x18\x02 \x01(\x08\x42\x07\n\x05_tempB\x08\n\x06_top_pB\x0f\n\r_freq_penaltyB\x0f\n\r_pres_penaltyB\x0e\n\x0c_rep_penaltyB\x07\n\x05_seedB\r\n\x0b_max_tokens\"Y\n\x15ValidateConfigRequest\x12,\n\x03\x63\x66g\x18\x01 \x01(\x0b\x32\x1f.truffle.infer.GenerationConfig\x12\x12\n\nmodel_uuid\x18\x02 \x01(\t\"H\n\x16ValidateConfigResponse\x12\r\n\x05valid\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12\x10\n\x08warnings\x18\x03 \x03(\tb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.infer.gencfg_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_RESPONSEFORMAT']._serialized_start=46 + _globals['_RESPONSEFORMAT']._serialized_end=381 + _globals['_RESPONSEFORMAT_EXPERIMENTAL']._serialized_start=210 + _globals['_RESPONSEFORMAT_EXPERIMENTAL']._serialized_end=293 + _globals['_RESPONSEFORMAT_FORMAT']._serialized_start=295 + _globals['_RESPONSEFORMAT_FORMAT']._serialized_end=353 + _globals['_GENERATIONCONFIG']._serialized_start=384 + _globals['_GENERATIONCONFIG']._serialized_end=858 + _globals['_GENERATIONCONFIG_DEBUG']._serialized_start=714 + _globals['_GENERATIONCONFIG_DEBUG']._serialized_end=765 + _globals['_VALIDATECONFIGREQUEST']._serialized_start=860 + _globals['_VALIDATECONFIGREQUEST']._serialized_end=949 + _globals['_VALIDATECONFIGRESPONSE']._serialized_start=951 + _globals['_VALIDATECONFIGRESPONSE']._serialized_end=1023 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/infer/gencfg_pb2.pyi b/truffle/infer/gencfg_pb2.pyi new file mode 100644 index 0000000..a2a6830 --- /dev/null +++ b/truffle/infer/gencfg_pb2.pyi @@ -0,0 +1,88 @@ +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class ResponseFormat(_message.Message): + __slots__ = ("format", "schema", "experimental") + class Format(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + TEXT: _ClassVar[ResponseFormat.Format] + JSON: _ClassVar[ResponseFormat.Format] + EBNF: _ClassVar[ResponseFormat.Format] + STRUCTURAL_TAG: _ClassVar[ResponseFormat.Format] + TEXT: ResponseFormat.Format + JSON: ResponseFormat.Format + EBNF: ResponseFormat.Format + STRUCTURAL_TAG: ResponseFormat.Format + class Experimental(_message.Message): + __slots__ = ("additional_ebnf", "old_root_key", "new_root_key") + ADDITIONAL_EBNF_FIELD_NUMBER: _ClassVar[int] + OLD_ROOT_KEY_FIELD_NUMBER: _ClassVar[int] + NEW_ROOT_KEY_FIELD_NUMBER: _ClassVar[int] + additional_ebnf: str + old_root_key: str + new_root_key: str + def __init__(self, additional_ebnf: _Optional[str] = ..., old_root_key: _Optional[str] = ..., new_root_key: _Optional[str] = ...) -> None: ... + FORMAT_FIELD_NUMBER: _ClassVar[int] + SCHEMA_FIELD_NUMBER: _ClassVar[int] + EXPERIMENTAL_FIELD_NUMBER: _ClassVar[int] + format: ResponseFormat.Format + schema: str + experimental: ResponseFormat.Experimental + def __init__(self, format: _Optional[_Union[ResponseFormat.Format, str]] = ..., schema: _Optional[str] = ..., experimental: _Optional[_Union[ResponseFormat.Experimental, _Mapping]] = ...) -> None: ... + +class GenerationConfig(_message.Message): + __slots__ = ("temp", "top_p", "freq_penalty", "pres_penalty", "rep_penalty", "seed", "max_tokens", "stop_strs", "stop_ids", "response_format", "debug") + class Debug(_message.Message): + __slots__ = ("ignore_eos", "pinned_context") + IGNORE_EOS_FIELD_NUMBER: _ClassVar[int] + PINNED_CONTEXT_FIELD_NUMBER: _ClassVar[int] + ignore_eos: bool + pinned_context: bool + def __init__(self, ignore_eos: bool = ..., pinned_context: bool = ...) -> None: ... + TEMP_FIELD_NUMBER: _ClassVar[int] + TOP_P_FIELD_NUMBER: _ClassVar[int] + FREQ_PENALTY_FIELD_NUMBER: _ClassVar[int] + PRES_PENALTY_FIELD_NUMBER: _ClassVar[int] + REP_PENALTY_FIELD_NUMBER: _ClassVar[int] + SEED_FIELD_NUMBER: _ClassVar[int] + MAX_TOKENS_FIELD_NUMBER: _ClassVar[int] + STOP_STRS_FIELD_NUMBER: _ClassVar[int] + STOP_IDS_FIELD_NUMBER: _ClassVar[int] + RESPONSE_FORMAT_FIELD_NUMBER: _ClassVar[int] + DEBUG_FIELD_NUMBER: _ClassVar[int] + temp: float + top_p: float + freq_penalty: float + pres_penalty: float + rep_penalty: float + seed: int + max_tokens: int + stop_strs: _containers.RepeatedScalarFieldContainer[str] + stop_ids: _containers.RepeatedScalarFieldContainer[int] + response_format: ResponseFormat + debug: GenerationConfig.Debug + def __init__(self, temp: _Optional[float] = ..., top_p: _Optional[float] = ..., freq_penalty: _Optional[float] = ..., pres_penalty: _Optional[float] = ..., rep_penalty: _Optional[float] = ..., seed: _Optional[int] = ..., max_tokens: _Optional[int] = ..., stop_strs: _Optional[_Iterable[str]] = ..., stop_ids: _Optional[_Iterable[int]] = ..., response_format: _Optional[_Union[ResponseFormat, _Mapping]] = ..., debug: _Optional[_Union[GenerationConfig.Debug, _Mapping]] = ...) -> None: ... + +class ValidateConfigRequest(_message.Message): + __slots__ = ("cfg", "model_uuid") + CFG_FIELD_NUMBER: _ClassVar[int] + MODEL_UUID_FIELD_NUMBER: _ClassVar[int] + cfg: GenerationConfig + model_uuid: str + def __init__(self, cfg: _Optional[_Union[GenerationConfig, _Mapping]] = ..., model_uuid: _Optional[str] = ...) -> None: ... + +class ValidateConfigResponse(_message.Message): + __slots__ = ("valid", "error", "warnings") + VALID_FIELD_NUMBER: _ClassVar[int] + ERROR_FIELD_NUMBER: _ClassVar[int] + WARNINGS_FIELD_NUMBER: _ClassVar[int] + valid: bool + error: str + warnings: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, valid: bool = ..., error: _Optional[str] = ..., warnings: _Optional[_Iterable[str]] = ...) -> None: ... diff --git a/truffle/infer/gencfg_pb2_grpc.py b/truffle/infer/gencfg_pb2_grpc.py new file mode 100644 index 0000000..15da2a6 --- /dev/null +++ b/truffle/infer/gencfg_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/infer/gencfg_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/infer/infer_pb2.py b/truffle/infer/infer_pb2.py new file mode 100644 index 0000000..dec4d15 --- /dev/null +++ b/truffle/infer/infer_pb2.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/infer/infer.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/infer/infer.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from truffle.infer import irequest_pb2 as truffle_dot_infer_dot_irequest__pb2 +from truffle.infer import iresponse_pb2 as truffle_dot_infer_dot_iresponse__pb2 +from truffle.infer import model_pb2 as truffle_dot_infer_dot_model__pb2 +from truffle.infer import embedding_pb2 as truffle_dot_infer_dot_embedding__pb2 +from truffle.infer.convo import conversation_pb2 as truffle_dot_infer_dot_convo_dot_conversation__pb2 +try: + truffle_dot_infer_dot_convo_dot_msg__pb2 = truffle_dot_infer_dot_convo_dot_conversation__pb2.truffle_dot_infer_dot_convo_dot_msg__pb2 +except AttributeError: + truffle_dot_infer_dot_convo_dot_msg__pb2 = truffle_dot_infer_dot_convo_dot_conversation__pb2.truffle.infer.convo.msg_pb2 +from truffle.infer import tokenize_pb2 as truffle_dot_infer_dot_tokenize__pb2 +from truffle.infer import gencfg_pb2 as truffle_dot_infer_dot_gencfg__pb2 + +from truffle.infer.irequest_pb2 import * +from truffle.infer.iresponse_pb2 import * +from truffle.infer.model_pb2 import * +from truffle.infer.embedding_pb2 import * +from truffle.infer.convo.conversation_pb2 import * +from truffle.infer.tokenize_pb2 import * +from truffle.infer.gencfg_pb2 import * + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19truffle/infer/infer.proto\x12\rtruffle.infer\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1ctruffle/infer/irequest.proto\x1a\x1dtruffle/infer/iresponse.proto\x1a\x19truffle/infer/model.proto\x1a\x1dtruffle/infer/embedding.proto\x1a&truffle/infer/convo/conversation.proto\x1a\x1ctruffle/infer/tokenize.proto\x1a\x1atruffle/infer/gencfg.proto2\xfb\x08\n\x10InferenceService\x12?\n\x08Generate\x12\x17.truffle.infer.IRequest\x1a\x18.truffle.infer.IResponse0\x01\x12\x41\n\x0cGenerateSync\x12\x17.truffle.infer.IRequest\x1a\x18.truffle.infer.IResponse\x12L\n\rGenerateBatch\x12\x1c.truffle.infer.BatchIRequest\x1a\x1d.truffle.infer.BatchIResponse\x12J\n\x05\x45mbed\x12\x1f.truffle.infer.EmbeddingRequest\x1a .truffle.infer.EmbeddingResponse\x12Q\n\x0c\x45mbedQueries\x12\x1f.truffle.infer.EmbeddingRequest\x1a .truffle.infer.EmbeddingResponse\x12L\n\x0cGetModelList\x12\".truffle.infer.GetModelListRequest\x1a\x18.truffle.infer.ModelList\x12@\n\x08GetModel\x12\x1e.truffle.infer.GetModelRequest\x1a\x14.truffle.infer.Model\x12N\n\tSetModels\x12\x1f.truffle.infer.SetModelsRequest\x1a .truffle.infer.SetModelsResponse\x12P\n\rGetModelState\x12\x1e.truffle.infer.GetModelRequest\x1a\x1f.truffle.infer.ModelStateUpdate\x12W\n\x12OnModelStateChange\x12\x1e.truffle.infer.GetModelRequest\x1a\x1f.truffle.infer.ModelStateUpdate0\x01\x12R\n\x15GetEmbeddingModelList\x12\x16.google.protobuf.Empty\x1a!.truffle.infer.EmbeddingModelList\x12Z\n\x15GetEmbeddingModelInfo\x12\x1e.truffle.infer.GetModelRequest\x1a!.truffle.infer.EmbeddingModelInfo\x12R\n\nBuildConvo\x12!.truffle.infer.convo.Conversation\x1a!.truffle.infer.convo.BuiltContext\x12g\n\x18ValidateGenerationConfig\x12$.truffle.infer.ValidateConfigRequest\x1a%.truffle.infer.ValidateConfigResponseP\x01P\x02P\x03P\x04P\x05P\x06P\x07\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.infer.infer_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_INFERENCESERVICE']._serialized_start=291 + _globals['_INFERENCESERVICE']._serialized_end=1438 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/infer/infer_pb2.pyi b/truffle/infer/infer_pb2.pyi new file mode 100644 index 0000000..27a1470 --- /dev/null +++ b/truffle/infer/infer_pb2.pyi @@ -0,0 +1,43 @@ +from google.protobuf import empty_pb2 as _empty_pb2 +from truffle.infer import irequest_pb2 as _irequest_pb2 +from truffle.infer import iresponse_pb2 as _iresponse_pb2 +from truffle.infer import model_pb2 as _model_pb2 +from truffle.infer import embedding_pb2 as _embedding_pb2 +from truffle.infer.convo import conversation_pb2 as _conversation_pb2 +from truffle.infer.convo import msg_pb2 as _msg_pb2 +from truffle.infer import tokenize_pb2 as _tokenize_pb2 +from truffle.infer import gencfg_pb2 as _gencfg_pb2 +from google.protobuf import descriptor as _descriptor +from typing import ClassVar as _ClassVar +from truffle.infer.irequest_pb2 import IRequest as IRequest +from truffle.infer.irequest_pb2 import BatchIRequest as BatchIRequest +from truffle.infer.irequest_pb2 import RequestPriority as RequestPriority +from truffle.infer.iresponse_pb2 import IResponse as IResponse +from truffle.infer.iresponse_pb2 import BatchIResponse as BatchIResponse +from truffle.infer.model_pb2 import EmbeddingModelInfo as EmbeddingModelInfo +from truffle.infer.model_pb2 import EmbeddingModelList as EmbeddingModelList +from truffle.infer.model_pb2 import ModelConfig as ModelConfig +from truffle.infer.model_pb2 import Model as Model +from truffle.infer.model_pb2 import ModelStateUpdate as ModelStateUpdate +from truffle.infer.model_pb2 import ModelList as ModelList +from truffle.infer.model_pb2 import GetModelRequest as GetModelRequest +from truffle.infer.model_pb2 import GetModelListRequest as GetModelListRequest +from truffle.infer.model_pb2 import SetModelsResponse as SetModelsResponse +from truffle.infer.model_pb2 import SetModelsRequest as SetModelsRequest +from truffle.infer.embedding_pb2 import Embeddable as Embeddable +from truffle.infer.embedding_pb2 import EmbeddingRequest as EmbeddingRequest +from truffle.infer.embedding_pb2 import EmbeddingResponse as EmbeddingResponse +from truffle.infer.convo.conversation_pb2 import Conversation as Conversation +from truffle.infer.convo.conversation_pb2 import BuiltContext as BuiltContext +from truffle.infer.tokenize_pb2 import TokenizeRequest as TokenizeRequest +from truffle.infer.tokenize_pb2 import TokenizeResponse as TokenizeResponse +from truffle.infer.gencfg_pb2 import ResponseFormat as ResponseFormat +from truffle.infer.gencfg_pb2 import GenerationConfig as GenerationConfig +from truffle.infer.gencfg_pb2 import ValidateConfigRequest as ValidateConfigRequest +from truffle.infer.gencfg_pb2 import ValidateConfigResponse as ValidateConfigResponse + +DESCRIPTOR: _descriptor.FileDescriptor +REQUEST_PRIORITY_UNSPECIFIED: _irequest_pb2.RequestPriority +REQUEST_PRIORITY_LOW: _irequest_pb2.RequestPriority +REQUEST_PRIORITY_NORMAL: _irequest_pb2.RequestPriority +REQUEST_PRIORITY_REALTIME: _irequest_pb2.RequestPriority diff --git a/truffle/infer/infer_pb2_grpc.py b/truffle/infer/infer_pb2_grpc.py new file mode 100644 index 0000000..6c6b6a4 --- /dev/null +++ b/truffle/infer/infer_pb2_grpc.py @@ -0,0 +1,701 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from truffle.infer.convo import conversation_pb2 as truffle_dot_infer_dot_convo_dot_conversation__pb2 +from truffle.infer import embedding_pb2 as truffle_dot_infer_dot_embedding__pb2 +from truffle.infer import gencfg_pb2 as truffle_dot_infer_dot_gencfg__pb2 +from truffle.infer import irequest_pb2 as truffle_dot_infer_dot_irequest__pb2 +from truffle.infer import iresponse_pb2 as truffle_dot_infer_dot_iresponse__pb2 +from truffle.infer import model_pb2 as truffle_dot_infer_dot_model__pb2 + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/infer/infer_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) + + +class InferenceServiceStub(object): + """ + Defines the main gRPC service for all AI inference operations. + This service is the primary entry point for clients to interact with generative + models, create embeddings, manage model configurations, and use other related + utility functions. It consolidates all necessary data structures from other + .proto files into a single, cohesive API. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.Generate = channel.unary_stream( + '/truffle.infer.InferenceService/Generate', + request_serializer=truffle_dot_infer_dot_irequest__pb2.IRequest.SerializeToString, + response_deserializer=truffle_dot_infer_dot_iresponse__pb2.IResponse.FromString, + _registered_method=True) + self.GenerateSync = channel.unary_unary( + '/truffle.infer.InferenceService/GenerateSync', + request_serializer=truffle_dot_infer_dot_irequest__pb2.IRequest.SerializeToString, + response_deserializer=truffle_dot_infer_dot_iresponse__pb2.IResponse.FromString, + _registered_method=True) + self.GenerateBatch = channel.unary_unary( + '/truffle.infer.InferenceService/GenerateBatch', + request_serializer=truffle_dot_infer_dot_irequest__pb2.BatchIRequest.SerializeToString, + response_deserializer=truffle_dot_infer_dot_iresponse__pb2.BatchIResponse.FromString, + _registered_method=True) + self.Embed = channel.unary_unary( + '/truffle.infer.InferenceService/Embed', + request_serializer=truffle_dot_infer_dot_embedding__pb2.EmbeddingRequest.SerializeToString, + response_deserializer=truffle_dot_infer_dot_embedding__pb2.EmbeddingResponse.FromString, + _registered_method=True) + self.EmbedQueries = channel.unary_unary( + '/truffle.infer.InferenceService/EmbedQueries', + request_serializer=truffle_dot_infer_dot_embedding__pb2.EmbeddingRequest.SerializeToString, + response_deserializer=truffle_dot_infer_dot_embedding__pb2.EmbeddingResponse.FromString, + _registered_method=True) + self.GetModelList = channel.unary_unary( + '/truffle.infer.InferenceService/GetModelList', + request_serializer=truffle_dot_infer_dot_model__pb2.GetModelListRequest.SerializeToString, + response_deserializer=truffle_dot_infer_dot_model__pb2.ModelList.FromString, + _registered_method=True) + self.GetModel = channel.unary_unary( + '/truffle.infer.InferenceService/GetModel', + request_serializer=truffle_dot_infer_dot_model__pb2.GetModelRequest.SerializeToString, + response_deserializer=truffle_dot_infer_dot_model__pb2.Model.FromString, + _registered_method=True) + self.SetModels = channel.unary_unary( + '/truffle.infer.InferenceService/SetModels', + request_serializer=truffle_dot_infer_dot_model__pb2.SetModelsRequest.SerializeToString, + response_deserializer=truffle_dot_infer_dot_model__pb2.SetModelsResponse.FromString, + _registered_method=True) + self.GetModelState = channel.unary_unary( + '/truffle.infer.InferenceService/GetModelState', + request_serializer=truffle_dot_infer_dot_model__pb2.GetModelRequest.SerializeToString, + response_deserializer=truffle_dot_infer_dot_model__pb2.ModelStateUpdate.FromString, + _registered_method=True) + self.OnModelStateChange = channel.unary_stream( + '/truffle.infer.InferenceService/OnModelStateChange', + request_serializer=truffle_dot_infer_dot_model__pb2.GetModelRequest.SerializeToString, + response_deserializer=truffle_dot_infer_dot_model__pb2.ModelStateUpdate.FromString, + _registered_method=True) + self.GetEmbeddingModelList = channel.unary_unary( + '/truffle.infer.InferenceService/GetEmbeddingModelList', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=truffle_dot_infer_dot_model__pb2.EmbeddingModelList.FromString, + _registered_method=True) + self.GetEmbeddingModelInfo = channel.unary_unary( + '/truffle.infer.InferenceService/GetEmbeddingModelInfo', + request_serializer=truffle_dot_infer_dot_model__pb2.GetModelRequest.SerializeToString, + response_deserializer=truffle_dot_infer_dot_model__pb2.EmbeddingModelInfo.FromString, + _registered_method=True) + self.BuildConvo = channel.unary_unary( + '/truffle.infer.InferenceService/BuildConvo', + request_serializer=truffle_dot_infer_dot_convo_dot_conversation__pb2.Conversation.SerializeToString, + response_deserializer=truffle_dot_infer_dot_convo_dot_conversation__pb2.BuiltContext.FromString, + _registered_method=True) + self.ValidateGenerationConfig = channel.unary_unary( + '/truffle.infer.InferenceService/ValidateGenerationConfig', + request_serializer=truffle_dot_infer_dot_gencfg__pb2.ValidateConfigRequest.SerializeToString, + response_deserializer=truffle_dot_infer_dot_gencfg__pb2.ValidateConfigResponse.FromString, + _registered_method=True) + + +class InferenceServiceServicer(object): + """ + Defines the main gRPC service for all AI inference operations. + This service is the primary entry point for clients to interact with generative + models, create embeddings, manage model configurations, and use other related + utility functions. It consolidates all necessary data structures from other + .proto files into a single, cohesive API. + """ + + def Generate(self, request, context): + """Starts a generation task that streams responses back to the client. + This is suitable for interactive applications where responses are displayed + as they are generated. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GenerateSync(self, request, context): + """Performs a generation task and returns the full response in a single message. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GenerateBatch(self, request, context): + """Processes a batch of inference requests in parallel. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Embed(self, request, context): + """Generates embeddings for a given set of inputs. Embeddings are numerical + representations of text that can be used for semantic search, clustering, + and other machine learning tasks. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def EmbedQueries(self, request, context): + """A specialized version of Embed for generating embeddings for + search queries. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetModelList(self, request, context): + """Retrieves a list of all available models. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetModel(self, request, context): + """Fetches detailed information about a specific model. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SetModels(self, request, context): + """Configures model parameters such as context length, batch size etc. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetModelState(self, request, context): + """Gets the current state of a model, such as loading, loaded, unloaded etc. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def OnModelStateChange(self, request, context): + """Subscribes to updates on the state of a model to avoid polling. + pass an empty ID to get updates for all models. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetEmbeddingModelList(self, request, context): + """Retrieves a list of all available embedding models. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetEmbeddingModelInfo(self, request, context): + """Gets detailed information about a specific embedding model (input length, dimension size etc). + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def BuildConvo(self, request, context): + """Builds a context from a conversation. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ValidateGenerationConfig(self, request, context): + """Validates a generation configuration to ensure that it is compatible with + the models. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_InferenceServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'Generate': grpc.unary_stream_rpc_method_handler( + servicer.Generate, + request_deserializer=truffle_dot_infer_dot_irequest__pb2.IRequest.FromString, + response_serializer=truffle_dot_infer_dot_iresponse__pb2.IResponse.SerializeToString, + ), + 'GenerateSync': grpc.unary_unary_rpc_method_handler( + servicer.GenerateSync, + request_deserializer=truffle_dot_infer_dot_irequest__pb2.IRequest.FromString, + response_serializer=truffle_dot_infer_dot_iresponse__pb2.IResponse.SerializeToString, + ), + 'GenerateBatch': grpc.unary_unary_rpc_method_handler( + servicer.GenerateBatch, + request_deserializer=truffle_dot_infer_dot_irequest__pb2.BatchIRequest.FromString, + response_serializer=truffle_dot_infer_dot_iresponse__pb2.BatchIResponse.SerializeToString, + ), + 'Embed': grpc.unary_unary_rpc_method_handler( + servicer.Embed, + request_deserializer=truffle_dot_infer_dot_embedding__pb2.EmbeddingRequest.FromString, + response_serializer=truffle_dot_infer_dot_embedding__pb2.EmbeddingResponse.SerializeToString, + ), + 'EmbedQueries': grpc.unary_unary_rpc_method_handler( + servicer.EmbedQueries, + request_deserializer=truffle_dot_infer_dot_embedding__pb2.EmbeddingRequest.FromString, + response_serializer=truffle_dot_infer_dot_embedding__pb2.EmbeddingResponse.SerializeToString, + ), + 'GetModelList': grpc.unary_unary_rpc_method_handler( + servicer.GetModelList, + request_deserializer=truffle_dot_infer_dot_model__pb2.GetModelListRequest.FromString, + response_serializer=truffle_dot_infer_dot_model__pb2.ModelList.SerializeToString, + ), + 'GetModel': grpc.unary_unary_rpc_method_handler( + servicer.GetModel, + request_deserializer=truffle_dot_infer_dot_model__pb2.GetModelRequest.FromString, + response_serializer=truffle_dot_infer_dot_model__pb2.Model.SerializeToString, + ), + 'SetModels': grpc.unary_unary_rpc_method_handler( + servicer.SetModels, + request_deserializer=truffle_dot_infer_dot_model__pb2.SetModelsRequest.FromString, + response_serializer=truffle_dot_infer_dot_model__pb2.SetModelsResponse.SerializeToString, + ), + 'GetModelState': grpc.unary_unary_rpc_method_handler( + servicer.GetModelState, + request_deserializer=truffle_dot_infer_dot_model__pb2.GetModelRequest.FromString, + response_serializer=truffle_dot_infer_dot_model__pb2.ModelStateUpdate.SerializeToString, + ), + 'OnModelStateChange': grpc.unary_stream_rpc_method_handler( + servicer.OnModelStateChange, + request_deserializer=truffle_dot_infer_dot_model__pb2.GetModelRequest.FromString, + response_serializer=truffle_dot_infer_dot_model__pb2.ModelStateUpdate.SerializeToString, + ), + 'GetEmbeddingModelList': grpc.unary_unary_rpc_method_handler( + servicer.GetEmbeddingModelList, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=truffle_dot_infer_dot_model__pb2.EmbeddingModelList.SerializeToString, + ), + 'GetEmbeddingModelInfo': grpc.unary_unary_rpc_method_handler( + servicer.GetEmbeddingModelInfo, + request_deserializer=truffle_dot_infer_dot_model__pb2.GetModelRequest.FromString, + response_serializer=truffle_dot_infer_dot_model__pb2.EmbeddingModelInfo.SerializeToString, + ), + 'BuildConvo': grpc.unary_unary_rpc_method_handler( + servicer.BuildConvo, + request_deserializer=truffle_dot_infer_dot_convo_dot_conversation__pb2.Conversation.FromString, + response_serializer=truffle_dot_infer_dot_convo_dot_conversation__pb2.BuiltContext.SerializeToString, + ), + 'ValidateGenerationConfig': grpc.unary_unary_rpc_method_handler( + servicer.ValidateGenerationConfig, + request_deserializer=truffle_dot_infer_dot_gencfg__pb2.ValidateConfigRequest.FromString, + response_serializer=truffle_dot_infer_dot_gencfg__pb2.ValidateConfigResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'truffle.infer.InferenceService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + server.add_registered_method_handlers('truffle.infer.InferenceService', rpc_method_handlers) + + + # This class is part of an EXPERIMENTAL API. +class InferenceService(object): + """ + Defines the main gRPC service for all AI inference operations. + This service is the primary entry point for clients to interact with generative + models, create embeddings, manage model configurations, and use other related + utility functions. It consolidates all necessary data structures from other + .proto files into a single, cohesive API. + """ + + @staticmethod + def Generate(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_stream( + request, + target, + '/truffle.infer.InferenceService/Generate', + truffle_dot_infer_dot_irequest__pb2.IRequest.SerializeToString, + truffle_dot_infer_dot_iresponse__pb2.IResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GenerateSync(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.infer.InferenceService/GenerateSync', + truffle_dot_infer_dot_irequest__pb2.IRequest.SerializeToString, + truffle_dot_infer_dot_iresponse__pb2.IResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GenerateBatch(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.infer.InferenceService/GenerateBatch', + truffle_dot_infer_dot_irequest__pb2.BatchIRequest.SerializeToString, + truffle_dot_infer_dot_iresponse__pb2.BatchIResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Embed(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.infer.InferenceService/Embed', + truffle_dot_infer_dot_embedding__pb2.EmbeddingRequest.SerializeToString, + truffle_dot_infer_dot_embedding__pb2.EmbeddingResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def EmbedQueries(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.infer.InferenceService/EmbedQueries', + truffle_dot_infer_dot_embedding__pb2.EmbeddingRequest.SerializeToString, + truffle_dot_infer_dot_embedding__pb2.EmbeddingResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetModelList(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.infer.InferenceService/GetModelList', + truffle_dot_infer_dot_model__pb2.GetModelListRequest.SerializeToString, + truffle_dot_infer_dot_model__pb2.ModelList.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetModel(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.infer.InferenceService/GetModel', + truffle_dot_infer_dot_model__pb2.GetModelRequest.SerializeToString, + truffle_dot_infer_dot_model__pb2.Model.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def SetModels(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.infer.InferenceService/SetModels', + truffle_dot_infer_dot_model__pb2.SetModelsRequest.SerializeToString, + truffle_dot_infer_dot_model__pb2.SetModelsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetModelState(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.infer.InferenceService/GetModelState', + truffle_dot_infer_dot_model__pb2.GetModelRequest.SerializeToString, + truffle_dot_infer_dot_model__pb2.ModelStateUpdate.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def OnModelStateChange(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_stream( + request, + target, + '/truffle.infer.InferenceService/OnModelStateChange', + truffle_dot_infer_dot_model__pb2.GetModelRequest.SerializeToString, + truffle_dot_infer_dot_model__pb2.ModelStateUpdate.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetEmbeddingModelList(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.infer.InferenceService/GetEmbeddingModelList', + google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + truffle_dot_infer_dot_model__pb2.EmbeddingModelList.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetEmbeddingModelInfo(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.infer.InferenceService/GetEmbeddingModelInfo', + truffle_dot_infer_dot_model__pb2.GetModelRequest.SerializeToString, + truffle_dot_infer_dot_model__pb2.EmbeddingModelInfo.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def BuildConvo(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.infer.InferenceService/BuildConvo', + truffle_dot_infer_dot_convo_dot_conversation__pb2.Conversation.SerializeToString, + truffle_dot_infer_dot_convo_dot_conversation__pb2.BuiltContext.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ValidateGenerationConfig(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.infer.InferenceService/ValidateGenerationConfig', + truffle_dot_infer_dot_gencfg__pb2.ValidateConfigRequest.SerializeToString, + truffle_dot_infer_dot_gencfg__pb2.ValidateConfigResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) diff --git a/truffle/infer/irequest_pb2.py b/truffle/infer/irequest_pb2.py new file mode 100644 index 0000000..df2bafa --- /dev/null +++ b/truffle/infer/irequest_pb2.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/infer/irequest.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/infer/irequest.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.infer import gencfg_pb2 as truffle_dot_infer_dot_gencfg__pb2 +from truffle.infer.convo import conversation_pb2 as truffle_dot_infer_dot_convo_dot_conversation__pb2 +try: + truffle_dot_infer_dot_convo_dot_msg__pb2 = truffle_dot_infer_dot_convo_dot_conversation__pb2.truffle_dot_infer_dot_convo_dot_msg__pb2 +except AttributeError: + truffle_dot_infer_dot_convo_dot_msg__pb2 = truffle_dot_infer_dot_convo_dot_conversation__pb2.truffle.infer.convo.msg_pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1ctruffle/infer/irequest.proto\x12\rtruffle.infer\x1a\x1atruffle/infer/gencfg.proto\x1a&truffle/infer/convo/conversation.proto\"\xd8\x01\n\x08IRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x03raw\x18\x02 \x01(\tH\x00\x12\x32\n\x05\x63onvo\x18\x03 \x01(\x0b\x32!.truffle.infer.convo.ConversationH\x00\x12,\n\x03\x63\x66g\x18\x04 \x01(\x0b\x32\x1f.truffle.infer.GenerationConfig\x12\x12\n\nmodel_uuid\x18\x05 \x01(\t\x12\x30\n\x08priority\x18\x06 \x01(\x0e\x32\x1e.truffle.infer.RequestPriorityB\t\n\x07\x63ontext\":\n\rBatchIRequest\x12)\n\x08requests\x18\x01 \x03(\x0b\x32\x17.truffle.infer.IRequest*\x89\x01\n\x0fRequestPriority\x12 \n\x1cREQUEST_PRIORITY_UNSPECIFIED\x10\x00\x12\x18\n\x14REQUEST_PRIORITY_LOW\x10\x01\x12\x1b\n\x17REQUEST_PRIORITY_NORMAL\x10\x02\x12\x1d\n\x19REQUEST_PRIORITY_REALTIME\x10\x03\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.infer.irequest_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_REQUESTPRIORITY']._serialized_start=395 + _globals['_REQUESTPRIORITY']._serialized_end=532 + _globals['_IREQUEST']._serialized_start=116 + _globals['_IREQUEST']._serialized_end=332 + _globals['_BATCHIREQUEST']._serialized_start=334 + _globals['_BATCHIREQUEST']._serialized_end=392 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/infer/irequest_pb2.pyi b/truffle/infer/irequest_pb2.pyi new file mode 100644 index 0000000..8332e8c --- /dev/null +++ b/truffle/infer/irequest_pb2.pyi @@ -0,0 +1,44 @@ +from truffle.infer import gencfg_pb2 as _gencfg_pb2 +from truffle.infer.convo import conversation_pb2 as _conversation_pb2 +from truffle.infer.convo import msg_pb2 as _msg_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class RequestPriority(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + REQUEST_PRIORITY_UNSPECIFIED: _ClassVar[RequestPriority] + REQUEST_PRIORITY_LOW: _ClassVar[RequestPriority] + REQUEST_PRIORITY_NORMAL: _ClassVar[RequestPriority] + REQUEST_PRIORITY_REALTIME: _ClassVar[RequestPriority] +REQUEST_PRIORITY_UNSPECIFIED: RequestPriority +REQUEST_PRIORITY_LOW: RequestPriority +REQUEST_PRIORITY_NORMAL: RequestPriority +REQUEST_PRIORITY_REALTIME: RequestPriority + +class IRequest(_message.Message): + __slots__ = ("id", "raw", "convo", "cfg", "model_uuid", "priority") + ID_FIELD_NUMBER: _ClassVar[int] + RAW_FIELD_NUMBER: _ClassVar[int] + CONVO_FIELD_NUMBER: _ClassVar[int] + CFG_FIELD_NUMBER: _ClassVar[int] + MODEL_UUID_FIELD_NUMBER: _ClassVar[int] + PRIORITY_FIELD_NUMBER: _ClassVar[int] + id: str + raw: str + convo: _conversation_pb2.Conversation + cfg: _gencfg_pb2.GenerationConfig + model_uuid: str + priority: RequestPriority + def __init__(self, id: _Optional[str] = ..., raw: _Optional[str] = ..., convo: _Optional[_Union[_conversation_pb2.Conversation, _Mapping]] = ..., cfg: _Optional[_Union[_gencfg_pb2.GenerationConfig, _Mapping]] = ..., model_uuid: _Optional[str] = ..., priority: _Optional[_Union[RequestPriority, str]] = ...) -> None: ... + +class BatchIRequest(_message.Message): + __slots__ = ("requests",) + REQUESTS_FIELD_NUMBER: _ClassVar[int] + requests: _containers.RepeatedCompositeFieldContainer[IRequest] + def __init__(self, requests: _Optional[_Iterable[_Union[IRequest, _Mapping]]] = ...) -> None: ... diff --git a/truffle/infer/irequest_pb2_grpc.py b/truffle/infer/irequest_pb2_grpc.py new file mode 100644 index 0000000..de17794 --- /dev/null +++ b/truffle/infer/irequest_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/infer/irequest_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/infer/iresponse_pb2.py b/truffle/infer/iresponse_pb2.py new file mode 100644 index 0000000..5c6ad2a --- /dev/null +++ b/truffle/infer/iresponse_pb2.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/infer/iresponse.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/infer/iresponse.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.infer import usage_pb2 as truffle_dot_infer_dot_usage__pb2 +from truffle.infer import finishreason_pb2 as truffle_dot_infer_dot_finishreason__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dtruffle/infer/iresponse.proto\x12\rtruffle.infer\x1a\x19truffle/infer/usage.proto\x1a truffle/infer/finishreason.proto\"\xa7\x01\n\tIResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\t\x12(\n\x05usage\x18\x03 \x01(\x0b\x32\x14.truffle.infer.UsageH\x00\x88\x01\x01\x12\x37\n\rfinish_reason\x18\x04 \x01(\x0e\x32\x1b.truffle.infer.FinishReasonH\x01\x88\x01\x01\x42\x08\n\x06_usageB\x10\n\x0e_finish_reason\"=\n\x0e\x42\x61tchIResponse\x12+\n\tresponses\x18\x01 \x03(\x0b\x32\x18.truffle.infer.IResponseb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.infer.iresponse_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_IRESPONSE']._serialized_start=110 + _globals['_IRESPONSE']._serialized_end=277 + _globals['_BATCHIRESPONSE']._serialized_start=279 + _globals['_BATCHIRESPONSE']._serialized_end=340 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/infer/iresponse_pb2.pyi b/truffle/infer/iresponse_pb2.pyi new file mode 100644 index 0000000..43d8a58 --- /dev/null +++ b/truffle/infer/iresponse_pb2.pyi @@ -0,0 +1,27 @@ +from truffle.infer import usage_pb2 as _usage_pb2 +from truffle.infer import finishreason_pb2 as _finishreason_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class IResponse(_message.Message): + __slots__ = ("id", "content", "usage", "finish_reason") + ID_FIELD_NUMBER: _ClassVar[int] + CONTENT_FIELD_NUMBER: _ClassVar[int] + USAGE_FIELD_NUMBER: _ClassVar[int] + FINISH_REASON_FIELD_NUMBER: _ClassVar[int] + id: str + content: str + usage: _usage_pb2.Usage + finish_reason: _finishreason_pb2.FinishReason + def __init__(self, id: _Optional[str] = ..., content: _Optional[str] = ..., usage: _Optional[_Union[_usage_pb2.Usage, _Mapping]] = ..., finish_reason: _Optional[_Union[_finishreason_pb2.FinishReason, str]] = ...) -> None: ... + +class BatchIResponse(_message.Message): + __slots__ = ("responses",) + RESPONSES_FIELD_NUMBER: _ClassVar[int] + responses: _containers.RepeatedCompositeFieldContainer[IResponse] + def __init__(self, responses: _Optional[_Iterable[_Union[IResponse, _Mapping]]] = ...) -> None: ... diff --git a/truffle/infer/iresponse_pb2_grpc.py b/truffle/infer/iresponse_pb2_grpc.py new file mode 100644 index 0000000..1be00b7 --- /dev/null +++ b/truffle/infer/iresponse_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/infer/iresponse_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/infer/model_pb2.py b/truffle/infer/model_pb2.py new file mode 100644 index 0000000..7253b61 --- /dev/null +++ b/truffle/infer/model_pb2.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/infer/model.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/infer/model.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19truffle/infer/model.proto\x12\rtruffle.infer\"\xda\x01\n\x12\x45mbeddingModelInfo\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x38\n\x06\x63onfig\x18\x04 \x01(\x0b\x32(.truffle.infer.EmbeddingModelInfo.Config\x12\x0c\n\x04uuid\x18\x05 \x01(\t\x1aQ\n\x06\x43onfig\x12\x18\n\x10max_input_length\x18\x01 \x01(\x03\x12\x16\n\x0emax_batch_size\x18\x02 \x01(\x03\x12\x15\n\rembedding_dim\x18\x03 \x01(\x03\"G\n\x12\x45mbeddingModelList\x12\x31\n\x06models\x18\x01 \x03(\x0b\x32!.truffle.infer.EmbeddingModelInfo\"\xba\x04\n\x0bModelConfig\x12=\n\x04info\x18\x01 \x01(\x0b\x32*.truffle.infer.ModelConfig.ModelConfigInfoH\x00\x88\x01\x01\x12\x1b\n\x0e\x63ontext_length\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x1b\n\x0emax_batch_size\x18\x03 \x01(\rH\x02\x88\x01\x01\x12\x16\n\tdata_type\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06loaded\x18\x05 \x01(\x08H\x04\x88\x01\x01\x1a\xbc\x02\n\x0fModelConfigInfo\x12 \n\x18\x63ontext_length_limit_max\x18\x01 \x01(\r\x12 \n\x18\x63ontext_length_limit_min\x18\x02 \x01(\r\x12\x1c\n\x14model_context_length\x18\n \x01(\r\x12\x1c\n\x14\x62\x61tch_size_limit_max\x18\x03 \x01(\r\x12\x1c\n\x14\x62\x61tch_size_limit_min\x18\x04 \x01(\r\x12\x1c\n\x14has_chain_of_thought\x18\x05 \x01(\x08\x12\x12\n\nis_agentic\x18\x06 \x01(\x08\x12\x1b\n\x13memory_usage_params\x18\x07 \x01(\x03\x12\x1e\n\x16memory_usage_inference\x18\x08 \x01(\x03\x12\x1c\n\x14\x61vailable_data_types\x18\t \x03(\tB\x07\n\x05_infoB\x11\n\x0f_context_lengthB\x11\n\x0f_max_batch_sizeB\x0c\n\n_data_typeB\t\n\x07_loaded\"\xa0\x02\n\x05Model\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08provider\x18\x03 \x01(\t\x12*\n\x06\x63onfig\x18\x04 \x01(\x0b\x32\x1a.truffle.infer.ModelConfig\x12.\n\x05state\x18\x05 \x01(\x0e\x32\x1f.truffle.infer.Model.ModelState\"\x8c\x01\n\nModelState\x12\x17\n\x13MODEL_STATE_INVALID\x10\x00\x12\x19\n\x15MODEL_STATE_AVAILABLE\x10\x01\x12\x17\n\x13MODEL_STATE_LOADING\x10\x02\x12\x19\n\x15MODEL_STATE_UNLOADING\x10\x03\x12\x16\n\x12MODEL_STATE_LOADED\x10\x04\"z\n\x10ModelStateUpdate\x12\x12\n\nmodel_uuid\x18\x01 \x01(\t\x12.\n\x05state\x18\x02 \x01(\x0e\x32\x1f.truffle.infer.Model.ModelState\x12\x15\n\x08progress\x18\x03 \x01(\x05H\x00\x88\x01\x01\x42\x0b\n\t_progress\"\\\n\tModelList\x12$\n\x06models\x18\x01 \x03(\x0b\x32\x14.truffle.infer.Model\x12\x14\n\x0ctotal_memory\x18\x02 \x01(\x04\x12\x13\n\x0bused_memory\x18\x03 \x01(\x04\"%\n\x0fGetModelRequest\x12\x12\n\nmodel_uuid\x18\x01 \x01(\t\"m\n\x13GetModelListRequest\x12\x12\n\nuse_filter\x18\x01 \x01(\x08\x12\x13\n\tavailable\x18\x02 \x01(\x08H\x00\x12\x10\n\x06loaded\x18\x03 \x01(\x08H\x00\x12\x11\n\x07\x61gentic\x18\x04 \x01(\x08H\x00\x42\x08\n\x06\x66ilter\"\x88\x02\n\x11SetModelsResponse\x12\x41\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x33.truffle.infer.SetModelsResponse.SetModelsErrorCode\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x33\n\x0cupdated_list\x18\x03 \x01(\x0b\x32\x18.truffle.infer.ModelListH\x00\x88\x01\x01\"Y\n\x12SetModelsErrorCode\x12\x06\n\x02OK\x10\x00\x12\x12\n\x0eINVALID_CONFIG\x10\x01\x12\x15\n\x11NOT_ENOUGH_MEMORY\x10\x02\x12\x10\n\x0cMODEL_IN_USE\x10\x03\x42\x0f\n\r_updated_list\"\x9d\x01\n\x10SetModelsRequest\x12=\n\x07updates\x18\x01 \x03(\x0b\x32,.truffle.infer.SetModelsRequest.UpdatesEntry\x1aJ\n\x0cUpdatesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.truffle.infer.ModelConfig:\x02\x38\x01\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.infer.model_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_SETMODELSREQUEST_UPDATESENTRY']._loaded_options = None + _globals['_SETMODELSREQUEST_UPDATESENTRY']._serialized_options = b'8\001' + _globals['_EMBEDDINGMODELINFO']._serialized_start=45 + _globals['_EMBEDDINGMODELINFO']._serialized_end=263 + _globals['_EMBEDDINGMODELINFO_CONFIG']._serialized_start=182 + _globals['_EMBEDDINGMODELINFO_CONFIG']._serialized_end=263 + _globals['_EMBEDDINGMODELLIST']._serialized_start=265 + _globals['_EMBEDDINGMODELLIST']._serialized_end=336 + _globals['_MODELCONFIG']._serialized_start=339 + _globals['_MODELCONFIG']._serialized_end=909 + _globals['_MODELCONFIG_MODELCONFIGINFO']._serialized_start=521 + _globals['_MODELCONFIG_MODELCONFIGINFO']._serialized_end=837 + _globals['_MODEL']._serialized_start=912 + _globals['_MODEL']._serialized_end=1200 + _globals['_MODEL_MODELSTATE']._serialized_start=1060 + _globals['_MODEL_MODELSTATE']._serialized_end=1200 + _globals['_MODELSTATEUPDATE']._serialized_start=1202 + _globals['_MODELSTATEUPDATE']._serialized_end=1324 + _globals['_MODELLIST']._serialized_start=1326 + _globals['_MODELLIST']._serialized_end=1418 + _globals['_GETMODELREQUEST']._serialized_start=1420 + _globals['_GETMODELREQUEST']._serialized_end=1457 + _globals['_GETMODELLISTREQUEST']._serialized_start=1459 + _globals['_GETMODELLISTREQUEST']._serialized_end=1568 + _globals['_SETMODELSRESPONSE']._serialized_start=1571 + _globals['_SETMODELSRESPONSE']._serialized_end=1835 + _globals['_SETMODELSRESPONSE_SETMODELSERRORCODE']._serialized_start=1729 + _globals['_SETMODELSRESPONSE_SETMODELSERRORCODE']._serialized_end=1818 + _globals['_SETMODELSREQUEST']._serialized_start=1838 + _globals['_SETMODELSREQUEST']._serialized_end=1995 + _globals['_SETMODELSREQUEST_UPDATESENTRY']._serialized_start=1921 + _globals['_SETMODELSREQUEST_UPDATESENTRY']._serialized_end=1995 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/infer/model_pb2.pyi b/truffle/infer/model_pb2.pyi new file mode 100644 index 0000000..218c5d7 --- /dev/null +++ b/truffle/infer/model_pb2.pyi @@ -0,0 +1,171 @@ +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class EmbeddingModelInfo(_message.Message): + __slots__ = ("id", "name", "version", "config", "uuid") + class Config(_message.Message): + __slots__ = ("max_input_length", "max_batch_size", "embedding_dim") + MAX_INPUT_LENGTH_FIELD_NUMBER: _ClassVar[int] + MAX_BATCH_SIZE_FIELD_NUMBER: _ClassVar[int] + EMBEDDING_DIM_FIELD_NUMBER: _ClassVar[int] + max_input_length: int + max_batch_size: int + embedding_dim: int + def __init__(self, max_input_length: _Optional[int] = ..., max_batch_size: _Optional[int] = ..., embedding_dim: _Optional[int] = ...) -> None: ... + ID_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + CONFIG_FIELD_NUMBER: _ClassVar[int] + UUID_FIELD_NUMBER: _ClassVar[int] + id: int + name: str + version: str + config: EmbeddingModelInfo.Config + uuid: str + def __init__(self, id: _Optional[int] = ..., name: _Optional[str] = ..., version: _Optional[str] = ..., config: _Optional[_Union[EmbeddingModelInfo.Config, _Mapping]] = ..., uuid: _Optional[str] = ...) -> None: ... + +class EmbeddingModelList(_message.Message): + __slots__ = ("models",) + MODELS_FIELD_NUMBER: _ClassVar[int] + models: _containers.RepeatedCompositeFieldContainer[EmbeddingModelInfo] + def __init__(self, models: _Optional[_Iterable[_Union[EmbeddingModelInfo, _Mapping]]] = ...) -> None: ... + +class ModelConfig(_message.Message): + __slots__ = ("info", "context_length", "max_batch_size", "data_type", "loaded") + class ModelConfigInfo(_message.Message): + __slots__ = ("context_length_limit_max", "context_length_limit_min", "model_context_length", "batch_size_limit_max", "batch_size_limit_min", "has_chain_of_thought", "is_agentic", "memory_usage_params", "memory_usage_inference", "available_data_types") + CONTEXT_LENGTH_LIMIT_MAX_FIELD_NUMBER: _ClassVar[int] + CONTEXT_LENGTH_LIMIT_MIN_FIELD_NUMBER: _ClassVar[int] + MODEL_CONTEXT_LENGTH_FIELD_NUMBER: _ClassVar[int] + BATCH_SIZE_LIMIT_MAX_FIELD_NUMBER: _ClassVar[int] + BATCH_SIZE_LIMIT_MIN_FIELD_NUMBER: _ClassVar[int] + HAS_CHAIN_OF_THOUGHT_FIELD_NUMBER: _ClassVar[int] + IS_AGENTIC_FIELD_NUMBER: _ClassVar[int] + MEMORY_USAGE_PARAMS_FIELD_NUMBER: _ClassVar[int] + MEMORY_USAGE_INFERENCE_FIELD_NUMBER: _ClassVar[int] + AVAILABLE_DATA_TYPES_FIELD_NUMBER: _ClassVar[int] + context_length_limit_max: int + context_length_limit_min: int + model_context_length: int + batch_size_limit_max: int + batch_size_limit_min: int + has_chain_of_thought: bool + is_agentic: bool + memory_usage_params: int + memory_usage_inference: int + available_data_types: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, context_length_limit_max: _Optional[int] = ..., context_length_limit_min: _Optional[int] = ..., model_context_length: _Optional[int] = ..., batch_size_limit_max: _Optional[int] = ..., batch_size_limit_min: _Optional[int] = ..., has_chain_of_thought: bool = ..., is_agentic: bool = ..., memory_usage_params: _Optional[int] = ..., memory_usage_inference: _Optional[int] = ..., available_data_types: _Optional[_Iterable[str]] = ...) -> None: ... + INFO_FIELD_NUMBER: _ClassVar[int] + CONTEXT_LENGTH_FIELD_NUMBER: _ClassVar[int] + MAX_BATCH_SIZE_FIELD_NUMBER: _ClassVar[int] + DATA_TYPE_FIELD_NUMBER: _ClassVar[int] + LOADED_FIELD_NUMBER: _ClassVar[int] + info: ModelConfig.ModelConfigInfo + context_length: int + max_batch_size: int + data_type: str + loaded: bool + def __init__(self, info: _Optional[_Union[ModelConfig.ModelConfigInfo, _Mapping]] = ..., context_length: _Optional[int] = ..., max_batch_size: _Optional[int] = ..., data_type: _Optional[str] = ..., loaded: bool = ...) -> None: ... + +class Model(_message.Message): + __slots__ = ("uuid", "name", "provider", "config", "state") + class ModelState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + MODEL_STATE_INVALID: _ClassVar[Model.ModelState] + MODEL_STATE_AVAILABLE: _ClassVar[Model.ModelState] + MODEL_STATE_LOADING: _ClassVar[Model.ModelState] + MODEL_STATE_UNLOADING: _ClassVar[Model.ModelState] + MODEL_STATE_LOADED: _ClassVar[Model.ModelState] + MODEL_STATE_INVALID: Model.ModelState + MODEL_STATE_AVAILABLE: Model.ModelState + MODEL_STATE_LOADING: Model.ModelState + MODEL_STATE_UNLOADING: Model.ModelState + MODEL_STATE_LOADED: Model.ModelState + UUID_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + PROVIDER_FIELD_NUMBER: _ClassVar[int] + CONFIG_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + uuid: str + name: str + provider: str + config: ModelConfig + state: Model.ModelState + def __init__(self, uuid: _Optional[str] = ..., name: _Optional[str] = ..., provider: _Optional[str] = ..., config: _Optional[_Union[ModelConfig, _Mapping]] = ..., state: _Optional[_Union[Model.ModelState, str]] = ...) -> None: ... + +class ModelStateUpdate(_message.Message): + __slots__ = ("model_uuid", "state", "progress") + MODEL_UUID_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + PROGRESS_FIELD_NUMBER: _ClassVar[int] + model_uuid: str + state: Model.ModelState + progress: int + def __init__(self, model_uuid: _Optional[str] = ..., state: _Optional[_Union[Model.ModelState, str]] = ..., progress: _Optional[int] = ...) -> None: ... + +class ModelList(_message.Message): + __slots__ = ("models", "total_memory", "used_memory") + MODELS_FIELD_NUMBER: _ClassVar[int] + TOTAL_MEMORY_FIELD_NUMBER: _ClassVar[int] + USED_MEMORY_FIELD_NUMBER: _ClassVar[int] + models: _containers.RepeatedCompositeFieldContainer[Model] + total_memory: int + used_memory: int + def __init__(self, models: _Optional[_Iterable[_Union[Model, _Mapping]]] = ..., total_memory: _Optional[int] = ..., used_memory: _Optional[int] = ...) -> None: ... + +class GetModelRequest(_message.Message): + __slots__ = ("model_uuid",) + MODEL_UUID_FIELD_NUMBER: _ClassVar[int] + model_uuid: str + def __init__(self, model_uuid: _Optional[str] = ...) -> None: ... + +class GetModelListRequest(_message.Message): + __slots__ = ("use_filter", "available", "loaded", "agentic") + USE_FILTER_FIELD_NUMBER: _ClassVar[int] + AVAILABLE_FIELD_NUMBER: _ClassVar[int] + LOADED_FIELD_NUMBER: _ClassVar[int] + AGENTIC_FIELD_NUMBER: _ClassVar[int] + use_filter: bool + available: bool + loaded: bool + agentic: bool + def __init__(self, use_filter: bool = ..., available: bool = ..., loaded: bool = ..., agentic: bool = ...) -> None: ... + +class SetModelsResponse(_message.Message): + __slots__ = ("code", "message", "updated_list") + class SetModelsErrorCode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + OK: _ClassVar[SetModelsResponse.SetModelsErrorCode] + INVALID_CONFIG: _ClassVar[SetModelsResponse.SetModelsErrorCode] + NOT_ENOUGH_MEMORY: _ClassVar[SetModelsResponse.SetModelsErrorCode] + MODEL_IN_USE: _ClassVar[SetModelsResponse.SetModelsErrorCode] + OK: SetModelsResponse.SetModelsErrorCode + INVALID_CONFIG: SetModelsResponse.SetModelsErrorCode + NOT_ENOUGH_MEMORY: SetModelsResponse.SetModelsErrorCode + MODEL_IN_USE: SetModelsResponse.SetModelsErrorCode + CODE_FIELD_NUMBER: _ClassVar[int] + MESSAGE_FIELD_NUMBER: _ClassVar[int] + UPDATED_LIST_FIELD_NUMBER: _ClassVar[int] + code: SetModelsResponse.SetModelsErrorCode + message: str + updated_list: ModelList + def __init__(self, code: _Optional[_Union[SetModelsResponse.SetModelsErrorCode, str]] = ..., message: _Optional[str] = ..., updated_list: _Optional[_Union[ModelList, _Mapping]] = ...) -> None: ... + +class SetModelsRequest(_message.Message): + __slots__ = ("updates",) + class UpdatesEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: ModelConfig + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[ModelConfig, _Mapping]] = ...) -> None: ... + UPDATES_FIELD_NUMBER: _ClassVar[int] + updates: _containers.MessageMap[str, ModelConfig] + def __init__(self, updates: _Optional[_Mapping[str, ModelConfig]] = ...) -> None: ... diff --git a/truffle/infer/model_pb2_grpc.py b/truffle/infer/model_pb2_grpc.py new file mode 100644 index 0000000..05e4dd8 --- /dev/null +++ b/truffle/infer/model_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/infer/model_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/infer/tokenize_pb2.py b/truffle/infer/tokenize_pb2.py new file mode 100644 index 0000000..9d13153 --- /dev/null +++ b/truffle/infer/tokenize_pb2.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/infer/tokenize.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/infer/tokenize.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1ctruffle/infer/tokenize.proto\x12\rtruffle.infer\"4\n\x0fTokenizeRequest\x12\r\n\x05texts\x18\x01 \x03(\t\x12\x12\n\nmodel_uuid\x18\x02 \x01(\t\"#\n\x10TokenizeResponse\x12\x0f\n\x07lengths\x18\x01 \x03(\rb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.infer.tokenize_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_TOKENIZEREQUEST']._serialized_start=47 + _globals['_TOKENIZEREQUEST']._serialized_end=99 + _globals['_TOKENIZERESPONSE']._serialized_start=101 + _globals['_TOKENIZERESPONSE']._serialized_end=136 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/infer/tokenize_pb2.pyi b/truffle/infer/tokenize_pb2.pyi new file mode 100644 index 0000000..8f9a640 --- /dev/null +++ b/truffle/infer/tokenize_pb2.pyi @@ -0,0 +1,21 @@ +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable +from typing import ClassVar as _ClassVar, Optional as _Optional + +DESCRIPTOR: _descriptor.FileDescriptor + +class TokenizeRequest(_message.Message): + __slots__ = ("texts", "model_uuid") + TEXTS_FIELD_NUMBER: _ClassVar[int] + MODEL_UUID_FIELD_NUMBER: _ClassVar[int] + texts: _containers.RepeatedScalarFieldContainer[str] + model_uuid: str + def __init__(self, texts: _Optional[_Iterable[str]] = ..., model_uuid: _Optional[str] = ...) -> None: ... + +class TokenizeResponse(_message.Message): + __slots__ = ("lengths",) + LENGTHS_FIELD_NUMBER: _ClassVar[int] + lengths: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, lengths: _Optional[_Iterable[int]] = ...) -> None: ... diff --git a/truffle/infer/tokenize_pb2_grpc.py b/truffle/infer/tokenize_pb2_grpc.py new file mode 100644 index 0000000..25b9a25 --- /dev/null +++ b/truffle/infer/tokenize_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/infer/tokenize_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/infer/usage_pb2.py b/truffle/infer/usage_pb2.py new file mode 100644 index 0000000..60361b0 --- /dev/null +++ b/truffle/infer/usage_pb2.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/infer/usage.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/infer/usage.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19truffle/infer/usage.proto\x12\rtruffle.infer\"\xbb\x02\n\x05Usage\x12\x12\n\ntotal_time\x18\x01 \x01(\x01\x12\x14\n\x0cprefill_time\x18\x02 \x01(\x01\x12\x13\n\x0b\x64\x65\x63ode_time\x18\x03 \x01(\x01\x12\x0c\n\x04ttft\x18\x04 \x01(\x01\x12\x1b\n\x13inter_token_latency\x18\x05 \x01(\x01\x12\x12\n\ndecode_tps\x18\x06 \x01(\x01\x12\x13\n\x0bprefill_tps\x18\x07 \x01(\x01\x12+\n\x06tokens\x18\x08 \x01(\x0b\x32\x1b.truffle.infer.Usage.Tokens\x1ar\n\x06Tokens\x12\x0e\n\x06prompt\x18\x01 \x01(\x04\x12\x12\n\ncompletion\x18\x02 \x01(\x04\x12\x0f\n\x07prefill\x18\x03 \x01(\x04\x12\x0e\n\x06\x64\x65\x63ode\x18\x04 \x01(\x04\x12\x14\n\x0cjump_forward\x18\x05 \x01(\x04\x12\r\n\x05image\x18\x06 \x01(\x04\"R\n\x0bSystemUsage\x12\x13\n\x0b\x64\x65vice_name\x18\x01 \x01(\t\x12\x14\n\x0ctotal_memory\x18\x02 \x01(\x04\x12\x18\n\x10\x61vailable_memory\x18\x03 \x01(\x04\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.infer.usage_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_USAGE']._serialized_start=45 + _globals['_USAGE']._serialized_end=360 + _globals['_USAGE_TOKENS']._serialized_start=246 + _globals['_USAGE_TOKENS']._serialized_end=360 + _globals['_SYSTEMUSAGE']._serialized_start=362 + _globals['_SYSTEMUSAGE']._serialized_end=444 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/infer/usage_pb2.pyi b/truffle/infer/usage_pb2.pyi new file mode 100644 index 0000000..bb2758e --- /dev/null +++ b/truffle/infer/usage_pb2.pyi @@ -0,0 +1,51 @@ +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class Usage(_message.Message): + __slots__ = ("total_time", "prefill_time", "decode_time", "ttft", "inter_token_latency", "decode_tps", "prefill_tps", "tokens") + class Tokens(_message.Message): + __slots__ = ("prompt", "completion", "prefill", "decode", "jump_forward", "image") + PROMPT_FIELD_NUMBER: _ClassVar[int] + COMPLETION_FIELD_NUMBER: _ClassVar[int] + PREFILL_FIELD_NUMBER: _ClassVar[int] + DECODE_FIELD_NUMBER: _ClassVar[int] + JUMP_FORWARD_FIELD_NUMBER: _ClassVar[int] + IMAGE_FIELD_NUMBER: _ClassVar[int] + prompt: int + completion: int + prefill: int + decode: int + jump_forward: int + image: int + def __init__(self, prompt: _Optional[int] = ..., completion: _Optional[int] = ..., prefill: _Optional[int] = ..., decode: _Optional[int] = ..., jump_forward: _Optional[int] = ..., image: _Optional[int] = ...) -> None: ... + TOTAL_TIME_FIELD_NUMBER: _ClassVar[int] + PREFILL_TIME_FIELD_NUMBER: _ClassVar[int] + DECODE_TIME_FIELD_NUMBER: _ClassVar[int] + TTFT_FIELD_NUMBER: _ClassVar[int] + INTER_TOKEN_LATENCY_FIELD_NUMBER: _ClassVar[int] + DECODE_TPS_FIELD_NUMBER: _ClassVar[int] + PREFILL_TPS_FIELD_NUMBER: _ClassVar[int] + TOKENS_FIELD_NUMBER: _ClassVar[int] + total_time: float + prefill_time: float + decode_time: float + ttft: float + inter_token_latency: float + decode_tps: float + prefill_tps: float + tokens: Usage.Tokens + def __init__(self, total_time: _Optional[float] = ..., prefill_time: _Optional[float] = ..., decode_time: _Optional[float] = ..., ttft: _Optional[float] = ..., inter_token_latency: _Optional[float] = ..., decode_tps: _Optional[float] = ..., prefill_tps: _Optional[float] = ..., tokens: _Optional[_Union[Usage.Tokens, _Mapping]] = ...) -> None: ... + +class SystemUsage(_message.Message): + __slots__ = ("device_name", "total_memory", "available_memory") + DEVICE_NAME_FIELD_NUMBER: _ClassVar[int] + TOTAL_MEMORY_FIELD_NUMBER: _ClassVar[int] + AVAILABLE_MEMORY_FIELD_NUMBER: _ClassVar[int] + device_name: str + total_memory: int + available_memory: int + def __init__(self, device_name: _Optional[str] = ..., total_memory: _Optional[int] = ..., available_memory: _Optional[int] = ...) -> None: ... diff --git a/truffle/infer/usage_pb2_grpc.py b/truffle/infer/usage_pb2_grpc.py new file mode 100644 index 0000000..0e4108f --- /dev/null +++ b/truffle/infer/usage_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/infer/usage_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/__init__.py b/truffle/os/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/truffle/os/app_queries_pb2.py b/truffle/os/app_queries_pb2.py new file mode 100644 index 0000000..1b0f73c --- /dev/null +++ b/truffle/os/app_queries_pb2.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/app_queries.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/app_queries.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.app import foreground_pb2 as truffle_dot_app_dot_foreground__pb2 +from truffle.app import background_pb2 as truffle_dot_app_dot_background__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1ctruffle/os/app_queries.proto\x12\ntruffle.os\x1a\x1ctruffle/app/foreground.proto\x1a\x1ctruffle/app/background.proto\")\n\x18GetForegroundAppsRequest\x12\r\n\x05uuids\x18\x01 \x03(\t\"E\n\x19GetForegroundAppsResponse\x12(\n\x04\x61pps\x18\x01 \x03(\x0b\x32\x1a.truffle.app.ForegroundApp\")\n\x18GetBackgroundAppsRequest\x12\r\n\x05uuids\x18\x01 \x03(\t\"E\n\x19GetBackgroundAppsResponse\x12(\n\x04\x61pps\x18\x01 \x03(\x0b\x32\x1a.truffle.app.BackgroundApp\"\x13\n\x11GetAllAppsRequest\"~\n\x12GetAllAppsResponse\x12\x33\n\x0f\x66oreground_apps\x18\x01 \x03(\x0b\x32\x1a.truffle.app.ForegroundApp\x12\x33\n\x0f\x62\x61\x63kground_apps\x18\x02 \x03(\x0b\x32\x1a.truffle.app.BackgroundApp\"$\n\x10\x44\x65leteAppRequest\x12\x10\n\x08\x61pp_uuid\x18\x01 \x01(\t\"\x13\n\x11\x44\x65leteAppResponseb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.app_queries_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_GETFOREGROUNDAPPSREQUEST']._serialized_start=104 + _globals['_GETFOREGROUNDAPPSREQUEST']._serialized_end=145 + _globals['_GETFOREGROUNDAPPSRESPONSE']._serialized_start=147 + _globals['_GETFOREGROUNDAPPSRESPONSE']._serialized_end=216 + _globals['_GETBACKGROUNDAPPSREQUEST']._serialized_start=218 + _globals['_GETBACKGROUNDAPPSREQUEST']._serialized_end=259 + _globals['_GETBACKGROUNDAPPSRESPONSE']._serialized_start=261 + _globals['_GETBACKGROUNDAPPSRESPONSE']._serialized_end=330 + _globals['_GETALLAPPSREQUEST']._serialized_start=332 + _globals['_GETALLAPPSREQUEST']._serialized_end=351 + _globals['_GETALLAPPSRESPONSE']._serialized_start=353 + _globals['_GETALLAPPSRESPONSE']._serialized_end=479 + _globals['_DELETEAPPREQUEST']._serialized_start=481 + _globals['_DELETEAPPREQUEST']._serialized_end=517 + _globals['_DELETEAPPRESPONSE']._serialized_start=519 + _globals['_DELETEAPPRESPONSE']._serialized_end=538 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/app_queries_pb2.pyi b/truffle/os/app_queries_pb2.pyi new file mode 100644 index 0000000..d18e1f9 --- /dev/null +++ b/truffle/os/app_queries_pb2.pyi @@ -0,0 +1,55 @@ +from truffle.app import foreground_pb2 as _foreground_pb2 +from truffle.app import background_pb2 as _background_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class GetForegroundAppsRequest(_message.Message): + __slots__ = ("uuids",) + UUIDS_FIELD_NUMBER: _ClassVar[int] + uuids: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, uuids: _Optional[_Iterable[str]] = ...) -> None: ... + +class GetForegroundAppsResponse(_message.Message): + __slots__ = ("apps",) + APPS_FIELD_NUMBER: _ClassVar[int] + apps: _containers.RepeatedCompositeFieldContainer[_foreground_pb2.ForegroundApp] + def __init__(self, apps: _Optional[_Iterable[_Union[_foreground_pb2.ForegroundApp, _Mapping]]] = ...) -> None: ... + +class GetBackgroundAppsRequest(_message.Message): + __slots__ = ("uuids",) + UUIDS_FIELD_NUMBER: _ClassVar[int] + uuids: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, uuids: _Optional[_Iterable[str]] = ...) -> None: ... + +class GetBackgroundAppsResponse(_message.Message): + __slots__ = ("apps",) + APPS_FIELD_NUMBER: _ClassVar[int] + apps: _containers.RepeatedCompositeFieldContainer[_background_pb2.BackgroundApp] + def __init__(self, apps: _Optional[_Iterable[_Union[_background_pb2.BackgroundApp, _Mapping]]] = ...) -> None: ... + +class GetAllAppsRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class GetAllAppsResponse(_message.Message): + __slots__ = ("foreground_apps", "background_apps") + FOREGROUND_APPS_FIELD_NUMBER: _ClassVar[int] + BACKGROUND_APPS_FIELD_NUMBER: _ClassVar[int] + foreground_apps: _containers.RepeatedCompositeFieldContainer[_foreground_pb2.ForegroundApp] + background_apps: _containers.RepeatedCompositeFieldContainer[_background_pb2.BackgroundApp] + def __init__(self, foreground_apps: _Optional[_Iterable[_Union[_foreground_pb2.ForegroundApp, _Mapping]]] = ..., background_apps: _Optional[_Iterable[_Union[_background_pb2.BackgroundApp, _Mapping]]] = ...) -> None: ... + +class DeleteAppRequest(_message.Message): + __slots__ = ("app_uuid",) + APP_UUID_FIELD_NUMBER: _ClassVar[int] + app_uuid: str + def __init__(self, app_uuid: _Optional[str] = ...) -> None: ... + +class DeleteAppResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... diff --git a/truffle/os/app_queries_pb2_grpc.py b/truffle/os/app_queries_pb2_grpc.py new file mode 100644 index 0000000..18983d9 --- /dev/null +++ b/truffle/os/app_queries_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/app_queries_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/background_feed_queries_pb2.py b/truffle/os/background_feed_queries_pb2.py new file mode 100644 index 0000000..a3d91d3 --- /dev/null +++ b/truffle/os/background_feed_queries_pb2.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/background_feed_queries.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/background_feed_queries.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.app import background_pb2 as truffle_dot_app_dot_background__pb2 +from truffle.app import background_feed_pb2 as truffle_dot_app_dot_background__feed__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(truffle/os/background_feed_queries.proto\x12\ntruffle.os\x1a\x1ctruffle/app/background.proto\x1a!truffle/app/background_feed.proto\"Z\n\x18GetBackgroundFeedRequest\x12\x17\n\x0ftarget_entry_id\x18\x01 \x01(\x04\x12\x12\n\nmax_before\x18\x02 \x01(\x05\x12\x11\n\tmax_after\x18\x03 \x01(\x05\"D\n\x19GetBackgroundFeedResponse\x12\'\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x16.truffle.app.FeedEntry\"J\n\x1eLikeBackgroundFeedEntryRequest\x12\x15\n\rfeed_entry_id\x18\x01 \x01(\x04\x12\x11\n\tincrement\x18\x02 \x01(\x05\"9\n\x1fLikeBackgroundFeedEntryResponse\x12\x16\n\x0enew_like_count\x18\x01 \x01(\x05\"\x1d\n\x1bGetLatestFeedEntryIDRequest\"<\n\x1cGetLatestFeedEntryIDResponse\x12\x1c\n\x14latest_feed_entry_id\x18\x01 \x01(\x04\"R\n\x1d\x42\x61\x63kgroundFeedFeedbackRequest\x12\x1f\n\x17\x61ssociated_feed_entries\x18\x01 \x03(\x04\x12\x10\n\x08\x66\x65\x65\x64\x62\x61\x63k\x18\x02 \x01(\t\"7\n\x1e\x42\x61\x63kgroundFeedFeedbackResponse\x12\x15\n\rfeedback_uuid\x18\x01 \x01(\tb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.background_feed_queries_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_GETBACKGROUNDFEEDREQUEST']._serialized_start=121 + _globals['_GETBACKGROUNDFEEDREQUEST']._serialized_end=211 + _globals['_GETBACKGROUNDFEEDRESPONSE']._serialized_start=213 + _globals['_GETBACKGROUNDFEEDRESPONSE']._serialized_end=281 + _globals['_LIKEBACKGROUNDFEEDENTRYREQUEST']._serialized_start=283 + _globals['_LIKEBACKGROUNDFEEDENTRYREQUEST']._serialized_end=357 + _globals['_LIKEBACKGROUNDFEEDENTRYRESPONSE']._serialized_start=359 + _globals['_LIKEBACKGROUNDFEEDENTRYRESPONSE']._serialized_end=416 + _globals['_GETLATESTFEEDENTRYIDREQUEST']._serialized_start=418 + _globals['_GETLATESTFEEDENTRYIDREQUEST']._serialized_end=447 + _globals['_GETLATESTFEEDENTRYIDRESPONSE']._serialized_start=449 + _globals['_GETLATESTFEEDENTRYIDRESPONSE']._serialized_end=509 + _globals['_BACKGROUNDFEEDFEEDBACKREQUEST']._serialized_start=511 + _globals['_BACKGROUNDFEEDFEEDBACKREQUEST']._serialized_end=593 + _globals['_BACKGROUNDFEEDFEEDBACKRESPONSE']._serialized_start=595 + _globals['_BACKGROUNDFEEDFEEDBACKRESPONSE']._serialized_end=650 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/background_feed_queries_pb2.pyi b/truffle/os/background_feed_queries_pb2.pyi new file mode 100644 index 0000000..9ee2d57 --- /dev/null +++ b/truffle/os/background_feed_queries_pb2.pyi @@ -0,0 +1,63 @@ +from truffle.app import background_pb2 as _background_pb2 +from truffle.app import background_feed_pb2 as _background_feed_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class GetBackgroundFeedRequest(_message.Message): + __slots__ = ("target_entry_id", "max_before", "max_after") + TARGET_ENTRY_ID_FIELD_NUMBER: _ClassVar[int] + MAX_BEFORE_FIELD_NUMBER: _ClassVar[int] + MAX_AFTER_FIELD_NUMBER: _ClassVar[int] + target_entry_id: int + max_before: int + max_after: int + def __init__(self, target_entry_id: _Optional[int] = ..., max_before: _Optional[int] = ..., max_after: _Optional[int] = ...) -> None: ... + +class GetBackgroundFeedResponse(_message.Message): + __slots__ = ("entries",) + ENTRIES_FIELD_NUMBER: _ClassVar[int] + entries: _containers.RepeatedCompositeFieldContainer[_background_feed_pb2.FeedEntry] + def __init__(self, entries: _Optional[_Iterable[_Union[_background_feed_pb2.FeedEntry, _Mapping]]] = ...) -> None: ... + +class LikeBackgroundFeedEntryRequest(_message.Message): + __slots__ = ("feed_entry_id", "increment") + FEED_ENTRY_ID_FIELD_NUMBER: _ClassVar[int] + INCREMENT_FIELD_NUMBER: _ClassVar[int] + feed_entry_id: int + increment: int + def __init__(self, feed_entry_id: _Optional[int] = ..., increment: _Optional[int] = ...) -> None: ... + +class LikeBackgroundFeedEntryResponse(_message.Message): + __slots__ = ("new_like_count",) + NEW_LIKE_COUNT_FIELD_NUMBER: _ClassVar[int] + new_like_count: int + def __init__(self, new_like_count: _Optional[int] = ...) -> None: ... + +class GetLatestFeedEntryIDRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class GetLatestFeedEntryIDResponse(_message.Message): + __slots__ = ("latest_feed_entry_id",) + LATEST_FEED_ENTRY_ID_FIELD_NUMBER: _ClassVar[int] + latest_feed_entry_id: int + def __init__(self, latest_feed_entry_id: _Optional[int] = ...) -> None: ... + +class BackgroundFeedFeedbackRequest(_message.Message): + __slots__ = ("associated_feed_entries", "feedback") + ASSOCIATED_FEED_ENTRIES_FIELD_NUMBER: _ClassVar[int] + FEEDBACK_FIELD_NUMBER: _ClassVar[int] + associated_feed_entries: _containers.RepeatedScalarFieldContainer[int] + feedback: str + def __init__(self, associated_feed_entries: _Optional[_Iterable[int]] = ..., feedback: _Optional[str] = ...) -> None: ... + +class BackgroundFeedFeedbackResponse(_message.Message): + __slots__ = ("feedback_uuid",) + FEEDBACK_UUID_FIELD_NUMBER: _ClassVar[int] + feedback_uuid: str + def __init__(self, feedback_uuid: _Optional[str] = ...) -> None: ... diff --git a/truffle/os/background_feed_queries_pb2_grpc.py b/truffle/os/background_feed_queries_pb2_grpc.py new file mode 100644 index 0000000..d152381 --- /dev/null +++ b/truffle/os/background_feed_queries_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/background_feed_queries_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/builder_pb2.py b/truffle/os/builder_pb2.py new file mode 100644 index 0000000..866f33f --- /dev/null +++ b/truffle/os/builder_pb2.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/builder.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/builder.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.app import app_type_pb2 as truffle_dot_app_dot_app__type__pb2 +from truffle.app import background_pb2 as truffle_dot_app_dot_background__pb2 +from truffle.app import foreground_pb2 as truffle_dot_app_dot_foreground__pb2 +from truffle.app import app_build_pb2 as truffle_dot_app_dot_app__build__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18truffle/os/builder.proto\x12\ntruffle.os\x1a\x1atruffle/app/app_type.proto\x1a\x1ctruffle/app/background.proto\x1a\x1ctruffle/app/foreground.proto\x1a\x1btruffle/app/app_build.proto\"f\n\x18StartBuildSessionRequest\x12\x15\n\x08\x61pp_uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12&\n\x08\x61pp_type\x18\x02 \x01(\x0e\x32\x14.truffle.app.AppTypeB\x0b\n\t_app_uuid\"B\n\x19StartBuildSessionResponse\x12\x13\n\x0b\x61\x63\x63\x65ss_path\x18\x01 \x01(\t\x12\x10\n\x08\x61pp_uuid\x18\x02 \x01(\t\"\xef\x01\n\x19\x46inishBuildSessionRequest\x12\x10\n\x08\x61pp_uuid\x18\x01 \x01(\t\x12\x0f\n\x07\x64iscard\x18\x02 \x01(\x08\x12\x39\n\nforeground\x18\x03 \x01(\x0b\x32#.truffle.app.ForegroundAppBuildInfoH\x00\x12\x39\n\nbackground\x18\x04 \x01(\x0b\x32#.truffle.app.BackgroundAppBuildInfoH\x00\x12+\n\x07process\x18\x05 \x01(\x0b\x32\x1a.truffle.app.ProcessConfigB\x0c\n\nbuild_info\"D\n\x11\x42uildSessionError\x12\r\n\x05\x65rror\x18\x01 \x01(\t\x12\x14\n\x07\x64\x65tails\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_details\"Y\n\x1a\x46inishBuildSessionResponse\x12\x31\n\x05\x65rror\x18\x01 \x01(\x0b\x32\x1d.truffle.os.BuildSessionErrorH\x00\x88\x01\x01\x42\x08\n\x06_errorb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.builder_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_STARTBUILDSESSIONREQUEST']._serialized_start=157 + _globals['_STARTBUILDSESSIONREQUEST']._serialized_end=259 + _globals['_STARTBUILDSESSIONRESPONSE']._serialized_start=261 + _globals['_STARTBUILDSESSIONRESPONSE']._serialized_end=327 + _globals['_FINISHBUILDSESSIONREQUEST']._serialized_start=330 + _globals['_FINISHBUILDSESSIONREQUEST']._serialized_end=569 + _globals['_BUILDSESSIONERROR']._serialized_start=571 + _globals['_BUILDSESSIONERROR']._serialized_end=639 + _globals['_FINISHBUILDSESSIONRESPONSE']._serialized_start=641 + _globals['_FINISHBUILDSESSIONRESPONSE']._serialized_end=730 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/builder_pb2.pyi b/truffle/os/builder_pb2.pyi new file mode 100644 index 0000000..f36a285 --- /dev/null +++ b/truffle/os/builder_pb2.pyi @@ -0,0 +1,54 @@ +from truffle.app import app_type_pb2 as _app_type_pb2 +from truffle.app import background_pb2 as _background_pb2 +from truffle.app import foreground_pb2 as _foreground_pb2 +from truffle.app import app_build_pb2 as _app_build_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class StartBuildSessionRequest(_message.Message): + __slots__ = ("app_uuid", "app_type") + APP_UUID_FIELD_NUMBER: _ClassVar[int] + APP_TYPE_FIELD_NUMBER: _ClassVar[int] + app_uuid: str + app_type: _app_type_pb2.AppType + def __init__(self, app_uuid: _Optional[str] = ..., app_type: _Optional[_Union[_app_type_pb2.AppType, str]] = ...) -> None: ... + +class StartBuildSessionResponse(_message.Message): + __slots__ = ("access_path", "app_uuid") + ACCESS_PATH_FIELD_NUMBER: _ClassVar[int] + APP_UUID_FIELD_NUMBER: _ClassVar[int] + access_path: str + app_uuid: str + def __init__(self, access_path: _Optional[str] = ..., app_uuid: _Optional[str] = ...) -> None: ... + +class FinishBuildSessionRequest(_message.Message): + __slots__ = ("app_uuid", "discard", "foreground", "background", "process") + APP_UUID_FIELD_NUMBER: _ClassVar[int] + DISCARD_FIELD_NUMBER: _ClassVar[int] + FOREGROUND_FIELD_NUMBER: _ClassVar[int] + BACKGROUND_FIELD_NUMBER: _ClassVar[int] + PROCESS_FIELD_NUMBER: _ClassVar[int] + app_uuid: str + discard: bool + foreground: _foreground_pb2.ForegroundAppBuildInfo + background: _background_pb2.BackgroundAppBuildInfo + process: _app_build_pb2.ProcessConfig + def __init__(self, app_uuid: _Optional[str] = ..., discard: bool = ..., foreground: _Optional[_Union[_foreground_pb2.ForegroundAppBuildInfo, _Mapping]] = ..., background: _Optional[_Union[_background_pb2.BackgroundAppBuildInfo, _Mapping]] = ..., process: _Optional[_Union[_app_build_pb2.ProcessConfig, _Mapping]] = ...) -> None: ... + +class BuildSessionError(_message.Message): + __slots__ = ("error", "details") + ERROR_FIELD_NUMBER: _ClassVar[int] + DETAILS_FIELD_NUMBER: _ClassVar[int] + error: str + details: str + def __init__(self, error: _Optional[str] = ..., details: _Optional[str] = ...) -> None: ... + +class FinishBuildSessionResponse(_message.Message): + __slots__ = ("error",) + ERROR_FIELD_NUMBER: _ClassVar[int] + error: BuildSessionError + def __init__(self, error: _Optional[_Union[BuildSessionError, _Mapping]] = ...) -> None: ... diff --git a/truffle/os/builder_pb2_grpc.py b/truffle/os/builder_pb2_grpc.py new file mode 100644 index 0000000..d5be29b --- /dev/null +++ b/truffle/os/builder_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/builder_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/classification_pb2.py b/truffle/os/classification_pb2.py new file mode 100644 index 0000000..0489117 --- /dev/null +++ b/truffle/os/classification_pb2.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/classification.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/classification.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1ftruffle/os/classification.proto\x12\ntruffle.os\"K\n\x0f\x43lassifyRequest\x12\x0e\n\x06prompt\x18\x01 \x01(\t\x12\x18\n\x0bmax_results\x18\x02 \x01(\x05H\x00\x88\x01\x01\x42\x0e\n\x0c_max_results\"\x81\x01\n\x10\x43lassifyResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.truffle.os.ClassifyResponse.ClassifyResult\x1a/\n\x0e\x43lassifyResult\x12\x0e\n\x06\x61pp_id\x18\x01 \x01(\t\x12\r\n\x05score\x18\x02 \x01(\x02\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.classification_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_CLASSIFYREQUEST']._serialized_start=47 + _globals['_CLASSIFYREQUEST']._serialized_end=122 + _globals['_CLASSIFYRESPONSE']._serialized_start=125 + _globals['_CLASSIFYRESPONSE']._serialized_end=254 + _globals['_CLASSIFYRESPONSE_CLASSIFYRESULT']._serialized_start=207 + _globals['_CLASSIFYRESPONSE_CLASSIFYRESULT']._serialized_end=254 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/classification_pb2.pyi b/truffle/os/classification_pb2.pyi new file mode 100644 index 0000000..4bca042 --- /dev/null +++ b/truffle/os/classification_pb2.pyi @@ -0,0 +1,28 @@ +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class ClassifyRequest(_message.Message): + __slots__ = ("prompt", "max_results") + PROMPT_FIELD_NUMBER: _ClassVar[int] + MAX_RESULTS_FIELD_NUMBER: _ClassVar[int] + prompt: str + max_results: int + def __init__(self, prompt: _Optional[str] = ..., max_results: _Optional[int] = ...) -> None: ... + +class ClassifyResponse(_message.Message): + __slots__ = ("results",) + class ClassifyResult(_message.Message): + __slots__ = ("app_id", "score") + APP_ID_FIELD_NUMBER: _ClassVar[int] + SCORE_FIELD_NUMBER: _ClassVar[int] + app_id: str + score: float + def __init__(self, app_id: _Optional[str] = ..., score: _Optional[float] = ...) -> None: ... + RESULTS_FIELD_NUMBER: _ClassVar[int] + results: _containers.RepeatedCompositeFieldContainer[ClassifyResponse.ClassifyResult] + def __init__(self, results: _Optional[_Iterable[_Union[ClassifyResponse.ClassifyResult, _Mapping]]] = ...) -> None: ... diff --git a/truffle/os/classification_pb2_grpc.py b/truffle/os/classification_pb2_grpc.py new file mode 100644 index 0000000..62c9799 --- /dev/null +++ b/truffle/os/classification_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/classification_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/client_metadata_pb2.py b/truffle/os/client_metadata_pb2.py new file mode 100644 index 0000000..9ba5066 --- /dev/null +++ b/truffle/os/client_metadata_pb2.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/client_metadata.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/client_metadata.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n truffle/os/client_metadata.proto\x12\ntruffle.os\"d\n\x0e\x43lientMetadata\x12\x10\n\x08platform\x18\x01 \x01(\t\x12\x14\n\x07version\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x64\x65vice\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\n\n\x08_versionB\t\n\x07_deviceb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.client_metadata_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_CLIENTMETADATA']._serialized_start=48 + _globals['_CLIENTMETADATA']._serialized_end=148 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/client_metadata_pb2.pyi b/truffle/os/client_metadata_pb2.pyi new file mode 100644 index 0000000..36b1489 --- /dev/null +++ b/truffle/os/client_metadata_pb2.pyi @@ -0,0 +1,15 @@ +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Optional as _Optional + +DESCRIPTOR: _descriptor.FileDescriptor + +class ClientMetadata(_message.Message): + __slots__ = ("platform", "version", "device") + PLATFORM_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + DEVICE_FIELD_NUMBER: _ClassVar[int] + platform: str + version: str + device: str + def __init__(self, platform: _Optional[str] = ..., version: _Optional[str] = ..., device: _Optional[str] = ...) -> None: ... diff --git a/truffle/os/client_metadata_pb2_grpc.py b/truffle/os/client_metadata_pb2_grpc.py new file mode 100644 index 0000000..66437f4 --- /dev/null +++ b/truffle/os/client_metadata_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/client_metadata_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/client_session_pb2.py b/truffle/os/client_session_pb2.py new file mode 100644 index 0000000..0eaf851 --- /dev/null +++ b/truffle/os/client_session_pb2.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/client_session.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/client_session.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.os import client_metadata_pb2 as truffle_dot_os_dot_client__metadata__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1ftruffle/os/client_session.proto\x12\ntruffle.os\x1a truffle/os/client_metadata.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\"\n\x11UserRecoveryCodes\x12\r\n\x05\x63odes\x18\x01 \x03(\t\"\x88\x01\n\x19RegisterNewSessionRequest\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12,\n\x08metadata\x18\x02 \x01(\x0b\x32\x1a.truffle.os.ClientMetadata\x12\x1a\n\rrecovery_code\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x10\n\x0e_recovery_code\"\x99\x01\n\x1aRegisterNewSessionResponse\x12\r\n\x05token\x18\x01 \x01(\t\x12\x31\n\x08verifier\x18\x02 \x01(\x0b\x32\x1a.truffle.os.ClientMetadataH\x00\x88\x01\x01\x12,\n\x06status\x18\x03 \x01(\x0b\x32\x1c.truffle.os.NewSessionStatusB\x0b\n\t_verifier\"\x9b\x01\n\x16NewSessionVerification\x12\x1a\n\x12verification_token\x18\x01 \x01(\t\x12.\n\nexpires_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x35\n\x11requesting_client\x18\x03 \x01(\x0b\x32\x1a.truffle.os.ClientMetadata\"D\n\x17VerifyNewSessionRequest\x12\x1a\n\x12verification_token\x18\x01 \x01(\t\x12\r\n\x05\x61llow\x18\x02 \x01(\x08\"\xfc\x01\n\x10NewSessionStatus\x12@\n\x05\x65rror\x18\x01 \x01(\x0e\x32,.truffle.os.NewSessionStatus.NewSessionErrorH\x00\x88\x01\x01\"\x9b\x01\n\x0fNewSessionError\x12\x17\n\x13NEW_SESSION_SUCCESS\x10\x00\x12\x17\n\x13NEW_SESSION_TIMEOUT\x10\x01\x12\x18\n\x14NEW_SESSION_REJECTED\x10\x02\x12\x1f\n\x1bNEW_SESSION_TOKEN_NOT_FOUND\x10\x03\x12\x1b\n\x17NEW_SESSION_NO_REQUESTS\x10\x04\x42\x08\n\x06_errorb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.client_session_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_USERRECOVERYCODES']._serialized_start=114 + _globals['_USERRECOVERYCODES']._serialized_end=148 + _globals['_REGISTERNEWSESSIONREQUEST']._serialized_start=151 + _globals['_REGISTERNEWSESSIONREQUEST']._serialized_end=287 + _globals['_REGISTERNEWSESSIONRESPONSE']._serialized_start=290 + _globals['_REGISTERNEWSESSIONRESPONSE']._serialized_end=443 + _globals['_NEWSESSIONVERIFICATION']._serialized_start=446 + _globals['_NEWSESSIONVERIFICATION']._serialized_end=601 + _globals['_VERIFYNEWSESSIONREQUEST']._serialized_start=603 + _globals['_VERIFYNEWSESSIONREQUEST']._serialized_end=671 + _globals['_NEWSESSIONSTATUS']._serialized_start=674 + _globals['_NEWSESSIONSTATUS']._serialized_end=926 + _globals['_NEWSESSIONSTATUS_NEWSESSIONERROR']._serialized_start=761 + _globals['_NEWSESSIONSTATUS_NEWSESSIONERROR']._serialized_end=916 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/client_session_pb2.pyi b/truffle/os/client_session_pb2.pyi new file mode 100644 index 0000000..a1a2178 --- /dev/null +++ b/truffle/os/client_session_pb2.pyi @@ -0,0 +1,72 @@ +from truffle.os import client_metadata_pb2 as _client_metadata_pb2 +from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class UserRecoveryCodes(_message.Message): + __slots__ = ("codes",) + CODES_FIELD_NUMBER: _ClassVar[int] + codes: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, codes: _Optional[_Iterable[str]] = ...) -> None: ... + +class RegisterNewSessionRequest(_message.Message): + __slots__ = ("user_id", "metadata", "recovery_code") + USER_ID_FIELD_NUMBER: _ClassVar[int] + METADATA_FIELD_NUMBER: _ClassVar[int] + RECOVERY_CODE_FIELD_NUMBER: _ClassVar[int] + user_id: str + metadata: _client_metadata_pb2.ClientMetadata + recovery_code: str + def __init__(self, user_id: _Optional[str] = ..., metadata: _Optional[_Union[_client_metadata_pb2.ClientMetadata, _Mapping]] = ..., recovery_code: _Optional[str] = ...) -> None: ... + +class RegisterNewSessionResponse(_message.Message): + __slots__ = ("token", "verifier", "status") + TOKEN_FIELD_NUMBER: _ClassVar[int] + VERIFIER_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + token: str + verifier: _client_metadata_pb2.ClientMetadata + status: NewSessionStatus + def __init__(self, token: _Optional[str] = ..., verifier: _Optional[_Union[_client_metadata_pb2.ClientMetadata, _Mapping]] = ..., status: _Optional[_Union[NewSessionStatus, _Mapping]] = ...) -> None: ... + +class NewSessionVerification(_message.Message): + __slots__ = ("verification_token", "expires_at", "requesting_client") + VERIFICATION_TOKEN_FIELD_NUMBER: _ClassVar[int] + EXPIRES_AT_FIELD_NUMBER: _ClassVar[int] + REQUESTING_CLIENT_FIELD_NUMBER: _ClassVar[int] + verification_token: str + expires_at: _timestamp_pb2.Timestamp + requesting_client: _client_metadata_pb2.ClientMetadata + def __init__(self, verification_token: _Optional[str] = ..., expires_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., requesting_client: _Optional[_Union[_client_metadata_pb2.ClientMetadata, _Mapping]] = ...) -> None: ... + +class VerifyNewSessionRequest(_message.Message): + __slots__ = ("verification_token", "allow") + VERIFICATION_TOKEN_FIELD_NUMBER: _ClassVar[int] + ALLOW_FIELD_NUMBER: _ClassVar[int] + verification_token: str + allow: bool + def __init__(self, verification_token: _Optional[str] = ..., allow: bool = ...) -> None: ... + +class NewSessionStatus(_message.Message): + __slots__ = ("error",) + class NewSessionError(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + NEW_SESSION_SUCCESS: _ClassVar[NewSessionStatus.NewSessionError] + NEW_SESSION_TIMEOUT: _ClassVar[NewSessionStatus.NewSessionError] + NEW_SESSION_REJECTED: _ClassVar[NewSessionStatus.NewSessionError] + NEW_SESSION_TOKEN_NOT_FOUND: _ClassVar[NewSessionStatus.NewSessionError] + NEW_SESSION_NO_REQUESTS: _ClassVar[NewSessionStatus.NewSessionError] + NEW_SESSION_SUCCESS: NewSessionStatus.NewSessionError + NEW_SESSION_TIMEOUT: NewSessionStatus.NewSessionError + NEW_SESSION_REJECTED: NewSessionStatus.NewSessionError + NEW_SESSION_TOKEN_NOT_FOUND: NewSessionStatus.NewSessionError + NEW_SESSION_NO_REQUESTS: NewSessionStatus.NewSessionError + ERROR_FIELD_NUMBER: _ClassVar[int] + error: NewSessionStatus.NewSessionError + def __init__(self, error: _Optional[_Union[NewSessionStatus.NewSessionError, str]] = ...) -> None: ... diff --git a/truffle/os/client_session_pb2_grpc.py b/truffle/os/client_session_pb2_grpc.py new file mode 100644 index 0000000..d244186 --- /dev/null +++ b/truffle/os/client_session_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/client_session_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/client_state_pb2.py b/truffle/os/client_state_pb2.py new file mode 100644 index 0000000..f1fe300 --- /dev/null +++ b/truffle/os/client_state_pb2.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/client_state.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/client_state.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dtruffle/os/client_state.proto\x12\ntruffle.os\"\x1b\n\x0b\x43lientState\x12\x0c\n\x04\x62lob\x18\x01 \x01(\t\"O\n\x18UpdateClientStateRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05state\x18\x02 \x01(\x0b\x32\x17.truffle.os.ClientState\"\x1b\n\x19UpdateClientStateResponse\"$\n\x15GetClientStateRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"@\n\x16GetClientStateResponse\x12&\n\x05state\x18\x01 \x01(\x0b\x32\x17.truffle.os.ClientState\"\x1b\n\x19GetAllClientStatesRequest\"\xa8\x01\n\x1aGetAllClientStatesResponse\x12\x42\n\x06states\x18\x01 \x03(\x0b\x32\x32.truffle.os.GetAllClientStatesResponse.StatesEntry\x1a\x46\n\x0bStatesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.truffle.os.ClientState:\x02\x38\x01\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.client_state_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_GETALLCLIENTSTATESRESPONSE_STATESENTRY']._loaded_options = None + _globals['_GETALLCLIENTSTATESRESPONSE_STATESENTRY']._serialized_options = b'8\001' + _globals['_CLIENTSTATE']._serialized_start=45 + _globals['_CLIENTSTATE']._serialized_end=72 + _globals['_UPDATECLIENTSTATEREQUEST']._serialized_start=74 + _globals['_UPDATECLIENTSTATEREQUEST']._serialized_end=153 + _globals['_UPDATECLIENTSTATERESPONSE']._serialized_start=155 + _globals['_UPDATECLIENTSTATERESPONSE']._serialized_end=182 + _globals['_GETCLIENTSTATEREQUEST']._serialized_start=184 + _globals['_GETCLIENTSTATEREQUEST']._serialized_end=220 + _globals['_GETCLIENTSTATERESPONSE']._serialized_start=222 + _globals['_GETCLIENTSTATERESPONSE']._serialized_end=286 + _globals['_GETALLCLIENTSTATESREQUEST']._serialized_start=288 + _globals['_GETALLCLIENTSTATESREQUEST']._serialized_end=315 + _globals['_GETALLCLIENTSTATESRESPONSE']._serialized_start=318 + _globals['_GETALLCLIENTSTATESRESPONSE']._serialized_end=486 + _globals['_GETALLCLIENTSTATESRESPONSE_STATESENTRY']._serialized_start=416 + _globals['_GETALLCLIENTSTATESRESPONSE_STATESENTRY']._serialized_end=486 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/client_state_pb2.pyi b/truffle/os/client_state_pb2.pyi new file mode 100644 index 0000000..5c66f9b --- /dev/null +++ b/truffle/os/client_state_pb2.pyi @@ -0,0 +1,54 @@ +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class ClientState(_message.Message): + __slots__ = ("blob",) + BLOB_FIELD_NUMBER: _ClassVar[int] + blob: str + def __init__(self, blob: _Optional[str] = ...) -> None: ... + +class UpdateClientStateRequest(_message.Message): + __slots__ = ("key", "state") + KEY_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + key: str + state: ClientState + def __init__(self, key: _Optional[str] = ..., state: _Optional[_Union[ClientState, _Mapping]] = ...) -> None: ... + +class UpdateClientStateResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class GetClientStateRequest(_message.Message): + __slots__ = ("key",) + KEY_FIELD_NUMBER: _ClassVar[int] + key: str + def __init__(self, key: _Optional[str] = ...) -> None: ... + +class GetClientStateResponse(_message.Message): + __slots__ = ("state",) + STATE_FIELD_NUMBER: _ClassVar[int] + state: ClientState + def __init__(self, state: _Optional[_Union[ClientState, _Mapping]] = ...) -> None: ... + +class GetAllClientStatesRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class GetAllClientStatesResponse(_message.Message): + __slots__ = ("states",) + class StatesEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: ClientState + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[ClientState, _Mapping]] = ...) -> None: ... + STATES_FIELD_NUMBER: _ClassVar[int] + states: _containers.MessageMap[str, ClientState] + def __init__(self, states: _Optional[_Mapping[str, ClientState]] = ...) -> None: ... diff --git a/truffle/os/client_state_pb2_grpc.py b/truffle/os/client_state_pb2_grpc.py new file mode 100644 index 0000000..0fd1040 --- /dev/null +++ b/truffle/os/client_state_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/client_state_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/client_user_pb2.py b/truffle/os/client_user_pb2.py new file mode 100644 index 0000000..1ccf5e6 --- /dev/null +++ b/truffle/os/client_user_pb2.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/client_user.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/client_user.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.os import client_metadata_pb2 as truffle_dot_os_dot_client__metadata__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1ctruffle/os/client_user.proto\x12\ntruffle.os\x1a truffle/os/client_metadata.proto\"h\n\x16RegisterNewUserRequest\x12,\n\x08metadata\x18\x01 \x01(\x0b\x32\x1a.truffle.os.ClientMetadata\x12\x14\n\x07user_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_user_id\"9\n\x17RegisterNewUserResponse\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\r\n\x05token\x18\x02 \x01(\t\"&\n\x15UserIDForTokenRequest\x12\r\n\x05token\x18\x01 \x01(\t\")\n\x16UserIDForTokenResponse\x12\x0f\n\x07user_id\x18\x01 \x01(\tb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.client_user_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_REGISTERNEWUSERREQUEST']._serialized_start=78 + _globals['_REGISTERNEWUSERREQUEST']._serialized_end=182 + _globals['_REGISTERNEWUSERRESPONSE']._serialized_start=184 + _globals['_REGISTERNEWUSERRESPONSE']._serialized_end=241 + _globals['_USERIDFORTOKENREQUEST']._serialized_start=243 + _globals['_USERIDFORTOKENREQUEST']._serialized_end=281 + _globals['_USERIDFORTOKENRESPONSE']._serialized_start=283 + _globals['_USERIDFORTOKENRESPONSE']._serialized_end=324 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/client_user_pb2.pyi b/truffle/os/client_user_pb2.pyi new file mode 100644 index 0000000..b6add62 --- /dev/null +++ b/truffle/os/client_user_pb2.pyi @@ -0,0 +1,35 @@ +from truffle.os import client_metadata_pb2 as _client_metadata_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class RegisterNewUserRequest(_message.Message): + __slots__ = ("metadata", "user_id") + METADATA_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + metadata: _client_metadata_pb2.ClientMetadata + user_id: str + def __init__(self, metadata: _Optional[_Union[_client_metadata_pb2.ClientMetadata, _Mapping]] = ..., user_id: _Optional[str] = ...) -> None: ... + +class RegisterNewUserResponse(_message.Message): + __slots__ = ("user_id", "token") + USER_ID_FIELD_NUMBER: _ClassVar[int] + TOKEN_FIELD_NUMBER: _ClassVar[int] + user_id: str + token: str + def __init__(self, user_id: _Optional[str] = ..., token: _Optional[str] = ...) -> None: ... + +class UserIDForTokenRequest(_message.Message): + __slots__ = ("token",) + TOKEN_FIELD_NUMBER: _ClassVar[int] + token: str + def __init__(self, token: _Optional[str] = ...) -> None: ... + +class UserIDForTokenResponse(_message.Message): + __slots__ = ("user_id",) + USER_ID_FIELD_NUMBER: _ClassVar[int] + user_id: str + def __init__(self, user_id: _Optional[str] = ...) -> None: ... diff --git a/truffle/os/client_user_pb2_grpc.py b/truffle/os/client_user_pb2_grpc.py new file mode 100644 index 0000000..0a6955b --- /dev/null +++ b/truffle/os/client_user_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/client_user_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/hardware_control_pb2.py b/truffle/os/hardware_control_pb2.py new file mode 100644 index 0000000..9f28a54 --- /dev/null +++ b/truffle/os/hardware_control_pb2.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/hardware_control.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/hardware_control.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!truffle/os/hardware_control.proto\x12\ntruffle.os\"\xe7\x01\n\x1bHardwarePowerControlRequest\x12R\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x42.truffle.os.HardwarePowerControlRequest.HardwarePowerControlAction\"t\n\x1aHardwarePowerControlAction\x12\x1e\n\x1a\x43ONTROL_ACTION_UNSPECIFIED\x10\x00\x12\x19\n\x15\x43ONTROL_ACTION_REBOOT\x10\x01\x12\x1b\n\x17\x43ONTROL_ACTION_SHUTDOWN\x10\x02\"\x1e\n\x1cHardwarePowerControlResponseb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.hardware_control_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_HARDWAREPOWERCONTROLREQUEST']._serialized_start=50 + _globals['_HARDWAREPOWERCONTROLREQUEST']._serialized_end=281 + _globals['_HARDWAREPOWERCONTROLREQUEST_HARDWAREPOWERCONTROLACTION']._serialized_start=165 + _globals['_HARDWAREPOWERCONTROLREQUEST_HARDWAREPOWERCONTROLACTION']._serialized_end=281 + _globals['_HARDWAREPOWERCONTROLRESPONSE']._serialized_start=283 + _globals['_HARDWAREPOWERCONTROLRESPONSE']._serialized_end=313 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/hardware_control_pb2.pyi b/truffle/os/hardware_control_pb2.pyi new file mode 100644 index 0000000..99af986 --- /dev/null +++ b/truffle/os/hardware_control_pb2.pyi @@ -0,0 +1,24 @@ +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class HardwarePowerControlRequest(_message.Message): + __slots__ = ("action",) + class HardwarePowerControlAction(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + CONTROL_ACTION_UNSPECIFIED: _ClassVar[HardwarePowerControlRequest.HardwarePowerControlAction] + CONTROL_ACTION_REBOOT: _ClassVar[HardwarePowerControlRequest.HardwarePowerControlAction] + CONTROL_ACTION_SHUTDOWN: _ClassVar[HardwarePowerControlRequest.HardwarePowerControlAction] + CONTROL_ACTION_UNSPECIFIED: HardwarePowerControlRequest.HardwarePowerControlAction + CONTROL_ACTION_REBOOT: HardwarePowerControlRequest.HardwarePowerControlAction + CONTROL_ACTION_SHUTDOWN: HardwarePowerControlRequest.HardwarePowerControlAction + ACTION_FIELD_NUMBER: _ClassVar[int] + action: HardwarePowerControlRequest.HardwarePowerControlAction + def __init__(self, action: _Optional[_Union[HardwarePowerControlRequest.HardwarePowerControlAction, str]] = ...) -> None: ... + +class HardwarePowerControlResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... diff --git a/truffle/os/hardware_control_pb2_grpc.py b/truffle/os/hardware_control_pb2_grpc.py new file mode 100644 index 0000000..e98792b --- /dev/null +++ b/truffle/os/hardware_control_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/hardware_control_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/hardware_info_pb2.py b/truffle/os/hardware_info_pb2.py new file mode 100644 index 0000000..bcf246c --- /dev/null +++ b/truffle/os/hardware_info_pb2.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/hardware_info.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/hardware_info.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.os import hardware_network_pb2 as truffle_dot_os_dot_hardware__network__pb2 +from truffle.common import led_states_pb2 as truffle_dot_common_dot_led__states__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1etruffle/os/hardware_info.proto\x12\ntruffle.os\x1a!truffle/os/hardware_network.proto\x1a\x1ftruffle/common/led_states.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xa8\x02\n\x0cHardwareInfo\x12\x10\n\x08hostname\x18\x01 \x01(\t\x12\x12\n\nip_address\x18\x02 \x01(\t\x12\x13\n\x0bmac_address\x18\x03 \x01(\t\x12\x39\n\x0enetwork_status\x18\x04 \x01(\x0e\x32!.truffle.os.HardwareNetworkStatus\x12\x42\n\x14\x63urrent_wifi_network\x18\x05 \x01(\x0b\x32\x1f.truffle.os.HardwareWifiNetworkH\x00\x88\x01\x01\x12\x15\n\rserial_number\x18\n \x01(\t\x12.\n\nstart_time\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x17\n\x15_current_wifi_networkb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.hardware_info_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_HARDWAREINFO']._serialized_start=148 + _globals['_HARDWAREINFO']._serialized_end=444 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/hardware_info_pb2.pyi b/truffle/os/hardware_info_pb2.pyi new file mode 100644 index 0000000..5042bff --- /dev/null +++ b/truffle/os/hardware_info_pb2.pyi @@ -0,0 +1,27 @@ +from truffle.os import hardware_network_pb2 as _hardware_network_pb2 +from truffle.common import led_states_pb2 as _led_states_pb2 +from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class HardwareInfo(_message.Message): + __slots__ = ("hostname", "ip_address", "mac_address", "network_status", "current_wifi_network", "serial_number", "start_time") + HOSTNAME_FIELD_NUMBER: _ClassVar[int] + IP_ADDRESS_FIELD_NUMBER: _ClassVar[int] + MAC_ADDRESS_FIELD_NUMBER: _ClassVar[int] + NETWORK_STATUS_FIELD_NUMBER: _ClassVar[int] + CURRENT_WIFI_NETWORK_FIELD_NUMBER: _ClassVar[int] + SERIAL_NUMBER_FIELD_NUMBER: _ClassVar[int] + START_TIME_FIELD_NUMBER: _ClassVar[int] + hostname: str + ip_address: str + mac_address: str + network_status: _hardware_network_pb2.HardwareNetworkStatus + current_wifi_network: _hardware_network_pb2.HardwareWifiNetwork + serial_number: str + start_time: _timestamp_pb2.Timestamp + def __init__(self, hostname: _Optional[str] = ..., ip_address: _Optional[str] = ..., mac_address: _Optional[str] = ..., network_status: _Optional[_Union[_hardware_network_pb2.HardwareNetworkStatus, str]] = ..., current_wifi_network: _Optional[_Union[_hardware_network_pb2.HardwareWifiNetwork, _Mapping]] = ..., serial_number: _Optional[str] = ..., start_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... diff --git a/truffle/os/hardware_info_pb2_grpc.py b/truffle/os/hardware_info_pb2_grpc.py new file mode 100644 index 0000000..2b1cec8 --- /dev/null +++ b/truffle/os/hardware_info_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/hardware_info_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/hardware_network_pb2.py b/truffle/os/hardware_network_pb2.py new file mode 100644 index 0000000..b961935 --- /dev/null +++ b/truffle/os/hardware_network_pb2.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/hardware_network.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/hardware_network.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!truffle/os/hardware_network.proto\x12\ntruffle.os\"1\n\x13HardwareWifiNetwork\x12\x0c\n\x04ssid\x18\x01 \x01(\t\x12\x0c\n\x04rssi\x18\x02 \x01(\x02*g\n\x15HardwareNetworkStatus\x12\x0f\n\x0bNET_DEFAULT\x10\x00\x12\x15\n\x11NET_NOT_CONNECTED\x10\x01\x12\x13\n\x0fNET_NO_INTERNET\x10\x02\x12\x11\n\rNET_CONNECTED\x10\x03\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.hardware_network_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_HARDWARENETWORKSTATUS']._serialized_start=100 + _globals['_HARDWARENETWORKSTATUS']._serialized_end=203 + _globals['_HARDWAREWIFINETWORK']._serialized_start=49 + _globals['_HARDWAREWIFINETWORK']._serialized_end=98 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/hardware_network_pb2.pyi b/truffle/os/hardware_network_pb2.pyi new file mode 100644 index 0000000..8a70fed --- /dev/null +++ b/truffle/os/hardware_network_pb2.pyi @@ -0,0 +1,25 @@ +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Optional as _Optional + +DESCRIPTOR: _descriptor.FileDescriptor + +class HardwareNetworkStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + NET_DEFAULT: _ClassVar[HardwareNetworkStatus] + NET_NOT_CONNECTED: _ClassVar[HardwareNetworkStatus] + NET_NO_INTERNET: _ClassVar[HardwareNetworkStatus] + NET_CONNECTED: _ClassVar[HardwareNetworkStatus] +NET_DEFAULT: HardwareNetworkStatus +NET_NOT_CONNECTED: HardwareNetworkStatus +NET_NO_INTERNET: HardwareNetworkStatus +NET_CONNECTED: HardwareNetworkStatus + +class HardwareWifiNetwork(_message.Message): + __slots__ = ("ssid", "rssi") + SSID_FIELD_NUMBER: _ClassVar[int] + RSSI_FIELD_NUMBER: _ClassVar[int] + ssid: str + rssi: float + def __init__(self, ssid: _Optional[str] = ..., rssi: _Optional[float] = ...) -> None: ... diff --git a/truffle/os/hardware_network_pb2_grpc.py b/truffle/os/hardware_network_pb2_grpc.py new file mode 100644 index 0000000..83be82a --- /dev/null +++ b/truffle/os/hardware_network_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/hardware_network_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/hardware_settings_pb2.py b/truffle/os/hardware_settings_pb2.py new file mode 100644 index 0000000..73b02f9 --- /dev/null +++ b/truffle/os/hardware_settings_pb2.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/hardware_settings.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/hardware_settings.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"truffle/os/hardware_settings.proto\x12\ntruffle.os\"\xc3\x01\n\x10HardwareSettings\x12\x14\n\x0ctruffle_name\x18\x01 \x01(\t\x12\x43\n\x0cled_settings\x18\x02 \x01(\x0b\x32(.truffle.os.HardwareSettings.LEDSettingsH\x00\x88\x01\x01\x1a\x43\n\x0bLEDSettings\x12\x14\n\x07\x65nabled\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x12\n\nbrightness\x18\x02 \x01(\x02\x42\n\n\x08_enabledB\x0f\n\r_led_settingsb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.hardware_settings_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_HARDWARESETTINGS']._serialized_start=51 + _globals['_HARDWARESETTINGS']._serialized_end=246 + _globals['_HARDWARESETTINGS_LEDSETTINGS']._serialized_start=162 + _globals['_HARDWARESETTINGS_LEDSETTINGS']._serialized_end=229 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/hardware_settings_pb2.pyi b/truffle/os/hardware_settings_pb2.pyi new file mode 100644 index 0000000..7f3af53 --- /dev/null +++ b/truffle/os/hardware_settings_pb2.pyi @@ -0,0 +1,21 @@ +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class HardwareSettings(_message.Message): + __slots__ = ("truffle_name", "led_settings") + class LEDSettings(_message.Message): + __slots__ = ("enabled", "brightness") + ENABLED_FIELD_NUMBER: _ClassVar[int] + BRIGHTNESS_FIELD_NUMBER: _ClassVar[int] + enabled: bool + brightness: float + def __init__(self, enabled: bool = ..., brightness: _Optional[float] = ...) -> None: ... + TRUFFLE_NAME_FIELD_NUMBER: _ClassVar[int] + LED_SETTINGS_FIELD_NUMBER: _ClassVar[int] + truffle_name: str + led_settings: HardwareSettings.LEDSettings + def __init__(self, truffle_name: _Optional[str] = ..., led_settings: _Optional[_Union[HardwareSettings.LEDSettings, _Mapping]] = ...) -> None: ... diff --git a/truffle/os/hardware_settings_pb2_grpc.py b/truffle/os/hardware_settings_pb2_grpc.py new file mode 100644 index 0000000..c3ea15a --- /dev/null +++ b/truffle/os/hardware_settings_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/hardware_settings_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/hardware_stats_pb2.py b/truffle/os/hardware_stats_pb2.py new file mode 100644 index 0000000..f2deb13 --- /dev/null +++ b/truffle/os/hardware_stats_pb2.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/hardware_stats.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/hardware_stats.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.os import hardware_network_pb2 as truffle_dot_os_dot_hardware__network__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1ftruffle/os/hardware_stats.proto\x12\ntruffle.os\x1a!truffle/os/hardware_network.proto\"\xf7\x05\n\rHardwareStats\x12.\n\x05usage\x18\x01 \x01(\x0b\x32\x1f.truffle.os.HardwareStats.Usage\x12.\n\x05temps\x18\x02 \x01(\x0b\x32\x1f.truffle.os.HardwareStats.Temps\x12.\n\x05power\x18\x03 \x01(\x0b\x32\x1f.truffle.os.HardwareStats.Power\x12,\n\x04misc\x18\x04 \x01(\x0b\x32\x1e.truffle.os.HardwareStats.Misc\x12\x39\n\x0enetwork_status\x18\x05 \x01(\x0e\x32!.truffle.os.HardwareNetworkStatus\x12\x17\n\x0fthermal_warning\x18\n \x01(\x08\x12\x14\n\x0c\x64isk_warning\x18\x0b \x01(\x08\x12\x15\n\rfubar_warning\x18\x0c \x01(\x08\x12 \n\x18\x63urrent_poll_interval_ms\x18\r \x01(\r\x1a\x8f\x01\n\x05Usage\x12\x0f\n\x07\x63pu_avg\x18\x01 \x01(\x02\x12\x0f\n\x07\x63pu_max\x18\x02 \x01(\x02\x12\x14\n\x0cmemory_total\x18\x03 \x01(\x02\x12\x12\n\nmemory_gpu\x18\x04 \x01(\x02\x12\x12\n\nmemory_cpu\x18\x05 \x01(\x02\x12\x0c\n\x04\x64isk\x18\x06 \x01(\x02\x12\x0b\n\x03gpu\x18\x07 \x01(\x02\x12\x0b\n\x03\x66\x61n\x18\x08 \x01(\x02\x1aZ\n\x05Temps\x12\x0f\n\x07\x63pu_avg\x18\x01 \x01(\x02\x12\x0f\n\x07\x63pu_max\x18\x02 \x01(\x02\x12\x0f\n\x07gpu_avg\x18\x03 \x01(\x02\x12\x0f\n\x07gpu_max\x18\x04 \x01(\x02\x12\r\n\x05t_max\x18\x05 \x01(\x02\x1a\x30\n\x05Power\x12\r\n\x05total\x18\x01 \x01(\x02\x12\x0b\n\x03\x63pu\x18\x02 \x01(\x02\x12\x0b\n\x03gpu\x18\x03 \x01(\x02\x1aM\n\x04Misc\x12\x0e\n\x06net_rx\x18\x01 \x01(\x03\x12\x0e\n\x06net_tx\x18\x02 \x01(\x03\x12\x11\n\tdisk_read\x18\x03 \x01(\x03\x12\x12\n\ndisk_write\x18\x04 \x01(\x03J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tJ\x04\x08\t\x10\n\"\x16\n\x14HardwareStatsRequestb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.hardware_stats_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_HARDWARESTATS']._serialized_start=83 + _globals['_HARDWARESTATS']._serialized_end=842 + _globals['_HARDWARESTATS_USAGE']._serialized_start=454 + _globals['_HARDWARESTATS_USAGE']._serialized_end=597 + _globals['_HARDWARESTATS_TEMPS']._serialized_start=599 + _globals['_HARDWARESTATS_TEMPS']._serialized_end=689 + _globals['_HARDWARESTATS_POWER']._serialized_start=691 + _globals['_HARDWARESTATS_POWER']._serialized_end=739 + _globals['_HARDWARESTATS_MISC']._serialized_start=741 + _globals['_HARDWARESTATS_MISC']._serialized_end=818 + _globals['_HARDWARESTATSREQUEST']._serialized_start=844 + _globals['_HARDWARESTATSREQUEST']._serialized_end=866 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/hardware_stats_pb2.pyi b/truffle/os/hardware_stats_pb2.pyi new file mode 100644 index 0000000..27d7c5d --- /dev/null +++ b/truffle/os/hardware_stats_pb2.pyi @@ -0,0 +1,85 @@ +from truffle.os import hardware_network_pb2 as _hardware_network_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class HardwareStats(_message.Message): + __slots__ = ("usage", "temps", "power", "misc", "network_status", "thermal_warning", "disk_warning", "fubar_warning", "current_poll_interval_ms") + class Usage(_message.Message): + __slots__ = ("cpu_avg", "cpu_max", "memory_total", "memory_gpu", "memory_cpu", "disk", "gpu", "fan") + CPU_AVG_FIELD_NUMBER: _ClassVar[int] + CPU_MAX_FIELD_NUMBER: _ClassVar[int] + MEMORY_TOTAL_FIELD_NUMBER: _ClassVar[int] + MEMORY_GPU_FIELD_NUMBER: _ClassVar[int] + MEMORY_CPU_FIELD_NUMBER: _ClassVar[int] + DISK_FIELD_NUMBER: _ClassVar[int] + GPU_FIELD_NUMBER: _ClassVar[int] + FAN_FIELD_NUMBER: _ClassVar[int] + cpu_avg: float + cpu_max: float + memory_total: float + memory_gpu: float + memory_cpu: float + disk: float + gpu: float + fan: float + def __init__(self, cpu_avg: _Optional[float] = ..., cpu_max: _Optional[float] = ..., memory_total: _Optional[float] = ..., memory_gpu: _Optional[float] = ..., memory_cpu: _Optional[float] = ..., disk: _Optional[float] = ..., gpu: _Optional[float] = ..., fan: _Optional[float] = ...) -> None: ... + class Temps(_message.Message): + __slots__ = ("cpu_avg", "cpu_max", "gpu_avg", "gpu_max", "t_max") + CPU_AVG_FIELD_NUMBER: _ClassVar[int] + CPU_MAX_FIELD_NUMBER: _ClassVar[int] + GPU_AVG_FIELD_NUMBER: _ClassVar[int] + GPU_MAX_FIELD_NUMBER: _ClassVar[int] + T_MAX_FIELD_NUMBER: _ClassVar[int] + cpu_avg: float + cpu_max: float + gpu_avg: float + gpu_max: float + t_max: float + def __init__(self, cpu_avg: _Optional[float] = ..., cpu_max: _Optional[float] = ..., gpu_avg: _Optional[float] = ..., gpu_max: _Optional[float] = ..., t_max: _Optional[float] = ...) -> None: ... + class Power(_message.Message): + __slots__ = ("total", "cpu", "gpu") + TOTAL_FIELD_NUMBER: _ClassVar[int] + CPU_FIELD_NUMBER: _ClassVar[int] + GPU_FIELD_NUMBER: _ClassVar[int] + total: float + cpu: float + gpu: float + def __init__(self, total: _Optional[float] = ..., cpu: _Optional[float] = ..., gpu: _Optional[float] = ...) -> None: ... + class Misc(_message.Message): + __slots__ = ("net_rx", "net_tx", "disk_read", "disk_write") + NET_RX_FIELD_NUMBER: _ClassVar[int] + NET_TX_FIELD_NUMBER: _ClassVar[int] + DISK_READ_FIELD_NUMBER: _ClassVar[int] + DISK_WRITE_FIELD_NUMBER: _ClassVar[int] + net_rx: int + net_tx: int + disk_read: int + disk_write: int + def __init__(self, net_rx: _Optional[int] = ..., net_tx: _Optional[int] = ..., disk_read: _Optional[int] = ..., disk_write: _Optional[int] = ...) -> None: ... + USAGE_FIELD_NUMBER: _ClassVar[int] + TEMPS_FIELD_NUMBER: _ClassVar[int] + POWER_FIELD_NUMBER: _ClassVar[int] + MISC_FIELD_NUMBER: _ClassVar[int] + NETWORK_STATUS_FIELD_NUMBER: _ClassVar[int] + THERMAL_WARNING_FIELD_NUMBER: _ClassVar[int] + DISK_WARNING_FIELD_NUMBER: _ClassVar[int] + FUBAR_WARNING_FIELD_NUMBER: _ClassVar[int] + CURRENT_POLL_INTERVAL_MS_FIELD_NUMBER: _ClassVar[int] + usage: HardwareStats.Usage + temps: HardwareStats.Temps + power: HardwareStats.Power + misc: HardwareStats.Misc + network_status: _hardware_network_pb2.HardwareNetworkStatus + thermal_warning: bool + disk_warning: bool + fubar_warning: bool + current_poll_interval_ms: int + def __init__(self, usage: _Optional[_Union[HardwareStats.Usage, _Mapping]] = ..., temps: _Optional[_Union[HardwareStats.Temps, _Mapping]] = ..., power: _Optional[_Union[HardwareStats.Power, _Mapping]] = ..., misc: _Optional[_Union[HardwareStats.Misc, _Mapping]] = ..., network_status: _Optional[_Union[_hardware_network_pb2.HardwareNetworkStatus, str]] = ..., thermal_warning: bool = ..., disk_warning: bool = ..., fubar_warning: bool = ..., current_poll_interval_ms: _Optional[int] = ...) -> None: ... + +class HardwareStatsRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... diff --git a/truffle/os/hardware_stats_pb2_grpc.py b/truffle/os/hardware_stats_pb2_grpc.py new file mode 100644 index 0000000..e5ba7dd --- /dev/null +++ b/truffle/os/hardware_stats_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/hardware_stats_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/installer_pb2.py b/truffle/os/installer_pb2.py new file mode 100644 index 0000000..82cf1b8 --- /dev/null +++ b/truffle/os/installer_pb2.py @@ -0,0 +1,83 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/installer.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/installer.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.app import foreground_pb2 as truffle_dot_app_dot_foreground__pb2 +from truffle.app import background_pb2 as truffle_dot_app_dot_background__pb2 +from truffle.app import app_type_pb2 as truffle_dot_app_dot_app__type__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1atruffle/os/installer.proto\x12\ntruffle.os\x1a\x1ctruffle/app/foreground.proto\x1a\x1ctruffle/app/background.proto\x1a\x1atruffle/app/app_type.proto\"\x87\x01\n\x10\x41ppInstallSource\x12\x35\n\x0bsource_type\x18\x01 \x01(\x0e\x32 .truffle.os.AppInstallSourceType\x12\x10\n\x03url\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08git_hash\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x06\n\x04_urlB\x0b\n\t_git_hash\"\xc3\x07\n\x0f\x41ppInstallModal\x12\x12\n\nstep_index\x18\x01 \x01(\x05\x12\x11\n\tstep_name\x18\x02 \x01(\t\x12\x41\n\rwelcome_modal\x18\n \x01(\x0b\x32(.truffle.os.AppInstallModal.WelcomeModalH\x00\x12H\n\x11text_fields_modal\x18\x0b \x01(\x0b\x32+.truffle.os.AppInstallModal.TextFieldsModalH\x00\x12\x39\n\tvnc_modal\x18\x0c \x01(\x0b\x32$.truffle.os.AppInstallModal.VNCModalH\x00\x12?\n\x0c\x66inish_modal\x18\x0e \x01(\x0b\x32\'.truffle.os.AppInstallModal.FinishModalH\x00\x12H\n\x11upload_file_modal\x18\x0f \x01(\x0b\x32+.truffle.os.AppInstallModal.UploadFileModalH\x00\x1a\'\n\x0cWelcomeModal\x12\x17\n\x0fwelcome_message\x18\x01 \x01(\t\x1a\xca\x02\n\x0fTextFieldsModal\x12\x14\n\x0cinstructions\x18\x01 \x01(\t\x12G\n\x06\x66ields\x18\x02 \x03(\x0b\x32\x37.truffle.os.AppInstallModal.TextFieldsModal.FieldsEntry\x1ar\n\tTextField\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x0bplaceholder\x18\x02 \x01(\t\x12\x13\n\x0bis_password\x18\x03 \x01(\x08\x12\x1a\n\rdefault_value\x18\x04 \x01(\tH\x00\x88\x01\x01\x42\x10\n\x0e_default_value\x1a\x64\n\x0b\x46ieldsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x44\n\x05value\x18\x02 \x01(\x0b\x32\x35.truffle.os.AppInstallModal.TextFieldsModal.TextField:\x02\x38\x01\x1aR\n\x08VNCModal\x12\x14\n\x0cinstructions\x18\x01 \x01(\t\x12\x14\n\x0cvnc_uri_path\x18\x02 \x01(\t\x12\x1a\n\x12\x63loses_on_complete\x18\x03 \x01(\x08\x1a*\n\x0fUploadFileModal\x12\x17\n\x0fupload_uri_path\x18\x01 \x01(\t\x1a\x37\n\x0b\x46inishModal\x12\x10\n\x08\x61pp_uuid\x18\x01 \x01(\t\x12\x16\n\x0e\x66inish_message\x18\x02 \x01(\tB\x07\n\x05modal\"(\n\x0f\x41ppInstallError\x12\x15\n\rerror_message\x18\x01 \x01(\t\",\n\x11\x41ppInstallLoading\x12\x17\n\x0floading_message\x18\x01 \x01(\t\"\xde\x01\n\x12\x41ppInstallMetadata\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12&\n\x08\x61pp_type\x18\x02 \x01(\x0e\x32\x14.truffle.app.AppType\x12\x42\n\x13\x66oreground_metadata\x18\x03 \x01(\x0b\x32#.truffle.app.ForegroundApp.MetadataH\x00\x12\x42\n\x13\x62\x61\x63kground_metadata\x18\x04 \x01(\x0b\x32#.truffle.app.BackgroundApp.MetadataH\x00\x42\n\n\x08metadata\"\xc1\x03\n\x14\x41ppInstallUserAction\x12;\n\x04next\x18\x01 \x01(\x0b\x32+.truffle.os.AppInstallUserAction.NextActionH\x00\x12N\n\x0btext_fields\x18\x02 \x01(\x0b\x32\x37.truffle.os.AppInstallUserAction.SubmitTextFieldsActionH\x00\x12=\n\x05\x61\x62ort\x18\x03 \x01(\x0b\x32,.truffle.os.AppInstallUserAction.AbortActionH\x00\x1a\x0c\n\nNextAction\x1a\xb5\x01\n\x16SubmitTextFieldsAction\x12\x64\n\x0f\x66ield_responses\x18\x01 \x03(\x0b\x32K.truffle.os.AppInstallUserAction.SubmitTextFieldsAction.FieldResponsesEntry\x1a\x35\n\x13\x46ieldResponsesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\r\n\x0b\x41\x62ortActionB\x08\n\x06\x61\x63tion\"\xde\x01\n\x11\x41ppInstallRequest\x12\x42\n\tstart_new\x18\x01 \x01(\x0b\x32-.truffle.os.AppInstallRequest.StartNewInstallH\x00\x12\x37\n\x0buser_action\x18\x03 \x01(\x0b\x32 .truffle.os.AppInstallUserActionH\x00\x1a?\n\x0fStartNewInstall\x12,\n\x06source\x18\x01 \x01(\x0b\x32\x1c.truffle.os.AppInstallSourceB\x0b\n\toperation\"\x83\x02\n\x12\x41ppInstallResponse\x12\x34\n\rinstall_modal\x18\x01 \x01(\x0b\x32\x1b.truffle.os.AppInstallModalH\x00\x12\x34\n\rinstall_error\x18\x02 \x01(\x0b\x32\x1b.truffle.os.AppInstallErrorH\x00\x12\x38\n\x0finstall_loading\x18\x03 \x01(\x0b\x32\x1d.truffle.os.AppInstallLoadingH\x00\x12:\n\x10install_metadata\x18\x04 \x01(\x0b\x32\x1e.truffle.os.AppInstallMetadataH\x00\x42\x0b\n\toperation*\xa3\x01\n\x14\x41ppInstallSourceType\x12\'\n#APP_INSTALL_SOURCE_TYPE_UNSPECIFIED\x10\x00\x12\x1f\n\x1b\x41PP_INSTALL_SOURCE_TYPE_URL\x10\x01\x12 \n\x1c\x41PP_INSTALL_SOURCE_TYPE_FILE\x10\x02\x12\x1f\n\x1b\x41PP_INSTALL_SOURCE_TYPE_GIT\x10\x03\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.installer_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_APPINSTALLMODAL_TEXTFIELDSMODAL_FIELDSENTRY']._loaded_options = None + _globals['_APPINSTALLMODAL_TEXTFIELDSMODAL_FIELDSENTRY']._serialized_options = b'8\001' + _globals['_APPINSTALLUSERACTION_SUBMITTEXTFIELDSACTION_FIELDRESPONSESENTRY']._loaded_options = None + _globals['_APPINSTALLUSERACTION_SUBMITTEXTFIELDSACTION_FIELDRESPONSESENTRY']._serialized_options = b'8\001' + _globals['_APPINSTALLSOURCETYPE']._serialized_start=2487 + _globals['_APPINSTALLSOURCETYPE']._serialized_end=2650 + _globals['_APPINSTALLSOURCE']._serialized_start=131 + _globals['_APPINSTALLSOURCE']._serialized_end=266 + _globals['_APPINSTALLMODAL']._serialized_start=269 + _globals['_APPINSTALLMODAL']._serialized_end=1232 + _globals['_APPINSTALLMODAL_WELCOMEMODAL']._serialized_start=666 + _globals['_APPINSTALLMODAL_WELCOMEMODAL']._serialized_end=705 + _globals['_APPINSTALLMODAL_TEXTFIELDSMODAL']._serialized_start=708 + _globals['_APPINSTALLMODAL_TEXTFIELDSMODAL']._serialized_end=1038 + _globals['_APPINSTALLMODAL_TEXTFIELDSMODAL_TEXTFIELD']._serialized_start=822 + _globals['_APPINSTALLMODAL_TEXTFIELDSMODAL_TEXTFIELD']._serialized_end=936 + _globals['_APPINSTALLMODAL_TEXTFIELDSMODAL_FIELDSENTRY']._serialized_start=938 + _globals['_APPINSTALLMODAL_TEXTFIELDSMODAL_FIELDSENTRY']._serialized_end=1038 + _globals['_APPINSTALLMODAL_VNCMODAL']._serialized_start=1040 + _globals['_APPINSTALLMODAL_VNCMODAL']._serialized_end=1122 + _globals['_APPINSTALLMODAL_UPLOADFILEMODAL']._serialized_start=1124 + _globals['_APPINSTALLMODAL_UPLOADFILEMODAL']._serialized_end=1166 + _globals['_APPINSTALLMODAL_FINISHMODAL']._serialized_start=1168 + _globals['_APPINSTALLMODAL_FINISHMODAL']._serialized_end=1223 + _globals['_APPINSTALLERROR']._serialized_start=1234 + _globals['_APPINSTALLERROR']._serialized_end=1274 + _globals['_APPINSTALLLOADING']._serialized_start=1276 + _globals['_APPINSTALLLOADING']._serialized_end=1320 + _globals['_APPINSTALLMETADATA']._serialized_start=1323 + _globals['_APPINSTALLMETADATA']._serialized_end=1545 + _globals['_APPINSTALLUSERACTION']._serialized_start=1548 + _globals['_APPINSTALLUSERACTION']._serialized_end=1997 + _globals['_APPINSTALLUSERACTION_NEXTACTION']._serialized_start=1776 + _globals['_APPINSTALLUSERACTION_NEXTACTION']._serialized_end=1788 + _globals['_APPINSTALLUSERACTION_SUBMITTEXTFIELDSACTION']._serialized_start=1791 + _globals['_APPINSTALLUSERACTION_SUBMITTEXTFIELDSACTION']._serialized_end=1972 + _globals['_APPINSTALLUSERACTION_SUBMITTEXTFIELDSACTION_FIELDRESPONSESENTRY']._serialized_start=1919 + _globals['_APPINSTALLUSERACTION_SUBMITTEXTFIELDSACTION_FIELDRESPONSESENTRY']._serialized_end=1972 + _globals['_APPINSTALLUSERACTION_ABORTACTION']._serialized_start=1974 + _globals['_APPINSTALLUSERACTION_ABORTACTION']._serialized_end=1987 + _globals['_APPINSTALLREQUEST']._serialized_start=2000 + _globals['_APPINSTALLREQUEST']._serialized_end=2222 + _globals['_APPINSTALLREQUEST_STARTNEWINSTALL']._serialized_start=2146 + _globals['_APPINSTALLREQUEST_STARTNEWINSTALL']._serialized_end=2209 + _globals['_APPINSTALLRESPONSE']._serialized_start=2225 + _globals['_APPINSTALLRESPONSE']._serialized_end=2484 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/installer_pb2.pyi b/truffle/os/installer_pb2.pyi new file mode 100644 index 0000000..78b5080 --- /dev/null +++ b/truffle/os/installer_pb2.pyi @@ -0,0 +1,178 @@ +from truffle.app import foreground_pb2 as _foreground_pb2 +from truffle.app import background_pb2 as _background_pb2 +from truffle.app import app_type_pb2 as _app_type_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class AppInstallSourceType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + APP_INSTALL_SOURCE_TYPE_UNSPECIFIED: _ClassVar[AppInstallSourceType] + APP_INSTALL_SOURCE_TYPE_URL: _ClassVar[AppInstallSourceType] + APP_INSTALL_SOURCE_TYPE_FILE: _ClassVar[AppInstallSourceType] + APP_INSTALL_SOURCE_TYPE_GIT: _ClassVar[AppInstallSourceType] +APP_INSTALL_SOURCE_TYPE_UNSPECIFIED: AppInstallSourceType +APP_INSTALL_SOURCE_TYPE_URL: AppInstallSourceType +APP_INSTALL_SOURCE_TYPE_FILE: AppInstallSourceType +APP_INSTALL_SOURCE_TYPE_GIT: AppInstallSourceType + +class AppInstallSource(_message.Message): + __slots__ = ("source_type", "url", "git_hash") + SOURCE_TYPE_FIELD_NUMBER: _ClassVar[int] + URL_FIELD_NUMBER: _ClassVar[int] + GIT_HASH_FIELD_NUMBER: _ClassVar[int] + source_type: AppInstallSourceType + url: str + git_hash: str + def __init__(self, source_type: _Optional[_Union[AppInstallSourceType, str]] = ..., url: _Optional[str] = ..., git_hash: _Optional[str] = ...) -> None: ... + +class AppInstallModal(_message.Message): + __slots__ = ("step_index", "step_name", "welcome_modal", "text_fields_modal", "vnc_modal", "finish_modal", "upload_file_modal") + class WelcomeModal(_message.Message): + __slots__ = ("welcome_message",) + WELCOME_MESSAGE_FIELD_NUMBER: _ClassVar[int] + welcome_message: str + def __init__(self, welcome_message: _Optional[str] = ...) -> None: ... + class TextFieldsModal(_message.Message): + __slots__ = ("instructions", "fields") + class TextField(_message.Message): + __slots__ = ("label", "placeholder", "is_password", "default_value") + LABEL_FIELD_NUMBER: _ClassVar[int] + PLACEHOLDER_FIELD_NUMBER: _ClassVar[int] + IS_PASSWORD_FIELD_NUMBER: _ClassVar[int] + DEFAULT_VALUE_FIELD_NUMBER: _ClassVar[int] + label: str + placeholder: str + is_password: bool + default_value: str + def __init__(self, label: _Optional[str] = ..., placeholder: _Optional[str] = ..., is_password: bool = ..., default_value: _Optional[str] = ...) -> None: ... + class FieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: AppInstallModal.TextFieldsModal.TextField + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[AppInstallModal.TextFieldsModal.TextField, _Mapping]] = ...) -> None: ... + INSTRUCTIONS_FIELD_NUMBER: _ClassVar[int] + FIELDS_FIELD_NUMBER: _ClassVar[int] + instructions: str + fields: _containers.MessageMap[str, AppInstallModal.TextFieldsModal.TextField] + def __init__(self, instructions: _Optional[str] = ..., fields: _Optional[_Mapping[str, AppInstallModal.TextFieldsModal.TextField]] = ...) -> None: ... + class VNCModal(_message.Message): + __slots__ = ("instructions", "vnc_uri_path", "closes_on_complete") + INSTRUCTIONS_FIELD_NUMBER: _ClassVar[int] + VNC_URI_PATH_FIELD_NUMBER: _ClassVar[int] + CLOSES_ON_COMPLETE_FIELD_NUMBER: _ClassVar[int] + instructions: str + vnc_uri_path: str + closes_on_complete: bool + def __init__(self, instructions: _Optional[str] = ..., vnc_uri_path: _Optional[str] = ..., closes_on_complete: bool = ...) -> None: ... + class UploadFileModal(_message.Message): + __slots__ = ("upload_uri_path",) + UPLOAD_URI_PATH_FIELD_NUMBER: _ClassVar[int] + upload_uri_path: str + def __init__(self, upload_uri_path: _Optional[str] = ...) -> None: ... + class FinishModal(_message.Message): + __slots__ = ("app_uuid", "finish_message") + APP_UUID_FIELD_NUMBER: _ClassVar[int] + FINISH_MESSAGE_FIELD_NUMBER: _ClassVar[int] + app_uuid: str + finish_message: str + def __init__(self, app_uuid: _Optional[str] = ..., finish_message: _Optional[str] = ...) -> None: ... + STEP_INDEX_FIELD_NUMBER: _ClassVar[int] + STEP_NAME_FIELD_NUMBER: _ClassVar[int] + WELCOME_MODAL_FIELD_NUMBER: _ClassVar[int] + TEXT_FIELDS_MODAL_FIELD_NUMBER: _ClassVar[int] + VNC_MODAL_FIELD_NUMBER: _ClassVar[int] + FINISH_MODAL_FIELD_NUMBER: _ClassVar[int] + UPLOAD_FILE_MODAL_FIELD_NUMBER: _ClassVar[int] + step_index: int + step_name: str + welcome_modal: AppInstallModal.WelcomeModal + text_fields_modal: AppInstallModal.TextFieldsModal + vnc_modal: AppInstallModal.VNCModal + finish_modal: AppInstallModal.FinishModal + upload_file_modal: AppInstallModal.UploadFileModal + def __init__(self, step_index: _Optional[int] = ..., step_name: _Optional[str] = ..., welcome_modal: _Optional[_Union[AppInstallModal.WelcomeModal, _Mapping]] = ..., text_fields_modal: _Optional[_Union[AppInstallModal.TextFieldsModal, _Mapping]] = ..., vnc_modal: _Optional[_Union[AppInstallModal.VNCModal, _Mapping]] = ..., finish_modal: _Optional[_Union[AppInstallModal.FinishModal, _Mapping]] = ..., upload_file_modal: _Optional[_Union[AppInstallModal.UploadFileModal, _Mapping]] = ...) -> None: ... + +class AppInstallError(_message.Message): + __slots__ = ("error_message",) + ERROR_MESSAGE_FIELD_NUMBER: _ClassVar[int] + error_message: str + def __init__(self, error_message: _Optional[str] = ...) -> None: ... + +class AppInstallLoading(_message.Message): + __slots__ = ("loading_message",) + LOADING_MESSAGE_FIELD_NUMBER: _ClassVar[int] + loading_message: str + def __init__(self, loading_message: _Optional[str] = ...) -> None: ... + +class AppInstallMetadata(_message.Message): + __slots__ = ("uuid", "app_type", "foreground_metadata", "background_metadata") + UUID_FIELD_NUMBER: _ClassVar[int] + APP_TYPE_FIELD_NUMBER: _ClassVar[int] + FOREGROUND_METADATA_FIELD_NUMBER: _ClassVar[int] + BACKGROUND_METADATA_FIELD_NUMBER: _ClassVar[int] + uuid: str + app_type: _app_type_pb2.AppType + foreground_metadata: _foreground_pb2.ForegroundApp.Metadata + background_metadata: _background_pb2.BackgroundApp.Metadata + def __init__(self, uuid: _Optional[str] = ..., app_type: _Optional[_Union[_app_type_pb2.AppType, str]] = ..., foreground_metadata: _Optional[_Union[_foreground_pb2.ForegroundApp.Metadata, _Mapping]] = ..., background_metadata: _Optional[_Union[_background_pb2.BackgroundApp.Metadata, _Mapping]] = ...) -> None: ... + +class AppInstallUserAction(_message.Message): + __slots__ = ("next", "text_fields", "abort") + class NextAction(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + class SubmitTextFieldsAction(_message.Message): + __slots__ = ("field_responses",) + class FieldResponsesEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + FIELD_RESPONSES_FIELD_NUMBER: _ClassVar[int] + field_responses: _containers.ScalarMap[str, str] + def __init__(self, field_responses: _Optional[_Mapping[str, str]] = ...) -> None: ... + class AbortAction(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + NEXT_FIELD_NUMBER: _ClassVar[int] + TEXT_FIELDS_FIELD_NUMBER: _ClassVar[int] + ABORT_FIELD_NUMBER: _ClassVar[int] + next: AppInstallUserAction.NextAction + text_fields: AppInstallUserAction.SubmitTextFieldsAction + abort: AppInstallUserAction.AbortAction + def __init__(self, next: _Optional[_Union[AppInstallUserAction.NextAction, _Mapping]] = ..., text_fields: _Optional[_Union[AppInstallUserAction.SubmitTextFieldsAction, _Mapping]] = ..., abort: _Optional[_Union[AppInstallUserAction.AbortAction, _Mapping]] = ...) -> None: ... + +class AppInstallRequest(_message.Message): + __slots__ = ("start_new", "user_action") + class StartNewInstall(_message.Message): + __slots__ = ("source",) + SOURCE_FIELD_NUMBER: _ClassVar[int] + source: AppInstallSource + def __init__(self, source: _Optional[_Union[AppInstallSource, _Mapping]] = ...) -> None: ... + START_NEW_FIELD_NUMBER: _ClassVar[int] + USER_ACTION_FIELD_NUMBER: _ClassVar[int] + start_new: AppInstallRequest.StartNewInstall + user_action: AppInstallUserAction + def __init__(self, start_new: _Optional[_Union[AppInstallRequest.StartNewInstall, _Mapping]] = ..., user_action: _Optional[_Union[AppInstallUserAction, _Mapping]] = ...) -> None: ... + +class AppInstallResponse(_message.Message): + __slots__ = ("install_modal", "install_error", "install_loading", "install_metadata") + INSTALL_MODAL_FIELD_NUMBER: _ClassVar[int] + INSTALL_ERROR_FIELD_NUMBER: _ClassVar[int] + INSTALL_LOADING_FIELD_NUMBER: _ClassVar[int] + INSTALL_METADATA_FIELD_NUMBER: _ClassVar[int] + install_modal: AppInstallModal + install_error: AppInstallError + install_loading: AppInstallLoading + install_metadata: AppInstallMetadata + def __init__(self, install_modal: _Optional[_Union[AppInstallModal, _Mapping]] = ..., install_error: _Optional[_Union[AppInstallError, _Mapping]] = ..., install_loading: _Optional[_Union[AppInstallLoading, _Mapping]] = ..., install_metadata: _Optional[_Union[AppInstallMetadata, _Mapping]] = ...) -> None: ... diff --git a/truffle/os/installer_pb2_grpc.py b/truffle/os/installer_pb2_grpc.py new file mode 100644 index 0000000..c1eb7ce --- /dev/null +++ b/truffle/os/installer_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/installer_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/notification_pb2.py b/truffle/os/notification_pb2.py new file mode 100644 index 0000000..c66af35 --- /dev/null +++ b/truffle/os/notification_pb2.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/notification.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/notification.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from truffle.os import hardware_stats_pb2 as truffle_dot_os_dot_hardware__stats__pb2 +from truffle.os import client_session_pb2 as truffle_dot_os_dot_client__session__pb2 +from truffle.app import background_pb2 as truffle_dot_app_dot_background__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dtruffle/os/notification.proto\x12\ntruffle.os\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1ftruffle/os/hardware_stats.proto\x1a\x1ftruffle/os/client_session.proto\x1a\x1ctruffle/app/background.proto\"!\n\x1fSubscribeToNotificationsRequest\"\xa6\x05\n\x0cNotification\x12\x37\n\x04type\x18\x01 \x01(\x0e\x32).truffle.os.Notification.NotificationType\x12\x15\n\rassociated_id\x18\x02 \x01(\t\x12&\n\x04none\x18\x03 \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x12*\n\x07payload\x18\x04 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x12\x46\n\x18new_session_verification\x18\x07 \x01(\x0b\x32\".truffle.os.NewSessionVerificationH\x00\x12M\n\x1b\x62\x61\x63kground_app_notification\x18\n \x01(\x0b\x32&.truffle.app.BackgroundAppNotificationH\x00\x12\x10\n\x08is_error\x18\x08 \x01(\x08\"\xc0\x02\n\x10NotificationType\x12\x1d\n\x19NOTIFICATION_TYPE_INVALID\x10\x00\x12\x12\n\x0e\x42G_FEED_UPDATE\x10\x01\x12\x13\n\x0fTASK_HAS_RESULT\x10\x02\x12\x1e\n\x1a\x42G_FEED_FEEDBACK_PROCESSED\x10\x03\x12\x15\n\x11\x42G_APP_LIST_DIRTY\x10\x0e\x12\x15\n\x11\x46G_APP_LIST_DIRTY\x10\x0f\x12\x13\n\x0fTASK_LIST_DIRTY\x10\x10\x12\x11\n\rSESSION_READY\x10\x14\x12 \n\x1cSESSION_VERIFICATION_REQUEST\x10\x15\x12\x11\n\rSESSION_ADDED\x10\x16\x12\x12\n\x0eSESSION_DENIED\x10\x17\x12\x12\n\x0eSERVER_CLOSING\x10\x1f\x12\x11\n\rDISPLAY_TOAST\x10 B\x06\n\x04\x64\x61tab\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.notification_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_SUBSCRIBETONOTIFICATIONSREQUEST']._serialized_start=200 + _globals['_SUBSCRIBETONOTIFICATIONSREQUEST']._serialized_end=233 + _globals['_NOTIFICATION']._serialized_start=236 + _globals['_NOTIFICATION']._serialized_end=914 + _globals['_NOTIFICATION_NOTIFICATIONTYPE']._serialized_start=586 + _globals['_NOTIFICATION_NOTIFICATIONTYPE']._serialized_end=906 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/notification_pb2.pyi b/truffle/os/notification_pb2.pyi new file mode 100644 index 0000000..1a521b0 --- /dev/null +++ b/truffle/os/notification_pb2.pyi @@ -0,0 +1,62 @@ +from google.protobuf import struct_pb2 as _struct_pb2 +from google.protobuf import empty_pb2 as _empty_pb2 +from truffle.os import hardware_stats_pb2 as _hardware_stats_pb2 +from truffle.os import client_session_pb2 as _client_session_pb2 +from truffle.app import background_pb2 as _background_pb2 +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class SubscribeToNotificationsRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class Notification(_message.Message): + __slots__ = ("type", "associated_id", "none", "payload", "new_session_verification", "background_app_notification", "is_error") + class NotificationType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + NOTIFICATION_TYPE_INVALID: _ClassVar[Notification.NotificationType] + BG_FEED_UPDATE: _ClassVar[Notification.NotificationType] + TASK_HAS_RESULT: _ClassVar[Notification.NotificationType] + BG_FEED_FEEDBACK_PROCESSED: _ClassVar[Notification.NotificationType] + BG_APP_LIST_DIRTY: _ClassVar[Notification.NotificationType] + FG_APP_LIST_DIRTY: _ClassVar[Notification.NotificationType] + TASK_LIST_DIRTY: _ClassVar[Notification.NotificationType] + SESSION_READY: _ClassVar[Notification.NotificationType] + SESSION_VERIFICATION_REQUEST: _ClassVar[Notification.NotificationType] + SESSION_ADDED: _ClassVar[Notification.NotificationType] + SESSION_DENIED: _ClassVar[Notification.NotificationType] + SERVER_CLOSING: _ClassVar[Notification.NotificationType] + DISPLAY_TOAST: _ClassVar[Notification.NotificationType] + NOTIFICATION_TYPE_INVALID: Notification.NotificationType + BG_FEED_UPDATE: Notification.NotificationType + TASK_HAS_RESULT: Notification.NotificationType + BG_FEED_FEEDBACK_PROCESSED: Notification.NotificationType + BG_APP_LIST_DIRTY: Notification.NotificationType + FG_APP_LIST_DIRTY: Notification.NotificationType + TASK_LIST_DIRTY: Notification.NotificationType + SESSION_READY: Notification.NotificationType + SESSION_VERIFICATION_REQUEST: Notification.NotificationType + SESSION_ADDED: Notification.NotificationType + SESSION_DENIED: Notification.NotificationType + SERVER_CLOSING: Notification.NotificationType + DISPLAY_TOAST: Notification.NotificationType + TYPE_FIELD_NUMBER: _ClassVar[int] + ASSOCIATED_ID_FIELD_NUMBER: _ClassVar[int] + NONE_FIELD_NUMBER: _ClassVar[int] + PAYLOAD_FIELD_NUMBER: _ClassVar[int] + NEW_SESSION_VERIFICATION_FIELD_NUMBER: _ClassVar[int] + BACKGROUND_APP_NOTIFICATION_FIELD_NUMBER: _ClassVar[int] + IS_ERROR_FIELD_NUMBER: _ClassVar[int] + type: Notification.NotificationType + associated_id: str + none: _empty_pb2.Empty + payload: _struct_pb2.Struct + new_session_verification: _client_session_pb2.NewSessionVerification + background_app_notification: _background_pb2.BackgroundAppNotification + is_error: bool + def __init__(self, type: _Optional[_Union[Notification.NotificationType, str]] = ..., associated_id: _Optional[str] = ..., none: _Optional[_Union[_empty_pb2.Empty, _Mapping]] = ..., payload: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., new_session_verification: _Optional[_Union[_client_session_pb2.NewSessionVerification, _Mapping]] = ..., background_app_notification: _Optional[_Union[_background_pb2.BackgroundAppNotification, _Mapping]] = ..., is_error: bool = ...) -> None: ... diff --git a/truffle/os/notification_pb2_grpc.py b/truffle/os/notification_pb2_grpc.py new file mode 100644 index 0000000..1b8bc2c --- /dev/null +++ b/truffle/os/notification_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/notification_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/system_info_pb2.py b/truffle/os/system_info_pb2.py new file mode 100644 index 0000000..2968f0c --- /dev/null +++ b/truffle/os/system_info_pb2.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/system_info.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/system_info.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from truffle.os import hardware_info_pb2 as truffle_dot_os_dot_hardware__info__pb2 + +from truffle.os.hardware_info_pb2 import * + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1ctruffle/os/system_info.proto\x12\ntruffle.os\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1etruffle/os/hardware_info.proto\"\"\n\x0f\x46irmwareVersion\x12\x0f\n\x07version\x18\x01 \x01(\t\"\x88\x02\n\nSystemInfo\x12\x37\n\x0bsystem_type\x18\x01 \x01(\x0e\x32\".truffle.os.SystemInfo.TruffleType\x12\x35\n\x10\x66irmware_version\x18\x02 \x01(\x0b\x32\x1b.truffle.os.FirmwareVersion\x12\x34\n\rhardware_info\x18\x05 \x01(\x0b\x32\x18.truffle.os.HardwareInfoH\x00\x88\x01\x01\"B\n\x0bTruffleType\x12\x18\n\x14TRUFFLE_TYPE_INVALID\x10\x00\x12\x19\n\x15TRUFFLE_TYPE_HARDWARE\x10\x01\x42\x10\n\x0e_hardware_info\"\x1d\n\x1bSystemCheckForUpdateRequest\"\x1e\n\x1cSystemCheckForUpdateResponse\"\x14\n\x12SystemGetIDRequest\"@\n\x13SystemGetIDResponse\x12\x12\n\ntruffle_id\x18\x01 \x01(\t\x12\x15\n\rserial_number\x18\x02 \x01(\tP\x01\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.system_info_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_FIRMWAREVERSION']._serialized_start=109 + _globals['_FIRMWAREVERSION']._serialized_end=143 + _globals['_SYSTEMINFO']._serialized_start=146 + _globals['_SYSTEMINFO']._serialized_end=410 + _globals['_SYSTEMINFO_TRUFFLETYPE']._serialized_start=326 + _globals['_SYSTEMINFO_TRUFFLETYPE']._serialized_end=392 + _globals['_SYSTEMCHECKFORUPDATEREQUEST']._serialized_start=412 + _globals['_SYSTEMCHECKFORUPDATEREQUEST']._serialized_end=441 + _globals['_SYSTEMCHECKFORUPDATERESPONSE']._serialized_start=443 + _globals['_SYSTEMCHECKFORUPDATERESPONSE']._serialized_end=473 + _globals['_SYSTEMGETIDREQUEST']._serialized_start=475 + _globals['_SYSTEMGETIDREQUEST']._serialized_end=495 + _globals['_SYSTEMGETIDRESPONSE']._serialized_start=497 + _globals['_SYSTEMGETIDRESPONSE']._serialized_end=561 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/system_info_pb2.pyi b/truffle/os/system_info_pb2.pyi new file mode 100644 index 0000000..c27de8b --- /dev/null +++ b/truffle/os/system_info_pb2.pyi @@ -0,0 +1,52 @@ +from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from truffle.os import hardware_info_pb2 as _hardware_info_pb2 +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union +from truffle.os.hardware_info_pb2 import HardwareInfo as HardwareInfo + +DESCRIPTOR: _descriptor.FileDescriptor + +class FirmwareVersion(_message.Message): + __slots__ = ("version",) + VERSION_FIELD_NUMBER: _ClassVar[int] + version: str + def __init__(self, version: _Optional[str] = ...) -> None: ... + +class SystemInfo(_message.Message): + __slots__ = ("system_type", "firmware_version", "hardware_info") + class TruffleType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + TRUFFLE_TYPE_INVALID: _ClassVar[SystemInfo.TruffleType] + TRUFFLE_TYPE_HARDWARE: _ClassVar[SystemInfo.TruffleType] + TRUFFLE_TYPE_INVALID: SystemInfo.TruffleType + TRUFFLE_TYPE_HARDWARE: SystemInfo.TruffleType + SYSTEM_TYPE_FIELD_NUMBER: _ClassVar[int] + FIRMWARE_VERSION_FIELD_NUMBER: _ClassVar[int] + HARDWARE_INFO_FIELD_NUMBER: _ClassVar[int] + system_type: SystemInfo.TruffleType + firmware_version: FirmwareVersion + hardware_info: _hardware_info_pb2.HardwareInfo + def __init__(self, system_type: _Optional[_Union[SystemInfo.TruffleType, str]] = ..., firmware_version: _Optional[_Union[FirmwareVersion, _Mapping]] = ..., hardware_info: _Optional[_Union[_hardware_info_pb2.HardwareInfo, _Mapping]] = ...) -> None: ... + +class SystemCheckForUpdateRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class SystemCheckForUpdateResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class SystemGetIDRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class SystemGetIDResponse(_message.Message): + __slots__ = ("truffle_id", "serial_number") + TRUFFLE_ID_FIELD_NUMBER: _ClassVar[int] + SERIAL_NUMBER_FIELD_NUMBER: _ClassVar[int] + truffle_id: str + serial_number: str + def __init__(self, truffle_id: _Optional[str] = ..., serial_number: _Optional[str] = ...) -> None: ... diff --git a/truffle/os/system_info_pb2_grpc.py b/truffle/os/system_info_pb2_grpc.py new file mode 100644 index 0000000..b4a31ff --- /dev/null +++ b/truffle/os/system_info_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/system_info_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/system_settings_pb2.py b/truffle/os/system_settings_pb2.py new file mode 100644 index 0000000..93de2d3 --- /dev/null +++ b/truffle/os/system_settings_pb2.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/system_settings.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/system_settings.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.os import hardware_settings_pb2 as truffle_dot_os_dot_hardware__settings__pb2 + +from truffle.os.hardware_settings_pb2 import * + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n truffle/os/system_settings.proto\x12\ntruffle.os\x1a\"truffle/os/hardware_settings.proto\"\xac\x01\n\x0eSystemSettings\x12<\n\x11hardware_settings\x18\x01 \x01(\x0b\x32\x1c.truffle.os.HardwareSettingsH\x00\x88\x01\x01\x12\x34\n\rtask_settings\x18\x02 \x01(\x0b\x32\x18.truffle.os.TaskSettingsH\x01\x88\x01\x01\x42\x14\n\x12_hardware_settingsB\x10\n\x0e_task_settings\"0\n\x0cTaskSettings\x12\x1a\n\x12\x64\x65\x66\x61ult_model_uuid\x18\x02 \x01(\tJ\x04\x08\x01\x10\x02P\x00\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.system_settings_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_SYSTEMSETTINGS']._serialized_start=85 + _globals['_SYSTEMSETTINGS']._serialized_end=257 + _globals['_TASKSETTINGS']._serialized_start=259 + _globals['_TASKSETTINGS']._serialized_end=307 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/system_settings_pb2.pyi b/truffle/os/system_settings_pb2.pyi new file mode 100644 index 0000000..16864f1 --- /dev/null +++ b/truffle/os/system_settings_pb2.pyi @@ -0,0 +1,22 @@ +from truffle.os import hardware_settings_pb2 as _hardware_settings_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union +from truffle.os.hardware_settings_pb2 import HardwareSettings as HardwareSettings + +DESCRIPTOR: _descriptor.FileDescriptor + +class SystemSettings(_message.Message): + __slots__ = ("hardware_settings", "task_settings") + HARDWARE_SETTINGS_FIELD_NUMBER: _ClassVar[int] + TASK_SETTINGS_FIELD_NUMBER: _ClassVar[int] + hardware_settings: _hardware_settings_pb2.HardwareSettings + task_settings: TaskSettings + def __init__(self, hardware_settings: _Optional[_Union[_hardware_settings_pb2.HardwareSettings, _Mapping]] = ..., task_settings: _Optional[_Union[TaskSettings, _Mapping]] = ...) -> None: ... + +class TaskSettings(_message.Message): + __slots__ = ("default_model_uuid",) + DEFAULT_MODEL_UUID_FIELD_NUMBER: _ClassVar[int] + default_model_uuid: str + def __init__(self, default_model_uuid: _Optional[str] = ...) -> None: ... diff --git a/truffle/os/system_settings_pb2_grpc.py b/truffle/os/system_settings_pb2_grpc.py new file mode 100644 index 0000000..b192150 --- /dev/null +++ b/truffle/os/system_settings_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/system_settings_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/task_actions_pb2.py b/truffle/os/task_actions_pb2.py new file mode 100644 index 0000000..6e57ed2 --- /dev/null +++ b/truffle/os/task_actions_pb2.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/task_actions.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/task_actions.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.common import file_pb2 as truffle_dot_common_dot_file__pb2 +from truffle.os import task_pb2 as truffle_dot_os_dot_task__pb2 +try: + truffle_dot_os_dot_task__info__pb2 = truffle_dot_os_dot_task__pb2.truffle_dot_os_dot_task__info__pb2 +except AttributeError: + truffle_dot_os_dot_task__info__pb2 = truffle_dot_os_dot_task__pb2.truffle.os.task_info_pb2 +try: + truffle_dot_os_dot_task__user__response__pb2 = truffle_dot_os_dot_task__pb2.truffle_dot_os_dot_task__user__response__pb2 +except AttributeError: + truffle_dot_os_dot_task__user__response__pb2 = truffle_dot_os_dot_task__pb2.truffle.os.task_user_response_pb2 +try: + truffle_dot_os_dot_task__step__pb2 = truffle_dot_os_dot_task__pb2.truffle_dot_os_dot_task__step__pb2 +except AttributeError: + truffle_dot_os_dot_task__step__pb2 = truffle_dot_os_dot_task__pb2.truffle.os.task_step_pb2 +try: + truffle_dot_common_dot_content__pb2 = truffle_dot_os_dot_task__pb2.truffle_dot_common_dot_content__pb2 +except AttributeError: + truffle_dot_common_dot_content__pb2 = truffle_dot_os_dot_task__pb2.truffle.common.content_pb2 +from truffle.os import task_target_pb2 as truffle_dot_os_dot_task__target__pb2 +from truffle.os import task_options_pb2 as truffle_dot_os_dot_task__options__pb2 +from truffle.os import task_user_response_pb2 as truffle_dot_os_dot_task__user__response__pb2 +from truffle.common import tool_provider_pb2 as truffle_dot_common_dot_tool__provider__pb2 + +from truffle.os.task_pb2 import * +from truffle.os.task_target_pb2 import * +from truffle.os.task_options_pb2 import * +from truffle.os.task_user_response_pb2 import * +from truffle.common.tool_provider_pb2 import * + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dtruffle/os/task_actions.proto\x12\ntruffle.os\x1a\x19truffle/common/file.proto\x1a\x15truffle/os/task.proto\x1a\x1ctruffle/os/task_target.proto\x1a\x1dtruffle/os/task_options.proto\x1a#truffle/os/task_user_response.proto\x1a\"truffle/common/tool_provider.proto\">\n\x14InterruptTaskRequest\x12&\n\x06target\x18\x01 \x01(\x0b\x32\x16.truffle.os.TargetTask\"\x8d\x01\n\x07NewTask\x12-\n\x0cuser_message\x18\x01 \x01(\x0b\x32\x17.truffle.os.UserMessage\x12\x11\n\tapp_uuids\x18\x02 \x03(\t\x12@\n\x14\x66iles_to_be_uploaded\x18\x03 \x03(\x0b\x32\".truffle.common.AttachedFileIntent\"\xf7\x01\n\x0fOpenTaskRequest\x12/\n\rexisting_task\x18\x01 \x01(\x0b\x32\x16.truffle.os.TargetTaskH\x00\x12\'\n\x08new_task\x18\x02 \x01(\x0b\x32\x13.truffle.os.NewTaskH\x00\x12-\n\x07options\x18\x03 \x01(\x0b\x32\x17.truffle.os.TaskOptionsH\x01\x88\x01\x01\x12\x45\n\x17\x65xternal_tool_providers\x18\x04 \x03(\x0b\x32$.truffle.common.ExternalToolProviderB\x08\n\x06targetB\n\n\x08_options\"\x88\x01\n\x1bTaskSetAvailableAppsRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x11\n\tapp_uuids\x18\x02 \x03(\t\x12\x45\n\x17\x65xternal_tool_providers\x18\x03 \x03(\x0b\x32$.truffle.common.ExternalToolProvider\"\x1e\n\x1cTaskSetAvailableAppsResponse\"\x14\n\x12TaskActionResponse\"k\n#TaskTestExternalToolProviderRequest\x12\x44\n\x16\x65xternal_tool_provider\x18\x01 \x01(\x0b\x32$.truffle.common.ExternalToolProvider\"e\n$TaskTestExternalToolProviderResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1a\n\rerror_message\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x10\n\x0e_error_messageP\x01P\x02P\x03P\x04P\x05\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.task_actions_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_INTERRUPTTASKREQUEST']._serialized_start=229 + _globals['_INTERRUPTTASKREQUEST']._serialized_end=291 + _globals['_NEWTASK']._serialized_start=294 + _globals['_NEWTASK']._serialized_end=435 + _globals['_OPENTASKREQUEST']._serialized_start=438 + _globals['_OPENTASKREQUEST']._serialized_end=685 + _globals['_TASKSETAVAILABLEAPPSREQUEST']._serialized_start=688 + _globals['_TASKSETAVAILABLEAPPSREQUEST']._serialized_end=824 + _globals['_TASKSETAVAILABLEAPPSRESPONSE']._serialized_start=826 + _globals['_TASKSETAVAILABLEAPPSRESPONSE']._serialized_end=856 + _globals['_TASKACTIONRESPONSE']._serialized_start=858 + _globals['_TASKACTIONRESPONSE']._serialized_end=878 + _globals['_TASKTESTEXTERNALTOOLPROVIDERREQUEST']._serialized_start=880 + _globals['_TASKTESTEXTERNALTOOLPROVIDERREQUEST']._serialized_end=987 + _globals['_TASKTESTEXTERNALTOOLPROVIDERRESPONSE']._serialized_start=989 + _globals['_TASKTESTEXTERNALTOOLPROVIDERRESPONSE']._serialized_end=1090 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/task_actions_pb2.pyi b/truffle/os/task_actions_pb2.pyi new file mode 100644 index 0000000..11ff9e6 --- /dev/null +++ b/truffle/os/task_actions_pb2.pyi @@ -0,0 +1,87 @@ +from truffle.common import file_pb2 as _file_pb2 +from truffle.os import task_pb2 as _task_pb2 +from truffle.os import task_info_pb2 as _task_info_pb2 +from truffle.os import task_user_response_pb2 as _task_user_response_pb2 +from truffle.os import task_step_pb2 as _task_step_pb2 +from truffle.os import task_target_pb2 as _task_target_pb2 +from truffle.os import task_options_pb2 as _task_options_pb2 +from truffle.os import task_user_response_pb2 as _task_user_response_pb2_1 +from truffle.common import tool_provider_pb2 as _tool_provider_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union +from truffle.os.task_pb2 import Task as Task +from truffle.os.task_pb2 import TasksList as TasksList +from truffle.os.task_pb2 import TaskNode as TaskNode +from truffle.os.task_pb2 import TaskStreamUpdate as TaskStreamUpdate +from truffle.os.task_target_pb2 import TargetTask as TargetTask +from truffle.os.task_options_pb2 import TaskOptions as TaskOptions +from truffle.os.task_user_response_pb2 import UserMessage as UserMessage +from truffle.os.task_user_response_pb2 import PendingUserResponse as PendingUserResponse +from truffle.os.task_user_response_pb2 import RespondToTaskRequest as RespondToTaskRequest +from truffle.common.tool_provider_pb2 import ExternalToolProvider as ExternalToolProvider +from truffle.common.tool_provider_pb2 import ExternalToolProvidersError as ExternalToolProvidersError + +DESCRIPTOR: _descriptor.FileDescriptor + +class InterruptTaskRequest(_message.Message): + __slots__ = ("target",) + TARGET_FIELD_NUMBER: _ClassVar[int] + target: _task_target_pb2.TargetTask + def __init__(self, target: _Optional[_Union[_task_target_pb2.TargetTask, _Mapping]] = ...) -> None: ... + +class NewTask(_message.Message): + __slots__ = ("user_message", "app_uuids", "files_to_be_uploaded") + USER_MESSAGE_FIELD_NUMBER: _ClassVar[int] + APP_UUIDS_FIELD_NUMBER: _ClassVar[int] + FILES_TO_BE_UPLOADED_FIELD_NUMBER: _ClassVar[int] + user_message: _task_user_response_pb2_1.UserMessage + app_uuids: _containers.RepeatedScalarFieldContainer[str] + files_to_be_uploaded: _containers.RepeatedCompositeFieldContainer[_file_pb2.AttachedFileIntent] + def __init__(self, user_message: _Optional[_Union[_task_user_response_pb2_1.UserMessage, _Mapping]] = ..., app_uuids: _Optional[_Iterable[str]] = ..., files_to_be_uploaded: _Optional[_Iterable[_Union[_file_pb2.AttachedFileIntent, _Mapping]]] = ...) -> None: ... + +class OpenTaskRequest(_message.Message): + __slots__ = ("existing_task", "new_task", "options", "external_tool_providers") + EXISTING_TASK_FIELD_NUMBER: _ClassVar[int] + NEW_TASK_FIELD_NUMBER: _ClassVar[int] + OPTIONS_FIELD_NUMBER: _ClassVar[int] + EXTERNAL_TOOL_PROVIDERS_FIELD_NUMBER: _ClassVar[int] + existing_task: _task_target_pb2.TargetTask + new_task: NewTask + options: _task_options_pb2.TaskOptions + external_tool_providers: _containers.RepeatedCompositeFieldContainer[_tool_provider_pb2.ExternalToolProvider] + def __init__(self, existing_task: _Optional[_Union[_task_target_pb2.TargetTask, _Mapping]] = ..., new_task: _Optional[_Union[NewTask, _Mapping]] = ..., options: _Optional[_Union[_task_options_pb2.TaskOptions, _Mapping]] = ..., external_tool_providers: _Optional[_Iterable[_Union[_tool_provider_pb2.ExternalToolProvider, _Mapping]]] = ...) -> None: ... + +class TaskSetAvailableAppsRequest(_message.Message): + __slots__ = ("task_id", "app_uuids", "external_tool_providers") + TASK_ID_FIELD_NUMBER: _ClassVar[int] + APP_UUIDS_FIELD_NUMBER: _ClassVar[int] + EXTERNAL_TOOL_PROVIDERS_FIELD_NUMBER: _ClassVar[int] + task_id: str + app_uuids: _containers.RepeatedScalarFieldContainer[str] + external_tool_providers: _containers.RepeatedCompositeFieldContainer[_tool_provider_pb2.ExternalToolProvider] + def __init__(self, task_id: _Optional[str] = ..., app_uuids: _Optional[_Iterable[str]] = ..., external_tool_providers: _Optional[_Iterable[_Union[_tool_provider_pb2.ExternalToolProvider, _Mapping]]] = ...) -> None: ... + +class TaskSetAvailableAppsResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class TaskActionResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class TaskTestExternalToolProviderRequest(_message.Message): + __slots__ = ("external_tool_provider",) + EXTERNAL_TOOL_PROVIDER_FIELD_NUMBER: _ClassVar[int] + external_tool_provider: _tool_provider_pb2.ExternalToolProvider + def __init__(self, external_tool_provider: _Optional[_Union[_tool_provider_pb2.ExternalToolProvider, _Mapping]] = ...) -> None: ... + +class TaskTestExternalToolProviderResponse(_message.Message): + __slots__ = ("success", "error_message") + SUCCESS_FIELD_NUMBER: _ClassVar[int] + ERROR_MESSAGE_FIELD_NUMBER: _ClassVar[int] + success: bool + error_message: str + def __init__(self, success: bool = ..., error_message: _Optional[str] = ...) -> None: ... diff --git a/truffle/os/task_actions_pb2_grpc.py b/truffle/os/task_actions_pb2_grpc.py new file mode 100644 index 0000000..1b4d731 --- /dev/null +++ b/truffle/os/task_actions_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/task_actions_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/task_error_pb2.py b/truffle/os/task_error_pb2.py new file mode 100644 index 0000000..a78d4c0 --- /dev/null +++ b/truffle/os/task_error_pb2.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/task_error.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/task_error.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.common import tool_provider_pb2 as truffle_dot_common_dot_tool__provider__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1btruffle/os/task_error.proto\x12\ntruffle.os\x1a\"truffle/common/tool_provider.proto\"\x87\x01\n\tTaskError\x12\x10\n\x08is_fatal\x18\x01 \x01(\x08\x12\x11\n\x07message\x18\x02 \x01(\tH\x00\x12L\n\x16\x65xternal_tool_provider\x18\x03 \x01(\x0b\x32*.truffle.common.ExternalToolProvidersErrorH\x00\x42\x07\n\x05\x65rrorb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.task_error_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_TASKERROR']._serialized_start=80 + _globals['_TASKERROR']._serialized_end=215 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/task_error_pb2.pyi b/truffle/os/task_error_pb2.pyi new file mode 100644 index 0000000..f08099c --- /dev/null +++ b/truffle/os/task_error_pb2.pyi @@ -0,0 +1,17 @@ +from truffle.common import tool_provider_pb2 as _tool_provider_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class TaskError(_message.Message): + __slots__ = ("is_fatal", "message", "external_tool_provider") + IS_FATAL_FIELD_NUMBER: _ClassVar[int] + MESSAGE_FIELD_NUMBER: _ClassVar[int] + EXTERNAL_TOOL_PROVIDER_FIELD_NUMBER: _ClassVar[int] + is_fatal: bool + message: str + external_tool_provider: _tool_provider_pb2.ExternalToolProvidersError + def __init__(self, is_fatal: bool = ..., message: _Optional[str] = ..., external_tool_provider: _Optional[_Union[_tool_provider_pb2.ExternalToolProvidersError, _Mapping]] = ...) -> None: ... diff --git a/truffle/os/task_error_pb2_grpc.py b/truffle/os/task_error_pb2_grpc.py new file mode 100644 index 0000000..7876bc4 --- /dev/null +++ b/truffle/os/task_error_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/task_error_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/task_info_pb2.py b/truffle/os/task_info_pb2.py new file mode 100644 index 0000000..0d6aa9b --- /dev/null +++ b/truffle/os/task_info_pb2.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/task_info.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/task_info.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from truffle.os import task_options_pb2 as truffle_dot_os_dot_task__options__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1atruffle/os/task_info.proto\x12\ntruffle.os\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1dtruffle/os/task_options.proto\"\xd7\x03\n\x08TaskInfo\x12\x34\n\trun_state\x18\x01 \x01(\x0e\x32!.truffle.os.TaskInfo.TaskRunState\x12\x11\n\tapp_uuids\x18\x02 \x03(\t\x12\x17\n\ntask_title\x18\x05 \x01(\tH\x00\x88\x01\x01\x12(\n\x07options\x18\x06 \x01(\x0b\x32\x17.truffle.os.TaskOptions\x12+\n\x07\x63reated\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x30\n\x0clast_updated\x18\t \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x17\n\naccess_uri\x18\x08 \x01(\tH\x01\x88\x01\x01\"\xa8\x01\n\x0cTaskRunState\x12\x1a\n\x16TASK_RUN_STATE_INVALID\x10\x00\x12\x1f\n\x1bTASK_RUN_STATE_CREATING_NEW\x10\x01\x12!\n\x1dTASK_RUN_STATE_RELOADING_PREV\x10\x02\x12\x18\n\x14TASK_RUN_STATE_READY\x10\x03\x12\x1e\n\x1aTASK_RUN_STATE_FATAL_ERROR\x10\x05\x42\r\n\x0b_task_titleB\r\n\x0b_access_uri*X\n\tTaskFlags\x12\x13\n\x0fTASK_FLAGS_NONE\x10\x00\x12\x0f\n\x0bTASK_ACTIVE\x10\x01\x12\x13\n\x0fTASK_NO_RESPOND\x10\x02\x12\x10\n\x0cTASK_BLOCKED\x10\x04\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.task_info_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_TASKFLAGS']._serialized_start=580 + _globals['_TASKFLAGS']._serialized_end=668 + _globals['_TASKINFO']._serialized_start=107 + _globals['_TASKINFO']._serialized_end=578 + _globals['_TASKINFO_TASKRUNSTATE']._serialized_start=380 + _globals['_TASKINFO_TASKRUNSTATE']._serialized_end=548 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/task_info_pb2.pyi b/truffle/os/task_info_pb2.pyi new file mode 100644 index 0000000..00f2f90 --- /dev/null +++ b/truffle/os/task_info_pb2.pyi @@ -0,0 +1,51 @@ +from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from truffle.os import task_options_pb2 as _task_options_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class TaskFlags(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + TASK_FLAGS_NONE: _ClassVar[TaskFlags] + TASK_ACTIVE: _ClassVar[TaskFlags] + TASK_NO_RESPOND: _ClassVar[TaskFlags] + TASK_BLOCKED: _ClassVar[TaskFlags] +TASK_FLAGS_NONE: TaskFlags +TASK_ACTIVE: TaskFlags +TASK_NO_RESPOND: TaskFlags +TASK_BLOCKED: TaskFlags + +class TaskInfo(_message.Message): + __slots__ = ("run_state", "app_uuids", "task_title", "options", "created", "last_updated", "access_uri") + class TaskRunState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + TASK_RUN_STATE_INVALID: _ClassVar[TaskInfo.TaskRunState] + TASK_RUN_STATE_CREATING_NEW: _ClassVar[TaskInfo.TaskRunState] + TASK_RUN_STATE_RELOADING_PREV: _ClassVar[TaskInfo.TaskRunState] + TASK_RUN_STATE_READY: _ClassVar[TaskInfo.TaskRunState] + TASK_RUN_STATE_FATAL_ERROR: _ClassVar[TaskInfo.TaskRunState] + TASK_RUN_STATE_INVALID: TaskInfo.TaskRunState + TASK_RUN_STATE_CREATING_NEW: TaskInfo.TaskRunState + TASK_RUN_STATE_RELOADING_PREV: TaskInfo.TaskRunState + TASK_RUN_STATE_READY: TaskInfo.TaskRunState + TASK_RUN_STATE_FATAL_ERROR: TaskInfo.TaskRunState + RUN_STATE_FIELD_NUMBER: _ClassVar[int] + APP_UUIDS_FIELD_NUMBER: _ClassVar[int] + TASK_TITLE_FIELD_NUMBER: _ClassVar[int] + OPTIONS_FIELD_NUMBER: _ClassVar[int] + CREATED_FIELD_NUMBER: _ClassVar[int] + LAST_UPDATED_FIELD_NUMBER: _ClassVar[int] + ACCESS_URI_FIELD_NUMBER: _ClassVar[int] + run_state: TaskInfo.TaskRunState + app_uuids: _containers.RepeatedScalarFieldContainer[str] + task_title: str + options: _task_options_pb2.TaskOptions + created: _timestamp_pb2.Timestamp + last_updated: _timestamp_pb2.Timestamp + access_uri: str + def __init__(self, run_state: _Optional[_Union[TaskInfo.TaskRunState, str]] = ..., app_uuids: _Optional[_Iterable[str]] = ..., task_title: _Optional[str] = ..., options: _Optional[_Union[_task_options_pb2.TaskOptions, _Mapping]] = ..., created: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., last_updated: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., access_uri: _Optional[str] = ...) -> None: ... diff --git a/truffle/os/task_info_pb2_grpc.py b/truffle/os/task_info_pb2_grpc.py new file mode 100644 index 0000000..b2a4954 --- /dev/null +++ b/truffle/os/task_info_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/task_info_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/task_options_pb2.py b/truffle/os/task_options_pb2.py new file mode 100644 index 0000000..f809068 --- /dev/null +++ b/truffle/os/task_options_pb2.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/task_options.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/task_options.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dtruffle/os/task_options.proto\x12\ntruffle.os\x1a\x1egoogle/protobuf/duration.proto\"\r\n\x0bTaskOptionsb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.task_options_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_TASKOPTIONS']._serialized_start=77 + _globals['_TASKOPTIONS']._serialized_end=90 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/task_options_pb2.pyi b/truffle/os/task_options_pb2.pyi new file mode 100644 index 0000000..765098f --- /dev/null +++ b/truffle/os/task_options_pb2.pyi @@ -0,0 +1,10 @@ +from google.protobuf import duration_pb2 as _duration_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar + +DESCRIPTOR: _descriptor.FileDescriptor + +class TaskOptions(_message.Message): + __slots__ = () + def __init__(self) -> None: ... diff --git a/truffle/os/task_options_pb2_grpc.py b/truffle/os/task_options_pb2_grpc.py new file mode 100644 index 0000000..11e3f5b --- /dev/null +++ b/truffle/os/task_options_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/task_options_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/task_pb2.py b/truffle/os/task_pb2.py new file mode 100644 index 0000000..b50c38c --- /dev/null +++ b/truffle/os/task_pb2.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/task.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/task.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from truffle.common import file_pb2 as truffle_dot_common_dot_file__pb2 +from truffle.os import task_info_pb2 as truffle_dot_os_dot_task__info__pb2 +from truffle.os import task_user_response_pb2 as truffle_dot_os_dot_task__user__response__pb2 +from truffle.os import task_step_pb2 as truffle_dot_os_dot_task__step__pb2 +try: + truffle_dot_common_dot_content__pb2 = truffle_dot_os_dot_task__step__pb2.truffle_dot_common_dot_content__pb2 +except AttributeError: + truffle_dot_common_dot_content__pb2 = truffle_dot_os_dot_task__step__pb2.truffle.common.content_pb2 +from truffle.os import task_error_pb2 as truffle_dot_os_dot_task__error__pb2 + +from truffle.os.task_info_pb2 import * +from truffle.os.task_user_response_pb2 import * +from truffle.os.task_step_pb2 import * + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15truffle/os/task.proto\x12\ntruffle.os\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x19truffle/common/file.proto\x1a\x1atruffle/os/task_info.proto\x1a#truffle/os/task_user_response.proto\x1a\x1atruffle/os/task_step.proto\x1a\x1btruffle/os/task_error.proto\"t\n\x04Task\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\"\n\x04info\x18\x02 \x01(\x0b\x32\x14.truffle.os.TaskInfo\x12\x12\n\ntask_flags\x18\x03 \x01(\r\x12#\n\x05nodes\x18\x05 \x03(\x0b\x32\x14.truffle.os.TaskNode\",\n\tTasksList\x12\x1f\n\x05tasks\x18\x01 \x03(\x0b\x32\x10.truffle.os.Task\"\xc0\x01\n\x08TaskNode\x12\n\n\x02id\x18\x01 \x01(\r\x12\x11\n\tparent_id\x18\x02 \x01(\r\x12\x11\n\tchild_ids\x18\x03 \x03(\r\x12+\n\x05\x66iles\x18\x08 \x03(\x0b\x32\x1c.truffle.common.AttachedFile\x12 \n\x04step\x18\t \x01(\x0b\x32\x10.truffle.os.StepH\x00\x12+\n\x08user_msg\x18\n \x01(\x0b\x32\x17.truffle.os.UserMessageH\x00\x42\x06\n\x04item\"\xaf\x01\n\x10TaskStreamUpdate\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\'\n\x04info\x18\x03 \x01(\x0b\x32\x14.truffle.os.TaskInfoH\x00\x88\x01\x01\x12#\n\x05nodes\x18\x02 \x03(\x0b\x32\x14.truffle.os.TaskNode\x12)\n\x05\x65rror\x18\x05 \x01(\x0b\x32\x15.truffle.os.TaskErrorH\x01\x88\x01\x01\x42\x07\n\x05_infoB\x08\n\x06_errorP\x02P\x03P\x04\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.task_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_TASK']._serialized_start=219 + _globals['_TASK']._serialized_end=335 + _globals['_TASKSLIST']._serialized_start=337 + _globals['_TASKSLIST']._serialized_end=381 + _globals['_TASKNODE']._serialized_start=384 + _globals['_TASKNODE']._serialized_end=576 + _globals['_TASKSTREAMUPDATE']._serialized_start=579 + _globals['_TASKSTREAMUPDATE']._serialized_end=754 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/task_pb2.pyi b/truffle/os/task_pb2.pyi new file mode 100644 index 0000000..2778deb --- /dev/null +++ b/truffle/os/task_pb2.pyi @@ -0,0 +1,70 @@ +from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from truffle.common import file_pb2 as _file_pb2 +from truffle.os import task_info_pb2 as _task_info_pb2 +from truffle.os import task_user_response_pb2 as _task_user_response_pb2 +from truffle.os import task_step_pb2 as _task_step_pb2 +from truffle.common import content_pb2 as _content_pb2 +from truffle.os import task_error_pb2 as _task_error_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union +from truffle.os.task_info_pb2 import TaskInfo as TaskInfo +from truffle.os.task_info_pb2 import TaskFlags as TaskFlags +from truffle.os.task_user_response_pb2 import UserMessage as UserMessage +from truffle.os.task_user_response_pb2 import PendingUserResponse as PendingUserResponse +from truffle.os.task_user_response_pb2 import RespondToTaskRequest as RespondToTaskRequest +from truffle.os.task_step_pb2 import Step as Step + +DESCRIPTOR: _descriptor.FileDescriptor +TASK_FLAGS_NONE: _task_info_pb2.TaskFlags +TASK_ACTIVE: _task_info_pb2.TaskFlags +TASK_NO_RESPOND: _task_info_pb2.TaskFlags +TASK_BLOCKED: _task_info_pb2.TaskFlags + +class Task(_message.Message): + __slots__ = ("task_id", "info", "task_flags", "nodes") + TASK_ID_FIELD_NUMBER: _ClassVar[int] + INFO_FIELD_NUMBER: _ClassVar[int] + TASK_FLAGS_FIELD_NUMBER: _ClassVar[int] + NODES_FIELD_NUMBER: _ClassVar[int] + task_id: str + info: _task_info_pb2.TaskInfo + task_flags: int + nodes: _containers.RepeatedCompositeFieldContainer[TaskNode] + def __init__(self, task_id: _Optional[str] = ..., info: _Optional[_Union[_task_info_pb2.TaskInfo, _Mapping]] = ..., task_flags: _Optional[int] = ..., nodes: _Optional[_Iterable[_Union[TaskNode, _Mapping]]] = ...) -> None: ... + +class TasksList(_message.Message): + __slots__ = ("tasks",) + TASKS_FIELD_NUMBER: _ClassVar[int] + tasks: _containers.RepeatedCompositeFieldContainer[Task] + def __init__(self, tasks: _Optional[_Iterable[_Union[Task, _Mapping]]] = ...) -> None: ... + +class TaskNode(_message.Message): + __slots__ = ("id", "parent_id", "child_ids", "files", "step", "user_msg") + ID_FIELD_NUMBER: _ClassVar[int] + PARENT_ID_FIELD_NUMBER: _ClassVar[int] + CHILD_IDS_FIELD_NUMBER: _ClassVar[int] + FILES_FIELD_NUMBER: _ClassVar[int] + STEP_FIELD_NUMBER: _ClassVar[int] + USER_MSG_FIELD_NUMBER: _ClassVar[int] + id: int + parent_id: int + child_ids: _containers.RepeatedScalarFieldContainer[int] + files: _containers.RepeatedCompositeFieldContainer[_file_pb2.AttachedFile] + step: _task_step_pb2.Step + user_msg: _task_user_response_pb2.UserMessage + def __init__(self, id: _Optional[int] = ..., parent_id: _Optional[int] = ..., child_ids: _Optional[_Iterable[int]] = ..., files: _Optional[_Iterable[_Union[_file_pb2.AttachedFile, _Mapping]]] = ..., step: _Optional[_Union[_task_step_pb2.Step, _Mapping]] = ..., user_msg: _Optional[_Union[_task_user_response_pb2.UserMessage, _Mapping]] = ...) -> None: ... + +class TaskStreamUpdate(_message.Message): + __slots__ = ("task_id", "info", "nodes", "error") + TASK_ID_FIELD_NUMBER: _ClassVar[int] + INFO_FIELD_NUMBER: _ClassVar[int] + NODES_FIELD_NUMBER: _ClassVar[int] + ERROR_FIELD_NUMBER: _ClassVar[int] + task_id: str + info: _task_info_pb2.TaskInfo + nodes: _containers.RepeatedCompositeFieldContainer[TaskNode] + error: _task_error_pb2.TaskError + def __init__(self, task_id: _Optional[str] = ..., info: _Optional[_Union[_task_info_pb2.TaskInfo, _Mapping]] = ..., nodes: _Optional[_Iterable[_Union[TaskNode, _Mapping]]] = ..., error: _Optional[_Union[_task_error_pb2.TaskError, _Mapping]] = ...) -> None: ... diff --git a/truffle/os/task_pb2_grpc.py b/truffle/os/task_pb2_grpc.py new file mode 100644 index 0000000..563c6fb --- /dev/null +++ b/truffle/os/task_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/task_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/task_queries_pb2.py b/truffle/os/task_queries_pb2.py new file mode 100644 index 0000000..8c23762 --- /dev/null +++ b/truffle/os/task_queries_pb2.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/task_queries.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/task_queries.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.os import task_info_pb2 as truffle_dot_os_dot_task__info__pb2 +from truffle.os import task_pb2 as truffle_dot_os_dot_task__pb2 +try: + truffle_dot_os_dot_task__info__pb2 = truffle_dot_os_dot_task__pb2.truffle_dot_os_dot_task__info__pb2 +except AttributeError: + truffle_dot_os_dot_task__info__pb2 = truffle_dot_os_dot_task__pb2.truffle.os.task_info_pb2 +try: + truffle_dot_os_dot_task__user__response__pb2 = truffle_dot_os_dot_task__pb2.truffle_dot_os_dot_task__user__response__pb2 +except AttributeError: + truffle_dot_os_dot_task__user__response__pb2 = truffle_dot_os_dot_task__pb2.truffle.os.task_user_response_pb2 +try: + truffle_dot_os_dot_task__step__pb2 = truffle_dot_os_dot_task__pb2.truffle_dot_os_dot_task__step__pb2 +except AttributeError: + truffle_dot_os_dot_task__step__pb2 = truffle_dot_os_dot_task__pb2.truffle.os.task_step_pb2 +try: + truffle_dot_common_dot_content__pb2 = truffle_dot_os_dot_task__pb2.truffle_dot_common_dot_content__pb2 +except AttributeError: + truffle_dot_common_dot_content__pb2 = truffle_dot_os_dot_task__pb2.truffle.common.content_pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dtruffle/os/task_queries.proto\x12\ntruffle.os\x1a\x1atruffle/os/task_info.proto\x1a\x15truffle/os/task.proto\"7\n\x0fGetTasksRequest\x12\x10\n\x08task_ids\x18\x01 \x03(\t\x12\x12\n\nwith_nodes\x18\x03 \x01(\x08\"8\n\x11GetOneTaskRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x12\n\nwith_nodes\x18\x03 \x01(\x08\"T\n\x13GetTaskInfosRequest\x12\x16\n\x0etarget_task_id\x18\x01 \x01(\t\x12\x12\n\nmax_before\x18\x02 \x01(\x05\x12\x11\n\tmax_after\x18\x03 \x01(\x05\"\xee\x01\n\x14GetTaskInfosResponse\x12=\n\x07\x65ntries\x18\x01 \x03(\x0b\x32,.truffle.os.GetTaskInfosResponse.TaskPreview\x12\x17\n\x0ftotal_num_tasks\x18\x02 \x01(\r\x1a~\n\x0bTaskPreview\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\"\n\x04info\x18\x02 \x01(\x0b\x32\x14.truffle.os.TaskInfo\x12,\n\tlast_node\x18\x03 \x01(\x0b\x32\x14.truffle.os.TaskNodeH\x00\x88\x01\x01\x42\x0c\n\n_last_nodeb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.task_queries_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_GETTASKSREQUEST']._serialized_start=96 + _globals['_GETTASKSREQUEST']._serialized_end=151 + _globals['_GETONETASKREQUEST']._serialized_start=153 + _globals['_GETONETASKREQUEST']._serialized_end=209 + _globals['_GETTASKINFOSREQUEST']._serialized_start=211 + _globals['_GETTASKINFOSREQUEST']._serialized_end=295 + _globals['_GETTASKINFOSRESPONSE']._serialized_start=298 + _globals['_GETTASKINFOSRESPONSE']._serialized_end=536 + _globals['_GETTASKINFOSRESPONSE_TASKPREVIEW']._serialized_start=410 + _globals['_GETTASKINFOSRESPONSE_TASKPREVIEW']._serialized_end=536 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/task_queries_pb2.pyi b/truffle/os/task_queries_pb2.pyi new file mode 100644 index 0000000..5957d64 --- /dev/null +++ b/truffle/os/task_queries_pb2.pyi @@ -0,0 +1,55 @@ +from truffle.os import task_info_pb2 as _task_info_pb2 +from truffle.os import task_pb2 as _task_pb2 +from truffle.os import task_info_pb2 as _task_info_pb2_1 +from truffle.os import task_user_response_pb2 as _task_user_response_pb2 +from truffle.os import task_step_pb2 as _task_step_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class GetTasksRequest(_message.Message): + __slots__ = ("task_ids", "with_nodes") + TASK_IDS_FIELD_NUMBER: _ClassVar[int] + WITH_NODES_FIELD_NUMBER: _ClassVar[int] + task_ids: _containers.RepeatedScalarFieldContainer[str] + with_nodes: bool + def __init__(self, task_ids: _Optional[_Iterable[str]] = ..., with_nodes: bool = ...) -> None: ... + +class GetOneTaskRequest(_message.Message): + __slots__ = ("task_id", "with_nodes") + TASK_ID_FIELD_NUMBER: _ClassVar[int] + WITH_NODES_FIELD_NUMBER: _ClassVar[int] + task_id: str + with_nodes: bool + def __init__(self, task_id: _Optional[str] = ..., with_nodes: bool = ...) -> None: ... + +class GetTaskInfosRequest(_message.Message): + __slots__ = ("target_task_id", "max_before", "max_after") + TARGET_TASK_ID_FIELD_NUMBER: _ClassVar[int] + MAX_BEFORE_FIELD_NUMBER: _ClassVar[int] + MAX_AFTER_FIELD_NUMBER: _ClassVar[int] + target_task_id: str + max_before: int + max_after: int + def __init__(self, target_task_id: _Optional[str] = ..., max_before: _Optional[int] = ..., max_after: _Optional[int] = ...) -> None: ... + +class GetTaskInfosResponse(_message.Message): + __slots__ = ("entries", "total_num_tasks") + class TaskPreview(_message.Message): + __slots__ = ("task_id", "info", "last_node") + TASK_ID_FIELD_NUMBER: _ClassVar[int] + INFO_FIELD_NUMBER: _ClassVar[int] + LAST_NODE_FIELD_NUMBER: _ClassVar[int] + task_id: str + info: _task_info_pb2_1.TaskInfo + last_node: _task_pb2.TaskNode + def __init__(self, task_id: _Optional[str] = ..., info: _Optional[_Union[_task_info_pb2_1.TaskInfo, _Mapping]] = ..., last_node: _Optional[_Union[_task_pb2.TaskNode, _Mapping]] = ...) -> None: ... + ENTRIES_FIELD_NUMBER: _ClassVar[int] + TOTAL_NUM_TASKS_FIELD_NUMBER: _ClassVar[int] + entries: _containers.RepeatedCompositeFieldContainer[GetTaskInfosResponse.TaskPreview] + total_num_tasks: int + def __init__(self, entries: _Optional[_Iterable[_Union[GetTaskInfosResponse.TaskPreview, _Mapping]]] = ..., total_num_tasks: _Optional[int] = ...) -> None: ... diff --git a/truffle/os/task_queries_pb2_grpc.py b/truffle/os/task_queries_pb2_grpc.py new file mode 100644 index 0000000..bd31e7f --- /dev/null +++ b/truffle/os/task_queries_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/task_queries_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/task_search_pb2.py b/truffle/os/task_search_pb2.py new file mode 100644 index 0000000..2fcf123 --- /dev/null +++ b/truffle/os/task_search_pb2.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/task_search.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/task_search.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from truffle.os import task_info_pb2 as truffle_dot_os_dot_task__info__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1ctruffle/os/task_search.proto\x12\ntruffle.os\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1atruffle/os/task_info.proto\"H\n\x12SearchTasksRequest\x12\r\n\x05query\x18\x01 \x01(\t\x12\x13\n\x0bmax_results\x18\x02 \x01(\x05\x12\x0e\n\x06offset\x18\x03 \x01(\x05\"\xe2\x01\n\x10TaskSearchResult\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\'\n\ttask_info\x18\x02 \x01(\x0b\x32\x14.truffle.os.TaskInfo\x12-\n\ttimestamp\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12?\n\x07\x63ontent\x18\x04 \x01(\x0b\x32..truffle.os.TaskSearchResult.TaskSearchContent\x1a$\n\x11TaskSearchContent\x12\x0f\n\x07snippet\x18\x01 \x01(\t\"s\n\x13SearchTasksResponse\x12\x15\n\rtotal_results\x18\x01 \x01(\x05\x12\x16\n\x0e\x63urrent_offset\x18\x02 \x01(\x05\x12-\n\x07results\x18\x03 \x03(\x0b\x32\x1c.truffle.os.TaskSearchResultb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.task_search_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_SEARCHTASKSREQUEST']._serialized_start=105 + _globals['_SEARCHTASKSREQUEST']._serialized_end=177 + _globals['_TASKSEARCHRESULT']._serialized_start=180 + _globals['_TASKSEARCHRESULT']._serialized_end=406 + _globals['_TASKSEARCHRESULT_TASKSEARCHCONTENT']._serialized_start=370 + _globals['_TASKSEARCHRESULT_TASKSEARCHCONTENT']._serialized_end=406 + _globals['_SEARCHTASKSRESPONSE']._serialized_start=408 + _globals['_SEARCHTASKSRESPONSE']._serialized_end=523 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/task_search_pb2.pyi b/truffle/os/task_search_pb2.pyi new file mode 100644 index 0000000..789a436 --- /dev/null +++ b/truffle/os/task_search_pb2.pyi @@ -0,0 +1,46 @@ +from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from truffle.os import task_info_pb2 as _task_info_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class SearchTasksRequest(_message.Message): + __slots__ = ("query", "max_results", "offset") + QUERY_FIELD_NUMBER: _ClassVar[int] + MAX_RESULTS_FIELD_NUMBER: _ClassVar[int] + OFFSET_FIELD_NUMBER: _ClassVar[int] + query: str + max_results: int + offset: int + def __init__(self, query: _Optional[str] = ..., max_results: _Optional[int] = ..., offset: _Optional[int] = ...) -> None: ... + +class TaskSearchResult(_message.Message): + __slots__ = ("task_id", "task_info", "timestamp", "content") + class TaskSearchContent(_message.Message): + __slots__ = ("snippet",) + SNIPPET_FIELD_NUMBER: _ClassVar[int] + snippet: str + def __init__(self, snippet: _Optional[str] = ...) -> None: ... + TASK_ID_FIELD_NUMBER: _ClassVar[int] + TASK_INFO_FIELD_NUMBER: _ClassVar[int] + TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + CONTENT_FIELD_NUMBER: _ClassVar[int] + task_id: str + task_info: _task_info_pb2.TaskInfo + timestamp: _timestamp_pb2.Timestamp + content: TaskSearchResult.TaskSearchContent + def __init__(self, task_id: _Optional[str] = ..., task_info: _Optional[_Union[_task_info_pb2.TaskInfo, _Mapping]] = ..., timestamp: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., content: _Optional[_Union[TaskSearchResult.TaskSearchContent, _Mapping]] = ...) -> None: ... + +class SearchTasksResponse(_message.Message): + __slots__ = ("total_results", "current_offset", "results") + TOTAL_RESULTS_FIELD_NUMBER: _ClassVar[int] + CURRENT_OFFSET_FIELD_NUMBER: _ClassVar[int] + RESULTS_FIELD_NUMBER: _ClassVar[int] + total_results: int + current_offset: int + results: _containers.RepeatedCompositeFieldContainer[TaskSearchResult] + def __init__(self, total_results: _Optional[int] = ..., current_offset: _Optional[int] = ..., results: _Optional[_Iterable[_Union[TaskSearchResult, _Mapping]]] = ...) -> None: ... diff --git a/truffle/os/task_search_pb2_grpc.py b/truffle/os/task_search_pb2_grpc.py new file mode 100644 index 0000000..022f753 --- /dev/null +++ b/truffle/os/task_search_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/task_search_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/task_step_pb2.py b/truffle/os/task_step_pb2.py new file mode 100644 index 0000000..3f55d2e --- /dev/null +++ b/truffle/os/task_step_pb2.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/task_step.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/task_step.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.os import task_user_response_pb2 as truffle_dot_os_dot_task__user__response__pb2 +from truffle.common import content_pb2 as truffle_dot_common_dot_content__pb2 +from truffle.infer import usage_pb2 as truffle_dot_infer_dot_usage__pb2 + +from truffle.common.content_pb2 import * + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1atruffle/os/task_step.proto\x12\ntruffle.os\x1a#truffle/os/task_user_response.proto\x1a\x1ctruffle/common/content.proto\x1a\x19truffle/infer/usage.proto\"\x8d\x08\n\x04Step\x12.\n\x05state\x18\x01 \x01(\x0e\x32\x1a.truffle.os.Step.StepStateH\x00\x88\x01\x01\x12;\n\ruser_response\x18\n \x01(\x0b\x32\x1f.truffle.os.PendingUserResponseH\x01\x88\x01\x01\x12+\n\x08thinking\x18\x02 \x01(\x0b\x32\x19.truffle.os.Step.Thinking\x12-\n\ntool_calls\x18\x03 \x03(\x0b\x32\x19.truffle.os.Step.ToolCall\x12+\n\texecution\x18\x04 \x01(\x0b\x32\x18.truffle.os.Step.Execute\x12)\n\x07results\x18\x05 \x01(\x0b\x32\x18.truffle.os.Step.Results\x12)\n\x07metrics\x18\x06 \x01(\x0b\x32\x18.truffle.os.Step.Metrics\x12\x17\n\nmodel_uuid\x18\x07 \x01(\tH\x02\x88\x01\x01\x1a\x93\x01\n\x08Thinking\x12\x12\n\ncot_chunks\x18\x01 \x03(\t\x12\x15\n\rcot_summaries\x18\x02 \x03(\t\x12\x17\n\nraw_output\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x11thinking_finished\x18\x04 \x01(\x08H\x01\x88\x01\x01\x42\r\n\x0b_raw_outputB\x14\n\x12_thinking_finished\x1aR\n\x08ToolCall\x12\x16\n\ttool_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07summary\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x0c\n\n_tool_nameB\n\n\x08_summary\x1a\x1f\n\x07\x45xecute\x12\x14\n\x0ctool_updates\x18\x01 \x03(\t\x1a\xbd\x01\n\x07Results\x12\x14\n\x07summary\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x63ontent\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1f\n\x12\x63ontent_incomplete\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12.\n\x03web\x18\x04 \x01(\x0b\x32\x1c.truffle.common.WebComponentH\x03\x88\x01\x01\x42\n\n\x08_summaryB\n\n\x08_contentB\x15\n\x13_content_incompleteB\x06\n\x04_web\x1aQ\n\x07Metrics\x12\x32\n\x0finference_usage\x18\x01 \x01(\x0b\x32\x14.truffle.infer.UsageH\x00\x88\x01\x01\x42\x12\n\x10_inference_usage\"W\n\tStepState\x12\x10\n\x0cSTEP_INVALID\x10\x00\x12\x13\n\x0fSTEP_GENERATING\x10\x01\x12\x12\n\x0eSTEP_EXECUTING\x10\x02\x12\x0f\n\x0bSTEP_RESULT\x10\x03\x42\x08\n\x06_stateB\x10\n\x0e_user_responseB\r\n\x0b_model_uuidP\x01\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.task_step_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_STEP']._serialized_start=137 + _globals['_STEP']._serialized_end=1174 + _globals['_STEP_THINKING']._serialized_start=503 + _globals['_STEP_THINKING']._serialized_end=650 + _globals['_STEP_TOOLCALL']._serialized_start=652 + _globals['_STEP_TOOLCALL']._serialized_end=734 + _globals['_STEP_EXECUTE']._serialized_start=736 + _globals['_STEP_EXECUTE']._serialized_end=767 + _globals['_STEP_RESULTS']._serialized_start=770 + _globals['_STEP_RESULTS']._serialized_end=959 + _globals['_STEP_METRICS']._serialized_start=961 + _globals['_STEP_METRICS']._serialized_end=1042 + _globals['_STEP_STEPSTATE']._serialized_start=1044 + _globals['_STEP_STEPSTATE']._serialized_end=1131 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/task_step_pb2.pyi b/truffle/os/task_step_pb2.pyi new file mode 100644 index 0000000..5b4164a --- /dev/null +++ b/truffle/os/task_step_pb2.pyi @@ -0,0 +1,82 @@ +from truffle.os import task_user_response_pb2 as _task_user_response_pb2 +from truffle.common import content_pb2 as _content_pb2 +from truffle.infer import usage_pb2 as _usage_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union +from truffle.common.content_pb2 import MediaSource as MediaSource +from truffle.common.content_pb2 import WebComponent as WebComponent + +DESCRIPTOR: _descriptor.FileDescriptor + +class Step(_message.Message): + __slots__ = ("state", "user_response", "thinking", "tool_calls", "execution", "results", "metrics", "model_uuid") + class StepState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + STEP_INVALID: _ClassVar[Step.StepState] + STEP_GENERATING: _ClassVar[Step.StepState] + STEP_EXECUTING: _ClassVar[Step.StepState] + STEP_RESULT: _ClassVar[Step.StepState] + STEP_INVALID: Step.StepState + STEP_GENERATING: Step.StepState + STEP_EXECUTING: Step.StepState + STEP_RESULT: Step.StepState + class Thinking(_message.Message): + __slots__ = ("cot_chunks", "cot_summaries", "raw_output", "thinking_finished") + COT_CHUNKS_FIELD_NUMBER: _ClassVar[int] + COT_SUMMARIES_FIELD_NUMBER: _ClassVar[int] + RAW_OUTPUT_FIELD_NUMBER: _ClassVar[int] + THINKING_FINISHED_FIELD_NUMBER: _ClassVar[int] + cot_chunks: _containers.RepeatedScalarFieldContainer[str] + cot_summaries: _containers.RepeatedScalarFieldContainer[str] + raw_output: str + thinking_finished: bool + def __init__(self, cot_chunks: _Optional[_Iterable[str]] = ..., cot_summaries: _Optional[_Iterable[str]] = ..., raw_output: _Optional[str] = ..., thinking_finished: bool = ...) -> None: ... + class ToolCall(_message.Message): + __slots__ = ("tool_name", "summary") + TOOL_NAME_FIELD_NUMBER: _ClassVar[int] + SUMMARY_FIELD_NUMBER: _ClassVar[int] + tool_name: str + summary: str + def __init__(self, tool_name: _Optional[str] = ..., summary: _Optional[str] = ...) -> None: ... + class Execute(_message.Message): + __slots__ = ("tool_updates",) + TOOL_UPDATES_FIELD_NUMBER: _ClassVar[int] + tool_updates: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, tool_updates: _Optional[_Iterable[str]] = ...) -> None: ... + class Results(_message.Message): + __slots__ = ("summary", "content", "content_incomplete", "web") + SUMMARY_FIELD_NUMBER: _ClassVar[int] + CONTENT_FIELD_NUMBER: _ClassVar[int] + CONTENT_INCOMPLETE_FIELD_NUMBER: _ClassVar[int] + WEB_FIELD_NUMBER: _ClassVar[int] + summary: str + content: str + content_incomplete: bool + web: _content_pb2.WebComponent + def __init__(self, summary: _Optional[str] = ..., content: _Optional[str] = ..., content_incomplete: bool = ..., web: _Optional[_Union[_content_pb2.WebComponent, _Mapping]] = ...) -> None: ... + class Metrics(_message.Message): + __slots__ = ("inference_usage",) + INFERENCE_USAGE_FIELD_NUMBER: _ClassVar[int] + inference_usage: _usage_pb2.Usage + def __init__(self, inference_usage: _Optional[_Union[_usage_pb2.Usage, _Mapping]] = ...) -> None: ... + STATE_FIELD_NUMBER: _ClassVar[int] + USER_RESPONSE_FIELD_NUMBER: _ClassVar[int] + THINKING_FIELD_NUMBER: _ClassVar[int] + TOOL_CALLS_FIELD_NUMBER: _ClassVar[int] + EXECUTION_FIELD_NUMBER: _ClassVar[int] + RESULTS_FIELD_NUMBER: _ClassVar[int] + METRICS_FIELD_NUMBER: _ClassVar[int] + MODEL_UUID_FIELD_NUMBER: _ClassVar[int] + state: Step.StepState + user_response: _task_user_response_pb2.PendingUserResponse + thinking: Step.Thinking + tool_calls: _containers.RepeatedCompositeFieldContainer[Step.ToolCall] + execution: Step.Execute + results: Step.Results + metrics: Step.Metrics + model_uuid: str + def __init__(self, state: _Optional[_Union[Step.StepState, str]] = ..., user_response: _Optional[_Union[_task_user_response_pb2.PendingUserResponse, _Mapping]] = ..., thinking: _Optional[_Union[Step.Thinking, _Mapping]] = ..., tool_calls: _Optional[_Iterable[_Union[Step.ToolCall, _Mapping]]] = ..., execution: _Optional[_Union[Step.Execute, _Mapping]] = ..., results: _Optional[_Union[Step.Results, _Mapping]] = ..., metrics: _Optional[_Union[Step.Metrics, _Mapping]] = ..., model_uuid: _Optional[str] = ...) -> None: ... diff --git a/truffle/os/task_step_pb2_grpc.py b/truffle/os/task_step_pb2_grpc.py new file mode 100644 index 0000000..1937b34 --- /dev/null +++ b/truffle/os/task_step_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/task_step_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/task_target_pb2.py b/truffle/os/task_target_pb2.py new file mode 100644 index 0000000..6596839 --- /dev/null +++ b/truffle/os/task_target_pb2.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/task_target.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/task_target.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1ctruffle/os/task_target.proto\x12\ntruffle.os\"?\n\nTargetTask\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x14\n\x07node_id\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_node_idb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.task_target_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_TARGETTASK']._serialized_start=44 + _globals['_TARGETTASK']._serialized_end=107 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/task_target_pb2.pyi b/truffle/os/task_target_pb2.pyi new file mode 100644 index 0000000..ee8bd4d --- /dev/null +++ b/truffle/os/task_target_pb2.pyi @@ -0,0 +1,13 @@ +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Optional as _Optional + +DESCRIPTOR: _descriptor.FileDescriptor + +class TargetTask(_message.Message): + __slots__ = ("task_id", "node_id") + TASK_ID_FIELD_NUMBER: _ClassVar[int] + NODE_ID_FIELD_NUMBER: _ClassVar[int] + task_id: str + node_id: int + def __init__(self, task_id: _Optional[str] = ..., node_id: _Optional[int] = ...) -> None: ... diff --git a/truffle/os/task_target_pb2_grpc.py b/truffle/os/task_target_pb2_grpc.py new file mode 100644 index 0000000..400a908 --- /dev/null +++ b/truffle/os/task_target_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/task_target_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/task_user_response_pb2.py b/truffle/os/task_user_response_pb2.py new file mode 100644 index 0000000..181a0e5 --- /dev/null +++ b/truffle/os/task_user_response_pb2.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/task_user_response.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/task_user_response.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from truffle.os import task_target_pb2 as truffle_dot_os_dot_task__target__pb2 +from truffle.common import file_pb2 as truffle_dot_common_dot_file__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#truffle/os/task_user_response.proto\x12\ntruffle.os\x1a\x1ctruffle/os/task_target.proto\x1a\x19truffle/common/file.proto\"?\n\x0bUserMessage\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\t\x12\x1f\n\x17\x61ttached_feed_entry_ids\x18\x02 \x03(\x04\"7\n\x13PendingUserResponse\x12\x0f\n\x07task_id\x18\x02 \x01(\t\x12\x0f\n\x07node_id\x18\x03 \x01(\r\"\x8f\x01\n\x14RespondToTaskRequest\x12\x0f\n\x07task_id\x18\x02 \x01(\t\x12\x0f\n\x07node_id\x18\x03 \x01(\r\x12(\n\x07message\x18\x04 \x01(\x0b\x32\x17.truffle.os.UserMessage\x12+\n\x05\x66iles\x18\x05 \x03(\x0b\x32\x1c.truffle.common.AttachedFileb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.task_user_response_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_USERMESSAGE']._serialized_start=108 + _globals['_USERMESSAGE']._serialized_end=171 + _globals['_PENDINGUSERRESPONSE']._serialized_start=173 + _globals['_PENDINGUSERRESPONSE']._serialized_end=228 + _globals['_RESPONDTOTASKREQUEST']._serialized_start=231 + _globals['_RESPONDTOTASKREQUEST']._serialized_end=374 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/task_user_response_pb2.pyi b/truffle/os/task_user_response_pb2.pyi new file mode 100644 index 0000000..3dbe4eb --- /dev/null +++ b/truffle/os/task_user_response_pb2.pyi @@ -0,0 +1,37 @@ +from truffle.os import task_target_pb2 as _task_target_pb2 +from truffle.common import file_pb2 as _file_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class UserMessage(_message.Message): + __slots__ = ("content", "attached_feed_entry_ids") + CONTENT_FIELD_NUMBER: _ClassVar[int] + ATTACHED_FEED_ENTRY_IDS_FIELD_NUMBER: _ClassVar[int] + content: str + attached_feed_entry_ids: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, content: _Optional[str] = ..., attached_feed_entry_ids: _Optional[_Iterable[int]] = ...) -> None: ... + +class PendingUserResponse(_message.Message): + __slots__ = ("task_id", "node_id") + TASK_ID_FIELD_NUMBER: _ClassVar[int] + NODE_ID_FIELD_NUMBER: _ClassVar[int] + task_id: str + node_id: int + def __init__(self, task_id: _Optional[str] = ..., node_id: _Optional[int] = ...) -> None: ... + +class RespondToTaskRequest(_message.Message): + __slots__ = ("task_id", "node_id", "message", "files") + TASK_ID_FIELD_NUMBER: _ClassVar[int] + NODE_ID_FIELD_NUMBER: _ClassVar[int] + MESSAGE_FIELD_NUMBER: _ClassVar[int] + FILES_FIELD_NUMBER: _ClassVar[int] + task_id: str + node_id: int + message: UserMessage + files: _containers.RepeatedCompositeFieldContainer[_file_pb2.AttachedFile] + def __init__(self, task_id: _Optional[str] = ..., node_id: _Optional[int] = ..., message: _Optional[_Union[UserMessage, _Mapping]] = ..., files: _Optional[_Iterable[_Union[_file_pb2.AttachedFile, _Mapping]]] = ...) -> None: ... diff --git a/truffle/os/task_user_response_pb2_grpc.py b/truffle/os/task_user_response_pb2_grpc.py new file mode 100644 index 0000000..f23ce5a --- /dev/null +++ b/truffle/os/task_user_response_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/task_user_response_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/truffle/os/truffleos_pb2.py b/truffle/os/truffleos_pb2.py new file mode 100644 index 0000000..936eea4 --- /dev/null +++ b/truffle/os/truffleos_pb2.py @@ -0,0 +1,201 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: truffle/os/truffleos.proto +# Protobuf Python Version: 6.30.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 30, + 0, + '', + 'truffle/os/truffleos.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from truffle.os import hardware_stats_pb2 as truffle_dot_os_dot_hardware__stats__pb2 +from truffle.os import hardware_control_pb2 as truffle_dot_os_dot_hardware__control__pb2 +from truffle.os import system_settings_pb2 as truffle_dot_os_dot_system__settings__pb2 +try: + truffle_dot_os_dot_hardware__settings__pb2 = truffle_dot_os_dot_system__settings__pb2.truffle_dot_os_dot_hardware__settings__pb2 +except AttributeError: + truffle_dot_os_dot_hardware__settings__pb2 = truffle_dot_os_dot_system__settings__pb2.truffle.os.hardware_settings_pb2 +from truffle.os import system_info_pb2 as truffle_dot_os_dot_system__info__pb2 +try: + truffle_dot_os_dot_hardware__info__pb2 = truffle_dot_os_dot_system__info__pb2.truffle_dot_os_dot_hardware__info__pb2 +except AttributeError: + truffle_dot_os_dot_hardware__info__pb2 = truffle_dot_os_dot_system__info__pb2.truffle.os.hardware_info_pb2 +from truffle.os import notification_pb2 as truffle_dot_os_dot_notification__pb2 +from truffle.os import client_session_pb2 as truffle_dot_os_dot_client__session__pb2 +from truffle.os import client_user_pb2 as truffle_dot_os_dot_client__user__pb2 +from truffle.os import client_state_pb2 as truffle_dot_os_dot_client__state__pb2 +from truffle.os import task_pb2 as truffle_dot_os_dot_task__pb2 +try: + truffle_dot_os_dot_task__info__pb2 = truffle_dot_os_dot_task__pb2.truffle_dot_os_dot_task__info__pb2 +except AttributeError: + truffle_dot_os_dot_task__info__pb2 = truffle_dot_os_dot_task__pb2.truffle.os.task_info_pb2 +try: + truffle_dot_os_dot_task__user__response__pb2 = truffle_dot_os_dot_task__pb2.truffle_dot_os_dot_task__user__response__pb2 +except AttributeError: + truffle_dot_os_dot_task__user__response__pb2 = truffle_dot_os_dot_task__pb2.truffle.os.task_user_response_pb2 +try: + truffle_dot_os_dot_task__step__pb2 = truffle_dot_os_dot_task__pb2.truffle_dot_os_dot_task__step__pb2 +except AttributeError: + truffle_dot_os_dot_task__step__pb2 = truffle_dot_os_dot_task__pb2.truffle.os.task_step_pb2 +try: + truffle_dot_common_dot_content__pb2 = truffle_dot_os_dot_task__pb2.truffle_dot_common_dot_content__pb2 +except AttributeError: + truffle_dot_common_dot_content__pb2 = truffle_dot_os_dot_task__pb2.truffle.common.content_pb2 +from truffle.os import task_queries_pb2 as truffle_dot_os_dot_task__queries__pb2 +from truffle.os import task_actions_pb2 as truffle_dot_os_dot_task__actions__pb2 +try: + truffle_dot_os_dot_task__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle_dot_os_dot_task__pb2 +except AttributeError: + truffle_dot_os_dot_task__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle.os.task_pb2 +try: + truffle_dot_os_dot_task__info__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle_dot_os_dot_task__info__pb2 +except AttributeError: + truffle_dot_os_dot_task__info__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle.os.task_info_pb2 +try: + truffle_dot_os_dot_task__user__response__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle_dot_os_dot_task__user__response__pb2 +except AttributeError: + truffle_dot_os_dot_task__user__response__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle.os.task_user_response_pb2 +try: + truffle_dot_os_dot_task__step__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle_dot_os_dot_task__step__pb2 +except AttributeError: + truffle_dot_os_dot_task__step__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle.os.task_step_pb2 +try: + truffle_dot_common_dot_content__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle_dot_common_dot_content__pb2 +except AttributeError: + truffle_dot_common_dot_content__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle.common.content_pb2 +try: + truffle_dot_os_dot_task__target__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle_dot_os_dot_task__target__pb2 +except AttributeError: + truffle_dot_os_dot_task__target__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle.os.task_target_pb2 +try: + truffle_dot_os_dot_task__options__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle_dot_os_dot_task__options__pb2 +except AttributeError: + truffle_dot_os_dot_task__options__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle.os.task_options_pb2 +try: + truffle_dot_os_dot_task__user__response__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle_dot_os_dot_task__user__response__pb2 +except AttributeError: + truffle_dot_os_dot_task__user__response__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle.os.task_user_response_pb2 +try: + truffle_dot_common_dot_tool__provider__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle_dot_common_dot_tool__provider__pb2 +except AttributeError: + truffle_dot_common_dot_tool__provider__pb2 = truffle_dot_os_dot_task__actions__pb2.truffle.common.tool_provider_pb2 +from truffle.os import task_user_response_pb2 as truffle_dot_os_dot_task__user__response__pb2 +from truffle.os import task_search_pb2 as truffle_dot_os_dot_task__search__pb2 +from truffle.os import builder_pb2 as truffle_dot_os_dot_builder__pb2 +from truffle.os import background_feed_queries_pb2 as truffle_dot_os_dot_background__feed__queries__pb2 +from truffle.os import app_queries_pb2 as truffle_dot_os_dot_app__queries__pb2 +from truffle.os import installer_pb2 as truffle_dot_os_dot_installer__pb2 +from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 + +from truffle.os.hardware_stats_pb2 import * +from truffle.os.hardware_control_pb2 import * +from truffle.os.system_settings_pb2 import * +from truffle.os.system_info_pb2 import * +from truffle.os.notification_pb2 import * +from truffle.os.client_session_pb2 import * +from truffle.os.client_user_pb2 import * +from truffle.os.client_state_pb2 import * +from truffle.os.task_pb2 import * +from truffle.os.task_queries_pb2 import * +from truffle.os.task_actions_pb2 import * +from truffle.os.task_user_response_pb2 import * +from truffle.os.task_search_pb2 import * +from truffle.os.builder_pb2 import * +from truffle.os.background_feed_queries_pb2 import * +from truffle.os.app_queries_pb2 import * + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1atruffle/os/truffleos.proto\x12\ntruffle.os\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1ftruffle/os/hardware_stats.proto\x1a!truffle/os/hardware_control.proto\x1a truffle/os/system_settings.proto\x1a\x1ctruffle/os/system_info.proto\x1a\x1dtruffle/os/notification.proto\x1a\x1ftruffle/os/client_session.proto\x1a\x1ctruffle/os/client_user.proto\x1a\x1dtruffle/os/client_state.proto\x1a\x15truffle/os/task.proto\x1a\x1dtruffle/os/task_queries.proto\x1a\x1dtruffle/os/task_actions.proto\x1a#truffle/os/task_user_response.proto\x1a\x1ctruffle/os/task_search.proto\x1a\x18truffle/os/builder.proto\x1a(truffle/os/background_feed_queries.proto\x1a\x1ctruffle/os/app_queries.proto\x1a\x1atruffle/os/installer.proto\x1a\x1cgoogle/api/annotations.proto2\xc9$\n\tTruffleOS\x12m\n\x0e\x41pps_DeleteApp\x12\x1c.truffle.os.DeleteAppRequest\x1a\x1d.truffle.os.DeleteAppResponse\"\x1e\x82\xd3\xe4\x93\x02\x18*\x16/v1/os/apps/{app_uuid}\x12\x81\x01\n\x12\x41pps_GetBackground\x12$.truffle.os.GetBackgroundAppsRequest\x1a%.truffle.os.GetBackgroundAppsResponse\"\x1e\x82\xd3\xe4\x93\x02\x18\x12\x16/v1/os/apps/background\x12\x81\x01\n\x12\x41pps_GetForeground\x12$.truffle.os.GetForegroundAppsRequest\x1a%.truffle.os.GetForegroundAppsResponse\"\x1e\x82\xd3\xe4\x93\x02\x18\x12\x16/v1/os/apps/foreground\x12\x65\n\x0b\x41pps_GetAll\x12\x1d.truffle.os.GetAllAppsRequest\x1a\x1e.truffle.os.GetAllAppsResponse\"\x17\x82\xd3\xe4\x93\x02\x11\x12\x0f/v1/os/apps/all\x12T\n\x0f\x41pps_InstallApp\x12\x1d.truffle.os.AppInstallRequest\x1a\x1e.truffle.os.AppInstallResponse(\x01\x30\x01\x12\x8d\x01\n\x12\x42\x61\x63kground_GetFeed\x12$.truffle.os.GetBackgroundFeedRequest\x1a%.truffle.os.GetBackgroundFeedResponse\"*\x82\xd3\xe4\x93\x02$\"\x1f/v1/os/apps/background/feed:get:\x01*\x12\xa8\x01\n\x1f\x42\x61\x63kground_GetLatestFeedEntryID\x12\'.truffle.os.GetLatestFeedEntryIDRequest\x1a(.truffle.os.GetLatestFeedEntryIDResponse\"2\x82\xd3\xe4\x93\x02,\"\'/v1/os/apps/background/latestfeedid:get:\x01*\x12\xa6\x01\n\x18\x42\x61\x63kground_LikeFeedEntry\x12*.truffle.os.LikeBackgroundFeedEntryRequest\x1a+.truffle.os.LikeBackgroundFeedEntryResponse\"1\x82\xd3\xe4\x93\x02+\"&/v1/os/apps/background/feed/entry:like:\x01*\x12\xa7\x01\n\x1d\x42\x61\x63kground_SubmitFeedFeedback\x12).truffle.os.BackgroundFeedFeedbackRequest\x1a*.truffle.os.BackgroundFeedFeedbackResponse\"/\x82\xd3\xe4\x93\x02)\"$/v1/os/apps/background/feed:feedback:\x01*\x12\x90\x01\n\x19\x42uilder_StartBuildSession\x12$.truffle.os.StartBuildSessionRequest\x1a%.truffle.os.StartBuildSessionResponse\"&\x82\xd3\xe4\x93\x02 \"\x1b/v1/os/builder/builds:start:\x01*\x12\x94\x01\n\x1a\x42uilder_FinishBuildSession\x12%.truffle.os.FinishBuildSessionRequest\x1a&.truffle.os.FinishBuildSessionResponse\"\'\x82\xd3\xe4\x93\x02!\"\x1c/v1/os/builder/builds:finish:\x01*\x12\x83\x01\n\x16\x43lient_RegisterNewUser\x12\".truffle.os.RegisterNewUserRequest\x1a#.truffle.os.RegisterNewUserResponse\" \x82\xd3\xe4\x93\x02\x1a\"\x15/v1/os/users:register:\x01*\x12\x8f\x01\n\x19\x43lient_RegisterNewSession\x12%.truffle.os.RegisterNewSessionRequest\x1a&.truffle.os.RegisterNewSessionResponse\"#\x82\xd3\xe4\x93\x02\x1d\"\x18/v1/os/sessions:register:\x01*\x12\x82\x01\n\x15\x43lient_UserIDForToken\x12!.truffle.os.UserIDForTokenRequest\x1a\".truffle.os.UserIDForTokenResponse\"\"\x82\xd3\xe4\x93\x02\x1c\x12\x1a/v1/os/tokens/{token}/user\x12\x8b\x01\n#Client_VerifyNewSessionRegistration\x12#.truffle.os.VerifyNewSessionRequest\x1a\x1c.truffle.os.NewSessionStatus\"!\x82\xd3\xe4\x93\x02\x1b\"\x16/v1/os/sessions:verify:\x01*\x12x\n\x1b\x43lient_GetUserRecoveryCodes\x12\x16.google.protobuf.Empty\x1a\x1d.truffle.os.UserRecoveryCodes\"\"\x82\xd3\xe4\x93\x02\x1c\x12\x1a/v1/os/users/recoveryCodes\x12\x87\x01\n\x18\x43lient_UpdateClientState\x12$.truffle.os.UpdateClientStateRequest\x1a%.truffle.os.UpdateClientStateResponse\"\x1e\x82\xd3\xe4\x93\x02\x18\"\x13/v1/os/client/state:\x01*\x12\x81\x01\n\x15\x43lient_GetClientState\x12!.truffle.os.GetClientStateRequest\x1a\".truffle.os.GetClientStateResponse\"!\x82\xd3\xe4\x93\x02\x1b\x12\x19/v1/os/client/state/{key}\x12\x88\x01\n\x19\x43lient_GetAllClientStates\x12%.truffle.os.GetAllClientStatesRequest\x1a&.truffle.os.GetAllClientStatesResponse\"\x1c\x82\xd3\xe4\x93\x02\x16\x12\x14/v1/os/client/states\x12\x8b\x01\n\x18SubscribeToNotifications\x12+.truffle.os.SubscribeToNotificationsRequest\x1a\x18.truffle.os.Notification\"&\x82\xd3\xe4\x93\x02 \x12\x1e/v1/os/notifications:subscribe0\x01\x12o\n\x11Hardware_GetStats\x12 .truffle.os.HardwareStatsRequest\x1a\x19.truffle.os.HardwareStats\"\x1d\x82\xd3\xe4\x93\x02\x17\x12\x15/v1/os/hardware/stats\x12|\n\x15Hardware_StatsUpdates\x12 .truffle.os.HardwareStatsRequest\x1a\x19.truffle.os.HardwareStats\"$\x82\xd3\xe4\x93\x02\x1e\x12\x1c/v1/os/hardware/stats:stream0\x01\x12\x93\x01\n\x15Hardware_PowerControl\x12\'.truffle.os.HardwarePowerControlRequest\x1a(.truffle.os.HardwarePowerControlResponse\"\'\x82\xd3\xe4\x93\x02!\"\x1c/v1/os/hardware/powerControl:\x01*\x12i\n\x0cSystem_GetID\x12\x1e.truffle.os.SystemGetIDRequest\x1a\x1f.truffle.os.SystemGetIDResponse\"\x18\x82\xd3\xe4\x93\x02\x12\x12\x10/v1/os/system/id\x12h\n\x12System_GetSettings\x12\x16.google.protobuf.Empty\x1a\x1a.truffle.os.SystemSettings\"\x1e\x82\xd3\xe4\x93\x02\x18\x12\x16/v1/os/system/settings\x12o\n\x12System_SetSettings\x12\x1a.truffle.os.SystemSettings\x1a\x1a.truffle.os.SystemSettings\"!\x82\xd3\xe4\x93\x02\x1b\x32\x16/v1/os/system/settings:\x01*\x12\\\n\x0eSystem_GetInfo\x12\x16.google.protobuf.Empty\x1a\x16.truffle.os.SystemInfo\"\x1a\x82\xd3\xe4\x93\x02\x14\x12\x12/v1/os/system/info\x12\x8e\x01\n\x15System_CheckForUpdate\x12\'.truffle.os.SystemCheckForUpdateRequest\x1a(.truffle.os.SystemCheckForUpdateResponse\"\"\x82\xd3\xe4\x93\x02\x1c\x12\x1a/v1/os/system/check-update\x12j\n\rTask_OpenTask\x12\x1b.truffle.os.OpenTaskRequest\x1a\x1c.truffle.os.TaskStreamUpdate\"\x1c\x82\xd3\xe4\x93\x02\x16\"\x11/v1/os/tasks:open:\x01*0\x01\x12\x83\x01\n\x12Task_InterruptTask\x12 .truffle.os.InterruptTaskRequest\x1a\x1e.truffle.os.TaskActionResponse\"+\x82\xd3\xe4\x93\x02%\" /v1/os/tasks/{task_id}:interrupt:\x01*\x12\x81\x01\n\x12Task_RespondToTask\x12 .truffle.os.RespondToTaskRequest\x1a\x1e.truffle.os.TaskActionResponse\")\x82\xd3\xe4\x93\x02#\"\x1e/v1/os/tasks/{task_id}:respond:\x01*\x12\x9e\x01\n\x15Task_SetAvailableApps\x12\'.truffle.os.TaskSetAvailableAppsRequest\x1a(.truffle.os.TaskSetAvailableAppsResponse\"2\x82\xd3\xe4\x93\x02,\"\'/v1/os/tasks/{task_id}:setAvailableApps:\x01*\x12s\n\x10Task_SearchTasks\x12\x1e.truffle.os.SearchTasksRequest\x1a\x1f.truffle.os.SearchTasksResponse\"\x1e\x82\xd3\xe4\x93\x02\x18\"\x13/v1/os/tasks:search:\x01*\x12\x63\n\rTask_GetTasks\x12\x1b.truffle.os.GetTasksRequest\x1a\x10.truffle.os.Task\"!\x82\xd3\xe4\x93\x02\x1b\"\x16/v1/os/tasks:streamGet:\x01*0\x01\x12\x62\n\x0fTask_GetOneTask\x12\x1d.truffle.os.GetOneTaskRequest\x1a\x10.truffle.os.Task\"\x1e\x82\xd3\xe4\x93\x02\x18\x12\x16/v1/os/tasks/{task_id}\x12u\n\x11Task_GetTaskInfos\x12\x1f.truffle.os.GetTaskInfosRequest\x1a .truffle.os.GetTaskInfosResponse\"\x1d\x82\xd3\xe4\x93\x02\x17\"\x12/v1/os/tasks/infos:\x01*P\x01P\x02P\x03P\x04P\x05P\x06P\x07P\x08P\tP\nP\x0bP\x0cP\rP\x0eP\x0fP\x10\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'truffle.os.truffleos_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Apps_DeleteApp']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Apps_DeleteApp']._serialized_options = b'\202\323\344\223\002\030*\026/v1/os/apps/{app_uuid}' + _globals['_TRUFFLEOS'].methods_by_name['Apps_GetBackground']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Apps_GetBackground']._serialized_options = b'\202\323\344\223\002\030\022\026/v1/os/apps/background' + _globals['_TRUFFLEOS'].methods_by_name['Apps_GetForeground']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Apps_GetForeground']._serialized_options = b'\202\323\344\223\002\030\022\026/v1/os/apps/foreground' + _globals['_TRUFFLEOS'].methods_by_name['Apps_GetAll']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Apps_GetAll']._serialized_options = b'\202\323\344\223\002\021\022\017/v1/os/apps/all' + _globals['_TRUFFLEOS'].methods_by_name['Background_GetFeed']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Background_GetFeed']._serialized_options = b'\202\323\344\223\002$\"\037/v1/os/apps/background/feed:get:\001*' + _globals['_TRUFFLEOS'].methods_by_name['Background_GetLatestFeedEntryID']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Background_GetLatestFeedEntryID']._serialized_options = b'\202\323\344\223\002,\"\'/v1/os/apps/background/latestfeedid:get:\001*' + _globals['_TRUFFLEOS'].methods_by_name['Background_LikeFeedEntry']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Background_LikeFeedEntry']._serialized_options = b'\202\323\344\223\002+\"&/v1/os/apps/background/feed/entry:like:\001*' + _globals['_TRUFFLEOS'].methods_by_name['Background_SubmitFeedFeedback']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Background_SubmitFeedFeedback']._serialized_options = b'\202\323\344\223\002)\"$/v1/os/apps/background/feed:feedback:\001*' + _globals['_TRUFFLEOS'].methods_by_name['Builder_StartBuildSession']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Builder_StartBuildSession']._serialized_options = b'\202\323\344\223\002 \"\033/v1/os/builder/builds:start:\001*' + _globals['_TRUFFLEOS'].methods_by_name['Builder_FinishBuildSession']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Builder_FinishBuildSession']._serialized_options = b'\202\323\344\223\002!\"\034/v1/os/builder/builds:finish:\001*' + _globals['_TRUFFLEOS'].methods_by_name['Client_RegisterNewUser']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Client_RegisterNewUser']._serialized_options = b'\202\323\344\223\002\032\"\025/v1/os/users:register:\001*' + _globals['_TRUFFLEOS'].methods_by_name['Client_RegisterNewSession']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Client_RegisterNewSession']._serialized_options = b'\202\323\344\223\002\035\"\030/v1/os/sessions:register:\001*' + _globals['_TRUFFLEOS'].methods_by_name['Client_UserIDForToken']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Client_UserIDForToken']._serialized_options = b'\202\323\344\223\002\034\022\032/v1/os/tokens/{token}/user' + _globals['_TRUFFLEOS'].methods_by_name['Client_VerifyNewSessionRegistration']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Client_VerifyNewSessionRegistration']._serialized_options = b'\202\323\344\223\002\033\"\026/v1/os/sessions:verify:\001*' + _globals['_TRUFFLEOS'].methods_by_name['Client_GetUserRecoveryCodes']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Client_GetUserRecoveryCodes']._serialized_options = b'\202\323\344\223\002\034\022\032/v1/os/users/recoveryCodes' + _globals['_TRUFFLEOS'].methods_by_name['Client_UpdateClientState']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Client_UpdateClientState']._serialized_options = b'\202\323\344\223\002\030\"\023/v1/os/client/state:\001*' + _globals['_TRUFFLEOS'].methods_by_name['Client_GetClientState']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Client_GetClientState']._serialized_options = b'\202\323\344\223\002\033\022\031/v1/os/client/state/{key}' + _globals['_TRUFFLEOS'].methods_by_name['Client_GetAllClientStates']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Client_GetAllClientStates']._serialized_options = b'\202\323\344\223\002\026\022\024/v1/os/client/states' + _globals['_TRUFFLEOS'].methods_by_name['SubscribeToNotifications']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['SubscribeToNotifications']._serialized_options = b'\202\323\344\223\002 \022\036/v1/os/notifications:subscribe' + _globals['_TRUFFLEOS'].methods_by_name['Hardware_GetStats']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Hardware_GetStats']._serialized_options = b'\202\323\344\223\002\027\022\025/v1/os/hardware/stats' + _globals['_TRUFFLEOS'].methods_by_name['Hardware_StatsUpdates']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Hardware_StatsUpdates']._serialized_options = b'\202\323\344\223\002\036\022\034/v1/os/hardware/stats:stream' + _globals['_TRUFFLEOS'].methods_by_name['Hardware_PowerControl']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Hardware_PowerControl']._serialized_options = b'\202\323\344\223\002!\"\034/v1/os/hardware/powerControl:\001*' + _globals['_TRUFFLEOS'].methods_by_name['System_GetID']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['System_GetID']._serialized_options = b'\202\323\344\223\002\022\022\020/v1/os/system/id' + _globals['_TRUFFLEOS'].methods_by_name['System_GetSettings']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['System_GetSettings']._serialized_options = b'\202\323\344\223\002\030\022\026/v1/os/system/settings' + _globals['_TRUFFLEOS'].methods_by_name['System_SetSettings']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['System_SetSettings']._serialized_options = b'\202\323\344\223\002\0332\026/v1/os/system/settings:\001*' + _globals['_TRUFFLEOS'].methods_by_name['System_GetInfo']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['System_GetInfo']._serialized_options = b'\202\323\344\223\002\024\022\022/v1/os/system/info' + _globals['_TRUFFLEOS'].methods_by_name['System_CheckForUpdate']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['System_CheckForUpdate']._serialized_options = b'\202\323\344\223\002\034\022\032/v1/os/system/check-update' + _globals['_TRUFFLEOS'].methods_by_name['Task_OpenTask']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Task_OpenTask']._serialized_options = b'\202\323\344\223\002\026\"\021/v1/os/tasks:open:\001*' + _globals['_TRUFFLEOS'].methods_by_name['Task_InterruptTask']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Task_InterruptTask']._serialized_options = b'\202\323\344\223\002%\" /v1/os/tasks/{task_id}:interrupt:\001*' + _globals['_TRUFFLEOS'].methods_by_name['Task_RespondToTask']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Task_RespondToTask']._serialized_options = b'\202\323\344\223\002#\"\036/v1/os/tasks/{task_id}:respond:\001*' + _globals['_TRUFFLEOS'].methods_by_name['Task_SetAvailableApps']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Task_SetAvailableApps']._serialized_options = b'\202\323\344\223\002,\"\'/v1/os/tasks/{task_id}:setAvailableApps:\001*' + _globals['_TRUFFLEOS'].methods_by_name['Task_SearchTasks']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Task_SearchTasks']._serialized_options = b'\202\323\344\223\002\030\"\023/v1/os/tasks:search:\001*' + _globals['_TRUFFLEOS'].methods_by_name['Task_GetTasks']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Task_GetTasks']._serialized_options = b'\202\323\344\223\002\033\"\026/v1/os/tasks:streamGet:\001*' + _globals['_TRUFFLEOS'].methods_by_name['Task_GetOneTask']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Task_GetOneTask']._serialized_options = b'\202\323\344\223\002\030\022\026/v1/os/tasks/{task_id}' + _globals['_TRUFFLEOS'].methods_by_name['Task_GetTaskInfos']._loaded_options = None + _globals['_TRUFFLEOS'].methods_by_name['Task_GetTaskInfos']._serialized_options = b'\202\323\344\223\002\027\"\022/v1/os/tasks/infos:\001*' + _globals['_TRUFFLEOS']._serialized_start=637 + _globals['_TRUFFLEOS']._serialized_end=5318 +# @@protoc_insertion_point(module_scope) diff --git a/truffle/os/truffleos_pb2.pyi b/truffle/os/truffleos_pb2.pyi new file mode 100644 index 0000000..da187f1 --- /dev/null +++ b/truffle/os/truffleos_pb2.pyi @@ -0,0 +1,107 @@ +from google.protobuf import empty_pb2 as _empty_pb2 +from truffle.os import hardware_stats_pb2 as _hardware_stats_pb2 +from truffle.os import hardware_control_pb2 as _hardware_control_pb2 +from truffle.os import system_settings_pb2 as _system_settings_pb2 +from truffle.os import hardware_settings_pb2 as _hardware_settings_pb2 +from truffle.os import system_info_pb2 as _system_info_pb2 +from truffle.os import hardware_info_pb2 as _hardware_info_pb2 +from truffle.os import notification_pb2 as _notification_pb2 +from truffle.os import client_session_pb2 as _client_session_pb2 +from truffle.os import client_user_pb2 as _client_user_pb2 +from truffle.os import client_state_pb2 as _client_state_pb2 +from truffle.os import task_pb2 as _task_pb2 +from truffle.os import task_info_pb2 as _task_info_pb2 +from truffle.os import task_user_response_pb2 as _task_user_response_pb2 +from truffle.os import task_step_pb2 as _task_step_pb2 +from truffle.os import task_queries_pb2 as _task_queries_pb2 +from truffle.os import task_actions_pb2 as _task_actions_pb2 +from truffle.os import task_pb2 as _task_pb2_1 +from truffle.os import task_target_pb2 as _task_target_pb2 +from truffle.os import task_options_pb2 as _task_options_pb2 +from truffle.os import task_user_response_pb2 as _task_user_response_pb2_1 +from truffle.common import tool_provider_pb2 as _tool_provider_pb2 +from truffle.os import task_user_response_pb2 as _task_user_response_pb2_1_1 +from truffle.os import task_search_pb2 as _task_search_pb2 +from truffle.os import builder_pb2 as _builder_pb2 +from truffle.os import background_feed_queries_pb2 as _background_feed_queries_pb2 +from truffle.os import app_queries_pb2 as _app_queries_pb2 +from truffle.os import installer_pb2 as _installer_pb2 +from google.api import annotations_pb2 as _annotations_pb2 +from google.protobuf import descriptor as _descriptor +from typing import ClassVar as _ClassVar +from truffle.os.hardware_stats_pb2 import HardwareStats as HardwareStats +from truffle.os.hardware_stats_pb2 import HardwareStatsRequest as HardwareStatsRequest +from truffle.os.hardware_control_pb2 import HardwarePowerControlRequest as HardwarePowerControlRequest +from truffle.os.hardware_control_pb2 import HardwarePowerControlResponse as HardwarePowerControlResponse +from truffle.os.system_settings_pb2 import SystemSettings as SystemSettings +from truffle.os.system_settings_pb2 import TaskSettings as TaskSettings +from truffle.os.system_info_pb2 import FirmwareVersion as FirmwareVersion +from truffle.os.system_info_pb2 import SystemInfo as SystemInfo +from truffle.os.system_info_pb2 import SystemCheckForUpdateRequest as SystemCheckForUpdateRequest +from truffle.os.system_info_pb2 import SystemCheckForUpdateResponse as SystemCheckForUpdateResponse +from truffle.os.system_info_pb2 import SystemGetIDRequest as SystemGetIDRequest +from truffle.os.system_info_pb2 import SystemGetIDResponse as SystemGetIDResponse +from truffle.os.notification_pb2 import SubscribeToNotificationsRequest as SubscribeToNotificationsRequest +from truffle.os.notification_pb2 import Notification as Notification +from truffle.os.client_session_pb2 import UserRecoveryCodes as UserRecoveryCodes +from truffle.os.client_session_pb2 import RegisterNewSessionRequest as RegisterNewSessionRequest +from truffle.os.client_session_pb2 import RegisterNewSessionResponse as RegisterNewSessionResponse +from truffle.os.client_session_pb2 import NewSessionVerification as NewSessionVerification +from truffle.os.client_session_pb2 import VerifyNewSessionRequest as VerifyNewSessionRequest +from truffle.os.client_session_pb2 import NewSessionStatus as NewSessionStatus +from truffle.os.client_user_pb2 import RegisterNewUserRequest as RegisterNewUserRequest +from truffle.os.client_user_pb2 import RegisterNewUserResponse as RegisterNewUserResponse +from truffle.os.client_user_pb2 import UserIDForTokenRequest as UserIDForTokenRequest +from truffle.os.client_user_pb2 import UserIDForTokenResponse as UserIDForTokenResponse +from truffle.os.client_state_pb2 import ClientState as ClientState +from truffle.os.client_state_pb2 import UpdateClientStateRequest as UpdateClientStateRequest +from truffle.os.client_state_pb2 import UpdateClientStateResponse as UpdateClientStateResponse +from truffle.os.client_state_pb2 import GetClientStateRequest as GetClientStateRequest +from truffle.os.client_state_pb2 import GetClientStateResponse as GetClientStateResponse +from truffle.os.client_state_pb2 import GetAllClientStatesRequest as GetAllClientStatesRequest +from truffle.os.client_state_pb2 import GetAllClientStatesResponse as GetAllClientStatesResponse +from truffle.os.task_pb2 import Task as Task +from truffle.os.task_pb2 import TasksList as TasksList +from truffle.os.task_pb2 import TaskNode as TaskNode +from truffle.os.task_pb2 import TaskStreamUpdate as TaskStreamUpdate +from truffle.os.task_queries_pb2 import GetTasksRequest as GetTasksRequest +from truffle.os.task_queries_pb2 import GetOneTaskRequest as GetOneTaskRequest +from truffle.os.task_queries_pb2 import GetTaskInfosRequest as GetTaskInfosRequest +from truffle.os.task_queries_pb2 import GetTaskInfosResponse as GetTaskInfosResponse +from truffle.os.task_actions_pb2 import InterruptTaskRequest as InterruptTaskRequest +from truffle.os.task_actions_pb2 import NewTask as NewTask +from truffle.os.task_actions_pb2 import OpenTaskRequest as OpenTaskRequest +from truffle.os.task_actions_pb2 import TaskSetAvailableAppsRequest as TaskSetAvailableAppsRequest +from truffle.os.task_actions_pb2 import TaskSetAvailableAppsResponse as TaskSetAvailableAppsResponse +from truffle.os.task_actions_pb2 import TaskActionResponse as TaskActionResponse +from truffle.os.task_actions_pb2 import TaskTestExternalToolProviderRequest as TaskTestExternalToolProviderRequest +from truffle.os.task_actions_pb2 import TaskTestExternalToolProviderResponse as TaskTestExternalToolProviderResponse +from truffle.os.task_user_response_pb2 import UserMessage as UserMessage +from truffle.os.task_user_response_pb2 import PendingUserResponse as PendingUserResponse +from truffle.os.task_user_response_pb2 import RespondToTaskRequest as RespondToTaskRequest +from truffle.os.task_search_pb2 import SearchTasksRequest as SearchTasksRequest +from truffle.os.task_search_pb2 import TaskSearchResult as TaskSearchResult +from truffle.os.task_search_pb2 import SearchTasksResponse as SearchTasksResponse +from truffle.os.builder_pb2 import StartBuildSessionRequest as StartBuildSessionRequest +from truffle.os.builder_pb2 import StartBuildSessionResponse as StartBuildSessionResponse +from truffle.os.builder_pb2 import FinishBuildSessionRequest as FinishBuildSessionRequest +from truffle.os.builder_pb2 import BuildSessionError as BuildSessionError +from truffle.os.builder_pb2 import FinishBuildSessionResponse as FinishBuildSessionResponse +from truffle.os.background_feed_queries_pb2 import GetBackgroundFeedRequest as GetBackgroundFeedRequest +from truffle.os.background_feed_queries_pb2 import GetBackgroundFeedResponse as GetBackgroundFeedResponse +from truffle.os.background_feed_queries_pb2 import LikeBackgroundFeedEntryRequest as LikeBackgroundFeedEntryRequest +from truffle.os.background_feed_queries_pb2 import LikeBackgroundFeedEntryResponse as LikeBackgroundFeedEntryResponse +from truffle.os.background_feed_queries_pb2 import GetLatestFeedEntryIDRequest as GetLatestFeedEntryIDRequest +from truffle.os.background_feed_queries_pb2 import GetLatestFeedEntryIDResponse as GetLatestFeedEntryIDResponse +from truffle.os.background_feed_queries_pb2 import BackgroundFeedFeedbackRequest as BackgroundFeedFeedbackRequest +from truffle.os.background_feed_queries_pb2 import BackgroundFeedFeedbackResponse as BackgroundFeedFeedbackResponse +from truffle.os.app_queries_pb2 import GetForegroundAppsRequest as GetForegroundAppsRequest +from truffle.os.app_queries_pb2 import GetForegroundAppsResponse as GetForegroundAppsResponse +from truffle.os.app_queries_pb2 import GetBackgroundAppsRequest as GetBackgroundAppsRequest +from truffle.os.app_queries_pb2 import GetBackgroundAppsResponse as GetBackgroundAppsResponse +from truffle.os.app_queries_pb2 import GetAllAppsRequest as GetAllAppsRequest +from truffle.os.app_queries_pb2 import GetAllAppsResponse as GetAllAppsResponse +from truffle.os.app_queries_pb2 import DeleteAppRequest as DeleteAppRequest +from truffle.os.app_queries_pb2 import DeleteAppResponse as DeleteAppResponse + +DESCRIPTOR: _descriptor.FileDescriptor diff --git a/truffle/os/truffleos_pb2_grpc.py b/truffle/os/truffleos_pb2_grpc.py new file mode 100644 index 0000000..ac95a7b --- /dev/null +++ b/truffle/os/truffleos_pb2_grpc.py @@ -0,0 +1,1635 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from truffle.os import app_queries_pb2 as truffle_dot_os_dot_app__queries__pb2 +from truffle.os import background_feed_queries_pb2 as truffle_dot_os_dot_background__feed__queries__pb2 +from truffle.os import builder_pb2 as truffle_dot_os_dot_builder__pb2 +from truffle.os import client_session_pb2 as truffle_dot_os_dot_client__session__pb2 +from truffle.os import client_state_pb2 as truffle_dot_os_dot_client__state__pb2 +from truffle.os import client_user_pb2 as truffle_dot_os_dot_client__user__pb2 +from truffle.os import hardware_control_pb2 as truffle_dot_os_dot_hardware__control__pb2 +from truffle.os import hardware_stats_pb2 as truffle_dot_os_dot_hardware__stats__pb2 +from truffle.os import installer_pb2 as truffle_dot_os_dot_installer__pb2 +from truffle.os import notification_pb2 as truffle_dot_os_dot_notification__pb2 +from truffle.os import system_info_pb2 as truffle_dot_os_dot_system__info__pb2 +from truffle.os import system_settings_pb2 as truffle_dot_os_dot_system__settings__pb2 +from truffle.os import task_actions_pb2 as truffle_dot_os_dot_task__actions__pb2 +from truffle.os import task_pb2 as truffle_dot_os_dot_task__pb2 +from truffle.os import task_queries_pb2 as truffle_dot_os_dot_task__queries__pb2 +from truffle.os import task_search_pb2 as truffle_dot_os_dot_task__search__pb2 +from truffle.os import task_user_response_pb2 as truffle_dot_os_dot_task__user__response__pb2 + +GRPC_GENERATED_VERSION = '1.72.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in truffle/os/truffleos_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) + + +class TruffleOSStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.Apps_DeleteApp = channel.unary_unary( + '/truffle.os.TruffleOS/Apps_DeleteApp', + request_serializer=truffle_dot_os_dot_app__queries__pb2.DeleteAppRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_app__queries__pb2.DeleteAppResponse.FromString, + _registered_method=True) + self.Apps_GetBackground = channel.unary_unary( + '/truffle.os.TruffleOS/Apps_GetBackground', + request_serializer=truffle_dot_os_dot_app__queries__pb2.GetBackgroundAppsRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_app__queries__pb2.GetBackgroundAppsResponse.FromString, + _registered_method=True) + self.Apps_GetForeground = channel.unary_unary( + '/truffle.os.TruffleOS/Apps_GetForeground', + request_serializer=truffle_dot_os_dot_app__queries__pb2.GetForegroundAppsRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_app__queries__pb2.GetForegroundAppsResponse.FromString, + _registered_method=True) + self.Apps_GetAll = channel.unary_unary( + '/truffle.os.TruffleOS/Apps_GetAll', + request_serializer=truffle_dot_os_dot_app__queries__pb2.GetAllAppsRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_app__queries__pb2.GetAllAppsResponse.FromString, + _registered_method=True) + self.Apps_InstallApp = channel.stream_stream( + '/truffle.os.TruffleOS/Apps_InstallApp', + request_serializer=truffle_dot_os_dot_installer__pb2.AppInstallRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_installer__pb2.AppInstallResponse.FromString, + _registered_method=True) + self.Background_GetFeed = channel.unary_unary( + '/truffle.os.TruffleOS/Background_GetFeed', + request_serializer=truffle_dot_os_dot_background__feed__queries__pb2.GetBackgroundFeedRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_background__feed__queries__pb2.GetBackgroundFeedResponse.FromString, + _registered_method=True) + self.Background_GetLatestFeedEntryID = channel.unary_unary( + '/truffle.os.TruffleOS/Background_GetLatestFeedEntryID', + request_serializer=truffle_dot_os_dot_background__feed__queries__pb2.GetLatestFeedEntryIDRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_background__feed__queries__pb2.GetLatestFeedEntryIDResponse.FromString, + _registered_method=True) + self.Background_LikeFeedEntry = channel.unary_unary( + '/truffle.os.TruffleOS/Background_LikeFeedEntry', + request_serializer=truffle_dot_os_dot_background__feed__queries__pb2.LikeBackgroundFeedEntryRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_background__feed__queries__pb2.LikeBackgroundFeedEntryResponse.FromString, + _registered_method=True) + self.Background_SubmitFeedFeedback = channel.unary_unary( + '/truffle.os.TruffleOS/Background_SubmitFeedFeedback', + request_serializer=truffle_dot_os_dot_background__feed__queries__pb2.BackgroundFeedFeedbackRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_background__feed__queries__pb2.BackgroundFeedFeedbackResponse.FromString, + _registered_method=True) + self.Builder_StartBuildSession = channel.unary_unary( + '/truffle.os.TruffleOS/Builder_StartBuildSession', + request_serializer=truffle_dot_os_dot_builder__pb2.StartBuildSessionRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_builder__pb2.StartBuildSessionResponse.FromString, + _registered_method=True) + self.Builder_FinishBuildSession = channel.unary_unary( + '/truffle.os.TruffleOS/Builder_FinishBuildSession', + request_serializer=truffle_dot_os_dot_builder__pb2.FinishBuildSessionRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_builder__pb2.FinishBuildSessionResponse.FromString, + _registered_method=True) + self.Client_RegisterNewUser = channel.unary_unary( + '/truffle.os.TruffleOS/Client_RegisterNewUser', + request_serializer=truffle_dot_os_dot_client__user__pb2.RegisterNewUserRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_client__user__pb2.RegisterNewUserResponse.FromString, + _registered_method=True) + self.Client_RegisterNewSession = channel.unary_unary( + '/truffle.os.TruffleOS/Client_RegisterNewSession', + request_serializer=truffle_dot_os_dot_client__session__pb2.RegisterNewSessionRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_client__session__pb2.RegisterNewSessionResponse.FromString, + _registered_method=True) + self.Client_UserIDForToken = channel.unary_unary( + '/truffle.os.TruffleOS/Client_UserIDForToken', + request_serializer=truffle_dot_os_dot_client__user__pb2.UserIDForTokenRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_client__user__pb2.UserIDForTokenResponse.FromString, + _registered_method=True) + self.Client_VerifyNewSessionRegistration = channel.unary_unary( + '/truffle.os.TruffleOS/Client_VerifyNewSessionRegistration', + request_serializer=truffle_dot_os_dot_client__session__pb2.VerifyNewSessionRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_client__session__pb2.NewSessionStatus.FromString, + _registered_method=True) + self.Client_GetUserRecoveryCodes = channel.unary_unary( + '/truffle.os.TruffleOS/Client_GetUserRecoveryCodes', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=truffle_dot_os_dot_client__session__pb2.UserRecoveryCodes.FromString, + _registered_method=True) + self.Client_UpdateClientState = channel.unary_unary( + '/truffle.os.TruffleOS/Client_UpdateClientState', + request_serializer=truffle_dot_os_dot_client__state__pb2.UpdateClientStateRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_client__state__pb2.UpdateClientStateResponse.FromString, + _registered_method=True) + self.Client_GetClientState = channel.unary_unary( + '/truffle.os.TruffleOS/Client_GetClientState', + request_serializer=truffle_dot_os_dot_client__state__pb2.GetClientStateRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_client__state__pb2.GetClientStateResponse.FromString, + _registered_method=True) + self.Client_GetAllClientStates = channel.unary_unary( + '/truffle.os.TruffleOS/Client_GetAllClientStates', + request_serializer=truffle_dot_os_dot_client__state__pb2.GetAllClientStatesRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_client__state__pb2.GetAllClientStatesResponse.FromString, + _registered_method=True) + self.SubscribeToNotifications = channel.unary_stream( + '/truffle.os.TruffleOS/SubscribeToNotifications', + request_serializer=truffle_dot_os_dot_notification__pb2.SubscribeToNotificationsRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_notification__pb2.Notification.FromString, + _registered_method=True) + self.Hardware_GetStats = channel.unary_unary( + '/truffle.os.TruffleOS/Hardware_GetStats', + request_serializer=truffle_dot_os_dot_hardware__stats__pb2.HardwareStatsRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_hardware__stats__pb2.HardwareStats.FromString, + _registered_method=True) + self.Hardware_StatsUpdates = channel.unary_stream( + '/truffle.os.TruffleOS/Hardware_StatsUpdates', + request_serializer=truffle_dot_os_dot_hardware__stats__pb2.HardwareStatsRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_hardware__stats__pb2.HardwareStats.FromString, + _registered_method=True) + self.Hardware_PowerControl = channel.unary_unary( + '/truffle.os.TruffleOS/Hardware_PowerControl', + request_serializer=truffle_dot_os_dot_hardware__control__pb2.HardwarePowerControlRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_hardware__control__pb2.HardwarePowerControlResponse.FromString, + _registered_method=True) + self.System_GetID = channel.unary_unary( + '/truffle.os.TruffleOS/System_GetID', + request_serializer=truffle_dot_os_dot_system__info__pb2.SystemGetIDRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_system__info__pb2.SystemGetIDResponse.FromString, + _registered_method=True) + self.System_GetSettings = channel.unary_unary( + '/truffle.os.TruffleOS/System_GetSettings', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=truffle_dot_os_dot_system__settings__pb2.SystemSettings.FromString, + _registered_method=True) + self.System_SetSettings = channel.unary_unary( + '/truffle.os.TruffleOS/System_SetSettings', + request_serializer=truffle_dot_os_dot_system__settings__pb2.SystemSettings.SerializeToString, + response_deserializer=truffle_dot_os_dot_system__settings__pb2.SystemSettings.FromString, + _registered_method=True) + self.System_GetInfo = channel.unary_unary( + '/truffle.os.TruffleOS/System_GetInfo', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=truffle_dot_os_dot_system__info__pb2.SystemInfo.FromString, + _registered_method=True) + self.System_CheckForUpdate = channel.unary_unary( + '/truffle.os.TruffleOS/System_CheckForUpdate', + request_serializer=truffle_dot_os_dot_system__info__pb2.SystemCheckForUpdateRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_system__info__pb2.SystemCheckForUpdateResponse.FromString, + _registered_method=True) + self.Task_OpenTask = channel.unary_stream( + '/truffle.os.TruffleOS/Task_OpenTask', + request_serializer=truffle_dot_os_dot_task__actions__pb2.OpenTaskRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_task__pb2.TaskStreamUpdate.FromString, + _registered_method=True) + self.Task_InterruptTask = channel.unary_unary( + '/truffle.os.TruffleOS/Task_InterruptTask', + request_serializer=truffle_dot_os_dot_task__actions__pb2.InterruptTaskRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_task__actions__pb2.TaskActionResponse.FromString, + _registered_method=True) + self.Task_RespondToTask = channel.unary_unary( + '/truffle.os.TruffleOS/Task_RespondToTask', + request_serializer=truffle_dot_os_dot_task__user__response__pb2.RespondToTaskRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_task__actions__pb2.TaskActionResponse.FromString, + _registered_method=True) + self.Task_SetAvailableApps = channel.unary_unary( + '/truffle.os.TruffleOS/Task_SetAvailableApps', + request_serializer=truffle_dot_os_dot_task__actions__pb2.TaskSetAvailableAppsRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_task__actions__pb2.TaskSetAvailableAppsResponse.FromString, + _registered_method=True) + self.Task_SearchTasks = channel.unary_unary( + '/truffle.os.TruffleOS/Task_SearchTasks', + request_serializer=truffle_dot_os_dot_task__search__pb2.SearchTasksRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_task__search__pb2.SearchTasksResponse.FromString, + _registered_method=True) + self.Task_GetTasks = channel.unary_stream( + '/truffle.os.TruffleOS/Task_GetTasks', + request_serializer=truffle_dot_os_dot_task__queries__pb2.GetTasksRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_task__pb2.Task.FromString, + _registered_method=True) + self.Task_GetOneTask = channel.unary_unary( + '/truffle.os.TruffleOS/Task_GetOneTask', + request_serializer=truffle_dot_os_dot_task__queries__pb2.GetOneTaskRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_task__pb2.Task.FromString, + _registered_method=True) + self.Task_GetTaskInfos = channel.unary_unary( + '/truffle.os.TruffleOS/Task_GetTaskInfos', + request_serializer=truffle_dot_os_dot_task__queries__pb2.GetTaskInfosRequest.SerializeToString, + response_deserializer=truffle_dot_os_dot_task__queries__pb2.GetTaskInfosResponse.FromString, + _registered_method=True) + + +class TruffleOSServicer(object): + """Missing associated documentation comment in .proto file.""" + + def Apps_DeleteApp(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Apps_GetBackground(self, request, context): + """apps that can contribute to bg feed (ambients) + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Apps_GetForeground(self, request, context): + """apps used in tasks (focuses) + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Apps_GetAll(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Apps_InstallApp(self, request_iterator, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Background_GetFeed(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Background_GetLatestFeedEntryID(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Background_LikeFeedEntry(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Background_SubmitFeedFeedback(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Builder_StartBuildSession(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Builder_FinishBuildSession(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Client_RegisterNewUser(self, request, context): + """NOAUTH. Registers a new user and returns a user ID and a session token. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Client_RegisterNewSession(self, request, context): + """NOAUTH. starts session verification process for a new session on another device. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Client_UserIDForToken(self, request, context): + """get the user id associated with a session token + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Client_VerifyNewSessionRegistration(self, request, context): + """called by an already authenticated client to approve or deny a new session creation request from another device. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Client_GetUserRecoveryCodes(self, request, context): + """WARNING! calling this wipes existing recovery codes, if they exist + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Client_UpdateClientState(self, request, context): + """client can store arbitrary key-value state data on the server + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Client_GetClientState(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Client_GetAllClientStates(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SubscribeToNotifications(self, request, context): + """do this on session start to get your notification stream + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Hardware_GetStats(self, request, context): + """please don't poll this use the damn stream. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Hardware_StatsUpdates(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Hardware_PowerControl(self, request, context): + """this rpc might not return.. so treat calling it as a fire-and-forget + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def System_GetID(self, request, context): + """NO AUTH + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def System_GetSettings(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def System_SetSettings(self, request, context): + """only applies the fields that are explicitly set + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def System_GetInfo(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def System_CheckForUpdate(self, request, context): + """client guys dont use me. this is basically just for dev.. pretty useless due to ota flow. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Task_OpenTask(self, request, context): + """Task == Focus == Foreground App + create or open an existing task and its update stream + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Task_InterruptTask(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Task_RespondToTask(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Task_SetAvailableApps(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Task_SearchTasks(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Task_GetTasks(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Task_GetOneTask(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Task_GetTaskInfos(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_TruffleOSServicer_to_server(servicer, server): + rpc_method_handlers = { + 'Apps_DeleteApp': grpc.unary_unary_rpc_method_handler( + servicer.Apps_DeleteApp, + request_deserializer=truffle_dot_os_dot_app__queries__pb2.DeleteAppRequest.FromString, + response_serializer=truffle_dot_os_dot_app__queries__pb2.DeleteAppResponse.SerializeToString, + ), + 'Apps_GetBackground': grpc.unary_unary_rpc_method_handler( + servicer.Apps_GetBackground, + request_deserializer=truffle_dot_os_dot_app__queries__pb2.GetBackgroundAppsRequest.FromString, + response_serializer=truffle_dot_os_dot_app__queries__pb2.GetBackgroundAppsResponse.SerializeToString, + ), + 'Apps_GetForeground': grpc.unary_unary_rpc_method_handler( + servicer.Apps_GetForeground, + request_deserializer=truffle_dot_os_dot_app__queries__pb2.GetForegroundAppsRequest.FromString, + response_serializer=truffle_dot_os_dot_app__queries__pb2.GetForegroundAppsResponse.SerializeToString, + ), + 'Apps_GetAll': grpc.unary_unary_rpc_method_handler( + servicer.Apps_GetAll, + request_deserializer=truffle_dot_os_dot_app__queries__pb2.GetAllAppsRequest.FromString, + response_serializer=truffle_dot_os_dot_app__queries__pb2.GetAllAppsResponse.SerializeToString, + ), + 'Apps_InstallApp': grpc.stream_stream_rpc_method_handler( + servicer.Apps_InstallApp, + request_deserializer=truffle_dot_os_dot_installer__pb2.AppInstallRequest.FromString, + response_serializer=truffle_dot_os_dot_installer__pb2.AppInstallResponse.SerializeToString, + ), + 'Background_GetFeed': grpc.unary_unary_rpc_method_handler( + servicer.Background_GetFeed, + request_deserializer=truffle_dot_os_dot_background__feed__queries__pb2.GetBackgroundFeedRequest.FromString, + response_serializer=truffle_dot_os_dot_background__feed__queries__pb2.GetBackgroundFeedResponse.SerializeToString, + ), + 'Background_GetLatestFeedEntryID': grpc.unary_unary_rpc_method_handler( + servicer.Background_GetLatestFeedEntryID, + request_deserializer=truffle_dot_os_dot_background__feed__queries__pb2.GetLatestFeedEntryIDRequest.FromString, + response_serializer=truffle_dot_os_dot_background__feed__queries__pb2.GetLatestFeedEntryIDResponse.SerializeToString, + ), + 'Background_LikeFeedEntry': grpc.unary_unary_rpc_method_handler( + servicer.Background_LikeFeedEntry, + request_deserializer=truffle_dot_os_dot_background__feed__queries__pb2.LikeBackgroundFeedEntryRequest.FromString, + response_serializer=truffle_dot_os_dot_background__feed__queries__pb2.LikeBackgroundFeedEntryResponse.SerializeToString, + ), + 'Background_SubmitFeedFeedback': grpc.unary_unary_rpc_method_handler( + servicer.Background_SubmitFeedFeedback, + request_deserializer=truffle_dot_os_dot_background__feed__queries__pb2.BackgroundFeedFeedbackRequest.FromString, + response_serializer=truffle_dot_os_dot_background__feed__queries__pb2.BackgroundFeedFeedbackResponse.SerializeToString, + ), + 'Builder_StartBuildSession': grpc.unary_unary_rpc_method_handler( + servicer.Builder_StartBuildSession, + request_deserializer=truffle_dot_os_dot_builder__pb2.StartBuildSessionRequest.FromString, + response_serializer=truffle_dot_os_dot_builder__pb2.StartBuildSessionResponse.SerializeToString, + ), + 'Builder_FinishBuildSession': grpc.unary_unary_rpc_method_handler( + servicer.Builder_FinishBuildSession, + request_deserializer=truffle_dot_os_dot_builder__pb2.FinishBuildSessionRequest.FromString, + response_serializer=truffle_dot_os_dot_builder__pb2.FinishBuildSessionResponse.SerializeToString, + ), + 'Client_RegisterNewUser': grpc.unary_unary_rpc_method_handler( + servicer.Client_RegisterNewUser, + request_deserializer=truffle_dot_os_dot_client__user__pb2.RegisterNewUserRequest.FromString, + response_serializer=truffle_dot_os_dot_client__user__pb2.RegisterNewUserResponse.SerializeToString, + ), + 'Client_RegisterNewSession': grpc.unary_unary_rpc_method_handler( + servicer.Client_RegisterNewSession, + request_deserializer=truffle_dot_os_dot_client__session__pb2.RegisterNewSessionRequest.FromString, + response_serializer=truffle_dot_os_dot_client__session__pb2.RegisterNewSessionResponse.SerializeToString, + ), + 'Client_UserIDForToken': grpc.unary_unary_rpc_method_handler( + servicer.Client_UserIDForToken, + request_deserializer=truffle_dot_os_dot_client__user__pb2.UserIDForTokenRequest.FromString, + response_serializer=truffle_dot_os_dot_client__user__pb2.UserIDForTokenResponse.SerializeToString, + ), + 'Client_VerifyNewSessionRegistration': grpc.unary_unary_rpc_method_handler( + servicer.Client_VerifyNewSessionRegistration, + request_deserializer=truffle_dot_os_dot_client__session__pb2.VerifyNewSessionRequest.FromString, + response_serializer=truffle_dot_os_dot_client__session__pb2.NewSessionStatus.SerializeToString, + ), + 'Client_GetUserRecoveryCodes': grpc.unary_unary_rpc_method_handler( + servicer.Client_GetUserRecoveryCodes, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=truffle_dot_os_dot_client__session__pb2.UserRecoveryCodes.SerializeToString, + ), + 'Client_UpdateClientState': grpc.unary_unary_rpc_method_handler( + servicer.Client_UpdateClientState, + request_deserializer=truffle_dot_os_dot_client__state__pb2.UpdateClientStateRequest.FromString, + response_serializer=truffle_dot_os_dot_client__state__pb2.UpdateClientStateResponse.SerializeToString, + ), + 'Client_GetClientState': grpc.unary_unary_rpc_method_handler( + servicer.Client_GetClientState, + request_deserializer=truffle_dot_os_dot_client__state__pb2.GetClientStateRequest.FromString, + response_serializer=truffle_dot_os_dot_client__state__pb2.GetClientStateResponse.SerializeToString, + ), + 'Client_GetAllClientStates': grpc.unary_unary_rpc_method_handler( + servicer.Client_GetAllClientStates, + request_deserializer=truffle_dot_os_dot_client__state__pb2.GetAllClientStatesRequest.FromString, + response_serializer=truffle_dot_os_dot_client__state__pb2.GetAllClientStatesResponse.SerializeToString, + ), + 'SubscribeToNotifications': grpc.unary_stream_rpc_method_handler( + servicer.SubscribeToNotifications, + request_deserializer=truffle_dot_os_dot_notification__pb2.SubscribeToNotificationsRequest.FromString, + response_serializer=truffle_dot_os_dot_notification__pb2.Notification.SerializeToString, + ), + 'Hardware_GetStats': grpc.unary_unary_rpc_method_handler( + servicer.Hardware_GetStats, + request_deserializer=truffle_dot_os_dot_hardware__stats__pb2.HardwareStatsRequest.FromString, + response_serializer=truffle_dot_os_dot_hardware__stats__pb2.HardwareStats.SerializeToString, + ), + 'Hardware_StatsUpdates': grpc.unary_stream_rpc_method_handler( + servicer.Hardware_StatsUpdates, + request_deserializer=truffle_dot_os_dot_hardware__stats__pb2.HardwareStatsRequest.FromString, + response_serializer=truffle_dot_os_dot_hardware__stats__pb2.HardwareStats.SerializeToString, + ), + 'Hardware_PowerControl': grpc.unary_unary_rpc_method_handler( + servicer.Hardware_PowerControl, + request_deserializer=truffle_dot_os_dot_hardware__control__pb2.HardwarePowerControlRequest.FromString, + response_serializer=truffle_dot_os_dot_hardware__control__pb2.HardwarePowerControlResponse.SerializeToString, + ), + 'System_GetID': grpc.unary_unary_rpc_method_handler( + servicer.System_GetID, + request_deserializer=truffle_dot_os_dot_system__info__pb2.SystemGetIDRequest.FromString, + response_serializer=truffle_dot_os_dot_system__info__pb2.SystemGetIDResponse.SerializeToString, + ), + 'System_GetSettings': grpc.unary_unary_rpc_method_handler( + servicer.System_GetSettings, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=truffle_dot_os_dot_system__settings__pb2.SystemSettings.SerializeToString, + ), + 'System_SetSettings': grpc.unary_unary_rpc_method_handler( + servicer.System_SetSettings, + request_deserializer=truffle_dot_os_dot_system__settings__pb2.SystemSettings.FromString, + response_serializer=truffle_dot_os_dot_system__settings__pb2.SystemSettings.SerializeToString, + ), + 'System_GetInfo': grpc.unary_unary_rpc_method_handler( + servicer.System_GetInfo, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=truffle_dot_os_dot_system__info__pb2.SystemInfo.SerializeToString, + ), + 'System_CheckForUpdate': grpc.unary_unary_rpc_method_handler( + servicer.System_CheckForUpdate, + request_deserializer=truffle_dot_os_dot_system__info__pb2.SystemCheckForUpdateRequest.FromString, + response_serializer=truffle_dot_os_dot_system__info__pb2.SystemCheckForUpdateResponse.SerializeToString, + ), + 'Task_OpenTask': grpc.unary_stream_rpc_method_handler( + servicer.Task_OpenTask, + request_deserializer=truffle_dot_os_dot_task__actions__pb2.OpenTaskRequest.FromString, + response_serializer=truffle_dot_os_dot_task__pb2.TaskStreamUpdate.SerializeToString, + ), + 'Task_InterruptTask': grpc.unary_unary_rpc_method_handler( + servicer.Task_InterruptTask, + request_deserializer=truffle_dot_os_dot_task__actions__pb2.InterruptTaskRequest.FromString, + response_serializer=truffle_dot_os_dot_task__actions__pb2.TaskActionResponse.SerializeToString, + ), + 'Task_RespondToTask': grpc.unary_unary_rpc_method_handler( + servicer.Task_RespondToTask, + request_deserializer=truffle_dot_os_dot_task__user__response__pb2.RespondToTaskRequest.FromString, + response_serializer=truffle_dot_os_dot_task__actions__pb2.TaskActionResponse.SerializeToString, + ), + 'Task_SetAvailableApps': grpc.unary_unary_rpc_method_handler( + servicer.Task_SetAvailableApps, + request_deserializer=truffle_dot_os_dot_task__actions__pb2.TaskSetAvailableAppsRequest.FromString, + response_serializer=truffle_dot_os_dot_task__actions__pb2.TaskSetAvailableAppsResponse.SerializeToString, + ), + 'Task_SearchTasks': grpc.unary_unary_rpc_method_handler( + servicer.Task_SearchTasks, + request_deserializer=truffle_dot_os_dot_task__search__pb2.SearchTasksRequest.FromString, + response_serializer=truffle_dot_os_dot_task__search__pb2.SearchTasksResponse.SerializeToString, + ), + 'Task_GetTasks': grpc.unary_stream_rpc_method_handler( + servicer.Task_GetTasks, + request_deserializer=truffle_dot_os_dot_task__queries__pb2.GetTasksRequest.FromString, + response_serializer=truffle_dot_os_dot_task__pb2.Task.SerializeToString, + ), + 'Task_GetOneTask': grpc.unary_unary_rpc_method_handler( + servicer.Task_GetOneTask, + request_deserializer=truffle_dot_os_dot_task__queries__pb2.GetOneTaskRequest.FromString, + response_serializer=truffle_dot_os_dot_task__pb2.Task.SerializeToString, + ), + 'Task_GetTaskInfos': grpc.unary_unary_rpc_method_handler( + servicer.Task_GetTaskInfos, + request_deserializer=truffle_dot_os_dot_task__queries__pb2.GetTaskInfosRequest.FromString, + response_serializer=truffle_dot_os_dot_task__queries__pb2.GetTaskInfosResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'truffle.os.TruffleOS', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + server.add_registered_method_handlers('truffle.os.TruffleOS', rpc_method_handlers) + + + # This class is part of an EXPERIMENTAL API. +class TruffleOS(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def Apps_DeleteApp(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Apps_DeleteApp', + truffle_dot_os_dot_app__queries__pb2.DeleteAppRequest.SerializeToString, + truffle_dot_os_dot_app__queries__pb2.DeleteAppResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Apps_GetBackground(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Apps_GetBackground', + truffle_dot_os_dot_app__queries__pb2.GetBackgroundAppsRequest.SerializeToString, + truffle_dot_os_dot_app__queries__pb2.GetBackgroundAppsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Apps_GetForeground(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Apps_GetForeground', + truffle_dot_os_dot_app__queries__pb2.GetForegroundAppsRequest.SerializeToString, + truffle_dot_os_dot_app__queries__pb2.GetForegroundAppsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Apps_GetAll(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Apps_GetAll', + truffle_dot_os_dot_app__queries__pb2.GetAllAppsRequest.SerializeToString, + truffle_dot_os_dot_app__queries__pb2.GetAllAppsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Apps_InstallApp(request_iterator, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.stream_stream( + request_iterator, + target, + '/truffle.os.TruffleOS/Apps_InstallApp', + truffle_dot_os_dot_installer__pb2.AppInstallRequest.SerializeToString, + truffle_dot_os_dot_installer__pb2.AppInstallResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Background_GetFeed(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Background_GetFeed', + truffle_dot_os_dot_background__feed__queries__pb2.GetBackgroundFeedRequest.SerializeToString, + truffle_dot_os_dot_background__feed__queries__pb2.GetBackgroundFeedResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Background_GetLatestFeedEntryID(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Background_GetLatestFeedEntryID', + truffle_dot_os_dot_background__feed__queries__pb2.GetLatestFeedEntryIDRequest.SerializeToString, + truffle_dot_os_dot_background__feed__queries__pb2.GetLatestFeedEntryIDResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Background_LikeFeedEntry(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Background_LikeFeedEntry', + truffle_dot_os_dot_background__feed__queries__pb2.LikeBackgroundFeedEntryRequest.SerializeToString, + truffle_dot_os_dot_background__feed__queries__pb2.LikeBackgroundFeedEntryResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Background_SubmitFeedFeedback(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Background_SubmitFeedFeedback', + truffle_dot_os_dot_background__feed__queries__pb2.BackgroundFeedFeedbackRequest.SerializeToString, + truffle_dot_os_dot_background__feed__queries__pb2.BackgroundFeedFeedbackResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Builder_StartBuildSession(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Builder_StartBuildSession', + truffle_dot_os_dot_builder__pb2.StartBuildSessionRequest.SerializeToString, + truffle_dot_os_dot_builder__pb2.StartBuildSessionResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Builder_FinishBuildSession(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Builder_FinishBuildSession', + truffle_dot_os_dot_builder__pb2.FinishBuildSessionRequest.SerializeToString, + truffle_dot_os_dot_builder__pb2.FinishBuildSessionResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Client_RegisterNewUser(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Client_RegisterNewUser', + truffle_dot_os_dot_client__user__pb2.RegisterNewUserRequest.SerializeToString, + truffle_dot_os_dot_client__user__pb2.RegisterNewUserResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Client_RegisterNewSession(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Client_RegisterNewSession', + truffle_dot_os_dot_client__session__pb2.RegisterNewSessionRequest.SerializeToString, + truffle_dot_os_dot_client__session__pb2.RegisterNewSessionResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Client_UserIDForToken(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Client_UserIDForToken', + truffle_dot_os_dot_client__user__pb2.UserIDForTokenRequest.SerializeToString, + truffle_dot_os_dot_client__user__pb2.UserIDForTokenResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Client_VerifyNewSessionRegistration(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Client_VerifyNewSessionRegistration', + truffle_dot_os_dot_client__session__pb2.VerifyNewSessionRequest.SerializeToString, + truffle_dot_os_dot_client__session__pb2.NewSessionStatus.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Client_GetUserRecoveryCodes(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Client_GetUserRecoveryCodes', + google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + truffle_dot_os_dot_client__session__pb2.UserRecoveryCodes.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Client_UpdateClientState(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Client_UpdateClientState', + truffle_dot_os_dot_client__state__pb2.UpdateClientStateRequest.SerializeToString, + truffle_dot_os_dot_client__state__pb2.UpdateClientStateResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Client_GetClientState(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Client_GetClientState', + truffle_dot_os_dot_client__state__pb2.GetClientStateRequest.SerializeToString, + truffle_dot_os_dot_client__state__pb2.GetClientStateResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Client_GetAllClientStates(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Client_GetAllClientStates', + truffle_dot_os_dot_client__state__pb2.GetAllClientStatesRequest.SerializeToString, + truffle_dot_os_dot_client__state__pb2.GetAllClientStatesResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def SubscribeToNotifications(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_stream( + request, + target, + '/truffle.os.TruffleOS/SubscribeToNotifications', + truffle_dot_os_dot_notification__pb2.SubscribeToNotificationsRequest.SerializeToString, + truffle_dot_os_dot_notification__pb2.Notification.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Hardware_GetStats(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Hardware_GetStats', + truffle_dot_os_dot_hardware__stats__pb2.HardwareStatsRequest.SerializeToString, + truffle_dot_os_dot_hardware__stats__pb2.HardwareStats.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Hardware_StatsUpdates(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_stream( + request, + target, + '/truffle.os.TruffleOS/Hardware_StatsUpdates', + truffle_dot_os_dot_hardware__stats__pb2.HardwareStatsRequest.SerializeToString, + truffle_dot_os_dot_hardware__stats__pb2.HardwareStats.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Hardware_PowerControl(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Hardware_PowerControl', + truffle_dot_os_dot_hardware__control__pb2.HardwarePowerControlRequest.SerializeToString, + truffle_dot_os_dot_hardware__control__pb2.HardwarePowerControlResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def System_GetID(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/System_GetID', + truffle_dot_os_dot_system__info__pb2.SystemGetIDRequest.SerializeToString, + truffle_dot_os_dot_system__info__pb2.SystemGetIDResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def System_GetSettings(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/System_GetSettings', + google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + truffle_dot_os_dot_system__settings__pb2.SystemSettings.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def System_SetSettings(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/System_SetSettings', + truffle_dot_os_dot_system__settings__pb2.SystemSettings.SerializeToString, + truffle_dot_os_dot_system__settings__pb2.SystemSettings.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def System_GetInfo(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/System_GetInfo', + google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + truffle_dot_os_dot_system__info__pb2.SystemInfo.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def System_CheckForUpdate(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/System_CheckForUpdate', + truffle_dot_os_dot_system__info__pb2.SystemCheckForUpdateRequest.SerializeToString, + truffle_dot_os_dot_system__info__pb2.SystemCheckForUpdateResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Task_OpenTask(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_stream( + request, + target, + '/truffle.os.TruffleOS/Task_OpenTask', + truffle_dot_os_dot_task__actions__pb2.OpenTaskRequest.SerializeToString, + truffle_dot_os_dot_task__pb2.TaskStreamUpdate.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Task_InterruptTask(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Task_InterruptTask', + truffle_dot_os_dot_task__actions__pb2.InterruptTaskRequest.SerializeToString, + truffle_dot_os_dot_task__actions__pb2.TaskActionResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Task_RespondToTask(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Task_RespondToTask', + truffle_dot_os_dot_task__user__response__pb2.RespondToTaskRequest.SerializeToString, + truffle_dot_os_dot_task__actions__pb2.TaskActionResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Task_SetAvailableApps(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Task_SetAvailableApps', + truffle_dot_os_dot_task__actions__pb2.TaskSetAvailableAppsRequest.SerializeToString, + truffle_dot_os_dot_task__actions__pb2.TaskSetAvailableAppsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Task_SearchTasks(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Task_SearchTasks', + truffle_dot_os_dot_task__search__pb2.SearchTasksRequest.SerializeToString, + truffle_dot_os_dot_task__search__pb2.SearchTasksResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Task_GetTasks(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_stream( + request, + target, + '/truffle.os.TruffleOS/Task_GetTasks', + truffle_dot_os_dot_task__queries__pb2.GetTasksRequest.SerializeToString, + truffle_dot_os_dot_task__pb2.Task.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Task_GetOneTask(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Task_GetOneTask', + truffle_dot_os_dot_task__queries__pb2.GetOneTaskRequest.SerializeToString, + truffle_dot_os_dot_task__pb2.Task.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Task_GetTaskInfos(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/truffle.os.TruffleOS/Task_GetTaskInfos', + truffle_dot_os_dot_task__queries__pb2.GetTaskInfosRequest.SerializeToString, + truffle_dot_os_dot_task__queries__pb2.GetTaskInfosResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) From 0ffb2b1b45c02c7b4bcd4cf23af90c0a39a85383 Mon Sep 17 00:00:00 2001 From: notabd7-deepshard Date: Fri, 30 Jan 2026 02:24:29 -0800 Subject: [PATCH 14/15] build wheel --- .github/workflows/build.yml | 46 +++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..3eab1ca --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,46 @@ +name: Build and Release + +on: + push: + branches: [main] + tags: ['v*'] + pull_request: + branches: [main] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Install build dependencies + run: pip install build + + - name: Build wheel + run: python -m build + + - name: Test wheel installs and imports + run: | + pip install dist/*.whl + python -c "from truffile import TruffleClient; print('✓ Import OK')" + truffile --help + + - name: Upload wheel artifact + uses: actions/upload-artifact@v4 + with: + name: truffile-wheel + path: dist/*.whl + + - name: Upload sdist artifact + uses: actions/upload-artifact@v4 + with: + name: truffile-sdist + path: dist/*.tar.gz + From 850944d609abd7f78dcae0ab426710ea2fbecf7e Mon Sep 17 00:00:00 2001 From: notabd7-deepshard Date: Fri, 30 Jan 2026 02:26:29 -0800 Subject: [PATCH 15/15] READ me --- README.md | 82 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 67 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index cfece36..b198ddc 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,78 @@ -truffile -hope the name survives +# truffile -used same protos (copied it over) -setup pyproject +TruffleOS SDK - deploy apps to Truffle devices +## install ```bash -cd /Users/truffle/work/3fw/truffile -python -m venv .venv -source .venv/bin/activate +pip install truffile +``` + +or from source: +```bash +git clone +cd truffile pip install -e . ``` -imports working +## commands -buid an app using -APP.MD -cli coming soon +```bash +# find truffle devices on your network +truffile scan +# connect to a device (first time requires approval on device) +truffile connect truffle-6272 -upload apps -```bash -python deploy_test.py ambient ./example-apps/ambient/hedge -python deploy_test.py focus ./example-apps/ambient/finance +# deploy an app from current directory +truffile deploy + +# deploy an app from a specific path +truffile deploy ./my-app + +# deploy with interactive shell (for debugging) +truffile deploy -i + +# list installed apps on connected device +truffile list apps + +# list connected devices +truffile list devices + +# disconnect from a device +truffile disconnect truffle-6272 + +# disconnect from all devices +truffile disconnect all +``` + +## truffile.yaml + +apps need a `truffile.yaml` in their directory: + +```yaml +metadata: + name: My App + description: does cool stuff + type: ambient # or focus + +files: + - app.py + - icon.png + +run: | + pip install requests + pip install gourmet[ambient] --extra-index-url https://test.pypi.org/simple/ + +process: + cmd: python + args: [app.py] + env: + MY_VAR: value ``` + +## example apps + +see `example-apps/` for working examples: +- `example-apps/ambient/hedge` - background app +- `example-apps/focus/finance` - foreground app

    ;3IzJ)>H|%;n|$ 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 literal 0 HcmV?d00001 diff --git a/example-apps/ambient/twitter/icon_aidan.png b/example-apps/ambient/twitter/icon_aidan.png new file mode 100644 index 0000000000000000000000000000000000000000..51516fb00d22d5acc0c0f570471865ef0c6fcbab GIT binary patch literal 3641 zcmeH~={pqe8poMt#3T(ycFkCaEM*A^gRyT7Mik0Ywlu~rO=GMhVNhh>Wk$9VWli>E z&(D_fi)6`=-7r6A&Wm&Yfb;sic%J*kbKTeXy1w7*dhXAiaNWxIELaH4!oqUa)C6V2 ztbPAJ>}<@t%Aq=+g@ud76s2bu#=4%@I?g#L6hEo?(k#ZLuuqbNVh5#=Bgv7R7-pFV z0?mw`8|!nBpu}g$1W3Z>X$UuWg2-fUiNOA_49k$G*RvJk5{*K30&M9vK-I3F!ZD*&G1wQic&ZSwU$;_Y5GEbQcK_ z1b`(^^~!S~AOn#=WgygqE!mOhIxK^g!-E|`<`j7&S%{QB#nT754inV4XNn{`ut}2P zg-B)p&uNi>I!+Uq0g~u3|3Zo>B=~=!|H(Sy2??e{T%T=B;kux6ZRU;Vu-C~yjFP$L z&>OtlS<+?01-dD1gcBY5p9SMx#?OJw)ttlK@MHBPncBOP)z0lbo|>UqKuA}ed#{nN zukZ6qOMYkc-SknVO|=J>KD=YeqFP3?4SvF{_@jnw>T~J;MR(%dP_2?nOGVemEn#6{jBv>U z?W1DI&ri=+-+dI)h<0tzyBC>ZuP2bH=$uXQx2-Xjzh7c$=S@JjYi69`SA>q!Dgy0c z!9t=0+rk=`)|-Y&$(7J%0l#Dw&mkzLimEjrXP;*j|Gi#8O#9)Ev2aPJkD=n$*3W@a zrbjXjm1Y`VAmvzozTOj8bXgPrXm9!N&Uo9ATZ4vtebC3v;oD2|5~tA%^xd^?drEe< z9#J*H;=o#o@9b)k^i?QH=u!F|Jrth4<2`BuH8I`~NOB`lWI0iK!*eya+l_+OGV(=U zO?7ml&VhT#JRddi^dPlAIr&;Ke~u5gJ4mMp!g^Pq(bHwDLmYf|`SsW>RNKZ6Dwp1h zQ5`J|Ou?nmFU|cTU;v>xPGXS)njh4gD-B7VY!L{X|3LKFLH0+XVG00QM-dsT+=}G< zI(IvXbD~#O_de;MWA}{ks!C1*;?Z7aR^Za^=1Lt-kFmdTPE41wpE(c8_*^=uown`% zU}nSv6X>!Huz@Lj`}t2CTzUp>muK_#3>&3ri2P_QPb-wVk){hZNemUFw!K0fMFN`o ztfFuevdIN<7>2&=Xo;X>Mz?qV(c7HHSjDqbccqH?-Sd*gwCTo-c5DO$&b@H(X93gr zptVZx%e#>EndLtVy@a4(6(o**<$HVH=6ATra(!=K@Hw#6)o7&>g|zBc{|$D~i>|Yd z_-Xz6!laHaoi_ZD{kjBx#GkM^ug9l7cCC%_upi$sczx~cPI?kQm&4F4|NMU=J zn&(XzG4QHn^L+L$?Ybp-5vLb zp5svh&d3R zR*EWWirA;wRNm^(SW?$F9e!&TPC=(2?^zn~oo-?Ko@m(do^bMy*T%P2_krP#=+l*l z6tnH!waHbAq%Pr~-*1h*e-FLP?XQFF(YsozZZ%rHFC(14@LHqrQW)`C_?E|gj0DE@ zTRY(-G!(naW+=iQxBO91%h}@V`@mniQk9Xn4fszhiUjc`x(HJ(NN|ibV)Hm(4YyY< zGc->LO<3hRa`%VvhI8}!RpZ=i#b>T!bJ!Hf;hlc7I@-n*e%U7u8k$ZmVRa9AJaQNY zeK%mNEl)MxZT7yXRGh2YR?d>+o9OxCt6sx+H5S5WatVtzT%c;t)ef%Cv{>W?aR;~@ z-6~s`BY*f-On>e|9BIr#aTLdLOIX_z7Y}3l4G|U;qHdxqNnBe)EBMy%>pXZ>3DSOK zw%!o})^;1jIULutYlG37tDx#8YlxAb_+*sKv+w$%^rk#_vL}cmLSFzVg zI!^Vzm2S*099xh5-e%^Hy7aI-?uxwjpS7b1e}JBVpE}#_+4p`C?2$&Q{HtjK5T)2h zPR}UVn(#)6s0E!6TU{WV6nRZ+g1w|X%%%?<8EBj+j85Dl zi1DFgF5lR57%af2a+f~t$Bf+&- z>Pi=$JeKb^gv9wgljZ_*qhs7v6f%%F0A+tu{`}A5{hk+>$K5!fGUT)~-20TA^X7#b z#F1uOAL?yQrCos%(Hl5`Y#k#NY}wzNk$ib36bDFPbBM6di3B*pPr~Qi{|w1l!K6~W z6b`4(-`;6nuhSrw%2b7F9Z%e(9@0`KUO!f=Qm}$?&Rjcy)KRprguKabD{tVQDUhtbj zkb&FeZ3*58RvutzBZyznDnZxgw9>w zd*vq%CPeaswW9KtTH~GM7x7W$6Eb&zEAs~5vS+0pmRi=`_r}gx_Fk#SN|+?}%Km=S z7RX>u*>8x6kLnK_xFr|hGrTEc+Mnc8hi9gymKmlphuYb*>P)JKn`N%6Vk(!)9VXc# z(m(kyl<4mra)LpfM( None: + loop = asyncio.get_running_loop() + deadline = loop.time() + timeout_s + + def logged_in() -> bool: + url = driver.current_url or "" + if "/home" in url and "x.com" in url: + return True + try: + return any(c.get("name") == "auth_token" for c in driver.get_cookies()) + except Exception: + return False + + while True: + if logged_in(): + return + if loop.time() >= deadline: + raise TimeoutError("Timed out waiting for user to log in") + await asyncio.sleep(poll_s) + + +async def main() -> int: + err = 0 + try: + driver = create_driver( + app_url="https://x.com", + fullscreen=True + ) + driver.get("https://x.com/") + logger.info("Waiting for user to log in to Twitter/X") + logger.error("Please log in to Twitter/X in the opened browser window") + await wait_for_login(driver, timeout_s=900) + logger.info("Logged in to Twitter/X successfully") + await asyncio.sleep(0.2) #dont need this + driver.quit() + driver = None + err = 0 + except Exception as e: + logger.exception("Error during Twitter/X onboarding") + err = 1 + finally: + try: + if driver: + driver.quit() + except Exception: + pass + return err + + + +if __name__ == "__main__": + ec = asyncio.run(main()) + exit(ec) \ No newline at end of file diff --git a/example-apps/ambient/twitter/onboard_test.py b/example-apps/ambient/twitter/onboard_test.py new file mode 100644 index 0000000..e234237 --- /dev/null +++ b/example-apps/ambient/twitter/onboard_test.py @@ -0,0 +1,73 @@ +import time +import random +import os +import undetected_chromedriver as uc +from selenium.webdriver.common.by import By +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC +from selenium.common.exceptions import TimeoutException +from selenium.webdriver.remote.webelement import WebElement +from gourmet.ambient import AmbientContext, run_ambient + +from gourmet.desktop.chromedriver import create_driver, human_sleep, human_scroll +from gourmet.desktop.xvfb import start_xvfb, stop_xvfb +from dataclasses import dataclass +from typing import Optional +import asyncio +import logging +logger = logging.getLogger(__name__) +logger.setLevel(logging.DEBUG) +async def wait_for_login(driver, timeout_s: int = 900, poll_s: float = 0.2) -> None: + loop = asyncio.get_running_loop() + deadline = loop.time() + timeout_s + + def logged_in() -> bool: + url = driver.current_url or "" + if "/home" in url and "x.com" in url: + return True + try: + return any(c.get("name") == "auth_token" for c in driver.get_cookies()) + except Exception: + return False + + while True: + if logged_in(): + return + if loop.time() >= deadline: + raise TimeoutError("Timed out waiting for user to log in") + await asyncio.sleep(poll_s) + + +async def main() -> int: + err = 0 + try: + await start_xvfb() + driver = create_driver( + app_url="https://x.com", + fullscreen=True + ) + driver.get("https://x.com/") + logger.info("Waiting for user to log in to Twitter/X") + logger.error("Please log in to Twitter/X in the opened browser window") + await wait_for_login(driver, timeout_s=900) + logger.info("Logged in to Twitter/X successfully") + driver.quit() + driver = None + err = 0 + except Exception as e: + logger.exception("Error during Twitter/X onboarding") + err = 1 + finally: + try: + if driver: + driver.quit() + except Exception: + pass + await stop_xvfb() + return err + + + +if __name__ == "__main__": + ec = asyncio.run(main()) + exit(ec) \ No newline at end of file diff --git a/example-apps/ambient/twitter/truffile.yaml b/example-apps/ambient/twitter/truffile.yaml new file mode 100644 index 0000000..141675e --- /dev/null +++ b/example-apps/ambient/twitter/truffile.yaml @@ -0,0 +1,61 @@ +metadata: + name: Xeet + type: background + description: | + Enable your Truffle¹ to browse your X feed and post curated content to your client. + By downloading Xeet to your Truffle account, you assume full legal and financial responsibility for the use of this software on your Truffle¹ and agree that Deepshard shall not be liable for any actions you take with Xeet. + Deepshard is not affiliated with X. Users must abide by X's terms of service. This application is for demonstration purposes only. + process: + cmd: + - python + - ambient.py + working_directory: / + environment: + PYTHONUNBUFFERED: "1" + icon_file: ./icon.png + default_schedule: + type: interval + interval: + duration: 30m +steps: + - name: Welcome + type: welcome + content: | + Welcome to Xeet. + This app will allow your Truffle to post tweets from accounts you follow directly to your feed. + This app does not condone the use of bots or automation that violates X's terms of service. + Using this app violates any and all terms of service of Truffle. Deepshard will not be held responsible for any actions taken by X against your account. + - name: Copy application files + type: files + files: + - source: ./ambient.py + destination: ./ambient.py + - source: ./onboard.py + destination: ./onboard.py + - name: Install dependencies + type: bash + run: | + pip install requests undetected-chromedriver selenium + - name: Sign into X + type: vnc + cmd: + - python + - onboard.py + closes_on_complete: true + description: | + A VNC window will open. Please sign into your X account to continue the installation. + This app does not condone the use of bots or automation that violates X's terms of service. + If the tab glitches out, press Ctrl+T to break out of fullscreen mode and try again. + Installation will continue once you have successfully signed in. + - name: Finalize installation + type: bash + run: | + sync || true + + + + + + + + \ No newline at end of file diff --git a/example-apps/focus/research/icon.png b/example-apps/focus/research/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fbd6440c4f1fb099a17e34ef60231251288bb82c GIT binary patch literal 8841 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 str: + messages = [ + {"role": "system", "content": self.system_prompt}, + {"role": "user", "content": query} + ] + response = requests.post( + self.url, + json={ + "model": self.model, + "messages": messages + }, + headers={ + "accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {self.key}" + } + ) + return response.json()["choices"][0]["message"]["content"] + +HOST = "0.0.0.0" +PORT = 8000 + +mcp = FastMCP("research", stateless_http=True, host=HOST, port=PORT) + + +@mcp.tool("search_perplexity", description="Searches Perplexity AI for an answer to the given query.") +async def search_perplexity(query: str) -> str: + searcher = PerplexitySearcher() + result = searcher.run(query) + return result + +@mcp.tool("search_web") +async def search_web(query: str, num_results: int = 5) -> str: + + results : List[dict] = DDGS().text(query, max_results=num_results, region='us-en', safesearch='off') # type: ignore + formatted_results = "\n".join([f"{i+1}. {res['title']}: {res['href']}" for i, res in enumerate(results)]) + return formatted_results + +@mcp.tool("search_news") +async def search_news(query: str, num_results: int = 5) -> str: + results : List[dict] = DDGS().news(query, max_results=num_results, region='us-en', safesearch='off') # type: ignore + formatted_results = "\n".join([f"{i+1}. [{res['source']}] '{res['title']}': {res['body']} <{res['url']}>" for i, res in enumerate(results)]) + return formatted_results + +@mcp.tool("fetch_url_content", description="Fetches and extracts the main content from a given URL. Will return text and any images found in markdown format. Some sites may block scraping.") +async def fetch_url_content(url: str) -> str: + try: + content = extract_content_from_url(url.strip()) + if content is None: + return "Error: Failed to extract content from the URL. Was it valid? This site may block scraping." + + content_str = f"<{url}>\n\n{content.text}\n" + if content.images: + content_str += "\n\nImages:\n" + "\n".join(content.images) + if content.source_name: + content_str = f"Source: {content.source_name}\n\n" + content_str + return content_str + except Exception as e: + return f"Error: Exception occurred while fetching URL: {str(e)}" + +def main(): + print(f"Starting MCP server on {HOST}:{PORT}") + mcp.run(transport="streamable-http") + + + + + +if __name__ == "__main__": + main() + + + diff --git a/example-apps/focus/research/truffile.yaml b/example-apps/focus/research/truffile.yaml new file mode 100644 index 0000000..3154533 --- /dev/null +++ b/example-apps/focus/research/truffile.yaml @@ -0,0 +1,39 @@ +metadata: + name: Research + type: foreground + description: | + Tools to help your Truffle¹ research and gather information from the web. + process: + cmd: + - python + - research.py + working_directory: / + environment: + PYTHONUNBUFFERED: "1" + icon_file: ./icon.png +steps: + - name: Welcome + type: welcome + content: | + This app provides tools to help your Truffle research and gather information from the web. + It includes web search, scraping and data extraction capabilities to assist in your research tasks. + Installation will set up the necessary dependencies and files, and may take a moment. + - name: Copy application files + type: files + files: + - source: ./research.py + destination: ./research.py + - name: Install dependencies + type: bash + run: | + pip install --no-cache-dir -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ 'gourmet[abrasive]==0.1.dev45' + pip install --no-cache-dir --force-reinstall requests trafilatura==2.0.0 tld==0.13.1 + pip install --no-cache-dir mcp ddgs + + + + + + + + \ No newline at end of file diff --git a/example-apps/truffile-example.yaml b/example-apps/truffile-example.yaml new file mode 100644 index 0000000..0e38580 --- /dev/null +++ b/example-apps/truffile-example.yaml @@ -0,0 +1,76 @@ +metadata: + name: Twitter App + type: background + process: + cmd: + - python + - app.py + working_directory: / + environment: + PYTHONUNBUFFERED: "1" + icon_file: ./icon.png + default_schedule: + type: interval + interval: + duration: 1h + schedule: + daily_window: "09:00-17:30" # optional + allowed_days: [mon, tue, wed, thu, fri] # optional, default = all days +steps: + - name: Copy application files + type: files + files: + - source: ./requirements.txt + destination: ./requirements.txt + - source: ./app.py + destination: ./app.py + - source: ./config.yaml + destination: ./config.yaml + permissions: 600 # optional + - name: Install dependencies + type: bash + run: | + pip install requests + apk add --no-cache btop + - name: Sign into X + type: vnc + cmd: + - python + - app.py + - --install + closes_on_complete: true + description: | + A VNC window will open. Please sign into your X account to continue the installation. + - name: Configure Email Account + type: text + content: | + Please provide an IMAP server, email address, and password to configure your email account. + fields: + - name: imap_server + label: IMAP Server + type: text # one of: text, password, number + placeholder: imap.example.com #optional + default: imap.gmail.com #optional + env: IMAP_SERVER + - name: email_address + label: Email Address + type: text + env: EMAIL_ADDRESS + placeholder: dude@wheresmycar.com + - name: password + label: Password + type: password + env: EMAIL_PASSWORD + validator: + cmd: + - python + - validate_email.py + args: + - ${inputs.imap_server} + - ${inputs.email_address} + - ${inputs.password} + + + + + \ No newline at end of file From 443e9e52f4ff0d301508f153a21491d7d5c77f39 Mon Sep 17 00:00:00 2001 From: notabd7-deepshard Date: Thu, 29 Jan 2026 00:53:36 -0800 Subject: [PATCH 04/15] connect, upload and install focus and ambient apps --- README.md | 12 ++ deploy_test.py | 193 +++++++++++++++++++++++ example-apps/ambient/hedge/app.py | 120 ++++++++++++++ example-apps/ambient/hedge/icon.png | Bin 0 -> 240951 bytes example-apps/ambient/hedge/truffile.yaml | 54 +++++++ example-apps/focus/finance/app.py | 157 ++++++++++++++++++ example-apps/focus/finance/icon.png | Bin 0 -> 13371 bytes example-apps/focus/finance/truffile.yaml | 38 +++++ genesis/client.py | 95 +++++++++++ pyproject.toml | 1 + 10 files changed, 670 insertions(+) create mode 100644 deploy_test.py create mode 100644 example-apps/ambient/hedge/app.py create mode 100644 example-apps/ambient/hedge/icon.png create mode 100644 example-apps/ambient/hedge/truffile.yaml create mode 100644 example-apps/focus/finance/app.py create mode 100644 example-apps/focus/finance/icon.png create mode 100644 example-apps/focus/finance/truffile.yaml diff --git a/README.md b/README.md index 255b8f5..725f63d 100644 --- a/README.md +++ b/README.md @@ -12,3 +12,15 @@ source .venv/bin/activate pip install -e . ``` imports working + + +buid an app using +APP.MD +cli coming soon + + +upload apps +```bash +python deploy_test.py ambient ./example-apps/ambient/hedge +python deploy_test.py focus ./example-apps/ambient/finance +``` diff --git a/deploy_test.py b/deploy_test.py new file mode 100644 index 0000000..304b79e --- /dev/null +++ b/deploy_test.py @@ -0,0 +1,193 @@ +#!/usr/bin/env python3 +import asyncio +import sys +from pathlib import Path +import yaml +from genesis import TruffleClient + +# add your truffle ip (get it with ping truffle-xxxx.local) +DEVICE_ADDRESS = "192.168.1.32:80" +TOKEN = "go get your token" + + +def parse_truffile(app_dir: Path) -> dict: + truffile = app_dir / "truffile.yaml" + if not truffile.exists(): + raise FileNotFoundError(f"No truffile.yaml in {app_dir}") + with open(truffile) as f: + return yaml.safe_load(f) + + +async def deploy_focus_app(app_dir: Path): + app_dir = Path(app_dir).resolve() + config = parse_truffile(app_dir) + meta = config["metadata"] + + name = meta["name"] + description = meta.get("description", "") + process = meta.get("process", {}) + cmd_list = process.get("cmd", ["python", "app.py"]) + cwd = process.get("working_directory", "/") + env_dict = process.get("environment", {}) + env = [f"{k}={v}" for k, v in env_dict.items()] + icon_file = meta.get("icon_file") + icon_path = (app_dir / icon_file) if icon_file else None + + print(f"Deploying FOCUS app: {name}") + print(f" Directory: {app_dir}") + + client = TruffleClient(DEVICE_ADDRESS, token=TOKEN) + await client.connect() + print(f" Connected to {DEVICE_ADDRESS}") + + await client.start_build() + print(f" Build session: {client.app_uuid}") + + try: + for step in config.get("steps", []): + if step["type"] == "files": + for f in step.get("files", []): + src = app_dir / f["source"] + dest = f["destination"] + print(f" Uploading {src.name} -> {dest}") + result = await client.upload(src, dest) + print(f" {result.bytes} bytes") + elif step["type"] == "bash": + print(f" Running: {step['name']}") + r = await client.exec(step["run"]) + print(f" Exit code: {r.exit_code}") + if r.exit_code != 0: + for line in r.output[-10:]: + print(f" {line}") + + print(f" Finishing as foreground app...") + await client.finish_foreground( + name=name, + cmd=cmd_list[0] if cmd_list[0].startswith("/") else f"/usr/bin/{cmd_list[0]}", + args=cmd_list[1:], + cwd=cwd, + env=env, + description=description, + icon=icon_path, + ) + print(f"Done! {name} deployed as focus app.") + + except Exception as e: + print(f"Error: {e}") + await client.discard() + raise + finally: + await client.close() + + +async def deploy_ambient_app(app_dir: Path): + app_dir = Path(app_dir).resolve() + config = parse_truffile(app_dir) + meta = config["metadata"] + + name = meta["name"] + description = meta.get("description", "") + process = meta.get("process", {}) + cmd_list = process.get("cmd", ["python", "app.py"]) + cwd = process.get("working_directory", "/") + env_dict = process.get("environment", {}) + env = [f"{k}={v}" for k, v in env_dict.items()] + icon_file = meta.get("icon_file") + icon_path = (app_dir / icon_file) if icon_file else None + + schedule_cfg = meta.get("default_schedule", {}) + schedule_type = schedule_cfg.get("type", "interval") + interval_seconds = 60 + daily_start_hour = None + daily_end_hour = None + + if schedule_type == "interval": + interval_cfg = schedule_cfg.get("interval", {}) + duration_str = interval_cfg.get("duration", "1m") + if duration_str.endswith("m"): + interval_seconds = int(duration_str[:-1]) * 60 + elif duration_str.endswith("h"): + interval_seconds = int(duration_str[:-1]) * 3600 + elif duration_str.endswith("s"): + interval_seconds = int(duration_str[:-1]) + + sched = interval_cfg.get("schedule", {}) + # Skip daily window for now - let it run anytime + # daily_window = sched.get("daily_window") + # if daily_window and "-" in daily_window: + # start, end = daily_window.split("-") + # daily_start_hour = int(start.split(":")[0]) + # daily_end_hour = int(end.split(":")[0]) + + print(f"Deploying AMBIENT app: {name}") + print(f" Directory: {app_dir}") + print(f" Schedule: {schedule_type}, interval={interval_seconds}s") + + client = TruffleClient(DEVICE_ADDRESS, token=TOKEN) + await client.connect() + print(f" Connected to {DEVICE_ADDRESS}") + + await client.start_build() + print(f" Build session: {client.app_uuid}") + + try: + for step in config.get("steps", []): + if step["type"] == "files": + for f in step.get("files", []): + src = app_dir / f["source"] + dest = f["destination"] + print(f" Uploading {src.name} -> {dest}") + result = await client.upload(src, dest) + print(f" {result.bytes} bytes") + elif step["type"] == "bash": + print(f" Running: {step['name']}") + r = await client.exec(step["run"]) + print(f" Exit code: {r.exit_code}") + if r.exit_code != 0: + for line in r.output[-10:]: + print(f" {line}") + + print(f" Finishing as background app...") + await client.finish_background( + name=name, + cmd=cmd_list[0] if cmd_list[0].startswith("/") else f"/usr/bin/{cmd_list[0]}", + args=cmd_list[1:], + cwd=cwd, + env=env, + description=description, + icon=icon_path, + schedule=schedule_type, + interval_seconds=interval_seconds, + daily_start_hour=daily_start_hour, + daily_end_hour=daily_end_hour, + ) + print(f"Done! {name} deployed as ambient app.") + + except Exception as e: + print(f"Error: {e}") + await client.discard() + raise + finally: + await client.close() + + +if __name__ == "__main__": + if len(sys.argv) < 3: + print("Usage: python deploy_test.py ") + print() + print("Examples:") + print(" python deploy_test.py focus ./example-apps/focus/finance") + print(" python deploy_test.py ambient ./example-apps/ambient/hedge") + sys.exit(1) + + app_type = sys.argv[1].lower() + app_path = Path(sys.argv[2]) + + if app_type == "focus": + asyncio.run(deploy_focus_app(app_path)) + elif app_type == "ambient": + asyncio.run(deploy_ambient_app(app_path)) + else: + print(f"Unknown type: {app_type}") + print("Use 'focus' for foreground apps or 'ambient' for background apps") + sys.exit(1) diff --git a/example-apps/ambient/hedge/app.py b/example-apps/ambient/hedge/app.py new file mode 100644 index 0000000..39ec288 --- /dev/null +++ b/example-apps/ambient/hedge/app.py @@ -0,0 +1,120 @@ +import os +import requests +import urllib.parse +from datetime import datetime +from gourmet.ambient import run_ambient, AmbientContext +import logging + +logger = logging.getLogger("hedge") +logger.setLevel(logging.DEBUG) + +API_KEY = os.getenv("ALPHAVANTAGE_API_KEY", "JJ3Z7KZVSHIB09WP") +TICKERS = os.getenv("HEDGE_TICKERS", "AAPL,MSFT,GOOGL,IREN").split(",") +BASE_URL = "https://www.alphavantage.co/query" + + +def fetch_daily_data(symbol: str) -> dict | None: + try: + resp = requests.get(BASE_URL, params={ + "function": "TIME_SERIES_DAILY", + "symbol": symbol.strip().upper(), + "outputsize": "compact", + "apikey": API_KEY, + }, timeout=30) + resp.raise_for_status() + data = resp.json() + if "Time Series (Daily)" not in data: + logger.warning(f"No daily data for {symbol}: {data}") + return None + return data + except Exception as e: + logger.error(f"Failed to fetch {symbol}: {e}") + return None + + +def generate_chart_url(symbol: str, dates: list[str], prices: list[float]) -> str: + chart_config = { + "type": "line", + "data": { + "labels": dates, + "datasets": [{ + "label": symbol, + "data": prices, + "fill": False, + "borderColor": "#4CAF50", + "tension": 0.1, + "pointRadius": 2, + }] + }, + "options": { + "plugins": { + "legend": {"display": False}, + "title": {"display": True, "text": f"{symbol} - Last 5 Days"} + }, + "scales": { + "y": {"beginAtZero": False} + } + } + } + chart_json = str(chart_config).replace("'", '"').replace("False", "false").replace("True", "true") + encoded = urllib.parse.quote(chart_json, safe='') + return f"https://quickchart.io/chart?c={encoded}&w=400&h=200&bkg=white" + + +def hedge_ambient(ctx: AmbientContext): + logger.info(f"Hedge running for tickers: {TICKERS}") + + for symbol in TICKERS: + symbol = symbol.strip().upper() + if not symbol: + continue + + data = fetch_daily_data(symbol) + if not data: + continue + + ts = data["Time Series (Daily)"] + sorted_dates = sorted(ts.keys(), reverse=True)[:5] + sorted_dates.reverse() + + dates = [d[5:] for d in sorted_dates] + prices = [float(ts[d]["4. close"]) for d in sorted_dates] + + today = sorted_dates[-1] + today_data = ts[today] + current_price = float(today_data["4. close"]) + open_price = float(today_data["1. open"]) + high = float(today_data["2. high"]) + low = float(today_data["3. low"]) + volume = int(today_data["5. volume"]) + + change = current_price - open_price + change_pct = (change / open_price) * 100 if open_price else 0 + arrow = "📈" if change >= 0 else "📉" + + chart_url = generate_chart_url(symbol, dates, prices) + + title = f"{arrow} {symbol}: ${current_price:.2f}" + body = f""" +{symbol} Stock Update + +Price: ${current_price:.2f} +Change: {'+' if change >= 0 else ''}{change:.2f} ({'+' if change_pct >= 0 else ''}{change_pct:.2f}%) + +Today's Range: ${low:.2f} - ${high:.2f} +Volume: {volume:,} +""".strip() + + logger.info(f"Posting {symbol} to feed: {title}") + ctx.bg.post_to_feed( + title=title, + body=body, + src_uri=f"https://finance.yahoo.com/quote/{symbol}", + media_uris=[chart_url], + content_timestamp=datetime.now() + ) + logger.info(f"Posted {symbol} to feed") + + +if __name__ == "__main__": + run_ambient(hedge_ambient) diff --git a/example-apps/ambient/hedge/icon.png b/example-apps/ambient/hedge/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..27bcddfc69f0eb7f9ad18602400e5cb343f94c1a GIT binary patch literal 240951 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