From ffb2c0069d45618ca6b65ec5b0dcbe7a7baab12a Mon Sep 17 00:00:00 2001 From: PranavU-Coder Date: Thu, 5 Feb 2026 15:52:19 +0530 Subject: [PATCH 1/3] migrations: switching from pip to uv with more replicable project typesettings with the help of pyproject.toml and a lock file, using ruff as default code-linter and formatter, customizing seaborn for more eye-candy plots, optimizing discord bot code with asynchronous code, buffer file sharing, LRU-cache implementation and CDN-exploits --- .github/workflows/main.yml | 14 + .github/workflows/release.yml | 37 ++ .github/workflows/test.yml | 38 +- .gitignore | 8 + analytics.py | 480 ++++++++++------ data_pipeline.py | 46 +- database/connection.py | 17 +- database/models.py | 5 +- database/repository.py | 17 +- helper_notebook.ipynb | 168 +++--- init_db.py | 2 + main.py | 453 ++++++++------- predictions.py | 41 +- pyproject.toml | 23 + requirements.txt | 14 - services/exam_tracker.py | 10 +- services/reminder.py | 35 +- tests/conftest.py | 11 +- tests/database_test.py | 17 +- tests/services_test.py | 107 ++-- uv.lock | 1023 +++++++++++++++++++++++++++++++++ 21 files changed, 1953 insertions(+), 613 deletions(-) create mode 100644 .github/workflows/main.yml create mode 100644 .github/workflows/release.yml create mode 100644 pyproject.toml delete mode 100644 requirements.txt create mode 100644 uv.lock diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..99e1ed4 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,14 @@ +name: Main + +on: + push: + branches: [ master ] + +jobs: + run-tests: + uses: ./.github/workflows/test.yml + + run-release: + needs: run-tests + uses: ./.github/workflows/release.yml + secrets: inherit \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..b9bca20 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,37 @@ +name: Release + +on: + workflow_call: + +permissions: + contents: write + pull-requests: write + +jobs: + release-please: + runs-on: ubuntu-latest + steps: + - uses: googleapis/release-please-action@v4 + id: release + with: + release-type: python + + - name: Checkout code + if: ${{ steps.release.outputs.pr }} + uses: actions/checkout@v4 + with: + ref: ${{ fromJson(steps.release.outputs.pr).head_sha }} + + - name: install uv + if: ${{ steps.release.outputs.pr }} + uses: astral-sh/setup-uv@v5 + + - name: update uv lockfile + if: ${{ steps.release.outputs.pr }} + run: | + uv lock + git config user.name github-actions[bot] + git config user.email github-actions[bot]@users.noreply.github.com + git add uv.lock + git commit -m "chore: update uv.lock for new version" || echo "no changes" + git push \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 371054c..92dd98c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,28 +1,32 @@ -name: Run Tests +name: Test on: push: branches: [ master ] pull_request: branches: [ master ] + workflow_call: + +permissions: + contents: write + pull-requests: write jobs: test: runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: '3.11' - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install -r requirements.txt - - - name: Run tests - run: | - pytest tests/ -v + - uses: actions/checkout@v4 + + - name: Install uv + uses: astral-sh/setup-uv@v5 + with: + enable-cache: true + + - name: set up python + run: uv python install 3.11 + + - name: install dependencies + run: uv sync --all-extras --dev + + - name: run tests + run: uv run pytest tests/ -v \ No newline at end of file diff --git a/.gitignore b/.gitignore index ade462a..d727020 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,11 @@ # dataset (removing cause I'm no longer hosting on railway and using my second laptop to double as a server) /data /predict + +# uv migrations +.python-version +.ruff_cache +.venv + +# fonts dir for better analytics-overview +/fonts diff --git a/analytics.py b/analytics.py index 4ede409..472ac97 100644 --- a/analytics.py +++ b/analytics.py @@ -2,228 +2,366 @@ import seaborn as sns import matplotlib -matplotlib.use('Agg') + +matplotlib.use("Agg") import matplotlib.pyplot as plt +from matplotlib.ticker import MaxNLocator +import matplotlib.font_manager as fm import os import glob +import io + +import concurrent.futures +from functools import lru_cache + +# seaborn typesettings for more visually-pleasing plots +sns.set_style("whitegrid") +sns.set_context("notebook", font_scale=1.1) + + +def load_custom_font(font_dir="fonts", font_name="JetBrainsMono-Regular.ttf"): + font_path = os.path.join(font_dir, font_name) + if os.path.exists(font_path): + fm.fontManager.addfont(font_path) + prop = fm.FontProperties(fname=font_path) + return prop.get_name() + return None + -data = glob.glob(os.path.join('data/', '*.csv')) -df = pd.concat([pd.read_csv(f) for f in data], ignore_index=True) +custom_font = load_custom_font() +if custom_font: + plt.rcParams["font.family"] = custom_font + +# loading so many csv files at once can cause slow startups so parallelizing loadups +def load_data_parallel(path_pattern): + files = glob.glob(path_pattern) + if not files: + print(f"warning: no files found matching {path_pattern}") + return pd.DataFrame(columns=["campus", "branch", "marks", "year"]) + + with concurrent.futures.ThreadPoolExecutor() as executor: + results = list(executor.map(pd.read_csv, files)) + + return pd.concat(results, ignore_index=True) + + +# branch-aliasing for better ux def load_branch_mappings(filepath="branch_names.txt"): - """ - load branch name mappings from 'branch_names' txt file. - """ - alias_to_actual = {} actual_to_alias = {} - - with open(filepath, 'r') as f: + if not os.path.exists(filepath): + return {}, {} + with open(filepath, "r") as f: for line in f: line = line.strip() - if ':' in line: - full_name, alias = line.split(':', 1) + if ":" in line: + full_name, alias = line.split(":", 1) full_name = full_name.strip() alias = alias.strip() - alias_to_actual[alias.lower()] = full_name actual_to_alias[full_name.lower()] = alias - return alias_to_actual, actual_to_alias + def normalize_branch_name(user_input, alias_to_full): - """ - convert user input (shorthand or full name) to the full branch name. - returns the full name if found, otherwise None. - """ - user_input = user_input.strip().lower() - if user_input in alias_to_full: return alias_to_full[user_input] - for alias, full_name in alias_to_full.items(): if full_name.lower() == user_input: return full_name - return None -alias_to_actual, actual_to_alias = load_branch_mappings('branch_names.txt') -def plot_marks_by_campus(campus_name): - """ - plot all branches for a given campus - """ - - campus_name = campus_name.strip().lower() +data_path = os.path.join("data", "analysis_data", "*.csv") +df = load_data_parallel(data_path) - filtered_df = df[df['campus'].str.lower() == campus_name] +alias_to_actual, actual_to_alias = load_branch_mappings("branch_names.txt") - plt.figure(figsize=(12, 7)) - sns.lineplot(data=filtered_df, x='year', y='marks', hue='branch') - plt.title(f'Marks Trend for {campus_name.title()}') - plt.xlabel('Year') - plt.ylabel('Marks') - plt.legend(title='Branch', bbox_to_anchor=(1.05, 1), loc='upper left') - plt.tight_layout() - plt.savefig(f'{campus_name}_marks_trend.png') - plt.close() +PREDICTIONS = {} +_pred_files = { + "worst": "predict/worst_case.csv", + "most-likely": "predict/most_likely_case.csv", + "best": "predict/best_case.csv", +} +for key, filepath in _pred_files.items(): + if os.path.exists(filepath): + try: + p_df = pd.read_csv(filepath) + if "campus" in p_df.columns: + p_df["campus"] = p_df["campus"].str.title() + PREDICTIONS[key] = p_df + except Exception as e: + print(f"error loading {filepath}: {e}") -def plot_marks_by_branch(campus_name, branch): - """ - plots marks of a particular branch in a specific BITS campus, uses comma as a separator to indicate respective fields. - """ - campus_name = campus_name.strip().lower() - - normalized_branch = normalize_branch_name(branch, alias_to_actual) - - if normalized_branch is None: - print(f"warning: unknown branch '{branch}'") - return None +# this for returning raw bytes +def _tabulate_to_bytes(data, headers, limit=25): + top_rows = data[:limit] + num_columns = len(headers) - filtered_df = df[ - (df['campus'].str.lower() == campus_name) & - (df['branch'].str.lower() == normalized_branch.lower()) - ] + header_color = "#40466e" + row_colors = ["#f8f9fa", "#ffffff"] + edge_color = "black" + text_color = "#333333" + header_text_color = "#ffffff" - if filtered_df.empty: - return None + row_height = 0.5 + fig_height = (len(top_rows) + 1) * row_height + 0.5 - plt.figure(figsize=(12, 7)) - sns.lineplot(data=filtered_df, x='year', y='marks') - plt.title(f"Marks Trend for {normalized_branch.title()} in {campus_name.title()}") - plt.xlabel('Year') - plt.ylabel('Marks') - plt.tight_layout() - - safe_branch = normalized_branch.replace(' ', '_').replace('.', '') - filename = f"{campus_name}_{safe_branch}_marks_trend.png" - - plt.savefig(filename) - plt.close() - - return filename + fig, ax = plt.subplots(figsize=(10, fig_height)) + ax.axis("off") + ax.axis("tight") -def tabulate(data, headers, limit=25, filename=None): - """ - general function to create a table plot from data. - """ + col_widths = [0.15, 0.6, 0.15, 0.1] + if len(col_widths) != num_columns: + col_widths = [1.0 / num_columns] * num_columns - # truncate after the set-limit - top_rows = data[:limit] - - fig_height = len(top_rows) * 0.4 + 1.2 - - fig, ax = plt.subplots(figsize=(10, fig_height)) - ax.axis('tight') - ax.axis('off') - - num_cols = len(headers) - col_widths = [0.15, 0.50, 0.15, 0.20] - table = ax.table( cellText=top_rows, colLabels=headers, - cellLoc='center', - loc='center', - colColours=["#40466e"] * num_cols, - colWidths=col_widths + cellLoc="center", + loc="center", + colWidths=col_widths, ) - + table.auto_set_font_size(False) - table.set_fontsize(12) - table.scale(1.2, 1.8) - + table.set_fontsize(16) + table.scale(1, 2.0) + for (row, col), cell in table.get_celld().items(): + cell.set_edgecolor(edge_color) + cell.set_linewidth(1) if row == 0: - cell.set_text_props(weight='bold', color='white') + cell.set_facecolor(header_color) + cell.set_text_props(weight="bold", color=header_text_color) + cell.set_height(0.08) + else: + cell.set_facecolor(row_colors[row % 2]) + cell.set_text_props(color=text_color) - if filename is None: - filename = 'table_output.png' - plt.savefig(filename, bbox_inches='tight', dpi=150, pad_inches=0.1) + buf = io.BytesIO() + plt.tight_layout() + plt.savefig( + buf, + format="png", + bbox_inches="tight", + dpi=150, + facecolor="white", + pad_inches=0.1, + ) plt.close() - - return filename + return buf.getvalue() -def select(limit=25, year=None, campus_filter=None): - """ - to get a more detailed-fetch for cutoff values with regards to a particular campus for a specified year. - """ - if year is None: - print("please specify a year") +# using LRU-Caching techniques for faster generation if command has been accessed prior +@lru_cache(maxsize=32) +def _get_campus_plot_bytes(campus_name): + campus_name = campus_name.strip().lower() + filtered_df = df[df["campus"].str.lower() == campus_name] + + if filtered_df.empty: return None - - csv_file = f"data/cutoff_{year}.csv" - - try: - df_cutoff = pd.read_csv(csv_file) - headers = df_cutoff.columns.tolist() - data = df_cutoff.values.tolist() - except FileNotFoundError: - print(f"file not found: {csv_file}") - print(f"no cutoff data available for year: {year}") + + fig, ax = plt.subplots(figsize=(12, 8), dpi=150) + sns.lineplot( + data=filtered_df, + x="year", + y="marks", + hue="branch", + marker="o", + markersize=6, + linewidth=2.5, + palette="tab10", + ax=ax, + ) + sns.despine() + ax.set_title( + f"Cutoff Trends: {campus_name.title()}", + loc="left", + fontsize=16, + fontweight="bold", + pad=20, + ) + ax.set_xlabel("Year", fontsize=12, labelpad=10) + ax.set_ylabel("Marks", fontsize=12, labelpad=10) + ax.xaxis.set_major_locator(MaxNLocator(integer=True)) + ax.legend(title="Branch", bbox_to_anchor=(1.02, 1), loc="upper left", frameon=False) + + buf = io.BytesIO() + plt.tight_layout() + plt.savefig(buf, format="png", bbox_inches="tight", facecolor="white") + plt.close() + return buf.getvalue() + + +@lru_cache(maxsize=64) +def _get_branch_plot_bytes(campus_name, branch_name): + normalized_branch = normalize_branch_name(branch_name, alias_to_actual) + if not normalized_branch: return None - + + campus_name = campus_name.strip().lower() + filtered_df = df[ + (df["campus"].str.lower() == campus_name) + & (df["branch"].str.lower() == normalized_branch.lower()) + ] + if filtered_df.empty: + return None + + fig, ax = plt.subplots(figsize=(10, 6), dpi=150) + sns.lineplot( + data=filtered_df, + x="year", + y="marks", + marker="o", + markersize=9, + linewidth=3, + color="#2E86AB", + ax=ax, + ) + sns.despine() + min_marks = filtered_df["marks"].min() + max_marks = filtered_df["marks"].max() + ax.set_ylim(min_marks - 15, max_marks + 15) + ax.xaxis.set_major_locator(MaxNLocator(integer=True)) + ax.text( + x=0, + y=1.02, + s=f"{campus_name.title()} Campus", + transform=ax.transAxes, + fontsize=12, + color="gray", + ) + ax.set_xlabel("Year", fontsize=11) + ax.set_ylabel("Marks", fontsize=11) + + if len(filtered_df) > 0: + ax.axhline(y=min_marks, color="#e63946", linestyle="--", alpha=0.5, linewidth=1) + ax.axhline(y=max_marks, color="#2a9d8f", linestyle="--", alpha=0.5, linewidth=1) + bbox_props = dict(boxstyle="round,pad=0.3", fc="white", ec="gray", alpha=0.9) + ax.text( + filtered_df["year"].min(), + max_marks, + f"Max: {max_marks:.0f}", + va="center", + ha="right", + fontsize=10, + color="#2a9d8f", + fontweight="bold", + bbox=bbox_props, + ) + ax.text( + filtered_df["year"].min(), + min_marks, + f"Min: {min_marks:.0f}", + va="center", + ha="right", + fontsize=10, + color="#e63946", + fontweight="bold", + bbox=bbox_props, + ) + + buf = io.BytesIO() + plt.tight_layout() + plt.savefig(buf, format="png", bbox_inches="tight", facecolor="white") + plt.close() + return buf.getvalue() + + +@lru_cache(maxsize=32) +def _get_select_table_bytes(year, campus_filter, limit): + target_df = df[df["year"] == year] + if target_df.empty: + return None + if campus_filter: - target = campus_filter.strip().lower() - filtered_data = [row for row in data if str(row[0]).lower() == target] - - if not filtered_data: - print(f"No data found for campus: {campus_filter}") + target_campus = campus_filter.strip().lower() + target_df = target_df[target_df["campus"].str.lower() == target_campus] + if target_df.empty: return None - - filename = f"cutoff_{year}_{target}.png" - else: - filtered_data = data - filename = f"cutoff_{year}_all.png" - - return tabulate(filtered_data, headers, limit=limit, filename=filename) - -def get_predictions(limit=25, campus_filter=None, situation=None): - """ - get predictions now based on hypothetical scenarios: "worst", "most-likely" and "best" case. - instead of hardcoding data like previously done, we will just use values we obtained from predict/..csv files. - by default we will consider difficulty: most-likely if user doesn't specify. - by default we will assume top-entries in the file if user doesn't specify campus. - """ - - - map = { - 'worst': 'predict/worst_case.csv', - 'most-likely': 'predict/most_likely_case.csv', - 'best': 'predict/best_case.csv' - } - - if situation is None: - situation = 'most-likely' - - csv_file = map.get(situation.lower()) - - if csv_file is None: - print(f"invalid usage, please use 'worst', 'most-likely' (or leave blank for this), or 'best'") - return None - - try: - df_pred = pd.read_csv(csv_file) - headers = df_pred.columns.tolist() - data = df_pred.values.tolist() - except FileNotFoundError: - print(f"file not found: {csv_file}") + + target_df = target_df.sort_values(by="marks", ascending=False) + + table_data = target_df[["campus", "branch", "marks", "year"]].copy() + table_data["campus"] = table_data["campus"].str.title() + final_data = table_data.values.tolist() + headers = ["Campus", "Course", "Marks", "Year"] + + return _tabulate_to_bytes(final_data, headers, limit=limit) + + +@lru_cache(maxsize=32) +def _get_prediction_bytes(situation, campus_filter, limit): + df_pred = PREDICTIONS.get(situation.lower()) + if df_pred is None: return None - + + target_df = df_pred.copy() + if campus_filter: - target = campus_filter.strip().lower() - filtered_data = [row for row in data if str(row[0]).lower() == target] - - if not filtered_data: + target = campus_filter.strip().title() + if "campus" in target_df.columns: + target_df = target_df[target_df["campus"] == target] + if target_df.empty: return None - - filename = f"pred_2026_{target}_{situation}.png" - else: - filtered_data = data - filename = f"pred_2026_all_{situation}.png" - - return tabulate(filtered_data, headers, limit=limit, filename=filename) \ No newline at end of file + + if "marks" in target_df.columns: + target_df = target_df.sort_values(by="marks", ascending=False) + + table_data = target_df.values.tolist() + headers = [h.title() for h in target_df.columns.tolist()] + + return _tabulate_to_bytes(table_data, headers, limit=limit) + + +# these are for recieving cached bytes +def plot_marks_by_campus(campus_name): + img_bytes = _get_campus_plot_bytes(campus_name) + if img_bytes is None: + return None + return io.BytesIO(img_bytes) + + +def plot_marks_by_branch(campus_name, branch): + normalized = normalize_branch_name(branch, alias_to_actual) + if not normalized: + return None + + img_bytes = _get_branch_plot_bytes(campus_name, normalized) + if img_bytes is None: + return None + return io.BytesIO(img_bytes) + + +def select(limit=25, year=None, campus_filter=None): + if year is None: + return None + + # the cache key MUST BE HASHABLE + img_bytes = _get_select_table_bytes(year, campus_filter, limit) + if img_bytes is None: + return None + return io.BytesIO(img_bytes) + + +def get_predictions(limit=25, campus_filter=None, situation="most-likely"): + img_bytes = _get_prediction_bytes(situation, campus_filter, limit) + if img_bytes is None: + return None + return io.BytesIO(img_bytes) + + +# this is for discord-CDNs +URL_CACHE = {} + + +def get_cached_url(key): + return URL_CACHE.get(key) + + +def save_url_to_cache(key, url): + URL_CACHE[key] = url diff --git a/data_pipeline.py b/data_pipeline.py index f319c29..c8a23a0 100644 --- a/data_pipeline.py +++ b/data_pipeline.py @@ -13,47 +13,49 @@ year = 2025 html_text = requests.get(URL, verify=False).text -soup = BeautifulSoup(html_text, 'lxml') +soup = BeautifulSoup(html_text, "lxml") # to modify accordingly -div = soup.find('div', id='2025-2026') +div = soup.find("div", id="2025-2026") data = [] -tables = div.find_all('table') +tables = div.find_all("table") for table in tables: - rows = table.find_all('tr') - + rows = table.find_all("tr") + # skip any tiny-tables in the way if len(rows) < 3: continue - + for row in rows[1:]: - cols = row.find_all('td') - + cols = row.find_all("td") + if len(cols) >= 4: campus = cols[0].get_text(strip=True) program = cols[1].get_text(strip=True) - cutoff = cols[2].get_text(strip=True) - - if 'Goa' in campus: - campus = 'Goa' - elif campus not in ['Pilani', 'Goa', 'Hyderabad']: - continue + cutoff = cols[2].get_text(strip=True) + + if "Goa" in campus: + campus = "Goa" + elif campus not in ["Pilani", "Goa", "Hyderabad"]: + continue # validating if data row - if cutoff.isdigit() and program.lower() != 'program': - data.append({ - 'campus': campus, - 'branch': program, - 'marks': int(cutoff), - 'year': year - }) + if cutoff.isdigit() and program.lower() != "program": + data.append( + { + "campus": campus, + "branch": program, + "marks": int(cutoff), + "year": year, + } + ) if data: df = pd.DataFrame(data) df = df.drop_duplicates() - df.to_csv('bitsat_cutoffs.csv', index=False) + df.to_csv("bitsat_cutoffs.csv", index=False) print(df.head(10)) else: print("\ntask failed") diff --git a/database/connection.py b/database/connection.py index 56c6c74..10b6368 100644 --- a/database/connection.py +++ b/database/connection.py @@ -5,25 +5,22 @@ load_dotenv() -DATABASE_URL = os.getenv('DATABASE_URL') +DATABASE_URL = os.getenv("DATABASE_URL") if not DATABASE_URL: raise ValueError("DATABASE_URL not found") engine = create_engine( DATABASE_URL, - echo=False, - pool_size=5, - max_overflow=10, + echo=False, + pool_size=5, + max_overflow=10, pool_pre_ping=True, - pool_recycle=3600 + pool_recycle=3600, ) -SessionLocal = sessionmaker( - bind=engine, - autocommit=False, - autoflush=False -) +SessionLocal = sessionmaker(bind=engine, autocommit=False, autoflush=False) + def get_db(): """ diff --git a/database/models.py b/database/models.py index f9df29d..9676089 100644 --- a/database/models.py +++ b/database/models.py @@ -3,9 +3,10 @@ Base = declarative_base() + class UserExam(Base): - __tablename__ = 'bitsat' - + __tablename__ = "bitsat" + id = Column(Integer, primary_key=True) user_id = Column(BigInteger, unique=True, nullable=False) username = Column(String) diff --git a/database/repository.py b/database/repository.py index 6105d99..f021924 100644 --- a/database/repository.py +++ b/database/repository.py @@ -3,6 +3,7 @@ from .models import UserExam from .connection import SessionLocal + class ExamRepository: """ handles database operations for user-exam tracking. @@ -11,14 +12,14 @@ class ExamRepository: def __init__(self): self.db = SessionLocal() - def set_user_exam(self, user_id: int, username: str, channel_id: int, exam_date: date) -> UserExam: + def set_user_exam( + self, user_id: int, username: str, channel_id: int, exam_date: date + ) -> UserExam: """ set/update user's exam date """ - user_exam = self.db.query(UserExam).filter( - UserExam.user_id == user_id - ).first() + user_exam = self.db.query(UserExam).filter(UserExam.user_id == user_id).first() if user_exam: user_exam.exam_date = exam_date @@ -29,7 +30,7 @@ def set_user_exam(self, user_id: int, username: str, channel_id: int, exam_date: user_id=user_id, username=username, channel_id=channel_id, - exam_date=exam_date + exam_date=exam_date, ) self.db.add(user_exam) @@ -41,15 +42,13 @@ def get_user_exam(self, user_id: int) -> Optional[UserExam]: get details. """ - return self.db.query(UserExam).filter( - UserExam.user_id == user_id - ).first() + return self.db.query(UserExam).filter(UserExam.user_id == user_id).first() def get_all_users(self) -> List[UserExam]: """ get all users with exam dates. """ - + return self.db.query(UserExam).all() def delete_user_exam(self, user_id: int) -> bool: diff --git a/helper_notebook.ipynb b/helper_notebook.ipynb index 129d12a..dadcef2 100644 --- a/helper_notebook.ipynb +++ b/helper_notebook.ipynb @@ -43,12 +43,12 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "3222e3cf", "metadata": {}, "outputs": [], "source": [ - "data = glob.glob(os.path.join('data/', '*.csv'))\n", + "data = glob.glob(os.path.join(\"data/model_data\", \"*.csv\"))\n", "df = pd.concat([pd.read_csv(f) for f in data], ignore_index=True)" ] }, @@ -59,8 +59,8 @@ "metadata": {}, "outputs": [], "source": [ - "feature_cols = ['campus', 'branch', 'year', 'difficulty']\n", - "target_col = 'marks'\n", + "feature_cols = [\"campus\", \"branch\", \"year\", \"difficulty\"]\n", + "target_col = \"marks\"\n", "\n", "X = df[feature_cols]\n", "y = df[target_col]" @@ -73,8 +73,12 @@ "metadata": {}, "outputs": [], "source": [ - "X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.3, random_state=42)\n", - "X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42)" + "X_train, X_temp, y_train, y_temp = train_test_split(\n", + " X, y, test_size=0.3, random_state=42\n", + ")\n", + "X_val, X_test, y_val, y_test = train_test_split(\n", + " X_temp, y_temp, test_size=0.5, random_state=42\n", + ")" ] }, { @@ -94,9 +98,10 @@ "source": [ "preprocessor = ColumnTransformer(\n", " transformers=[\n", - " ('cat', OneHotEncoder(handle_unknown='ignore'), ['campus', 'branch']),\n", - " ('num', StandardScaler(), ['year', 'difficulty'])\n", - " ])" + " (\"cat\", OneHotEncoder(handle_unknown=\"ignore\"), [\"campus\", \"branch\"]),\n", + " (\"num\", StandardScaler(), [\"year\", \"difficulty\"]),\n", + " ]\n", + ")" ] }, { @@ -125,10 +130,10 @@ } ], "source": [ - "print(f\"Dataset Split:\")\n", - "print(f\"Train: {len(X_train)} ({len(X_train)/len(X)*100:.1f}%)\")\n", - "print(f\"Val: {len(X_val)} ({len(X_val)/len(X)*100:.1f}%)\")\n", - "print(f\"Test: {len(X_test)} ({len(X_test)/len(X)*100:.1f}%)\")" + "print(\"Dataset Split:\")\n", + "print(f\"Train: {len(X_train)} ({len(X_train) / len(X) * 100:.1f}%)\")\n", + "print(f\"Val: {len(X_val)} ({len(X_val) / len(X) * 100:.1f}%)\")\n", + "print(f\"Test: {len(X_test)} ({len(X_test) / len(X) * 100:.1f}%)\")" ] }, { @@ -182,26 +187,25 @@ "outputs": [], "source": [ "def helper(model, X_train, y_train, X_val, y_val, X_test, y_test, model_name):\n", - "\n", " model.fit(X_train, y_train)\n", - " \n", + "\n", " y_train_pred = model.predict(X_train)\n", " y_val_pred = model.predict(X_val)\n", " y_test_pred = model.predict(X_test)\n", - " \n", + "\n", " metrics = {\n", - " 'Model': model_name,\n", - " 'Train RMSE': np.sqrt(mean_squared_error(y_train, y_train_pred)),\n", - " 'Train MAE': mean_absolute_error(y_train, y_train_pred),\n", - " 'Train R²': r2_score(y_train, y_train_pred),\n", - " 'Val RMSE': np.sqrt(mean_squared_error(y_val, y_val_pred)),\n", - " 'Val MAE': mean_absolute_error(y_val, y_val_pred),\n", - " 'Val R²': r2_score(y_val, y_val_pred),\n", - " 'Test RMSE': np.sqrt(mean_squared_error(y_test, y_test_pred)),\n", - " 'Test MAE': mean_absolute_error(y_test, y_test_pred),\n", - " 'Test R²': r2_score(y_test, y_test_pred)\n", + " \"Model\": model_name,\n", + " \"Train RMSE\": np.sqrt(mean_squared_error(y_train, y_train_pred)),\n", + " \"Train MAE\": mean_absolute_error(y_train, y_train_pred),\n", + " \"Train R²\": r2_score(y_train, y_train_pred),\n", + " \"Val RMSE\": np.sqrt(mean_squared_error(y_val, y_val_pred)),\n", + " \"Val MAE\": mean_absolute_error(y_val, y_val_pred),\n", + " \"Val R²\": r2_score(y_val, y_val_pred),\n", + " \"Test RMSE\": np.sqrt(mean_squared_error(y_test, y_test_pred)),\n", + " \"Test MAE\": mean_absolute_error(y_test, y_test_pred),\n", + " \"Test R²\": r2_score(y_test, y_test_pred),\n", " }\n", - " \n", + "\n", " return metrics, y_test_pred" ] }, @@ -242,8 +246,14 @@ "print(\"1. Linear Regression\")\n", "model = LinearRegression()\n", "metrics, trained_model = helper(\n", - " model, X_train_scaled, y_train, X_val_scaled, y_val, X_test_scaled, y_test, \n", - " 'Linear Regression'\n", + " model,\n", + " X_train_scaled,\n", + " y_train,\n", + " X_val_scaled,\n", + " y_val,\n", + " X_test_scaled,\n", + " y_test,\n", + " \"Linear Regression\",\n", ")\n", "results.append(metrics)" ] @@ -266,8 +276,14 @@ "print(\"2. Polynomial Regression\")\n", "model = LinearRegression()\n", "metrics, trained_model = helper(\n", - " model, X_train_poly, y_train, X_val_poly, y_val, X_test_poly, y_test, \n", - " 'Polynomial Regression'\n", + " model,\n", + " X_train_poly,\n", + " y_train,\n", + " X_val_poly,\n", + " y_val,\n", + " X_test_poly,\n", + " y_test,\n", + " \"Polynomial Regression\",\n", ")\n", "results.append(metrics)" ] @@ -290,8 +306,14 @@ "print(\"3. Ridge Regression\")\n", "model = Ridge(alpha=1.0)\n", "metrics, trained_model = helper(\n", - " model, X_train_scaled, y_train, X_val_scaled, y_val, X_test_scaled, y_test, \n", - " 'Ridge Regression'\n", + " model,\n", + " X_train_scaled,\n", + " y_train,\n", + " X_val_scaled,\n", + " y_val,\n", + " X_test_scaled,\n", + " y_test,\n", + " \"Ridge Regression\",\n", ")\n", "results.append(metrics)" ] @@ -314,8 +336,14 @@ "print(\"4. Random Forest\")\n", "model = RandomForestRegressor(n_estimators=100, random_state=42, max_depth=10)\n", "metrics, trained_model = helper(\n", - " model, X_train_scaled, y_train, X_val_scaled, y_val, X_test_scaled, y_test, \n", - " 'Random Forest'\n", + " model,\n", + " X_train_scaled,\n", + " y_train,\n", + " X_val_scaled,\n", + " y_val,\n", + " X_test_scaled,\n", + " y_test,\n", + " \"Random Forest\",\n", ")\n", "results.append(metrics)" ] @@ -338,8 +366,14 @@ "print(\"5. Gradient Boosting\")\n", "model = GradientBoostingRegressor(n_estimators=100, random_state=42, max_depth=5)\n", "metrics, trained_model = helper(\n", - " model, X_train_scaled, y_train, X_val_scaled, y_val, X_test_scaled, y_test, \n", - " 'Gradient Boosting'\n", + " model,\n", + " X_train_scaled,\n", + " y_train,\n", + " X_val_scaled,\n", + " y_val,\n", + " X_test_scaled,\n", + " y_test,\n", + " \"Gradient Boosting\",\n", ")\n", "results.append(metrics)" ] @@ -386,40 +420,44 @@ "source": [ "fig, axes = plt.subplots(2, 2, figsize=(15, 12))\n", "\n", - "axes[0, 0].barh(df_results['Model'], df_results['Test RMSE'], color='steelblue', alpha=0.8)\n", - "axes[0, 0].set_xlabel('Test RMSE')\n", - "axes[0, 0].set_title('Test RMSE by Model')\n", + "axes[0, 0].barh(\n", + " df_results[\"Model\"], df_results[\"Test RMSE\"], color=\"steelblue\", alpha=0.8\n", + ")\n", + "axes[0, 0].set_xlabel(\"Test RMSE\")\n", + "axes[0, 0].set_title(\"Test RMSE by Model\")\n", "axes[0, 0].invert_yaxis()\n", "\n", - "axes[0, 1].barh(df_results['Model'], df_results['Test R²'], color='forestgreen', alpha=0.8)\n", - "axes[0, 1].set_xlabel('Test R² Score')\n", - "axes[0, 1].set_title('Test R² by Model')\n", + "axes[0, 1].barh(\n", + " df_results[\"Model\"], df_results[\"Test R²\"], color=\"forestgreen\", alpha=0.8\n", + ")\n", + "axes[0, 1].set_xlabel(\"Test R² Score\")\n", + "axes[0, 1].set_title(\"Test R² by Model\")\n", "axes[0, 1].invert_yaxis()\n", "\n", "x = np.arange(len(df_results))\n", "width = 0.25\n", - "axes[1, 0].bar(x - width, df_results['Train RMSE'], width, label='Train', alpha=0.8)\n", - "axes[1, 0].bar(x, df_results['Val RMSE'], width, label='Val', alpha=0.8)\n", - "axes[1, 0].bar(x + width, df_results['Test RMSE'], width, label='Test', alpha=0.8)\n", - "axes[1, 0].set_xlabel('Model')\n", - "axes[1, 0].set_ylabel('RMSE')\n", - "axes[1, 0].set_title('RMSE Comparison: Train vs Val vs Test')\n", + "axes[1, 0].bar(x - width, df_results[\"Train RMSE\"], width, label=\"Train\", alpha=0.8)\n", + "axes[1, 0].bar(x, df_results[\"Val RMSE\"], width, label=\"Val\", alpha=0.8)\n", + "axes[1, 0].bar(x + width, df_results[\"Test RMSE\"], width, label=\"Test\", alpha=0.8)\n", + "axes[1, 0].set_xlabel(\"Model\")\n", + "axes[1, 0].set_ylabel(\"RMSE\")\n", + "axes[1, 0].set_title(\"RMSE Comparison: Train vs Val vs Test\")\n", "axes[1, 0].set_xticks(x)\n", - "axes[1, 0].set_xticklabels(df_results['Model'], rotation=45, ha='right')\n", + "axes[1, 0].set_xticklabels(df_results[\"Model\"], rotation=45, ha=\"right\")\n", "axes[1, 0].legend()\n", "\n", - "axes[1, 1].bar(x - width, df_results['Train R²'], width, label='Train', alpha=0.8)\n", - "axes[1, 1].bar(x, df_results['Val R²'], width, label='Val', alpha=0.8)\n", - "axes[1, 1].bar(x + width, df_results['Test R²'], width, label='Test', alpha=0.8)\n", - "axes[1, 1].set_xlabel('Model')\n", - "axes[1, 1].set_ylabel('R² Score')\n", - "axes[1, 1].set_title('R² Comparison: Train vs Val vs Test')\n", + "axes[1, 1].bar(x - width, df_results[\"Train R²\"], width, label=\"Train\", alpha=0.8)\n", + "axes[1, 1].bar(x, df_results[\"Val R²\"], width, label=\"Val\", alpha=0.8)\n", + "axes[1, 1].bar(x + width, df_results[\"Test R²\"], width, label=\"Test\", alpha=0.8)\n", + "axes[1, 1].set_xlabel(\"Model\")\n", + "axes[1, 1].set_ylabel(\"R² Score\")\n", + "axes[1, 1].set_title(\"R² Comparison: Train vs Val vs Test\")\n", "axes[1, 1].set_xticks(x)\n", - "axes[1, 1].set_xticklabels(df_results['Model'], rotation=45, ha='right')\n", + "axes[1, 1].set_xticklabels(df_results[\"Model\"], rotation=45, ha=\"right\")\n", "axes[1, 1].legend()\n", "\n", "plt.tight_layout()\n", - "plt.savefig('plots/model_results.png', dpi=150)\n", + "plt.savefig(\"plots/model_results.png\", dpi=150)\n", "plt.close()" ] }, @@ -1133,10 +1171,12 @@ } ], "source": [ - "model = Pipeline([\n", - " ('poly', PolynomialFeatures(degree=2, include_bias=False)),\n", - " ('regressor', LinearRegression())\n", - "])\n", + "model = Pipeline(\n", + " [\n", + " (\"poly\", PolynomialFeatures(degree=2, include_bias=False)),\n", + " (\"regressor\", LinearRegression()),\n", + " ]\n", + ")\n", "model.fit(X_train_scaled, y_train)" ] }, @@ -1147,10 +1187,10 @@ "metadata": {}, "outputs": [], "source": [ - "with open('models/model.pkl', 'wb') as f:\n", + "with open(\"models/model.pkl\", \"wb\") as f:\n", " pickle.dump(model, f)\n", "\n", - "with open('models/scaler.pkl', 'wb') as f:\n", + "with open(\"models/scaler.pkl\", \"wb\") as f:\n", " pickle.dump(preprocessor, f)" ] } diff --git a/init_db.py b/init_db.py index 099c2d0..2fb237d 100644 --- a/init_db.py +++ b/init_db.py @@ -1,9 +1,11 @@ from database.models import Base from database.connection import engine + def init_database(): Base.metadata.create_all(engine) print("all database-tables were created successfully") + if __name__ == "__main__": init_database() diff --git a/main.py b/main.py index cd6609a..5df23cd 100644 --- a/main.py +++ b/main.py @@ -2,8 +2,13 @@ from discord.ext import commands, tasks import logging from dotenv import load_dotenv + import os -from datetime import date, datetime, time as dt_time, timezone, timedelta +import re + +from datetime import datetime, time as dt_time, timezone, timedelta +import asyncio +from functools import partial from services.exam_tracker import ExamTracker from services.reminder import Reminder @@ -11,257 +16,292 @@ load_dotenv() +CAMPUSES = ["pilani", "goa", "hyderabad"] + exam_tracker = ExamTracker() reminder_service = Reminder() -token = os.getenv('DISCORD_TOKEN') +token = os.getenv("DISCORD_TOKEN") -handler = logging.FileHandler(filename='discord.log',encoding='utf-8',mode='w') +handler = logging.FileHandler(filename="discord.log", encoding="utf-8", mode="w") intents = discord.Intents.default() intents.message_content = True intents.members = True -bot = commands.Bot(command_prefix='!!', intents=intents) -bot.remove_command('help') +bot = commands.Bot(command_prefix="!!", intents=intents) +bot.remove_command("help") DISCLAIMER_MSG = "all scores pre-**2022** have been standardized to **390**, so a score in **2021** which may have been **300** becomes **260** in current standards and settings of exam." -# default is UTC & I don't live in that region. IST = timezone(timedelta(hours=5, minutes=30)) -async def display(ctx, filename: str, disclaimer: bool = True, not_found_msg: str = None): + +async def display(ctx, cache_key, title, generator_func, filename, disclaimer=True): """ - sends a file to discord then cleanup. + generates a plot/table based on user-req throught generator_func availed in analytics.py, if cache-hit is found it immediately sends the embed of that to user. disclaimer message is optional. """ - if filename and os.path.exists(filename): - try: - with open(filename, 'rb') as f: - await ctx.send(file=discord.File(f, filename=os.path.basename(filename))) - if disclaimer: - await ctx.send(DISCLAIMER_MSG) - return True - finally: - os.remove(filename) - else: - if not_found_msg: - await ctx.send(not_found_msg) - else: - await ctx.send(f"error: could not generate or find file.") - return False + cached_url = anal.get_cached_url(cache_key) + + if cached_url: + print(f"cache hit: {cache_key}") + embed = discord.Embed(title=title) + embed.set_image(url=cached_url) + await ctx.send(embed=embed) + if disclaimer: + await ctx.send(DISCLAIMER_MSG) + return True + + image_buffer = await generator_func + + if image_buffer is None: + return None + + try: + image_buffer.seek(0) + file = discord.File(fp=image_buffer, filename=filename) + sent_message = await ctx.send(file=file) + if disclaimer: + await ctx.send(DISCLAIMER_MSG) + + if sent_message.attachments: + anal.save_url_to_cache(cache_key, sent_message.attachments[0].url) + print(f"cached: {cache_key}") + + except Exception as e: + await ctx.send(f"error uploading: {e}") + return None + finally: + image_buffer.close() + + return True + + +def parse_campus(args): + clean_args = args.lower() + for c in CAMPUSES: + if c in clean_args: + return c, clean_args.replace(c, "", 1) + return None, clean_args + + +async def send_dm(user_id, message): + try: + user = await bot.fetch_user(user_id) + await user.send(message) + print(f"sent DM fallback to {user.name}") + except Exception as e: + print(f"failed to DM user {user_id}: {e}") -# this is for sending user reminders for their exam-time @tasks.loop(time=dt_time(hour=9, minute=0, tzinfo=IST)) async def send_exam_reminders(): """ send daily reminders in the channel where interaction with bot was made. """ - + reminder_service.reset_daily_tracking() reminders = reminder_service.users_to_remind() - + for reminder in reminders: - channel = bot.get_channel(reminder['channel_id']) - + channel = bot.get_channel(reminder["channel_id"]) + msg = f"<@{reminder['user_id']}> {reminder['message']}" + if channel: try: - await channel.send( - f"<@{reminder['user_id']}> {reminder['message']}" + await channel.send(msg) + print( + f"sent reminder to user {reminder['user_id']} in channel {channel.name}" ) - print(f"sent reminder to user {reminder['user_id']} in channel {channel.name}") except discord.Forbidden: - print(f"no permission to send in channel {reminder['channel_id']}") - try: - user = await bot.fetch_user(reminder['user_id']) - await user.send(reminder['message']) - print(f"sent DM fallback to {user.name}") - except Exception as dm_error: - print(f"failed to DM user {reminder['user_id']}: {dm_error}") + print(f"no permission in channel {reminder['channel_id']}") + await send_dm(reminder["user_id"], reminder["message"]) except Exception as e: - print(f"failed to send reminder to {reminder['user_id']}: {e}") + print(f"failed to send reminder: {e}") else: - print(f"channel {reminder['channel_id']} not found, falling back to DM") - try: - user = await bot.fetch_user(reminder['user_id']) - await user.send(reminder['message']) - print(f"sent DM fallback to {user.name}") - except Exception as e: - print(f"failed to send to {reminder['user_id']}: {e}") + print(f"channel {reminder['channel_id']} not found") + await send_dm(reminder["user_id"], reminder["message"]) + @send_exam_reminders.before_loop async def before_reminder(): await bot.wait_until_ready() -# all bot events/commands from here on now @bot.event async def on_ready(): - """ - prints to the console screen to my server laptop to signal the bot is up and running. - """ - print("ready when you're") if not send_exam_reminders.is_running(): send_exam_reminders.start() -@bot.command() -async def plot(ctx, campus_name: str): - """ - uses the analytics file's function to generate plots to end-user only based on campus - """ - - try: - await ctx.send(f"generating plot for {campus_name}") - anal.plot_marks_by_campus(campus_name) - filename = f"{campus_name.lower()}_marks_trend.png" - - await display(ctx, filename, - not_found_msg=f"no data found for campus: {campus_name}") - except Exception as e: - await ctx.send(f"error generating plot: {str(e)}") -@bot.command(name='plot-branch') -async def plot_branch(ctx, *, args: str): - """ - uses the analytics file's function to generate plots to end-user now on both campus and its respective branch. - """ - - try: - if "," not in args: - await ctx.send("**usage:** `!!plot-branch , `") - return - - campus_raw, branch_raw = args.split(",", 1) - campus = campus_raw.strip() - branch = branch_raw.strip() - - await ctx.send(f"generating plot for **{branch}** in **{campus}**") - - filename = anal.plot_marks_by_branch(campus, branch) - - if filename is None: - await ctx.send(f"no data found for **{branch}** in **{campus}**.") - return - - await display(ctx, filename, - not_found_msg="error: file generated but not found.") - - except Exception as e: - await ctx.send(f"error: {str(e)}") +@bot.command(name="plot") +async def plot(ctx, *, args: str = None): + if not args: + return await ctx.send("Usage: `!!plot `") + + campus, _ = parse_campus(args) + + if not campus: + return await ctx.send("invalid campus. Please use Pilani, Goa, or Hyderabad.") + + loop = asyncio.get_event_loop() + generator = loop.run_in_executor(None, partial(anal.plot_marks_by_campus, campus)) + + result = await display( + ctx, + cache_key=f"plot_{campus}", + title=f"{campus.title()} Cutoff Trends", + generator_func=generator, + filename=f"{campus}_plot.png", + ) + + if result is None: + await ctx.send(f"No data found for campus: {campus}") + + +@bot.command(name="plot-branch") +async def plot_branch(ctx, *, args: str = None): + if not args: + return await ctx.send("Usage: `!!plot-branch `") + + campus, clean_args = parse_campus(args) + + if not campus: + return await ctx.send("please specify a campus (Pilani, Goa, or Hyderabad).") + + branch = clean_args.replace(",", "").strip() + + if not branch: + return await ctx.send("please specify a branch name.") + + await ctx.send(f"generating plot for **{branch}** in **{campus.title()}**...") -@bot.command(name='select') + loop = asyncio.get_event_loop() + generator = loop.run_in_executor( + None, partial(anal.plot_marks_by_branch, campus, branch) + ) + + result = await display( + ctx, + cache_key=f"plot_branch_{campus}_{branch}", + title=f"{branch} - {campus.title()}", + generator_func=generator, + filename=f"{campus}_{branch}.png", + ) + + if result is None: + await ctx.send(f"no data found for **{branch}** in **{campus}**.") + + +@bot.command(name="select") async def select(ctx, *, args: str = None): - """ - sends cutoffs for a particular year for a specified campus (if any). - uses select func in analytics file. - """ - if not args: - await ctx.send("**Usage:** `!!select [year]` or `!!select [year], [campus]`\n" - "Example: `!!select 2024` or `!!select 2024, Pilani`") - return - - # parse-args - year = None - campus = None - - if "," in args: - parts = args.split(",", 1) - year_str = parts[0].strip() - campus = parts[1].strip() if len(parts) > 1 and parts[1].strip() else None - else: - year_str = args.strip() - - try: - year = int(year_str) - except ValueError: - await ctx.send(f"**error:** invalid year '{year_str}'. Please provide a valid year such as 2024") - return - - if campus: - await ctx.send(f"**fetching {year} cutoffs for {campus.title()}**") - else: - await ctx.send(f"**fetching {year} cutoffs for all campuses**") - - try: - filename = anal.select(limit=25, year=year, campus_filter=campus) - - await display(ctx, filename, - not_found_msg=f"**No data found**\n" - f"• Year: {year}\n" - f"• Campus: {campus if campus else 'All'}\n\n" - "**Available campuses:** Pilani, Goa, Hyderabad") - except Exception as e: - await ctx.send(f"**error:** {str(e)}") + return await ctx.send("usage: `!!select 2024` or `!!select 2024 Pilani`") + + year_match = re.search(r"\b(20\d{2})\b", args) + if not year_match: + return await ctx.send( + "could not find a valid year (e.g., 2024) in your command." + ) + + year = int(year_match.group(1)) + remaining_args = args.replace(year_match.group(1), "") -@bot.command(name='predict') + campus, _ = parse_campus(remaining_args) + campus_title = campus.title() if campus else None + + filter_msg = f" - {campus_title}" if campus_title else " - All Campuses" + await ctx.send( + f"fetching **{year}** cutoffs{filter_msg.replace(' - ', ' for ')}..." + ) + + loop = asyncio.get_event_loop() + generator = loop.run_in_executor( + None, partial(anal.select, limit=25, year=year, campus_filter=campus_title) + ) + + result = await display( + ctx, + cache_key=f"select_{year}_{campus_title or 'all'}", + title=f"{year} Cutoffs{filter_msg}", + generator_func=generator, + filename=f"cutoff_{year}.png", + ) + + if result is None: + await ctx.send(f"No data found for {year}.") + + +@bot.command(name="predict") async def predict(ctx, *, args: str = None): - """ - sends predicted-data found in csv files in neat and tabular manner. - uses get_predictions func in analytics file. - """ - - # parse-args + situation = "most-likely" campus = None - situation = 'most-likely' - + if args: - if "," in args: - parts = args.split(",", 1) - campus = parts[0].strip() if parts[0].strip() else None - situation = parts[1].strip() if len(parts) > 1 and parts[1].strip() else 'most-likely' - else: - campus = args.strip() - - if campus: - await ctx.send(f"**generating 2026 {situation} predictions for {campus.title()}**") - else: - await ctx.send(f"**generating 2026 {situation} predictions**") - - try: - filename = anal.get_predictions(limit=25, campus_filter=campus, situation=situation) - - await display(ctx, filename, - not_found_msg=f"no data found for campus: **{campus}**\n" - "available campuses: Pilani, Goa, Hyderabad\n" - "available situations: best, most-likely (can keep blank), worst") - except Exception as e: - await ctx.send(f"critical Error: {e}") + raw_args = args.lower().replace("most likely", "most-likely") + + for s in ["worst", "best", "most-likely"]: + if s in raw_args: + situation = s + raw_args = raw_args.replace(s, "") + break + + campus = raw_args.replace(",", "").strip() or None + + filter_msg = f" - {campus.title()}" if campus else " - All Campuses" + await ctx.send( + f"fetching **{situation}** case predictions{filter_msg.replace(' - ', ' for ')}..." + ) + + loop = asyncio.get_event_loop() + generator = loop.run_in_executor( + None, + partial( + anal.get_predictions, limit=25, campus_filter=campus, situation=situation + ), + ) + + result = await display( + ctx, + cache_key=f"predict_{situation}_{campus or 'all'}", + title=f"{situation.title()} Case Predictions{filter_msg}", + generator_func=generator, + filename=f"pred_2026_{situation}.png", + ) + + if result is None: + await ctx.send("no prediction data found.") @bot.command() async def sy(ctx): - """ - sends syllabus of current year's bitsat examination syllabus to user. - """ + await ctx.send( + "please check: https://admissions.bits-pilani.ac.in/FD/downloads/BITSAT_Syllabus.pdf?06012025" + ) - await ctx.send(f"please check: https://admissions.bits-pilani.ac.in/FD/downloads/BITSAT_Syllabus.pdf?06012025") @bot.command() async def ypt(ctx): - """ - sends information regarding official YPT group of the server to user. - """ + await ctx.send( + "Group Name: BITSATards, Password: 123\nthe link is as follows: https://link.yeolpumta.com/P3R5cGU9Z3JvdXBJbnZpdGUmaWQ9MzU5OTUzNg==" + ) - await ctx.send(f"Group Name: BITSATards, Password: 123\nthe link is as follows: https://link.yeolpumta.com/P3R5cGU9Z3JvdXBJbnZpdGUmaWQ9MzU5OTUzNg==") @bot.command() async def da(ctx): - """ - dates of bitsat-shifts & other such important tasks. - """ + await ctx.send( + "Session 1 Starts From: Wednesday, 15 April 2026\nSession 2 Starts From: Sunday, 24 May 2026" + ) - await ctx.send("Session 1 Starts From: Wednesday, 15 April 2026\nSession 2 Starts From: Sunday, 24 May 2026") @bot.command() async def resources(ctx): - """ - Send study resources for BITSAT exam. - """ + await ctx.send( + "please follow: https://www.reddit.com/r/Bitsatards/wiki/resources/ \nadditionally please refer to: https://discord.com/channels/1221093390167576646/1224005178106187877" + ) - await ctx.send(f"please follow: https://www.reddit.com/r/Bitsatards/wiki/resources/ \nadditionally please refer to: https://discord.com/channels/1221093390167576646/1224005178106187877") @bot.command() async def time(ctx, flag: str = None, *, date_str: str = None): @@ -276,44 +316,52 @@ async def time(ctx, flag: str = None, *, date_str: str = None): try: if flag is None: - message = exam_tracker.get_countdown(ctx.author.id) - await ctx.send(message) - return + return await ctx.send(exam_tracker.get_countdown(ctx.author.id)) - if flag in ['-s', '-set', '--set']: + if flag in ["-s", "-set", "--set"]: if not date_str: - await ctx.send("please provide a date\nusage: `!!exam -s DD-MM-YYYY`\nExample: `!!exam -s 15-04-2026`") - return + return await ctx.send( + "please provide a date\nusage: `!!exam -s DD-MM-YYYY`\nExample: `!!exam -s 15-04-2026`" + ) try: - exam_date = datetime.strptime(date_str, '%d-%m-%Y').date() + exam_date = datetime.strptime(date_str, "%d-%m-%Y").date() message = exam_tracker.set_exam_date( user_id=ctx.author.id, username=str(ctx.author), channel_id=ctx.channel.id, - exam_date=exam_date + exam_date=exam_date, ) await ctx.send(message) except ValueError: - await ctx.send("invalid date format!\nplease use: `!!exam -s DD-MM-YYYY`\nExample: `!!exam -s 15-04-2026`") + await ctx.send( + "invalid date format!\nplease use: `!!exam -s DD-MM-YYYY`\nExample: `!!exam -s 15-04-2026`" + ) + + elif flag in ["-r", "-reset", "--reset"]: + await ctx.send(exam_tracker.reset(ctx.author.id)) - elif flag in ['-r', '-reset', '--reset']: - message = exam_tracker.reset(ctx.author.id) - await ctx.send(message) - except Exception as e: await ctx.send(f"error: {str(e)}") + +@bot.event +async def on_command_error(ctx, error): + if isinstance(error, commands.MissingRequiredArgument): + await ctx.send("missing a required argument! check command usage.") + elif isinstance(error, commands.BadArgument): + await ctx.send( + "invalid argument provided, did you type text instead of a year?" + ) + else: + print(f"error: {error}") + await ctx.send("an unexpected error occurred.") + + @bot.command() async def help(ctx): - """ - Show help message with all available commands. - """ - helper = """ -**Available Commands** - -this bot helps you get a rough idea of BITSAT exam cutoffs for the upcoming year, please note that predictions are estimates and may not reflect actual values. +This bot helps you get a rough idea of BITSAT exam cutoffs for the upcoming year, please note that predictions are estimates and may not reflect actual values. **Commands:** • `!!plot [campus-name]` - plot marks trend for all branches in a campus @@ -347,4 +395,5 @@ async def help(ctx): """ await ctx.send(helper) + bot.run(token, log_handler=handler, log_level=logging.DEBUG) diff --git a/predictions.py b/predictions.py index 594dcdd..03d646e 100644 --- a/predictions.py +++ b/predictions.py @@ -1,33 +1,42 @@ import pandas as pd import pickle -def predict_cutoffs(year, difficulty, reference_df, output_file='predictions.csv'): - with open("models/scaler.pkl", 'rb') as f: + +def predict_cutoffs(year, difficulty, reference_df, output_file="predictions.csv"): + with open("models/scaler.pkl", "rb") as f: preprocessor = pickle.load(f) - with open("models/model.pkl", 'rb') as f: + with open("models/model.pkl", "rb") as f: model = pickle.load(f) # since I have dropped newer branches, I could remove this line of code and simply use itertools but this does the job so I'm letting it be. - prediction_data = reference_df[['campus', 'branch']].drop_duplicates().copy() - prediction_data['year'] = year - prediction_data['difficulty'] = difficulty - + prediction_data = reference_df[["campus", "branch"]].drop_duplicates().copy() + prediction_data["year"] = year + prediction_data["difficulty"] = difficulty + prediction_data_scaled = preprocessor.transform(prediction_data) - prediction_data['marks'] = model.predict(prediction_data_scaled).round().astype(int) - - result = prediction_data[['campus', 'branch', 'marks', 'year']].sort_values('marks', ascending=False) - - result.to_csv(output_file, index=False) + prediction_data["marks"] = model.predict(prediction_data_scaled).round().astype(int) + + result = prediction_data[["campus", "branch", "marks", "year"]].sort_values( + "marks", ascending=False + ) + + result.to_csv(output_file, index=False) return result -# I'm taking 0.2 -> best case, 0.5 -> most-likely and 0.8 -> worst case + +# I'm taking 0.2 -> best case, 0.5 -> most-likely and 0.8 -> worst case # to manipulate coefficient_of_difficulty = 0.5 -df = pd.read_csv('data/cutoff_2025.csv') -predictions_2026 = predict_cutoffs(year=2026, difficulty = coefficient_of_difficulty , reference_df=df, output_file='predict/most_likely_case.csv') +df = pd.read_csv("data/model_data/cutoff_2025.csv") +predictions_2026 = predict_cutoffs( + year=2026, + difficulty=coefficient_of_difficulty, + reference_df=df, + output_file="predict/most_likely_case.csv", +) print(predictions_2026) -predictions_2026.to_csv('predict/most_likely_case.csv', index=False) +predictions_2026.to_csv("predict/most_likely_case.csv", index=False) diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..65ec521 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,23 @@ +[project] +name = "bitsatards-bot" +version = "2.5.0" +description = "Official project-typesettings for the bitsatards-bot project." +readme = "README.md" +requires-python = ">=3.14" +dependencies = [ + "beautifulsoup4>=4.14.3", + "discord-py>=2.6.4", + "lxml>=6.0.2", + "matplotlib>=3.10.8", + "numpy>=2.4.2", + "pandas>=3.0.0", + "psycopg2-binary>=2.9.11", + "pytest>=9.0.2", + "pytest-mock>=3.15.1", + "python-dotenv>=1.2.1", + "requests>=2.32.5", + "ruff>=0.14.14", + "scikit-learn>=1.8.0", + "seaborn>=0.13.2", + "sqlalchemy>=2.0.46", +] diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 5b7b10a..0000000 --- a/requirements.txt +++ /dev/null @@ -1,14 +0,0 @@ -discord.py>=2.6.4 -python-dotenv>=1.0.1 -pandas>=2.2.3 -numpy>=2.2.2 -matplotlib>=3.9.3 -seaborn>=0.13.2 -scikit-learn>=1.6.0 -requests>=2.32.3 -lxml>=5.3.0 -beautifulsoup4>=4.14.3 -sqlalchemy>=2.0.45 -psycopg2-binary>=2.9.9 -pytest>=8.0.0 -pytest-mock>=3.14.0 diff --git a/services/exam_tracker.py b/services/exam_tracker.py index 0eed3b8..16349b9 100644 --- a/services/exam_tracker.py +++ b/services/exam_tracker.py @@ -1,7 +1,7 @@ -from datetime import date, datetime -from typing import Optional +from datetime import date from database.repository import ExamRepository + class ExamTracker: """ this is what we will use in main.py @@ -10,7 +10,9 @@ class ExamTracker: def __init__(self): self.repo = ExamRepository() - def set_exam_date(self, user_id: int, username: str, channel_id: int, exam_date: date) -> str: + def set_exam_date( + self, user_id: int, username: str, channel_id: int, exam_date: date + ) -> str: """ set user's exam date and return confirmation message """ @@ -39,7 +41,7 @@ def get_countdown(self, user_id: int) -> str: exam_date = user_exam.exam_date days_left = (exam_date - today).days - exam_date_str = exam_date.strftime('%d %B %Y') + exam_date_str = exam_date.strftime("%d %B %Y") if days_left > 0: weeks = days_left // 7 diff --git a/services/reminder.py b/services/reminder.py index 7024798..5dbc9d4 100644 --- a/services/reminder.py +++ b/services/reminder.py @@ -1,20 +1,21 @@ from datetime import date from database.repository import ExamRepository + class Reminder: """ sends user reminders when their exam will take place if they have set a date. """ - + def __init__(self): self.repo = ExamRepository() - self.sent_today = set() - + self.sent_today = set() + def users_to_remind(self): """ get users who need reminders today """ - + reminders = [] all_users = self.repo.get_all_users() today = date.today() @@ -22,19 +23,19 @@ def users_to_remind(self): for user_exam in all_users: days_until = (user_exam.exam_date - today).days user_id = user_exam.user_id - + # if already sent, don't send again :p if user_id in self.sent_today: continue - + message = None - + if days_until == 30: message = f"**30 Days Until BITSAT**\nExam: {user_exam.exam_date.strftime('%d %B %Y')}\nOne month to go" - + elif days_until == 7: message = f"**1 Week Until BITSAT!**\nExam: {user_exam.exam_date.strftime('%d %B %Y')}\nFinal week" - + elif 1 <= days_until <= 6: if days_until == 1: message = f"**Tomorrow is BITSAT!**\n{user_exam.exam_date.strftime('%d %B %Y')}\nGet good sleep for tomorrow" @@ -43,15 +44,17 @@ def users_to_remind(self): elif days_until == 0: message = f"**TODAY IS THE DAY!**\nBITSAT: {user_exam.exam_date.strftime('%d %B %Y')}\nGood luck Soldier" if message: - reminders.append({ - 'user_id': user_id, - 'message': message, - 'channel_id': user_exam.channel_id, - }) + reminders.append( + { + "user_id": user_id, + "message": message, + "channel_id": user_exam.channel_id, + } + ) self.sent_today.add(user_id) - + return reminders - + def reset_daily_tracking(self): self.sent_today.clear() diff --git a/tests/conftest.py b/tests/conftest.py index cab80e0..eb642c6 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,28 +1,33 @@ import os # dummy DATABASE_URL for testing-purposes only. -os.environ.setdefault('DATABASE_URL', 'postgresql://dummy:dummy@localhost/dummy') +os.environ.setdefault("DATABASE_URL", "postgresql://dummy:dummy@localhost/dummy") import pytest import database.models as models from unittest.mock import Mock, patch from services.exam_tracker import ExamTracker + @pytest.fixture def exam_columns(): return models.UserExam.__table__.columns + @pytest.fixture def mock_repo(): return Mock() + @pytest.fixture def tracker(mock_repo): - with patch('services.exam_tracker.ExamRepository', return_value=mock_repo): + with patch("services.exam_tracker.ExamRepository", return_value=mock_repo): return ExamTracker() + @pytest.fixture def reminder(mock_repo): - with patch('services.reminder.ExamRepository', return_value=mock_repo): + with patch("services.reminder.ExamRepository", return_value=mock_repo): from services.reminder import Reminder + return Reminder() diff --git a/tests/database_test.py b/tests/database_test.py index 477bfed..face160 100644 --- a/tests/database_test.py +++ b/tests/database_test.py @@ -1,18 +1,17 @@ -import pytest from sqlalchemy import Integer, BigInteger, String, Date + # basic tests to assert datatype & existence. class TestDatabase: - def test_column_types(self, exam_columns): - assert isinstance(exam_columns['id'].type, Integer) - assert isinstance(exam_columns['user_id'].type, BigInteger) - assert isinstance(exam_columns['username'].type, String) - assert isinstance(exam_columns['exam_date'].type, Date) - assert isinstance(exam_columns['channel_id'].type, BigInteger) + assert isinstance(exam_columns["id"].type, Integer) + assert isinstance(exam_columns["user_id"].type, BigInteger) + assert isinstance(exam_columns["username"].type, String) + assert isinstance(exam_columns["exam_date"].type, Date) + assert isinstance(exam_columns["channel_id"].type, BigInteger) def test_all_columns_exist(self, exam_columns): - expected_columns = {'id', 'user_id', 'username', 'exam_date', 'channel_id'} + expected_columns = {"id", "user_id", "username", "exam_date", "channel_id"} actual_columns = set(exam_columns.keys()) - + assert actual_columns == expected_columns diff --git a/tests/services_test.py b/tests/services_test.py index f0ddfd4..73c63c1 100644 --- a/tests/services_test.py +++ b/tests/services_test.py @@ -1,11 +1,10 @@ -import pytest from datetime import date from unittest.mock import Mock, patch + # a lot of unit-tests from here and on. class TestExamTracker: - - @patch('services.exam_tracker.date') + @patch("services.exam_tracker.date") def test_set_exam_date_future(self, mock_date_class, tracker, mock_repo): mock_date_class.today.return_value = date(2026, 1, 1) exam_date = date(2026, 4, 15) @@ -14,21 +13,21 @@ def test_set_exam_date_future(self, mock_date_class, tracker, mock_repo): assert "exam date set for **15 April 2026**" in result assert "**104 days** remaining" in result - @patch('services.exam_tracker.date') + @patch("services.exam_tracker.date") def test_set_exam_date_today(self, mock_date_class, tracker, mock_repo): today = date(2026, 4, 15) mock_date_class.today.return_value = today result = tracker.set_exam_date(123, "testuser", 456, today) assert "which is btw today, best of luck soldier!" in result - @patch('services.exam_tracker.date') + @patch("services.exam_tracker.date") def test_past(self, mock_date_class, tracker, mock_repo): mock_date_class.today.return_value = date(2026, 4, 15) past_date = date(2026, 1, 1) result = tracker.set_exam_date(123, "testuser", 456, past_date) assert "has already been passed" in result - @patch('services.exam_tracker.date') + @patch("services.exam_tracker.date") def test_future_date(self, mock_date_class, tracker, mock_repo): mock_date_class.today.return_value = date(2026, 1, 1) mock_exam = Mock() @@ -39,7 +38,7 @@ def test_future_date(self, mock_date_class, tracker, mock_repo): assert "**104 days**" in result assert "14 weeks and 6 days" in result - @patch('services.exam_tracker.date') + @patch("services.exam_tracker.date") def test_today(self, mock_date_class, tracker, mock_repo): today = date(2026, 4, 15) mock_date_class.today.return_value = today @@ -49,7 +48,7 @@ def test_today(self, mock_date_class, tracker, mock_repo): result = tracker.get_countdown(123) assert "**TODAY**" in result - @patch('services.exam_tracker.date') + @patch("services.exam_tracker.date") def test_past_date(self, mock_date_class, tracker, mock_repo): mock_date_class.today.return_value = date(2026, 4, 15) mock_exam = Mock() @@ -60,14 +59,14 @@ def test_past_date(self, mock_date_class, tracker, mock_repo): assert "It's been 104 days since your exam" in result assert "time -r command" in result - @patch('services.exam_tracker.date') + @patch("services.exam_tracker.date") def test_less_than_week(self, mock_date_class, tracker, mock_repo): mock_date_class.today.return_value = date(2026, 4, 10) mock_exam = Mock() mock_exam.exam_date = date(2026, 4, 15) mock_repo.get_user_exam.return_value = mock_exam result = tracker.get_countdown(123) - + assert "**5 days**" in result assert "exam date: 15 April 2026" in result @@ -82,118 +81,118 @@ def test_reset_no_record(self, tracker, mock_repo): result = tracker.reset(123) assert result == "no exam has been set." -class TestReminder: - @patch('services.reminder.date') +class TestReminder: + @patch("services.reminder.date") def test_reminder_30_days(self, mock_date_class, reminder, mock_repo): mock_date_class.today.return_value = date(2026, 3, 16) - + mock_user = Mock() mock_user.user_id = 123 mock_user.exam_date = date(2026, 4, 15) mock_user.channel_id = 456 - + mock_repo.get_all_users.return_value = [mock_user] reminders = reminder.users_to_remind() assert len(reminders) == 1 - assert reminders[0]['user_id'] == 123 - assert "**30 Days Until BITSAT**" in reminders[0]['message'] - assert "15 April 2026" in reminders[0]['message'] - assert reminders[0]['channel_id'] == 456 + assert reminders[0]["user_id"] == 123 + assert "**30 Days Until BITSAT**" in reminders[0]["message"] + assert "15 April 2026" in reminders[0]["message"] + assert reminders[0]["channel_id"] == 456 - @patch('services.reminder.date') + @patch("services.reminder.date") def test_reminder_7_days(self, mock_date_class, reminder, mock_repo): mock_date_class.today.return_value = date(2026, 4, 8) - + mock_user = Mock() mock_user.user_id = 123 mock_user.exam_date = date(2026, 4, 15) mock_user.channel_id = 456 - + mock_repo.get_all_users.return_value = [mock_user] reminders = reminder.users_to_remind() - + assert len(reminders) == 1 - assert "**1 Week Until BITSAT!**" in reminders[0]['message'] - assert "Final week" in reminders[0]['message'] + assert "**1 Week Until BITSAT!**" in reminders[0]["message"] + assert "Final week" in reminders[0]["message"] - @patch('services.reminder.date') + @patch("services.reminder.date") def test_reminder_tomorrow(self, mock_date_class, reminder, mock_repo): mock_date_class.today.return_value = date(2026, 4, 14) mock_user = Mock() mock_user.user_id = 123 mock_user.exam_date = date(2026, 4, 15) mock_user.channel_id = 456 - + mock_repo.get_all_users.return_value = [mock_user] reminders = reminder.users_to_remind() - + assert len(reminders) == 1 - assert "**Tomorrow is BITSAT!**" in reminders[0]['message'] - assert "Get good sleep for tomorrow" in reminders[0]['message'] + assert "**Tomorrow is BITSAT!**" in reminders[0]["message"] + assert "Get good sleep for tomorrow" in reminders[0]["message"] - @patch('services.reminder.date') + @patch("services.reminder.date") def test_reminder_2_to_6_days(self, mock_date_class, reminder, mock_repo): mock_date_class.today.return_value = date(2026, 4, 10) - + mock_user = Mock() mock_user.user_id = 123 mock_user.exam_date = date(2026, 4, 15) mock_user.channel_id = 456 - + mock_repo.get_all_users.return_value = [mock_user] reminders = reminder.users_to_remind() - + assert len(reminders) == 1 - assert "**5 Days Until BITSAT**" in reminders[0]['message'] - assert "Please close discord & study" in reminders[0]['message'] + assert "**5 Days Until BITSAT**" in reminders[0]["message"] + assert "Please close discord & study" in reminders[0]["message"] - @patch('services.reminder.date') + @patch("services.reminder.date") def test_reminder_today(self, mock_date_class, reminder, mock_repo): today = date(2026, 4, 15) mock_date_class.today.return_value = today - + mock_user = Mock() mock_user.user_id = 123 mock_user.exam_date = today mock_user.channel_id = 456 - + mock_repo.get_all_users.return_value = [mock_user] - + reminders = reminder.users_to_remind() - + assert len(reminders) == 1 - assert "**TODAY IS THE DAY!**" in reminders[0]['message'] - assert "Good luck Soldier" in reminders[0]['message'] + assert "**TODAY IS THE DAY!**" in reminders[0]["message"] + assert "Good luck Soldier" in reminders[0]["message"] - @patch('services.reminder.date') + @patch("services.reminder.date") def test_multiple_users_different_dates(self, mock_date_class, reminder, mock_repo): mock_date_class.today.return_value = date(2026, 4, 14) - + user1 = Mock() user1.user_id = 123 - user1.exam_date = date(2026, 4, 15) + user1.exam_date = date(2026, 4, 15) user1.channel_id = 456 - + user2 = Mock() user2.user_id = 456 - user2.exam_date = date(2026, 4, 21) + user2.exam_date = date(2026, 4, 21) user2.channel_id = 789 - + user3 = Mock() user3.user_id = 789 - user3.exam_date = date(2026, 5, 1) + user3.exam_date = date(2026, 5, 1) user3.channel_id = 111 - + mock_repo.get_all_users.return_value = [user1, user2, user3] reminders = reminder.users_to_remind() - + assert len(reminders) == 2 - assert reminders[0]['user_id'] == 123 - assert reminders[1]['user_id'] == 456 + assert reminders[0]["user_id"] == 123 + assert reminders[1]["user_id"] == 456 - @patch('services.reminder.date') + @patch("services.reminder.date") def test_empty_user_list(self, mock_date_class, reminder, mock_repo): mock_date_class.today.return_value = date(2026, 4, 15) mock_repo.get_all_users.return_value = [] diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..72138e5 --- /dev/null +++ b/uv.lock @@ -0,0 +1,1023 @@ +version = 1 +revision = 3 +requires-python = ">=3.14" +resolution-markers = [ + "sys_platform == 'win32'", + "sys_platform == 'emscripten'", + "sys_platform != 'emscripten' and sys_platform != 'win32'", +] + +[[package]] +name = "aiohappyeyeballs" +version = "2.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload-time = "2025-03-12T01:42:48.764Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload-time = "2025-03-12T01:42:47.083Z" }, +] + +[[package]] +name = "aiohttp" +version = "3.13.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohappyeyeballs" }, + { name = "aiosignal" }, + { name = "attrs" }, + { name = "frozenlist" }, + { name = "multidict" }, + { name = "propcache" }, + { name = "yarl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/42/32cf8e7704ceb4481406eb87161349abb46a57fee3f008ba9cb610968646/aiohttp-3.13.3.tar.gz", hash = "sha256:a949eee43d3782f2daae4f4a2819b2cb9b0c5d3b7f7a927067cc84dafdbb9f88", size = 7844556, upload-time = "2026-01-03T17:33:05.204Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/36/5b6514a9f5d66f4e2597e40dea2e3db271e023eb7a5d22defe96ba560996/aiohttp-3.13.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:ea37047c6b367fd4bd632bff8077449b8fa034b69e812a18e0132a00fae6e808", size = 737238, upload-time = "2026-01-03T17:31:17.909Z" }, + { url = "https://files.pythonhosted.org/packages/f7/49/459327f0d5bcd8c6c9ca69e60fdeebc3622861e696490d8674a6d0cb90a6/aiohttp-3.13.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:6fc0e2337d1a4c3e6acafda6a78a39d4c14caea625124817420abceed36e2415", size = 492292, upload-time = "2026-01-03T17:31:19.919Z" }, + { url = "https://files.pythonhosted.org/packages/e8/0b/b97660c5fd05d3495b4eb27f2d0ef18dc1dc4eff7511a9bf371397ff0264/aiohttp-3.13.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c685f2d80bb67ca8c3837823ad76196b3694b0159d232206d1e461d3d434666f", size = 493021, upload-time = "2026-01-03T17:31:21.636Z" }, + { url = "https://files.pythonhosted.org/packages/54/d4/438efabdf74e30aeceb890c3290bbaa449780583b1270b00661126b8aae4/aiohttp-3.13.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48e377758516d262bde50c2584fc6c578af272559c409eecbdd2bae1601184d6", size = 1717263, upload-time = "2026-01-03T17:31:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/71/f2/7bddc7fd612367d1459c5bcf598a9e8f7092d6580d98de0e057eb42697ad/aiohttp-3.13.3-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:34749271508078b261c4abb1767d42b8d0c0cc9449c73a4df494777dc55f0687", size = 1669107, upload-time = "2026-01-03T17:31:25.334Z" }, + { url = "https://files.pythonhosted.org/packages/00/5a/1aeaecca40e22560f97610a329e0e5efef5e0b5afdf9f857f0d93839ab2e/aiohttp-3.13.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:82611aeec80eb144416956ec85b6ca45a64d76429c1ed46ae1b5f86c6e0c9a26", size = 1760196, upload-time = "2026-01-03T17:31:27.394Z" }, + { url = "https://files.pythonhosted.org/packages/f8/f8/0ff6992bea7bd560fc510ea1c815f87eedd745fe035589c71ce05612a19a/aiohttp-3.13.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2fff83cfc93f18f215896e3a190e8e5cb413ce01553901aca925176e7568963a", size = 1843591, upload-time = "2026-01-03T17:31:29.238Z" }, + { url = "https://files.pythonhosted.org/packages/e3/d1/e30e537a15f53485b61f5be525f2157da719819e8377298502aebac45536/aiohttp-3.13.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bbe7d4cecacb439e2e2a8a1a7b935c25b812af7a5fd26503a66dadf428e79ec1", size = 1720277, upload-time = "2026-01-03T17:31:31.053Z" }, + { url = "https://files.pythonhosted.org/packages/84/45/23f4c451d8192f553d38d838831ebbc156907ea6e05557f39563101b7717/aiohttp-3.13.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b928f30fe49574253644b1ca44b1b8adbd903aa0da4b9054a6c20fc7f4092a25", size = 1548575, upload-time = "2026-01-03T17:31:32.87Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ed/0a42b127a43712eda7807e7892c083eadfaf8429ca8fb619662a530a3aab/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7b5e8fe4de30df199155baaf64f2fcd604f4c678ed20910db8e2c66dc4b11603", size = 1679455, upload-time = "2026-01-03T17:31:34.76Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b5/c05f0c2b4b4fe2c9d55e73b6d3ed4fd6c9dc2684b1d81cbdf77e7fad9adb/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:8542f41a62bcc58fc7f11cf7c90e0ec324ce44950003feb70640fc2a9092c32a", size = 1687417, upload-time = "2026-01-03T17:31:36.699Z" }, + { url = "https://files.pythonhosted.org/packages/c9/6b/915bc5dad66aef602b9e459b5a973529304d4e89ca86999d9d75d80cbd0b/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:5e1d8c8b8f1d91cd08d8f4a3c2b067bfca6ec043d3ff36de0f3a715feeedf926", size = 1729968, upload-time = "2026-01-03T17:31:38.622Z" }, + { url = "https://files.pythonhosted.org/packages/11/3b/e84581290a9520024a08640b63d07673057aec5ca548177a82026187ba73/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:90455115e5da1c3c51ab619ac57f877da8fd6d73c05aacd125c5ae9819582aba", size = 1545690, upload-time = "2026-01-03T17:31:40.57Z" }, + { url = "https://files.pythonhosted.org/packages/f5/04/0c3655a566c43fd647c81b895dfe361b9f9ad6d58c19309d45cff52d6c3b/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:042e9e0bcb5fba81886c8b4fbb9a09d6b8a00245fd8d88e4d989c1f96c74164c", size = 1746390, upload-time = "2026-01-03T17:31:42.857Z" }, + { url = "https://files.pythonhosted.org/packages/1f/53/71165b26978f719c3419381514c9690bd5980e764a09440a10bb816ea4ab/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2eb752b102b12a76ca02dff751a801f028b4ffbbc478840b473597fc91a9ed43", size = 1702188, upload-time = "2026-01-03T17:31:44.984Z" }, + { url = "https://files.pythonhosted.org/packages/29/a7/cbe6c9e8e136314fa1980da388a59d2f35f35395948a08b6747baebb6aa6/aiohttp-3.13.3-cp314-cp314-win32.whl", hash = "sha256:b556c85915d8efaed322bf1bdae9486aa0f3f764195a0fb6ee962e5c71ef5ce1", size = 433126, upload-time = "2026-01-03T17:31:47.463Z" }, + { url = "https://files.pythonhosted.org/packages/de/56/982704adea7d3b16614fc5936014e9af85c0e34b58f9046655817f04306e/aiohttp-3.13.3-cp314-cp314-win_amd64.whl", hash = "sha256:9bf9f7a65e7aa20dd764151fb3d616c81088f91f8df39c3893a536e279b4b984", size = 459128, upload-time = "2026-01-03T17:31:49.2Z" }, + { url = "https://files.pythonhosted.org/packages/6c/2a/3c79b638a9c3d4658d345339d22070241ea341ed4e07b5ac60fb0f418003/aiohttp-3.13.3-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:05861afbbec40650d8a07ea324367cb93e9e8cc7762e04dd4405df99fa65159c", size = 769512, upload-time = "2026-01-03T17:31:51.134Z" }, + { url = "https://files.pythonhosted.org/packages/29/b9/3e5014d46c0ab0db8707e0ac2711ed28c4da0218c358a4e7c17bae0d8722/aiohttp-3.13.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2fc82186fadc4a8316768d61f3722c230e2c1dcab4200d52d2ebdf2482e47592", size = 506444, upload-time = "2026-01-03T17:31:52.85Z" }, + { url = "https://files.pythonhosted.org/packages/90/03/c1d4ef9a054e151cd7839cdc497f2638f00b93cbe8043983986630d7a80c/aiohttp-3.13.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0add0900ff220d1d5c5ebbf99ed88b0c1bbf87aa7e4262300ed1376a6b13414f", size = 510798, upload-time = "2026-01-03T17:31:54.91Z" }, + { url = "https://files.pythonhosted.org/packages/ea/76/8c1e5abbfe8e127c893fe7ead569148a4d5a799f7cf958d8c09f3eedf097/aiohttp-3.13.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:568f416a4072fbfae453dcf9a99194bbb8bdeab718e08ee13dfa2ba0e4bebf29", size = 1868835, upload-time = "2026-01-03T17:31:56.733Z" }, + { url = "https://files.pythonhosted.org/packages/8e/ac/984c5a6f74c363b01ff97adc96a3976d9c98940b8969a1881575b279ac5d/aiohttp-3.13.3-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:add1da70de90a2569c5e15249ff76a631ccacfe198375eead4aadf3b8dc849dc", size = 1720486, upload-time = "2026-01-03T17:31:58.65Z" }, + { url = "https://files.pythonhosted.org/packages/b2/9a/b7039c5f099c4eb632138728828b33428585031a1e658d693d41d07d89d1/aiohttp-3.13.3-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:10b47b7ba335d2e9b1239fa571131a87e2d8ec96b333e68b2a305e7a98b0bae2", size = 1847951, upload-time = "2026-01-03T17:32:00.989Z" }, + { url = "https://files.pythonhosted.org/packages/3c/02/3bec2b9a1ba3c19ff89a43a19324202b8eb187ca1e928d8bdac9bbdddebd/aiohttp-3.13.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3dd4dce1c718e38081c8f35f323209d4c1df7d4db4bab1b5c88a6b4d12b74587", size = 1941001, upload-time = "2026-01-03T17:32:03.122Z" }, + { url = "https://files.pythonhosted.org/packages/37/df/d879401cedeef27ac4717f6426c8c36c3091c6e9f08a9178cc87549c537f/aiohttp-3.13.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34bac00a67a812570d4a460447e1e9e06fae622946955f939051e7cc895cfab8", size = 1797246, upload-time = "2026-01-03T17:32:05.255Z" }, + { url = "https://files.pythonhosted.org/packages/8d/15/be122de1f67e6953add23335c8ece6d314ab67c8bebb3f181063010795a7/aiohttp-3.13.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a19884d2ee70b06d9204b2727a7b9f983d0c684c650254679e716b0b77920632", size = 1627131, upload-time = "2026-01-03T17:32:07.607Z" }, + { url = "https://files.pythonhosted.org/packages/12/12/70eedcac9134cfa3219ab7af31ea56bc877395b1ac30d65b1bc4b27d0438/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5f8ca7f2bb6ba8348a3614c7918cc4bb73268c5ac2a207576b7afea19d3d9f64", size = 1795196, upload-time = "2026-01-03T17:32:09.59Z" }, + { url = "https://files.pythonhosted.org/packages/32/11/b30e1b1cd1f3054af86ebe60df96989c6a414dd87e27ad16950eee420bea/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:b0d95340658b9d2f11d9697f59b3814a9d3bb4b7a7c20b131df4bcef464037c0", size = 1782841, upload-time = "2026-01-03T17:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/88/0d/d98a9367b38912384a17e287850f5695c528cff0f14f791ce8ee2e4f7796/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:a1e53262fd202e4b40b70c3aff944a8155059beedc8a89bba9dc1f9ef06a1b56", size = 1795193, upload-time = "2026-01-03T17:32:13.705Z" }, + { url = "https://files.pythonhosted.org/packages/43/a5/a2dfd1f5ff5581632c7f6a30e1744deda03808974f94f6534241ef60c751/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:d60ac9663f44168038586cab2157e122e46bdef09e9368b37f2d82d354c23f72", size = 1621979, upload-time = "2026-01-03T17:32:15.965Z" }, + { url = "https://files.pythonhosted.org/packages/fa/f0/12973c382ae7c1cccbc4417e129c5bf54c374dfb85af70893646e1f0e749/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:90751b8eed69435bac9ff4e3d2f6b3af1f57e37ecb0fbeee59c0174c9e2d41df", size = 1822193, upload-time = "2026-01-03T17:32:18.219Z" }, + { url = "https://files.pythonhosted.org/packages/3c/5f/24155e30ba7f8c96918af1350eb0663e2430aad9e001c0489d89cd708ab1/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fc353029f176fd2b3ec6cfc71be166aba1936fe5d73dd1992ce289ca6647a9aa", size = 1769801, upload-time = "2026-01-03T17:32:20.25Z" }, + { url = "https://files.pythonhosted.org/packages/eb/f8/7314031ff5c10e6ece114da79b338ec17eeff3a079e53151f7e9f43c4723/aiohttp-3.13.3-cp314-cp314t-win32.whl", hash = "sha256:2e41b18a58da1e474a057b3d35248d8320029f61d70a37629535b16a0c8f3767", size = 466523, upload-time = "2026-01-03T17:32:22.215Z" }, + { url = "https://files.pythonhosted.org/packages/b4/63/278a98c715ae467624eafe375542d8ba9b4383a016df8fdefe0ae28382a7/aiohttp-3.13.3-cp314-cp314t-win_amd64.whl", hash = "sha256:44531a36aa2264a1860089ffd4dce7baf875ee5a6079d5fb42e261c704ef7344", size = 499694, upload-time = "2026-01-03T17:32:24.546Z" }, +] + +[[package]] +name = "aiosignal" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozenlist" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, +] + +[[package]] +name = "attrs" +version = "25.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/685e6633917e101e5dcb62b9dd76946cbb57c26e133bae9e0cd36033c0a9/attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11", size = 934251, upload-time = "2025-10-06T13:54:44.725Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, +] + +[[package]] +name = "audioop-lts" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/38/53/946db57842a50b2da2e0c1e34bd37f36f5aadba1a929a3971c5d7841dbca/audioop_lts-0.2.2.tar.gz", hash = "sha256:64d0c62d88e67b98a1a5e71987b7aa7b5bcffc7dcee65b635823dbdd0a8dbbd0", size = 30686, upload-time = "2025-08-05T16:43:17.409Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/d4/94d277ca941de5a507b07f0b592f199c22454eeaec8f008a286b3fbbacd6/audioop_lts-0.2.2-cp313-abi3-macosx_10_13_universal2.whl", hash = "sha256:fd3d4602dc64914d462924a08c1a9816435a2155d74f325853c1f1ac3b2d9800", size = 46523, upload-time = "2025-08-05T16:42:20.836Z" }, + { url = "https://files.pythonhosted.org/packages/f8/5a/656d1c2da4b555920ce4177167bfeb8623d98765594af59702c8873f60ec/audioop_lts-0.2.2-cp313-abi3-macosx_10_13_x86_64.whl", hash = "sha256:550c114a8df0aafe9a05442a1162dfc8fec37e9af1d625ae6060fed6e756f303", size = 27455, upload-time = "2025-08-05T16:42:22.283Z" }, + { url = "https://files.pythonhosted.org/packages/1b/83/ea581e364ce7b0d41456fb79d6ee0ad482beda61faf0cab20cbd4c63a541/audioop_lts-0.2.2-cp313-abi3-macosx_11_0_arm64.whl", hash = "sha256:9a13dc409f2564de15dd68be65b462ba0dde01b19663720c68c1140c782d1d75", size = 26997, upload-time = "2025-08-05T16:42:23.849Z" }, + { url = "https://files.pythonhosted.org/packages/b8/3b/e8964210b5e216e5041593b7d33e97ee65967f17c282e8510d19c666dab4/audioop_lts-0.2.2-cp313-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:51c916108c56aa6e426ce611946f901badac950ee2ddaf302b7ed35d9958970d", size = 85844, upload-time = "2025-08-05T16:42:25.208Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2e/0a1c52faf10d51def20531a59ce4c706cb7952323b11709e10de324d6493/audioop_lts-0.2.2-cp313-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:47eba38322370347b1c47024defbd36374a211e8dd5b0dcbce7b34fdb6f8847b", size = 85056, upload-time = "2025-08-05T16:42:26.559Z" }, + { url = "https://files.pythonhosted.org/packages/75/e8/cd95eef479656cb75ab05dfece8c1f8c395d17a7c651d88f8e6e291a63ab/audioop_lts-0.2.2-cp313-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba7c3a7e5f23e215cb271516197030c32aef2e754252c4c70a50aaff7031a2c8", size = 93892, upload-time = "2025-08-05T16:42:27.902Z" }, + { url = "https://files.pythonhosted.org/packages/5c/1e/a0c42570b74f83efa5cca34905b3eef03f7ab09fe5637015df538a7f3345/audioop_lts-0.2.2-cp313-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:def246fe9e180626731b26e89816e79aae2276f825420a07b4a647abaa84becc", size = 96660, upload-time = "2025-08-05T16:42:28.9Z" }, + { url = "https://files.pythonhosted.org/packages/50/d5/8a0ae607ca07dbb34027bac8db805498ee7bfecc05fd2c148cc1ed7646e7/audioop_lts-0.2.2-cp313-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e160bf9df356d841bb6c180eeeea1834085464626dc1b68fa4e1d59070affdc3", size = 79143, upload-time = "2025-08-05T16:42:29.929Z" }, + { url = "https://files.pythonhosted.org/packages/12/17/0d28c46179e7910bfb0bb62760ccb33edb5de973052cb2230b662c14ca2e/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4b4cd51a57b698b2d06cb9993b7ac8dfe89a3b2878e96bc7948e9f19ff51dba6", size = 84313, upload-time = "2025-08-05T16:42:30.949Z" }, + { url = "https://files.pythonhosted.org/packages/84/ba/bd5d3806641564f2024e97ca98ea8f8811d4e01d9b9f9831474bc9e14f9e/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4a53aa7c16a60a6857e6b0b165261436396ef7293f8b5c9c828a3a203147ed4a", size = 93044, upload-time = "2025-08-05T16:42:31.959Z" }, + { url = "https://files.pythonhosted.org/packages/f9/5e/435ce8d5642f1f7679540d1e73c1c42d933331c0976eb397d1717d7f01a3/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:3fc38008969796f0f689f1453722a0f463da1b8a6fbee11987830bfbb664f623", size = 78766, upload-time = "2025-08-05T16:42:33.302Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3b/b909e76b606cbfd53875693ec8c156e93e15a1366a012f0b7e4fb52d3c34/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_s390x.whl", hash = "sha256:15ab25dd3e620790f40e9ead897f91e79c0d3ce65fe193c8ed6c26cffdd24be7", size = 87640, upload-time = "2025-08-05T16:42:34.854Z" }, + { url = "https://files.pythonhosted.org/packages/30/e7/8f1603b4572d79b775f2140d7952f200f5e6c62904585d08a01f0a70393a/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:03f061a1915538fd96272bac9551841859dbb2e3bf73ebe4a23ef043766f5449", size = 86052, upload-time = "2025-08-05T16:42:35.839Z" }, + { url = "https://files.pythonhosted.org/packages/b5/96/c37846df657ccdda62ba1ae2b6534fa90e2e1b1742ca8dcf8ebd38c53801/audioop_lts-0.2.2-cp313-abi3-win32.whl", hash = "sha256:3bcddaaf6cc5935a300a8387c99f7a7fbbe212a11568ec6cf6e4bc458c048636", size = 26185, upload-time = "2025-08-05T16:42:37.04Z" }, + { url = "https://files.pythonhosted.org/packages/34/a5/9d78fdb5b844a83da8a71226c7bdae7cc638861085fff7a1d707cb4823fa/audioop_lts-0.2.2-cp313-abi3-win_amd64.whl", hash = "sha256:a2c2a947fae7d1062ef08c4e369e0ba2086049a5e598fda41122535557012e9e", size = 30503, upload-time = "2025-08-05T16:42:38.427Z" }, + { url = "https://files.pythonhosted.org/packages/34/25/20d8fde083123e90c61b51afb547bb0ea7e77bab50d98c0ab243d02a0e43/audioop_lts-0.2.2-cp313-abi3-win_arm64.whl", hash = "sha256:5f93a5db13927a37d2d09637ccca4b2b6b48c19cd9eda7b17a2e9f77edee6a6f", size = 24173, upload-time = "2025-08-05T16:42:39.704Z" }, + { url = "https://files.pythonhosted.org/packages/5c/73/413b5a2804091e2c7d5def1d618e4837f1cb82464e230f827226278556b7/audioop_lts-0.2.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:f9ee9b52f5f857fbaf9d605a360884f034c92c1c23021fb90b2e39b8e64bede6", size = 47104, upload-time = "2025-08-05T16:42:58.518Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8c/daa3308dc6593944410c2c68306a5e217f5c05b70a12e70228e7dd42dc5c/audioop_lts-0.2.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:49ee1a41738a23e98d98b937a0638357a2477bc99e61b0f768a8f654f45d9b7a", size = 27754, upload-time = "2025-08-05T16:43:00.132Z" }, + { url = "https://files.pythonhosted.org/packages/4e/86/c2e0f627168fcf61781a8f72cab06b228fe1da4b9fa4ab39cfb791b5836b/audioop_lts-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5b00be98ccd0fc123dcfad31d50030d25fcf31488cde9e61692029cd7394733b", size = 27332, upload-time = "2025-08-05T16:43:01.666Z" }, + { url = "https://files.pythonhosted.org/packages/c7/bd/35dce665255434f54e5307de39e31912a6f902d4572da7c37582809de14f/audioop_lts-0.2.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6d2e0f9f7a69403e388894d4ca5ada5c47230716a03f2847cfc7bd1ecb589d6", size = 92396, upload-time = "2025-08-05T16:43:02.991Z" }, + { url = "https://files.pythonhosted.org/packages/2d/d2/deeb9f51def1437b3afa35aeb729d577c04bcd89394cb56f9239a9f50b6f/audioop_lts-0.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9b0b8a03ef474f56d1a842af1a2e01398b8f7654009823c6d9e0ecff4d5cfbf", size = 91811, upload-time = "2025-08-05T16:43:04.096Z" }, + { url = "https://files.pythonhosted.org/packages/76/3b/09f8b35b227cee28cc8231e296a82759ed80c1a08e349811d69773c48426/audioop_lts-0.2.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2b267b70747d82125f1a021506565bdc5609a2b24bcb4773c16d79d2bb260bbd", size = 100483, upload-time = "2025-08-05T16:43:05.085Z" }, + { url = "https://files.pythonhosted.org/packages/0b/15/05b48a935cf3b130c248bfdbdea71ce6437f5394ee8533e0edd7cfd93d5e/audioop_lts-0.2.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0337d658f9b81f4cd0fdb1f47635070cc084871a3d4646d9de74fdf4e7c3d24a", size = 103885, upload-time = "2025-08-05T16:43:06.197Z" }, + { url = "https://files.pythonhosted.org/packages/83/80/186b7fce6d35b68d3d739f228dc31d60b3412105854edb975aa155a58339/audioop_lts-0.2.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:167d3b62586faef8b6b2275c3218796b12621a60e43f7e9d5845d627b9c9b80e", size = 84899, upload-time = "2025-08-05T16:43:07.291Z" }, + { url = "https://files.pythonhosted.org/packages/49/89/c78cc5ac6cb5828f17514fb12966e299c850bc885e80f8ad94e38d450886/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0d9385e96f9f6da847f4d571ce3cb15b5091140edf3db97276872647ce37efd7", size = 89998, upload-time = "2025-08-05T16:43:08.335Z" }, + { url = "https://files.pythonhosted.org/packages/4c/4b/6401888d0c010e586c2ca50fce4c903d70a6bb55928b16cfbdfd957a13da/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:48159d96962674eccdca9a3df280e864e8ac75e40a577cc97c5c42667ffabfc5", size = 99046, upload-time = "2025-08-05T16:43:09.367Z" }, + { url = "https://files.pythonhosted.org/packages/de/f8/c874ca9bb447dae0e2ef2e231f6c4c2b0c39e31ae684d2420b0f9e97ee68/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:8fefe5868cd082db1186f2837d64cfbfa78b548ea0d0543e9b28935ccce81ce9", size = 84843, upload-time = "2025-08-05T16:43:10.749Z" }, + { url = "https://files.pythonhosted.org/packages/3e/c0/0323e66f3daebc13fd46b36b30c3be47e3fc4257eae44f1e77eb828c703f/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:58cf54380c3884fb49fdd37dfb7a772632b6701d28edd3e2904743c5e1773602", size = 94490, upload-time = "2025-08-05T16:43:12.131Z" }, + { url = "https://files.pythonhosted.org/packages/98/6b/acc7734ac02d95ab791c10c3f17ffa3584ccb9ac5c18fd771c638ed6d1f5/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:088327f00488cdeed296edd9215ca159f3a5a5034741465789cad403fcf4bec0", size = 92297, upload-time = "2025-08-05T16:43:13.139Z" }, + { url = "https://files.pythonhosted.org/packages/13/c3/c3dc3f564ce6877ecd2a05f8d751b9b27a8c320c2533a98b0c86349778d0/audioop_lts-0.2.2-cp314-cp314t-win32.whl", hash = "sha256:068aa17a38b4e0e7de771c62c60bbca2455924b67a8814f3b0dee92b5820c0b3", size = 27331, upload-time = "2025-08-05T16:43:14.19Z" }, + { url = "https://files.pythonhosted.org/packages/72/bb/b4608537e9ffcb86449091939d52d24a055216a36a8bf66b936af8c3e7ac/audioop_lts-0.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:a5bf613e96f49712073de86f20dbdd4014ca18efd4d34ed18c75bd808337851b", size = 31697, upload-time = "2025-08-05T16:43:15.193Z" }, + { url = "https://files.pythonhosted.org/packages/f6/22/91616fe707a5c5510de2cac9b046a30defe7007ba8a0c04f9c08f27df312/audioop_lts-0.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:b492c3b040153e68b9fdaff5913305aaaba5bb433d8a7f73d5cf6a64ed3cc1dd", size = 25206, upload-time = "2025-08-05T16:43:16.444Z" }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.14.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c3/b0/1c6a16426d389813b48d95e26898aff79abbde42ad353958ad95cc8c9b21/beautifulsoup4-4.14.3.tar.gz", hash = "sha256:6292b1c5186d356bba669ef9f7f051757099565ad9ada5dd630bd9de5fa7fb86", size = 627737, upload-time = "2025-11-30T15:08:26.084Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl", hash = "sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb", size = 107721, upload-time = "2025-11-30T15:08:24.087Z" }, +] + +[[package]] +name = "bitsatards-bot" +version = "2.5.0" +source = { virtual = "." } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "discord-py" }, + { name = "lxml" }, + { name = "matplotlib" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "psycopg2-binary" }, + { name = "pytest" }, + { name = "pytest-mock" }, + { name = "python-dotenv" }, + { name = "requests" }, + { name = "ruff" }, + { name = "scikit-learn" }, + { name = "seaborn" }, + { name = "sqlalchemy" }, +] + +[package.metadata] +requires-dist = [ + { name = "beautifulsoup4", specifier = ">=4.14.3" }, + { name = "discord-py", specifier = ">=2.6.4" }, + { name = "lxml", specifier = ">=6.0.2" }, + { name = "matplotlib", specifier = ">=3.10.8" }, + { name = "numpy", specifier = ">=2.4.2" }, + { name = "pandas", specifier = ">=3.0.0" }, + { name = "psycopg2-binary", specifier = ">=2.9.11" }, + { name = "pytest", specifier = ">=9.0.2" }, + { name = "pytest-mock", specifier = ">=3.15.1" }, + { name = "python-dotenv", specifier = ">=1.2.1" }, + { name = "requests", specifier = ">=2.32.5" }, + { name = "ruff", specifier = ">=0.14.14" }, + { name = "scikit-learn", specifier = ">=1.8.0" }, + { name = "seaborn", specifier = ">=0.13.2" }, + { name = "sqlalchemy", specifier = ">=2.0.46" }, +] + +[[package]] +name = "certifi" +version = "2026.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/2d/a891ca51311197f6ad14a7ef42e2399f36cf2f9bd44752b3dc4eab60fdc5/certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120", size = 154268, upload-time = "2026-01-04T02:42:41.825Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c", size = 152900, upload-time = "2026-01-04T02:42:40.15Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd", size = 207746, upload-time = "2025-10-14T04:41:33.773Z" }, + { url = "https://files.pythonhosted.org/packages/10/9a/97c8d48ef10d6cd4fcead2415523221624bf58bcf68a802721a6bc807c8f/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb", size = 147889, upload-time = "2025-10-14T04:41:34.897Z" }, + { url = "https://files.pythonhosted.org/packages/10/bf/979224a919a1b606c82bd2c5fa49b5c6d5727aa47b4312bb27b1734f53cd/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e", size = 143641, upload-time = "2025-10-14T04:41:36.116Z" }, + { url = "https://files.pythonhosted.org/packages/ba/33/0ad65587441fc730dc7bd90e9716b30b4702dc7b617e6ba4997dc8651495/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14", size = 160779, upload-time = "2025-10-14T04:41:37.229Z" }, + { url = "https://files.pythonhosted.org/packages/67/ed/331d6b249259ee71ddea93f6f2f0a56cfebd46938bde6fcc6f7b9a3d0e09/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191", size = 159035, upload-time = "2025-10-14T04:41:38.368Z" }, + { url = "https://files.pythonhosted.org/packages/67/ff/f6b948ca32e4f2a4576aa129d8bed61f2e0543bf9f5f2b7fc3758ed005c9/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838", size = 152542, upload-time = "2025-10-14T04:41:39.862Z" }, + { url = "https://files.pythonhosted.org/packages/16/85/276033dcbcc369eb176594de22728541a925b2632f9716428c851b149e83/charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6", size = 149524, upload-time = "2025-10-14T04:41:41.319Z" }, + { url = "https://files.pythonhosted.org/packages/9e/f2/6a2a1f722b6aba37050e626530a46a68f74e63683947a8acff92569f979a/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e", size = 150395, upload-time = "2025-10-14T04:41:42.539Z" }, + { url = "https://files.pythonhosted.org/packages/60/bb/2186cb2f2bbaea6338cad15ce23a67f9b0672929744381e28b0592676824/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c", size = 143680, upload-time = "2025-10-14T04:41:43.661Z" }, + { url = "https://files.pythonhosted.org/packages/7d/a5/bf6f13b772fbb2a90360eb620d52ed8f796f3c5caee8398c3b2eb7b1c60d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090", size = 162045, upload-time = "2025-10-14T04:41:44.821Z" }, + { url = "https://files.pythonhosted.org/packages/df/c5/d1be898bf0dc3ef9030c3825e5d3b83f2c528d207d246cbabe245966808d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152", size = 149687, upload-time = "2025-10-14T04:41:46.442Z" }, + { url = "https://files.pythonhosted.org/packages/a5/42/90c1f7b9341eef50c8a1cb3f098ac43b0508413f33affd762855f67a410e/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828", size = 160014, upload-time = "2025-10-14T04:41:47.631Z" }, + { url = "https://files.pythonhosted.org/packages/76/be/4d3ee471e8145d12795ab655ece37baed0929462a86e72372fd25859047c/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec", size = 154044, upload-time = "2025-10-14T04:41:48.81Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6f/8f7af07237c34a1defe7defc565a9bc1807762f672c0fde711a4b22bf9c0/charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", size = 99940, upload-time = "2025-10-14T04:41:49.946Z" }, + { url = "https://files.pythonhosted.org/packages/4b/51/8ade005e5ca5b0d80fb4aff72a3775b325bdc3d27408c8113811a7cbe640/charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", size = 107104, upload-time = "2025-10-14T04:41:51.051Z" }, + { url = "https://files.pythonhosted.org/packages/da/5f/6b8f83a55bb8278772c5ae54a577f3099025f9ade59d0136ac24a0df4bde/charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", size = 100743, upload-time = "2025-10-14T04:41:52.122Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "contourpy" +version = "1.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/8b/4546f3ab60f78c514ffb7d01a0bd743f90de36f0019d1be84d0a708a580a/contourpy-1.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fde6c716d51c04b1c25d0b90364d0be954624a0ee9d60e23e850e8d48353d07a", size = 292189, upload-time = "2025-07-26T12:02:16.095Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77", size = 273251, upload-time = "2025-07-26T12:02:17.524Z" }, + { url = "https://files.pythonhosted.org/packages/b1/71/f93e1e9471d189f79d0ce2497007731c1e6bf9ef6d1d61b911430c3db4e5/contourpy-1.3.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5", size = 335810, upload-time = "2025-07-26T12:02:18.9Z" }, + { url = "https://files.pythonhosted.org/packages/91/f9/e35f4c1c93f9275d4e38681a80506b5510e9327350c51f8d4a5a724d178c/contourpy-1.3.3-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4", size = 382871, upload-time = "2025-07-26T12:02:20.418Z" }, + { url = "https://files.pythonhosted.org/packages/b5/71/47b512f936f66a0a900d81c396a7e60d73419868fba959c61efed7a8ab46/contourpy-1.3.3-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36", size = 386264, upload-time = "2025-07-26T12:02:21.916Z" }, + { url = "https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3", size = 363819, upload-time = "2025-07-26T12:02:23.759Z" }, + { url = "https://files.pythonhosted.org/packages/3e/a6/0b185d4cc480ee494945cde102cb0149ae830b5fa17bf855b95f2e70ad13/contourpy-1.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b", size = 1333650, upload-time = "2025-07-26T12:02:26.181Z" }, + { url = "https://files.pythonhosted.org/packages/43/d7/afdc95580ca56f30fbcd3060250f66cedbde69b4547028863abd8aa3b47e/contourpy-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36", size = 1404833, upload-time = "2025-07-26T12:02:28.782Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e2/366af18a6d386f41132a48f033cbd2102e9b0cf6345d35ff0826cd984566/contourpy-1.3.3-cp314-cp314-win32.whl", hash = "sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d", size = 189692, upload-time = "2025-07-26T12:02:30.128Z" }, + { url = "https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd", size = 232424, upload-time = "2025-07-26T12:02:31.395Z" }, + { url = "https://files.pythonhosted.org/packages/18/79/a9416650df9b525737ab521aa181ccc42d56016d2123ddcb7b58e926a42c/contourpy-1.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339", size = 198300, upload-time = "2025-07-26T12:02:32.956Z" }, + { url = "https://files.pythonhosted.org/packages/1f/42/38c159a7d0f2b7b9c04c64ab317042bb6952b713ba875c1681529a2932fe/contourpy-1.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:33c82d0138c0a062380332c861387650c82e4cf1747aaa6938b9b6516762e772", size = 306769, upload-time = "2025-07-26T12:02:34.2Z" }, + { url = "https://files.pythonhosted.org/packages/c3/6c/26a8205f24bca10974e77460de68d3d7c63e282e23782f1239f226fcae6f/contourpy-1.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ea37e7b45949df430fe649e5de8351c423430046a2af20b1c1961cae3afcda77", size = 287892, upload-time = "2025-07-26T12:02:35.807Z" }, + { url = "https://files.pythonhosted.org/packages/66/06/8a475c8ab718ebfd7925661747dbb3c3ee9c82ac834ccb3570be49d129f4/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13", size = 326748, upload-time = "2025-07-26T12:02:37.193Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a3/c5ca9f010a44c223f098fccd8b158bb1cb287378a31ac141f04730dc49be/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe", size = 375554, upload-time = "2025-07-26T12:02:38.894Z" }, + { url = "https://files.pythonhosted.org/packages/80/5b/68bd33ae63fac658a4145088c1e894405e07584a316738710b636c6d0333/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f", size = 388118, upload-time = "2025-07-26T12:02:40.642Z" }, + { url = "https://files.pythonhosted.org/packages/40/52/4c285a6435940ae25d7410a6c36bda5145839bc3f0beb20c707cda18b9d2/contourpy-1.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0", size = 352555, upload-time = "2025-07-26T12:02:42.25Z" }, + { url = "https://files.pythonhosted.org/packages/24/ee/3e81e1dd174f5c7fefe50e85d0892de05ca4e26ef1c9a59c2a57e43b865a/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4", size = 1322295, upload-time = "2025-07-26T12:02:44.668Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b2/6d913d4d04e14379de429057cd169e5e00f6c2af3bb13e1710bcbdb5da12/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f", size = 1391027, upload-time = "2025-07-26T12:02:47.09Z" }, + { url = "https://files.pythonhosted.org/packages/93/8a/68a4ec5c55a2971213d29a9374913f7e9f18581945a7a31d1a39b5d2dfe5/contourpy-1.3.3-cp314-cp314t-win32.whl", hash = "sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae", size = 202428, upload-time = "2025-07-26T12:02:48.691Z" }, + { url = "https://files.pythonhosted.org/packages/fa/96/fd9f641ffedc4fa3ace923af73b9d07e869496c9cc7a459103e6e978992f/contourpy-1.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc", size = 250331, upload-time = "2025-07-26T12:02:50.137Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8c/469afb6465b853afff216f9528ffda78a915ff880ed58813ba4faf4ba0b6/contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b", size = 203831, upload-time = "2025-07-26T12:02:51.449Z" }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, +] + +[[package]] +name = "discord-py" +version = "2.6.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "audioop-lts" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ce/e7/9b1dbb9b2fc07616132a526c05af23cfd420381793968a189ee08e12e35f/discord_py-2.6.4.tar.gz", hash = "sha256:44384920bae9b7a073df64ae9b14c8cf85f9274b5ad5d1d07bd5a67539de2da9", size = 1092623, upload-time = "2025-10-08T21:45:43.593Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/ae/3d3a89b06f005dc5fa8618528dde519b3ba7775c365750f7932b9831ef05/discord_py-2.6.4-py3-none-any.whl", hash = "sha256:2783b7fb7f8affa26847bfc025144652c294e8fe6e0f8877c67ed895749eb227", size = 1209284, upload-time = "2025-10-08T21:45:41.679Z" }, +] + +[[package]] +name = "fonttools" +version = "4.61.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/ca/cf17b88a8df95691275a3d77dc0a5ad9907f328ae53acbe6795da1b2f5ed/fonttools-4.61.1.tar.gz", hash = "sha256:6675329885c44657f826ef01d9e4fb33b9158e9d93c537d84ad8399539bc6f69", size = 3565756, upload-time = "2025-12-12T17:31:24.246Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/8f/4e7bf82c0cbb738d3c2206c920ca34ca74ef9dabde779030145d28665104/fonttools-4.61.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fff4f534200a04b4a36e7ae3cb74493afe807b517a09e99cb4faa89a34ed6ecd", size = 2846094, upload-time = "2025-12-12T17:30:43.511Z" }, + { url = "https://files.pythonhosted.org/packages/71/09/d44e45d0a4f3a651f23a1e9d42de43bc643cce2971b19e784cc67d823676/fonttools-4.61.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d9203500f7c63545b4ce3799319fe4d9feb1a1b89b28d3cb5abd11b9dd64147e", size = 2396589, upload-time = "2025-12-12T17:30:45.681Z" }, + { url = "https://files.pythonhosted.org/packages/89/18/58c64cafcf8eb677a99ef593121f719e6dcbdb7d1c594ae5a10d4997ca8a/fonttools-4.61.1-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fa646ecec9528bef693415c79a86e733c70a4965dd938e9a226b0fc64c9d2e6c", size = 4877892, upload-time = "2025-12-12T17:30:47.709Z" }, + { url = "https://files.pythonhosted.org/packages/8a/ec/9e6b38c7ba1e09eb51db849d5450f4c05b7e78481f662c3b79dbde6f3d04/fonttools-4.61.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:11f35ad7805edba3aac1a3710d104592df59f4b957e30108ae0ba6c10b11dd75", size = 4972884, upload-time = "2025-12-12T17:30:49.656Z" }, + { url = "https://files.pythonhosted.org/packages/5e/87/b5339da8e0256734ba0dbbf5b6cdebb1dd79b01dc8c270989b7bcd465541/fonttools-4.61.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b931ae8f62db78861b0ff1ac017851764602288575d65b8e8ff1963fed419063", size = 4924405, upload-time = "2025-12-12T17:30:51.735Z" }, + { url = "https://files.pythonhosted.org/packages/0b/47/e3409f1e1e69c073a3a6fd8cb886eb18c0bae0ee13db2c8d5e7f8495e8b7/fonttools-4.61.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b148b56f5de675ee16d45e769e69f87623a4944f7443850bf9a9376e628a89d2", size = 5035553, upload-time = "2025-12-12T17:30:54.823Z" }, + { url = "https://files.pythonhosted.org/packages/bf/b6/1f6600161b1073a984294c6c031e1a56ebf95b6164249eecf30012bb2e38/fonttools-4.61.1-cp314-cp314-win32.whl", hash = "sha256:9b666a475a65f4e839d3d10473fad6d47e0a9db14a2f4a224029c5bfde58ad2c", size = 2271915, upload-time = "2025-12-12T17:30:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/52/7b/91e7b01e37cc8eb0e1f770d08305b3655e4f002fc160fb82b3390eabacf5/fonttools-4.61.1-cp314-cp314-win_amd64.whl", hash = "sha256:4f5686e1fe5fce75d82d93c47a438a25bf0d1319d2843a926f741140b2b16e0c", size = 2323487, upload-time = "2025-12-12T17:30:59.804Z" }, + { url = "https://files.pythonhosted.org/packages/39/5c/908ad78e46c61c3e3ed70c3b58ff82ab48437faf84ec84f109592cabbd9f/fonttools-4.61.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:e76ce097e3c57c4bcb67c5aa24a0ecdbd9f74ea9219997a707a4061fbe2707aa", size = 2929571, upload-time = "2025-12-12T17:31:02.574Z" }, + { url = "https://files.pythonhosted.org/packages/bd/41/975804132c6dea64cdbfbaa59f3518a21c137a10cccf962805b301ac6ab2/fonttools-4.61.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9cfef3ab326780c04d6646f68d4b4742aae222e8b8ea1d627c74e38afcbc9d91", size = 2435317, upload-time = "2025-12-12T17:31:04.974Z" }, + { url = "https://files.pythonhosted.org/packages/b0/5a/aef2a0a8daf1ebaae4cfd83f84186d4a72ee08fd6a8451289fcd03ffa8a4/fonttools-4.61.1-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a75c301f96db737e1c5ed5fd7d77d9c34466de16095a266509e13da09751bd19", size = 4882124, upload-time = "2025-12-12T17:31:07.456Z" }, + { url = "https://files.pythonhosted.org/packages/80/33/d6db3485b645b81cea538c9d1c9219d5805f0877fda18777add4671c5240/fonttools-4.61.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:91669ccac46bbc1d09e9273546181919064e8df73488ea087dcac3e2968df9ba", size = 5100391, upload-time = "2025-12-12T17:31:09.732Z" }, + { url = "https://files.pythonhosted.org/packages/6c/d6/675ba631454043c75fcf76f0ca5463eac8eb0666ea1d7badae5fea001155/fonttools-4.61.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c33ab3ca9d3ccd581d58e989d67554e42d8d4ded94ab3ade3508455fe70e65f7", size = 4978800, upload-time = "2025-12-12T17:31:11.681Z" }, + { url = "https://files.pythonhosted.org/packages/7f/33/d3ec753d547a8d2bdaedd390d4a814e8d5b45a093d558f025c6b990b554c/fonttools-4.61.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:664c5a68ec406f6b1547946683008576ef8b38275608e1cee6c061828171c118", size = 5006426, upload-time = "2025-12-12T17:31:13.764Z" }, + { url = "https://files.pythonhosted.org/packages/b4/40/cc11f378b561a67bea850ab50063366a0d1dd3f6d0a30ce0f874b0ad5664/fonttools-4.61.1-cp314-cp314t-win32.whl", hash = "sha256:aed04cabe26f30c1647ef0e8fbb207516fd40fe9472e9439695f5c6998e60ac5", size = 2335377, upload-time = "2025-12-12T17:31:16.49Z" }, + { url = "https://files.pythonhosted.org/packages/e4/ff/c9a2b66b39f8628531ea58b320d66d951267c98c6a38684daa8f50fb02f8/fonttools-4.61.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2180f14c141d2f0f3da43f3a81bc8aa4684860f6b0e6f9e165a4831f24e6a23b", size = 2400613, upload-time = "2025-12-12T17:31:18.769Z" }, + { url = "https://files.pythonhosted.org/packages/c7/4e/ce75a57ff3aebf6fc1f4e9d508b8e5810618a33d900ad6c19eb30b290b97/fonttools-4.61.1-py3-none-any.whl", hash = "sha256:17d2bf5d541add43822bcf0c43d7d847b160c9bb01d15d5007d84e2217aaa371", size = 1148996, upload-time = "2025-12-12T17:31:21.03Z" }, +] + +[[package]] +name = "frozenlist" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/c8/85da824b7e7b9b6e7f7705b2ecaf9591ba6f79c1177f324c2735e41d36a2/frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0", size = 86127, upload-time = "2025-10-06T05:37:08.438Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e8/a1185e236ec66c20afd72399522f142c3724c785789255202d27ae992818/frozenlist-1.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f", size = 49698, upload-time = "2025-10-06T05:37:09.48Z" }, + { url = "https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c", size = 49749, upload-time = "2025-10-06T05:37:10.569Z" }, + { url = "https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2", size = 231298, upload-time = "2025-10-06T05:37:11.993Z" }, + { url = "https://files.pythonhosted.org/packages/3a/3b/d9b1e0b0eed36e70477ffb8360c49c85c8ca8ef9700a4e6711f39a6e8b45/frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8", size = 232015, upload-time = "2025-10-06T05:37:13.194Z" }, + { url = "https://files.pythonhosted.org/packages/dc/94/be719d2766c1138148564a3960fc2c06eb688da592bdc25adcf856101be7/frozenlist-1.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686", size = 225038, upload-time = "2025-10-06T05:37:14.577Z" }, + { url = "https://files.pythonhosted.org/packages/e4/09/6712b6c5465f083f52f50cf74167b92d4ea2f50e46a9eea0523d658454ae/frozenlist-1.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e", size = 240130, upload-time = "2025-10-06T05:37:15.781Z" }, + { url = "https://files.pythonhosted.org/packages/f8/d4/cd065cdcf21550b54f3ce6a22e143ac9e4836ca42a0de1022da8498eac89/frozenlist-1.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a", size = 242845, upload-time = "2025-10-06T05:37:17.037Z" }, + { url = "https://files.pythonhosted.org/packages/62/c3/f57a5c8c70cd1ead3d5d5f776f89d33110b1addae0ab010ad774d9a44fb9/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128", size = 229131, upload-time = "2025-10-06T05:37:18.221Z" }, + { url = "https://files.pythonhosted.org/packages/6c/52/232476fe9cb64f0742f3fde2b7d26c1dac18b6d62071c74d4ded55e0ef94/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f", size = 240542, upload-time = "2025-10-06T05:37:19.771Z" }, + { url = "https://files.pythonhosted.org/packages/5f/85/07bf3f5d0fb5414aee5f47d33c6f5c77bfe49aac680bfece33d4fdf6a246/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7", size = 237308, upload-time = "2025-10-06T05:37:20.969Z" }, + { url = "https://files.pythonhosted.org/packages/11/99/ae3a33d5befd41ac0ca2cc7fd3aa707c9c324de2e89db0e0f45db9a64c26/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30", size = 238210, upload-time = "2025-10-06T05:37:22.252Z" }, + { url = "https://files.pythonhosted.org/packages/b2/60/b1d2da22f4970e7a155f0adde9b1435712ece01b3cd45ba63702aea33938/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7", size = 231972, upload-time = "2025-10-06T05:37:23.5Z" }, + { url = "https://files.pythonhosted.org/packages/3f/ab/945b2f32de889993b9c9133216c068b7fcf257d8595a0ac420ac8677cab0/frozenlist-1.8.0-cp314-cp314-win32.whl", hash = "sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806", size = 40536, upload-time = "2025-10-06T05:37:25.581Z" }, + { url = "https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0", size = 44330, upload-time = "2025-10-06T05:37:26.928Z" }, + { url = "https://files.pythonhosted.org/packages/82/13/e6950121764f2676f43534c555249f57030150260aee9dcf7d64efda11dd/frozenlist-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b", size = 40627, upload-time = "2025-10-06T05:37:28.075Z" }, + { url = "https://files.pythonhosted.org/packages/c0/c7/43200656ecc4e02d3f8bc248df68256cd9572b3f0017f0a0c4e93440ae23/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d", size = 89238, upload-time = "2025-10-06T05:37:29.373Z" }, + { url = "https://files.pythonhosted.org/packages/d1/29/55c5f0689b9c0fb765055629f472c0de484dcaf0acee2f7707266ae3583c/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed", size = 50738, upload-time = "2025-10-06T05:37:30.792Z" }, + { url = "https://files.pythonhosted.org/packages/ba/7d/b7282a445956506fa11da8c2db7d276adcbf2b17d8bb8407a47685263f90/frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930", size = 51739, upload-time = "2025-10-06T05:37:32.127Z" }, + { url = "https://files.pythonhosted.org/packages/62/1c/3d8622e60d0b767a5510d1d3cf21065b9db874696a51ea6d7a43180a259c/frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c", size = 284186, upload-time = "2025-10-06T05:37:33.21Z" }, + { url = "https://files.pythonhosted.org/packages/2d/14/aa36d5f85a89679a85a1d44cd7a6657e0b1c75f61e7cad987b203d2daca8/frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24", size = 292196, upload-time = "2025-10-06T05:37:36.107Z" }, + { url = "https://files.pythonhosted.org/packages/05/23/6bde59eb55abd407d34f77d39a5126fb7b4f109a3f611d3929f14b700c66/frozenlist-1.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37", size = 273830, upload-time = "2025-10-06T05:37:37.663Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3f/22cff331bfad7a8afa616289000ba793347fcd7bc275f3b28ecea2a27909/frozenlist-1.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a", size = 294289, upload-time = "2025-10-06T05:37:39.261Z" }, + { url = "https://files.pythonhosted.org/packages/a4/89/5b057c799de4838b6c69aa82b79705f2027615e01be996d2486a69ca99c4/frozenlist-1.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2", size = 300318, upload-time = "2025-10-06T05:37:43.213Z" }, + { url = "https://files.pythonhosted.org/packages/30/de/2c22ab3eb2a8af6d69dc799e48455813bab3690c760de58e1bf43b36da3e/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef", size = 282814, upload-time = "2025-10-06T05:37:45.337Z" }, + { url = "https://files.pythonhosted.org/packages/59/f7/970141a6a8dbd7f556d94977858cfb36fa9b66e0892c6dd780d2219d8cd8/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe", size = 291762, upload-time = "2025-10-06T05:37:46.657Z" }, + { url = "https://files.pythonhosted.org/packages/c1/15/ca1adae83a719f82df9116d66f5bb28bb95557b3951903d39135620ef157/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8", size = 289470, upload-time = "2025-10-06T05:37:47.946Z" }, + { url = "https://files.pythonhosted.org/packages/ac/83/dca6dc53bf657d371fbc88ddeb21b79891e747189c5de990b9dfff2ccba1/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a", size = 289042, upload-time = "2025-10-06T05:37:49.499Z" }, + { url = "https://files.pythonhosted.org/packages/96/52/abddd34ca99be142f354398700536c5bd315880ed0a213812bc491cff5e4/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e", size = 283148, upload-time = "2025-10-06T05:37:50.745Z" }, + { url = "https://files.pythonhosted.org/packages/af/d3/76bd4ed4317e7119c2b7f57c3f6934aba26d277acc6309f873341640e21f/frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df", size = 44676, upload-time = "2025-10-06T05:37:52.222Z" }, + { url = "https://files.pythonhosted.org/packages/89/76/c615883b7b521ead2944bb3480398cbb07e12b7b4e4d073d3752eb721558/frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd", size = 49451, upload-time = "2025-10-06T05:37:53.425Z" }, + { url = "https://files.pythonhosted.org/packages/e0/a3/5982da14e113d07b325230f95060e2169f5311b1017ea8af2a29b374c289/frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79", size = 42507, upload-time = "2025-10-06T05:37:54.513Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, +] + +[[package]] +name = "greenlet" +version = "3.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/99/1cd3411c56a410994669062bd73dd58270c00cc074cac15f385a1fd91f8a/greenlet-3.3.1.tar.gz", hash = "sha256:41848f3230b58c08bb43dee542e74a2a2e34d3c59dc3076cec9151aeeedcae98", size = 184690, upload-time = "2026-01-23T15:31:02.076Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/fb/011c7c717213182caf78084a9bea51c8590b0afda98001f69d9f853a495b/greenlet-3.3.1-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:bd59acd8529b372775cd0fcbc5f420ae20681c5b045ce25bd453ed8455ab99b5", size = 275737, upload-time = "2026-01-23T15:32:16.889Z" }, + { url = "https://files.pythonhosted.org/packages/41/2e/a3a417d620363fdbb08a48b1dd582956a46a61bf8fd27ee8164f9dfe87c2/greenlet-3.3.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b31c05dd84ef6871dd47120386aed35323c944d86c3d91a17c4b8d23df62f15b", size = 646422, upload-time = "2026-01-23T16:01:00.354Z" }, + { url = "https://files.pythonhosted.org/packages/b4/09/c6c4a0db47defafd2d6bab8ddfe47ad19963b4e30f5bed84d75328059f8c/greenlet-3.3.1-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:02925a0bfffc41e542c70aa14c7eda3593e4d7e274bfcccca1827e6c0875902e", size = 658219, upload-time = "2026-01-23T16:05:30.956Z" }, + { url = "https://files.pythonhosted.org/packages/80/38/9d42d60dffb04b45f03dbab9430898352dba277758640751dc5cc316c521/greenlet-3.3.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34a729e2e4e4ffe9ae2408d5ecaf12f944853f40ad724929b7585bca808a9d6f", size = 660237, upload-time = "2026-01-23T15:32:53.967Z" }, + { url = "https://files.pythonhosted.org/packages/96/61/373c30b7197f9e756e4c81ae90a8d55dc3598c17673f91f4d31c3c689c3f/greenlet-3.3.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:aec9ab04e82918e623415947921dea15851b152b822661cce3f8e4393c3df683", size = 1615261, upload-time = "2026-01-23T16:04:25.066Z" }, + { url = "https://files.pythonhosted.org/packages/fd/d3/ca534310343f5945316f9451e953dcd89b36fe7a19de652a1dc5a0eeef3f/greenlet-3.3.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:71c767cf281a80d02b6c1bdc41c9468e1f5a494fb11bc8688c360524e273d7b1", size = 1683719, upload-time = "2026-01-23T15:33:50.61Z" }, + { url = "https://files.pythonhosted.org/packages/52/cb/c21a3fd5d2c9c8b622e7bede6d6d00e00551a5ee474ea6d831b5f567a8b4/greenlet-3.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:96aff77af063b607f2489473484e39a0bbae730f2ea90c9e5606c9b73c44174a", size = 228125, upload-time = "2026-01-23T15:32:45.265Z" }, + { url = "https://files.pythonhosted.org/packages/6a/8e/8a2db6d11491837af1de64b8aff23707c6e85241be13c60ed399a72e2ef8/greenlet-3.3.1-cp314-cp314-win_arm64.whl", hash = "sha256:b066e8b50e28b503f604fa538adc764a638b38cf8e81e025011d26e8a627fa79", size = 227519, upload-time = "2026-01-23T15:31:47.284Z" }, + { url = "https://files.pythonhosted.org/packages/28/24/cbbec49bacdcc9ec652a81d3efef7b59f326697e7edf6ed775a5e08e54c2/greenlet-3.3.1-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:3e63252943c921b90abb035ebe9de832c436401d9c45f262d80e2d06cc659242", size = 282706, upload-time = "2026-01-23T15:33:05.525Z" }, + { url = "https://files.pythonhosted.org/packages/86/2e/4f2b9323c144c4fe8842a4e0d92121465485c3c2c5b9e9b30a52e80f523f/greenlet-3.3.1-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:76e39058e68eb125de10c92524573924e827927df5d3891fbc97bd55764a8774", size = 651209, upload-time = "2026-01-23T16:01:01.517Z" }, + { url = "https://files.pythonhosted.org/packages/d9/87/50ca60e515f5bb55a2fbc5f0c9b5b156de7d2fc51a0a69abc9d23914a237/greenlet-3.3.1-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c9f9d5e7a9310b7a2f416dd13d2e3fd8b42d803968ea580b7c0f322ccb389b97", size = 654300, upload-time = "2026-01-23T16:05:32.199Z" }, + { url = "https://files.pythonhosted.org/packages/1d/94/74310866dfa2b73dd08659a3d18762f83985ad3281901ba0ee9a815194fb/greenlet-3.3.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:92497c78adf3ac703b57f1e3813c2d874f27f71a178f9ea5887855da413cd6d2", size = 653842, upload-time = "2026-01-23T15:32:55.671Z" }, + { url = "https://files.pythonhosted.org/packages/97/43/8bf0ffa3d498eeee4c58c212a3905dd6146c01c8dc0b0a046481ca29b18c/greenlet-3.3.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ed6b402bc74d6557a705e197d47f9063733091ed6357b3de33619d8a8d93ac53", size = 1614917, upload-time = "2026-01-23T16:04:26.276Z" }, + { url = "https://files.pythonhosted.org/packages/89/90/a3be7a5f378fc6e84abe4dcfb2ba32b07786861172e502388b4c90000d1b/greenlet-3.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:59913f1e5ada20fde795ba906916aea25d442abcc0593fba7e26c92b7ad76249", size = 1676092, upload-time = "2026-01-23T15:33:52.176Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2b/98c7f93e6db9977aaee07eb1e51ca63bd5f779b900d362791d3252e60558/greenlet-3.3.1-cp314-cp314t-win_amd64.whl", hash = "sha256:301860987846c24cb8964bdec0e31a96ad4a2a801b41b4ef40963c1b44f33451", size = 233181, upload-time = "2026-01-23T15:33:00.29Z" }, +] + +[[package]] +name = "idna" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "joblib" +version = "1.5.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/41/f2/d34e8b3a08a9cc79a50b2208a93dce981fe615b64d5a4d4abee421d898df/joblib-1.5.3.tar.gz", hash = "sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3", size = 331603, upload-time = "2025-12-15T08:41:46.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl", hash = "sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713", size = 309071, upload-time = "2025-12-15T08:41:44.973Z" }, +] + +[[package]] +name = "kiwisolver" +version = "1.4.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5c/3c/85844f1b0feb11ee581ac23fe5fce65cd049a200c1446708cc1b7f922875/kiwisolver-1.4.9.tar.gz", hash = "sha256:c3b22c26c6fd6811b0ae8363b95ca8ce4ea3c202d3d0975b2914310ceb1bcc4d", size = 97564, upload-time = "2025-08-10T21:27:49.279Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/32/6cc0fbc9c54d06c2969faa9c1d29f5751a2e51809dd55c69055e62d9b426/kiwisolver-1.4.9-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:9928fe1eb816d11ae170885a74d074f57af3a0d65777ca47e9aeb854a1fba386", size = 123806, upload-time = "2025-08-10T21:27:01.537Z" }, + { url = "https://files.pythonhosted.org/packages/b2/dd/2bfb1d4a4823d92e8cbb420fe024b8d2167f72079b3bb941207c42570bdf/kiwisolver-1.4.9-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d0005b053977e7b43388ddec89fa567f43d4f6d5c2c0affe57de5ebf290dc552", size = 66605, upload-time = "2025-08-10T21:27:03.335Z" }, + { url = "https://files.pythonhosted.org/packages/f7/69/00aafdb4e4509c2ca6064646cba9cd4b37933898f426756adb2cb92ebbed/kiwisolver-1.4.9-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2635d352d67458b66fd0667c14cb1d4145e9560d503219034a18a87e971ce4f3", size = 64925, upload-time = "2025-08-10T21:27:04.339Z" }, + { url = "https://files.pythonhosted.org/packages/43/dc/51acc6791aa14e5cb6d8a2e28cefb0dc2886d8862795449d021334c0df20/kiwisolver-1.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:767c23ad1c58c9e827b649a9ab7809fd5fd9db266a9cf02b0e926ddc2c680d58", size = 1472414, upload-time = "2025-08-10T21:27:05.437Z" }, + { url = "https://files.pythonhosted.org/packages/3d/bb/93fa64a81db304ac8a246f834d5094fae4b13baf53c839d6bb6e81177129/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72d0eb9fba308b8311685c2268cf7d0a0639a6cd027d8128659f72bdd8a024b4", size = 1281272, upload-time = "2025-08-10T21:27:07.063Z" }, + { url = "https://files.pythonhosted.org/packages/70/e6/6df102916960fb8d05069d4bd92d6d9a8202d5a3e2444494e7cd50f65b7a/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f68e4f3eeca8fb22cc3d731f9715a13b652795ef657a13df1ad0c7dc0e9731df", size = 1298578, upload-time = "2025-08-10T21:27:08.452Z" }, + { url = "https://files.pythonhosted.org/packages/7c/47/e142aaa612f5343736b087864dbaebc53ea8831453fb47e7521fa8658f30/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d84cd4061ae292d8ac367b2c3fa3aad11cb8625a95d135fe93f286f914f3f5a6", size = 1345607, upload-time = "2025-08-10T21:27:10.125Z" }, + { url = "https://files.pythonhosted.org/packages/54/89/d641a746194a0f4d1a3670fb900d0dbaa786fb98341056814bc3f058fa52/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a60ea74330b91bd22a29638940d115df9dc00af5035a9a2a6ad9399ffb4ceca5", size = 2230150, upload-time = "2025-08-10T21:27:11.484Z" }, + { url = "https://files.pythonhosted.org/packages/aa/6b/5ee1207198febdf16ac11f78c5ae40861b809cbe0e6d2a8d5b0b3044b199/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ce6a3a4e106cf35c2d9c4fa17c05ce0b180db622736845d4315519397a77beaf", size = 2325979, upload-time = "2025-08-10T21:27:12.917Z" }, + { url = "https://files.pythonhosted.org/packages/fc/ff/b269eefd90f4ae14dcc74973d5a0f6d28d3b9bb1afd8c0340513afe6b39a/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:77937e5e2a38a7b48eef0585114fe7930346993a88060d0bf886086d2aa49ef5", size = 2491456, upload-time = "2025-08-10T21:27:14.353Z" }, + { url = "https://files.pythonhosted.org/packages/fc/d4/10303190bd4d30de547534601e259a4fbf014eed94aae3e5521129215086/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:24c175051354f4a28c5d6a31c93906dc653e2bf234e8a4bbfb964892078898ce", size = 2294621, upload-time = "2025-08-10T21:27:15.808Z" }, + { url = "https://files.pythonhosted.org/packages/28/e0/a9a90416fce5c0be25742729c2ea52105d62eda6c4be4d803c2a7be1fa50/kiwisolver-1.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:0763515d4df10edf6d06a3c19734e2566368980d21ebec439f33f9eb936c07b7", size = 75417, upload-time = "2025-08-10T21:27:17.436Z" }, + { url = "https://files.pythonhosted.org/packages/1f/10/6949958215b7a9a264299a7db195564e87900f709db9245e4ebdd3c70779/kiwisolver-1.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:0e4e2bf29574a6a7b7f6cb5fa69293b9f96c928949ac4a53ba3f525dffb87f9c", size = 66582, upload-time = "2025-08-10T21:27:18.436Z" }, + { url = "https://files.pythonhosted.org/packages/ec/79/60e53067903d3bc5469b369fe0dfc6b3482e2133e85dae9daa9527535991/kiwisolver-1.4.9-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d976bbb382b202f71c67f77b0ac11244021cfa3f7dfd9e562eefcea2df711548", size = 126514, upload-time = "2025-08-10T21:27:19.465Z" }, + { url = "https://files.pythonhosted.org/packages/25/d1/4843d3e8d46b072c12a38c97c57fab4608d36e13fe47d47ee96b4d61ba6f/kiwisolver-1.4.9-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2489e4e5d7ef9a1c300a5e0196e43d9c739f066ef23270607d45aba368b91f2d", size = 67905, upload-time = "2025-08-10T21:27:20.51Z" }, + { url = "https://files.pythonhosted.org/packages/8c/ae/29ffcbd239aea8b93108de1278271ae764dfc0d803a5693914975f200596/kiwisolver-1.4.9-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e2ea9f7ab7fbf18fffb1b5434ce7c69a07582f7acc7717720f1d69f3e806f90c", size = 66399, upload-time = "2025-08-10T21:27:21.496Z" }, + { url = "https://files.pythonhosted.org/packages/a1/ae/d7ba902aa604152c2ceba5d352d7b62106bedbccc8e95c3934d94472bfa3/kiwisolver-1.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b34e51affded8faee0dfdb705416153819d8ea9250bbbf7ea1b249bdeb5f1122", size = 1582197, upload-time = "2025-08-10T21:27:22.604Z" }, + { url = "https://files.pythonhosted.org/packages/f2/41/27c70d427eddb8bc7e4f16420a20fefc6f480312122a59a959fdfe0445ad/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8aacd3d4b33b772542b2e01beb50187536967b514b00003bdda7589722d2a64", size = 1390125, upload-time = "2025-08-10T21:27:24.036Z" }, + { url = "https://files.pythonhosted.org/packages/41/42/b3799a12bafc76d962ad69083f8b43b12bf4fe78b097b12e105d75c9b8f1/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7cf974dd4e35fa315563ac99d6287a1024e4dc2077b8a7d7cd3d2fb65d283134", size = 1402612, upload-time = "2025-08-10T21:27:25.773Z" }, + { url = "https://files.pythonhosted.org/packages/d2/b5/a210ea073ea1cfaca1bb5c55a62307d8252f531beb364e18aa1e0888b5a0/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:85bd218b5ecfbee8c8a82e121802dcb519a86044c9c3b2e4aef02fa05c6da370", size = 1453990, upload-time = "2025-08-10T21:27:27.089Z" }, + { url = "https://files.pythonhosted.org/packages/5f/ce/a829eb8c033e977d7ea03ed32fb3c1781b4fa0433fbadfff29e39c676f32/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0856e241c2d3df4efef7c04a1e46b1936b6120c9bcf36dd216e3acd84bc4fb21", size = 2331601, upload-time = "2025-08-10T21:27:29.343Z" }, + { url = "https://files.pythonhosted.org/packages/e0/4b/b5e97eb142eb9cd0072dacfcdcd31b1c66dc7352b0f7c7255d339c0edf00/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9af39d6551f97d31a4deebeac6f45b156f9755ddc59c07b402c148f5dbb6482a", size = 2422041, upload-time = "2025-08-10T21:27:30.754Z" }, + { url = "https://files.pythonhosted.org/packages/40/be/8eb4cd53e1b85ba4edc3a9321666f12b83113a178845593307a3e7891f44/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:bb4ae2b57fc1d8cbd1cf7b1d9913803681ffa903e7488012be5b76dedf49297f", size = 2594897, upload-time = "2025-08-10T21:27:32.803Z" }, + { url = "https://files.pythonhosted.org/packages/99/dd/841e9a66c4715477ea0abc78da039832fbb09dac5c35c58dc4c41a407b8a/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:aedff62918805fb62d43a4aa2ecd4482c380dc76cd31bd7c8878588a61bd0369", size = 2391835, upload-time = "2025-08-10T21:27:34.23Z" }, + { url = "https://files.pythonhosted.org/packages/0c/28/4b2e5c47a0da96896fdfdb006340ade064afa1e63675d01ea5ac222b6d52/kiwisolver-1.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:1fa333e8b2ce4d9660f2cda9c0e1b6bafcfb2457a9d259faa82289e73ec24891", size = 79988, upload-time = "2025-08-10T21:27:35.587Z" }, + { url = "https://files.pythonhosted.org/packages/80/be/3578e8afd18c88cdf9cb4cffde75a96d2be38c5a903f1ed0ceec061bd09e/kiwisolver-1.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:4a48a2ce79d65d363597ef7b567ce3d14d68783d2b2263d98db3d9477805ba32", size = 70260, upload-time = "2025-08-10T21:27:36.606Z" }, +] + +[[package]] +name = "lxml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/88/262177de60548e5a2bfc46ad28232c9e9cbde697bd94132aeb80364675cb/lxml-6.0.2.tar.gz", hash = "sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62", size = 4073426, upload-time = "2025-09-22T04:04:59.287Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/15/d4a377b385ab693ce97b472fe0c77c2b16ec79590e688b3ccc71fba19884/lxml-6.0.2-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:b0c732aa23de8f8aec23f4b580d1e52905ef468afb4abeafd3fec77042abb6fe", size = 8659801, upload-time = "2025-09-22T04:02:30.113Z" }, + { url = "https://files.pythonhosted.org/packages/c8/e8/c128e37589463668794d503afaeb003987373c5f94d667124ffd8078bbd9/lxml-6.0.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4468e3b83e10e0317a89a33d28f7aeba1caa4d1a6fd457d115dd4ffe90c5931d", size = 4659403, upload-time = "2025-09-22T04:02:32.119Z" }, + { url = "https://files.pythonhosted.org/packages/00/ce/74903904339decdf7da7847bb5741fc98a5451b42fc419a86c0c13d26fe2/lxml-6.0.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:abd44571493973bad4598a3be7e1d807ed45aa2adaf7ab92ab7c62609569b17d", size = 4966974, upload-time = "2025-09-22T04:02:34.155Z" }, + { url = "https://files.pythonhosted.org/packages/1f/d3/131dec79ce61c5567fecf82515bd9bc36395df42501b50f7f7f3bd065df0/lxml-6.0.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:370cd78d5855cfbffd57c422851f7d3864e6ae72d0da615fca4dad8c45d375a5", size = 5102953, upload-time = "2025-09-22T04:02:36.054Z" }, + { url = "https://files.pythonhosted.org/packages/3a/ea/a43ba9bb750d4ffdd885f2cd333572f5bb900cd2408b67fdda07e85978a0/lxml-6.0.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:901e3b4219fa04ef766885fb40fa516a71662a4c61b80c94d25336b4934b71c0", size = 5055054, upload-time = "2025-09-22T04:02:38.154Z" }, + { url = "https://files.pythonhosted.org/packages/60/23/6885b451636ae286c34628f70a7ed1fcc759f8d9ad382d132e1c8d3d9bfd/lxml-6.0.2-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:a4bf42d2e4cf52c28cc1812d62426b9503cdb0c87a6de81442626aa7d69707ba", size = 5352421, upload-time = "2025-09-22T04:02:40.413Z" }, + { url = "https://files.pythonhosted.org/packages/48/5b/fc2ddfc94ddbe3eebb8e9af6e3fd65e2feba4967f6a4e9683875c394c2d8/lxml-6.0.2-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2c7fdaa4d7c3d886a42534adec7cfac73860b89b4e5298752f60aa5984641a0", size = 5673684, upload-time = "2025-09-22T04:02:42.288Z" }, + { url = "https://files.pythonhosted.org/packages/29/9c/47293c58cc91769130fbf85531280e8cc7868f7fbb6d92f4670071b9cb3e/lxml-6.0.2-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:98a5e1660dc7de2200b00d53fa00bcd3c35a3608c305d45a7bbcaf29fa16e83d", size = 5252463, upload-time = "2025-09-22T04:02:44.165Z" }, + { url = "https://files.pythonhosted.org/packages/9b/da/ba6eceb830c762b48e711ded880d7e3e89fc6c7323e587c36540b6b23c6b/lxml-6.0.2-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:dc051506c30b609238d79eda75ee9cab3e520570ec8219844a72a46020901e37", size = 4698437, upload-time = "2025-09-22T04:02:46.524Z" }, + { url = "https://files.pythonhosted.org/packages/a5/24/7be3f82cb7990b89118d944b619e53c656c97dc89c28cfb143fdb7cd6f4d/lxml-6.0.2-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8799481bbdd212470d17513a54d568f44416db01250f49449647b5ab5b5dccb9", size = 5269890, upload-time = "2025-09-22T04:02:48.812Z" }, + { url = "https://files.pythonhosted.org/packages/1b/bd/dcfb9ea1e16c665efd7538fc5d5c34071276ce9220e234217682e7d2c4a5/lxml-6.0.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9261bb77c2dab42f3ecd9103951aeca2c40277701eb7e912c545c1b16e0e4917", size = 5097185, upload-time = "2025-09-22T04:02:50.746Z" }, + { url = "https://files.pythonhosted.org/packages/21/04/a60b0ff9314736316f28316b694bccbbabe100f8483ad83852d77fc7468e/lxml-6.0.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:65ac4a01aba353cfa6d5725b95d7aed6356ddc0a3cd734de00124d285b04b64f", size = 4745895, upload-time = "2025-09-22T04:02:52.968Z" }, + { url = "https://files.pythonhosted.org/packages/d6/bd/7d54bd1846e5a310d9c715921c5faa71cf5c0853372adf78aee70c8d7aa2/lxml-6.0.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:b22a07cbb82fea98f8a2fd814f3d1811ff9ed76d0fc6abc84eb21527596e7cc8", size = 5695246, upload-time = "2025-09-22T04:02:54.798Z" }, + { url = "https://files.pythonhosted.org/packages/fd/32/5643d6ab947bc371da21323acb2a6e603cedbe71cb4c99c8254289ab6f4e/lxml-6.0.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:d759cdd7f3e055d6bc8d9bec3ad905227b2e4c785dc16c372eb5b5e83123f48a", size = 5260797, upload-time = "2025-09-22T04:02:57.058Z" }, + { url = "https://files.pythonhosted.org/packages/33/da/34c1ec4cff1eea7d0b4cd44af8411806ed943141804ac9c5d565302afb78/lxml-6.0.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:945da35a48d193d27c188037a05fec5492937f66fb1958c24fc761fb9d40d43c", size = 5277404, upload-time = "2025-09-22T04:02:58.966Z" }, + { url = "https://files.pythonhosted.org/packages/82/57/4eca3e31e54dc89e2c3507e1cd411074a17565fa5ffc437c4ae0a00d439e/lxml-6.0.2-cp314-cp314-win32.whl", hash = "sha256:be3aaa60da67e6153eb15715cc2e19091af5dc75faef8b8a585aea372507384b", size = 3670072, upload-time = "2025-09-22T04:03:38.05Z" }, + { url = "https://files.pythonhosted.org/packages/e3/e0/c96cf13eccd20c9421ba910304dae0f619724dcf1702864fd59dd386404d/lxml-6.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:fa25afbadead523f7001caf0c2382afd272c315a033a7b06336da2637d92d6ed", size = 4080617, upload-time = "2025-09-22T04:03:39.835Z" }, + { url = "https://files.pythonhosted.org/packages/d5/5d/b3f03e22b3d38d6f188ef044900a9b29b2fe0aebb94625ce9fe244011d34/lxml-6.0.2-cp314-cp314-win_arm64.whl", hash = "sha256:063eccf89df5b24e361b123e257e437f9e9878f425ee9aae3144c77faf6da6d8", size = 3754930, upload-time = "2025-09-22T04:03:41.565Z" }, + { url = "https://files.pythonhosted.org/packages/5e/5c/42c2c4c03554580708fc738d13414801f340c04c3eff90d8d2d227145275/lxml-6.0.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6162a86d86893d63084faaf4ff937b3daea233e3682fb4474db07395794fa80d", size = 8910380, upload-time = "2025-09-22T04:03:01.645Z" }, + { url = "https://files.pythonhosted.org/packages/bf/4f/12df843e3e10d18d468a7557058f8d3733e8b6e12401f30b1ef29360740f/lxml-6.0.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:414aaa94e974e23a3e92e7ca5b97d10c0cf37b6481f50911032c69eeb3991bba", size = 4775632, upload-time = "2025-09-22T04:03:03.814Z" }, + { url = "https://files.pythonhosted.org/packages/e4/0c/9dc31e6c2d0d418483cbcb469d1f5a582a1cd00a1f4081953d44051f3c50/lxml-6.0.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48461bd21625458dd01e14e2c38dd0aea69addc3c4f960c30d9f59d7f93be601", size = 4975171, upload-time = "2025-09-22T04:03:05.651Z" }, + { url = "https://files.pythonhosted.org/packages/e7/2b/9b870c6ca24c841bdd887504808f0417aa9d8d564114689266f19ddf29c8/lxml-6.0.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:25fcc59afc57d527cfc78a58f40ab4c9b8fd096a9a3f964d2781ffb6eb33f4ed", size = 5110109, upload-time = "2025-09-22T04:03:07.452Z" }, + { url = "https://files.pythonhosted.org/packages/bf/0c/4f5f2a4dd319a178912751564471355d9019e220c20d7db3fb8307ed8582/lxml-6.0.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5179c60288204e6ddde3f774a93350177e08876eaf3ab78aa3a3649d43eb7d37", size = 5041061, upload-time = "2025-09-22T04:03:09.297Z" }, + { url = "https://files.pythonhosted.org/packages/12/64/554eed290365267671fe001a20d72d14f468ae4e6acef1e179b039436967/lxml-6.0.2-cp314-cp314t-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:967aab75434de148ec80597b75062d8123cadf2943fb4281f385141e18b21338", size = 5306233, upload-time = "2025-09-22T04:03:11.651Z" }, + { url = "https://files.pythonhosted.org/packages/7a/31/1d748aa275e71802ad9722df32a7a35034246b42c0ecdd8235412c3396ef/lxml-6.0.2-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d100fcc8930d697c6561156c6810ab4a508fb264c8b6779e6e61e2ed5e7558f9", size = 5604739, upload-time = "2025-09-22T04:03:13.592Z" }, + { url = "https://files.pythonhosted.org/packages/8f/41/2c11916bcac09ed561adccacceaedd2bf0e0b25b297ea92aab99fd03d0fa/lxml-6.0.2-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ca59e7e13e5981175b8b3e4ab84d7da57993eeff53c07764dcebda0d0e64ecd", size = 5225119, upload-time = "2025-09-22T04:03:15.408Z" }, + { url = "https://files.pythonhosted.org/packages/99/05/4e5c2873d8f17aa018e6afde417c80cc5d0c33be4854cce3ef5670c49367/lxml-6.0.2-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:957448ac63a42e2e49531b9d6c0fa449a1970dbc32467aaad46f11545be9af1d", size = 4633665, upload-time = "2025-09-22T04:03:17.262Z" }, + { url = "https://files.pythonhosted.org/packages/0f/c9/dcc2da1bebd6275cdc723b515f93edf548b82f36a5458cca3578bc899332/lxml-6.0.2-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b7fc49c37f1786284b12af63152fe1d0990722497e2d5817acfe7a877522f9a9", size = 5234997, upload-time = "2025-09-22T04:03:19.14Z" }, + { url = "https://files.pythonhosted.org/packages/9c/e2/5172e4e7468afca64a37b81dba152fc5d90e30f9c83c7c3213d6a02a5ce4/lxml-6.0.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e19e0643cc936a22e837f79d01a550678da8377d7d801a14487c10c34ee49c7e", size = 5090957, upload-time = "2025-09-22T04:03:21.436Z" }, + { url = "https://files.pythonhosted.org/packages/a5/b3/15461fd3e5cd4ddcb7938b87fc20b14ab113b92312fc97afe65cd7c85de1/lxml-6.0.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:1db01e5cf14345628e0cbe71067204db658e2fb8e51e7f33631f5f4735fefd8d", size = 4764372, upload-time = "2025-09-22T04:03:23.27Z" }, + { url = "https://files.pythonhosted.org/packages/05/33/f310b987c8bf9e61c4dd8e8035c416bd3230098f5e3cfa69fc4232de7059/lxml-6.0.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:875c6b5ab39ad5291588aed6925fac99d0097af0dd62f33c7b43736043d4a2ec", size = 5634653, upload-time = "2025-09-22T04:03:25.767Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/51c80e75e0bc9382158133bdcf4e339b5886c6ee2418b5199b3f1a61ed6d/lxml-6.0.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:cdcbed9ad19da81c480dfd6dd161886db6096083c9938ead313d94b30aadf272", size = 5233795, upload-time = "2025-09-22T04:03:27.62Z" }, + { url = "https://files.pythonhosted.org/packages/56/4d/4856e897df0d588789dd844dbed9d91782c4ef0b327f96ce53c807e13128/lxml-6.0.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:80dadc234ebc532e09be1975ff538d154a7fa61ea5031c03d25178855544728f", size = 5257023, upload-time = "2025-09-22T04:03:30.056Z" }, + { url = "https://files.pythonhosted.org/packages/0f/85/86766dfebfa87bea0ab78e9ff7a4b4b45225df4b4d3b8cc3c03c5cd68464/lxml-6.0.2-cp314-cp314t-win32.whl", hash = "sha256:da08e7bb297b04e893d91087df19638dc7a6bb858a954b0cc2b9f5053c922312", size = 3911420, upload-time = "2025-09-22T04:03:32.198Z" }, + { url = "https://files.pythonhosted.org/packages/fe/1a/b248b355834c8e32614650b8008c69ffeb0ceb149c793961dd8c0b991bb3/lxml-6.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:252a22982dca42f6155125ac76d3432e548a7625d56f5a273ee78a5057216eca", size = 4406837, upload-time = "2025-09-22T04:03:34.027Z" }, + { url = "https://files.pythonhosted.org/packages/92/aa/df863bcc39c5e0946263454aba394de8a9084dbaff8ad143846b0d844739/lxml-6.0.2-cp314-cp314t-win_arm64.whl", hash = "sha256:bb4c1847b303835d89d785a18801a883436cdfd5dc3d62947f9c49e24f0f5a2c", size = 3822205, upload-time = "2025-09-22T04:03:36.249Z" }, +] + +[[package]] +name = "matplotlib" +version = "3.10.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "kiwisolver" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/76/d3c6e3a13fe484ebe7718d14e269c9569c4eb0020a968a327acb3b9a8fe6/matplotlib-3.10.8.tar.gz", hash = "sha256:2299372c19d56bcd35cf05a2738308758d32b9eaed2371898d8f5bd33f084aa3", size = 34806269, upload-time = "2025-12-10T22:56:51.155Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/43/9c0ff7a2f11615e516c3b058e1e6e8f9614ddeca53faca06da267c48345d/matplotlib-3.10.8-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b53285e65d4fa4c86399979e956235deb900be5baa7fc1218ea67fbfaeaadd6f", size = 8262481, upload-time = "2025-12-10T22:56:10.885Z" }, + { url = "https://files.pythonhosted.org/packages/6f/ca/e8ae28649fcdf039fda5ef554b40a95f50592a3c47e6f7270c9561c12b07/matplotlib-3.10.8-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32f8dce744be5569bebe789e46727946041199030db8aeb2954d26013a0eb26b", size = 8151473, upload-time = "2025-12-10T22:56:12.377Z" }, + { url = "https://files.pythonhosted.org/packages/f1/6f/009d129ae70b75e88cbe7e503a12a4c0670e08ed748a902c2568909e9eb5/matplotlib-3.10.8-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4cf267add95b1c88300d96ca837833d4112756045364f5c734a2276038dae27d", size = 9553896, upload-time = "2025-12-10T22:56:14.432Z" }, + { url = "https://files.pythonhosted.org/packages/f5/26/4221a741eb97967bc1fd5e4c52b9aa5a91b2f4ec05b59f6def4d820f9df9/matplotlib-3.10.8-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2cf5bd12cecf46908f286d7838b2abc6c91cda506c0445b8223a7c19a00df008", size = 9824193, upload-time = "2025-12-10T22:56:16.29Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f3/3abf75f38605772cf48a9daf5821cd4f563472f38b4b828c6fba6fa6d06e/matplotlib-3.10.8-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:41703cc95688f2516b480f7f339d8851a6035f18e100ee6a32bc0b8536a12a9c", size = 9615444, upload-time = "2025-12-10T22:56:18.155Z" }, + { url = "https://files.pythonhosted.org/packages/93/a5/de89ac80f10b8dc615807ee1133cd99ac74082581196d4d9590bea10690d/matplotlib-3.10.8-cp314-cp314-win_amd64.whl", hash = "sha256:83d282364ea9f3e52363da262ce32a09dfe241e4080dcedda3c0db059d3c1f11", size = 8272719, upload-time = "2025-12-10T22:56:20.366Z" }, + { url = "https://files.pythonhosted.org/packages/69/ce/b006495c19ccc0a137b48083168a37bd056392dee02f87dba0472f2797fe/matplotlib-3.10.8-cp314-cp314-win_arm64.whl", hash = "sha256:2c1998e92cd5999e295a731bcb2911c75f597d937341f3030cc24ef2733d78a8", size = 8144205, upload-time = "2025-12-10T22:56:22.239Z" }, + { url = "https://files.pythonhosted.org/packages/68/d9/b31116a3a855bd313c6fcdb7226926d59b041f26061c6c5b1be66a08c826/matplotlib-3.10.8-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:b5a2b97dbdc7d4f353ebf343744f1d1f1cca8aa8bfddb4262fcf4306c3761d50", size = 8305785, upload-time = "2025-12-10T22:56:24.218Z" }, + { url = "https://files.pythonhosted.org/packages/1e/90/6effe8103f0272685767ba5f094f453784057072f49b393e3ea178fe70a5/matplotlib-3.10.8-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3f5c3e4da343bba819f0234186b9004faba952cc420fbc522dc4e103c1985908", size = 8198361, upload-time = "2025-12-10T22:56:26.787Z" }, + { url = "https://files.pythonhosted.org/packages/d7/65/a73188711bea603615fc0baecca1061429ac16940e2385433cc778a9d8e7/matplotlib-3.10.8-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f62550b9a30afde8c1c3ae450e5eb547d579dd69b25c2fc7a1c67f934c1717a", size = 9561357, upload-time = "2025-12-10T22:56:28.953Z" }, + { url = "https://files.pythonhosted.org/packages/f4/3d/b5c5d5d5be8ce63292567f0e2c43dde9953d3ed86ac2de0a72e93c8f07a1/matplotlib-3.10.8-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:495672de149445ec1b772ff2c9ede9b769e3cb4f0d0aa7fa730d7f59e2d4e1c1", size = 9823610, upload-time = "2025-12-10T22:56:31.455Z" }, + { url = "https://files.pythonhosted.org/packages/4d/4b/e7beb6bbd49f6bae727a12b270a2654d13c397576d25bd6786e47033300f/matplotlib-3.10.8-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:595ba4d8fe983b88f0eec8c26a241e16d6376fe1979086232f481f8f3f67494c", size = 9614011, upload-time = "2025-12-10T22:56:33.85Z" }, + { url = "https://files.pythonhosted.org/packages/7c/e6/76f2813d31f032e65f6f797e3f2f6e4aab95b65015924b1c51370395c28a/matplotlib-3.10.8-cp314-cp314t-win_amd64.whl", hash = "sha256:25d380fe8b1dc32cf8f0b1b448470a77afb195438bafdf1d858bfb876f3edf7b", size = 8362801, upload-time = "2025-12-10T22:56:36.107Z" }, + { url = "https://files.pythonhosted.org/packages/5d/49/d651878698a0b67f23aa28e17f45a6d6dd3d3f933fa29087fa4ce5947b5a/matplotlib-3.10.8-cp314-cp314t-win_arm64.whl", hash = "sha256:113bb52413ea508ce954a02c10ffd0d565f9c3bc7f2eddc27dfe1731e71c7b5f", size = 8192560, upload-time = "2025-12-10T22:56:38.008Z" }, +] + +[[package]] +name = "multidict" +version = "6.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/cc/db74228a8be41884a567e88a62fd589a913708fcf180d029898c17a9a371/multidict-6.7.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8f333ec9c5eb1b7105e3b84b53141e66ca05a19a605368c55450b6ba208cb9ee", size = 75190, upload-time = "2026-01-26T02:45:10.651Z" }, + { url = "https://files.pythonhosted.org/packages/d5/22/492f2246bb5b534abd44804292e81eeaf835388901f0c574bac4eeec73c5/multidict-6.7.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a407f13c188f804c759fc6a9f88286a565c242a76b27626594c133b82883b5c2", size = 44486, upload-time = "2026-01-26T02:45:11.938Z" }, + { url = "https://files.pythonhosted.org/packages/f1/4f/733c48f270565d78b4544f2baddc2fb2a245e5a8640254b12c36ac7ac68e/multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1", size = 43219, upload-time = "2026-01-26T02:45:14.346Z" }, + { url = "https://files.pythonhosted.org/packages/24/bb/2c0c2287963f4259c85e8bcbba9182ced8d7fca65c780c38e99e61629d11/multidict-6.7.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1e3a8bb24342a8201d178c3b4984c26ba81a577c80d4d525727427460a50c22d", size = 245132, upload-time = "2026-01-26T02:45:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f9/44d4b3064c65079d2467888794dea218d1601898ac50222ab8a9a8094460/multidict-6.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97231140a50f5d447d3164f994b86a0bed7cd016e2682f8650d6a9158e14fd31", size = 252420, upload-time = "2026-01-26T02:45:17.293Z" }, + { url = "https://files.pythonhosted.org/packages/8b/13/78f7275e73fa17b24c9a51b0bd9d73ba64bb32d0ed51b02a746eb876abe7/multidict-6.7.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b10359683bd8806a200fd2909e7c8ca3a7b24ec1d8132e483d58e791d881048", size = 233510, upload-time = "2026-01-26T02:45:19.356Z" }, + { url = "https://files.pythonhosted.org/packages/4b/25/8167187f62ae3cbd52da7893f58cb036b47ea3fb67138787c76800158982/multidict-6.7.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:283ddac99f7ac25a4acadbf004cb5ae34480bbeb063520f70ce397b281859362", size = 264094, upload-time = "2026-01-26T02:45:20.834Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e7/69a3a83b7b030cf283fb06ce074a05a02322359783424d7edf0f15fe5022/multidict-6.7.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:538cec1e18c067d0e6103aa9a74f9e832904c957adc260e61cd9d8cf0c3b3d37", size = 260786, upload-time = "2026-01-26T02:45:22.818Z" }, + { url = "https://files.pythonhosted.org/packages/fe/3b/8ec5074bcfc450fe84273713b4b0a0dd47c0249358f5d82eb8104ffe2520/multidict-6.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709", size = 248483, upload-time = "2026-01-26T02:45:24.368Z" }, + { url = "https://files.pythonhosted.org/packages/48/5a/d5a99e3acbca0e29c5d9cba8f92ceb15dce78bab963b308ae692981e3a5d/multidict-6.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa263a02f4f2dd2d11a7b1bb4362aa7cb1049f84a9235d31adf63f30143469a0", size = 248403, upload-time = "2026-01-26T02:45:25.982Z" }, + { url = "https://files.pythonhosted.org/packages/35/48/e58cd31f6c7d5102f2a4bf89f96b9cf7e00b6c6f3d04ecc44417c00a5a3c/multidict-6.7.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2e1425e2f99ec5bd36c15a01b690a1a2456209c5deed58f95469ffb46039ccbb", size = 240315, upload-time = "2026-01-26T02:45:27.487Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/1cd210229559cb90b6786c30676bb0c58249ff42f942765f88793b41fdce/multidict-6.7.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:497394b3239fc6f0e13a78a3e1b61296e72bf1c5f94b4c4eb80b265c37a131cd", size = 245528, upload-time = "2026-01-26T02:45:28.991Z" }, + { url = "https://files.pythonhosted.org/packages/64/f2/6e1107d226278c876c783056b7db43d800bb64c6131cec9c8dfb6903698e/multidict-6.7.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:233b398c29d3f1b9676b4b6f75c518a06fcb2ea0b925119fb2c1bc35c05e1601", size = 258784, upload-time = "2026-01-26T02:45:30.503Z" }, + { url = "https://files.pythonhosted.org/packages/4d/c1/11f664f14d525e4a1b5327a82d4de61a1db604ab34c6603bb3c2cc63ad34/multidict-6.7.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:93b1818e4a6e0930454f0f2af7dfce69307ca03cdcfb3739bf4d91241967b6c1", size = 251980, upload-time = "2026-01-26T02:45:32.603Z" }, + { url = "https://files.pythonhosted.org/packages/e1/9f/75a9ac888121d0c5bbd4ecf4eead45668b1766f6baabfb3b7f66a410e231/multidict-6.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f33dc2a3abe9249ea5d8360f969ec7f4142e7ac45ee7014d8f8d5acddf178b7b", size = 243602, upload-time = "2026-01-26T02:45:34.043Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e7/50bf7b004cc8525d80dbbbedfdc7aed3e4c323810890be4413e589074032/multidict-6.7.1-cp314-cp314-win32.whl", hash = "sha256:3ab8b9d8b75aef9df299595d5388b14530839f6422333357af1339443cff777d", size = 40930, upload-time = "2026-01-26T02:45:36.278Z" }, + { url = "https://files.pythonhosted.org/packages/e0/bf/52f25716bbe93745595800f36fb17b73711f14da59ed0bb2eba141bc9f0f/multidict-6.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:5e01429a929600e7dab7b166062d9bb54a5eed752384c7384c968c2afab8f50f", size = 45074, upload-time = "2026-01-26T02:45:37.546Z" }, + { url = "https://files.pythonhosted.org/packages/97/ab/22803b03285fa3a525f48217963da3a65ae40f6a1b6f6cf2768879e208f9/multidict-6.7.1-cp314-cp314-win_arm64.whl", hash = "sha256:4885cb0e817aef5d00a2e8451d4665c1808378dc27c2705f1bf4ef8505c0d2e5", size = 42471, upload-time = "2026-01-26T02:45:38.889Z" }, + { url = "https://files.pythonhosted.org/packages/e0/6d/f9293baa6146ba9507e360ea0292b6422b016907c393e2f63fc40ab7b7b5/multidict-6.7.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0458c978acd8e6ea53c81eefaddbbee9c6c5e591f41b3f5e8e194780fe026581", size = 82401, upload-time = "2026-01-26T02:45:40.254Z" }, + { url = "https://files.pythonhosted.org/packages/7a/68/53b5494738d83558d87c3c71a486504d8373421c3e0dbb6d0db48ad42ee0/multidict-6.7.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:c0abd12629b0af3cf590982c0b413b1e7395cd4ec026f30986818ab95bfaa94a", size = 48143, upload-time = "2026-01-26T02:45:41.635Z" }, + { url = "https://files.pythonhosted.org/packages/37/e8/5284c53310dcdc99ce5d66563f6e5773531a9b9fe9ec7a615e9bc306b05f/multidict-6.7.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:14525a5f61d7d0c94b368a42cff4c9a4e7ba2d52e2672a7b23d84dc86fb02b0c", size = 46507, upload-time = "2026-01-26T02:45:42.99Z" }, + { url = "https://files.pythonhosted.org/packages/e4/fc/6800d0e5b3875568b4083ecf5f310dcf91d86d52573160834fb4bfcf5e4f/multidict-6.7.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17307b22c217b4cf05033dabefe68255a534d637c6c9b0cc8382718f87be4262", size = 239358, upload-time = "2026-01-26T02:45:44.376Z" }, + { url = "https://files.pythonhosted.org/packages/41/75/4ad0973179361cdf3a113905e6e088173198349131be2b390f9fa4da5fc6/multidict-6.7.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a7e590ff876a3eaf1c02a4dfe0724b6e69a9e9de6d8f556816f29c496046e59", size = 246884, upload-time = "2026-01-26T02:45:47.167Z" }, + { url = "https://files.pythonhosted.org/packages/c3/9c/095bb28b5da139bd41fb9a5d5caff412584f377914bd8787c2aa98717130/multidict-6.7.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5fa6a95dfee63893d80a34758cd0e0c118a30b8dcb46372bf75106c591b77889", size = 225878, upload-time = "2026-01-26T02:45:48.698Z" }, + { url = "https://files.pythonhosted.org/packages/07/d0/c0a72000243756e8f5a277b6b514fa005f2c73d481b7d9e47cd4568aa2e4/multidict-6.7.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a0543217a6a017692aa6ae5cc39adb75e587af0f3a82288b1492eb73dd6cc2a4", size = 253542, upload-time = "2026-01-26T02:45:50.164Z" }, + { url = "https://files.pythonhosted.org/packages/c0/6b/f69da15289e384ecf2a68837ec8b5ad8c33e973aa18b266f50fe55f24b8c/multidict-6.7.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f99fe611c312b3c1c0ace793f92464d8cd263cc3b26b5721950d977b006b6c4d", size = 252403, upload-time = "2026-01-26T02:45:51.779Z" }, + { url = "https://files.pythonhosted.org/packages/a2/76/b9669547afa5a1a25cd93eaca91c0da1c095b06b6d2d8ec25b713588d3a1/multidict-6.7.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9004d8386d133b7e6135679424c91b0b854d2d164af6ea3f289f8f2761064609", size = 244889, upload-time = "2026-01-26T02:45:53.27Z" }, + { url = "https://files.pythonhosted.org/packages/7e/a9/a50d2669e506dad33cfc45b5d574a205587b7b8a5f426f2fbb2e90882588/multidict-6.7.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e628ef0e6859ffd8273c69412a2465c4be4a9517d07261b33334b5ec6f3c7489", size = 241982, upload-time = "2026-01-26T02:45:54.919Z" }, + { url = "https://files.pythonhosted.org/packages/c5/bb/1609558ad8b456b4827d3c5a5b775c93b87878fd3117ed3db3423dfbce1b/multidict-6.7.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:841189848ba629c3552035a6a7f5bf3b02eb304e9fea7492ca220a8eda6b0e5c", size = 232415, upload-time = "2026-01-26T02:45:56.981Z" }, + { url = "https://files.pythonhosted.org/packages/d8/59/6f61039d2aa9261871e03ab9dc058a550d240f25859b05b67fd70f80d4b3/multidict-6.7.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ce1bbd7d780bb5a0da032e095c951f7014d6b0a205f8318308140f1a6aba159e", size = 240337, upload-time = "2026-01-26T02:45:58.698Z" }, + { url = "https://files.pythonhosted.org/packages/a1/29/fdc6a43c203890dc2ae9249971ecd0c41deaedfe00d25cb6564b2edd99eb/multidict-6.7.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b26684587228afed0d50cf804cc71062cc9c1cdf55051c4c6345d372947b268c", size = 248788, upload-time = "2026-01-26T02:46:00.862Z" }, + { url = "https://files.pythonhosted.org/packages/a9/14/a153a06101323e4cf086ecee3faadba52ff71633d471f9685c42e3736163/multidict-6.7.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9f9af11306994335398293f9958071019e3ab95e9a707dc1383a35613f6abcb9", size = 242842, upload-time = "2026-01-26T02:46:02.824Z" }, + { url = "https://files.pythonhosted.org/packages/41/5f/604ae839e64a4a6efc80db94465348d3b328ee955e37acb24badbcd24d83/multidict-6.7.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b4938326284c4f1224178a560987b6cf8b4d38458b113d9b8c1db1a836e640a2", size = 240237, upload-time = "2026-01-26T02:46:05.898Z" }, + { url = "https://files.pythonhosted.org/packages/5f/60/c3a5187bf66f6fb546ff4ab8fb5a077cbdd832d7b1908d4365c7f74a1917/multidict-6.7.1-cp314-cp314t-win32.whl", hash = "sha256:98655c737850c064a65e006a3df7c997cd3b220be4ec8fe26215760b9697d4d7", size = 48008, upload-time = "2026-01-26T02:46:07.468Z" }, + { url = "https://files.pythonhosted.org/packages/0c/f7/addf1087b860ac60e6f382240f64fb99f8bfb532bb06f7c542b83c29ca61/multidict-6.7.1-cp314-cp314t-win_amd64.whl", hash = "sha256:497bde6223c212ba11d462853cfa4f0ae6ef97465033e7dc9940cdb3ab5b48e5", size = 53542, upload-time = "2026-01-26T02:46:08.809Z" }, + { url = "https://files.pythonhosted.org/packages/4c/81/4629d0aa32302ef7b2ec65c75a728cc5ff4fa410c50096174c1632e70b3e/multidict-6.7.1-cp314-cp314t-win_arm64.whl", hash = "sha256:2bbd113e0d4af5db41d5ebfe9ccaff89de2120578164f86a5d17d5a576d1e5b2", size = 44719, upload-time = "2026-01-26T02:46:11.146Z" }, + { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, +] + +[[package]] +name = "numpy" +version = "2.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/fd/0005efbd0af48e55eb3c7208af93f2862d4b1a56cd78e84309a2d959208d/numpy-2.4.2.tar.gz", hash = "sha256:659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae", size = 20723651, upload-time = "2026-01-31T23:13:10.135Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/88/b7df6050bf18fdcfb7046286c6535cabbdd2064a3440fca3f069d319c16e/numpy-2.4.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:444be170853f1f9d528428eceb55f12918e4fda5d8805480f36a002f1415e09b", size = 16663092, upload-time = "2026-01-31T23:12:04.521Z" }, + { url = "https://files.pythonhosted.org/packages/25/7a/1fee4329abc705a469a4afe6e69b1ef7e915117747886327104a8493a955/numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d1240d50adff70c2a88217698ca844723068533f3f5c5fa6ee2e3220e3bdb000", size = 14698770, upload-time = "2026-01-31T23:12:06.96Z" }, + { url = "https://files.pythonhosted.org/packages/fb/0b/f9e49ba6c923678ad5bc38181c08ac5e53b7a5754dbca8e581aa1a56b1ff/numpy-2.4.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:7cdde6de52fb6664b00b056341265441192d1291c130e99183ec0d4b110ff8b1", size = 5208562, upload-time = "2026-01-31T23:12:09.632Z" }, + { url = "https://files.pythonhosted.org/packages/7d/12/d7de8f6f53f9bb76997e5e4c069eda2051e3fe134e9181671c4391677bb2/numpy-2.4.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:cda077c2e5b780200b6b3e09d0b42205a3d1c68f30c6dceb90401c13bff8fe74", size = 6543710, upload-time = "2026-01-31T23:12:11.969Z" }, + { url = "https://files.pythonhosted.org/packages/09/63/c66418c2e0268a31a4cf8a8b512685748200f8e8e8ec6c507ce14e773529/numpy-2.4.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d30291931c915b2ab5717c2974bb95ee891a1cf22ebc16a8006bd59cd210d40a", size = 15677205, upload-time = "2026-01-31T23:12:14.33Z" }, + { url = "https://files.pythonhosted.org/packages/5d/6c/7f237821c9642fb2a04d2f1e88b4295677144ca93285fd76eff3bcba858d/numpy-2.4.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bba37bc29d4d85761deed3954a1bc62be7cf462b9510b51d367b769a8c8df325", size = 16611738, upload-time = "2026-01-31T23:12:16.525Z" }, + { url = "https://files.pythonhosted.org/packages/c2/a7/39c4cdda9f019b609b5c473899d87abff092fc908cfe4d1ecb2fcff453b0/numpy-2.4.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b2f0073ed0868db1dcd86e052d37279eef185b9c8db5bf61f30f46adac63c909", size = 17028888, upload-time = "2026-01-31T23:12:19.306Z" }, + { url = "https://files.pythonhosted.org/packages/da/b3/e84bb64bdfea967cc10950d71090ec2d84b49bc691df0025dddb7c26e8e3/numpy-2.4.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7f54844851cdb630ceb623dcec4db3240d1ac13d4990532446761baede94996a", size = 18339556, upload-time = "2026-01-31T23:12:21.816Z" }, + { url = "https://files.pythonhosted.org/packages/88/f5/954a291bc1192a27081706862ac62bb5920fbecfbaa302f64682aa90beed/numpy-2.4.2-cp314-cp314-win32.whl", hash = "sha256:12e26134a0331d8dbd9351620f037ec470b7c75929cb8a1537f6bfe411152a1a", size = 6006899, upload-time = "2026-01-31T23:12:24.14Z" }, + { url = "https://files.pythonhosted.org/packages/05/cb/eff72a91b2efdd1bc98b3b8759f6a1654aa87612fc86e3d87d6fe4f948c4/numpy-2.4.2-cp314-cp314-win_amd64.whl", hash = "sha256:068cdb2d0d644cdb45670810894f6a0600797a69c05f1ac478e8d31670b8ee75", size = 12443072, upload-time = "2026-01-31T23:12:26.33Z" }, + { url = "https://files.pythonhosted.org/packages/37/75/62726948db36a56428fce4ba80a115716dc4fad6a3a4352487f8bb950966/numpy-2.4.2-cp314-cp314-win_arm64.whl", hash = "sha256:6ed0be1ee58eef41231a5c943d7d1375f093142702d5723ca2eb07db9b934b05", size = 10494886, upload-time = "2026-01-31T23:12:28.488Z" }, + { url = "https://files.pythonhosted.org/packages/36/2f/ee93744f1e0661dc267e4b21940870cabfae187c092e1433b77b09b50ac4/numpy-2.4.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:98f16a80e917003a12c0580f97b5f875853ebc33e2eaa4bccfc8201ac6869308", size = 14818567, upload-time = "2026-01-31T23:12:30.709Z" }, + { url = "https://files.pythonhosted.org/packages/a7/24/6535212add7d76ff938d8bdc654f53f88d35cddedf807a599e180dcb8e66/numpy-2.4.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:20abd069b9cda45874498b245c8015b18ace6de8546bf50dfa8cea1696ed06ef", size = 5328372, upload-time = "2026-01-31T23:12:32.962Z" }, + { url = "https://files.pythonhosted.org/packages/5e/9d/c48f0a035725f925634bf6b8994253b43f2047f6778a54147d7e213bc5a7/numpy-2.4.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:e98c97502435b53741540a5717a6749ac2ada901056c7db951d33e11c885cc7d", size = 6649306, upload-time = "2026-01-31T23:12:34.797Z" }, + { url = "https://files.pythonhosted.org/packages/81/05/7c73a9574cd4a53a25907bad38b59ac83919c0ddc8234ec157f344d57d9a/numpy-2.4.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da6cad4e82cb893db4b69105c604d805e0c3ce11501a55b5e9f9083b47d2ffe8", size = 15722394, upload-time = "2026-01-31T23:12:36.565Z" }, + { url = "https://files.pythonhosted.org/packages/35/fa/4de10089f21fc7d18442c4a767ab156b25c2a6eaf187c0db6d9ecdaeb43f/numpy-2.4.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e4424677ce4b47fe73c8b5556d876571f7c6945d264201180db2dc34f676ab5", size = 16653343, upload-time = "2026-01-31T23:12:39.188Z" }, + { url = "https://files.pythonhosted.org/packages/b8/f9/d33e4ffc857f3763a57aa85650f2e82486832d7492280ac21ba9efda80da/numpy-2.4.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2b8f157c8a6f20eb657e240f8985cc135598b2b46985c5bccbde7616dc9c6b1e", size = 17078045, upload-time = "2026-01-31T23:12:42.041Z" }, + { url = "https://files.pythonhosted.org/packages/c8/b8/54bdb43b6225badbea6389fa038c4ef868c44f5890f95dd530a218706da3/numpy-2.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5daf6f3914a733336dab21a05cdec343144600e964d2fcdabaac0c0269874b2a", size = 18380024, upload-time = "2026-01-31T23:12:44.331Z" }, + { url = "https://files.pythonhosted.org/packages/a5/55/6e1a61ded7af8df04016d81b5b02daa59f2ea9252ee0397cb9f631efe9e5/numpy-2.4.2-cp314-cp314t-win32.whl", hash = "sha256:8c50dd1fc8826f5b26a5ee4d77ca55d88a895f4e4819c7ecc2a9f5905047a443", size = 6153937, upload-time = "2026-01-31T23:12:47.229Z" }, + { url = "https://files.pythonhosted.org/packages/45/aa/fa6118d1ed6d776b0983f3ceac9b1a5558e80df9365b1c3aa6d42bf9eee4/numpy-2.4.2-cp314-cp314t-win_amd64.whl", hash = "sha256:fcf92bee92742edd401ba41135185866f7026c502617f422eb432cfeca4fe236", size = 12631844, upload-time = "2026-01-31T23:12:48.997Z" }, + { url = "https://files.pythonhosted.org/packages/32/0a/2ec5deea6dcd158f254a7b372fb09cfba5719419c8d66343bab35237b3fb/numpy-2.4.2-cp314-cp314t-win_arm64.whl", hash = "sha256:1f92f53998a17265194018d1cc321b2e96e900ca52d54c7c77837b71b9465181", size = 10565379, upload-time = "2026-01-31T23:12:51.345Z" }, +] + +[[package]] +name = "packaging" +version = "26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416, upload-time = "2026-01-21T20:50:39.064Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" }, +] + +[[package]] +name = "pandas" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/de/da/b1dc0481ab8d55d0f46e343cfe67d4551a0e14fcee52bd38ca1bd73258d8/pandas-3.0.0.tar.gz", hash = "sha256:0facf7e87d38f721f0af46fe70d97373a37701b1c09f7ed7aeeb292ade5c050f", size = 4633005, upload-time = "2026-01-21T15:52:04.726Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/db/0270ad9d13c344b7a36fa77f5f8344a46501abf413803e885d22864d10bf/pandas-3.0.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:597c08fb9fef0edf1e4fa2f9828dd27f3d78f9b8c9b4a748d435ffc55732310b", size = 10312075, upload-time = "2026-01-21T15:51:28.5Z" }, + { url = "https://files.pythonhosted.org/packages/09/9f/c176f5e9717f7c91becfe0f55a52ae445d3f7326b4a2cf355978c51b7913/pandas-3.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:447b2d68ac5edcbf94655fe909113a6dba6ef09ad7f9f60c80477825b6c489fe", size = 9900213, upload-time = "2026-01-21T15:51:30.955Z" }, + { url = "https://files.pythonhosted.org/packages/d9/e7/63ad4cc10b257b143e0a5ebb04304ad806b4e1a61c5da25f55896d2ca0f4/pandas-3.0.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:debb95c77ff3ed3ba0d9aa20c3a2f19165cc7956362f9873fce1ba0a53819d70", size = 10428768, upload-time = "2026-01-21T15:51:33.018Z" }, + { url = "https://files.pythonhosted.org/packages/9e/0e/4e4c2d8210f20149fd2248ef3fff26623604922bd564d915f935a06dd63d/pandas-3.0.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fedabf175e7cd82b69b74c30adbaa616de301291a5231138d7242596fc296a8d", size = 10882954, upload-time = "2026-01-21T15:51:35.287Z" }, + { url = "https://files.pythonhosted.org/packages/c6/60/c9de8ac906ba1f4d2250f8a951abe5135b404227a55858a75ad26f84db47/pandas-3.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:412d1a89aab46889f3033a386912efcdfa0f1131c5705ff5b668dda88305e986", size = 11430293, upload-time = "2026-01-21T15:51:37.57Z" }, + { url = "https://files.pythonhosted.org/packages/a1/69/806e6637c70920e5787a6d6896fd707f8134c2c55cd761e7249a97b7dc5a/pandas-3.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e979d22316f9350c516479dd3a92252be2937a9531ed3a26ec324198a99cdd49", size = 11952452, upload-time = "2026-01-21T15:51:39.618Z" }, + { url = "https://files.pythonhosted.org/packages/cb/de/918621e46af55164c400ab0ef389c9d969ab85a43d59ad1207d4ddbe30a5/pandas-3.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:083b11415b9970b6e7888800c43c82e81a06cd6b06755d84804444f0007d6bb7", size = 9851081, upload-time = "2026-01-21T15:51:41.758Z" }, + { url = "https://files.pythonhosted.org/packages/91/a1/3562a18dd0bd8c73344bfa26ff90c53c72f827df119d6d6b1dacc84d13e3/pandas-3.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:5db1e62cb99e739fa78a28047e861b256d17f88463c76b8dafc7c1338086dca8", size = 9174610, upload-time = "2026-01-21T15:51:44.312Z" }, + { url = "https://files.pythonhosted.org/packages/ce/26/430d91257eaf366f1737d7a1c158677caaf6267f338ec74e3a1ec444111c/pandas-3.0.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:697b8f7d346c68274b1b93a170a70974cdc7d7354429894d5927c1effdcccd73", size = 10761999, upload-time = "2026-01-21T15:51:46.899Z" }, + { url = "https://files.pythonhosted.org/packages/ec/1a/954eb47736c2b7f7fe6a9d56b0cb6987773c00faa3c6451a43db4beb3254/pandas-3.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8cb3120f0d9467ed95e77f67a75e030b67545bcfa08964e349252d674171def2", size = 10410279, upload-time = "2026-01-21T15:51:48.89Z" }, + { url = "https://files.pythonhosted.org/packages/20/fc/b96f3a5a28b250cd1b366eb0108df2501c0f38314a00847242abab71bb3a/pandas-3.0.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:33fd3e6baa72899746b820c31e4b9688c8e1b7864d7aec2de7ab5035c285277a", size = 10330198, upload-time = "2026-01-21T15:51:51.015Z" }, + { url = "https://files.pythonhosted.org/packages/90/b3/d0e2952f103b4fbef1ef22d0c2e314e74fc9064b51cee30890b5e3286ee6/pandas-3.0.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8942e333dc67ceda1095227ad0febb05a3b36535e520154085db632c40ad084", size = 10728513, upload-time = "2026-01-21T15:51:53.387Z" }, + { url = "https://files.pythonhosted.org/packages/76/81/832894f286df828993dc5fd61c63b231b0fb73377e99f6c6c369174cf97e/pandas-3.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:783ac35c4d0fe0effdb0d67161859078618b1b6587a1af15928137525217a721", size = 11345550, upload-time = "2026-01-21T15:51:55.329Z" }, + { url = "https://files.pythonhosted.org/packages/34/a0/ed160a00fb4f37d806406bc0a79a8b62fe67f29d00950f8d16203ff3409b/pandas-3.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:125eb901e233f155b268bbef9abd9afb5819db74f0e677e89a61b246228c71ac", size = 11799386, upload-time = "2026-01-21T15:51:57.457Z" }, + { url = "https://files.pythonhosted.org/packages/36/c8/2ac00d7255252c5e3cf61b35ca92ca25704b0188f7454ca4aec08a33cece/pandas-3.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b86d113b6c109df3ce0ad5abbc259fe86a1bd4adfd4a31a89da42f84f65509bb", size = 10873041, upload-time = "2026-01-21T15:52:00.034Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3f/a80ac00acbc6b35166b42850e98a4f466e2c0d9c64054161ba9620f95680/pandas-3.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:1c39eab3ad38f2d7a249095f0a3d8f8c22cc0f847e98ccf5bbe732b272e2d9fa", size = 9441003, upload-time = "2026-01-21T15:52:02.281Z" }, +] + +[[package]] +name = "pillow" +version = "12.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/02/d52c733a2452ef1ffcc123b68e6606d07276b0e358db70eabad7e40042b7/pillow-12.1.0.tar.gz", hash = "sha256:5c5ae0a06e9ea030ab786b0251b32c7e4ce10e58d983c0d5c56029455180b5b9", size = 46977283, upload-time = "2026-01-02T09:13:29.892Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8c/87/bdf971d8bbcf80a348cc3bacfcb239f5882100fe80534b0ce67a784181d8/pillow-12.1.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:5cb7bc1966d031aec37ddb9dcf15c2da5b2e9f7cc3ca7c54473a20a927e1eb91", size = 4062533, upload-time = "2026-01-02T09:12:20.791Z" }, + { url = "https://files.pythonhosted.org/packages/ff/4f/5eb37a681c68d605eb7034c004875c81f86ec9ef51f5be4a63eadd58859a/pillow-12.1.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:97e9993d5ed946aba26baf9c1e8cf18adbab584b99f452ee72f7ee8acb882796", size = 4138546, upload-time = "2026-01-02T09:12:23.664Z" }, + { url = "https://files.pythonhosted.org/packages/11/6d/19a95acb2edbace40dcd582d077b991646b7083c41b98da4ed7555b59733/pillow-12.1.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:414b9a78e14ffeb98128863314e62c3f24b8a86081066625700b7985b3f529bd", size = 3601163, upload-time = "2026-01-02T09:12:26.338Z" }, + { url = "https://files.pythonhosted.org/packages/fc/36/2b8138e51cb42e4cc39c3297713455548be855a50558c3ac2beebdc251dd/pillow-12.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:e6bdb408f7c9dd2a5ff2b14a3b0bb6d4deb29fb9961e6eb3ae2031ae9a5cec13", size = 5266086, upload-time = "2026-01-02T09:12:28.782Z" }, + { url = "https://files.pythonhosted.org/packages/53/4b/649056e4d22e1caa90816bf99cef0884aed607ed38075bd75f091a607a38/pillow-12.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3413c2ae377550f5487991d444428f1a8ae92784aac79caa8b1e3b89b175f77e", size = 4657344, upload-time = "2026-01-02T09:12:31.117Z" }, + { url = "https://files.pythonhosted.org/packages/6c/6b/c5742cea0f1ade0cd61485dc3d81f05261fc2276f537fbdc00802de56779/pillow-12.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e5dcbe95016e88437ecf33544ba5db21ef1b8dd6e1b434a2cb2a3d605299e643", size = 6232114, upload-time = "2026-01-02T09:12:32.936Z" }, + { url = "https://files.pythonhosted.org/packages/bf/8f/9f521268ce22d63991601aafd3d48d5ff7280a246a1ef62d626d67b44064/pillow-12.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d0a7735df32ccbcc98b98a1ac785cc4b19b580be1bdf0aeb5c03223220ea09d5", size = 8042708, upload-time = "2026-01-02T09:12:34.78Z" }, + { url = "https://files.pythonhosted.org/packages/1a/eb/257f38542893f021502a1bbe0c2e883c90b5cff26cc33b1584a841a06d30/pillow-12.1.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c27407a2d1b96774cbc4a7594129cc027339fd800cd081e44497722ea1179de", size = 6347762, upload-time = "2026-01-02T09:12:36.748Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5a/8ba375025701c09b309e8d5163c5a4ce0102fa86bbf8800eb0d7ac87bc51/pillow-12.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15c794d74303828eaa957ff8070846d0efe8c630901a1c753fdc63850e19ecd9", size = 7039265, upload-time = "2026-01-02T09:12:39.082Z" }, + { url = "https://files.pythonhosted.org/packages/cf/dc/cf5e4cdb3db533f539e88a7bbf9f190c64ab8a08a9bc7a4ccf55067872e4/pillow-12.1.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c990547452ee2800d8506c4150280757f88532f3de2a58e3022e9b179107862a", size = 6462341, upload-time = "2026-01-02T09:12:40.946Z" }, + { url = "https://files.pythonhosted.org/packages/d0/47/0291a25ac9550677e22eda48510cfc4fa4b2ef0396448b7fbdc0a6946309/pillow-12.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b63e13dd27da389ed9475b3d28510f0f954bca0041e8e551b2a4eb1eab56a39a", size = 7165395, upload-time = "2026-01-02T09:12:42.706Z" }, + { url = "https://files.pythonhosted.org/packages/4f/4c/e005a59393ec4d9416be06e6b45820403bb946a778e39ecec62f5b2b991e/pillow-12.1.0-cp314-cp314-win32.whl", hash = "sha256:1a949604f73eb07a8adab38c4fe50791f9919344398bdc8ac6b307f755fc7030", size = 6431413, upload-time = "2026-01-02T09:12:44.944Z" }, + { url = "https://files.pythonhosted.org/packages/1c/af/f23697f587ac5f9095d67e31b81c95c0249cd461a9798a061ed6709b09b5/pillow-12.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:4f9f6a650743f0ddee5593ac9e954ba1bdbc5e150bc066586d4f26127853ab94", size = 7176779, upload-time = "2026-01-02T09:12:46.727Z" }, + { url = "https://files.pythonhosted.org/packages/b3/36/6a51abf8599232f3e9afbd16d52829376a68909fe14efe29084445db4b73/pillow-12.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:808b99604f7873c800c4840f55ff389936ef1948e4e87645eaf3fccbc8477ac4", size = 2543105, upload-time = "2026-01-02T09:12:49.243Z" }, + { url = "https://files.pythonhosted.org/packages/82/54/2e1dd20c8749ff225080d6ba465a0cab4387f5db0d1c5fb1439e2d99923f/pillow-12.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:bc11908616c8a283cf7d664f77411a5ed2a02009b0097ff8abbba5e79128ccf2", size = 5268571, upload-time = "2026-01-02T09:12:51.11Z" }, + { url = "https://files.pythonhosted.org/packages/57/61/571163a5ef86ec0cf30d265ac2a70ae6fc9e28413d1dc94fa37fae6bda89/pillow-12.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:896866d2d436563fa2a43a9d72f417874f16b5545955c54a64941e87c1376c61", size = 4660426, upload-time = "2026-01-02T09:12:52.865Z" }, + { url = "https://files.pythonhosted.org/packages/5e/e1/53ee5163f794aef1bf84243f755ee6897a92c708505350dd1923f4afec48/pillow-12.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8e178e3e99d3c0ea8fc64b88447f7cac8ccf058af422a6cedc690d0eadd98c51", size = 6269908, upload-time = "2026-01-02T09:12:54.884Z" }, + { url = "https://files.pythonhosted.org/packages/bc/0b/b4b4106ff0ee1afa1dc599fde6ab230417f800279745124f6c50bcffed8e/pillow-12.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:079af2fb0c599c2ec144ba2c02766d1b55498e373b3ac64687e43849fbbef5bc", size = 8074733, upload-time = "2026-01-02T09:12:56.802Z" }, + { url = "https://files.pythonhosted.org/packages/19/9f/80b411cbac4a732439e629a26ad3ef11907a8c7fc5377b7602f04f6fe4e7/pillow-12.1.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bdec5e43377761c5dbca620efb69a77f6855c5a379e32ac5b158f54c84212b14", size = 6381431, upload-time = "2026-01-02T09:12:58.823Z" }, + { url = "https://files.pythonhosted.org/packages/8f/b7/d65c45db463b66ecb6abc17c6ba6917a911202a07662247e1355ce1789e7/pillow-12.1.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:565c986f4b45c020f5421a4cea13ef294dde9509a8577f29b2fc5edc7587fff8", size = 7068529, upload-time = "2026-01-02T09:13:00.885Z" }, + { url = "https://files.pythonhosted.org/packages/50/96/dfd4cd726b4a45ae6e3c669fc9e49deb2241312605d33aba50499e9d9bd1/pillow-12.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:43aca0a55ce1eefc0aefa6253661cb54571857b1a7b2964bd8a1e3ef4b729924", size = 6492981, upload-time = "2026-01-02T09:13:03.314Z" }, + { url = "https://files.pythonhosted.org/packages/4d/1c/b5dc52cf713ae46033359c5ca920444f18a6359ce1020dd3e9c553ea5bc6/pillow-12.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0deedf2ea233722476b3a81e8cdfbad786f7adbed5d848469fa59fe52396e4ef", size = 7191878, upload-time = "2026-01-02T09:13:05.276Z" }, + { url = "https://files.pythonhosted.org/packages/53/26/c4188248bd5edaf543864fe4834aebe9c9cb4968b6f573ce014cc42d0720/pillow-12.1.0-cp314-cp314t-win32.whl", hash = "sha256:b17fbdbe01c196e7e159aacb889e091f28e61020a8abeac07b68079b6e626988", size = 6438703, upload-time = "2026-01-02T09:13:07.491Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0e/69ed296de8ea05cb03ee139cee600f424ca166e632567b2d66727f08c7ed/pillow-12.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27b9baecb428899db6c0de572d6d305cfaf38ca1596b5c0542a5182e3e74e8c6", size = 7182927, upload-time = "2026-01-02T09:13:09.841Z" }, + { url = "https://files.pythonhosted.org/packages/fc/f5/68334c015eed9b5cff77814258717dec591ded209ab5b6fb70e2ae873d1d/pillow-12.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:f61333d817698bdcdd0f9d7793e365ac3d2a21c1f1eb02b32ad6aefb8d8ea831", size = 2545104, upload-time = "2026-01-02T09:13:12.068Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "propcache" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9e/da/e9fc233cf63743258bff22b3dfa7ea5baef7b5bc324af47a0ad89b8ffc6f/propcache-0.4.1.tar.gz", hash = "sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d", size = 46442, upload-time = "2025-10-08T19:49:02.291Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/5c/bca52d654a896f831b8256683457ceddd490ec18d9ec50e97dfd8fc726a8/propcache-0.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12", size = 78152, upload-time = "2025-10-08T19:47:51.051Z" }, + { url = "https://files.pythonhosted.org/packages/65/9b/03b04e7d82a5f54fb16113d839f5ea1ede58a61e90edf515f6577c66fa8f/propcache-0.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c", size = 44869, upload-time = "2025-10-08T19:47:52.594Z" }, + { url = "https://files.pythonhosted.org/packages/b2/fa/89a8ef0468d5833a23fff277b143d0573897cf75bd56670a6d28126c7d68/propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded", size = 46596, upload-time = "2025-10-08T19:47:54.073Z" }, + { url = "https://files.pythonhosted.org/packages/86/bd/47816020d337f4a746edc42fe8d53669965138f39ee117414c7d7a340cfe/propcache-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641", size = 206981, upload-time = "2025-10-08T19:47:55.715Z" }, + { url = "https://files.pythonhosted.org/packages/df/f6/c5fa1357cc9748510ee55f37173eb31bfde6d94e98ccd9e6f033f2fc06e1/propcache-0.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4", size = 211490, upload-time = "2025-10-08T19:47:57.499Z" }, + { url = "https://files.pythonhosted.org/packages/80/1e/e5889652a7c4a3846683401a48f0f2e5083ce0ec1a8a5221d8058fbd1adf/propcache-0.4.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44", size = 215371, upload-time = "2025-10-08T19:47:59.317Z" }, + { url = "https://files.pythonhosted.org/packages/b2/f2/889ad4b2408f72fe1a4f6a19491177b30ea7bf1a0fd5f17050ca08cfc882/propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d", size = 201424, upload-time = "2025-10-08T19:48:00.67Z" }, + { url = "https://files.pythonhosted.org/packages/27/73/033d63069b57b0812c8bd19f311faebeceb6ba31b8f32b73432d12a0b826/propcache-0.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b", size = 197566, upload-time = "2025-10-08T19:48:02.604Z" }, + { url = "https://files.pythonhosted.org/packages/dc/89/ce24f3dc182630b4e07aa6d15f0ff4b14ed4b9955fae95a0b54c58d66c05/propcache-0.4.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e", size = 193130, upload-time = "2025-10-08T19:48:04.499Z" }, + { url = "https://files.pythonhosted.org/packages/a9/24/ef0d5fd1a811fb5c609278d0209c9f10c35f20581fcc16f818da959fc5b4/propcache-0.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f", size = 202625, upload-time = "2025-10-08T19:48:06.213Z" }, + { url = "https://files.pythonhosted.org/packages/f5/02/98ec20ff5546f68d673df2f7a69e8c0d076b5abd05ca882dc7ee3a83653d/propcache-0.4.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49", size = 204209, upload-time = "2025-10-08T19:48:08.432Z" }, + { url = "https://files.pythonhosted.org/packages/a0/87/492694f76759b15f0467a2a93ab68d32859672b646aa8a04ce4864e7932d/propcache-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144", size = 197797, upload-time = "2025-10-08T19:48:09.968Z" }, + { url = "https://files.pythonhosted.org/packages/ee/36/66367de3575db1d2d3f3d177432bd14ee577a39d3f5d1b3d5df8afe3b6e2/propcache-0.4.1-cp314-cp314-win32.whl", hash = "sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f", size = 38140, upload-time = "2025-10-08T19:48:11.232Z" }, + { url = "https://files.pythonhosted.org/packages/0c/2a/a758b47de253636e1b8aef181c0b4f4f204bf0dd964914fb2af90a95b49b/propcache-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153", size = 41257, upload-time = "2025-10-08T19:48:12.707Z" }, + { url = "https://files.pythonhosted.org/packages/34/5e/63bd5896c3fec12edcbd6f12508d4890d23c265df28c74b175e1ef9f4f3b/propcache-0.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992", size = 38097, upload-time = "2025-10-08T19:48:13.923Z" }, + { url = "https://files.pythonhosted.org/packages/99/85/9ff785d787ccf9bbb3f3106f79884a130951436f58392000231b4c737c80/propcache-0.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f", size = 81455, upload-time = "2025-10-08T19:48:15.16Z" }, + { url = "https://files.pythonhosted.org/packages/90/85/2431c10c8e7ddb1445c1f7c4b54d886e8ad20e3c6307e7218f05922cad67/propcache-0.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393", size = 46372, upload-time = "2025-10-08T19:48:16.424Z" }, + { url = "https://files.pythonhosted.org/packages/01/20/b0972d902472da9bcb683fa595099911f4d2e86e5683bcc45de60dd05dc3/propcache-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0", size = 48411, upload-time = "2025-10-08T19:48:17.577Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e3/7dc89f4f21e8f99bad3d5ddb3a3389afcf9da4ac69e3deb2dcdc96e74169/propcache-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a", size = 275712, upload-time = "2025-10-08T19:48:18.901Z" }, + { url = "https://files.pythonhosted.org/packages/20/67/89800c8352489b21a8047c773067644e3897f02ecbbd610f4d46b7f08612/propcache-0.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be", size = 273557, upload-time = "2025-10-08T19:48:20.762Z" }, + { url = "https://files.pythonhosted.org/packages/e2/a1/b52b055c766a54ce6d9c16d9aca0cad8059acd9637cdf8aa0222f4a026ef/propcache-0.4.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc", size = 280015, upload-time = "2025-10-08T19:48:22.592Z" }, + { url = "https://files.pythonhosted.org/packages/48/c8/33cee30bd890672c63743049f3c9e4be087e6780906bfc3ec58528be59c1/propcache-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a", size = 262880, upload-time = "2025-10-08T19:48:23.947Z" }, + { url = "https://files.pythonhosted.org/packages/0c/b1/8f08a143b204b418285c88b83d00edbd61afbc2c6415ffafc8905da7038b/propcache-0.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89", size = 260938, upload-time = "2025-10-08T19:48:25.656Z" }, + { url = "https://files.pythonhosted.org/packages/cf/12/96e4664c82ca2f31e1c8dff86afb867348979eb78d3cb8546a680287a1e9/propcache-0.4.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726", size = 247641, upload-time = "2025-10-08T19:48:27.207Z" }, + { url = "https://files.pythonhosted.org/packages/18/ed/e7a9cfca28133386ba52278136d42209d3125db08d0a6395f0cba0c0285c/propcache-0.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367", size = 262510, upload-time = "2025-10-08T19:48:28.65Z" }, + { url = "https://files.pythonhosted.org/packages/f5/76/16d8bf65e8845dd62b4e2b57444ab81f07f40caa5652b8969b87ddcf2ef6/propcache-0.4.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36", size = 263161, upload-time = "2025-10-08T19:48:30.133Z" }, + { url = "https://files.pythonhosted.org/packages/e7/70/c99e9edb5d91d5ad8a49fa3c1e8285ba64f1476782fed10ab251ff413ba1/propcache-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455", size = 257393, upload-time = "2025-10-08T19:48:31.567Z" }, + { url = "https://files.pythonhosted.org/packages/08/02/87b25304249a35c0915d236575bc3574a323f60b47939a2262b77632a3ee/propcache-0.4.1-cp314-cp314t-win32.whl", hash = "sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85", size = 42546, upload-time = "2025-10-08T19:48:32.872Z" }, + { url = "https://files.pythonhosted.org/packages/cb/ef/3c6ecf8b317aa982f309835e8f96987466123c6e596646d4e6a1dfcd080f/propcache-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1", size = 46259, upload-time = "2025-10-08T19:48:34.226Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2d/346e946d4951f37eca1e4f55be0f0174c52cd70720f84029b02f296f4a38/propcache-0.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9", size = 40428, upload-time = "2025-10-08T19:48:35.441Z" }, + { url = "https://files.pythonhosted.org/packages/5b/5a/bc7b4a4ef808fa59a816c17b20c4bef6884daebbdf627ff2a161da67da19/propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237", size = 13305, upload-time = "2025-10-08T19:49:00.792Z" }, +] + +[[package]] +name = "psycopg2-binary" +version = "2.9.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ac/6c/8767aaa597ba424643dc87348c6f1754dd9f48e80fdc1b9f7ca5c3a7c213/psycopg2-binary-2.9.11.tar.gz", hash = "sha256:b6aed9e096bf63f9e75edf2581aa9a7e7186d97ab5c177aa6c87797cd591236c", size = 379620, upload-time = "2025-10-10T11:14:48.041Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/12/93ef0098590cf51d9732b4f139533732565704f45bdc1ffa741b7c95fb54/psycopg2_binary-2.9.11-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:92e3b669236327083a2e33ccfa0d320dd01b9803b3e14dd986a4fc54aa00f4e1", size = 3756567, upload-time = "2025-10-10T11:13:11.885Z" }, + { url = "https://files.pythonhosted.org/packages/7c/a9/9d55c614a891288f15ca4b5209b09f0f01e3124056924e17b81b9fa054cc/psycopg2_binary-2.9.11-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e0deeb03da539fa3577fcb0b3f2554a97f7e5477c246098dbb18091a4a01c16f", size = 3864755, upload-time = "2025-10-10T11:13:17.727Z" }, + { url = "https://files.pythonhosted.org/packages/13/1e/98874ce72fd29cbde93209977b196a2edae03f8490d1bd8158e7f1daf3a0/psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9b52a3f9bb540a3e4ec0f6ba6d31339727b2950c9772850d6545b7eae0b9d7c5", size = 4411646, upload-time = "2025-10-10T11:13:24.432Z" }, + { url = "https://files.pythonhosted.org/packages/5a/bd/a335ce6645334fb8d758cc358810defca14a1d19ffbc8a10bd38a2328565/psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:db4fd476874ccfdbb630a54426964959e58da4c61c9feba73e6094d51303d7d8", size = 4468701, upload-time = "2025-10-10T11:13:29.266Z" }, + { url = "https://files.pythonhosted.org/packages/44/d6/c8b4f53f34e295e45709b7568bf9b9407a612ea30387d35eb9fa84f269b4/psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:47f212c1d3be608a12937cc131bd85502954398aaa1320cb4c14421a0ffccf4c", size = 4166293, upload-time = "2025-10-10T11:13:33.336Z" }, + { url = "https://files.pythonhosted.org/packages/4b/e0/f8cc36eadd1b716ab36bb290618a3292e009867e5c97ce4aba908cb99644/psycopg2_binary-2.9.11-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e35b7abae2b0adab776add56111df1735ccc71406e56203515e228a8dc07089f", size = 3983184, upload-time = "2025-10-30T02:55:32.483Z" }, + { url = "https://files.pythonhosted.org/packages/53/3e/2a8fe18a4e61cfb3417da67b6318e12691772c0696d79434184a511906dc/psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fcf21be3ce5f5659daefd2b3b3b6e4727b028221ddc94e6c1523425579664747", size = 3652650, upload-time = "2025-10-10T11:13:38.181Z" }, + { url = "https://files.pythonhosted.org/packages/76/36/03801461b31b29fe58d228c24388f999fe814dfc302856e0d17f97d7c54d/psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:9bd81e64e8de111237737b29d68039b9c813bdf520156af36d26819c9a979e5f", size = 3298663, upload-time = "2025-10-10T11:13:44.878Z" }, + { url = "https://files.pythonhosted.org/packages/97/77/21b0ea2e1a73aa5fa9222b2a6b8ba325c43c3a8d54272839c991f2345656/psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:32770a4d666fbdafab017086655bcddab791d7cb260a16679cc5a7338b64343b", size = 3044737, upload-time = "2025-10-30T02:55:35.69Z" }, + { url = "https://files.pythonhosted.org/packages/67/69/f36abe5f118c1dca6d3726ceae164b9356985805480731ac6712a63f24f0/psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c3cb3a676873d7506825221045bd70e0427c905b9c8ee8d6acd70cfcbd6e576d", size = 3347643, upload-time = "2025-10-10T11:13:53.499Z" }, + { url = "https://files.pythonhosted.org/packages/e1/36/9c0c326fe3a4227953dfb29f5d0c8ae3b8eb8c1cd2967aa569f50cb3c61f/psycopg2_binary-2.9.11-cp314-cp314-win_amd64.whl", hash = "sha256:4012c9c954dfaccd28f94e84ab9f94e12df76b4afb22331b1f0d3154893a6316", size = 2803913, upload-time = "2025-10-10T11:13:57.058Z" }, +] + +[[package]] +name = "pygments" +version = "2.19.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, +] + +[[package]] +name = "pyparsing" +version = "3.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, +] + +[[package]] +name = "pytest" +version = "9.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801, upload-time = "2025-12-06T21:30:49.154Z" }, +] + +[[package]] +name = "pytest-mock" +version = "3.15.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/68/14/eb014d26be205d38ad5ad20d9a80f7d201472e08167f0bb4361e251084a9/pytest_mock-3.15.1.tar.gz", hash = "sha256:1849a238f6f396da19762269de72cb1814ab44416fa73a8686deac10b0d87a0f", size = 34036, upload-time = "2025-09-16T16:37:27.081Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/cc/06253936f4a7fa2e0f48dfe6d851d9c56df896a9ab09ac019d70b760619c/pytest_mock-3.15.1-py3-none-any.whl", hash = "sha256:0a25e2eb88fe5168d535041d09a4529a188176ae608a6d249ee65abc0949630d", size = 10095, upload-time = "2025-09-16T16:37:25.734Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f0/26/19cadc79a718c5edbec86fd4919a6b6d3f681039a2f6d66d14be94e75fb9/python_dotenv-1.2.1.tar.gz", hash = "sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6", size = 44221, upload-time = "2025-10-26T15:12:10.434Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl", hash = "sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61", size = 21230, upload-time = "2025-10-26T15:12:09.109Z" }, +] + +[[package]] +name = "requests" +version = "2.32.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, +] + +[[package]] +name = "ruff" +version = "0.14.14" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2e/06/f71e3a86b2df0dfa2d2f72195941cd09b44f87711cb7fa5193732cb9a5fc/ruff-0.14.14.tar.gz", hash = "sha256:2d0f819c9a90205f3a867dbbd0be083bee9912e170fd7d9704cc8ae45824896b", size = 4515732, upload-time = "2026-01-22T22:30:17.527Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/89/20a12e97bc6b9f9f68343952da08a8099c57237aef953a56b82711d55edd/ruff-0.14.14-py3-none-linux_armv6l.whl", hash = "sha256:7cfe36b56e8489dee8fbc777c61959f60ec0f1f11817e8f2415f429552846aed", size = 10467650, upload-time = "2026-01-22T22:30:08.578Z" }, + { url = "https://files.pythonhosted.org/packages/a3/b1/c5de3fd2d5a831fcae21beda5e3589c0ba67eec8202e992388e4b17a6040/ruff-0.14.14-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6006a0082336e7920b9573ef8a7f52eec837add1265cc74e04ea8a4368cd704c", size = 10883245, upload-time = "2026-01-22T22:30:04.155Z" }, + { url = "https://files.pythonhosted.org/packages/b8/7c/3c1db59a10e7490f8f6f8559d1db8636cbb13dccebf18686f4e3c9d7c772/ruff-0.14.14-py3-none-macosx_11_0_arm64.whl", hash = "sha256:026c1d25996818f0bf498636686199d9bd0d9d6341c9c2c3b62e2a0198b758de", size = 10231273, upload-time = "2026-01-22T22:30:34.642Z" }, + { url = "https://files.pythonhosted.org/packages/a1/6e/5e0e0d9674be0f8581d1f5e0f0a04761203affce3232c1a1189d0e3b4dad/ruff-0.14.14-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f666445819d31210b71e0a6d1c01e24447a20b85458eea25a25fe8142210ae0e", size = 10585753, upload-time = "2026-01-22T22:30:31.781Z" }, + { url = "https://files.pythonhosted.org/packages/23/09/754ab09f46ff1884d422dc26d59ba18b4e5d355be147721bb2518aa2a014/ruff-0.14.14-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c0f18b922c6d2ff9a5e6c3ee16259adc513ca775bcf82c67ebab7cbd9da5bc8", size = 10286052, upload-time = "2026-01-22T22:30:24.827Z" }, + { url = "https://files.pythonhosted.org/packages/c8/cc/e71f88dd2a12afb5f50733851729d6b571a7c3a35bfdb16c3035132675a0/ruff-0.14.14-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1629e67489c2dea43e8658c3dba659edbfd87361624b4040d1df04c9740ae906", size = 11043637, upload-time = "2026-01-22T22:30:13.239Z" }, + { url = "https://files.pythonhosted.org/packages/67/b2/397245026352494497dac935d7f00f1468c03a23a0c5db6ad8fc49ca3fb2/ruff-0.14.14-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:27493a2131ea0f899057d49d303e4292b2cae2bb57253c1ed1f256fbcd1da480", size = 12194761, upload-time = "2026-01-22T22:30:22.542Z" }, + { url = "https://files.pythonhosted.org/packages/5b/06/06ef271459f778323112c51b7587ce85230785cd64e91772034ddb88f200/ruff-0.14.14-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:01ff589aab3f5b539e35db38425da31a57521efd1e4ad1ae08fc34dbe30bd7df", size = 12005701, upload-time = "2026-01-22T22:30:20.499Z" }, + { url = "https://files.pythonhosted.org/packages/41/d6/99364514541cf811ccc5ac44362f88df66373e9fec1b9d1c4cc830593fe7/ruff-0.14.14-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1cc12d74eef0f29f51775f5b755913eb523546b88e2d733e1d701fe65144e89b", size = 11282455, upload-time = "2026-01-22T22:29:59.679Z" }, + { url = "https://files.pythonhosted.org/packages/ca/71/37daa46f89475f8582b7762ecd2722492df26421714a33e72ccc9a84d7a5/ruff-0.14.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb8481604b7a9e75eff53772496201690ce2687067e038b3cc31aaf16aa0b974", size = 11215882, upload-time = "2026-01-22T22:29:57.032Z" }, + { url = "https://files.pythonhosted.org/packages/2c/10/a31f86169ec91c0705e618443ee74ede0bdd94da0a57b28e72db68b2dbac/ruff-0.14.14-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:14649acb1cf7b5d2d283ebd2f58d56b75836ed8c6f329664fa91cdea19e76e66", size = 11180549, upload-time = "2026-01-22T22:30:27.175Z" }, + { url = "https://files.pythonhosted.org/packages/fd/1e/c723f20536b5163adf79bdd10c5f093414293cdf567eed9bdb7b83940f3f/ruff-0.14.14-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e8058d2145566510790eab4e2fad186002e288dec5e0d343a92fe7b0bc1b3e13", size = 10543416, upload-time = "2026-01-22T22:30:01.964Z" }, + { url = "https://files.pythonhosted.org/packages/3e/34/8a84cea7e42c2d94ba5bde1d7a4fae164d6318f13f933d92da6d7c2041ff/ruff-0.14.14-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e651e977a79e4c758eb807f0481d673a67ffe53cfa92209781dfa3a996cf8412", size = 10285491, upload-time = "2026-01-22T22:30:29.51Z" }, + { url = "https://files.pythonhosted.org/packages/55/ef/b7c5ea0be82518906c978e365e56a77f8de7678c8bb6651ccfbdc178c29f/ruff-0.14.14-py3-none-musllinux_1_2_i686.whl", hash = "sha256:cc8b22da8d9d6fdd844a68ae937e2a0adf9b16514e9a97cc60355e2d4b219fc3", size = 10733525, upload-time = "2026-01-22T22:30:06.499Z" }, + { url = "https://files.pythonhosted.org/packages/6a/5b/aaf1dfbcc53a2811f6cc0a1759de24e4b03e02ba8762daabd9b6bd8c59e3/ruff-0.14.14-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:16bc890fb4cc9781bb05beb5ab4cd51be9e7cb376bf1dd3580512b24eb3fda2b", size = 11315626, upload-time = "2026-01-22T22:30:36.848Z" }, + { url = "https://files.pythonhosted.org/packages/2c/aa/9f89c719c467dfaf8ad799b9bae0df494513fb21d31a6059cb5870e57e74/ruff-0.14.14-py3-none-win32.whl", hash = "sha256:b530c191970b143375b6a68e6f743800b2b786bbcf03a7965b06c4bf04568167", size = 10502442, upload-time = "2026-01-22T22:30:38.93Z" }, + { url = "https://files.pythonhosted.org/packages/87/44/90fa543014c45560cae1fffc63ea059fb3575ee6e1cb654562197e5d16fb/ruff-0.14.14-py3-none-win_amd64.whl", hash = "sha256:3dde1435e6b6fe5b66506c1dff67a421d0b7f6488d466f651c07f4cab3bf20fd", size = 11630486, upload-time = "2026-01-22T22:30:10.852Z" }, + { url = "https://files.pythonhosted.org/packages/9e/6a/40fee331a52339926a92e17ae748827270b288a35ef4a15c9c8f2ec54715/ruff-0.14.14-py3-none-win_arm64.whl", hash = "sha256:56e6981a98b13a32236a72a8da421d7839221fa308b223b9283312312e5ac76c", size = 10920448, upload-time = "2026-01-22T22:30:15.417Z" }, +] + +[[package]] +name = "scikit-learn" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "numpy" }, + { name = "scipy" }, + { name = "threadpoolctl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/d4/40988bf3b8e34feec1d0e6a051446b1f66225f8529b9309becaeef62b6c4/scikit_learn-1.8.0.tar.gz", hash = "sha256:9bccbb3b40e3de10351f8f5068e105d0f4083b1a65fa07b6634fbc401a6287fd", size = 7335585, upload-time = "2025-12-10T07:08:53.618Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/05/1af2c186174cc92dcab2233f327336058c077d38f6fe2aceb08e6ab4d509/scikit_learn-1.8.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c22a2da7a198c28dd1a6e1136f19c830beab7fdca5b3e5c8bba8394f8a5c45b3", size = 8528667, upload-time = "2025-12-10T07:08:27.541Z" }, + { url = "https://files.pythonhosted.org/packages/a8/25/01c0af38fe969473fb292bba9dc2b8f9b451f3112ff242c647fee3d0dfe7/scikit_learn-1.8.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:6b595b07a03069a2b1740dc08c2299993850ea81cce4fe19b2421e0c970de6b7", size = 8066524, upload-time = "2025-12-10T07:08:29.822Z" }, + { url = "https://files.pythonhosted.org/packages/be/ce/a0623350aa0b68647333940ee46fe45086c6060ec604874e38e9ab7d8e6c/scikit_learn-1.8.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:29ffc74089f3d5e87dfca4c2c8450f88bdc61b0fc6ed5d267f3988f19a1309f6", size = 8657133, upload-time = "2025-12-10T07:08:31.865Z" }, + { url = "https://files.pythonhosted.org/packages/b8/cb/861b41341d6f1245e6ca80b1c1a8c4dfce43255b03df034429089ca2a2c5/scikit_learn-1.8.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fb65db5d7531bccf3a4f6bec3462223bea71384e2cda41da0f10b7c292b9e7c4", size = 8923223, upload-time = "2025-12-10T07:08:34.166Z" }, + { url = "https://files.pythonhosted.org/packages/76/18/a8def8f91b18cd1ba6e05dbe02540168cb24d47e8dcf69e8d00b7da42a08/scikit_learn-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:56079a99c20d230e873ea40753102102734c5953366972a71d5cb39a32bc40c6", size = 8096518, upload-time = "2025-12-10T07:08:36.339Z" }, + { url = "https://files.pythonhosted.org/packages/d1/77/482076a678458307f0deb44e29891d6022617b2a64c840c725495bee343f/scikit_learn-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:3bad7565bc9cf37ce19a7c0d107742b320c1285df7aab1a6e2d28780df167242", size = 7754546, upload-time = "2025-12-10T07:08:38.128Z" }, + { url = "https://files.pythonhosted.org/packages/2d/d1/ef294ca754826daa043b2a104e59960abfab4cf653891037d19dd5b6f3cf/scikit_learn-1.8.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:4511be56637e46c25721e83d1a9cea9614e7badc7040c4d573d75fbe257d6fd7", size = 8848305, upload-time = "2025-12-10T07:08:41.013Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e2/b1f8b05138ee813b8e1a4149f2f0d289547e60851fd1bb268886915adbda/scikit_learn-1.8.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:a69525355a641bf8ef136a7fa447672fb54fe8d60cab5538d9eb7c6438543fb9", size = 8432257, upload-time = "2025-12-10T07:08:42.873Z" }, + { url = "https://files.pythonhosted.org/packages/26/11/c32b2138a85dcb0c99f6afd13a70a951bfdff8a6ab42d8160522542fb647/scikit_learn-1.8.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c2656924ec73e5939c76ac4c8b026fc203b83d8900362eb2599d8aee80e4880f", size = 8678673, upload-time = "2025-12-10T07:08:45.362Z" }, + { url = "https://files.pythonhosted.org/packages/c7/57/51f2384575bdec454f4fe4e7a919d696c9ebce914590abf3e52d47607ab8/scikit_learn-1.8.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15fc3b5d19cc2be65404786857f2e13c70c83dd4782676dd6814e3b89dc8f5b9", size = 8922467, upload-time = "2025-12-10T07:08:47.408Z" }, + { url = "https://files.pythonhosted.org/packages/35/4d/748c9e2872637a57981a04adc038dacaa16ba8ca887b23e34953f0b3f742/scikit_learn-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:00d6f1d66fbcf4eba6e356e1420d33cc06c70a45bb1363cd6f6a8e4ebbbdece2", size = 8774395, upload-time = "2025-12-10T07:08:49.337Z" }, + { url = "https://files.pythonhosted.org/packages/60/22/d7b2ebe4704a5e50790ba089d5c2ae308ab6bb852719e6c3bd4f04c3a363/scikit_learn-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:f28dd15c6bb0b66ba09728cf09fd8736c304be29409bd8445a080c1280619e8c", size = 8002647, upload-time = "2025-12-10T07:08:51.601Z" }, +] + +[[package]] +name = "scipy" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/56/3e/9cca699f3486ce6bc12ff46dc2031f1ec8eb9ccc9a320fdaf925f1417426/scipy-1.17.0.tar.gz", hash = "sha256:2591060c8e648d8b96439e111ac41fd8342fdeff1876be2e19dea3fe8930454e", size = 30396830, upload-time = "2026-01-10T21:34:23.009Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/2d/51006cd369b8e7879e1c630999a19d1fbf6f8b5ed3e33374f29dc87e53b3/scipy-1.17.0-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:c17514d11b78be8f7e6331b983a65a7f5ca1fd037b95e27b280921fe5606286a", size = 31346803, upload-time = "2026-01-10T21:28:57.24Z" }, + { url = "https://files.pythonhosted.org/packages/d6/2e/2349458c3ce445f53a6c93d4386b1c4c5c0c540917304c01222ff95ff317/scipy-1.17.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:4e00562e519c09da34c31685f6acc3aa384d4d50604db0f245c14e1b4488bfa2", size = 27967182, upload-time = "2026-01-10T21:29:04.107Z" }, + { url = "https://files.pythonhosted.org/packages/5e/7c/df525fbfa77b878d1cfe625249529514dc02f4fd5f45f0f6295676a76528/scipy-1.17.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:f7df7941d71314e60a481e02d5ebcb3f0185b8d799c70d03d8258f6c80f3d467", size = 20139125, upload-time = "2026-01-10T21:29:10.179Z" }, + { url = "https://files.pythonhosted.org/packages/33/11/fcf9d43a7ed1234d31765ec643b0515a85a30b58eddccc5d5a4d12b5f194/scipy-1.17.0-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:aabf057c632798832f071a8dde013c2e26284043934f53b00489f1773b33527e", size = 22443554, upload-time = "2026-01-10T21:29:15.888Z" }, + { url = "https://files.pythonhosted.org/packages/80/5c/ea5d239cda2dd3d31399424967a24d556cf409fbea7b5b21412b0fd0a44f/scipy-1.17.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a38c3337e00be6fd8a95b4ed66b5d988bac4ec888fd922c2ea9fe5fb1603dd67", size = 32757834, upload-time = "2026-01-10T21:29:23.406Z" }, + { url = "https://files.pythonhosted.org/packages/b8/7e/8c917cc573310e5dc91cbeead76f1b600d3fb17cf0969db02c9cf92e3cfa/scipy-1.17.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00fb5f8ec8398ad90215008d8b6009c9db9fa924fd4c7d6be307c6f945f9cd73", size = 34995775, upload-time = "2026-01-10T21:29:31.915Z" }, + { url = "https://files.pythonhosted.org/packages/c5/43/176c0c3c07b3f7df324e7cdd933d3e2c4898ca202b090bd5ba122f9fe270/scipy-1.17.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f2a4942b0f5f7c23c7cd641a0ca1955e2ae83dedcff537e3a0259096635e186b", size = 34841240, upload-time = "2026-01-10T21:29:39.995Z" }, + { url = "https://files.pythonhosted.org/packages/44/8c/d1f5f4b491160592e7f084d997de53a8e896a3ac01cd07e59f43ca222744/scipy-1.17.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:dbf133ced83889583156566d2bdf7a07ff89228fe0c0cb727f777de92092ec6b", size = 37394463, upload-time = "2026-01-10T21:29:48.723Z" }, + { url = "https://files.pythonhosted.org/packages/9f/ec/42a6657f8d2d087e750e9a5dde0b481fd135657f09eaf1cf5688bb23c338/scipy-1.17.0-cp314-cp314-win_amd64.whl", hash = "sha256:3625c631a7acd7cfd929e4e31d2582cf00f42fcf06011f59281271746d77e061", size = 37053015, upload-time = "2026-01-10T21:30:51.418Z" }, + { url = "https://files.pythonhosted.org/packages/27/58/6b89a6afd132787d89a362d443a7bddd511b8f41336a1ae47f9e4f000dc4/scipy-1.17.0-cp314-cp314-win_arm64.whl", hash = "sha256:9244608d27eafe02b20558523ba57f15c689357c85bdcfe920b1828750aa26eb", size = 24951312, upload-time = "2026-01-10T21:30:56.771Z" }, + { url = "https://files.pythonhosted.org/packages/e9/01/f58916b9d9ae0112b86d7c3b10b9e685625ce6e8248df139d0fcb17f7397/scipy-1.17.0-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:2b531f57e09c946f56ad0b4a3b2abee778789097871fc541e267d2eca081cff1", size = 31706502, upload-time = "2026-01-10T21:29:56.326Z" }, + { url = "https://files.pythonhosted.org/packages/59/8e/2912a87f94a7d1f8b38aabc0faf74b82d3b6c9e22be991c49979f0eceed8/scipy-1.17.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:13e861634a2c480bd237deb69333ac79ea1941b94568d4b0efa5db5e263d4fd1", size = 28380854, upload-time = "2026-01-10T21:30:01.554Z" }, + { url = "https://files.pythonhosted.org/packages/bd/1c/874137a52dddab7d5d595c1887089a2125d27d0601fce8c0026a24a92a0b/scipy-1.17.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:eb2651271135154aa24f6481cbae5cc8af1f0dd46e6533fb7b56aa9727b6a232", size = 20552752, upload-time = "2026-01-10T21:30:05.93Z" }, + { url = "https://files.pythonhosted.org/packages/3f/f0/7518d171cb735f6400f4576cf70f756d5b419a07fe1867da34e2c2c9c11b/scipy-1.17.0-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:c5e8647f60679790c2f5c76be17e2e9247dc6b98ad0d3b065861e082c56e078d", size = 22803972, upload-time = "2026-01-10T21:30:10.651Z" }, + { url = "https://files.pythonhosted.org/packages/7c/74/3498563a2c619e8a3ebb4d75457486c249b19b5b04a30600dfd9af06bea5/scipy-1.17.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5fb10d17e649e1446410895639f3385fd2bf4c3c7dfc9bea937bddcbc3d7b9ba", size = 32829770, upload-time = "2026-01-10T21:30:16.359Z" }, + { url = "https://files.pythonhosted.org/packages/48/d1/7b50cedd8c6c9d6f706b4b36fa8544d829c712a75e370f763b318e9638c1/scipy-1.17.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8547e7c57f932e7354a2319fab613981cde910631979f74c9b542bb167a8b9db", size = 35051093, upload-time = "2026-01-10T21:30:22.987Z" }, + { url = "https://files.pythonhosted.org/packages/e2/82/a2d684dfddb87ba1b3ea325df7c3293496ee9accb3a19abe9429bce94755/scipy-1.17.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:33af70d040e8af9d5e7a38b5ed3b772adddd281e3062ff23fec49e49681c38cf", size = 34909905, upload-time = "2026-01-10T21:30:28.704Z" }, + { url = "https://files.pythonhosted.org/packages/ef/5e/e565bd73991d42023eb82bb99e51c5b3d9e2c588ca9d4b3e2cc1d3ca62a6/scipy-1.17.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f9eb55bb97d00f8b7ab95cb64f873eb0bf54d9446264d9f3609130381233483f", size = 37457743, upload-time = "2026-01-10T21:30:34.819Z" }, + { url = "https://files.pythonhosted.org/packages/58/a8/a66a75c3d8f1fb2b83f66007d6455a06a6f6cf5618c3dc35bc9b69dd096e/scipy-1.17.0-cp314-cp314t-win_amd64.whl", hash = "sha256:1ff269abf702f6c7e67a4b7aad981d42871a11b9dd83c58d2d2ea624efbd1088", size = 37098574, upload-time = "2026-01-10T21:30:40.782Z" }, + { url = "https://files.pythonhosted.org/packages/56/a5/df8f46ef7da168f1bc52cd86e09a9de5c6f19cc1da04454d51b7d4f43408/scipy-1.17.0-cp314-cp314t-win_arm64.whl", hash = "sha256:031121914e295d9791319a1875444d55079885bbae5bdc9c5e0f2ee5f09d34ff", size = 25246266, upload-time = "2026-01-10T21:30:45.923Z" }, +] + +[[package]] +name = "seaborn" +version = "0.13.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "matplotlib" }, + { name = "numpy" }, + { name = "pandas" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/86/59/a451d7420a77ab0b98f7affa3a1d78a313d2f7281a57afb1a34bae8ab412/seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7", size = 1457696, upload-time = "2024-01-25T13:21:52.551Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987", size = 294914, upload-time = "2024-01-25T13:21:49.598Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "soupsieve" +version = "2.8.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/ae/2d9c981590ed9999a0d91755b47fc74f74de286b0f5cee14c9269041e6c4/soupsieve-2.8.3.tar.gz", hash = "sha256:3267f1eeea4251fb42728b6dfb746edc9acaffc4a45b27e19450b676586e8349", size = 118627, upload-time = "2026-01-20T04:27:02.457Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl", hash = "sha256:ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95", size = 37016, upload-time = "2026-01-20T04:27:01.012Z" }, +] + +[[package]] +name = "sqlalchemy" +version = "2.0.46" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "greenlet", marker = "platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/aa/9ce0f3e7a9829ead5c8ce549392f33a12c4555a6c0609bb27d882e9c7ddf/sqlalchemy-2.0.46.tar.gz", hash = "sha256:cf36851ee7219c170bb0793dbc3da3e80c582e04a5437bc601bfe8c85c9216d7", size = 9865393, upload-time = "2026-01-21T18:03:45.119Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/f8/5ecdfc73383ec496de038ed1614de9e740a82db9ad67e6e4514ebc0708a3/sqlalchemy-2.0.46-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:56bdd261bfd0895452006d5316cbf35739c53b9bb71a170a331fa0ea560b2ada", size = 2152079, upload-time = "2026-01-21T19:05:58.477Z" }, + { url = "https://files.pythonhosted.org/packages/e5/bf/eba3036be7663ce4d9c050bc3d63794dc29fbe01691f2bf5ccb64e048d20/sqlalchemy-2.0.46-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:33e462154edb9493f6c3ad2125931e273bbd0be8ae53f3ecd1c161ea9a1dd366", size = 3272216, upload-time = "2026-01-21T18:46:52.634Z" }, + { url = "https://files.pythonhosted.org/packages/05/45/1256fb597bb83b58a01ddb600c59fe6fdf0e5afe333f0456ed75c0f8d7bd/sqlalchemy-2.0.46-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9bcdce05f056622a632f1d44bb47dbdb677f58cad393612280406ce37530eb6d", size = 3277208, upload-time = "2026-01-21T18:40:16.38Z" }, + { url = "https://files.pythonhosted.org/packages/d9/a0/2053b39e4e63b5d7ceb3372cface0859a067c1ddbd575ea7e9985716f771/sqlalchemy-2.0.46-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8e84b09a9b0f19accedcbeff5c2caf36e0dd537341a33aad8d680336152dc34e", size = 3221994, upload-time = "2026-01-21T18:46:54.622Z" }, + { url = "https://files.pythonhosted.org/packages/1e/87/97713497d9502553c68f105a1cb62786ba1ee91dea3852ae4067ed956a50/sqlalchemy-2.0.46-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4f52f7291a92381e9b4de9050b0a65ce5d6a763333406861e33906b8aa4906bf", size = 3243990, upload-time = "2026-01-21T18:40:18.253Z" }, + { url = "https://files.pythonhosted.org/packages/a8/87/5d1b23548f420ff823c236f8bea36b1a997250fd2f892e44a3838ca424f4/sqlalchemy-2.0.46-cp314-cp314-win32.whl", hash = "sha256:70ed2830b169a9960193f4d4322d22be5c0925357d82cbf485b3369893350908", size = 2114215, upload-time = "2026-01-21T18:42:55.232Z" }, + { url = "https://files.pythonhosted.org/packages/3a/20/555f39cbcf0c10cf452988b6a93c2a12495035f68b3dbd1a408531049d31/sqlalchemy-2.0.46-cp314-cp314-win_amd64.whl", hash = "sha256:3c32e993bc57be6d177f7d5d31edb93f30726d798ad86ff9066d75d9bf2e0b6b", size = 2139867, upload-time = "2026-01-21T18:42:56.474Z" }, + { url = "https://files.pythonhosted.org/packages/3e/f0/f96c8057c982d9d8a7a68f45d69c674bc6f78cad401099692fe16521640a/sqlalchemy-2.0.46-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4dafb537740eef640c4d6a7c254611dca2df87eaf6d14d6a5fca9d1f4c3fc0fa", size = 3561202, upload-time = "2026-01-21T18:33:10.337Z" }, + { url = "https://files.pythonhosted.org/packages/d7/53/3b37dda0a5b137f21ef608d8dfc77b08477bab0fe2ac9d3e0a66eaeab6fc/sqlalchemy-2.0.46-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:42a1643dc5427b69aca967dae540a90b0fbf57eaf248f13a90ea5930e0966863", size = 3526296, upload-time = "2026-01-21T18:45:12.657Z" }, + { url = "https://files.pythonhosted.org/packages/33/75/f28622ba6dde79cd545055ea7bd4062dc934e0621f7b3be2891f8563f8de/sqlalchemy-2.0.46-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ff33c6e6ad006bbc0f34f5faf941cfc62c45841c64c0a058ac38c799f15b5ede", size = 3470008, upload-time = "2026-01-21T18:33:11.725Z" }, + { url = "https://files.pythonhosted.org/packages/a9/42/4afecbbc38d5e99b18acef446453c76eec6fbd03db0a457a12a056836e22/sqlalchemy-2.0.46-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:82ec52100ec1e6ec671563bbd02d7c7c8d0b9e71a0723c72f22ecf52d1755330", size = 3476137, upload-time = "2026-01-21T18:45:15.001Z" }, + { url = "https://files.pythonhosted.org/packages/fc/a1/9c4efa03300926601c19c18582531b45aededfb961ab3c3585f1e24f120b/sqlalchemy-2.0.46-py3-none-any.whl", hash = "sha256:f9c11766e7e7c0a2767dda5acb006a118640c9fc0a4104214b96269bfb78399e", size = 1937882, upload-time = "2026-01-21T18:22:10.456Z" }, +] + +[[package]] +name = "threadpoolctl" +version = "3.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload-time = "2025-03-13T13:49:23.031Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, +] + +[[package]] +name = "tzdata" +version = "2025.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/c202b344c5ca7daf398f3b8a477eeb205cf3b6f32e7ec3a6bac0629ca975/tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7", size = 196772, upload-time = "2025-12-13T17:45:35.667Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1", size = 348521, upload-time = "2025-12-13T17:45:33.889Z" }, +] + +[[package]] +name = "urllib3" +version = "2.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" }, +] + +[[package]] +name = "yarl" +version = "1.22.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "multidict" }, + { name = "propcache" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/63/0c6ebca57330cd313f6102b16dd57ffaf3ec4c83403dcb45dbd15c6f3ea1/yarl-1.22.0.tar.gz", hash = "sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71", size = 187169, upload-time = "2025-10-06T14:12:55.963Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/b3/e20ef504049f1a1c54a814b4b9bed96d1ac0e0610c3b4da178f87209db05/yarl-1.22.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:34b36c2c57124530884d89d50ed2c1478697ad7473efd59cfd479945c95650e4", size = 140520, upload-time = "2025-10-06T14:11:15.465Z" }, + { url = "https://files.pythonhosted.org/packages/e4/04/3532d990fdbab02e5ede063676b5c4260e7f3abea2151099c2aa745acc4c/yarl-1.22.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:0dd9a702591ca2e543631c2a017e4a547e38a5c0f29eece37d9097e04a7ac683", size = 93504, upload-time = "2025-10-06T14:11:17.106Z" }, + { url = "https://files.pythonhosted.org/packages/11/63/ff458113c5c2dac9a9719ac68ee7c947cb621432bcf28c9972b1c0e83938/yarl-1.22.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:594fcab1032e2d2cc3321bb2e51271e7cd2b516c7d9aee780ece81b07ff8244b", size = 94282, upload-time = "2025-10-06T14:11:19.064Z" }, + { url = "https://files.pythonhosted.org/packages/a7/bc/315a56aca762d44a6aaaf7ad253f04d996cb6b27bad34410f82d76ea8038/yarl-1.22.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3d7a87a78d46a2e3d5b72587ac14b4c16952dd0887dbb051451eceac774411e", size = 372080, upload-time = "2025-10-06T14:11:20.996Z" }, + { url = "https://files.pythonhosted.org/packages/3f/3f/08e9b826ec2e099ea6e7c69a61272f4f6da62cb5b1b63590bb80ca2e4a40/yarl-1.22.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:852863707010316c973162e703bddabec35e8757e67fcb8ad58829de1ebc8590", size = 338696, upload-time = "2025-10-06T14:11:22.847Z" }, + { url = "https://files.pythonhosted.org/packages/e3/9f/90360108e3b32bd76789088e99538febfea24a102380ae73827f62073543/yarl-1.22.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:131a085a53bfe839a477c0845acf21efc77457ba2bcf5899618136d64f3303a2", size = 387121, upload-time = "2025-10-06T14:11:24.889Z" }, + { url = "https://files.pythonhosted.org/packages/98/92/ab8d4657bd5b46a38094cfaea498f18bb70ce6b63508fd7e909bd1f93066/yarl-1.22.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:078a8aefd263f4d4f923a9677b942b445a2be970ca24548a8102689a3a8ab8da", size = 394080, upload-time = "2025-10-06T14:11:27.307Z" }, + { url = "https://files.pythonhosted.org/packages/f5/e7/d8c5a7752fef68205296201f8ec2bf718f5c805a7a7e9880576c67600658/yarl-1.22.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784", size = 372661, upload-time = "2025-10-06T14:11:29.387Z" }, + { url = "https://files.pythonhosted.org/packages/b6/2e/f4d26183c8db0bb82d491b072f3127fb8c381a6206a3a56332714b79b751/yarl-1.22.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:68986a61557d37bb90d3051a45b91fa3d5c516d177dfc6dd6f2f436a07ff2b6b", size = 364645, upload-time = "2025-10-06T14:11:31.423Z" }, + { url = "https://files.pythonhosted.org/packages/80/7c/428e5812e6b87cd00ee8e898328a62c95825bf37c7fa87f0b6bb2ad31304/yarl-1.22.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:4792b262d585ff0dff6bcb787f8492e40698443ec982a3568c2096433660c694", size = 355361, upload-time = "2025-10-06T14:11:33.055Z" }, + { url = "https://files.pythonhosted.org/packages/ec/2a/249405fd26776f8b13c067378ef4d7dd49c9098d1b6457cdd152a99e96a9/yarl-1.22.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ebd4549b108d732dba1d4ace67614b9545b21ece30937a63a65dd34efa19732d", size = 381451, upload-time = "2025-10-06T14:11:35.136Z" }, + { url = "https://files.pythonhosted.org/packages/67/a8/fb6b1adbe98cf1e2dd9fad71003d3a63a1bc22459c6e15f5714eb9323b93/yarl-1.22.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f87ac53513d22240c7d59203f25cc3beac1e574c6cd681bbfd321987b69f95fd", size = 383814, upload-time = "2025-10-06T14:11:37.094Z" }, + { url = "https://files.pythonhosted.org/packages/d9/f9/3aa2c0e480fb73e872ae2814c43bc1e734740bb0d54e8cb2a95925f98131/yarl-1.22.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da", size = 370799, upload-time = "2025-10-06T14:11:38.83Z" }, + { url = "https://files.pythonhosted.org/packages/50/3c/af9dba3b8b5eeb302f36f16f92791f3ea62e3f47763406abf6d5a4a3333b/yarl-1.22.0-cp314-cp314-win32.whl", hash = "sha256:6a635ea45ba4ea8238463b4f7d0e721bad669f80878b7bfd1f89266e2ae63da2", size = 82990, upload-time = "2025-10-06T14:11:40.624Z" }, + { url = "https://files.pythonhosted.org/packages/ac/30/ac3a0c5bdc1d6efd1b41fa24d4897a4329b3b1e98de9449679dd327af4f0/yarl-1.22.0-cp314-cp314-win_amd64.whl", hash = "sha256:0d6e6885777af0f110b0e5d7e5dda8b704efed3894da26220b7f3d887b839a79", size = 88292, upload-time = "2025-10-06T14:11:42.578Z" }, + { url = "https://files.pythonhosted.org/packages/df/0a/227ab4ff5b998a1b7410abc7b46c9b7a26b0ca9e86c34ba4b8d8bc7c63d5/yarl-1.22.0-cp314-cp314-win_arm64.whl", hash = "sha256:8218f4e98d3c10d683584cb40f0424f4b9fd6e95610232dd75e13743b070ee33", size = 82888, upload-time = "2025-10-06T14:11:44.863Z" }, + { url = "https://files.pythonhosted.org/packages/06/5e/a15eb13db90abd87dfbefb9760c0f3f257ac42a5cac7e75dbc23bed97a9f/yarl-1.22.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:45c2842ff0e0d1b35a6bf1cd6c690939dacb617a70827f715232b2e0494d55d1", size = 146223, upload-time = "2025-10-06T14:11:46.796Z" }, + { url = "https://files.pythonhosted.org/packages/18/82/9665c61910d4d84f41a5bf6837597c89e665fa88aa4941080704645932a9/yarl-1.22.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d947071e6ebcf2e2bee8fce76e10faca8f7a14808ca36a910263acaacef08eca", size = 95981, upload-time = "2025-10-06T14:11:48.845Z" }, + { url = "https://files.pythonhosted.org/packages/5d/9a/2f65743589809af4d0a6d3aa749343c4b5f4c380cc24a8e94a3c6625a808/yarl-1.22.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:334b8721303e61b00019474cc103bdac3d7b1f65e91f0bfedeec2d56dfe74b53", size = 97303, upload-time = "2025-10-06T14:11:50.897Z" }, + { url = "https://files.pythonhosted.org/packages/b0/ab/5b13d3e157505c43c3b43b5a776cbf7b24a02bc4cccc40314771197e3508/yarl-1.22.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e7ce67c34138a058fd092f67d07a72b8e31ff0c9236e751957465a24b28910c", size = 361820, upload-time = "2025-10-06T14:11:52.549Z" }, + { url = "https://files.pythonhosted.org/packages/fb/76/242a5ef4677615cf95330cfc1b4610e78184400699bdda0acb897ef5e49a/yarl-1.22.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d77e1b2c6d04711478cb1c4ab90db07f1609ccf06a287d5607fcd90dc9863acf", size = 323203, upload-time = "2025-10-06T14:11:54.225Z" }, + { url = "https://files.pythonhosted.org/packages/8c/96/475509110d3f0153b43d06164cf4195c64d16999e0c7e2d8a099adcd6907/yarl-1.22.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4647674b6150d2cae088fc07de2738a84b8bcedebef29802cf0b0a82ab6face", size = 363173, upload-time = "2025-10-06T14:11:56.069Z" }, + { url = "https://files.pythonhosted.org/packages/c9/66/59db471aecfbd559a1fd48aedd954435558cd98c7d0da8b03cc6c140a32c/yarl-1.22.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:efb07073be061c8f79d03d04139a80ba33cbd390ca8f0297aae9cce6411e4c6b", size = 373562, upload-time = "2025-10-06T14:11:58.783Z" }, + { url = "https://files.pythonhosted.org/packages/03/1f/c5d94abc91557384719da10ff166b916107c1b45e4d0423a88457071dd88/yarl-1.22.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486", size = 339828, upload-time = "2025-10-06T14:12:00.686Z" }, + { url = "https://files.pythonhosted.org/packages/5f/97/aa6a143d3afba17b6465733681c70cf175af89f76ec8d9286e08437a7454/yarl-1.22.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:33e32a0dd0c8205efa8e83d04fc9f19313772b78522d1bdc7d9aed706bfd6138", size = 347551, upload-time = "2025-10-06T14:12:02.628Z" }, + { url = "https://files.pythonhosted.org/packages/43/3c/45a2b6d80195959239a7b2a8810506d4eea5487dce61c2a3393e7fc3c52e/yarl-1.22.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:bf4a21e58b9cde0e401e683ebd00f6ed30a06d14e93f7c8fd059f8b6e8f87b6a", size = 334512, upload-time = "2025-10-06T14:12:04.871Z" }, + { url = "https://files.pythonhosted.org/packages/86/a0/c2ab48d74599c7c84cb104ebd799c5813de252bea0f360ffc29d270c2caa/yarl-1.22.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:e4b582bab49ac33c8deb97e058cd67c2c50dac0dd134874106d9c774fd272529", size = 352400, upload-time = "2025-10-06T14:12:06.624Z" }, + { url = "https://files.pythonhosted.org/packages/32/75/f8919b2eafc929567d3d8411f72bdb1a2109c01caaab4ebfa5f8ffadc15b/yarl-1.22.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:0b5bcc1a9c4839e7e30b7b30dd47fe5e7e44fb7054ec29b5bb8d526aa1041093", size = 357140, upload-time = "2025-10-06T14:12:08.362Z" }, + { url = "https://files.pythonhosted.org/packages/cf/72/6a85bba382f22cf78add705d8c3731748397d986e197e53ecc7835e76de7/yarl-1.22.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c", size = 341473, upload-time = "2025-10-06T14:12:10.994Z" }, + { url = "https://files.pythonhosted.org/packages/35/18/55e6011f7c044dc80b98893060773cefcfdbf60dfefb8cb2f58b9bacbd83/yarl-1.22.0-cp314-cp314t-win32.whl", hash = "sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e", size = 89056, upload-time = "2025-10-06T14:12:13.317Z" }, + { url = "https://files.pythonhosted.org/packages/f9/86/0f0dccb6e59a9e7f122c5afd43568b1d31b8ab7dda5f1b01fb5c7025c9a9/yarl-1.22.0-cp314-cp314t-win_amd64.whl", hash = "sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27", size = 96292, upload-time = "2025-10-06T14:12:15.398Z" }, + { url = "https://files.pythonhosted.org/packages/48/b7/503c98092fb3b344a179579f55814b613c1fbb1c23b3ec14a7b008a66a6e/yarl-1.22.0-cp314-cp314t-win_arm64.whl", hash = "sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1", size = 85171, upload-time = "2025-10-06T14:12:16.935Z" }, + { url = "https://files.pythonhosted.org/packages/73/ae/b48f95715333080afb75a4504487cbe142cae1268afc482d06692d605ae6/yarl-1.22.0-py3-none-any.whl", hash = "sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff", size = 46814, upload-time = "2025-10-06T14:12:53.872Z" }, +] From 882dbe53fd168702621344cbb894886a6c49867a Mon Sep 17 00:00:00 2001 From: PranavU-Coder Date: Thu, 5 Feb 2026 20:13:45 +0530 Subject: [PATCH 2/3] docs: updating README.md, CONTRIBUTING.md for the latest release, added source-code link to discord-bot --- CONTRIBUTING.md | 141 ++++++++++++++++++++++++++++----- README.md | 75 +++++++++++++++--- main.py | 37 +++++---- results/Pilani_CSE_Trend.png | Bin 13988 -> 35520 bytes results/Pilani_Most_Likely.png | Bin 56398 -> 55986 bytes results/Pilani_Trend.png | Bin 75604 -> 50540 bytes 6 files changed, 207 insertions(+), 46 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c9ee536..522ec01 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,50 +1,149 @@ -# Written on: 25/12/2025 +# Contributing to Bitsatards Bot -## Contributions +## Code-Contributions -I think this goes without saying but still, you need to have a GitHub account to make any sort of contributions to this codebase which also applies to creating issues as well. +### last written on 5/2/2026 -If this is your time using GitHub or making code-contributions to open-source projects, no worries! again I am listing how you can still contribute to this project: +Thank you for considering to contribute, Whether you are fixing a bug or adding a new feature, your help is appreciated highly. -1. proceed to fork this [repository](https://github.com/PranavU-Coder/bitsatards_bot) -2. please navigate repositories listed under your profile where you should be able to find this codebase listed as a 'fork', clone that repository under **YOUR** profile and start working on it locally. -3. install all necessary dependencies by running: +If you are new to open-source or GitHub, follow the steps below to get started -> - ```bash - pip install -r requirements.txt - ``` +1.proceed to fork this [repository](https://github.com/PranavU-Coder/bitsatards_bot) and clone it locally: -4. once any changes are made to the codebase from your end, make sure to 'commit' those changes to your forked repository, once the codebase you have modified seems aptly ready for being pushed to main codebase (the one which is under mine) proceed to create a 'pull-request'. +```bash +git clone https://github.com/{replace with your username}/bitsatards_bot.git +cd bitsatards_bot +``` -**PLEASE NOTE** that a pull-request will be accepted only and only if the code changes have been tested and were successful locally otherwise it will be **CLOSED**, please remove comments and any irrelevant statements that would be asked in template.md at time of creation of pull-request +2.create a branch for your purpose of work: feat/fix: + +```bash +git checkout -b feat/feat-name +# or +git checkout -b fix/bug-name +``` + +3.this project has **recently** migrated from pip to uv thus it is important to have uv installed on your system. + +```bash +uv sync +``` + +This command will automatically create a virtual environment and install all required packages listed in the uv.lock file. + +3.Dev Standards: + +(1) Run + +```bash +uv run ruff format . +``` + +before committing. + +(2) Ensure + +```bash +uv run ruff check . +``` + +passes without errors. + +(3) Run tests locally + +```bash +uv run pytest +``` + +A passing build is required for any merge. + +(4) Commit Messages: Conventional Commits Please, prefix your messages accordingly: + +```text + feat: for new features. + fix: for bug fixes. + docs: for documentation/non-code changes. +``` + +4.commit your changes to your branch. + +push your changes to your fork. + +open a Pull Request (PR) against the master branch of the original repository. + +Wait for the automated tests to pass. Once reviewed they will be merged. + +Make sure to appropriately add/remove lines of the PULL_REQUEST_TEMPLATE.md which align to your changes. image -at the moment, I alone am the codeowner of this codebase hence mostly it will be reviewing the pull-requests and approve if it fits with the existing codebase, assuming the scope of this project increases, I'm more than happy to give ownership of this codebase to any enthusiastic contributor who is willing to do code-reviews. +At the moment, I alone am the codeowner of this codebase hence mostly it will be reviewing the pull-requests and approve if it fits with the existing codebase, assuming the scope of this project increases, I'm more than happy to give ownership of this codebase to any enthusiastic contributor who is willing to do code-reviews. -please make sure that you are adding docstrings underneath your functions or any classes if you are planning to define as it will be easier for other developers to read and understand, similarly apply strong type annotations wherever possible, although again honestly at the time of writing this, I myself am guilty of not doing this so I will be working on this as well. +More Recently, I have installed CodeRabbit on this repository to do code-reviews alongside me. -There are plans of integrating unit-tests using pytest to ensure any code-change can handle edge-cases regardless of what the diffs would be. +Feature Documentation: + +Please add docstrings underneath any new functions or classes. While much of the code is still being documented, it would be a good precedent in terms of open-source projects. + +Please consider using strong type hinting for all function signatures and variables. I am of the opinion and in the movement to make this project to be in the direction of 100%-type safe ## Features & Bug Reports -Starting with a pretty obvious phase of development, which is what features or problems will this project be undertaking so to put it shortly, please check the [roadmap](https://github.com/users/PranavU-Coder/projects/9) page to get an idea of what is being actively worked on and what would be worked on in the future. +Before contributing, review the [Roadmap](https://github.com/users/PranavU-Coder/projects/9) first to understand current priorities and exisitng issues that are being worked on. + +For raising issues, they must follow these criterias to be considered: -if you want any feature to be implemented please state **explicitly why exactly it is important** under the [issues](https://github.com/PranavU-Coder/bitsatards_bot/issues) tab by creating an issue under the same mentioned, similarly in bug-related issues please state where exactly is the bug occurring and how to reproduce from the developer's side so it can be worked upon to fix it. +Feature Requests: You must explicitly justify why the feature is necessary to be implemented. + +Bug Reports: You must provide a clear "Steps to Reproduce" section (check figure below). If the developer cannot replicate the bug based on your description, the issue will be marked as invalid. + +Out of Scope (These will not be considered): Do **NOT** raise issues regarding the website's UI or functionality. This codebase is a **MONO-REPO** and is hence independent of the web project; such issues will be closed without review. ![issues](https://github.com/user-attachments/assets/66934dc7-b137-4469-a8f5-6272a7681f38) **PLEASE NOTE**: -(1) any issue with website's ui or functionality shouldn't be raised and as such any issues raised on that request will **NOT** be reviewed and closed as this codebase is independent from the one in which the website is going to be made in. +This bot is currently self-hosted through my old laptop which doubles as a server rather than a third-party cloud-service provider which leads to uptime problems. + +With hostel network dependencies, there is no way to resolve downtime-issues specially if I am not near the laptop which is hosting the bot. -(2) discord bot being inactive at some portions of the day, now the reason why I chose to clear this up right now is because **I AM NOT USING ANY THIRD-PARTY CLOUD SERVICE PROVIDER** for the continuous deployment and execution of the discord bot and am rather using my old laptop as a full-time server to run my programs 24/7 out of which this bot is one of them, once I return back to hostel there would be issues of running this bot particularly given how bad my hostel wifi is (since it frequently goes out) and as such if I'm not available when this occurs there is no way for me to fix it immediately. +**Possible Solution**: While orchestration for backup service providers is a goal (using good MLOps principles), it has not yet been implemented. -there is a fix to the second issue by adopting good MLOps principles and orchestrating deployment of a backup service provider when one goes out, however at the time of writing this I'm not skilled enough to navigate through this and implement it. +Please do **NOT** open issues regarding temporary bot inactivity. These are known infrastructure limitations, not code problems. ## Pipeline -The idea of execution-workflow will be greatly discussed in the second-version/iteration of this bot to ensure other open-source maintainers who might not be traditionally from an ML or a DS background can still maintain this codebase actively without much external help/assistance. +The project follows a structured execution workflow designed for maintainability. Even without a massive background in Data Science, contributors can help updating the bot's by interacting with scripts: + +### Data-Acquisition && Machine-Learning + +**data_pipeline.py**: This scrapes official BITS-admission sites containing cutoff scores for particular years and converts raw data into standardized CSV files which can be then put in for model-training. + +**helper_notebook.ipynb**: This contains code for the "model"—currently focused on min-max scaling applications so ... it is more of a statistical-validator than a traditional machine-learning model to process cutoff trends. + +**predictions.py**: This bridges between data-science and ML aspect of this repository with the production-aspect. It takes the constraints (user inputs) and applies the model logic to generate results. Note: This script is currently volatile and subject to change as the model logic matures. + +### Production + +**main.py**: Contains actual code for the bitsatards-discord-bot. It handles events, commands, and integrates with the prediction and database services. + +analytics.py: Handles data visualization for the bot's features. + +### Databases + +/services and /database concerns with the time-tracking feature which is a misc. feature of this bot using postgres as its database and SQLAlchemy as ORM. There is quite a bit of work to do here, but that will be halted till 3.0.0 release. + +**init_db.py** helps initializing database on your system with necessary columns. + +How to contribute to the flow: + +If you are adding a feature, identify where it sits. For example: + +A new way to view/formulate data -> analytics.py. + +Model-Improvement -> helper_notebook.ipynb + +Bot Command -> Modify main.py. ## Discussions diff --git a/README.md b/README.md index d411bd1..1c996eb 100644 --- a/README.md +++ b/README.md @@ -1,43 +1,96 @@ +![License](https://img.shields.io/github/license/PranavU-Coder/bitsatards_bot) +![Python Version](https://img.shields.io/badge/python-3.14-blue) +![Package Manager](https://img.shields.io/badge/manager-uv-purple) +![Linter](https://img.shields.io/badge/linter-ruff-red) +![Status](https://img.shields.io/badge/Status-Stable-success) + # Introducing Bitsatards-Bot This src aims to be the discord bot for r/Bitsatards server, this bot serves the purpose of predicting cutoffs for upcoming bitsat examinations on basis of past-year trends (taking account from 2013) and can supports all of the commands which was planned in the second release (9/1/26): -1. plot < campus > - plots the scores of past years cutoffs across diff campuses. -2. plot < campus >, < branch > - plots the cutoff values wrt a branch of a campus that is required by the end-user. -3. predict < campus (optional) >, < scenario (optional) > - sends the user the predicted cutoff values for branches of all campuses (truncated due constraints) or specific campus based on worst, best or most-likely scenario. -4. resources - sends user resources for preparation of this examination. -5. help - shows all possible commands that are available with example implementation in event that output is not available to the user for some unforseen reason. +| Category | Command | Usage Example | Description | +| :--- | :--- | :--- | :--- | +| **Data Viz** | `!!plot` | `!!plot Pilani` | Generates a trend plot for all branches in a specific campus. | +| | `!!plot-branch` | `!!plot-branch CSE Pilani` | Plots historical cutoffs for a specific branch at a specific campus. | +| | `!!select` | `!!select 2024 Goa` | Fetches and displays a snapshot of cutoffs for a specific year. | +| **Predictions** | `!!predict` | `!!predict Pilani worst` | Returns 2026 predictions based on Worst, Best, or Most-Likely scenarios. | +| **Exam Info** | `!!sy` | `!!sy` | Provides the official BITSAT syllabus PDF link. | +| | `!!da` | `!!da` | Displays important dates for BITSAT 2026 Session 1 & 2. | +| | `!!resources` | `!!resources` | Links to the Reddit wiki and curated Discord resource channels. | +| **Tracking** | `!!time` | `!!time` | Shows a countdown to your saved exam date. | +| | `!!time -s` | `!!time -s 15-04-2026` | Sets/Updates your personal BITSAT exam date. | +| | `!!time -r` | `!!time -r` | Resets your saved exam date from the database. | +| **Misc** | `!!ypt` | `!!ypt` | Shares the Yeolpumta (YPT) study group link and password. | Currently the bot is deployed through my second laptop which doubles as a server purely to run programs 24/7 to avoid any middleman (cloud service providers) and charges. ## Results Thus Far! ![campus-trend](results/Pilani_Trend.png) + *Pilani campus plot from 2013* ------------------------------------------------------------------------------ ![branch-trend](results/Pilani_CSE_Trend.png) + *CSE plot for Pilani from 2013* ------------------------------------------------------------------------------ ![most-likely-predictions](results/Pilani_Most_Likely.png) + *probable values for Pilani campus in 2026* -The model in effect for prediction is a polynomial-regression of degree:2 which was the best methodology among every other approach. +The model in effect for prediction is a polynomial-regression of degree:2, this approach provided the lowest mean squared error compared to other linear/ensemble approaches. + +> [!NOTE] +> I would like to clarify that this acts more as a statistical-validator than a plain machine-learning model as not much variance factors and features have been computed yet (discussed below). + +## Tech Stack + +[![Python](https://img.shields.io/badge/Python-3.14-3776AB?style=for-the-badge&logo=python&logoColor=white)](https://python.org) +[![Discord.py](https://img.shields.io/badge/Discord.py-2.6.4-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discordpy.readthedocs.io/) +[![UV](https://img.shields.io/badge/Package_Manager-UV-8A2BE2?style=for-the-badge&logo=astral&logoColor=white)](https://github.com/astral-sh/uv) +[![Pandas](https://img.shields.io/badge/Pandas-3.0.0-150458?style=for-the-badge&logo=pandas&logoColor=white)](https://pandas.pydata.org/) +[![Scikit-Learn](https://img.shields.io/badge/Scikit--Learn-1.8.0-F7931E?style=for-the-badge&logo=scikit-learn&logoColor=white)](https://scikit-learn.org/) +[![Matplotlib](https://img.shields.io/badge/Matplotlib-3.10.8-ffffff?style=for-the-badge&logo=matplotlib&logoColor=black)](https://matplotlib.org/) +[![Numpy](https://img.shields.io/badge/Numpy-2.4.2-013243?style=for-the-badge&logo=numpy&logoColor=white)](https://numpy.org/) +[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-16-4169E1?style=for-the-badge&logo=postgresql&logoColor=white)](https://www.postgresql.org/) +[![SQLAlchemy](https://img.shields.io/badge/SQLAlchemy-2.0.46-D71F00?style=for-the-badge&logo=sqlalchemy&logoColor=white)](https://www.sqlalchemy.org/) +[![Ruff](https://img.shields.io/badge/Linter-Ruff-D7FF64?style=for-the-badge&logo=ruff&logoColor=black)](https://github.com/astral-sh/ruff) +[![Pytest](https://img.shields.io/badge/Testing-Pytest-0A9EDC?style=for-the-badge&logo=pytest&logoColor=white)](https://docs.pytest.org/) ## Future Plans There are plans to experiment by finding causation and co-relations with cutoffs of other entrance examinations such as: JEE however I don't think I will be able to complete it in time of announcement of this project. -The dataset is as follows for to work with: https://www.kaggle.com/datasets/pranavunni/bitsat-cutoff-dataset-2017-2025 for anyone willing to have their own spin-off to this. +The dataset is as follows for to work with: [dataset](!https://www.kaggle.com/datasets/pranavunni/bitsat-cutoff-dataset-2017-2025) for anyone willing to have their own spin-off to this. By mid-february 2026: -1. a general-purpose website will be made public for everyone, in specific targetting people who prefer not using discord. -2. rewriting wiki which explains the thought process, procedure and everything that went in to this project (which will go the working/ section of the website as well) and a reformat the existing wiki to CONTRIBUTIONS.md which will serve as a general guideline on contributing without breaking src. +1. a general-purpose website will be made public for everyone, in specific targetting people who prefer not using discord (We are almost there!) + +After public-announcement & promotion, I will be back to implement various features and factors I have pinpointed thus far which can help in model-predictions more than anything. + +> ## Contributing +> This project is developed hoping to be a community effort. If you'd like to improve the model or add features, please check our [CONTRIBUTING.md](./CONTRIBUTING.md) for general guidelines. +> +> --- +> *Licensed under Apache 2.0* + + + + + + Star History Chart + + + +Contributors till now: -## Apache 2.0 License + + + -Since this repository is licensed under Apache 2.0 license, we welcome collaborations and any intentions to help the community grow. +Made with [contrib.rocks](https://contrib.rocks). \ No newline at end of file diff --git a/main.py b/main.py index 5df23cd..fb49203 100644 --- a/main.py +++ b/main.py @@ -303,6 +303,13 @@ async def resources(ctx): ) +@bot.command() +async def src(ctx): + await ctx.send( + "please consider starring this project if you liked it: https://github.com/PranavU-Coder/bitsatards_bot" + ) + + @bot.command() async def time(ctx, flag: str = None, *, date_str: str = None): """ @@ -364,31 +371,33 @@ async def help(ctx): This bot helps you get a rough idea of BITSAT exam cutoffs for the upcoming year, please note that predictions are estimates and may not reflect actual values. **Commands:** -• `!!plot [campus-name]` - plot marks trend for all branches in a campus +- `!!plot [campus-name]` - plot marks trend for all branches in a campus Example: `!!plot Pilani` -• `!!plot-branch [campus-name], [branch-name]` - plot marks trend for a specific branch - Example: `!!plot-branch Pilani, B.E. Computer Science` - Note: comma separator is required and is not optional and now you can also use shortcuts like `cse`, `ece`, `mech` +- `!!plot-branch [branch-name] [campus-name]` - plot marks trend for a specific branch + Example: `!!plot-branch Computer Science Pilani` or `!!plot-branch cse Pilani` + Note: you can use shortcuts like `cse`, `ece`, `mech`, etc. Comma-separators are no longer needed. -• `!!select [year], [campus-name]` - shows values of cutoffs for a particular year in BITSAT exam for all or a specified campus in tabulated manner. - Example: `!!select 2025`, `!!select 2025, pilani` +- `!!select [year] [campus-name]` - shows cutoff values for a particular year in tabulated format for all or a specified campus + Example: `!!select 2025`, `!!select 2025 pilani` -• `!!predict [campus-name], [situation]` - show predictions for 2026 BITSAT exam with option to see different scenarios - Example: `!!predict`, `!!predict Pilani`, `!!predict Pilani, worst` +- `!!predict [campus-name] [situation]` - shows predictions for 2026 BITSAT exam with different scenarios (worst/best/most-likely) + Example: `!!predict`, `!!predict Pilani`, `!!predict Pilani worst` -• `!!da` - get exam-shift dates for both sessions +- `!!da` - get exam-shift dates for both sessions -• `!!time` - track your time till your bitsat-shift, use flags such as -s & -r for your needs +- `!!time` - track your time till your bitsat-shift, use flags such as -s & -r for your needs Example: `!!time -s 15-04-2026` or `!!time -r` -• `!!ypt` - get the link, group-name & password for the official bitsatards-YPT group +- `!!ypt` - get the link, group-name & password for the official bitsatards-YPT group + +- `!!sy` - get syllabus for current BITSAT examination -• `!!sy` - get syllabus for current BITSAT examination +- `!!resources` - get study resources for the BITSAT examination -• `!!resources` - get study resources for the BITSAT examination +- `!!src` - get the source code of this bot -• `!!help` - shows this help message +- `!!help` - shows this help message **Available Campuses:** Pilani, Goa, Hyderabad **Branch Shortcuts:** cse, ece, eee, mech, civil, chem, eni, manufacturing, pharm, and more diff --git a/results/Pilani_CSE_Trend.png b/results/Pilani_CSE_Trend.png index ea0ea0e8096dc6d0b5460fd6f97e1a429ad44371..dcfbab363922048cfb2992b9a0f106ae10dc04d7 100644 GIT binary patch literal 35520 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 z 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

#v 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 N2K7Aue;1t4{s-C2+dBXN literal 56398 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 N5c2=u2)Zsu{U5wUSX%%9 diff --git a/results/Pilani_Trend.png b/results/Pilani_Trend.png index d9b5c64aaf558fd1deb95d604dc00d1a783e0413..74ce72d127b228f665d7f43f955019c115f0999c 100644 GIT binary patch literal 50540 zcmV){Kz+YbNk&Fw#Q*?TMM6+kP&iCj#Q*>=K0;prRg1#5Z5zq|f1RWYJs=_`Ao0~y z6I0Erxcx*}G^$5fH1*c<1Ia@A6RP71 z`J6s|y8E2&!_3SK-G{pSobJ;=RLLP_t;&vr3M!iL)Mip1ux(r3MBBFGy5gyO znxroAdV&sR1b2rzE(Hdd0tG6}?K3y71H~DjsXHlBg*tU;OTDG8)GawY4gj!9iMD;$ zIn#ZHp}Rx6YuHZRR`)+x%*v-TZN%Jr5ouk2|*g^RzT@EUHzv8+jiZyS%>Pw zNu=wVm1qzEA%F6jw(YqaSh5X3 z$8lVnX^!n4uQp@aarYi?yIT%;*SieBMKqIP2b7~MvNDn1VxZR)Ut>mi-ffeqCwYGL8d>;2(n9#GRRP$VS-?)Ajhh%)=EejMjs+3 z$OZ}J=8@xPAlInsDkiAUBB5MIA7v;rQ;=cApsOIm2?nyPRzYrReTH&WZNmh?2(px8 z(zRqL2U#SPW5$RwU6%|47Cs9(${?9S#DubpATx!CGLVHFWFU`(!K%IFm{1laLm9|! z$gpZky&}q>K8q?fpf&7x8+)8$#rmE#Qa+G5-g@ijnFe-?(ZJT!H|39{E z+qP}nd})MTq=FQXMl#X~CDj6eK+zvpeB9j)cXwz;4H}SuBN?{BzCF73UlwB9cH7Je z0vRW4hf7@FD_uSMXI1+D<&vYz2{SV@Gcz+YGcz+YGcz+YGczZ{^Y)o@{_lHE-mqhC z7iPzbIZ^B;>J2%*hjx*ul7H2>ks&v6sF*qVT|g>6_b|RyYT5-mH`<*@}yRFtt7{I1#$VQrCGH{ z_pHk3Wp@9pU$^TSE#n-usCL>%ZK8W!w_oN}si0d5O)OHv-q8}nFr_ZarTY#)Hni#NgS;c$2q zW;&(e;}tv-9_@*l*(1=k9e0EhT*`|bxCQ&-^m~0y!QuCW#=5Krtdz0dO160|4OklmT?L5la9-tkD=T00}jE9Kb_)7-iWN z0+2wn8=*t`Kq!$Vfwb&!fBwA3vo|(2jsUO{6pWp2ynMM`BEUWXn?USqqj)v)p|Zi| zTms;%+zF#I^EvauCk>P_OLO?~7egWI`MGj(dajN5?)3azSb?5f!OiE+894NHxC|`0 zKJR>58av_|oSnw6%F2Mu{4{6bjHDp&@Z%1z#sJsheX|qv*bjgvf70u6erQN8z>|)( zQeeSFI1@+Q5{P4u{r1SdIsgaYz*PWnHx5^+ClyF~U6PmddP5?%q}S)b<>~cCaCN*) z`s&<|h$A%YRp<*_E5`57V{dolJ{0+fc1*?dO!oElhA z2^$jy;NBd&@6xR>2jZN7k>&t^(+~`BwG_aH*crVKjyvwd6vB2@fcJ?y^|J)H0V$~X z601gj+#hayUJ3)jg}8A4<-qEweJs(yEW)}QE(4l80r|Bqy>QgCOc5&6e30xV{#cy?V<09=h|gdVXkQP#*T1 z4){-<3A;Q8{Ge|DBLHxE$q#xi%s8OZ$9Rr&3XD#C-Vr_2zzunS4C89?D?UfwFRxe@ zz~+fBdBua+k=NsZoZ~nRe#H^*@e1>OZ(lO80sxW92>^(S`W0HL{e1fsVDfa zTQ$l21Vlqfd!^v(RLO;2r(7fZAcQNLHmmZZXmgX8C?U_pZSiKM{1 z_LCg_j)*buiEEJ;^E9^piL;*+T;an31CJenNufxSrTQ6J<@(vgxC>YYDS&Or znQnR?0vF-)U}X?#bv|wm+IPg_k>w*DL)0yufB6JA=iD&r>i}7FitYk<3=89HxNjqR z8pZ8sFUNi;;q@uZPIpLF?Q*MIa52y2_=fj7yjNug5MykJukidNmZvf)xj6uLG|HtD zvgWB`Ivx7=^amQdNVF@bt<*lV?$KQg?FU5iF#G1kriA}8+Dr9|n%5~;tw9BDB}W%l zIIn8iw#r~&%2N|x8SlT z=IDx?BfB5z!@up2#@M5Us}qP~(g79CkGCJAn`0@>cjlvSFwLZpOF!RnMh zJHBmJAkCIvx%$K&P_X7-5$kb?@k~WdRDi7Wsvg#7ec^ew<$L&csZnc!WEMvB1R(5> z3uf6dU{g#wajsQ@vi;K;=2eDYu35fk>$o~n%UpY44LWBhy~rMzRqThe>R7HInw$MG{#i3f=);VkGv~{f}PyG`+cDGaBhzu#P@}p)KaKuw}5Zo{h^ev zP-FAd>jzG5ZpeS_cacx;epOS-*Db!*ywr${`bK}AK>}NMW#<-`Bvkzk zi)(Mhj~D=)`|1c@`s#lALWt0<2g2Ue08-3sCrt%`?y}pvV(sC(7h@E z^Zsd6F*WFh^;!N{Yxv~Zbn4P6^=Trb=u!M^ClaOSa+SZ>q*X={N_fMMIrY!q{ukjT zn?rT%Ww3UkMt~;|$LT#r zbu;1h-DpBNGE#HkEi+1D831M83s7T9pU9|!?LJ3=bl{gmiq83#C1mHpiK zTi4`i)mle>zCxV3Q;b~*3F&!3s(q8v@&uzlfE=6VQ~A_@wWuF$qwYKX#?nJKfnYUh z==fx@!3X73Cf`n^&ej2b$MUK|k*Bx~sAMY~?7EB?{X%T^LQjwprGc#S8?z@;khox~ zhjI=o7LKDxPP5BMq!1-$8mShS!p2{5S?XFmO^TByBr1fy_7T$=UQ|Zhdy|{{Tum`3 z@|K($jU!EXJ8m))PX_Ov1@NpTRHx-U3-yme$qgu6nX-WNxjRtLD=eG_GROwhs>191DO&+JUW3dT1zz3p z#L8@|(JL*;h7TP>ZE>QM{$Mk5b$;FcM`oh1-=tlQ9o!MDW*Jj6R_OXfp+#kQIuF*l z1FoplPDirNDdd!<8AKpjSRuzDTr|#XK3QHj2(%O7xrVyb2()`=qB++bY1R z`6Fy^qY%sqyC4o6z1-Id9{ymeRRJMYcL+>zp@A!0NMhr?Y64T+WjRb$E{ zLd3aGdI!~P5G`s~Tyq@u%cllXt~GVb7XzFN5kF3I)Z5Lp*cMD{NR+H+Fi3m_A|g6p z;jLbAa-3~9bDvJhc{Yh2&BY^GLgHx`V+7g@pX54|LMUPN{kPBCe~QdmhHF7}e2*T< z+y+Ys8!;yoW3CKL(;1H(aruSita3pmC~7*0)OoiU&qCo4y!V{Ou#yE=1O=|Ht zjKzBF(r;T*6Lpfc8bB1ck&|zS`S~6fVw#xlSMshZ?_WWWsms&s=aK}X;W4HzvlaX* z2qoNl`~wt+uFe%H(~jDLHjvizA4C#(iW5#bpBl@vA}s$(`nZ2_CoH45ZQnSX80$B!d@ujcp3r86NT2H+AZRTr zrih3Fpi6x`D<%y&@uCmbA&mHP-;UPxRlx=!)1+(Nyl?+rE999IF~>MHEH&wP&R=YV z_>?d|E%XdTfxv067{@1al1qK~1r=Lf_v$xOsJx3|V$DIAV=dh@TeEFShBKI$8*l?yp(!Nu4YwcM_) zt?gmzh_Mvfo*U~?>9wHd)4ih(akNp}hU4cMv;2W=C`6alev(uDZgRz|F&qx3 z!j=0~ZpPQRms;m}zDh#1eny8?$%yOM1;61V&DV`H)Qm{?8$1Y~rI|^Dn*I6%s@_W2 zO7*`|I0NLO%j_#B14mC&+vL!Y!t8VHkdyM=&mF|Tr)n3YB$7fgkjr36ur+JjozCzL z;pTzZ6WX3}ZHwIyn%Y50WQ|-z4l+>ZSzh@|cR7YxU907A22{I~bbNBklI@y&=sR|g zmbK6NGUosxks7YW!2S}!T=-r?hk@fLLMHLMRF1Ejjx*ge{N}4^gG19zB6_k8_hP&a zEJo1QY)VIeJR>>s;njE>ESY?2hUcsSf(PXi1T<=ig5~J4Enw?5a>3k!K`!vBGXaoo z%1zh>i0U_Y1eW0e2uly7I)S}Y=ZPCEpRVoNPjfjOqnsXx>S@>7Iq%M`Ev;r&_WrTd zfYDRCiV3;MV)5$+&IY#Y(YzWqL$$HtmJ990-N$oyLf^mYg2qwPkBI<9g!^`r=c=qh{bGg7_c-*J<@LAaaLft@ zi6w0O_WJ257L3r2po)r&l+&6qV`FBN;Y8a*XPFFwSXR&%Aq^kOAlug>v28Qts35fm z^3vf!(pSOuSm8DlCk|%C*ox%(%94Pwvo8^oeXIvJ?R`10*2B!?LA9Rb{BhsD z-M(#N*dfdfQU&hFi5=^{Q!rJ{`Uac#@6q#;)Klujug27iEDjty`>uq1ku-xPjR89` z=ZcMl!)z4H$c=j-V?1upJXA3&n22R5x+YG;GCyCN0%JKvhzsei&I#~44(MSc92K7| z#kXx*RH#|suJq&VhQVX z?viCcG@3NEZmMIp)uKcp=r2|=oc}Q@PHrH zHX1a6f#AEv7QqwPKc=7A`Fkthh@6mlin;5k=~XwopM68 zeZ@q}@5lXO9{O%W>R@$s^|I?$r?AxOtdmnl~Rbjba;q}mS*%=Q*uWDhTU_XtG zAbJJ=;y=pSUFlcC+gMxRKs0H|w!JhNOlP05)8m7$iti0z>n=o{hcoYmM|oO`n-1Lu z^d4I>fKc?fABqWxjB8zlF6N7YyEC-ErL5_S#F?SMIwcjYN_r{uJxX_n0xFFfkZTzJ ze6-0q54uDUgw4`M+1)c#z8U|PXZ8L~xm@?~ zC@N9q1@yfwvFp>ZphSKV(w#a&yC>*d7iiSSvW29rVR2LhMP1|ha#*=EGz2Ek1I|q7 zxT&Jk5!i98xJAU~Op%@i`NYNgpJHV~4hT+QPp*_M4Wu+NeB?%-*j$PZQ`{ z{Tg~c?L#|>n^l%Ww1W_#g!LwXqOx0;5}s!@1KF0DXx_bV%jsJ%pTRp!!Jl&Rf6 zVhuW@BFCSz#M+*)mjYCuMmy(D>^i01}Cd9Lk{o^2cd*rT0~vupXN(s$w8zc&XfUO6AE zCTJX$k16NKDN7z%j7n6yWj<|R9!6$K<+NYkNp=Qxa#WfYz_@fyoz1As<|yX7-HSLy z(`}#%QIvR9b(Q%?pwTRXIwrC#RtL3+ZDR4EY?xo5H&tVmV>rdb$x(G0nQE_2--U93 zWUO(d>wKRp;1#_Yw$_1E4v}2TVUAJG>1kX2UaH}@XU@nIO0XI^kxi_raOrN12O0X! ztLyI5XC^zgu8_?uWi3KIsS?W495tLt|DM{XCv~ICJ|JgMt;gAV#ltT3iQ6+s?jr|-W|E{f_#KTOJ?j4FMPJP{d*c=xZ^{cZim4#wDTo;-W z<^2)K#45}=3#7-!KoO+X_5sPc6IAR;7sE7lZ$@Yr$wtjJbZb?RWSydxb_kn6P&7v? zbDTbK2AYkdnUq>XD^-^=p|O-sSOXalH8~ClYy^vaw3nVyAJbo$E^~qEB}| zn`4(5|)fC|_gD4^sJ?ktE@9=mM=Drym&*!pxQ^w5Gm1Pu02pE0m zzt+`qI9A2O^*dkd}HzR!B5WmRTs$JqV9L`zt0bsCY(c?mwvJLUa`9rS z`Cuyk6p4wh)m4cIF5CfcWYNdPts=Dy9GcSPkpKaYzP**Uc{;%d!$>b@P+O=LjgAXe zbC@a#)ybPZ!!{?pPapr*AmT>o3^gGq`I7=b%i*JqCjacl-=3ucfDc`9_`}LBXB3>b z(>9GFAaVo1)b1=q&cr>R?Q0`SKI82}%;DXd9G|}$N(vY~pL#MiO2)1QtzTJ`_*32# zq7Ls>-DtfXZGZxP&Aisw%~tB6?|EM^X)?CwDl5$TOPp0_#C zCpnfBtEQxp`j+Jb(O>Y6)skv03x}o!QeA3hHf4MW`e>)+`N1uz5(e!@ z?fs}y13lYo9aZ=tZ>M`GZ5ghoZ+Cno$7ZW-dIYC7yz~<9-^*|Nnu4*L7el>!03bsI z0c#pK-rca`&qTZVTG17rt?R7*p}s%nW_IoPc_x)Fd;VxrziG(WQwV2bAR{HAjCnKBF zh++W!2I(^ZfLqs8H4UnIC&{&Tt}g(*yo$V_g-b7wB>Gri->y9~&5y_C$Tr^Zs)vRkV0K8I2k;g>%JZ&cxj<@h0ndN!Yj4}bw++Pmj1M%Qn&xCXV9 zx-$feY23c~Yz7(S_V#0BjxDXkxn|a)aA?blah1|fbCu#MpCyN*5L*#Aj;6LDnA~d{ z-M{J_wT!EB1D4v2;Q*mX9=j_wS^#Jm0$_2R3E25@RWakV9OavzJi~M`Bz;51U~_7B z7>?5T&HyY8-EH7kn7}bid#G${EI}=+Q0zrt!?7|_wVJD_ch2kJ+cI@fN+ZU?4O8Mb z3T9Xu5O;gRrz2ru_DHG@t^gg;0r^v#Ne?Y9uwerFOW6FA zQI-+yUp{aUnR~rPf|Cvg?t^xDiCZ* zj_+`az@+7DsDuSCrH)nh{MT$jX^E=XalJ+xcyl(?W7bBqv2=LWD zkwus#02duOst9K+fYFlZ2i~1q=Vo3wq?}M)`$^8@0|0o_mG{RJb$rj2ZN&1qvu?}U z!^tieU=5aA)*^IyBUrtiFMBk3z7~TAU@g_}CUZDiswU~j+0SOPU-HG+mW{bJF7IbG zj9(;!#?IdN(@AbOpL^r-;KeF)nC1_h?Uf@25>5)HrYD?$r8wTlR>m?cln_i!$S0@D zQK_N;hdtn2>6A*p;$;eKNiUKuuiA)gh$BWV=IFSr<+eA*;^-Qj!gfP71Aa0aV~WVj zp?VeW1nA`GP*)^_W@F4E3ZUNzGBlE+%QVuEr7FA+z_|!iAIu_2!zm(rpnkEkXTwRh zubiA40QkqeDDkIvP?;APObS6ICOgR{jz5y<;~U60Bpv-u%7B4~WQjpm*PsC&EoMNR*Wg1fm8EA#>N82&Qce9TqlQfm54>jboMvF=f#{+keva_tY*g+aQre} z8=a>>rPa2T4b}Rp#GdAPG9*`aF1{lf0EQWl_QuTZK$t2c=y_VdZHYCWf}3-G?7L7X zg3QNOBNPd*!RVGEXN(-BXr1Kmg@_>Mxn`{ah|)&)XAHxew%wZ0ByE3msS8gr+WVVI zD&-_pX5p0MgAx8OOw&{~&Z&Y}1e)pttC^0&v9Fo}fQdd4Z&cBTO9f)m>iM9`7c5}& z>i!pP8dfZ&Jz3&@nsd!;KUN;cy?bX%U^Q26nBBdBY^wJ_FpDG)>#3Lp}Arv+N8=hCG?9#@&L`xZ5ip_;(bO2sv)8Lw!kHoLW zd<>Vm`OCVTIbsgb_m^v@H@_FoMowoxv&MREjmra$sl_a9*SuQocH)zat8r%{SHa6} z|F#;8Z@sJT3k`uK2YcfspI1vp35Cy%7X`CQ05#f@q&hvURsR!<67fF<&?T3 zPUb8Z4WjMXYZre5-}VzpE^-DZFwdDqdQxgBrKj z(uipYR7o_}vrZ%YaCv3;p*52lF747TIfeldYSy!5O*N@@*X`^oC&#*(jm2K${_FuC z8lC36PR@14!8D~Sl#E^fzpJ>=gCrv6M9e@<@0x=Cp-I7h&nC`na4(Ch8S}Uus zENSHF7?KSowb`kP`c0nry0KdVg%x_W*gpEQ@FJb^aw;e(A{AexO87`9Dgqn#)lw9QTWQ%$^8n)bLLSr$6OPoC zs%S=kfyREsHBL(Xt>2V9-VSPi9I1XUbw9B{U$>Su^P}-hQc<w)~Vuo+Css}kEomEwp?fkp{) zW@BB9U4d%-bB1F;(DKX^J|YQ7(%knbv)jMrOOwZxkYU&*My7QHiPsL)JjgcyfPiU{ zajThei)psR&@_=z+?vHM0I&w{Vv$~uI$keG<6R_*(f|sUI_9GaKO9B$k-Ul9NRAgW z^$V*;mbDl^T7UqT92|087uvu8SddQ$#uHa&T%%w#5coN^}aL=9lJ5lT8ACZ z85_n0qo*#19@+yPLV+g8n$g3$V1yE`QT3B^UZMRrgSQ=oCeJ%1b!HUzV-{^oz)*GT zxm9Bj(y;DO^Na^!b1&3qMlp7zWS#_h=|D+5&H_r&OdQ2fhC-rtVQw|-FE8jXgdXNE zH;fPD}-vaW)eh zJ;z;3+)LdW$RgD2+jpZZay%yVUPVnRHl2&YHcggz8^G+{_Ns$#-q z65)grRxA3&dHnc-3&G=JEgWydjO;nu7rF)5!Zv^cRbzm<_S(-LmCro@K*w-6iU~!K zcz4n;3E{#BfEe)sZSTp|cO&uoXVhNVlCuCJHIQ?!rdF|Y*2K`>J&V5e)2Op*J|PKH z!=@cN=N`>`gTE*U3F?NeZYWlu9)LK#l!cE&ly|9O00u5_qtqGUU7-hH(>KR zkcuXBBmo%o;6E?&ia{W2GMoc(O{bmJY(wUWs!_F!6WhmARLhDuIV$hj5z{3obYS3P zlI^bxpfhKbk5Kj5S>e|pw7jNN^F!i|LRH>{qR2T2tq^z)E9+O-=Sm6gnIcYml3J;vRReL;H)ZM`xw&bgSeFjP@X&~WEI65S@_ZT zY|)sZI{W-Kukm=f?cTVj+_rDj>3tASQAaa(gY+*oU+?`CaMXA_PSu0jfJAAKv!8VP%)U$eU%^+xkFTP0=@}8oyU90 zZR#A;sO-|V|JSd{uU?QCFfGz+FfZ}mrze*d8(zK8&AwY3p@A5@$hr-vvc!j`kBT&G zG6N~0!;tM?@)fB1XfHf$1OhpHwc=5cDIIT7;!o9#oFfT{72Ur6$xbmv9=kUzbu8Mu zvW;BWIzD!P*vl$z6}g8gcvGYkd~mJL!Go#!!;~V`?E7weS+Ppr&2Y9mD~J?K+<3e{ z0HCi*LUr3l?VD{Zgk>Q-1^gGek#L$USG?W_&+@xgj>vzVw}aQiv`Bys zlGpZi-W?RR);}uhwsJ3q`q!7^hh%U(Kb-Uuk2jL&*k&7%QkM{q=pNz*#EBt^kGuHsQsM3CMzeR7&Wc5u~Ko#I#udw+`VgEwz z(5T6C!%y;_y~8WH%^kVPKUKOXH5VVfx3)i-i`PD)F$z;H!Rdv}Jze5cBKlKy4M^2| zHU8ZBB*i@+d0#s{@FwkRy?3#HQlyhmln+e_uM&7>e@4Ogsv zSd-xSUVIA|e!d`N@Utv^FC)`;`NAa^S1fPr7Dfn|GPQxeZ8rP2dHeW8ZcGGBhTk#dt;&^{SX)~`^=E+n8u&bCzzOTNqhg-u^Td9YcFNxf0`$Qi@9^2Q` z3(l()UPjq2qj_5d7&0s^qyFhN$D?onFcAHD1}vNYO{9;BTz+8)EifrEP@5 zHD1~%N9_Aq7|@N zmR!DcA%nwvysK!y(spAgh$8xWr^Z{PrdOmvXTyn_9WB>K3PnKzI32>}d# zu7g}^=VFa!JufQXjDIiWxkB%@n6;i)$}-%afVFh3iT$j;{jOzR6wDFFGnHJGeXpGH z!8RW?2EpnL>jh~XU&!vNaj`@$-6rePkn}GjKd)mq;?S)%Xfju*wyRO-S}M~!-|IlJ z`0%umdM=kM60KLPw%se2YtU$x2vCS5`9L=AVzarPioTV(Pp1lAMUkU90)gC$?ydmf zHz6+e*0*=Nj@<5V$uZr4f7Y@@E<;^b|>lCj2lY?j-E~jm7C1NVm1)#j)+uwU_~BgU_%Om!u6i#yb3)khmd^B+D0KO`hj8pc8h@7u%?J&f z&GM@PYZSVEW{^ZsxE6Y6w!$U36+LD47Dr$F`rj(OuSkA*kF)KDlihlWgN5QgmFi1| zRF@7CwwBZ4QW@SIR~$A6Q)t;HF!_h-inwlE)mZJLV_l+y3g_kS(c30vyE5H zTlG6mB=e=owmpjIqhVy9rxku!&&1ge=or}3t@XV~KgkK3rP-%*Bni>e*+gJ9`uY$J7l%j! z+BqRK{Y_qjTa;SqzX5HuAgdRO@+(%eo$=CPd%lMW02LAO6u#d&*goxKa6O%zrPb+ zCIFb^_Hv#i+qj!*if)T6v_nsiuGB8$!S~V}y^y3Qu`RqqPbgu-kuk^aiT7pHb)eP4 zud~hu_P0grCSQ^*NvdIXGTL97+tGK>X;^{HDIfWMMc?|Rd#Nw|A2($`BZWYD33|Vz z+4BOg1Grq-N{5P)*-YLQS@##ndk(hL#xS!@r>^KbzqCrdSX`J~rG3jO5qY@}&GnB% z7$kz3lqdJ4-n{V|+ZqZT&lU?a2r`En3Y^HQzP(O&{+I`E=T^zzpt(;-0;YxjI%x4j z58m#2q6iKELgoaOKe~6kwV+ucb=$aMh&tZvf69;nh;+rRnh!Dt9C_+t=dycq|0nFm zLK@QK6E$Hd%kx84JjJzqv1PLFJ2-EEa@)Q!ob=M|0l->o{FPGuPSP31JihUVzGUUZ z8dB%&rM<5^sB7jK2@tW)x~87{pN;U`JmJ$>IlDCAX!Ci!n%nm^dbFJFGah_5DM{PO zK9A39gc8=CoKu~d

%}>xs5EAwuPkjTyB!L*|{2A!b^5-3`jLROKO_!^%7{t2eo)te-AQl!&+``nbM4?OXk{Lb$(;`si5^e9xRlT)WITmSdyc+jXFRfw25<*FV zoQeBY9DEUy&+c^{Cw*q0B#aQSwe{MAsTomnQPknRb0qW`8T2d%$2f`~|EP9z3 zNRsfmpZ}x?REg36&-W6IJ&2mW_8Qgz0PybGu68GBy69<#&oPbgLmp3@A9N0X znBAvdWlhiVJ{hs)s=}qa_7xK`&8v02@^yp6{j@U#feTxgR`|gPl8fp_PKgwCDjK`- zJ~03svSvj3wFi%*h~Z4S8fh`QNAls$E9&axl*i0;`LyWpB7b-(`05n*E6YrclvvT0 zqu8lq^#a$Okx$hIv2cwa9_I;4?K0Zo2j)(5c7oNfE55!()TcbtiA-9kK_JKxoTR#R zu+;uy!CD$xKJN;E@Z{z*Dzoi0+WNn6N15ZpdU3f2l`3%_kK6lS{>!K3r+a#CVqpg2 zHnUuXUC;cgK;H=|DC5^C)cZ}X;-$5`t_&N6h?7B7xs_1uc4Bn5wbGVhykTXR#|PN$ z*s|Nb_4^&Qi~%5U>};%QwidJgv*)>q-v|PGEt8Q&AFp`)ZlG|tA88MSVJ=THdFe6D zEZd9#9wI7sPXLfN268Dp@>5le2EZebS*oPv8HpOTR+(OgR}6N1uzF$8XwoKW!D6m- z|6cVf95xMn7(Rfm-?)L*GXwcVwH*(|!r}zc*<`_Avn%>mNh}%4tR~Y|TIbDkweHdQ zvvE_Gna3YR03hKtxb~^_8qB3joQh}ou6K1@u81=7=^sR<%)zMH)MHQ?FfE#DXNIjN z4&8`Cl^r)na)^1mNpsz^bDR4gBJ9-(=h`!OYVfCK(5LO6Y~BCJuSp01aBp0G(CUAs z><1yFP+Q;j%f&>Odl$CRKC;=ry-WbOoVE{na7=pWwV&qBKx(tH(l+1UqQsvrl|h}_ z2KGEjb6>jfIp)!BV%)e_ds8Grb;}&HJ_wdRWD#F8YQOxl25pjB?*y7(ttJH=9M*~* z$t&+)-q>tU@t3|z-ZceIWM(^`*h4_O7@PZa%1*?6s@5X7)XNx%&s3|#d36QT12pQa zj<-s_yVsE7Ih4;m_w+NxMD*lxZ+FWQMXpcXu@`v_VRJC)dqGzK-KWxRun>z2>$QW1 zRBE)t1!7^b>PsFIwnXiE%U)aZ8diWZYiO7(Rr5nM_8^`a62jU4Z$4nGE63uygE{^! z!ecTDQGE>-bd%!v@LoC{UrW`LY*RWKgXU60_t2^_Z zN?*&vt-if}JvO4{W`;+hbozKYH!(es*xE4nCQs#kV5TM`a*K9jT3iH|D_3Q|$_Z{v z{Da5OeUINZbQYczRO#x(+c}cx)mwgEZkB{Fr2$3JLj|*ZUBWig_C%ueH`;JO1?u>I z7HS{WsCsK{@5{rdAONWj)zfXI9%crNob+MN8UlL+7MGRr@n(N0S=kNm_5dqxz&0Yx zjV2k9-nu_oj0qY?FGu@Li_W_?VuO{gf&K8(OM7@ZjO%>eyh_|a0O(iuMZtir#jylV z3roNEE*s+VVDcv<70mh^Z8x;)EhpG9y|39_X#6nz(FB6^c$*xAFsR8X_DT=li`U+N zWwqD0HrGGF!LlcXaMLKGOj=Dnhn2yz0@CRalF3`>ow@V3-T6E9S9Z^`7DxLvU{aG7 z(;fFLSYekvpj0&6@coEKWfpD5s~hapgMd2c``qFUFQ@`K1@z74)006P^+BG`gqCdr zXQfQ{gvQ{!+WL+nKK`2ARMM~!h=twIPTO>S_ec09(Y<+fP`y`0ks2arpdaN^plu$b3V|?Ibw_)ryt@7hQt&PoRTFlM>+L7e7=WD10o}#pW4Pm!a!wBU&mN zm@g=NEax&V+t6cT8Atnqt;LHv3r6d&?E17N4;17&liH)dK+vVfJ_{eqeuzK#JN_nyJFw&5vYP@R z8IjK6=)P-{xSy6xj`;tQB!j!_A2?F+(!?wI$m<5KR|~7H@c)=gR*I{fa6-ArvIA)y z(!_tw7GH%kF}oWEP{kP?-@iLAhMF)atmeba0lxivF(G&Y+vvtVAm`L0)GUyAnNyq^ zgY$dW6CbY~s3G)NnR0mPrHKLH>9u>VWY;O9T~l&E-IXb!2D&siCT?8-hNa)$>^w|4 z$_C6GPymD>9WG|uPH;|8Q$4@wrW+p`A%7(xk32~YPt z_2kfri2v6~$=gWru)OZ%+>r#$2uo*rbIWCW2G0m^y7J3=GXPUTtiFfFWeJJD2ie>KmcwFm_L=gu4&pZj!5$peL-_7k7iOMCopoA?5GJkD0n zJi03dKiRI}JcB*!CqBbMVcCR+uUTQ%Pu)CuZ_jY3r_yR;_%PzCqHz$J4y z8?z`FBwVrID5qCHy;uJ7aJ|46%HGQOn>YJIZXI`Ek~J7zgkAagYvph>(i*&4*F#5u z{bRYBFQV#&*xXfw48hFqhL$=O!$~ilb~phO`qmGs`}c!s+3((@9%i;P%nK8_qjExZa^r8$*nocu-+`VD zKHJ%=0w7kPVyMiQ!<0&PP9jvpV0a-aN75?9ifn~P$>)e15kXLZz?E?h3blOVWto&OnI2~E zAxhGgs2@q?OQIE*gAy%jjiiFC;_Lmv>1(e>P}t@Zl7gy$-V(*G;cB?+WfVD@+rPxY zLU;Z)08JxCR77MG5FSh}gyh2so)3lzWaBx469s~|BD=an<;Q`gI@zs1lxw6OW)(sK zK@^~7%q-XqTa**7DOwi|Hxv!b^Vc~8Ar3v-e5Ll8yvw_2E*c?j6>`sUxn;7w8TGb3 z3%f`11K(P+N?|Jm;~M7lSbcgz_?|y<8Z@gC+5Dx@+^30OyYcTTkGGQ0?+^e&Q=xhO zfLUI@S;1giy?1TlGn9X`z~rAQ6>sesxur=S9dn`ps>loCsTn!}01PraIXBL3scsER zA5i>ij8*Y)UjW$s5%cb^B~?QGoq}tEEW!S%-0ii*@rA5GvefdLlHR8-@t&6V^}(Mb3|im~HlXG4ZiDZK+du_N^{sNX=TP*qRyYZK=$tis(+V?ep~QuSjU>eu;e^vfL}5F!3ZGIirA_o0Hx}nl<*$BM z6pI8ikWUu;HLJ$9dWt{G4<$hW6*Ok>r>SPl*5pzpt;uWxVq_`45I3x}H8s35wg3-w zesZ*oHKny^q{mI~7K9v3wp*3iuap)ZE8{X1qJ{}C$5&lA-Cw=V`cm!}pni(+%8{JW z+FcW5oBD2iU{ih#LWgH^ouis~RbQ<^u)0B_G_YI1=$cgZl_kltFAM#KkD@f7@dxo$ z#_OL|H>(sKn5o^+k17=rTv&|wlP?GWbJcpBJ;0}Ho4ukmoMrKF+p2exh&|9kNZ}LZ z6|#OMh!jze(Y3ycU9A#eH*9lLnnrRIcF5P8A zf3;4v0Z0L$#~Q$i&;U$k1E3ZFLJ5O8Fsv~EfT+kV=%1ekMnS(|R%AX!$8|w}3yQG| z5oWnE3)Qhy&K?jE_mZKLXvt9}?GaoMuriAHAGAjgH_I^8zBzYg1)xwDoSGgzyhv%> zTa=|-bEb`Q#Z9WjIu|s``;`Xe$3b)oS1T4DKEczDBzarma)A?BqTw-Rcb7Hd>;k*8 z&}B1;h%#2B0sd1NzYsb>O*x~A?EKnvc6}p?XBO=IY=LgO^Yb_!LV?cT10B`{OC!Z| zI+A6qDQR4$iCbT`Xngo}L?K|*sPvFlaPA)YV&Big<+{Yk^iQkXt9om1 z$LW>Kze$h)hME55x2<+3>6@fpqEnDeq?cKLn?XIYwbZq2aw zXUa}Bjw1?O@c>}J_W5^6&m5l*=DH?L97GLky$Q;kk zFmb@p9Wjo_?P=<$YE}xb{nd9Q$MtYoadMEO%y2!nBZ)n#sP5SSstpchDWY83FNG{N zxNQuZSgXFJ=un&WnM;v&|a?DK`g{xF{X>Z=`y~wp2k0SWQ zJI@#saZu|H-7BiOxluISkn?P^&VsRUDvK!K9kjWej>J%MbZGbEx`xwwct>W(4PTh| z!SNQje4;{SjCP<7NO9>1lCQU_t4k&C>JSD6Vp`~)77fg$g&8vH>`Rw922KkJ&vMqC zx@?Idz0Tl(pibBr)G$@Lg!uLiQ>1DETJ1oM-9x$W7g6La1g4VeQae}mc4EaV_f0d=r>oQXW`iFX9?2y+kHN5>Oe7u>BJ{1f?2(=;IjW^sv#m^TI=+zI6mW<`AY=g6J)ypNpE41E3tp7?(`@!{PYnS2@7pU} zx_jh^sqD>Spf0iSbm9SEYY_rlGsL`xda9Q;KZ>B+cEoMeQ`z z0%S+L&Woa%PM~yY#)VKFYcJD3S66PR*L=m>oC@$nrosamb|nzJW{xC|=Io#yiXme!+^ca@LvAv#}7 zAvD3l{_ zO4EO?#{P43eM2GBylfT^mGq`9m}91R-aHd{v;GyL;fP2a8(m#Ht7wm{cCKiC$}@S z&^!IkKUGBQAa`1zb*C;8Ai~`jfA5<{8TGrHj?2Ixx2Cd78*djOZ(bwZ8<@{`t@}Km zqYzUbIC_dG4e%}z>j$ahPq;~u_-YvMhRx{mQAHn(BKpXeCIf)E?qNXV_D#0&?%J*y zk={-(qhk&Lm|B|SecEy+?y@Exy9b3Rgc{|DHTEFtdyp%>K49hAZ(5#@cjp$~^-*aa zM4m5z8s>h($UfKAweTc>3T<`^XU{*Tp7pbwWp}+KomUV!b z=K3c^j^@!q;zYC#L}DV0TTD$`O#Y)#wEzg6gKL*MrHj&MO$=q!^3)(fs_u_y9n}12 zu$0|tr8l>eyr1UPz6tEDLA>;+RK2w3e<)kF3R)pxxEp@4g-b7&vJ7uexU_hsYq7PT z?7?@goty5@*p`p;iLbcPV@4(dg~(aRSt(QX)oLHpj0FH@dHo#Det~a#h!eg= zz?UX}E}0zP52lC!z~tkjOq+u`Ev|>0GWesXeN1uYbhw zrSp|6=tFbIX3QwUP4q}tXgz&3{L&pdqkv;-aC9Wlp>Pt2+rBX82WuMey-?_ZUGCW7 z0X>ajxG7AxfRzAz9t67~a1;h-5kO7?at31$sxQTe*z z&sdg>^aCEL^-aaeJaxwx^3YM3kw}1wS?h_?KdSZmFeBFK!Zuioi$zZpUkk7E<}=i0EMq*PA$w0A3}kSEW>pS znLy(7M90>}+bwX3m9h2SFlK`H9I-qCC@_}>!0W+3PCo>WHI3N$$+1zScncaI#3ITC zl=o2j`B6U*<7;qIG%!~zEKXE+j}{k3iwiH2;RDczo)uIDq=}3wm*eR-DQ5G`9zI>$ z$FzF2y!WW?I83*_4efG5S@& z;fbuh&0WPa!{vOuX(GnbGyF-k=f;DB~9{@GuHMO)fp89L?cK zgplB9OYJWf3yXa#T|tbm!SQx#ukKKCo>r7SbsU!vpY4KY1l0>%J3f7vUJaWkhIwJC zNwvw+kF)8^emM(wl|<{1=4)M)SFYGKQ5rf7fhzB4SlQ+B{15=ZevZ;Cf55hEENq%& zmH*J8%*#TKYGTc5NS*QbxxAN7Il$JpTBvI zrYuKs{_?UOfiM+8a@Dsq%$@hQ^hZ%|Rd)cJFw$q!N$?pD)g7zKr~Ros-n|_@P{Au& z_){~SX$3sktotiB0U!;a2!Pq^0(gNbDV3pNUQg&n5Cvow;zP;Nx*QtK437&P&)L4I z%PdF{_o-^FTtIpGkM8zeS`gEqU!6NOIIS{jg@H37_D)Nc>ead~aX)R)*{+Pfk2yY< z#mE1`O9WLKG1Q9`fBKUM9j+B(D>xjvs8Z$ls(aXTlg_OO4aY40s#hmg_fbiu+qzf{r37F(EOO939#N z8{LX(O6P$&&q-n+{TASLAm)&O7u-~w)`FaQrYy>NZ}BMMmf z()dL=;R}#s`UVWVO%C#%%2lz^DiYJKh`zbepk zNWtb=&BlGmoKOAj0R(o!dZ#rS`;Z2S(*NNaC_4Zs7`ySR@B-*O+cwT^!iEh?TB@e^ z!WlH7rmATxA(J>W1{-E~4;rg+$8%C46TOouYMXhrr|NWR_J=b5;G|I}u=(_)ol<<& zV04-@68U)U_{BqW^_3KxYW&ablbzX8A8RL8%ocqzxJ@$o25^x$SJx4RF@}SYu!ls$V z$-6Q8)DUdVh3OKao_5sOj|`a~xwg#i>>R z(16V?)D>H>8|tLR!OQ$*?$asr+y{sWr?TNxMs?{>k4*at$`4DXB9EL^`C=mytv{$y zvsog0C&i1HV~lfqD_*((UK-TRrvia=l&3sqeS^EdW7KYd30KblB;n7gt9suf0b4#J8IgOvc934V|CLAXKd^{7pE7XU- zo)17a#+yq?sRf`AfE0Q}Z~xXOkLnc0rDd^=7V9X|!;I z%F=;;Af@?)q-2Iqn#iakZ~fj4o2TUTA3Buz`vK>Y$L%yH& zhv?kIBvex8bh#M4!G2C;QF)x5*_k^+k)E?213f4jZo+G`F~i*IP0%rR=17JD*JBAF z^h6N+uWEe)ts$EOuw5@d3zjWn)>q zD+H%x#fMvU=n~mGqw8F+wVh&YMdR+BhD|Gj0lZMt|ESvQom4+~ z(g(vx!LP-n2}&1d3}-XSaK6 z|Ft;YAUlf_YX2izwh1VnQ%yfU;+)&8WU2q^>WR}boQ28n%6NB`q@c~K3zuF#YyemO zC0Bn+gJYnV<6IyY2;UPx+HVYj+^q;efC|*o+>Tv9gcrOb5Ll3iWO1^e<&NBf?%j=u zgNYd+>(_4|Y!Y>?z+@rV-xNjyTW!{t#sTYW08O`i;hxYp5S+;11b3r`iJ&baD-N|w zzc;ylBl1kc2>|dQIpq@8X$b#T$1nc|fN+A(>p&({v7q@dcbXFmGZZ+H8&8_8CeFz)aR^Up1wiP+jF#!hjtN;;5(AZwVkhP!7AdhLv4DIQdtvCSnqN z?Dl^y^gB#7xzG$(c}S{5{Bfr_CgQ7X=n!-}syb;;ItQ=O}iTL{%vM&L@)u5WXu1^XatXi&R7Eg0Te!+gy^YaOalh; zNwKilqJepSx@TmQR>*ft&t0d5#=WoxR?k4r_pI>YoJx(2Xk2*i)L@SxrFEyyx2NsHfDpe1fx%f-{5f472>GJCx@MkC&)d=E-gyge^EG+;qTc=@mH~DrIJC)-2 zkRSCD-P0xU@oE9u^QGFo>%A;&>s&hrg3r7~@sA!4AHZrP?x#&iYTy2JYQ9MQAhSiA zesq740L6Vw5{kzyaZ?L_RKpt$v3Z@K5PzWQ2FRc{?lNV^XaLPZ59kH}IB2nZTc{i6 z!Q#oYd!avsZ`MSgj2IF$h@Wpg~aX_Qgg^_HfsCi+e0 zOypV1lsj;_lEp5SK6?DXNx?)~jGo$5Pd`iYn2S~jyo*Igr{blxx~U+%?%8RXt}l=6 z>&#E?(0uHyN&jA7((UdkZjrN)SB^yYgt|e3^kiChJ$av0b8;pdWOeb0{%+0~65emm= ztdD;Zo2*{po?eh2jYlNO)nD1wrRvUyvjG6%Y8%|rU(HJIDWP4At+K0jwzUTt!@;zI`M4QDn*rQOCU`q0k-MDUTA}5}LXIdWHWBPUKo)55;5qzyt`X#ifUo zqge$+CrY^+~J$N7Nc;E2fQ~aaHn3-ZD zp2K5i>_$`)sw-T%e<2{}YTVN$8hennJH3=eOhG_PszlYuc{HoYKhcPxVj9JbIDyD= zPxTOL{#v^S^792{_A{NtUnwnzk3eMDY-TYkmE6!;!LQub{AKX0fVlczEmaer^c-n% zNvZ5@R5U99{4O6eQ95pR))UR2JBp#YZC*7-=5H_cv0?!MJl8frNASw z5kai+lLD4D3gqV(=Ofi33xL@$1|-{WZ-kz&Vu1e;-txYwO4<<91LL80u;C6fApo{j z;if6ZOhOPzfD$(35DK)U4fR_wd5vv#w2Lu<2O>8#Wlann>^Ua=hqk{}2ZyzR1gzcB zq_&+#1yupuTq(h(ZKg9b+zr2L#cQ#frR?w3|7vdAH-?pc{zVD5N9X=V^3S(7`CY|m(ApBEA7@j{s_4{%Jbk$z9t#A8kLB($ zk$!$fE~<3E{>Z(M49}~S{B-3$`vj9h)?CfwJ`H+WKL?+T;RSVYAAA~weC1RZr(VdV zpirNiNJRv@H2p8Ya9T;>$*f1LVXQ}dtWTJ{S**`_kyscvT>>(?@WNy!Zco!7U<b2Hl@!@He`qEk69)n6oS|R^h z+ub9mau!Z6WNW`p_jJkCl(7hlcK3@Gf0Ez!HAQ1r52of1Gv`)Gw^j&ztAvIj>UiyA znseV2K&h`rj7e;^ItWQ_RtXm&vF|w8KZ2ydrcEO$dw5uxp#V3+@E&*w)rnz@x|%jqKu=xk zo4bBKn&bTV){s3Ag#7A7%kTwwpgM*uzK7(N#v0q|)t3y`Uf)JKP)~fQ9ky=i`DzT+3*E-d5EJ>HPm95BIPP@EL_Jw%D+J9dL@!|lW4Mp1%UFh$ zwhZ@VYW_+=n^zYl{**Vo^b*bSz3N92#bAcR5b&L7oT@Z=gvJGpb8rs!M0G?7u+6GIMf)6~16XXzcbE>TjqH0hCsPe9=RtFOB}KSV@ufj6w|^2nl(KZ~}3gAZLnttCZr_fybs z5mQiuM5*R}O?$KdDO>l`X56A6elE9vK)3!3S#Z<%>`&*Swk_-ch;FKlCTr>i=(R_fvJK#SDPyz~RDl$8J$7ghYy@Yl34;et zx3X7F>y7j{-lMY2@nKmLLYt0B5lW}(tZVC0 z93AV=kPfXTz4wlpDW{^Lard&@PEDvxq2oDO&ZJ~5a{9$?gDT>T(%+jbm=L;@D-%?9 zX>TWd5{iL8wiUoQU~7f}`SW`#;5cDRSddl`RK-14r@9}KXNQ9XJK4adA^M5P;Po(r zn|%22)K1l_SC3b>-+&0nr#Quz>*TFauqyq!c1na{6Zo^l&6bwrP~!}|~Ak|dHL z{1*>753!4@D-%L1#BNk%XYSODz zhIgnM=0}jc_JYyOp>bQV6)ra!EpntEeqNFCCRMmm}XZw&!%L(kRTRj z5D3cdE*1Bw76{I`*2d=gD|_7e+mQrMtjT{;RI9{EBwC+7DpI1*rNxApxFoh4;q&>n z6%!nz++IGTtS3I+^j}J||0*^1A*TOSxplAN|{=}lipYRqgyZj$i zi$T`5KO(~w(@N$mf)T=IWx`AgzD-{Sq45%_^(f&3-|&w0ObL^MoJWco{%3e zIoEytXa4j0^f7~0p$T@9i*Y1CDL!4nlCH|9s_|)8D&NPBPL=hp7L?u8>_FiNg*YLo zRN~yRa+RGEKz*DDpyjZd=eM*+A-B9obK!^+8<%%jt>r#h<)=rZZ)z+WP@4N>);!zq zArJ_}!s7Cu%q+8~q}tZ{+RJ(s6yutL6;soFN9)Z3Co=M%%&-zKj&>+tFiXCpxz#)e z^^Fe+b*@`~NL4Juhf9kOt5IuZuZGDB@^hGDYCg#kzZq{aeAI_Ji}$V(=^WE&AJcf3 z3vJ?MM!&1xW_)`!e?;@VO6Qr}ph#>p2=`gH4JlO7F)z;z$RIe+e@Xwm97%4py~Sc735C9CI!e`B(rZyK804rH50gJH-wE;Kzgznlg)hL= z3;rw5+K2x0L0DMZU7Z??bs+C6=aUaWhZou%fZng*22*wegu+PeAW78^|U`-%}zGyssR=$pV4knu`YJiu+VP zmw(92dDhkX+4p#Ukt9dzmOc68h@fyk^0{n5AR2BcwZBMr{&-7m6aZ#6X*JEB6v8c_ z3UKU3S|K1c09;P8*6T(v${N-H%ybsbYlRnO_NVGPK3vnHP`uPe&nWoG+eBWtVn2tGhntmR{O+@1%o&_d(?eiWJ+62IkD;Y`Z~x zQFgI;)}_p*#vIAPV)5b4#-;QgClV3q)ov#qCWvWFS5@E!OB;KA-EacN;_R?KYolg! zt3Q;pCEASnc1|kSR zh%l{`oU$bPGK0(}N&{N93cirl4aL!^dLhwWu`RDE++It+&89*Kp)|+4JTFAb#5*4~ z>Mr8Xs9}mUauxv0*jlyQiB)eUyg^bMSkC0&50@#RBy*_Y4FkYe{PgHrW!J;GrKx!D zGmAn1;MkK5v${ZvFHL5xV}5Ll%TJ7iq@}HgqEfX2$R@VV0*{zhrc?c(UtH@KC=6f> zAP{y=|7lJ_=BUMvB*m^ohC^o)5WaLidaLMLC3qE+0|2hKXSp2DO#?Qfr70);9$+!o zc-9qtE3$;d2|h}VZ4I`ZM+1T|gBe78hpNYz6=;Y5QDf1q*3~AgBj! zlq(bMIx@ZcOjHR{Lr0pE<)A{(2Ku#yRzn zf`@k^859ghDi&ZE-rlWr?Ln>(9I6$~wV2u068Z*S=VTKDu*9^nNllgjz^}@uhmxa< zmf;T_Sp1y|q&KuI0{|v%J$IUFjZG^A?D~Oywa`1$oj*3=_60w?&bsy=`TPIV@J$t(-EbHw`cm7;%w!{#0elDWnv8vV^gL9_@1i(3|v(`SkZVf)oo}7G+Ps%xLX1UUIXDr?VVQ`EP_7r8dJ^$Kyz49!K+q~ zN!e@kx7IeN?|T?m+)jrB7GKe~l6EmxdP6JWK?A3SH?}&LJ`MXi$##Aps!InqE*54G z6gr+Y@s;YenMhUJ$~BqPD0T(0HAwbF!5m;iBBsFq(LUbfcO~;zLKq|;RZ6Tpp?;-( zn%M9RlBxcmoACcqqQ+ONj@;-`xXtxXmbh`nX48&mkO=gZiz;o`w0nmw5)op81$X?zih(RU_iafJSjmfr$y}SV;xCyKe7JG?kC?vEG+h{ z3m?nQelAH*F;49NxS8nIAa*254LmX>E-}*OGAm%@MB;whSfn*77&MuujgCyu*%Z9? z#e>fBn{kyqchy>JnKB3628#qh`KJMahR5WVGek!;=vUJh1J-tmy4mqCBIS zyR@;#S~QnVQaI1O0tq`Yc(`R{8ReoI;ny0la`Eblfpg2!Qb=L@gxDtPEBsY$elGx; zz=$$lafAv`$6SwHs2jF61yh=j5C(atU23myTL%DW)LErfMpe#ppP9XVtiOn({rbew zqhxcRPTS+8gx#*%?L?_ZS-WG`yUS(Hw5It3iZSJu#lxfpDLVEb8Db(tC}*@#!-Ros z9CS^`WH%}nALcYFty=ET^Im~KHkSWndcIQ`)|0~3ZJB-k0NlSW{#^sV3kM9;ana&_%}{c* zI**DV0Iu=myF3^AHdVzB=Q`>%STgT{PpcIIFclNmnI3`)zE$7QsKpEbU{)~5u__*B zi%xSg>DD+LQe(jP%$yLGZdgb=AHOW(B%)K7%JA-G)@ss>!duNsioWw3JAVm>u~xEczc z5%^Dwn~zI;Mr0mCN~d1rYFqc-A8giU!kkEww-hfZ|2UxdV}FJc`x|XBApxRKnMg*Y zZy;zKjXC`9&EZV*!sr5~METMJ(={4pI+L>1#%6oO?-S*!?0ZX~Iwb+sTEx2o;xl@Dp>N6?>pr6r^>{vaG7>jHwa0Ni(nt`l=wxkHPwZ4vE z58WOrw*ri7{~*Fzw|0S9l2!b;&RAp_kvGsA{X@MQ4ch{9A8QFpWA0AsT!_m!p2ycYz8lMx9GopNba2M#h+bT7 z$qb(|SzcW3!||UICxV%*%fx!Khv>47G%=A?^4ti=#P$^v$%fh8t&oo~4eI9K%x3CE z7Q58Wr2?3`be4D8QoBsYv$CH{{E;BA>(Zu=jx6-X|6t`T$)P>41-oGjb4AafTD}_q zE6GBS%eMHY8}m&>A_N3YU{!7>{@Sn^s*Q31@bV>WtHWmp07obnHi1zvN(c#x*^)yj z&{OuI^9W)QciN@y+VYGlX+O8w_Jr`2>ulUP*AlO@y5&jnp6HbCEd}=5;x=1Iy z0h`00ujpGz*rKn|Dqm@*@zq+r)>^;G{AKR3;efiysQe9_XyA+}WKQs4iR82UCwI2r zbAM@-Q3pN$)iSdi`s8QthK zx8(h_YIl+X$I&>r@9^eI0U%Uhh3WIQfE6&zZ>?`eukFxXF)JMwfBuPdsk^pg8SorZ zoLQ|;&cQPRFrBHaI&_88{kdZC;fmF^OJ`y?G^zq0hHfyWy- zBLtADmQt7O(Y(rL#B0md{rds2q3S$yrUa$8Tsiv6Ue)U$4OBYbC4Z1G5@Zz+GfEl_ ztK&Dex=psmJ-T=&gKcLfTRK~ENY3Qo=!@eIth=_o{~PugR4%)qD&WDQF9(&Zo>FJ7 z%MPVL6Gm{x11UWFv0I_g1ao}&D?>QpN_smAypURvYxh_w3=HO+{UQMX_bhy(U?y&C zevwZ2P;ykYo)-^V{Z0~buzk?1u;?2<5%wW1)KF@FG3mnPGjF1|Mx7NT zc=V8Rw5ZLoHvXzWyOQ(x|FZ@CU!HNbHtnZFaoa1{Zpr=009xpsY@zV6oKQM_E?m_b z8{plaQk9$Wby-J4DA0s^|B$Q;rBge4HH^Nrug2uDmxkJar}v${0bC`YlL-Td1lWRG z)b<7j-Ae*^b4LUKljy*04g4kyFffy5bpDhR3fqyFca0T&E43Dl$gb|v_+e-^u$!2WddmZ1zRF=Bz&>rYWGTf4^5{fVWLm()<{O`hioZ>~>u(bHFpSNiMs!In1 zIt#`^<^)fF$xX+kfOq#!Tb+`@8~;oaJeto!E4-Ct(cEd4o<^LPB@Pz!-|AtQJIxVF z*e&lf)tsxtc_g1qxqL@ZE2zcJa5<7sz@mW0RymTj7=`F<2yJmOE`!YF;v7rh=O45p z7;|=MoxC?f2b>19_I0z zMWXe+zn%M_sucpN-SCf#g&A^fXiT3F`nx_efZ%bo^%8KVXD9lSgGiTM^&OX(wwhF! zV`yiS^8S|QV|)mr^T-$*`C(7AIgKCQ1wRyb)I#f-8s5}}-)tS`wH#J8xG#;Ir}W@= zdE&;fvXzXjw!N)7bO0V}{*xKGPp7^byH0KIr<(}AMp{E#_oijA5;NyH0U>IhgR>Am zu3LXQ$E;?{FzAASQYM+Uk08;U6m1Rtk$ki*k^@Xpcn>W7r8zPOYs<3i1JIaY=0dVI zl684QqV{JssmeP588k_Bw z+F#Tq->LL3^RVd^d|A8aegT!5HKrg6vKcAyC14pY3xF~$6+$MC1v6!7jHMJl4p2kX zW#Hvu%4JNpqI-BbPG&fk0RT8bl`=**hG8(5-&%u5&rgmH=YrRFTP$=ud-Ode=d7<7 zud%J+BDXK-{{Ypu*Xhn5_2j--JS(f%Z-t;izq)jmcdunjl{lX&c{lXeLG%8Wp8Z5d zwnFFCHSAZ>2f<6+Pn#xq0%IqK>gjf}FAIt5X7{C2?kC${w7;@T88CFPbpxH}e*q6k+=a9Fq?#* zvE{VNC|XSTojdobP1}vH2moN}GSj2Ll7aNG5k=nk9T31Va11g!*o4r)@SrvBrCuuN z0%wHUPO}2RJbt<;iE)c*?}KdGUYlLx-TBbYPEn2cru_CCvGWPK4C>6slOg#syUSe6 zo~q%O60AE5vBF192tTt#M0djM@wuVbXu*{%c4>tG$IjvWnZU6#uswUTK0tMlH3N%FxJsXGqdyd>;c7q2 zt90GqH+aA{mns>Nelsf}wqsQ+a#6Qh-(>6Sz>=<2^*vAU)1T^Bd_nhat;=47u#U6g z?TRjbT#x|P0PeFg@U)H1r{WCN!fX}~hwHRi-TeaST6TBY+*cZbaET0`H9Phq@M_;| z%aMAR8JidIJE1d#PSuE7n#9W>DaWO{cOd`(e_T_+E2|g?W;2W{mXJ`&n!G$vWVbFh z8)}|IU-I9cMUW*VuDpMFBkHIoey@q&dE+RU`iHyba>e4qK}ZwRy&S=bc@Gq1&-7aI z0|EG;$?B=~scaH9OUo%s+WlexK%(LooAd@d8!&R8{!U+mG^q8e*Ziy_2vEe1oKf1G z@`sJnSJeGEXHWvoznn&8ufH*X^Eo(8_bl_NbZ3jD*C|W+W*E!ekyFBU2mlQ&pU?f; zJ9`Z&GQ>m{R0Zs;uY2RNSziB@V{vO#3?o804&MFcp#0#gP{SJmu+20{9zC=Nwh%Y0 zo*A7%On5RmP$!r{I`bFm%_}Vb!)-NwvMI(2g~o7q5-^j71F9V_dzT>Q;`*16&WJ=u z7Ju)1UqIi7JVTStE%u1gaJp|>Ij7T?z@|%=aacgR5MTUI0Y%GDollNj*)j(xnJ_cv zav(wp<|>qlDyXIF&9= zc5AH=$XD8RRI0Yc;@sSUWGH4wl%f;J+A{6GmY=Wo|;6dK|`9kEO(w8H``Om7BHnL1Q!HYHN}VsrkamZwlUb*Wj; zCydsq=4#Yg(J%GWRzA9HR<^J$8yocE<|6iG%vNij=|twwe%&CkYS;CeC`=8zYH@oT z-Wh93=NjR_*b?GfqM-(w%hMEX0O&O57^MNwsEpX25_|h)6TGiLTw4rpZX{K(e3c#D zcU)P?1BH*F6A3B_YDn?Bw7x`xa`U9mk? zwxB{u9*6`g0JglK-v;vZ@b^^+=hea=Z`c*x93PL2eC8?BLb9erZo`T;jwK#Xs3+ z^r={jt#Ab-=b0rwbg<8uEQrFVk>CsPKuz`7N zeKMNm^D+VDzLcdURo42~uw&Y6Nuh*mcgn8r?6N=DcWKA`I#b0A8<$}O06@}RT=Ho@ zj)%Lrco@0t1{Wd;&F^YW2pySAxQv6sO9Psh5ufN{!|eltlo!%2EcB`r(frf9=0RlFt~Uk7hl zVyYW-_`^E+(OPO_GD|8X?Y>hYqF3z-4G~B%X4I?Z)+})$iXO+)zXI=huhN;`lLA|N z(5sA?V_4@uba-yl{YGNTgLI``2G2gx@K}u>9uFkBuaX%)J>Ne6F&%$ZKD~8&C=r%g z`5WzcHccCSbDcoPzbzWUi>~Rgk}TLkff7WEnsqPcU7+??O91#oIf9eUHZ=-CjRM!6 zhD~NM<1DO<=els5C-kbgy3u(PPL8XqOZO|2$L)u8rx|ctA6g!+&*9wdFQtFwJ)pL! z)8XoRJMPNZ1q?ll72#=8g>@i$JR?2;6;K77AbBNJN1Oj-M$R*-rD`p?dX45lszG*lvP0!0 z%R*eBOC!ZvK;$azJ4%%}Cu$k7L&;GwAs$MCV_Z@#{?}r` z2AbX4c&ARPvn7DM0BAaA#l5Rq(sniB$J(@?Mwk-iO$)pt08n2t)c;YS#e}55>j0H6 zHl9Pu2sOltcOR){>50^ER>i}Q)*!2E+QEc;db;z3=J(oo6!o;Wtg1s&DHIvU9;b~T zyaZOu!Ulvn12&${eUPl3GXz)$P5@d#rM|wyLRC~P2mo1*4)3HMkASTcHr?Y^oP+0S zwq^Y_^1Sgm-%(nZ@q$D#3%h>2X zm==Iqp3tj?H&@{fT`pL23{1og+Ln3C>iE@nT)*(bjqu+llu}XK!G$?JugS%q8Rhfk zj+Z~X5r9u{tBI6)DmAcmI>NtoLfA0dyzV`TSEv-KLJq9XpgUx`0v1qI3M-K3xcdyvV~kT6hd9 zb0!CmS?Qz4RLpDCzWHpb-$|m!s(5$+hqHs~f29yg_`RuLXCm)J9?uh6^D1c5_Jm>^ znlc^k#jJTuj2ZRfW_mD75J|a={6&K$brdz?RSW1ark)BHLUAgz+F*)^SoJ8UT}V>T z8cw~qnZ^q5#idyZ_0kkgvsK%d1vonlT(>~xD(T~@DiUl95~s9+Kvx|3#^S326%{Vw z6gW0g_4g)JrzsS^5;HUinTS0WYT}PVVZ1wZ`r>RDoJ|5JEp9O~d`JbF*Mab(a-{!c z762~g)qLxeloh?CgWrU>?rD}~y*bwwRI|7vyzphtN-bzcNQ;Yj*fWzvl6)oa>K+oT z(~kQ{1l|?L`qLBEq*|4Xw0@5?#8YxNSFlA(3rabxW`;)~X)!6ukra|CHo|LI5k`Xa zVxp(M0RvCyQ^x2@Za>lX718L_Bi|;-!U3Gq$rWDT6393;z<0RZQ<@yH~LN5SVFOq+ovh^H_d z4xqSJk`E(LYtmCDSlw#==v`!cWNiE}&?Q7l)c~56F?wDXs6Xx(#6-TV4dw{vZ30g~ zh(DD-@#9~l6Yi+Rf&b&q9DE;rKDVfDu5LoJSF97MJaSaV!96gF4V?fJaH%l zILh6yR*6$D#~uWvG&MTRelD@VuUVrPJ3U|HRx@CC@5(5**Q{VLWQt&gN6Xp(smIyG z!5~oxs@9oj+Fi8C%b;kyDwpHg(V)=`;uh2p3bdRh**O$WwD5=e+SjrjHPAS_SpY1a z@>y~@yP)y6b>x%HaAy7Gv<-{N^CWzN>lp3ugH@cf*N`GpOayl#rZ3w7AeB$ZH~DJE z-k0Gzq0=t_$QlH2AoC*WRkS9kktZ9X=~pN(w1d;y>;noW0-(4Soi$6Nh_W*}HGnC{ z-%C5^h*t~&9d(oh(o9v8B1eDm4cQV{gfJvO4M3+5dD70%Xt5Nw28ZTw` zcR1FZ-Mc@J#dimPU+entHz)xhyWWWyg(wZp^7yqfM%Tf6%5>uz4%`KPx zaE{Qw$xg7+zvkvfyc??ydOi6AjgE1ug5z=mi?YjY!fhTaJ*w4T@%NVYC9(?v3dHtEVzk1(&*t^+XOl9Yli zjrB}9nPxpt0-3GW!ebBsCZl8nNI-97SkBUp*7j3%weAhGgn=E2Ky_{$6&2+nNIEjR zBx@V9SSd85kKl6dWf@12g#alj>FIn861>J!0HZWBI4-fLly>Mr?zQC_I&mr(t%%nu zLQz&cOX;xrG64E~=|8$J*80C`nP_8Y|(zMGRYv@!fvZ6Y7vM-bY?j9t&y+1vau2_h9kN^a881 zuD#1vjcwZv;GfDEEr;JrL$5Tjr2!NH@N833J_AhKOw&Y0QMEq1S!~Zza$j+o4<5ZN zz8T{;N-Mi6Io|Zfz& zf)9oHXS=HvyAs+)-7I#*!VF)s-{M*#*B)_kk3f+8w4|91yjyW~VC=L7d47Ci=Gw`& zXMLjcOjCLWqym5Bnnk~UuCsN1)iGrFV3^Kly^8ItEg5J?>D0s@gkQZmEJp!9R!YiE zU}xErLZ1E=fgG7No&9B{vnRNvBLg8Jlel~Hs_}=uORjv~(2mo#?z23-jE-*}FnSuP z;YgYxZ(caWQBJJsM;roF?z=G4nUs8|(tkHd-i>~v`9H2*ZwUz=l~CM<sbN9{w=_fhFgZV`Her2Y81@ll`gX*xN55cFl z&|}v&k_-=|04#0Q^>nUh{i!+Sdb=~xIzI98vl|{Z)kPb_@Ytiz7RXfE5|=-n?R=uR zPu1euzxAATU{Qxqfex1J^1l7Fq_L7ZWgefR^YS(%m&?|myT|>{AjT7DBD@KM1LOQ~ ziLDJi3LndMv)J;3H50r$_A(uy>{={fbN6UEDt(d%p(@o%ve>2awz`s8UTbD_(XnZp z^}MhvA6HMUmyAdsz~M;TOI1mz_UU1u(cV?^2p8-K>Sc5ct&1cUJl`EfwHnS zPtuXu#ZCcvRrrxySid4Kt(vcH%q-XqU4RFwV9NMY`L76uakYL{=y+BSsZA|GEYcZj zghCy>^@;x?en#&)Wlo@oufb7{;N*h8X4Pvo&Ycou+i4UqEn;dSnbhEM^sjO_PmUmX zPEgWx`=^%oub@voMH)x{?`qUpc@8V3O_>=B+L61$;Tqsyij*t49ePr>#caPMGYTt8 z@Zv1;w^|W}!m=%kgjujGWOD++5(Bg_*14O3sw*HnE5OJ(Sy*QTg{*NvKsNog@x=SD z2_%7XM6AzLBT<2Cz8sLoD`06UPXtoq)i4{lFpw1&-4y_uvan#y@);`DOaqb_kw_qk zubM$2J#^d>EQBOp1+k^rkw`r9rI5>E$t2o388IrGen6@?UjY(YoG2(sr(tQLr%n|M zl(&IWG}loX>#mbc425f$REYoV^#LfkN2L*`!iV32QI*{ixs@k0e} zW~-K%VhI0k1j9?2{n1Z-PuUVfDWB%fOHg}xuWo~R=J>G8abXti#sE{p=)cWWQzhHyRiXiyW8I&l& z*;3gc;#7tBUUu$h({3>UEdDx594tKRR=_i_sU9e?1r**1=+TvdzwIv6`sbvu;UYT# zy@D0@0=MeM*7h>R zF#1e{244tMQ)bW;m!X%aQwJ+xanjI>Mk>wZDRAp@xM;JWq-jM({U2gaS>t&|KG> zMP#NjMM!Rgw$v`6%s}JJU^#LN0P!bRP;>|MH^)FHaT3M0Lw{2YL@41DuYm>}x5)Fg z=}7gou3anA@;)CkX2^oQLMBuCw+m*XhgZ+O4gK>kL1KrQa}(zl9ZEfZJo3|k(H@H4 z7}2PRP(tZ*0%8 zZnDLvsL{DQwFya~LZ;b*&`~i6x18ZAAuizUjn~rl4n91w4@h}B5h6f#Z zcHF2YBB3be;`Hj3YNZL8IoCC>*Wpq+#&Qx0Y3ITe005IYvtAtaCKg;0jHFpaXmY0_ zW(&MKO`kP;@`3PisPBYaMr=Kmrh9qOWM;bZQ%JP2FlpUD6cb*MBb*i zhwvek1UiO{mJxF=*!{2eV)9nHoVpQ1UkTnJ*Oriw&~tA$`A72F69z`qRu<@fRG0d_ z7X0iE7w)v`qY#SQgSQ0vz||=qkUr5YSMgM^1(AFgmG`TX0eOgpehOh zQv%d*;l+df1bY8!90o7q?OwqdlSjH+J}WuKk)Z zYZSUtwq8AkU;UDc_d9oWu;9E}{X(1YzXqak{W7T$$K z%TXrX6|ihuTW#X)?HwvwTss1mqpHV)Qo%99`>DGlGz(sB2XlN>tT zeh3KyDE!6sOekQxtA<}b>88M)`Sk~Dpki-*_qtk8rP_{K+Qk^bCv&#lJdAa0+PPO# zCEtC?9kVBf)T?yx9+5GkX}n82pIG>4uD=cnDswD*w0FLqbg&gEF6~FU0n;mvz#oDb;eyM|h4+j!$){N;0UQ0gRvpe)Jf3`$)|2yT@2FFrk zc$%r2v^T9J(VNRkcF3YEzRy@PC!sU$n`s zR@qgfwP>V)_){6AhtiGu~36!gduoLDZPOwMyqnsr*V*lEnP%BVakL8>)2ev@L779^X;zf3I5 zU@lnzr9Ua6j4YAi(~Qb5*bN(5hKG^>QNVvNVG$fH3?K*qShd@n^T$%wWJ0H<=(p7I z>mb;T3qj=-0qGCF_kghz$#9o*b#D@EEumLBEz;?9{))5aOxhgd@7EtT|8UCDoIyvs zE+a5Zzd$zO;IOLnbKkLKy$~-D4UfruAt9$UOmU7JN$VF(=dg;(Z8oYyqLiTtRFoyU~b^PiDoq9?g1f{dQm;DpKbfO6EF8;FQ zmWKQ%Goz>Y$#gtR*W!8cLl1JDN!Fb|7QmoDt^5biUatLW84jHwYeoYeMBf(6V(p6d z#SYL{Owhy&9Zc15HpZSjas5-?KU;K*AmBts&dz{BS86*w6Vs|%&^DwqP_=4yZiXoU zR!ykS+lQC|dqD`JX2BM34FE<>07eaI)l5GQmm#C_FaQASnGxp%qGmxDh9Ru(^9Tc$ znwvt4w!MO1<>M3x^8S_vYHkCn-nVx3 z!#m@LY)J*{bjOaj&;Yti0`bbh7V9YJUqNF~7bNptQ^>GzUJvYINn#*H+>$DxCxjGM z<@%2(xme6vPpshA;yB=8jw*6#s9MNX46TcxQV}!^0aVUb){2PH+9eQmISmJw>`uX1 z@eESuS{(%h`(KE$WN?oCO#oVRGQAH9YIynifOIY~boRID7kku&S%)pKpJYEI+#QX2 z*O+8|s4B7KwJ1htP||dnopI6|K*qivm3w#$PHF*E@ei7T%aT{Qi#`=jfwKp^xyDEm zik;A`gAx7qbEaDYJ=K%|Vn5B#XraqS0HKY)Xyeb}fUSGHigR$zl;E@48CZ_KV!Xd# z^gX52S|J!c+bgXy%6(AvD-tAl6uef8C(H z366vT$^vs;%Y{oX4k-CRR3i^9NY7Z>STvA`LBl!^r(~mED8ZmHCk6BRRT^rPP<29F zZdWQ(qznf}7h}RYU`VlJdg=lRW@Z7;l#|Sz1}2Lg@{mqWj+orVC@KqP*TT z)LrsgL2u0|v1lrxoFxfYXcT&4FTVm|Y?$T=BgnG_&31m+3IoV=SxTO`#$FI}#}7HKoZb@dC^9 zL+JUXqliA@4KKa8)C&AyLJ5B;=U|D~x!`*Tq0^CPn%>a~5|(Nr0E)bHsEBP^-r;nH zRV#zPEjXx)%?6^%hfAN-6UaLFxxXJuxMv6-aYG zD!ETeN-oHhlx7%bXacsoVLw3JH$|S_1b|6OO3J+vRiEjFqOMbV0`ViF69E9NW=76n z0RVn06Qe@%2q$&LDxFiihX+>;EWlvHaU`%e>SkN$irbKYH*HQCzEFXJA2$Zr1}-+6qQ7R-*myQ7 zU&HiR$#A2L73NRn<2 zx4@+6MFsw-6p>P=y*_64vgt7DRin_ApIJ!k$&Jke7PKrSys7}p02}qI>{UZs*_D#c zm`N`tWZ7_-8jkZo!JSb#{ND(p3SwL!Q>5W!Z{}bbNkYtE>O@NbM7sOrLq9mLg>0DK zp%;^fFV2l`1GxjYd3Tv6#cATh|1?`owdD-akv=0b2W@Uh1(wgA1VV{ZHS(Lf@Mi;H z*$N)Koy@_>CCp!*$(h)Gmrok^QT-R+aaw3gV_f+)LDBE)4$P#xX+c+-N| z1AD>O;6zOuOG%l1FR>ldkS#}uABg_tU|}+js=HH6v#_^N_He%RT)wYsIolhGteN^G zOEK>exONy!^og$J{L2q*)xx2;Tw?Z(Q z4LO7YwbW&SmXsID#8p{{3k06s1~#M9H!*vC0z?vk{bb+XPD~lfu^Xnda}oDuYMXRf z#I!u7%X!<^f}Wv*-w&8~hQe)srmq)2TF%tJn(N3i9(=dT3jY{(C7BMq`}rC%M1c%Z zfnBeN968U_R=4i(>tjNoPeAdPMTB^))-0Gfp!(1Y&3kEVe#yz%#+6tT_J1yupG zxQJ6dsReqV>Bacg0Y^%$P>&b}yTMXAFS)T*dEtn-cTG!ejCBs$?Ae*b8YtfaFG8m3xEk^ZN%Q zbZYa)7$uigM_Fdt=4%pu=V}?SY3lkYP`$b#$4E~=;Z0G?2hD7*AX8F&n^4SpVXkdB zGoi39TJ~{wgRD~jxhU?HFc{+Na5cOzD{ejzI`cpcdiGo%Gi3W57y+-Q86th5^OQd< zl7wQ^JO5!KN8Weh>t^b{lk5R+ra%1tqhqFHQAmgz3w^`haV6d9tRd%}7P2FO5IE7m zZ}styNT9L!4jDU)w#zm~EoNyW_2+`}mQ;ei0RtSa7I|9%e`ri#>}Mxf?oYcIlP4%W zh($2(!lr#NdUOq#g}P!1o7FXB3)_)|5;n{IO=UgQ$C-i@MmL1~9QbA296HkTa5KsR z7p>Wa$hO@K`)f0fDfU-kz=*(D#SHKCOj&fJ ze*`9#rd0>(3-XDdI?eKh*>QE#?E{TDT$5nU=K^j1Fgd_O*$U^*PD04`a9? zUP(ljJQS!_*DVj3{i=3Axcs3ZV&OQa6d8eUg;qE|{r1nAC^ zEDE4tuTROr)j2P2rWc2v%itbv)<5lYA;0zj7|RWZBT18PUouj6utW_Q=~$4I)EILj z%m!ish+6uJH2XaLq5cB*BzIFyOfnW&r8{zd3E>o&P-kO9RrY{4XEPF7GwyL?YU-ws zL{PZV4(AWIt9Qnm0s>(B0MUyIeC6Y18cexiT(VQz+Wse#>DnZql0bogFE8!If z>LOSZ6S=$~3Qtcc3Cdeh3v$Qq@SPDVcud4TA@rvo;1UYy45Uv_G-s2W0A)~7H8jEe zp8a~MjpTH^TcNFN=0cX^&f9oqi%t*HvOVlEICSE-dBnHQNoMHl1Z~{^| ztWC$05k7UKdX6r8c`rBCzBp7`9929tox~6dXGf6@=A`P_pH18tRji^oP=7GDw@5M& z+r*$%U3%6%Z#^)fPUbcexC=xdLGAUeqn<2CC~HLmuz=*T{b3!rt(0=jX6z9%E6AN1 zoFyUbL|an%TOYw03nh6V3~*)QD+S7(UnT6*uGE__tFHEUc5WY^Guj%*s zSq=lhmFO25u^xg&VkDtcTC&7pz;1v93<%{*7*#+!@NS9C;oV|Nw>m$ZOOjpW(T!Lq zVViP8bH`>r#s{L|F~e*f+3XbpTQ|c0sNwa;2dE%OksXt=!(;w~*^)v7rbTyj8pF6^ z0aP9sr~`ME;Cdt0cASeUv-8lA{gQ@E61OTDvcH-i`1NA@-rjjkv9vRvt@!5fP?~_c zPA_Bilp8V@T6K%PLg{q=lbNF&u1u)Gqd{6!U=TpL)KGS{z+VHgfqI=aSFOex$|iJz zB$oov40eBxiq`+S#<@spz~rR9y;JidOVP48EuJsum()yG9z(lTQ$6_#Gw*$SCyeU! zG*(A%onx)eRd&_Vf>Rc>;NZ7K5CDh(S_gmC#P7lZ2b8D8De?%hE?`=8RymV`180Qy zGO`q3h%5Rb0hmLr&_=f#aj$GF5Xa-B85*l=rowdx~n$jn&Sf{OmnU<)n%Wx+m<6+f9j zO?j5ow;%e}g{fC`E|!3EL3k=>o^BjPg$u*wLw4u0CGzuJlipS&0Wnc$+vq>Q%JL** z_$Tf6u>_g7_9fIeqxpP(D4dD3863X=2}l%|Cug~ z&*$62yim(1nf0HvADN*1N}V?7{+O98LzTu60}89`FXL+^fF<5g#npi^@?m>RlMSu$ zoikOZr-}NhZ0MQB(tkl98{b0yedUMhj%F1Qd;ktmD)fd4z;!^CsaLa$<*-=i-K0@Q z={8uvRFCah!iMS$@KrEN=wvdExYxfZ28|tiTlS&-^+^WPs?kn>FUaNh`pLzFH#+5| zUk7EK3^r3o%UG&wnZ2dCgVID?j`#K<0R-VoRlIJD{|BZjR^~|4K$QS=XNmu$ICETB z-qgUIMFM~0J8a120C)nXfM3h$|BxCJ;!+F0+2uIzoc$t5czbCBFX%~anXdCXvh99z zL;tz{1i2NxqT#Wn-JT^7uH9>ismgf857q#^Ci4vKCgVMAmejAX?`_az4qF{=esZjU zJ;?{4jeSA`vm(T8DJoo(T+NNxPtDCKsoFBXoikr&+fTcpx6+?%L`$@bF*TQtEW=H6xCzGwr~;zn;z7-E3|v>5a2m=WqA26W&UHA0E{gBT3`Em zGyVOzE)?Gqe&5?+udSMDZ5~x;hIKNv{qp*dp~s}a*lB)5XZ$Pgo?=mfHeE*QeQJ$K z@%Pc35x#*)4a5}3ap?qw-}q08a#qxgdWI|j)Weydqr#7iBKSBj=_Q_L+r&W0R=?f% zWwkUgtdps&+b^&GG~(>`kX_wX#+n>bjyh{`bcdmV-{|7)!$rvqpWbPcLNiTBXfwie zs=x{UV2KQ$RosVuqq%*T_MZuv6GQ<-rA)DFZ|e>nKID2vk>YqFyfw= znb?(`p7p(E9RaYR&ZC#Txc$ohr;jyWp9x`*`A%h&JWym}z|2^kPXhq1IQlx8$J(n` zrDpTY0BD1%64_pP(}Gr+E=u2%%jKp~Mv29T7fSd4hIjq3&D)F{4ygPl#Sv;K(S2B< zT4SwJW0Qy&S1>@fRzLKpcdJQW)hm`ztPdOSyA@H9PyALX@zUj2STFR6; zR{H2s^sV1|S0|#3?9JtJMPtJsSubw2LN~Oe@>^Mi6CO+f08XI__6Rkt@;k?Ug;C+G z7YR_Ax=Pl5`-Fo6f>Im9l9EQ-67kdisqMrnYMw&^7n_X}-|T~@8)yZY>u(NA0B{Pw zV6w%7oZwkOlM%UN4`S40rc`Y!S>#fqz_n(v3zsVv7Z%+;?J)p=IqT+0`K~?C)xG|Dp^R zEOv_(AOOG{Rd;nf$#G`;4Y#W-JT4}zKXl!9zEkNT3@VF&*r6Yl2LRmjybpaFVR(%5Xb9*0SI^#qYX>EUmh_$&BCW6Aoi9I|qru;Jn;K$gvX#A@0ygUR2Y7o6gbc0jLV;N<_4&eIMe)#y|C%d#3`? z?k8I+c>1K!Bfzsh>8k4oO9hXIe8@YtG~QaTH8nb1i`1qjei{jWWg#R_5C&&D_^Ta0 z*g66KH>R8kBPx1q!V4kv)GG@|a`3H;+4s%$j^f6!-y7WAJuW&d0587Q?&+V|dc58N z#vlD-9;rNXz47Vu8^BKwMNrs6$FqwD=7m$)qfIc=V?jt$n0cB{vn6f<0KUT)nB5Zq zwRL5&C+085+*v#T^eGA5LS@ISu5o0~&N`Y$v2C3}kBpCP+1yxh=cLV2!DHp!Gt#&0 z?A)oLx}6w<&$!7)?5NE>fihMkkp(6Th2|I!LK*;=>=&E@|1A0%_G*BS$vKADU}n)9KCtt0vplNu7-EUhjYe$D}gm; z3Wb)KLRymRk4kyARNmr{3N%4Xh!e^!1e=O@t*-T*R})wEtty|*znWV&)^0Yp^>@|O zdqBIrqCziFDy2QWI>(sDFBTU2tuVS3m2ic`H|1vw4{RXM1#1oP&tTXm*jH%)li2~F zP{EQ)NH}y?j7|+ed8iPoOR5l8_NIsJ$G`vSggdk}0Q~^?gfGAP;d$~|TwP2#-Q1^B zN8eKtMQ~<%?2Og;G>9445Svx-iXQ$R3_lg8}mb8SA8$(duzasm $`5`zsq+ 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 VK}MWPv5yvRFE13oKg}GfQ6Z zeXjdH*LB_3eO>o`U79GIcwIVM?qVstT=1;xQ#zi}1ngDG*NjSr(EK@mTKUkj8 zbmejzj8PMEGnAZtR5q3DLYR)H(d>9eE-0LoYZqOvC$zjfnr=|x zXsNLDoz7{78RYqfqb;`zGs$HPErjgJqaHQPOvhykdctIfW6vpu3-op!?tbvW^LQHx5lJa|7k(89k;FK@-22`7raD~ zArKf`fcenE{{Qp2m32>gFFyUG*Ujm@mz>^v@4ffld+)vX-h1!8_kNtydro>z@9lYh zzu)uB-=2A%ct^^g1l?vCZHopt=(Z?mn^A(cMFSkPy;<9gX3(}EYg>>5{<kjmbem-`M%%2dD9Ay#Spz2MHfzu}qXgZ4 z%E%72Rgt78F_f%jmYqWYBish9XN= z(6(q>&^Bw(ZPtJ>GKv1cM%yf-ZP5of=r-$=zqXzGdo*mcgoIu@7{Zv zd+vMg`<`Czx#ymH=5BM(-1pp5?Hd5_<^B2I#fO=n+?%{IMY1r8Mc_DV z$B4Ki8~Hv3x6=$V632TQqz9+kPIGV40_i5zHk{^eu}%RuM1&R{W1q?gE5cR1SFxP3 zxEowBMoZkW4_3+&d-qsCdT|G@k&T`1ii^~Aup)P@bSOgZjk5T-3HuyW6S?bSn)^DE zS0Jx~aTT_-w)L@PQ%-ZkUH-^e4f$Yn+-WH;S{HS2T&S)PEL=Vw0dEBi<2Wg$MD4b>ql!8ekJ;B`)aa$MCuvb~(gVV#N$8ucWE~l_A>7-XmOaTA@ zRAv>Y^K^5%P3QDjXzS^^iN%kFzy3Ieb9e93-D&4E)6<<3(_Pa{cbwtF{$EieS#{3& zouULNswk=;NU*kXcc1BuyYKe6bk9!rtnZG?`i|dwCo_LtcfWVyN`OE-A)a*HJ%l)c zK>vL~wq3WiZCkYtk2$A34OB@MEJ9#=f&Q^7{r_{f(fwbB?ewm=_uhN&z1Q^K^}af? zrStw@>xeoiTqt4Lf@CDmq-e%rW?Q~UM&c0)Y|KV!n$e8e_B5fxQq0V@=nBFrlhF3c z%u<9Lw3P{2Gr9&{ftiGDw8mivoq+A$CbKjl8*O7o=K_RcmI95oct)nLgi?`=(wmss zR%D?qW)9kZwjr}EMiELA3)`N?!i*E-$P&S^P(t;R-)ufAQLpxR!RR75B(TGPx}cAmDqFZAjmz{1?di z*+e(%m#b#{^(9fO!DNTgoW`@4gQ}_%*AI6SJ}xAzrJ#b3x!xcb!yDYkp?1FniMDO&E* z_i~5}iEgq*X#sIZnY`hX#iMtme;Z6(*bxnehdJo7C$ePpB2b%{N=!o`FVis zeR3_BuZ6*pMJ<3Oc{O^-w9^lFm18^U#-fokfOGM*qP6=2|1o-Ga|5y`Tl8AGdL#f7 zmdxCjs5J-^jIMVfejM5H(lT91utU%6C50CDGX!G;K%0#K>AC_y5h?TWLju4M9f%=I zd>ZGW&80pq_}(QeeY0p$04L-ZF*g9~9{tEYxRFk_Y9r^|PqbB17@rNIvsB_mcRr2` z$(#iT{B>uSM+D39E+bpG`bHlWTxVGak->3n40Y&g&*g9E247~zi@hH z^8?ZvyEX;kJN+L6u?fP`Oj7vuU{QG-lfdU2VGL^lJ`SWMbk zsDlQ0ejEUcX!8kh|L1H*n#jE(pmmpk_Q~dQ2JQ_20Jo3x2}>C_R0eZbZB+k_TCXD?e}oiFE($=DZRtG9$@u*$ z1krMolM(tIUkUhEOI~)AlX3bThZKOQ&+CusKe-)C3pLXgsX*di*jnARZ>cMe6t=#1 zGZpji`}!SA{FX{1me%)%x@o^-iHlSiv9NBYa@^Mv=dUoWB_r4*})7%hS&UxaL z@*YcM*{^O5pbSk;di!9YOQT z`jmyu3rW3TBWEq|_`#PiJl3xXDu2-EX$5^eXY6Qx8R6VDOUCklCm#Y`XKZ|dg~m4* zBwDZM%T5n1e@}WSoqxGt4FK}o9%ED=itKO?pm zS5QPS>&M}L_YaagfUom2H*~Y5es@|PB-oeJyFApUb5lVnK~q~istofk?YX%j&Rr%V zO}qf$oRI1Ls@G*RFLWU5B7QEU|Cs9>)<46J33C?B7@lu7b457kUGf|sq;^fiB6t7a z*xG%ZQ%un%Y38r~+@g7Vv-?lwRLN#~cdghkS0**tKRi8?pj0!Rdx?WA6A5DDmPX41 zq8Cm`6PrCLCcSV@xx!jy&8B*s8OMGk>%!U@hT?RLRfHIYDS0YhnL0C*PubI)b4k+^ zR!7U@6r*VT%4qqJp>awlYm7?OGd$nQ$V%3y&*sl!ruQgekaaR)Y}_(l?Tu9oAXZx; z%~^4##>@&-w8^WYnyi7>Hah4vrS8qY;$cU2)4Eo$DyEl5Ig@zGuK3|e>&GsJ41ML4 z*loe-hrU>N^X;q*^=9@dYo1d+S!SYYeyeX=Z+=VdT`9XGfbq&Rk5A)L-GNluZmn5- z6|88dbUZtqkWBBZRD6qH;^P1t963P==m~3y%q_g zsx0G+7B{G9vm2{IJv)zls;PMO8u_jM_NvxvSs3_rX7J1*dp_XpQrc9io+w!>li0*H zfWyRfiIZLDuVgz5P9e%}#q~3b$A?CO)41db;aMe19$ZqbzvOJdv~K#LUe}uOBa=3a zT>=@3UT}&{(o}d3xwFfd_Mh38AtqU!RcvqP)yetC27S=bR)2lJZU82$A9!Lf7jG7IY z?(MGPdpCEj+07|jW~lcW{ZP;G>}95OSiw-_e~99IzDX9R-LsLkRE>t(qAdWlRjx1Q zC5x@OJl8=UTU5tO*6*^Ld7i~IeeaGm;E=YsDXUabU5%Y05Uu9Kbb}*e6oAvjHOa8K z6v~;)lVQKYk;|OzIK;3}Z=4dRZu+6#Hh1}|dC2t;#r86XD2%3^czduna7uQWOGFw? zR;d~8jyN@WXZD$Gtkn!BIh|A3aV?8e8V050 ziPiE-{u`#@$s~(&3g##bh7p-sME{|4XfqaiPm=>woFDccIL3@`XieTc zUxBqMx5B)uQ14dJ=AcCfsD`$Plo{$d$7*%?#-mR(H=a;W*SNW1LlnlRdaBz2_e`T* zL=tPqM{tf<=M!~C9Xn6$d{Of;J`KU|WqoRXaq%u%#*#eFDP+I0O-rq*>?TMX+Q+?~ z066cnV@#VD0bKa0R}!<9VNN+j@BgME*>U{-egi&v30N-BF(%!6sw8SnL5*FG2k=JJd64J7%Li%F5o;x*1Iqe$702l~eLKIq(|Vxp_kr z#;#R^xOq<(monCh9=Xu&A&?7yHg-wE*^Bxq0~`8Q)LPb*c+C@?EFbcRKww(&V|mu6)(s zjNodG!{>0Xp?XLUP&SAM;m^IHzEaLa*Nk%gk*+bAJNRpdlRH=L4{{exX*B+MXZ15Hhr@S=%ET z0erXV&`q9)C@eiAfmgPyVkc7k+|`EbgSzEcm7}X=r&&7NRPF5zyiFq8 zrRHxodN+yfAUUUCj6!JbSaP$B4dAH;!o|5>Xs)vevIB4L4xn0TLXBwZ`+$?pn{L&rPaKWIBc-!b0YA>^ z{vPQMdVe{PH&^>`ml`-oAE&N6iJdYzWX;~YbUh{7{lj!IxssO!z{QqHRjDCvYZ(_KO4y17uvW!fCQ$1y;0lF1io%DVhQ3%#|^l#puIXj&&3WkIsy)f z5>2#hrfIDNQO8XQC#nKHBqE5S1*`LQrBVufJyeGn6PUG_{O~ zrg9o&54c^?i=`agrt?<-Ji^hM1gtV9uS8oflQiBo=bz3;{7`?E-1KiSxo5wUAJlW} zRBI^!aX@djU?aLhn(yIeyU%^KB?(-=8K(pvz1f6aobB_0C#1>782ysmQR-$j-K592 z`UR!LvxadVx&L;x6^efmgZfO^}*=3tXGYq3TBuD%sP+j|7mJ0jYxyECwN?O_tb zSmDh{(zgR>k!?ytjF3l9JYrRoGSkhi%{rZ5#`+CwdKe4_OO&fu%;qcItEqcLc13mT zaxqi>m1i?*0YX4px1c137G{#146Q8gbOE{7N^P?rnfq@v)V^Q zRqR^65{UG)WRJ18bZs|o(N~s}ocbb|Jz9~FH(s4LU9&y_t}0=mW(c$3lpDVi zK*tWfBw~+VItrVFnesuT?U6X)puaUpP*XPWL%-x)Tu%3AHCRhxRi3W{alW<4A+Zkg zkvzq5BxpoLQ@dmubq5-bDXOazI@gR$!4(c*R7TN?))KKxzD{t~h}=FGsqf9)Th|LD zphWc9O??1-rEQJ=!fm1~9+HxWOP4rd^`PDo>lS+JF=71jKZx2s7n0x4OJIpes$iLM zl()g{fvc1@xkiX3rH)kg0AA#|pO%H|Cw<_)mdNdMfzue>0KCas5;$~NWMk)1ii+TJ zMQ>@fo3Q3{^yvEn0M7O1)v|JE#0HW3u_Lc(ol4IQ<{9TgWSMjci1$nIiHM%}B)R}UMq008$ZMzi`6ZY=x}suZ<-E}nCq8lH{`S`iUV<#b3?D1Z=uIWzvXkFUph zbM}3E*s*-kXDjSoSX<2Yxv=4FwuS_;h-igv&TF0~2{ zn~K;z7np^gF+nXN(yrBg1o+1P&Bl$?d(im+!fP&mjTl^wmOwkj{<=lhO($=Y6cf%F z|ADTS##mC(Ce!HsxtrP)TqDKek-sHRpqc3Dzc0T5bk#=oY^_5dPW8m&Mgrgp$0T2oPo$YPoH-{Tqo?aeK!hW=L$=1Trj zcvJLFdeO!kDS2iCOi3XkvUH6P>9*|>ZDK6-H&)GT>K?UrMjqOZNA)=d= zTk(wlfmx*t82>MA&P$TIUYmnSB(+T_w!FqP6(Z8k^DMsczm-xGbR2-aud-@NBC3bn zj?SMIGqgNNKHgrAP=^Gdh=_Kx3Jx*w6wX8QtF1~RD|0sldNF>V3oWlc7J#cqbFF3> z924LoqHE0C_wf$Qzw%cSVGRpGznfXS&xL7n{UX6kWi$;)u#1RDw2vfK!7>syItK4^ zVVX%23ew$ER4lhXa`Pnt=ly(gK(4(DK6p-Dn{xt^A$y`aE$51G@9bQa3I2RnK;PY~LxsVD1w~$Z0l-D}e0(^hO{XJf;o?wV2hgvxF z#*hx#6Cw4$YkWDI8uQ_yhb|U7NzC+5d5ZopemMqTB0TCromRAp8;H+wF0?#o#~+7} z+ewgMZ*2jzD)U~!kP4vjOG z_hk*-$GLETtYL<*Vxomz^+MyPoR){v-{%7+vvVl#Tr60&I;=;bV;Eara2w}>Rb76nIrBi2yO538?vRxs2yo*rGD7x5 zn256AG+&q1X2qpcgg|+1-(w$7A*>r=1Ar!iTOukZba}y5raHnpVw5%W_POB1A^D*Q zEef_GADOP61S(`tlJ0NUj!?7&klM49`n*~1@Ji&Yyld-1+5x5+YYAYOmz>u}o;rNZ z;Cv)=_qkwcRk9V~4MG;K;Bo4_mUzyH(L6dW!9a!VNs@QEF{dh@V?Jca8T8N%bWx#* z=<5BL7ECRn2cT|*tvQdHPCya59Ce(o*N7Xd*s*q>3yI&`ML=wZO1jG5><{Pf3w15? zix{YoJxPLn6+8D-(?Z)?muoU#b&4n>z&)Hwa-+{$4ez>vR~=y?$`MH}^xxFhx~f2&ZVbV`mI*1c2#98iQ$PrRMaKnGUZ&j8$x|xXNRbKscZk ztK!}H&<{{Gi$o1c1h#wuV$&oXYps8pN!8}MmlEmi^ASTbQD{8P4o3X_4pouyl>(9blK>b z4M^Dy??M|2t~|_{F1q2R0l>?wXNz*tp`8!Nud49M8^6O(S`MJhA0AC6I;8YNKprK< z*FG0lIoQ4cKsRGK$wNn`Q6T4Bbpe5%>UNz#C%c<5d*}|Z?8;Xu3msV{fi4nz&sCv8 zp$>9o-*&Emq;02S?#)8=u4|h6g?a`kclu+?LI2|jY$P%FTov(@H(`wp$FrYypC?h* z>o8{v`yjRc*PQ^c&_9t?{yAI$Pl>tbs=!xH<2ra+0e{KPy2|s}_`0X@5Z{gDOZKZ9 zw=82x2(oBbfR}qnOp4@p076U5+r^d`I6pH0u+v8&_{pV>13hOefY;lwuF=$ji+Ao4 z_7D%CUS(s!;%ac+c>Ow>^{g>;C|KfiU%l*ev<6yg#n&4`sWLpyV3Y8?NXE&+5iu|L+tM@omXJDe-95)tFRqAis}%r?+{Nuy(j=;zH-E`}T2h^cg-l{DTwUUmc$3V*4jGjW`QH-hq14WuC*z z0jYY_^2}mSof{Strml+o1pth@Ucv5xPW+XDOfiD!v4B%`W1yGZqB>jqd;l+3-2$Pb zGk*RpA}0T*jsrS<6ohQQ2*A6{Kt7f`@Y(RGuR*>nfAZ4<_={=OA)?~P`x6ZBx}MPP zkm?!f*gWK&qtV`IHJhJs5vHz+i2DoP^ECvE0^z&@FdnausMi2cmY-QtssO!S@6N3e z`hBbk$yg#ybfB0%3I?ATVR$jTBJo&YHyURCZxG#q>x2OrBh?}z`p`AX0_^t3{yEx~ z#sdb)I!7_R=!NjN5b6uQ>#C5UJ;)_ZUAP-d>o*b1Pa7h+jo7@Uf7bs;mcgT#V*WQV zJZJKKK6nPA5NQ!Uhd7>a6^SS0ANN>8l%X?ImtLj34;i{=Z6eER|VDS zEG_yCfKv;d$;SmO%Lo$wX#nGABgZYRiIYV7DDp2rj)!5-RHt?c;?q6~iuSHw8QUbjKJ+`&%>}%q`;u>2z)nzS z*0D-r9Nm`$#s1_kVY+wgcNr)AxJeg~NFPP>WY1a4I@6D1xwliH#<6KX0`+tUshjof zo2X1glvu#er$y0J-t__afZJMht%@xbD%%`o&38rI(9AxpJXZzdK+>$fvUbeEBLcyh z6GzS@-rT8;kpmU#gz4K%z~ngHJf7|aci&7ZeH6{}>+ELvSQd=a*1gM^<$+`542YQY z>(nQrY;E38Y4Bx-;axZUyshoK$r%A|GR^VANZ9I_z78n<-wlcyMWn}+32VWv$_LyE zFxA9fU*?5L`2FOWqoU2YW$|< z4x-|b<>Q+QYyyB8hINO~$VkiXDaTld#E(qxY4Xft!%B5=DQFIMWn}@%&fdQK1Cb09 ziaLm{;I9o20N)~#LPGJ(rXbSybCy1}?f^OOx$n%TAfnQ~%?f)2@Bz0r?_M1P6s~7B z1<^SjUc=AZ0pJ4eKU-!~5K-?fxm5N6FqL<`&$mDY0HunnEi8&8))!htF#Y_xkU!K) z0T3zoHizK-oov3Smz_RF!LHT?>RS^(5 zMUjgy3INlOFa+1iOvB-6`@{TmRS>O{K+~_C-Ufe}oWFmDn3_MCxnY#};}tf_O3oR7 zvR90c<7!*h^+kZUh$_v=rZfk@ZbAoS0DoN8pR1y(IFeu!3x?*} zXs(&Gr@M=$c*i^OeOzrHP0UQ0r@}q0Ag-C{r66%1O~>XDN-ce#0icQC<_JoO#cg~T zf3Auk#!C@>_6d5+6oF(laq_SHjqXv@suA=VE2vkysfN^5YC9obq-adyYvbdz-ZvWG^e?-zYCRuaC@z+;G)$ z16*Adyg;9Qg5EO4^>&uUU}y%ujJGd8J#`ig#u+OJLB`A%uJtS>3nzOjZPwzcNrm;h zm%`efMdvzM%m1CZEkBsoHI#*KSc8xF2%1EWD%hE;X!w5re9ZiyCct4l?V}53hWC5g z84RgK&N&~F=(RfdGICxK|HRc+2BnFs?bZ7=$+!2%{Vtt=!gV=~)9C*6e{MJpe(S2x zi6ap)&ORY-nS%MlKmN_qXTi7wpN;TuW+#T1p4)?N6|)p*_{;r)E-yl3ZO@|So|zrr z(g0`@IjWG%T*a-p1+()aPE<#fG5WK_M^u5%c}4saS6dk!%|1o)kwZ&=yBJ{MX|=%E z=6kYv=ebP}$UaKN&mVWFkC{z2gx|U<%84TpvCck`c~Y<)UHU8-up5oA+-l@cHD&9v z@W)O_D&9}EvB*q@lp?bYBYJ!we+W1>@H$p zFIDC5wyBsAM=P47X)k>i40r|-=BWmv`A=1?W=J?;!M4B) z3_kIHoEbFMiy=O1u?(&UrIiv)&%J=`+(jZL`I4Ed2;y3j*7(hx>b^2}lY@?Ne*6DGa45Vs=gU~HwN5{Bs#Cou zZRYJ~2STV4$)1!R=O$Xo>jIRQCboq@k7_?9rK&iQEZPh4$b zQ6$1W!_WZiXV&@ra?|nqRBO(EWzAQkT0>q1rgi)Q>$TSL`xrzkL?QlDqQ>2Q`T!O zxIbO9HDQgOwDG(0!%5$}QHetJpw>$}WHfuUAVSXB>a6*ytOopXXX8{6MFZ>K8O z^Qxdyxe;Xr`s@>oEmJsFsU#k#JwTrYLkiw6zp+wEH|vxk#&pjDvXx&rscy_$xg={M z$3OgJW5~Ss21-ofXG^hOtuALqNsP=@Fi;clR5R#OrWJ>h#7W{nX1S)jzIZE78q5aO z+InT)bdTLd2%!l_^+G2-zNVXAwO%E#!q(E-Y5CABeitF97gZUPrM`EAxcTF@@hFYq zkK2xNQdTAIyhXEBU&W=beGWJAnO;3&(E1HxyW>CX4x!ac)yj)v%#YcOlRT60oz)UgrJhgjx2 z2FM1-$EK-!2-!csNE!+o?|OCMk2`B`sH4k~dgcezUoY~O?_)dTzU2nH)Kk`LEjW^E zjuI|)r;QgX_Q(9pOBJfWdb#`Ch29vPADgDj5VA`?iSJJ}+_YlnkK1@i3jn-KXw|fI zY#x~raLL7+-NeC6kl5;&dCfACb&uWam8lFC+a{H4R1#e@mvM6MXU@luunbnt2D-S1^Fvk!&Sq- z-c5iZ(zK{c)3oSHJ>^q#;XXp&EV?yRcRp7S{xCWD&m3GFJ;(2Mr|V@riODV98vqV-N< ze>zZXbxglvy>^OIrZTwJ{#8o0d*X0|kmK}g1`!6)Vk@m7POlt*kU3WtQtPNVo{FD8 zZUe760HBd)ZQ)dsG6LMq_Zhm%_pyT2uQGsP-W+X9ze`hrO)ukI7t#(6g!AdIKD*+` z=(7Fc(xDR1MIhe|YitSs3OBAdQLvJo1{D$NK&>A!sm)evMXR(Kzzyhf%Tp0DkKGFt zTh34P(Ya#CgfGJ0ANM)=loip_vU`r!OBA`dhX`npTYV8t|JO9sG~z7V2Gdby`Vodp zt6Jl8x2~DF(pAKf2)X}R`qUYQx`u7Po}G@SDDo|=;`dpv?U8usRb>C}?D=}_Sw+Q% z67`ua$s@!t%m}@WZxx{lKXVcBlNC9s?f~-s{~hR@?i;h`jwus%Z1*2nFQ*mjl1+9q zWlkS(E0~TP`_kyM*1@0pIR^`;l3a0z`La6DflkFaTbJyMeYt+j`L80Yyv19tx<@Mw z33X6@iy%vmv{vs%Z~A1h@^C7Pc84oPC+i&I5MtqPO*)HxOZ5mL?-HkIy{!iPapwmB zujZgXZnne%{;{OPjyC@%d7&0vt7a0=(BR9CX~&q#Ih0t8WjFl1{mY&H^BvsbwRa&*qqn?u5?!3wfXzD(vgllKAFtqYqcL{^?P1 zqXEt4#i`Lrl{);(+SpQ|?}6Vw2e06GpS6U2v0wO4TIUu25|PIzlj=|n z&F}Fpz%kLqw5_?|1i-9+*)*}quIXwnl_yE+#pmRpP2c_w%hhw zp3MEQEQTyQGo;4e&Y>-rbU(n7(bcRU`isaNRxpKap;j#c>r@!wu74Uhs`#(YsQ8~jxWOu{_%AMI47C1pA2$pX zsE<#~{9}h&0-M+r^X=JMMbRby+yPkal&lU@Qg31`tW#m!UR;fIcPbU7)sWiVF`^X( zNC$?p*@$%_TLa4@)HD4uWi;P(*K797W|a=EslX;i#s93mAS`ZXi8liE z@rjv#?D>gw!btng`IG96A%O1fWttHL)~PT?|2XkpsuiV+?Vb?hP+h8Slh$1?`gBGg z9SGfZ>5VrX)j%*u#lQRd{^Z!YwMOs70A41WSic}tAD<-ik6mg=!0+n>?v(kWzprs@ z2~Qv~+s|zS;Pr`{NsL!l^^3}}hBbo-oe(>cSE^RfhO6e?+9V$%WSe{(*PA>Isu5u3 zihujo{7}qFtN1_Oa`0*;V787Gyxv3t^7usMADb<*I1tMze|j46Y=nY2i4L{Him#0H z2gaA__B92&SFr` z4lAtv{+h>R5i*6let+E>{qnME7Ny1TnT@xL5W_GtUcWBWOHLlnJ3PNYXp^Yc;5t?O3|1&lMYRMLvzlila4ej`qRUxeg4Ov||Ae$5@T>g3{5MQ?c_40HIeO zD)Fk0XS78?T6WJTZ_%~N;Cl-04L@%`DJ!Vr|3hCdl&NU+4yW?259VlFYSmG^LiwY5 z{y6oe?qZ%W_UKhgm{B)Y%0Q1V@vOy^9&Gv2v;tB(din^_rE8;%OHF{0Qu*2L7@-9} z$uZNG0ZuVx!u*=#Gb{d|+RCZ;AFC`(FVa}axDZDRuzG8bZ=RvYge6+3ERzx^9!}+W zeZClDZ1Ex^tQ}agx659+I1~sN>%~gks<`5vJzwf(YIeH@8wfECG-hLRN~yfEM}dye zlz?h;+3tX{F$37}uMg%9^E25AZL5|=P-cO$Lq9fhU6M3GIhW&R!5DYXTnlMq*t28a z+G#Mx*r^gQlV^j7+7tdf{;hPHg73yQB3465fl?! zaH}?|_^)I|FxvDZ3{dvi94^f20mhQMXtF*Z$S1vNwFfScFKju7v9 z)QlMS$fc&u5i&nb4vICb>PHxa*pc0(Y6VM&V-Bu$fKbq%DSN&q)0PBIF+ky;dnf?N zdu&z%JLnmv6>Huho8nZ5sl4mGdO3@RyJ_mo-A%+X&vZ*?2R1_sHVz!7w2G6pUn6{7 zj4g$Xlov%&p83ju>6gq%u&DU6F9IL zx>sQS|4B`E5ak2K@M#ZkCm~lHua~el+l|LnhC z`vLcgqTg>k3-La*BMX&R`r`O$QAq4#vwFcLVvpPs--OnvRxYVDEZUhOf2C4GEgqO zQX-dP)qoP)7yEwWB@A`-xeG4OQZ8>*Y-r}f)vFfWIgyVs?vl#$lfrY>&K#a;08G<0 zh&%)abMi8(?|T9m59rW2>pelufJ+& z3xX?nVJMbc+PRAo;CyJ@{v>%B_!drL-)}tINWd|8TzY+XdcAmR>31zZ&O>5S)veH> z*WB6FsiD7j2c47o7~=t7H)rMCqyWK>rD@!~h?vfS>sxrd{ZL=}S+XKCDj;hZJ6p`~ z%9vrV%j7z}&oT(OvxcTYR`BNs=@@``zXqf0Cw-{upEqg;DNi z;>YNfFNA*!Eo=k~z0C_cG*v5FMVwuOm5@r2@MOy9ZO`;8gsk|A53&wzF|hsV zM;PG8^ex@*->*qNz^i2ET)4yQ>NdTJOTVU>PIPXeBH4|XQaFD<-t_wJ%=O}vdV}0n zKqmfZV5Wj<(~z-Ww@We)W868Jzk}a96m~2_JrG`(!)*Gm?cRJHDL;22RR#a z(Wgo!NjLOyCI*MnK52@w5QxpX8^nwJeY?7bwW0v&$WTHpqDH`=pvCa? z$>LU;A6Rmv@J3Jd@dIrsP`YFt=x1K$DkYk1&3Hioty&g2@ld>$Tq>d1HpPTNd_rJu zu}mbp@oai`Zgp)98v%~vcKn!=DkkC{vb*A?&NAE7)D2VDeG(+#`=7*w-i-=u%X;y2zJ6m=WxMz+g8+Gxs zMs)S(O%=Vtj7`gaZ|=+4bu0_)|7=L<-7<0bbI$3(3cuVTr0Yo{ygn##c#f1S57&*D&HIjFP0HNw=FGdnXj zP4tKE-mE}N*f)cj5z{q@j^R%vsZ+4%n^7o??O7yXtjm@D|Dr9Faz?FE<3kAMChZw= zfNfgYg%7!;lS62Nf2FZ>yQiM=F|HwPyil^;7gzS66U_nLWCXZNE~{S@3_luw?d~CO zC!h$i?>Am9YQ1>1N?tIa88#7Pyt;c0mo`VhxR}bh2rR%FZsyCrY-Vis#~EM=A1cG@ zz3DBDls5O$PtK0`TBQY?N((xb<1xlhJb&%TkE4C3Ff&0fQMOsH!>3e-5Zd4CP&=tR zpQjAxyb8>L2%#z8bKjqKrPA$w(@igyZCOEAcN$fTODlR1-E4O#>cV3wzYF9{&FLlb z{l?2htrxFK$pssSz-H*07-PeDp__F}6u`xty6r_rJv)K$daFvbo=!dUKGpM*<|LM%e8eC>tEF;#*U{>%h~ zJd4arQYX3G)X`h7A{%gwK+kzCHhFNg;CJw=aHCs88Iz@-Er#5(6@9?1ut_H=CF`>S z%-+77*FPAtPcPC4Gxw|4Wt8(4RY z7QCQJP_{pM9|I9`&rx?OtB2HI)Tv|9t7AyRokdK0q3VYj+aL) z+|5z_nHQ5e5nqnLiz=hY#pi_@x^%L*#zR`bJ%mOE-<51W;8qw+ETk zu_0gh|5K*O%~UE>06T`5gTL?(V#Y@PCtqvi(wkDg@Vh(->=qtxOEY`earK}Xq)z2W zn==7%n`ha18&}QC)XJV7J|TK^ZM0GR*r*b`%#eELiU_#~p`&^+ z=coL=uR49mSxDk~lfhz}t3bBm%MlAJ_Igq2Uv28s8O@w7|25&5N37HxUPzZpy0{c{ zv5>>=W(@CT{cBJ+!sa1|AkP}o!T@JdY!ENnD0zCh{${31pTY0d(o4K|W^9WOw|?|9 z-o>VrUlhU6|0GGr@+o0;+K#^*W)LsJc+vGZ?;vJqwoRydLd*h9IoQ5ZMV{`~EjbcG zH?-1lG0PpMj~D*Yt49d^i{A|y#a^yFo;}+a@IKDhk|(i$^wmG-V|a@TN_9w@E;*P%eU@VWyxLe3q;+ z<3PcsZM>- zFzSB1ozpn{gXjBAcM5QDlE`1n3zx>Z-RU=2G@GxO%d+8b=yC^ZU_9!HCr&(+KO+~z z_Ti>LYchQ=%-GEPx!_;$yQpCJTgSDkw55le{+0;nDYo`v5!Mb|660>q*?k7yJLIT& z6?E?E93rG6Lk%;(Z3GO;&lX0vhp!tU`{(CLgIN)VxoNm*Gp6F7$xM9?>6cN>ff0QD zk`DjlNBY#3yrKdsBfh{l`7-Zog|EWn@9uyGxd5Tm(j{;>i{k@W$Ym2Z-t<~jbpSTS z@yH7y)idM{4!lvq7+rTUSE@#-%JztRc+!u6`I;Hq{No*?VBwLaYLLrNfsu#6It7a) zsYCeFjp1|pM0EWIfJhUOJ-<~rYMzT8bPqHGNBeZmmWpG=qqj*sLdZ7xtVpBEwY1|#IY?aG2_{)tD*eZYTv;m4#hVq+(^rA>T;fw_JN`td>DND2wkMna*0 z8HRPkqPTuyFZ08w>e;{8>reyY-(%DDhyLYY`VofgvIylWn@FR-ojc`Nn6Xt2s1i4O zY_b+r2bxpy;Cnc@k|b#w_J{ug@9VU9?9gir#$P9-g{iq%a&)x!whQ``y9lt&D8JHw z^pTv(5}+iW+xo5o;E`m_SKsVG5JGmTXT4>9(Pmc!wwgm5_u(Gz>VDh%XTIrmgrI#B zaolmASNkhDd@N4S3fsOpDdYM!3&pth3UwolT!V(~31ia~?Ii z+`<2gGWglMlH1W=u*UR5rLK;+Px%(9*s!#2=wnHG`q`KZhoD}GV~+y?SF=DlwCW7z zrg;&3YVGR;j`oSTL{_mcl{yyv3#68gHaY$)%}diwpFLj-6kC@^AcShT+I4)3M?tv0o)_+4)*ugo-H&$Ub7pLFk3Z>!K5}uyC*bH>(1HqvY6P6% z_jG$xobjg$ZQqktr!t4$i#e~^rHvh(gc_wKhb7%9Q>3Mkfw2K!K{WSgN4kOq)cIWn|&)O};|`iIFR;lb0mvZyi@W?s`D$He!}zfd>BMwZU0DAW_$ zwM8*KZ*f5YD8g+ihh0&xedhc{a%ef{uAlrD{eiM>5;UIn=j-lzV585ZKbajsBZXB5 znmaiY;&88O2uuY*t=b})M0vdqYx0TfQ~mJv1N-a$TiJL(|NL`vKl{bt^B+Cnf0VVh z>VM(mY6J|e%(OfJauh&gvY!g+hr+5=2sd-zmWd+{*De z*GY#^)#qIvnTQ7oh<{K0+d3ODtzyu!bESyVpXc=ei@wTGUfF#Kn_5rbLY}Gy`=iG! zp{ehcnZymoTUmI3{~|rq zpZ{w3xl)(6B*aqQm6$c9^aOOi^jT}`h4y9xp;g`V84r^-|9IzDbF#^O2*=V@jBnVb z5<3Uwf^_XRaI`lIH0PrGDwX-0_EX}yIv%IQGkoR!GtX>!S1S*vYJ?bz8!EfnA(x?G zTCwH@N)8^yphs?9(PTQ8AJAaJ174d)IfB9c)tM=Evs?gX#t6ZYCdz_MV1kBfePo^ADuyt^* z#9@qIe%{)NlcRmOS=5oC65`?-s)Ei{YO}IUtE&2Lz4&>}AGo69K?sd|J-JJ%+9iT* zZ)Q$au#IR(NYqVjFdS988+_=Yo?zK}1(UtB9Glg*e4+W~v^S9yKFT3&*p|H~qASRa6a1({!i1->ag! ze>i8l@Ba9p|L`w`pS^$osdz}g{6p^xpY(cLVszNARA&ceL^JwK@h@wA0RJWhyfOk_ z^+yhT%KpinQZATvgFzVE7ZS6VE?nl)DoAyngv|A#8v%n#ZO+VoN<6M^}@Rzu`pY*&5gZBuI8ZFhbJoazym{mANu*?ju96=v{f zH8APp<*~WV{0x%amff#urV|%#p$cGFqrH91aJ0f*`QWxSoPpZJ8}5^ekdZ6jCJ1+M z{TARxwf9RHe;oiCjEzh2#()iXFlpMK=T708YR6{>T?MToX4)2h2jCxhC~DNKL@hK) z7p$C}lgf0s`M)aC{6pE(f9Hn>^ZS3^@Bew;%EJBm?*|X@SAWy};-@{|k$kTuxE+@% zDL&wJ39YS5%mb~|GVTO^GijK&Et=cHqOv{2s}{W)#x}W>^tl_C?aILpwoZr%RiCci zR;^9SLo&kHf5)V%A*f$}I-SF73RhbPVfJ{oxQ4lnagBVpqtvT+B>U1M0$kT+m~51C)f(YlUrPv08r>TqpE-g z6e~VuPj#G!;p0gwXJdWbq`M+qgxdqc8+Rv^eon!OT`hkyarv)CIG8x?&%xjM*Xk^# zgjfZwG-lcsULQc4y-=fOC2HZba;5kgU)M_UG-JS#BK8v6mz&$)-($e59e(AW7iCAdg$FK|>?HxS5Woo5rbyy|wI19jyj)s!Hic5v-?QpqwJ_I;0zmI2o z$y9xD$%jFY4ysblN+n>S>DWA^#N9TuY8t1eB@xa3Dd=2ZC9F=@G6g*|sJIdU{fH(f z@7VEHOvHIx$9n=v`sSIES!jSp(*FDxU2j;9MKWy*R#DWbnTc9xRxbGzs|{8z=}|&j zNv+E)?%dat|0^ARcz+_8Z)6t#Cgj(hzJ0q_&*$xKoV?e1V2f%v%{!g+fA7k2H_zXy z!>6DhtbFe`Q4|a5d)6XOcicJm?=mrpnEkxxfNzb1qrI1XygzBr)&$sQ>p>kvFELJR z+X&rq+IZpgRBq?%I5DQhGzWRJS@TtOrvfp%OST5h2j!!-!=9n3z@~GO20nC2D6^l$ zf$iQhLT{EsiT*L|5wvZnbIU~_M{bdP0hYDl2*-v9tL8n4K&_ zClS%nNZOxI;8$Pk$LKK9wm_ps%}mq+fVlhuN+i9epslp#C04iY$?5yjq~5*v7SMmi z{@%X<_{&bh-ud#jwkOM~Uo?zr_?Ls$H}4)v9%mNlha@|27Q3ZujdMx1oEIt5=vLzk zL#f4!H#^{fUnOqnxj4LD&vUm3`z0%TX1ftG-#+z>Spj_v zfA9qvZG8z}#*cIjSd1?3kalUu=XSJKtT}SfSIIkhBuThpe|L5m(M^_caX1hB@>0R*$ zdlMV#a=E1wjO+c0(F31`n<@O>VInT+6lQ8gtH|vZ!6z`wcTaj8ScUjgSsX>=%lq+H z%LJLZ&VQ^aD2r4b&*nqx&kp4=P_7R2GtGEGPSW6Ro0`*$%fxBV0-;B=4#%cY{RQ-T zpiHg0QsvKQ|c z7x6cu{z7JPq>kUe{}fX$t$E4OB>Pi0ecCILN7~J2Lcg75`7UHUW~?xdkrx}4X@!+z zAWQ7KjOh8-U(Mhh?E`Ex?HMv@$5wmW1+_{I%<~(}@@_8P*A08(OV0mBPW(Lx_Ha-p9ByLbX2Zl6aU{SQZ?~uiWsRHBBW?1GbHJ z33VbOl0rgVNIT5Ywp15=ciX{qVom9Ge@_T~8$O!75!D((R($!_hSBEyp-f@{e`)2> zCka2t>>Y!Z%(?f-u{r7YS_Kt@z>BwS?qmFyGCq;5p^L80 z?l@aT$t(9{O*R!o@@C>jo*?%|r^NN3R!H>)46RnWW~&QTN67AT(E}(mP0DcYY|*RV zcluCjo#l zZf0%xc^fRWxTMlNi!O3>d&OH9Vpu*mIe?rCF#bfjW;JFpJmM7%Waxv;`aC35nwHe& zovlQjn>nYy+{G)~#3Jn)hZB#mclD3ji?3|tD!Eu1mznLERnttI%}tmPzrOn1=I)-J zk>w3+3ee9CDlTw&HnlU#+FitM7Hx^5NdZclpcVzmg8b#Mw+HQLA7&8&M|)T2P!)6z z^;=i6k=I`@sAj_VMyO9`6iS^?YUuz04RXbsRrCxccSx-H*)9SZA)gZGDeNRp2bIs90sdZC8Tn34FX5|aPzxHz@S0@ zjV1J_5lR}&Qn=W|5L_!u#NBNhdDh0>PigoIc=c$LnPtis-a0~=6EReIh5*rT#oC%U zcb*-D%*zF%aBSnVxZ0|XIB``;T1Jy|wJ;jHn0xV6y8c`3Al$BTxUQY_9H11sD>+#k z|5ylwjxfHUz(9FJXJIyN5D!y9VBW0}r!kk$i?Y1k0EMG~&JZq7E~V!crJ(F13lV>_ zGZt{0d^EnB*`h1Dtt+cyg|5n@6$WN3D%=ERpn6Rw=XEz^Vh7iFAUu_`vW+p=%B zR=z*lF{nL(R~k+cav!qhD=H7CFxt$)t_-G{*qhJBBuQvX!u9(6(_j>iZG7@Ujp4xI z611!a=VmUNI+=6(D65*p|GLIu`!IW^*S4Mll!AAqJuEXwmaWH2L`-FDuy;>c(>5c} z8I)DOXg{O=D9gKuW8+0QbbWBfp=%N0>y{_}4q%nU<0|5dc2G#AngC<8QLIPT65>Ge z%hXEE>2eTK??fx+Eu~QEyb!pzqnsqdq+|2gLx2E=c{=M;pE{afw%|zUATLR#e99^8 z7`+vk^S0;Iz^e{uBDlG@P099BgoBXQHM_jRu^q=8sIlz0x)_vG=L%mJ%pA?VdCA?p zR6G2lYaF%@(=)!Y^%$sZ#Quh{m@Z#MmaWT6nlUhjknC;1pN=-^_nN=5LCECkf@FC= zqW`pU5lW+(C7sN}ijq_5g&=M(h-co$saH9HOG!L;^s?Kr0BO(G1loiRfR1WN4FB8c z^KKXF1FHdfqsYaJvb!z&Q+1YBO+_cidx3iY_qtK+q38 z5CTK8rXXZ}t_pVs&%a$+eu{aCxa$JB1FKLJQ|bE~Fq;6GDof(YSvy1OREQi~`PvCF z3bB%KsZ2E^9?3N#o5aKN{V~)bUGwhM-~(>0D6+(m2`>T89;{#6@xt0iQ%ipp0sb9i z%~lZl7Esgyz6+$W`n`dOg#KjP9>lV$5zuCv!F;3m}LR5RkboCN^cr=GoM zDDSzdu$$0vh{=k>7}Vf}@C zu$%sz1$5!qYE~r$!=yfF8ke2C)4C0@=6xht-!c_76ao|tM>ZxTGoN)$!ks}d#M|Mg z4`sRApf{pU`JtLNZ1zxVpHD1b%gacp zsAPx|f*~NKaD%;jS~Ts42z55lqqT=Embc+ya)TIG7v=d*FtOJ>TP&jh24LmU%1;hw zmBa(LOuJOAn2iwq2qVU@GC~|}cyPE@@Hs1I5gO!5xBJ%d`{*Q3f#q}toD&EK zh^M=4ezxCn%c`LI?0RJr<{a+mJ0k=Y0X9FlU!Q1?a}kfOs0TUxTPZ3bM>>hlR-=CuD>H;C*V^;f*O|-p1Cp zXe4%MY7EworLbRfQt82IlQVS>* zN9*`8+Ea{KlNp=QCZ7`A4$fM-viNr`zMgG98DqTYvDM$qsMv7z790r$iY?n>bqe6i zKuOV?&OoM%Zk>sTe9OrCS$O5&-6RL-tJLUd?qZ}U509PPK0Fh+aUW5%$GHMhy7>?m^q zS3WHk?x0>$G+@c~b^IG)r3YIoGGx!!2BN5pF`ZTKpoZxTY+t;%g6j*emG!JsGSlH! zPiQyG9{lv!%e((jEzsfI($HjH8gDwMOeMNc7|pZKAlv{m321P#uzms)FOWFue2#Mw zudb+v#?eo2?{yH2oTk9g21^&-CZk8Ybrb>6rW#a|p&D`Q*W}*}ky!Clob$al?rJn- zZP{JuPHP`-jXk*6bsbnCG&W}UsqW=LIG9=(*#lM9~T{>6YFG1YzKD8H% z$e!OAjB(E*A#ILmQh=zauryNN9I@(aYT7YosP}D`7^Q?$PsZmv);-V4yOxm-B!Dta z1~nJV-HznecHb{4TOTHXMw}+tuz?Or`mcaUZEA>Y9nhM<~ALRvCNnbU))g)Yrh3)En@-iRZ0L( zXKO}u{c0|jR7{BLO{!|Fr7d<&G1G{%zzd7ZbOxM$Nju6(&sWrbLcstqtyuGy^J`KN zSw4P&I{W+5I4k?}R?ne>*@aI`JTi8sclmqa^tlE!A#eE}Mw|6O-WZ^8F@euJx?ahixr-jc>N~=@RehNhph7 zWrolaiI*8eO0xP^_58S@FPFH9UAvumpNIbNHCL2ds4BKz2fQ86avW(yCJdSQ1U88o-~U7d?u(Oce~nCQOHx*4>iSr%S9M#~y!YSzf3Joxzr0NR}t@>7%)d5#NBxv|>f+ zN%^Hfo`4Fxph*GR8>=Lq%A*yG!Jm&~&+?mT!W`k<2 z+(aD4{&Lt5DCz)?nK#I@$b>lwas~SWgX`jP6TZf|h?iH?gV?Uq-3d_VAF^0?X~GtN47=I+-B zUlcR25Qx8F=Vwj1v4uEKLbO@3k9}fc#f{8e!xoznSnGn@!6T_i@QK3?{i<&4JFqHG zC!mN$!Qd7=odNx)L{dobYm)!vasnfIEc$#ajRy>J;%5+#*P*JPjn_PRrqA8X(wX23 z=kZZFtP_awV5msjWxE4Qj)Yzl)c1!ExD{I0%oO8sF5=Y{_3(H8OpyIoR~=F8dP6_Oxe$q!T{q&`9}1G4^>}u2-w#WY z!}b0|P>z4u{+hH7!u291f+{2~hC|Hl^@1$#SLE+2D4!4`etECOICS+QV)$ZgDrYX? z?2>qRY%$GJcWo(T+%U!XYjzRcPSy62-!&g;Y9C-*nL zQ}zAZP0#Q-sN{YJV|+vjV>D}{lBOsFz6dW06;kck(ZH*R(PlvK0k@v02#<3Sudb+v zm-Fqr=QcHfp}Ok0miEfLf;!NgKDRwc5o~^yZ+v*rjFx8$*xs}xDfffO6AE^g+ee8!B> z`7|Q;R(%HZx1%#}SBeX=mc<&@Mkuk??ai)`#7we%2HumzQ4+z5)Ifv}ekHqMx#~jN zVYZIty2Un;SmKl|J68_40)C%q$Z*0hSydNq=<0$uCIvM^M&TI)<3J^ zR4wFVKz6C8AA?P4s={=mj8`D(=Pj0~srr7OYCl)`grkFon>%&plM$oKq205UnkLFs z44263^GfS&&QazDXn>l zsNtz1_$Wx|`gHb1`9i_Q!Ko6DG454Pc*z`pKhqa(w_%-48-$szt$0gO>s6n?lwULf z#u&qjVVDV;OrtdUe(}!UrydDh`#Z(2`$^#&QW4-+Zbn@ZyJV4tS4wn;R;-G3%V{EU zQVukc$jW=c58r?9+v+aA7LSAA%83&XlTO#UeTRFpnP!RUp`6tFFpCc(vZsp0HPeaP8GcoUig~vV|-<)Gj|cVf<49GS6_+UAhP!l;Mb(UVw*_t%w>KVRec^l^QAiuEK?YxYMuO~ zu^5N6Fl`XI5??*)XnvX1^rQ1aXw@|7#$!Rv`_fFl#ROI+dSnph5%cS4; z^Cb)Vy)(Mp6IvY+jnX49t!4hCBDH#jFNb5>La`G;;wDYK7S3QdVQe#(34D6UOL~LUvWs+b(E! z&CrSh&aT07l~S1^Z71kdjt57y6TesW1x$s;Wp#CCahpTGv1=?fAV3h^9E)xu!Czg4#hCEmDCA1QJWHslM#I)SRW-nU&c#xB)Zh$Rw+VLYUJHez_G_I$G8#!lm-Oj`k|wPx2H5RKF}IvhT*z!|2(#8$KWR7wOeqhPv(zPnKOWpQQ+;@;_Uw9t_3g%o>9%5YFa7=~EnPJ5 zKd?2#vK{no-z-T+x7r&sXLvK|~rseigggYDPSlh!E%lm-%%KiFHqCQy#S=qT$ zBx(MA$dos{J%2fDykbc_4R_P*rAtT~bFfj&*u-!8_?DvLKpuJkqNnQ8wc%z_BcNBR z$$=l=Oc>)?;>YM63cESKahGcJ$w_wQc}{@8D6}fF+$@_&n32N_h<{go?v@ zSv#Kw#*5wu^og3z$$Y&29IB6SyE2x1dY#R^{4`@N@K1GHpQdMr(aW1Pr&hy%E>vls z_OBT&T|DSZO?V`>JELMY(P7F@+n9(8rpYs@y;ycn*^ zPw!Fm6EN`-H$EY;`_N#Et-H>h8Z)U@xpk^FJ<9rPTb$*uK3Zd$f=i|DylSfpC&hOL z)kOnDPmcz~a2GcqNf$Mg!T`P`o=%DDz&zGx;2qitvMVGp4bj5uyNlSk zk!RTvB8zFFN!7|ss0OWQ6)_62;|%K~l&kWR-D|i}pxA<-W{9wRjmuKi4(C_ceU#O~ z{dk4dL?VYdnn-XKw%yEy^4N^ty^6(nXVHBh4qSK24iNJU5s%-wN?nrdKDOHRl6o<$ zq~hyD*&)BJPtB<{-m%d(s=*l@FOt~qo7GdMWYE8MEU05Td~mVm^jiIu&A9z^vx`Hd zXKu4glyFMo4xr&STW`ZqYniVxFI1a0hK`$q2Bk`U7XL1}T&uNIqpett?pHvZr`#QVK0dJ`;R^eKMB`)*m)z0)Us=5gk6HdxrBQj1bz$;ZZAP3@P=}868ou zGc!lCaA)cEHh1+W_jh6GqK;o)J)7DYWjD@Zw-_?S@3q4^ft?fi>=1u$A})65Rknx7 zRBUJh41EmChG7P1&x5M8Wv39{37ClSAg6MC<`ORCHpX_wxNuS~)Qzx3 zzZENxCKC0(?%cL<6NwNS8OBW{%+C*70-;ceH#>iB^u4?Oz>R)GZYIXMi}?lM8{RqQ2f#}(s+x<4wSBk*cqlW$7s@}K#A&2zKJA@$!nMHam;eN=DR$K3cSi4zEyh3dRv(m)vrSd_#sywu!M}7 z!zYXpb7IX!zU~@Vf6EZFM;jlLrWd#sKr6paE5>)cZU8m($L#Rb35eJIwZZvGFReP= z#nUn=t8eue1@WDwyP4gbWZq^Xm~W0%oHPE}GihJE^Mybf!D^-2%RZ*f0z@kcxH^X_ zRDY>brg(3EYza~Rsom$hUZPg}N#)zE6@SQqKP|z-=J6tC z#He3FomDRSx1rG(7um=(vbD+4LbKUL*PR|m@5XEb?QcbpUZPr-^_F004 zrLZwm^=Yxjf>3*fueZrH++pJmp~)$3c7>AZbwI;yx+@(JG{yzq1OO7x56ct}Q0krD z)%YOI*3y*m(8jVylKOCKtk1Q_D^B$^7B_*^nd+^7%|6F{E>9Tut9E z<1u)Fj0IeUCb6AyWWkZ3zCL=qKj@Ww(L4)8Q`c3&Iq#%-BfBZ@fdr)W-2uj>8`X9I zP;GG0_G{QGy#BIkPOovq_{-0C9at`94yXu_UEo(&Lm0YwscPD1Lhz}$cI0m0s*3DbgyDpktzRpqDO^3 z-zTI{j}hnzN;CJ{eDr9{8x(TCXAtIc8p;2Fy|R)IUmkC6~C8 zhOVo^U@!#7i;ju~ttxaX7`x>=nI<4+Yqv0|jndgPr{&mUqPcf_yBCopTZ`T=CEVG8 zB8V<^?b3b!`e%7U`0w&Qd^(<$12J5X@`_xn9EL7hi+|Jso!E~Zc`2^lXf{$7F0u%bvzU77< ziHEFOIK7JO*sh>xvwM1cMho(3L=M6R@uIMHAnXSar(e@%0b)n;>OozZ>VpnLBVG=H z%1_NxjKTQWhANMcbBZXa)&@zk+vJlG8oRCvFw(4m5w}pO=iISiUH8+@KewNN6`u-_ ziu99hQ$``Q-tbGNFqYY;sswN>gX(~wRkF9Z+e z4Ryd<0-bg8PSZLF*FB8|gePp^Xhb+#iz z0bNQgf=^%;eS3;AvtYbrpd4C$u%UdTe1AL+T_fCj<$U`BGYsqQo2Moc;-us)m+cNO z-LJy6Njzj#8|+nJzNVt}Hox^~G$}wa!z*CbflDB`P;7_mr~S)4y~+g3VVVdXH30zBm{_%si&DFo$j|4936fgQ z;#Vbg2`wwDJOhHAeLsZGpn~!VCU2+QUN6i<+|$;N_c-Iw)k>-;hEYf}{!0~f?%^2g zPuj77n{&7lQbFjmqYb(}XJf3(l@8vdjq;1_eqQtqhQsmsm{zPAhDy!p#X}PbagLSm zkCFznf5s;9h*i(|$;EU=3)fqxz_-r1E7)5B!G0j)!c!{$PC{Nb%OTK@m?BqP44=$QR=7nQO{RM0+vlU6t*RU{tsGaL6k;;7<`Yt6*+eMYy^u^m;ub%?h#N`$QXF zcU;zWKV5qtV)m|!NJRRHKo>%5^5^phpfK>I8Ndu^{(aRNoi+6zzzYO-PV+R%Rc}Tlw0_J5$Zz zzHkdQdCtY1llfzno(R3h=8&l$8pgxqC|*fJFWR$OGQ!nWVPj)MrCC7?v%4jLoIjUw z-A~siDhq4JYmtcb6M-&-*7R`(OFoAB1g$D`DHyxuIoGYX9k}sPs5_yh;pPsy|5imf-sqmA-7r=PDcRfmZXMK2xzCHo{0LUr;dWQLBW7$MPtYa02lVd-I z55Vf~gGa9R#az-Op#q@sZo;_Hd)1@i12HxN1`yl&O)05F==zDXYd}^#$y#UAus&BD zKSC=lK;d}M{-F}CJ#9FDOMXGfx+(y~kwRbR#S9XWogrM5g8ILC>z-BAq2^aigDq5j z0@YhZz{7}H(Tw232e>c*fcNK!h|%Gy_RVvCs=`Iry7jJ+Iu9x>ra7+iJK+CJnwI5- ziqhGT#!e4U827EbQ7^-5RRFOLT^+=4e;1k~DPR&V1?l&VDNZ83Aw&5*#SE@6(dljT z$$R7Tul|ORCC?FgOe6~iOu2<$Qn@rG{*03hM$z?Yh!^n)}#%d*A9vmEGdw@Ol>JFRi72mG4n$8_dt zETRlBVUq4iy?alVvphRjmsbW+jAay_jdAGO+Y}&cj0cT?A=0!2x}|0AZ^_2wkcGEFg!ntpG7ZwM*-~17~>ONKux)53q@bs4&YHL&6RJ9qm(GH53 zLIEAPSSfK%1v3OCELs56ISmN$DukwI43DO!=lD!8F4bULKLE4|>X=S46)}(Kw%HC$ z4QO{kF?*33pu&tBv%^GAp@1$@ ztQ_WKhNOf=bAY;1phP7J{6T8W;kbQ9h44|dJ>r-Q-;eKCvwxS2@fVLj1^|F>F%Q~0 zsB@+bTTPTesz>*FX%|KG&Nrve3wGA&e;P_>5Gi8M`0AIk+{NENixScRK#W6IKWhYN zaF&ZBz790k91kiXmAhl49Se~D?#|IFNCg?FBBYI30OQlxIbW09X#Z*xQ}UeJq57mu z8!rUcI+!vv&_Gv#94Yr7pRjc4<)jI!Ybpmsr!LvqamvePOmT>QgmJ5?_w+i4*yN{; zfY2~+?PQ$H!(CE&N{(fp?l=_I=z&VXodbNC7fSPai|R_Nm^~CZgDZ96;^o989n4Ua zuxO5?uIZ#i1qtlNHD*xk9^!e$Qg02}Bv4|Br8O52@Gx>tV4A4A#sL7Vv1EQ9rM}ee zsk6m2Vai(AbV^cRF7Za}`v&PO-O=if{^XHtZHq*HvQ%vg61wgsM(?dTeux&sr?U~# zfuRIiXBUR_*nHxvWBgW@l6fn6Zd}>^P_5*uRtl+gfEG|9G{r?AN67rQE;w8IqAiqh zqfeP3WlA{|NM#sikSi`#D_|}FXM2WBLM-!?Qq@Zo7R3g9QPLEpgq8_H2ZgGm6`^`b7i;uQM1vzeW6eTR0p{Pq5Tx_LI9660nLHO7z{s_5IfSAV9Dt%bxZ^9TG z2pKW6Bv;i;$*qgw{KSybAmV~ z=+NgcN#|4qL#gJ#-GVkHe)lNj5+o^```i(T8)21APn#oTzDl06OFerN>LN8~RmNm7 zwBE(KmYWlt1)#Uge+(kHrZcr?3*SbBUaSPK8`=qKxS4WW?Ws%ChzZ4oagw97k71d# zV}VS~4%Ata!5D|N0~J506GPVV`%ud|*9tx6lOs^$4p7t_s{8|&tR$|PU;zMO(F{SI zQ=wQH3FyQT(|C*HqAF~5$rP_3gp{lz&1ei?69 zlZbB^QyfB!L-nwPb8F6)48J$)Y}(DpJe54>n0fs%)Ie@3V=4}nc(=?Na}t1Xxi@RJ zdbt!9{JYU_G>md9RDDtVvrufTY7`utMhP$c4-tPL%Jx+)5 zl+6fm8w%#3(blnTD3P_ctVOrl2HO!F&7tkAz? z5>JUc6&fEgd`GSR-HHw!)B!=)JSVG(*DF^xM5$L==iWHMwb`5XO46pIxp#y+>&;6> z=?tQIq;7-WkmX5!{2)ZS5CB9ubnOzz2Mx|j(xE8T9H%HFOpAbpyoJ9t2i=1W5gjOp z8uEp}!60J+m-#ArPTZ2=g#WLR=_5hOpQ;Sb;wBFIM5#ECyM`&a(Q}eST+*D`$i~}Q z59*+OE4l@_#M0LWw>$ijR>R{JqHO$MYrX=#MJNy6vf$4+UnW4kx$Cadi%V6J3$?^h z!s6gN^eF-VcJl5U{$@rtklz|4xghx+J! zKzp<-$ZN|{&4D^l<8Pbkz>q=R1SRS-NS&(B;BN;wx7p-UG8b?j9+d44nUd!O%Y(#S zKZ(K^ZH@dHBjq8zGL>NxFLNpuPup^B7rYm_L!U7vFl%2W8q2xZULq1Z7)ohbVbYzD*S--v%Jt~QPv{6@`bjA3Or+GZS*fK0C11O^^9+M!FqdwnXFg4mtCB8lyk`c;i^ zJZ3cD+?}E%SzC5DWy}h9W?^qa3f#L9r?F?hmzjcv1SlQ_aeOsS&V*G#Lf1{H=0Jr? z=V}942Lp=mPkE6Zm7k#Wth&O zjK;-G!9x0c^sG4ZHk9U~FvDQ6By|jblCD8e4T2*0#E$INidK=13?;}aggxkbd%poh zjW}5L(uI2hRP$IFT7)hz{`?A;9h~w7BLO~vNgqd~55-wM5ZKajXDr}={g-tvjdOQA zWgq(lA^x^$j_;!nAs{+5wN$NuJbPeYNW{8aX=KljrST&<0rXo>4??ol6WRrvw8d$1 z!qi^E!2`HV9r4HkYaAskn!u?&8HyHxUkmx~>TjTC7fiCQv@h342=Oi=P0ty=CVt~$ zu}hvS{s`DEfE?gaY8w-&HnhZ%6C$yi&8JEly_DLND%_cuk%07MieuyZc=AJ8zU6Xi z7m9rzhMNMXWxodrU8|HvkUrNU=X2S)NR1#)bedai~^SeWGq+3FB+6QCm@#h z>7q?d2B&_-NHNqej4iYAdFsdMT2MITW53s>jKKwlOlOwg9pN<9f>|d`DRje z1Vyi*#7hQJ0K-P`%*Z920`M?$UNlSaW6LC8omGydApRg-G`-6zyq=aR9=Kb!npn1U ze#d4>GO_F6_v8v|n2V-eQVa(M6#6S2XEI62<@3_KKpbD&9|8$oL(LeOY7X>O7!z=b zQJ6zW7pnehWD4nP@6(6`*{$KoZlCH zTO_z>xS9sHgJ;2dT*;NyUCg;(_$&uc59uFcSmEL5U5};{SJyD?cVJY{cM#quiyhcX zXhQB%3TKS5wW+y)2qDCd2wwT5d?N`P#`V@v;yD8;hjmww4IaobEf9FvXqPSp8)E{& zLuPg;HGwUYR*@mzrejGSOp6a z$qbE~PWTg$&@~5jrWyo|fWEi+oi1HVh^4PB7u|nhyz{=p7TdCok& z(I?ovw40g=LH(MMaJJ+8Fke=Xt0N{SO;I4@)@V zKu@Og>=m13GFen=ehIQkKEA3JL?l)`mB$2Ods2D{$4tMWL%8lLYI@E z@P7&TnkZUs$GAkj){KT&66!8&IH6+HCaNLy$E?Z;(XD&WTIssHwZ;U_0f`iW%zvp& zXNe#NP`IfMKYhq5Sco_dS!k+<8`9<;e{ysYZcvjvs8wqGh^h8$4Iz$hKBPH_(qS6{ z_9GYYk~z&nf6XxEIkQT*CD^*Qo1Uq54vbxh5q|97Sj#&?O|5tF&VHX5Ph3OhA@7=5 zpow&3sQaM2AlM=#?b(`Jg(khz?KvCo?DtYiKlE16H7d~b)|`1ROq>B|+YMnO3JCUBHca}xrhWgSh637?d#9a*y~8S4h)5>uP@utC#({#tRFj|(KHfbc zK~^CLBl)tE0dr6e8J7<`RR4E|DbMlGB^Rt@|KUEF29_fKeQ$>w{X6E;*3xtmY&0oA zu|qH8L>|V@mALYw4KJ%XJB69#`itQ+{_cH+PGJ^tAozhg!-#nuGl7O9T|EC&bp>u_w*zrWe6>CHyCP8pA+b;7hgrw zdiS)Tb=Hgl+t?K`nWQ*d+{T>vA>N^@JAq$DqdbTrY>057aIz)TXtd+GqF-#)Jm_JcD6xswRT}8?VDan2dI3D%*+bGTs46B z2z5UkwE)^98pjLP6nq^3xpvI#BE;?s8cPUhxvKIomA-!_2mBTX?Lp0VR?RT;7)pXM zLeQ;2G0nsd^CAGfYb3|B`Mimxkdj>@HbIpHFa3_liFPMsO=hsI_Enr2-ey=M)@lJA z5))}7c)(4_)v<)SM({*ir(v6S3D9@d?Vig3=~-gr_QWM+=Q&Xb(s&)%89}5SpNVRz5Xm1Q3c25jkXr7>WLeIeB zdl7^Z|9|Zzneh)(o~W<1Uc@71f)uK-8Tu@yXD}oJ1HsLwQXE(i#SyFJeA>OxOtLmb z4MrOp+Va;M9h-5I2_2gHq|{XFnu|xYTIS5-2V=LSu5hF;SjYrcgW=%tE^t^<{xAp1 z9#Jap(*6@PTOAi*v5}QWS_45RLq&Mn?e#|rx8Ka;p{__XE%j(TojVU+gFl^5T=k=^ z!!j=Oit17sfw+L1U#!Abz+;!V!oQw%3WY#M-3KooRadZcbS#{u0sw37Zl8GAv>zp~ z|2d6ltQI|RB*Dybkf4a=x40Dwhr+6Ap8rH{KWLrSfXc%S=^?|7rP|EFNtjoCBrg9< zQlapl76vfCbNBvXEN$~7b3rl80eQkwrcxHJzce~;y=Mh;MlOD}d42m?6+ z!)wGNO05wdu_vk>G~bg^@i)6ayWF%r#iwll`-KZfF!?TimJgcR;B%<1IG>K#bl}1v z%KhvQC*oO@rA!la%V#rzgV*QHeYk=Fv*Btkt)q%8K&dkAI{oSzQV4K(Jau5zy6HFA zmKeKB2v^$9a@mCsstL-c4ALbQe%jRZtPkYpJL)Q6pHTa*^~P^v9|Hh=XgbPylEG27 z?clfm%*)jGa=BrF2NjaEkijvhKk*1c*lB4IsIgSA(dFj>%cda}ugXg4d6Q^$gP<$V z)*#60%)v-7ySpx{fh%~VL+aKr$|=<3DK?|6bpu@Q$FFjsKHUI>lAqbP&VbxifJ2EwYr;X2hvL zU4eMk0JG~#clUhzHdOg0&(>semD?~H=?ubi(fAxb!dR^j4#zZQ#F-kc{Y()Mq4q~e zY_6WfH{JN@t*W>9)bzBAYpE(y&J|ZvyVa>+@T%3q=DrzVa{q(EKNTiGuHYLq;v3fOPa(ANpz*M~hpei-k{BZW zsC{y4)2)qeRL$-#Czt2z{ifm&oA^aII~fqYWd^j3kX0V zXZ-&caU2_-1p~9KC?&@Zd{Td^>!7VtF&$5TO1T8W-!YH`dp8}bBiQF@AHoU{pfr$s zSu;7=z}kYJ4*mF}zJC0Kbd-MZM=*<}Q0#Q3LqOU9y_Svqj?GI0r-@fIe|)(v7sUd6QgV=!||9EXRMZ&>}S16JWSONkUwaG|=_ zH2$+@f2>_GR>3~v4yn4e`I5JQNaafaE zJ*y(5n0*Td=i7#Ng7QT*-7QiCZ?}F3>yZP}k$dDWgEQvri*j+@m*DbBGz>@*Jk>h0 zM+x`biYpPG(MCQTq?HgfWj`4!na&&LE=PAh8Q0AM)a{&&e zBVkjDc`B8i$vXb}MGS~-lu84VvQRnPZRC!GUX0sgFRB8UYI>U|#$oZBe7&AQL*~K6 zR0duVVy$4-14&IHgOyLo0LdVVpFHErbUOC%8+Br>hc@Y5zt*+ImZl^ko$2*Brce-f z#Wg^KC<)Ii$8iNkuDW(D5GU?p+?+aMniDPR7k16yhGcHb8c57o>k7MzB6o+pzFE$# zBuqZhlj30)d0_ja+fA)gS`68C(Sy2Y#R;8{OdG(%awxX{&}OE3wj+`boK+GB2j1g7 zjXB7x2FZk($|m=eX#ZU}+EA&kr3R_@YA^ij@aphg%~tynlLVz7d%N@O%j)KC8qyot zntSwn-xfvpU-#?tUh}2ALdWME(;$JHw})kWfT74LQ=i)NAyuVQP#zENqg?K2lyr7m z(ID%70Uq~WrHWr0!-hbqcsM+#%bv`r<^?|AupNbNJG8CX(dKUCl9aPBBm&>#bMrPR z2JJheqGZf%@A{Sq4>Ja1XKUUooZcVmt&jt(_xz*|QdOT?+9ezL#xBANR(Dw&*_LJY zUq+A4PgBDm4G?%Xq`YVpSRi7P2Ak&6MS4-FJpS4By1&A@(;+-@D4#DW9PXd>@TV|z zXkCs}mE}xyOY3!f;XKVz^4y(`zP>0=y0SLfi7{`g`MHd5Jub{TkHdEJVL-m_;Eq&kQ?ump=dH)s}C=*&5SF9G(?G;@3atTw&naIBZG53G^7nb zrVmJGIDX{fO-xehhutjoKR1R`R*If|$EKQ6s^PUl>UU`)bJsT8Qvhg`0MTiL@2_-@ z_6@W|bLgi(u^8TIwVAlK#VP{o!qbC&Ft_S1LkL2F7^s?9s)=5l&foHIWUJ7AglZE; z9hs*lL^owxy`*lq0+dYeebVP(<=}>Q$2dA&>nyqvKTAPpg!v;*bN3IrVrP6SQvMgQ zQCd4ZQ02yyDx8YEcfSaotyS}Feq8*1?|)9!>c`C#%#J5oBEw4ujlwwfKM6_+`Gk@| zBiQN|xFDsqGuc6L0St?e)3bp4)d9 zI<&QFB0QPk{DZ`=r7oNkje*EEp^v!kB~0tmkFJR7%Cw#s#1gNlo=)!2^0v}ilJW=G zNj9hEmr<~O=38B#nwx`S%v-}vP2x4rnl$EZ;23M)Jutsqn9UUb8T2G;o8 zICVHanjnbXK{5xGcN36)L5DZP=3em(4p=$Mqgz>At#{AEVzvPn6)Pcp7HYR;5 z0$BD&YxpFZaR2xY=wQ1XP+wM+R9){OeGp&xV%#gD8p2(=&=7I~p_M<{67mQuK>B

9VbbqIE8i$S!}aE5j94LX$~o2~xq@~tw1FmPz97J> zfaZIaP4kg#1^$@hi2d+K3xpLDDIGnRSGioKiZQ+@tkrKv_)(#E4XtHidz>IT38zK_ zGRBU?J?3B6%}Pi9nkn-ZXh>m|!GMk3JRuiPsL`=?2p@JdV(iw~RScI~EmX@8yT$<> zL8H(-L(y<`iTQj3`CCKygt#@a-2ub&1Yzl@VwXXpLhc^7HLZI|r7O3BhgMfqp0mEb z-Z@+mpu%Vjhm|n;ti2&_msOwdTyRqyvo9qYcBY1WnjvG-c;9@d71Q|cC7d33riZJp zw;A(2v5p@C!pZ^tm)jymau{aqzYrns-9A7rz{|8Qyi|M|!S$i#XC&e3bONI8#N&J( zd27=aY(aPuv0qzKaXMjbFLZf(mFr6hvvX?#3_4?AwSpc9xFuDPW%rKb6=j^^Z<0kV z#v~g(SsBa`%*V+P-(=k|LWzuWplni<*S>8_x)_tm=H2>>AB2~3Hkja}|4CJKvPv%4 zv2_M!76IXtJ3jHW=FZtJv6i`E)2Ji8L%2%KZx}`BLQckNzAISDPN9R!w;RH(B10zQ zf>?xP9q1{qz;yWM?11EnEhNSggE>SM*I<7k#7ol0Gg>IC?qy~@iyP7cb()@^aB=4^ zl`Ik$10uzz(J*shB$HL3j3msi-8P)_YpOdEF|_u37f$DBF=Y7Mf?&)X;xF*ji-$3y zF8zaJd!AZ_Cw2|e`p1KjwLUketH55>dTB-#;k%PeREBa-bC2-(dya!$zKCX-Mn-Dp zH5Ih}!!jg85y*s?KH@1(P_~j4%yqviBai7nlw-(|DL?<*C_W`0IfYR*uY^fa}a>HD{*`%gb1ySRchG&0&nD$7aE@P zwF$?G#DOiNiT+Fmtz`~-Qx_Mvtz_9-kwkwg=*g%cs0xhOz0|m)3EwSrNT;NmL=)+( zOkgNP>MsV61o_u|tIfRp^~a7L+o5-%8_kpW<;Dw-0?Z)ir_eXFKRZ~vK6a3gnrW0q z$kY;IY+9c@)C>vBgNU7PKCC@%Us0iF2(HCI?p{aoz>=cq-d3)Vw2>yg^#zK^CF!vS zDHc|oQijn!B>-p*0Oa$srS=&Ht^A_#f4PkObe&998M#8=Ke{J+)Jc<|LK8 z&yQyf6&*&1VObnw(*QhAEZ9+S4hytM3i&GE-U}Tgk52S-j!9bR8Z1E9>HK)Obi2&y zDo*>=_s%rZMubM$f_1Pa#wJq=Wyrk?ohH!1vK6c6YRY}Jz4-JDh54(0#DEP$DJh_xv z6M;EnUMuML$pfmWV}z#ne?a4cb__BBI@fZ{_=S$(X{K#;shj4zy)5FA$vD|I`OH`52!~=zz$Yd2|T`Ssj_V8>%W zS5e*w^uJ|8N!<@GWbmt|_3v=~y((8c`^yDwKRJBSuhlP%c&3$%u$s7RxF2ZLKk<4$ ze;f{nrLH{~*ZTh-;z9^AFb0BxzuPnxJeN0l0;F6@hP}7ek{V*$MrVVM{^Me%SP1K0q@WaIVg3O8)@g zx((q0U{6mCGqt9Au^rX5xrB>XAbU^c6=K?z-%!90yg7a4Z_@b}c{ zm-T?5D|ej##vgg16M<;Obnmazo4N>npv>%bYHDw1_ar*=dF< z;^|OOB3p!@iMtELX9IbW=W)_Or*Bmx&z+QnN%X2%SfA$+mtf?A*rH!@5>3lJqAKXj z!a!*!+rE<2q?k>Q$m|g&jZt->gULZXb92|%OO@vW{&H%|RPf;7$(Ay<-`9D_tM~hP z!Ne{qI7Xb_O#5tz9zEfx5@)xP>zdD&Pdm^&+pSP2C2|-5VnO93RSe93o=65DP?{ko zRU*%6OP+m(g2QvJWgT_SUXi5P93l(a5!898;p$s`F9K%QGIGq8@rn!EHYlZl?5V%D zIE07ImF3PY6nL*(Zo6QV%~_wsyD~CYCWd&na^Ce%POEd*drI$8Up(Llyg#|-y1I@D zJw1h~ST7b-RQNa-QwDe@mv61G*hLpp0j|Um$#)>2h=|;~|9Wmfi-RpUmbmD9aW2 zeKl9a#$U=X;bqBIq7P^n45t{UKXZ2h_K-j9sIDn#;yeHGvswHEw#NRP=Ed$4t*(x3 z0NeE#Yg&MdF@AkiRzg4;iRFSKLc82Mm`yP3yE(0dSmt)@3Hi?|#$)$;$4ItGpG4)P zy0>{1Ol@?ui;_{6?3d%a;l3Hr1D|L1dTX(2S9VpCkJN`zWr5=QvG?7|zBE%{Pp9X; z;d~to#um1fm;?8!3rVb++w-xmkK2+)?wZZ9D)tQDEGkkPOUL!gmqYeg!4vJSq+9A$ z9Z=`M6zBFYWBA!1I4f^Rd2+Hd#t?-;N(ES~{r5#^Zy?mm$4{Gk^Pe~#m0vJ^JC#}u zo32ik3XWEngSE%!W1zQ?awGI|ZagfBELBz=G5PE?9{Upu^eOND4cA-AfVTBH zv0cW?hu}=#Zp+mk)*Q<`yjN#uh-;%rApobv?qJdM-?Mp&sDu8p__CYcJgiFm+#9Qc zZX$1Xi@xJK`B-B-llgfs^Z9%`lc=(y`xVK0baksO{LN|RIas1g) zO{Ww;vv_Mty;8{rVUxz?aUV3P{9*=O$`K3*P;paFirg-M;)E%W0IZ7rRaK+z?(>2k z$?NXEoMH~KtT}Z4t6C?5S$&qwK{Xj1 zQz5Y5IP>h`nFAm9wIk!OrsWo+M`K7b;y%H=bO)+CD(_x6c5iX}^%T`Sz6uj4=tYW&8HX6*T3*r(ky}3AJdNl$CSiqRrY3xf zC5m>RaG0%vZ;u@&I>5c3?5CvZh1(frU@nXQo#gT<)N|pMgq5OQ$`7STdtvFUhB}lL zrd$&!Om;U8I7Su$|CYgi;4TxRdTNVhOTxgy<7gt~Wvyb+Yjkfd2c2+-i-`;f>qM!? zc=;ZAcHIUKu|+TveZj9?R#7k+zW=Xa9+H3`y}mC`_w8b}cft?Z{6C1jR*x=G ztEVRmy}8=#Y{GkFgAC~5Qhb%OL8_aSoWVD2H5uDbTNlZ*sLi>DNo;4d6eq_y3N`go zKGO|IUB?2iB33!f>T!q3Q+6p8OqH)1;0HnAB=jzDEYS9HU_}q>;Lc{zq|Xg6+YH^D zbEM(lY_g9Aw>ZPsGUYy^6J$$pG=!L>r)a8^K#YI~qDj(` ztS{+>MH-&HfQ5n*gDhegi4A>hKcm>OW5k0xds)v zYV!ivFbt81P&mL?3jLDR>i{5`qf}bmzxDM}rjUMxDq@!M)~4<>-UeT9ZIpkSoZA;* zBzTyBkq6Z>P&zv0}KxA}8Xcdd=ABya9x;PHxV0|pPk-?sV z$Sqx$w{-|(S@LC;Qp%I?^zFcPo*EtQc-@OAYf@W871g+UCb3B3d<VHMTc)0|(b z|5{G zQjU&8lr2fyuF!HsMo0GG$ZE5@N-U&K{7`1cWR2`1SlMdI!}s?M(Vz8QNgVg*a>3Fb z&zra(+Q`~kKKj4KJ5FZVcTaHU&Xu680I!j(=QXUJX>jT|_7LCWG;Vo7%I&@81>bHG5T`~2eb-$~emYCe!42d_t|g4dy{TfrX!Au}wz ze?Lwh=QlXt5Cg~AIE8#K^8&2L4LnJGFKyEM!5woJrub^U=XDZbTs8WCQD1B&zi!6< z*vZEr5L(3}KM4cENs^ma7dc9>yJoos;-gegCEqg2Oxj|^QVI~uQQPsJyld4=gF zj|(tdn&De35D+~X%{Lzs+~A8aYG%6^N+UE0sToq7pe|VWI^;}rAH^;RLd*}H1G;8e zpe9pFSLI=sm2PTZSu5K^q4bo~xDb*kQg?RuJL|Kq_~2KnIkYA8T&j=Zipb_VbiaB9 zI+?nwyZNYL`X4p{nGt3UgmjvjElyD$<|OTfb)_mLys%U5n`T5dNL!#MY9f^U-e~B` zG)2^i2tdN*zvdbM^@g?oJz<_2LvtK`-q`R9sz(+PGRSE?O&rF6nJ6pF8nPnD-`MTK zLXB*t?Env#eu6-!CV2cm;K`m0v~kh@qG+gy@BYN9EroJL5hYhmqm8$D!b8({V{J(uf8P?OC~x5NsHmH|@GSRIt6@Bk1pm1S7G zfeRlo<>$@T^j@=^8)ipDD~wgj)BBu+JvgbD;p`R1g^!&=*9cCK#S*c>m(9X0R0=W( zx;OTL+$mdT{C`&wgtrPl7z!Q2{CmhtCbeFH;kmA*K4@GtF@W zhXj@GKinw{4CHMYT)M2~_3WX!C)umZm>+4$$EjOPn1Abe)yg%bFv~1bC!-A0KyTx% z%m5zQ11US>yRCl2uew7D?}_bK&QMUXV3}!vbEnlzqV_oEU`|)SS>Zo3gq~KEHTOh; z3F124){C5U;^PBcLW!0;!&K0&Gv;_+reHVF(R7gEmVEpcs->{df2qvkZb#e$cFNdj z)!bMHW)!qsteh%45A*#g?7Zo!rC&iK3tA`_63R}PC1rc-9`!+jcZYj(0 z51SHK(+c3iVG<0R%N{UF5qj>>s(sRQ(MKIO79R`wP{+R$L4z3ZvZ;<2U8yP}^j^9> zxZMlcrHXK}`cUvMOd?3~bHx|y^M1M5!i#?Acjabcyev==LOdU&bdX-J&%0sSweRH~ z3W=Ex@YmBkh>v$q0Vn|75L+A1%oB^u+}7oU#aWt&TyBayXLk{%uD_vv!2>DB{{lp4 zi0Ue80M0AcR!<=5TmMn^qinH8>8~1qe#~1ofd0w!PVz_aS>tPT)b3yYZtcm~oIY(` zjWk>+Qt!p8*&qa=)+UQ3+j3<0UJdrkcbkBR$wNI%pu_hYSVr@s+r0rA)<1?-hz&R|+nJ1CShU;lMEdRYaA?4e%Gkan^f(eUbT*wUn>mG4HCy{+4<-~s8e%9?s z<0NECkq(J+ZetYh>SJz+vc&SYy(M7#OX1%lms_R<)RG`;Ero{<<_|<#)!#h54IozB zR8AgiRCeI6<(FFuNzGZ^LKn7|8C~sfh9H=jDhNRq+CL#!-tVA!X8?kxNO40mojqeV z$1d$CX$W(Ej57tm7VE0)Du8};r7_FwnBvOjU-rZo9TbI>%;l&u@2}7rwB!)sKKj!e zRIzlk#^a62SA!=ddK}$VSJ{djS5{ArW6=`wZCGer(K+XRsx6OX1P6T@R5(ob=QtxI zp>JPrp_(+^VyvUAxR}$`y{90p)T3EPM4o8Uq>WvMl92hS^g89l2=Teg${Ntv>e6cXolvAfgKk7HQRjVh~`_Pl#*@a-!sRrtq5Hll0>+d?H?){l-+ zVOO(k6COz)61n2XEDDdEKI@r{P-6!ju7%?$#t68``x^dvu zqpVfj#>SDmqYEp6LEu#t{3g~cfAFLntBra2d!D^kX0BNHtb!${!X~p84Z~*?K%;Z2 zujk0%P1_>h5*-six=nQAQx({V<%O?zxtH3rdoL*FkBSrc5+*UdzW8rQ%4YW&1xOF* z)PVk2gi-yUkRf^3V){jW7+~X3YU6&K%oBt|{&g!3CK2(CscIsPg4K=K#|fI;wm- zU_la3geomVL>!zf)s{H;*_-SgmRKNACKmo|y2qc0_3Ex_@Hx`QCU|u~j8r0(8}F|q zlle_~(!b!8ROJlFo=Kk1QfmU=8J`D;o}-gzZOh@1pNvYup;EQU2MC{|p{yC}G(c3L z%OLiKKe)%?m<+d`>U&`3=}&v6ear9mu81!NxYW7bOI^{+YTv$gp8jJ8Ok$oMl|yHG z)Kk)**3$B(I}x>DZmOyb^Cjl!RA}X>d@xfTXTX`>xGdxlPreyJFPpVeWOJ$boHu<+ z4?S^TI(g{t3ZTayKF~BG&v9gDdUzWYY~CJbD|zyIl8M)!?PnKrFXM#Rnb=ih?*k;` zBur@yCms`^DU*IDqJYp_42!bva!(9=L>ir1JY;A!qUn}O_8b%y18WK8a zY5Ua9?qNCs_{I_2(UdQm`pVeVHo2FYj<0muQ%?%7mQ)tj=8jEh{IVf$ouRi@>-C}1 zb1;hTfvCHhGicn!@IYRyYMGI8(rAlJ1x@2mMG9=si$OzZA8NkxeHG80YLevaHTG#q z`uEBhf8jpO$7bRG2%;WoAPt#}1a+Rsedn_eBghY1md_6s4=-=?*uatKz4~h@{jZiodpNV?gVhPEc zWfUErmH*fBrTaFd=1nvH9;Pmtmpc(5fr)D40WP z@6puu&a6g->q}n$<}QPUj%=GDgd}YGh%Zoh3SRt?$(xmY0!(7D^|(pE7DDI`v})me zk7FfveHPyulLtoDU9oL^(tuet4%#&jl|2vI`}IsVTUun3MYFTF@`Z=S-p4zDGHE zn!N_RDsF01idQ=)6G&s>Cn_p;&5LaZZ)2Xp_xyx)WE&p5souOAkT2N00+T>&& zxNn$%h)hY&bfx*>7H6z8rkQQAris}c5*U}qA4wd?!WV~K=JEaNTqkUDU!^5Bw#zUx zx89B9xdhw#Hay^M637K4vwX;Y_G98bPwfeWHSw`uz=%Ei3r@-j52_-dy>h#k6`R_`S*oVC7 zY&EIb4Z9d~ZvUhS{wdp`jN%J-J2LX>XK)?_4*&v|jy-RpTwk88wt1_hDE5Mu2$;_? z1YqKg)pb2M+y&;F=F+*XC4i->DG2m5C`#>whcEd&evi)JG|p-LX{`aykh8WHof4Mj zqh%ct#-IT0uA)z*VhD~30!?!TzDw8C_kOlOr5|7bY>EP4QyjX|IHZO|+iu29cm+BS z29zV(FI;K+y~0~x5^Towv=4u=gE zT1O_J140l84L@F(m!TV|N7OM;V_2XJsnB`sYn6hRJsZ$3OM*d2OMXLw^v8ynys(J`sjQq zh1Kc^(V2s!e5`eswae&829hACguRqkAzY|Z2~#&2xVehj0W&ejk`i=rcdr)g;9>T6 zU4=Z=*Hu=WM!X^3*F6Im2EMJ}Y>GsfVI2TZ3>h5SS4^`)-*OvYtg@92?v#rSfDz7Z z*%HyC0s-NDfx`f@70{i}isI;Pu=5e2aZo|4to*;~VU2*3UI;qpC8qRiPRZkMJ| zw(ngtG*TYfnE+5%bkv+cz%c}WHVv)Kt{jz0o^xYL5QxD6Y)V>M%0OMg0rKC8O6$Hus}hCNQ8T7ZihidI#Iur znLc53Zgn)mkkrmoUKk{F^5vYf-agV}#5O%W zI2c>8u8987udS^^)_{uBOu2!HD~FrrG?)*+9LN8tIUhP(x{%ylk2V!ttog@mAIbRO zfO)VoTBg&Y=%H^ch^gGSquR+(>66w`$cg+d*m;6^p-oY^1I_yu(QO&qb=1`uI`VB~ zECp%C%~eDaiWG!UjW8k`iJI;O4g&b_s4KNID|B=?t+E6p{mn_&`U%JrRSF|enF{FB z4#sOS(;^ZcnYJrV!|Po2(84p`iK;aqLwS;( z_fAjh^g@q4!wXvpI_~_#^)VD=`8I*E*P*U8&a{vO`cb2HHC)hf_bQ=5gmW;G6y5E8I6TTB-aE95wKf-8X2R|DOHqm%;z;utli+!R{%? z$tV~(Vc`o3laPXbJc%=UGGCJK_Q}Ts5=7ioxA5uZy0U4jeFch%<=+rN>)_iG{vlPA zQh!G-3og&vLj2}3>xa8Panvl`M>JfeDi9)x$}4LC1a2p44-fV~%1*rtSLxG(wZu;8 zOligcBme(3rhg-ht^MX4ca-k=eWR?in7&Vc*Fu75GZo;^wP~#Xjnw2^imJ|cL9z2A zyd3)Z=icxhYatLi&kjVZeACh}fH}gw<5SVGNqhB=3_SEUTb39)dEw3Gw4d03V*&{fQT|u2 z)|nGIby2`u=Ku$RzN>YZapZlHD6xr(lyms>%nW@J%T{2awEQ#bSWy!I=!!UO&=W~a2j4bnqtyst=Kkm|R? zz$M1b6N^*_s#sa9#4X8aq|DA%>@Xhtn)QgxFnNzy zB^Nv+K}l&-yJDt6JWB`nrz}}!EI^6-?H=)9E~dj~Y+vz0w6Cb+UzrGR{P>%$DjjR= z)DB$XI)~hb7;L^i@#*6%w|P9FTe=ghhqyw)?+&x6^XY+pUZ$;jtG3@>sy(bOP)#uP zH>t<;e(;Vu8mkfKAXJS{=n>3wh?ra@cfa^a!BlbqiH0LZxqTzMCvNh|Jp0>y#=$~M zB~{Q(ctLt+*1<}v83N9tWAMFt0^x%qg9RvyIfpvE#esDfVq^VzkXaV`oPl!73qe@J z#JAS9f07&PqTSYY?S9(m535h*Rs??YzWhu0I)L1Y$N9NCP=EyCNrb9N`ca_3chP_; zq2v+dh?+jh1$@Ze0CJ#a95wLl0Jk65KvzxUKg%tp zqePjkQ*sey4Uh$@TJA`+H?e>0z9cS7T;=3Uo%6%o0s4~fzOOid7K3#d=+lJq`>Z6G zSS`hOCk4#+?6VQpmVNGTZu~5BP@AjWlG5LE6TVM>i;N&*DUwh5@ZP^33)DM8FF;w_ z;_Mr#n~HC%ELnGv#m|+7L=E5RKAWTb&?{&B(P}=V&uz=E4x*4a?wyAAKGTH=;=s?A z^q=T+C*K;x0YV}!YRT#k|6PO2y(8R+5QI>0sWC-e?OY!{?D_w0LAZzSxkVuvmhCyA z8l5rvE<1iI>NXFZ?{|k{CsfqBOQ=0CHa%C7dvFkCeKI3N6ni3sO;@+2f9t^_ z8LPY6!SP|OW7g8&*QDJVR6RPh9R|Euesu|}6;(#?UduJQ>k;W9Snr+FK4{jU^5ppy z6#rdbJx;ipXi`tcDrPcvih(pN;&SL#s>_SxDcF;fumA6%id9JYjsyY%tSlI@_x2@o ziZ(7H6KN^)VMWbF?En&(D%`Ol9{W2lr}9ZD&9Tb-NZWY#9kltg^ch`z1z@S4 z4-+kqsKej~H`+SjLA(CCIZmc#wvacLRz(+yOz!KrrfVfJwgC||>$6SKA5P3cEQbWAA8HIk(V~FPr&k9N(CWQi#Oug`%JQPENt2G2IA38VbzzJfy)cXdmDRb zPHK8b4+Up_ZC~~}pzv0^9HedXn*zRK%u=l%*Ie9v}-fnTx7yY4(CTD<{(O~BPm(s%fLySSrpGCKAqUk&=QydJ9Y?WOz z>eV5^#s+rmr z?Fm^f_jtV#v?cJbl>U?kV5IjU!`j!jJNBAIJ~^x1BGAYaCo>1fh+@R#k+Vky=9*|+ z|NoboYKVHhXRe!X?cQSIc7s(i3)x&NxIx~)TYAf`-)7;cA1i6y(0M>$+pyVwFxx`R zBe`IF-rfP+{{Nu;_vFsHz`qNvCOflQxAwH^9^Nla7VE7z@S*T}O@1L!(Af@~zCSJ&E!NV!NmfU>bRPpyZ%IJQz~u_Z>Qq=NDe`TQ9+bOu75FNJbQB z$TRUD1JGB8FQ6gfpF}MU$nE}rskp(2WdCf&rr(2podo&{sAA&vpZ}2|HiNIAKk&zLrZ8zc z9TBWXzZ34*QOc`Vw5RheZ+#U!(EjxQ6Wj4J#G9+sC>_8_0$>;5ZckABg^(e6fVEya7pY(jgw)2F9x?s#L zjecO-zkOu$_P?j}7092SNcqsOfkHeOi@=o4hb*mim}lP`tAdm^+cEdN{z|7DE0|4y z{GbJ5Pk;3IH(s|Ch@^cwqgx$Zp5O!cGyc^V(K6vVr^7uorK&wIRD=aXDo<51<@W4<)6)CFIQj{$#=0o#=Z* zC>Fa`pVrd+$~=3IkHYMktY%~(N(V`1S#nTsP4*td5fe57sz7dgKJg0Jn0zEW6szo^ zuH7OfL%IWDNlQFiA z`bJ(^Do#Q(N$_PCG7@hbsf5+_muH)yg_6?82Gc;N8jP6JJ$%C)Zo@L!)1jKz38aN% z3JtnR`rcD<5(p#iHb{XO>sb+aatvW<%n#j?_Dgg1wtd#FFE%s|&rMQV-5=Abl$0NA3m-GDN@kR;B#yJL;djK-r6 z45;zScevVj+qpngm@MMpu{~nnwofIfi!GR21qtVt{B6@V7}^Gk331PMJepkp&Q_dB7KOsOeO;L)LDmNr5Qbr?W{_-`Y-Nd#sB% z{FMH}u=MV4Q6{0O59lIy*wQDS6AQ9c6Vg7v>@-*6ExHU&nd96BcRmDK^Y-T!tGQdX z9)?-=x*DKiW>j;Zz{m)y$jFXz#!Wb8-%2Fu;P(30G85`ZOk9X8@ocg4Sl zN;F(qj-oU2{s4`@KC8CD5j&e0t0T9|!t{&$x0{g)?#V7d!dVs~wH7`T9coYtI65h* zPv4S-)R35fl@!_#sBw#*)D0@%{@V#W0~}|Hkb7x$4n~aQNLSDnh5DeeXAs2vGsv!8 zUQ&(*W`Xk)BIktu#*e)2XI11E`Jc9@3thz5tX}4a0oiK~6tZU;*y`%!i~ysw<;;DR z1V~>Ui&Jri>NoUN|nOdb3v0ZYV|)r zs7MjlK;s|cT=JTsr0^II3*q)!2#h7g1349CH+74t;Al&~#^V~>el=B^sUTAS*PpGq zu6$~HBc@+NJ{PPVfwvI=*)p1J>=y9WHFw)1?}CJ3i4WfYmD+k`50Ii(csFR2^j*3uawLaGLcvTd^>pmrvs{Q>>0<$8-!%1KkWUZnmF{~p-hZhgf+KSdB!G{WOL7%vDMv- zlRoNi5r87Qeal2|IN+J1RJ=V)J3FS}fPetw&uQ(P+~x_G#)Q(=H;OLpo1b z{Q@Sq^jm4$W?uvG%+T5GxfR39D>OW%E zHiYj`%MMU=WdXUY7M_Fdm|$N`+O_iAjq;DX!sS1sdT*^JD9z=|&{2?yG}0XWNGHr&_kPtYzD^%;kEPZQE|y#%f{Nwr$&5 zUM=Ih-|sKDeP8Ewoaga7IutcH0^ep1$KfjP{W`t{{OQpONA}QM6RydeXt}?tPEkD` z_+3U;apk;m?9?o3Us%79@D7c3FSRB(Lmn_%E?|;!Y2UuL-#uX`PQm72IV0 z(+lbI8Q~1Y-c;6R9}l>!U0d;kUAHXQ92W_#sNXJH4@On5qM2f88!l*aFuMr?wB=Ob z|H-tJoyI4s7p7dx+%-#`OYc;%Py_s2f3cHNLhjG^X21LR-@FuJ4P)>6Qj$;;DuK8^WBQbl*2iuVQFbmq5NX9sv@Up)O*xckDIS`ssi$FD4Ss|!I% z|M1h)%a%|zx@^oTFyTOmL~wkA-Cq6M7F@_%g4gP>NAr2`S*z@2K}mRCg*UUjpn&9l0&g{`se zBl}0%c#$wH5~5u2#f!Tc)T7W9w5qJu6f@vadRmX=85H*6p1X(YC8yScy-D${N!aH-o-14@n76F;bVSSK+g;x<%}c z4X4_kM}iiFW0k*lsa49;>qzYV!w_P8`Oy+$yLx5(9et=yIK0jW_m2tjrT({MVl_QS zv~IzW@&1Xta{h~#%l+riJpRE6w-m>AJNw&$7MZ_d5?;O;8!Zwni9{XWohLZE*yru` zb{jxn4<#Phu^=td-0T#7rNYOx)$7HO`=JS)wAd~SWZW5A{^l|rSfTR^d{)nuVh1!; zD3d32ZSJHjpHKmWzfE8Wk(H3qPiMnTmZ8W^TAzFs6xr$x?|0rYhc7N~$P>bTaU&V- z7X#RK{`5E$q5%dSYA-}woX^WX-EK*$NChha&dYtp^hxFlD6y?R5_Ch4LKMd#;9wJD zd~bE$WVjg|SQYSqvF>l~*&%8!vd*DGus{8dwAM45dX(sYJL z%~8r^Xp`jFm>pvJ*9JwnMaLTw_8ofIps?MnRqpHXe~d}Rtr<}QPi)jVK^{T2yxm>J zA*d{ua6g0kUYQD&N+jj;du47A*qE#&+T_ubJy43+0WupuEGQLG^Y*tNkgQa|jTUHD zb#5=_C+MCE1AGo_G)B#v2%w{GFPq2*%`C10xajrGmw{vy;Vey10JQ(u%~&(IQ}*J@ ztSEhOb^{SXNNeV&nstT}50wF$B)rW#KYoy0oz>mJDGi?sX#Yv=Prc8)3HW6eYN71V zpY+GP`py>Se>r#5YBRcB&b!IS#Oq2F)M`*9Ptu2w2P4Bm5KKz^Ko`exnk(DTOYvssWL8J801IvEIpmhm~}77s^&vVofw0xCcYy z8b8kGnxXzG^0xDcG7sE!>&M)(gt7e?5+I6CUhDL%lBT%3<<=a7*@^d{-=R_7JSzIP zrVY=Qq}V!tPHp4MZJYdG?26=Lz`W$hDE5+Tj%J8P^AIr6x>JNUzQF|tq>)W-vL=R( zhSr>yeBj~MW^EU|JN0h5$h^yG+Z}}qVBJr20rTsl-xTLvC^YMrs^f%!Hr2n$II;0m z$7nl zSevkK3>4(R_;l9$sHtau!J8Ftpl{TZ+SK7K#`HeRhWoPyqkgTaky{!O>-m4*OFQh~ zqmVgcfE$f7bKJLvzIR66ZR^|}=Sg?p>VGy>H>}^t@Og|p2UmfdnWE@->`vz?@F73T z5L0W_O{OlHGzydMII)$jV%z}G(n$Tgv3XDPZHUT_2q%Uuay9kMBu5Qy{GG{uLve4) z9;lD3G{5Iw4M2iC%

hptN7Sx@R|{7k}Gvj+K{9q2E<+Lu!6gL^$fh#^r`?(mFB zv5w6N^&UQZV1$Au>ar9icr>}sCe1Ojnxj>#Ll!GoKNu;*>RTJ|EpNrka*kKn*0br9 z{$khBfjEz9W`GOq@u21rZc;SF#A>gBrH=I43VL0{%heQWZ;i7%Y6ws5_j9WCQk$W4CjGnJ+ETnYxV)nNb0El0*AKs<$-~R%H7hVw-_tyUmb*qf+6IhR> z$7G7LQwR;3n9Q2btYgr!e&kN!Y1PrYHGT>XqpE;{Jo;vQe{B(*!~uw{()#7Ege$JC zthqj+72)`4o3cND3>u)2O!2O(S4dVbn3u9L4-hMNpc^#co$6s@iRUUME7(h@pv z)EoHbuF_#43}mOKHM*!bKW~>{Z*^HD+)6n)(`&(E5!fyneWMZtQ#8)f0Q;x#Q%R*= z7E*!_^v^;8&GH2o6vv3lv}H}hkec(C6&n0;zY-Qzv~fRlq<{628|9QTa{zL4xGL87 z%&aeCmATY)bt%y?W#l`MgXnsR{)<3aSkm%vi8eQdt{db(eq1$N?>sO!3t;pMj%x7} zF|Lg8v^(CPvqm66Dh5ujF`b)Hb>fb6iw6CYBKgo2XWya7uz>zYk32QO4ZmW+7iwyK zvT3rPrp=H6Zl+*$3VDO_?w)2H)RPp75Yk6Xt({3 z%~-gQG-?McIgmTu_wx?%aED2K9y8n+BoOB(RX~Zs^T(HHlsY>X9feu%H}ok5VuhqY zFo(Amm{ASe-DHW?Ah^AIw@S}g8BfI-63ZG_y&}`?kUh3kU+&`wP^vF4tgBn|e(%Nd z7n$e$IXOIeT5q#%z&J-8^c0q{s_zQ09n2v|M?RS)&+9KKhJ)dl{^kARXmJiRr<*9B z2$XtZL*{uv`I>n?zML(!PEoR!J%mSTn|~Vr{f+|Y#DiX>j$>=lWt*cT-lREz*_d%+ znJwhwDwBp(M5v17b+oZMa87qX;(*+SY{6c15jY zI2E0YgK(}!rz^*Fng@F|q=PKXl%5#|TaGzXHZ&Dogg+rX(U9qsO6#N!+ou%iO|RwG zdHCa#<<%l@mLXLu>zN{hlKg*v7zs(A5ITL0g}3%2os>ucWr_&#OM40vPApd>qpxiU znr-UFe7{m((JS~q3+tyEV_n+qpFa~tHIK8sNAZVPu_ttN#NcBt6YclArY4$c%)}J% zDTLJ`FxQ6|sC;RObVwgYi+qs-#iY@n{v*y%>ET3=xpRXRn82S@PR3${gu1BQJWMn- zO|ws<6Hi@Xo;nVW*@qqpXm=yUG@bWL~pf-;rAX>i z!y!5&ma*EU!{wEecV+Eg{P@SMQbNr&`hmffMNU_fWQKw!8?8S-74*50OIVyzzn3fK zodn^;(G>;r4X#tHNTueS-@^+S21}{#1W?xg<9>n`IC0)k@A_^Qy@lsh4QZRjKqY?1oIAZD5J6^ zZpJzt4nc;_o^*fXU61EZB#hS-FNDqcl!j zmyry<=xlOX>c0KzDi#I42;VX1l-4)MlE?qZ^oai8+sLyn1mj{eb1tIHF|B)XMtkPC zkEHkn$&YD1mBhj)TLDXdrJLmAm(!cBXqr{J@%594dkIMlwo+6bSJoXJ^H;_N zJ~lO93-r4kyf^-BKnARS_@%;?S4LCO7(pYY=g!bSN$Z1Xl$?0BXE%wnlCb+3amY*` zH`2@nh+q{1E?&6$7wXlxe-l1bYFy2^X*1hrOlD{OK_=>n^OUP>R98n0Qrt!Tg< z?t~oR4^JWZC2H)UuJQrhhVCJjQOy9M!&VaUlw*p;eA}ZFiGlNn_O2q%-gxtq_@GqRALEJ}5sad9Aecnd89XGSOEpq~SGNH_f@%++; zZVyOnYIfh;qAz_jsNqP*2i%wz4>YW+edf*+A^IJWO4LZ9$K2STl3VdnYB|-;Q)^MK zv!swy&oVK%(0Wz3m&B^#MmqxdQcM%p!Bu3giknw2PfPkekW1P;zN^h4j3K-<6*g28ogOkRD1pZOL;ECNNr)fvUy zu)PC(5Bsu4-dnj!Ap?GCUQLhM^S+T}HfpQM508cfaXpw9JpTw zTQi`$z)>u(2VgWtdIsSd6QQvTV&PH9<0`Ijh|d!FMcI2dgsa&jGiqW>I(seHMySuX zW*{f|K+|LGdy`a?FS|&E?TP$7KFsoq$c|}i!SrxY&6Any)H~FsUA+_{+YTSCJ74eM ze&beg+*xb)Fr8=XY!W1XNU1}mN;qh!Svu#_C-_|T#3YdSi20v&9Z(Dqadm}%$B8K3 z>h;uAv`2=~w7L}ok={gKUN#Aa8Mxn{QASd8H^2V396VhK(|+8zn+#F}2sFlCqr%3W zGCz&PgTrgZl8TtyQ^>9<6I6eTAqpwTai9q@f@&b$CJW3N$h|N2bi~@s0c!T>lTKaa z-CsF2Ce|_fso0T@3w>Wn6UFp_rqbNGnAD$sd)tvwn(=+w23eqS^3Otns%#$EeOa9Y z0#Dq;f1?}j4ZS!Wt$rTR8^F>h#Y)Vqj~kAh@&Ru71WHSGO#k-}asOv_fLcvqhX_l2C z(qTYt=uC__8|e;%#KXhCpMNj~o~|)XwDw%s!5QCHCkYa;t#wj( z9d2PyghPd@gxat(^+zS3G;>H24P{=IMBp*Br(9F6I%^P#+8@b6-0#8iW4y(^&soD= zHl5gX2LfZMbHTPPtx%&QT1~;_6IkEL8Sl=u2>DCw?2;r;K*p0#HiRUYf%|&a0#xBp z0@+!qyOoomSy{affqM$b8oAtkaO%sv?(0)I8_|Tj6Lq2GM!0fWU)}a|ZfNs4qFJ&~ zDQafwMTTo|k7VDhsG$+PYk*VE2N(^vof;-E!&yV=GknO5Jki<8J}Ee|s>L1_fbtSG9)lxYa+ z%rx!Y-bzMNtA>^9dJYIlNZ~fBIz{W6Im}`!$gu$CvVmtCG^fwP{>3v^i8g>JkM%K6 zf>MU4KkxIZat2-fxj*SpUH3!GHYzs$)QLoc^E>rM8`UO}>(_x5%OR)AnO95+&SA<^ zrazSwavbr2xjd^}5(7-|(pznlkZzR}bu&|)J%KUtZ4#3!Uk&+ym)XgR$eJ* zkc5(@=khUMivK^$Zd~*MMM?}3x;c$H{%#b_Ao^eEmRW~4zU($iKyb556dgGN-(8s{n|gS5kIi=Tse7~0iO zb)04f=_8CWYSOx@%Jt5)Hg7Wu_`b9cx}?7{xaaO5qAhKY@y964#ezX5)%+PL_wpTLSw5Rxnb)IpUxH`M3WwEN))kxYJ4`) zjq&s?5b{qm_!y2%sq&vD`+@7>vS9_Bezg5ptp*zLS{0R6SdwIjW7`FSefp{vGub#c zCl~F|gMB->QUz8~;m<_wh+5UmKcy7^_D8s$>!21)Hkv3K;3@Zv>;)8q9XVfAvIA%sr? zKwJvaZr3_MsV$17*6#UJSI(=upZ-*X7ji_^`c1uhMjWq4;b6(I;*-<>hhBmv+3N;@ z^CRPpp4N1F$cxAcZ@(BGb#C!UbV8uS8!>VaQCOv!W%hD+>$@{BA5}8I(YZPHhB02h zs+on)t3&KttZ2qKj_8^KBi9v_@^>SKkeo%@`-VTLrL+AYZuD+(h5g06gM@PAH{B>3 ze{|kMLMXqLATg$l^nO3b^{(LFVCu@W83I!ZLnY=v?sQEmARp(*A2ilLZuBW$Ohudy z9OR#df2RE2!FVR@gc{Mk>GjuNVk_=Mm~)5iW6}|hRH@RO9QJ1lP){tWZnQ=Dk2Ewt zFvU(~Ln}>^!OW~xa$oD)VhFc^so8LRJ^_1Yvri;L?)ROkP(1^+<^)RC%w)MMvHzLm zB#@!|sq`WK)Uyu$6G26CnzvpahIDFJ~-DMop;d~GI1%jj=ewSC|Ij&>nrWNBQc@Tz>FJ*ML8 z$48FBqSXp_av%5VVMPl}{4%yTM{_HHI+7XrD?-Kb`&zrp!>JpUGmZeOFw6PTG{4VR z%-8@0W}uJQfHjncYCNRZspW(k6NlI3r4I1zx%mG(?a7my92VN?d}tU?(0LDO==)0H z&|Is4*LWR+|5|v5q;x4#qN#g@WgKCDpr=jx>agU=I|uJ5h(zeHf49$8MKkbFrI(*^ zcHPtZGukqe^gC*RuziZVGy>LTxO4Fe298bAZ$pa0#(MtGKqJJV;LF=6bu4P*2<*2p zbvN9tt@r$Sri@rD;H+c6Sf)oUvlOX%5wO(yatxFsC!ipv1iR_0yFU zW$Szdaa;NJEY2CnSS6 z*tZEP(g;%YeCO*KuF2lvDiS+aYSpICRjCeLW0%(_?W0->`>z6%ds@UzvQufGGgTd< z@tZMhg)hLCCJ%28mS72xP*|i|L%otwZzE8V43r)^+o$t$U&~VsF z67RcdlDJd>ED9E?$6CMkUxc>oIH36QL)lUW^BHQKQsH=rr0SUx0e6hrXh?s9`0<%; zcuyLC3ltC>`%4QTuV}Hq&|=?a1s3DC%KA+4*}WalXtsg@G+oS3sGy~cs)~pHIjplw zBAtEO)}`Bk~guf7w?uV*@@@0QxWdk;vF_#>U)hI_izF~_w_j33gJ8?+qIuh33A)_pR7hT)xm zzy=BZl?6evzwkoplgOkVPJKMJ0+=aq0M^86C!@mIUP{aZ(PB~)5U!OsF>rRHL z{XLP_5<^&+(E&(uj%*DTp1#c0tLypjCGIO?YSWLuJgj&-Ukzlvq>wTCg7NGhF)Oa)@ZU zw%!W3`YCf5t({j~UY_iB?)FWi)IPcIE^hx(+}dlJ{#XvwPRITjha>8FE}I8xYkG43 zhaXNRtE&W!OnR%S11k3E2lODT8fzIvb?!+7B(}7G448JyWenKy$q5>MyVLMC2|gmv%XVEYJGR+AC|1A zA4)VB2(6ilzWf6NmhD-o?zUNtS2v0HdHd3*q z_2n6A!*&$4Z;lpV6ogtUjpkH#^pi#O@ryf8b$e_%rGok4WU z!JZudbQ8Fz_tUa@w-V9f#6BUAm`Bo6)WZ*TyIkjIW(i(9kqh?sR=U(|?|@0xI09ZUGL ze$v~in5b73d53{%2TL4)EjKVtm1KQQ=tz0!QD#91p%5wn^5CVQ#Ll|z?TV|)Nv+ZMd<2kGfcz|$w6P<8%nmiK zU>auM4w_59Nmj2boN=Ran?B{^oWW|@F+7zq8;2L_8{0<607vEs9!iMg^L+>SGD~5s zM_Q&Qgx!4WSzm#tUD}bljzC&esM3Ik4@}NV*x%~EF#?@Uo2nI|^*DazQ}l(_5#?l4^(<4*9=Mocyd(BoBl(kdzsZGpc??u`DF z|8g7wTZ~;M^~tVIr$VQnudbv#t9F*Y-d2Fevok9=c?9p?MKNDUtm+3N**l9Z!hxe` z5O;t=x;&nSJ&)e9F=3Ne`FLZsSu5`M_u@{4p_%oqKeM?z<85&?b>*ofMD(9NaGc)39!0>SvY?#~%-^$MpK={S~b*H18f!T|{H1+($(KwBrfKUo=HX9_G04_!+7J zfZcpD3;as0@5phU@mBTz{KLVil}%nz=HV zEAB1UA6edl^=h84=XSRa4lHv=>41ICbNnn!Peqw!X;)E*ym9Nfp~di;Ge}s1T7Ncv zJQ*FY@cMRD^DFpr+F`VR)na-vTQ^huqpWwnXlzXjJr8g33y1Zeug<^< zc4V#MOENA4QWn!14*3w;(Nok zChCwogoXaXrrF(aXupBWV5-$9Z;~GTAlb+tlf3bPK6%=r2xb)bZ#Gr=UCwg{Vp+3z zZp7imC%n<(Lkf(opv%%qj%DpdR#5$;^|1#h0}*o5f6C~GTOYBD*NysrAr}xA z=Bp2z!~K+-bRuQF_Q2|^FwYfaWJ?3IU1I<0Lkef+0**<-2X!jbzg5?Xxn6=sQU&wD zSd*lshgEi=E?>id-k&0>o(^}+W*?u;&JozjuxcS$3#?+9X!;cu^_o^&tSr{3u41xI zH^)v7G1(lM+OGt9lNgt^K96l4&TNcU0IG02gVD;#6^mel75UY|FH{JXNyOD<7sp8z zk0k!}c}4IOZ8p5Y8{WcN=OD$yRl{L0|37ZgF566Cg&} z^MngskT?fF`v`{AsFurij1i{X5t3D`(2oD>V{8POwuf8x*6Az_W;l!#e-iF8Xd1R$ zb`jh7(u2@Xos0cn_IYGFoF$qOk3&~Dj>5WQ4N?^4i8Ju}EMz5GAiip$4y|IrR8}MN z6f3jEqyra}$KBN3dQUxazmnxdtmtnLshEv^Us_kr*vLXMUj46uryowP2YO$0Rc1El zBUO5pZvx|bupw6Hl=U-DWuT5^Qr4Zff;EX*bC)RrrZNi{FbjIQD+aUZ)-!t&9E*o}geIC_)Bb)8LD>^fmlcG&&=*~Q}6~6lNwMjTp z(km!km8G&Ah&JHZkOYCQB+t0Tu;!Adpa0x27Z5f6in-y0Kn|AK^8Rp{kF zqWc|Uzeyt%8FlmaxZ@nw2_7<>lawY{X2OCHvorP98mF36yj_7o`DURB&NWMQ$ z^;wlaZOS9v{qWDx?B3adv%*~Mh-1)+3yjQk+d1fpF7{m{=nE)2omS@4+!>}_#m3s{ zC|VLiZp)bqT-n*>7A-U6c(7Xz#Li%(pvDuET}E39HYp91PjKA#KwmG$_M1=D0=)?5 zEMO2>0kD|xOZ%L?!R;JO@a6dmeMUj=flEWb5-c8`~S^`UfSdPLPGK!(K3hGlF(JuBnkU!lO)hPW5vMtV~ z&4GdxhBV`e_BPIOAEPwc#}xS^Mt)M02D^(ywvC(po$Lr?I+(6H)4TG}ta$s|FtTk)->^q-|p^;TU3xO>>Sh$+3e z6iT>{+mft<+S|hLTP?GhI)IGKQt(jk#)A zsjnNsdb@?s>D2{;w_dy$K`>M{ve(XYKdqg@6catL#ppr*oTv#*KgLUm@Wy@#2%=_7|(3JYEo{3FWoLQgz24>QOpb4hH)@~!z2kBkHg_3~ZtMJmcAk~9( zYj6fZWYgeu@=;8m#QQ?mAi0&PNxRm7>_<2((D;`MMK(!c4zj$&CRud`q zH!JjEpRN9V@u+W|zu^`&!etyy=&#sliVd`s+te9K^nIHI;GG3gnp;q)=;2qFl0Y`s z5*#GHWdF#Ow`wpI+EaPB7^du2dhRAaW$UP&C&XZMv=|f&b45|5;$^ywrZ8|=-P*-4 z@#ZjKYLJ#~!MqldI2}2n-~NW6XdnTGO&QDM;l^CCl?}7?N>AS*Jpb3L*&pUvEF8zz^rLewHo{Q#~^PCXWF<&*kW_?p58Rtd_B*L=m{S_N(#EDIgm z9}G0I`s(ILQqFpK)g~ZhywrZ3i<=Ipm@*yuKohomh8n*nG{z%f#y`R1R?q6F7(UK= zgDVTn`<)}}w1Y^xrK-Z5VnQa~Um$F9WN2s?JB8Z93>#eqhZ6^^)*%~XP?!UyzAnOJ zChb0zaD^d;XeHF@vkO5>Z$@LR2uO^ox{bwtmDy#$i=s6$p>fw9uSQNqXPp+CtD?f* z!F2O&AD}D9{W~yB%)ziLx{neNoUmCRFmbB4vyf4!sfvF;@v19s;#;MG3pKk3G}%tR zXbxeT6gtOZ?k7a=ni=zyQ?RzCndR`9gGI~CWg2B@RUKqZ+bUO+FtERd%4L1y+Qrh9 ze@mGJNO~n4^rxBPcMz=>|MY4!GlFTpCEF%c!yEXH7cxF^s$$M{B8NoH!(^;uh%zX8 zTM#S=A=_}QQP@3YqQLDOvx@yLhFfY+KiKEbW36d;XrJ9IhIZpZQT#Ji&gDbJ%>yK4 zgNFIPrRO$(2rz=V7U~dg7&6Yrs`MmDa%d)IvWP&Md8`P4?=c;^QpTAZQx*NsbwVyA zwt{ymEJk%z@6gn*dCPJTh(^a2lK-0t(a!J++^)koM+nLubxCx|WyD?jKMyxj#vLGL zWkI%W-S$CYgp5@p`g|wF$ggE?TD{8@d#8>)#K%4fqbPj*SAkDfiv0~P@Eb7-E7&H9 zJiA^StR!3f|2mUB@X^*ZnT59v66L#!@G^I4gtkz(Mo+6CKMEM3B(w>-Nv^>D03{I| zyULiRl#to(4E`s5Mp`N+Ta%hRwv|Vy4~(R0d@16hI{cV7z}EAhNjlt1woyTRI41bddGOMy`#qg0NJ=sW8lw7+ zua#hGzjw5>%uuCb>1w_NrsGIHPUq|-$?Yp$gjCjWv68kqt!`-+PYGn}b@x?MEea9C zH)~^D^wG6C@Sml2>fA%n9K!EB<^QCP7n=PIMUFe%=_IL*o)$BbudEHuTjlh^sJWXLVZy<>P?gD?Df z*ba;STk>jU|KQwjSDa!hmS4#+?)4@LFXMz90Ua9Qs%4SsP$F=xpFR|I%6hG$k#``f zjz?RYv;lLOOzTy6co0V@Fq2+5YyH<=Qhwhw;iu3>5Db1?Lrts6nSaDo*eC8fuY%sxT)t$S%Y;( zNZ$gtp6&Z+K1m|oV_x}aIn=wQHzsfAdmc5&zHnUE^y2V?s?~#!U*QVH5Q!DeNWTlW zCP$TT#224#6kduY$>z8OSju68ZmBL8y}5J$;TEbN{OV7#me&8fm4i z@y6ZaH%oNtYEIRvBPQAJn%dUBM04xuaLt)OdaLOex`{mdGZ4~;Z;X(d|A1M?VG zr1kAffBu#o;TdiWDa=RcFcGF}oml}u`&7}+und2cd`A7N;c|=Pcq)nQq1A+v#2Cuj z+t#q1%Jxk$2b{EYMG=*qL`ZLh@Z>|mP7wk`*jhgeT4n47G8;hXbIDyBzVbrb)U9Vc z$gKL5`N0*6zM}pI3uyFg{_iYo%0*RJkdi}+zia-8VEb%w(FE%L@~QUUwg>Khf!*Ma z9Sh~DU9*N2UWuM%PLDS)$KK$Q?y<*A_E5{WfR-;)>J zVc1^ta8r$H*+|Zwn#{C>_`RP@w=j*a7p&+55o-lY({~dg@#XZ}U%R>yKxj*O96!d5 zeeSxep0F`wS2)YvC z5m5c5DQs~5q6|g-S;`vH4-L*JLXAyGyiVnPc+^EiM-7NH0Cd?`aQ!XRb&js^^-On6 zJk7~vY5|en7@Jmo(|6w8NRBY{=G{cc@}IWCE2J5;$`ipw3S!X zbYT3!{4X%DJ&YsDE=(NJ_YV%ebW?@eKwh4ol5-2o>3xF*vf{S%Csq@J1Ot`1O7tZ< zU`l@_7qD!;!Mv(!*m){`FDw)}>}@HLshB?<*g9p8#LB0IYkV3#w9r9ShFjVR`ht3)^n8N$3o!?)yylHXzL^7nA5UL(CxbQSae;94lXPLo#uXwS^ZI!?L#-B{}{;%uNcH( zKTeoZjSy%*q)3R_BJ&qmx32t)^Hv|2$ZxT}H0va(elHtsQrYPCPy5W9@i}w#(8zG0 zmRLYYwdVzA;AC-?=93+J+@HT{$KRVcz*dD;L%2wyp9M#=ZFJ!Tr1g=SynaaVa8~&DTUMnKrJX>B5!plL0hpxRK_o_1IyFn{$UWiba7ageKJ($Eiz4J-mH~hYpUSoDSs^#Pn9QX8zvrjwHmbUMq@^WxHtTRs`=6HVXm?imy||C_b10d*pK)ZYN~&6psA=%gBz3Q+q|zd-;>4m1 z2gq-Q@>%>8rQQ)Tti)rK72C<1GL)#m$(1mHu%{2A2P+7`SPpcbm)eKatLGzZ%{&dX z>dI%Px+Kr}j~f^;gdV^wVP>Tfi+~o9(@4zhzHaFwSk^C{X8STUXx-?_Znh_P^zhBw z!-b`ArLm~%yV2z7En^sZa1R;E`H(fQY9;;dIG*M})8A5NBcf}X!q3EwR_jtlGz_H0 zyIkHkEo;dM+emeo(9*ePUAEBr&b7V6iw))7jDZ=xao=aA&p*}|Y0y+e**`9I4bQXp zjdD(WlU!I`ak=7gD&;bu=m;DxMG*~M7RJdWZ9!~TuH|1mBI%d?|irfjI*6e<>ey3|zHVLC% z3b0e*0jvz}g-F**ZDp^;fPj^~0m{tHMcBkp%kE%_25X2m&|2|#)iv6DM6xE`uO(XF zDj))3M>h@N^bC3E)H)`i*NeOzMqy&~r5bsG`&Sf6*Ffl!3`Zc&Noi za9f!;VoL6Oxuapf%vaQDj%@WAS%|#xBt9IKurQRQ2?V0u8=n7bCM;Qw(d%zmFsyj5 zLf5pda<1#go{tE1D%Mi300oBUl5m5P=}C$QZ=XXJD&Uyi0B6gFlvV*nje528-{g<} z-k}jrt$L1b93v@6u?S>{G0wyjllVU6@V;0vl?)u)?>K_!-rifhv>N{^Z=`T zwpP42e0yba1UieSfSwJn&8lGg5b0^`<3{5>QH}sj?6UML74Rlg?3!ih_SY%iXyoCj z8|-51h1lI$fgrwBZ(IKR^oA>yOqtLhHeP-)vPpv4f+d_*`nzANd8AQsK=C?TdpyTS z+p;`flHsl;g-UNn)XNHFFB?R23AVFDo0JjyJVSqb_Ipa~d5Q(?SVM#JcQ1jGabU?S ziE#*WK6$H&b_kMQ16-Mc!CfMmu=^?XI;iDin1{-aIICKW1iLiZcGROK4Dz$i$jdOL zoMAt6m=vZugT_%nasH(w5rqbu))(qfZtrF8>X4JRMXNcc>mIc}GApYX?1##pD$@PR zp>tI~q9cp~*2Ki0WHvj0{qOL8FJOR{Cf==2xea=95FXygWi4(NOPdxQXK89Tu z^aEY`<_KrDde|dLxxjk1akEgM3a7N`$&wABi$$j&M{>&%Lk$;!f%I;3Dx($REu2d6`{5cB7Q z{D&Lf%nymfL9lrYA%yV@66$u!5*(^{colDF*ojzy=(T~0UhDwcIzx3+-9WQrc?uitq?im@mOQcFQGHtK;2|<-CIP zl_i}1fq__zl$A(^HA7QNh0GsP8)VONOs74WtJSRmL)cWcPuK|O^(^Bjnw@s&H_ffKDZ z$ske&O&klcQvmR3<4Ert=)c!(QOExrExan1#FL#`15w54r4;`=wSiBk23ld|&$r}M z?{392M^mdzdP%$>Z*TL3w6#r~S+Burf*&SGA=eMlqKRzg^2yW+uX^FN8L|IHeZ+SD z!qZS;Xi(;+tc_5kTLaXOxpRv-hU;qukdfQHWIijnJ;)0PSHVMMc=rm|9Ulk8za^ak za@LU6;8p-?{EjPF-gG`QQD=4^?7w#!Bt3LKuV5swhTMqpd*TdR72qSskmZ&)%#;~f zQ<{^8bekhFG_AWc6S58*yW)9ELG9#IW~RtE+-N0{@%djjte0US3LLoGzy#Fiqkdtq zSX>F*vm1_j7AWkW_L@GEtn+akbZmQ@(qH9sRrcOs$4}CFn|SBOAX&So6_os#V0%8s z@k)BK0f0d0w&NRwPUk>~X7cwKm|nQ2dx4*?-jS=JtKO+{CrFU9ys|mYgcuChEL3KM zR;!NN2w2j#K(HCoBiZelLmijmd2nub5JhOcfeE^H_KA!9CY#LDEz)zw+qeMkJ1^6M z>7D#$$tGfsHLjX!zEubi2KOtCdp6tgz%^D*idzj)zk;6!Md~AO)HTwZTL!6${RNXee?b0WzggJp&$rN%=`EYruZj}jz-C%xR&mj0^C!##WgM29&_n4 zcY;&gw3^`5W4&UH`eLXd)kSo$-A=sR2`2czSMwna>nog%zJy5G)H!u{~ zzya~o+bRWlt5?4iYIybub&Xg)fkUIyrTQO9nemIx6Wv(Rb&5SiB*txON@)Jgv6eA< zeIsXq=?_Qu$x?Zv7JsEe8<(<&+>|ZrfdV})$KDM1j(5W|$stDZAFOf~xkbZSXb)Jks0h4&u;qRO$Fy;_@apMXnK$0Ua3$!D zB6nEg<2{6UTOR)E%y6Td5xq! zIc5{F6w70V5UZ#^pQoQzuVlCAx*G$W&t>yO5+Z|jXyzxKAdrqi7VM2Jwg~@SOX=h~ zsw!uy8lMCyaFP+)xWwk+9-Yb;Z|!*ro#e5ZQgG#7=bHR9==_R3(pP6;I?T>dYQTU8 za+ZX^vKrZh=YJ(#bwHHQ(?9YEDQTn|q(SoNZt0GrLuu*Gqq_v@6p-$2>CO|5l14yM z^1bix{r`D3W@lz+XLmlI`BIH71i<1z2|vBwG|Yp~_%dn|Nq4@==GLaxU#i+=kz5g- z#z`CPcywYZ^R>8KVwmgqZR|$WdHAJWKb_`#i9y1T53h)1VwwMe!obURW-W+ipNceo z6_sw-w~L;JL)M_qK+;4$MFMX?@I?qpM{x_<*B8$&@QX=9E!(KW$@dZTxRrsGs#QtK zERz=;s(?*ujuF!~smuYkV(}ja#WCMIvl>Do4#xplIP-A0er;n*M8i|s?Ivv!Y3rn0 zMw*OU@n#1)-J=4eH=H4eH~_A#xa8%S?-8*W7irq2aBfijrYXK(l8qIu3EIKO7D+el zG5Rk!1lvpH!%LR_qlf4p;8-*NL3~=aN>=lZhbaa?1*+IRT|Ik}(ej+st)jPA*9ve6 zV*l$RmcsM_nG#T-IVdQqN1)o;1}5hR@2ID`;GUfvO}t)`pUg+Hmkw8&19B(RxB|&+ zNJUxsPa+-5dYLbIq6}lWSYpj|-uRIj9u~#Aj*$-TYoPp;8swf1#^pni{`H96xe84d z4gm&mKNv2A$>ZtN8;ukPXql4E6q*FkLP8pi8`}N`UHp;J$+r0d=mPhuRY5}inw~d3 zIP{lcgCOnGPQ+srBP;gfJ_pH)9D{kk9lm9{002f6m5FhR z%%7F}XMR#e59TkOI+JAo4SF&V*O{gUUJ7_Dk>o2*QWCmD3|l@y#DtGGQ)Yfc7>r^~ z?FwV#;pduFHS{w@A__u_g>YV3w&rD(@{SU85CHK0j}bCu9vpzoZ~{~t_g1*83@#OL zlJ#{|!sQPKHZ%Y&?jpBpl-TEM6;wapw+`c3p9^F4wfmU}M$ic3=nQaGz#qc`z71I ztLgSgWE(4p^>zAVY4K>Aelt-J@=ghRKfkcbgkGK=o(8b%8Lw0zoT&Y$-l z7o)h31m+r2e3i|#<2X8z#i%16djmP@8{mHHxTpR+-jGiHRG%mPCfb{A~;gGpWd;aSA=W zEv?pQhk~07O@#(*Mtf_2czuA2H~5uf4f$a7J^Mz*wBhx78l29_0}8~3py8WM;2P3) zW7)Z4K4ajCoZ3WxV4aoL7>Zg8E+>F5E0-%Q5SPz@(9a6=HH2gE?Z>Ja5-JqSR>X3I zV`=R|n>1|ynV)o?shh=yUi7dXqSEQ;Rix;TadX^xBKAWXOt)!dAwbXWX8V(KWJqkU z4VZ-QmyKu)23KJ21xqo;&#mqPeHg-DL1@fe2fyXrjR~5R-y!H-dMD%xDW8-h zYKj~`eU&I8%vQU`6DPJvBKVYs@s=SdBe|PtMUY-Cx3#6JopLHUU`=pu=|l;@`>a+I)`U-N3r z-CRW|Jlu6~!z?ZZ!$OPG&_IB?-5yzs`*6JTo9rB=JkTJKARfEU*KXQ55^sb)(;GH9deN`&D7?$2=V0qEktrha zS_}l{d`q?gj^TO(0)Dj)yZdQ`A+53YNN6t_zjY$E9A#_m$JlF^nD!RCm#MINK?$O*Biln;7BAke*xO z6+y9^NXW;wK}Le+UfSgF3Zfp&d?{N_TUk|bWB0qvY76B4)}N{Im0~9$rh@?9#-X(0 z>{8BUpDIzt`~LS+l5 z)F^PHcUiwyJ15duyCsg*qZh>VWP@Y9k#znR5oZW4#O-W603^<6?>2*TQja#zasEWdQb; zv$H40bD>kA%W;E~ia(p4&I-g`jN!cV5ktJ>YK?<79&^Or0MB2o72qj-M&C=z3yxw= z=y&YkJK+z~ro3{W&lBNKjc9+cMDc4+H=*_=(EGEEHI}SthWU?P+(lQe@K^DP43#T) z{KN#oy)E=xq0*y*ckRSBM{!W9*Nky_a;x2}>pfTH*~-NrBF_%u5lvGjwNHljyW{i0 z$455$yneAM>>ZAa|GZ5=<;G9Tjf4J`iUzN}Rfd&eV+Z8qE81WhykFd^@&?G%mL=J3 z>UQot1`EFpIyhpKpP}@}$xeEYKzwRbw*f^(V)qcB`Dj4w>3m?-eI#J(L21!3cDT&@ zmH!SIRd#Xcn0fNcaX5C6u!tePSh4*YeTub#0ZZ;jmC^^n(lu}oM-e-ms-ymt@}c49 z`X5R-onQI#kMUqDxogYQM-y=?K-dmgJul-umG0bJ&uMB)WEibMMoFv^;hUEnTrKer zf9ySRo&SFbF`n4kI4|i3!S!@Y0p6%E$1|*X=LMpq

F+<+{;YD+3PeXA;_UTrF2x z7Ny2PrxmvP@2QoEkGeyWmKz_O>PcR63uum(`}(rZ_Kr40YaqL@FAj|!Un%wSe(wa( zB`fEJ4)J;`HA?RY8I+(Vc?f4lr6lRaDcI`)c=0vK!jh{sLg zkT=RF0%?GUt&_`ejK5c9k1uC{Hwi0+{2Evm9G^qKKIOpgPsuz*OFuWEY3N<#UO`2?q_n)&$Y7=wNA~AZ+@j*dkNs^HxB6C_s{SaHg08SKlEpmbma+pZ zT65=RChMCTr74;eH?+CE0J4U>8`%mkq%Mr(dxI3ia^av0a~RvKCMJ-Bh{b~UtChdt zsfPf)!oZ^NzR3tI1W>Uk93&rgE8+K6=ih(RDb(sni-=|>bt^(5iVO;wmCRW z_$1D+Eg?|G1kyibhEkz+oRQLO&2lCx|33!+a*N9RGAHvf;x>uN-#N0Vj8tl2*gC{E z$5)F`3m$*33f?FkDFn*A;nW~o7Qmt9T7)O@bHB=cvPb`G*v!lEX$WJ7<)Sa)(Gz_v z-dUV0fEO3ZHdWGoDt`5@@HYble!nvz0a}A+VZAXxfIjC!oV>}^jkqIHb=^h#4a{`b zF*XTh)g-a{-Wlc&xf(AU(6TI?sqx)ijU9=(<*dx-RvFKHva;Dxb|J~MKy^$rCA$4p zq+|kbb6*%`m5}{OYPLB)s_G(VywJN^vU$%6e<{AXipV(I&(h>5l#oL@pWZT3fuU@} z9*eBJr~WV!nI4~FEIhq%S_Xn+`&rOE`iKXoRQ5|8;h8S6G5pG{F6vT)Lt=`a@>u__cXU|mljMHeN&GaQ4x}l%-1jLp(Gxx zaw-<94$CpDGP|T6T`Nm9ZRjAE%bwr1;MteasZf#<%k-RE@&*4R=cIXz4UIIz5qQAX zO(jeGAp}Tw4!tFtnUcscQ=-@@IwzFbW^#aU1?9HM>3R?jYpKCi(Mo=8ZhUX9?SKh! zI1^G9d{C!E-__sBr%^Ky{XH$nxr&!@`3bxu;QdbuZyvt%i|`*Md#Ppdter!ocqm_} zn{e+E6|*A_53!D>zt%yr&_TF!iI>wgSCcg-wYzZME4q~*0mtn;jxp>dUc%JcLsC>v z2}4R-{o!})z5ddVZOq+nI;R~C??vCFAP7x7WKO9MK{8hZC5`0@{mmQ>S?13WXgT_& z!uv5*(#$p8cFndzAWn-S#(y|!bB86hX3`Q6BngCpDbjXE)Iv%Aogy?~yFv7my@}F`*E@l;9be*eC z-Fu!6TH1&30UE7nE#;Q#!=t+@8eNYKEyUuTZd#w&m!7cHJxG}ouct`w$?ir3N zc;<`z6FP{*4>mFcyOJF`YP{0^iS|4Zs~J1x{f?fANd1j>X92C>QwFH>_Fto>SgFtXM@ zadurYlR5B6d}_v^!+uurM+0SD^mL>AX}T$8JoMUp2N~?LIp(kYY?z7Tx^2;jg1vC{ zvk0?#y|MiFp9PHoQCZgNW{|M+_$OW32j2L$H*(E^Z5AC`WW7$5PuX;OygsvE+MxR! z7v=+x{0>X#UZxq?Ob-o~_w0r2+RZO46^8Bjm3XdcMq&7bHoeD&A;_DPXji?GA?4Wcdc?bNgJkN?IUD(&mV9qL+m zx!s>o;pLlY2aMj{t38Dapg*#!CxbV`?7iN5yzUb`Y1_eB;9$c-&TIYm}J zLoFCbX(z18Awb}5;2PC#-wF4-uoeR(<1mo}sTh74lbIE+tI3jBj7*XF`!|)3)G%)N z8Z^nxW|sdmx?XV^1|bD;E+gWUbvft9eSoqi!{pDl=U^PZ-(J{q%bV8>*^ZP1_K0E! z^dwj8u%@A4pP7~rc48ad6HMz7FBV-woS^};6VEm@xYJ8_U;V;-_QCW}09BPOwBp<` z{sC($mB1O&v*IZK6af5lv0k!J&1G|pzQ$qn3rZGY?W>)HWckcg8(Mc>8h4)qP@G^Z50)EqO zk5H^N0|u*&AFKB3{?i=js6cddgd~*o&J~Ytv!~wdLK}tRE42MZA)?*}EK@D?K!+Zr zy^`)fEv0{<&07B!Zjv7wFM9&$CT_4FthWQ+>fP2MT)al2sOv1!7zP7(6npD0*<{S! ztY;wJ;3~?YramO%bED@8AJ|SRo}SvyH#_!qwz%phY2SHSYd7V$j-B`F(fS@pgen-I ztiL_owo&(&n`T=D(Y%Qj@RNdv20hF|Dh2u$YbJ8pv|}3An``R)GF8wurrZf*WH_Fx z@jM|4>!u!cFtl8Wy0vkxRQx*8p)={YF+&QNyt1W(D{YHA!AIn6eio49vANbfST#4~ z*{@Zq%6gUkeT3Rg?>_skiI%6ho4;UHvWYlME!f+c0zrW;1em(n`ntCGJHO59yrsdj zEkCpbR@c%rm`abKop<=BSRl*~PAgzXu9LyL_3f?>i23n?+OV$!13X2ve|O^kg*?d~ z^jh0`3471ranj!H4igpvOrWTrox(($5-ZMTPTwO*{+I}6Z#C+^mAtDL;Em=&$!%QR&{l-?eyr9i9N1CXK z{zWhGH7HPbx{gG;OjA7D-}rCq>+lyCP_8+UzGOHtBF^Ju8)Vum4+ali+`+SL zyGG8+GQ^-8`#e`fz8Fvl_o@{hYqo0qUwwN|K738p82T<;Z|^lD`N>T%j$SZ?TwGT# z)})K~+mT@bkWl)}8W6xR?*JP!c2j6X0iKPn-B)HiIRs=dRi%A!m1-WdN z-)lsR(3yn}vw44aAwo3ui69P%;wHLB$CZDj?Je{uUt|jOOj*BV+P77FQs}AnS1*ny zDwu`$D&6{8z(~}QMBvDC*@x3qfuc^>C#U<-Wm|TuaL7@f?ViQ!ZO*uJ+AhA=)z|39 za8LS<)%vI02wZokG==R5oDiVlzLgynG5=ZtPAA}-^g4F!!$OKIcshQy@M$0n9wwii z10l=E`$k!=3!0Qwc@Q06JyVl~@stXUf37Ck?>1yeBWwD?2DjVhqJz%dvTSc|8gArS zcO(w*u0Aa~EBHw?2u?O8n-e%5uCJY|{@{)Q%`f|b^Y|Nc%|z;5b=H5{7MVP^S@1Vj ze)$b{S|n%4d99@2XhqgiZ*oY~ob0LChdu)D*@VBvmU4Kr!rp-ud?F+IkVa>TFY3b7 zJi(LSn{bB@*%JB5dU+ShPMhzoO*M`pH__D}pb75+Hoy5R*#Nn0AJ&1d?V`~iN9PBZ ztZZ7e5Do(DZ3lJ%xCr5iwgdI^^L=1*w((Q&ww2?jEn*#9JY60a)uDywc9|IdG89Vh z-D|$HU^~vhol2~L`AMhP$5)MJrNg3>Y;XkmL)p5+{Z1a)9Vvg_$E==|#LEn(t5`V_ zftvd`v#R3`c9iLNqH1`f`dcAP*Q$KCcz9B5<@4Uw*O{6c_Yg3$&-YL4s%oC%ZlEdiiTBA1i= zVAq9iap-3%ZwAZ)Bm8$~n*XG7dA9pT38Ra#9+Q2TbB$K+d{`65$X^(_P@gC1I({W2 z8E{+Dh3PIur+LfuIGhEyUCB7k1`-B6U`{*{pM0Mp(b{ZYJ?OfCUJ%@mld?>s&7lLa zG4qb)y<(k}7h+#oV7wpSj*~a}1P9e6*BnY2Wml`4H{sc)+j*acBdwGpPLHTy=5@rI z<~v^B@Tx-Kev#pB%MU%masBoIFX+YFNd`k~MzGp5lzc6eU*# zp)?<9{)exX8qT9w^K#c&7xlcS;Bcy`ZIIBc7~|?rr@r5Z4f2;F9H(BM5=Reu%@@); z>}Cd+?M!rsel03zoR{mvHBx~ov4_qV`qrtdai}hzik~}Of{c>TFOluO5Ki&v+d>8X zLOtkD@irkFoprLF1H{L#p-cyc`0sP73kJLKv5kp9OXdBMT)(NzZU@8&%jY1ni@#C9|c|7McmL#Y5@dXE6;C>XCwd&hUWt`?(JaoKkwCr!5 z3p5=HRyC9XR}-f3QBmW~xGAlrj_fDt6f1 z$G!q^s-nKsp?vR9P+h(>kCX6GusB11iPg9<^u$ah=Kc};1F^ZBi9yh)1prUEAa z)z@uj5K1ii45wR#b2W+9TOs&9kP&prXDVZA`2)cf%j;Y=?H@vu+S$H=>lKlAxA~jD z`i@g$KR*&I`$Inj=F@EBa6@v5lYd3jFvGRH&6JCFqoa9Nr@5x%?Dv^y(cCm|a&H|W z3T4&`=16Y5-j{~eS>;7Ck4bLG9@i&@kf>+8FckIl(K-qg%Js~E#buXJ`dCX|3{c4) z!DQ=JrJIH6=hmT!7LIpxfLZ+2Ahf-F)OvN#m4!9Km$h(q6+6G9@|uKzHHwLjiS!*Xn|P5J|oQ zxj?7Yj7cEjYfE9Dv|R9mYV%r7?I91>sPLF9l(T6($DHa2K)sjbw!7%?4g-X|_-l#m zib4^dS31R9;}}(+p}q_I%yeP?;M<=R8!}T!O3|*42UXkZAG!&>j8Nn+D}^oA?H>Tu z=w3Pa3*eiJU!!%S2`5Q|rRis_^RCpE<8f4XWVhODkgYoNs|5TLX%RQQefad&;M1F0 zCY^rg7B62xqE=H=8uT8yT7n3)XY?$wE2$9BXGp5(!n;en%6@(7U2M~Z$=i>E-sP!gD@ z#SayZ-9&TlAWw&5k)%(R$oSVNq~IsIOpz1Dks~kiwQbA>KbKvS-*zJ^p*7bi++Is^ zrI}}LiZg%A^C)%S04`u=1Hr#fzmcZT`Y(aSBAUwl-%@rQ5pYYBlK_mBfN$Q~=}z_o zXAT!i9o@4?&2Y`X+r1yQC^nvNEDCcDN$c8L%vAR<)YX>qPR#dRyLM##JkGS8?&ZBd zL7{rbCeik&R+G=r(N4+@6nTIhbYGWu_+}HD;r4yrY8fB4X)m!wkin}?4G1^jLFY`F zBo(ZL#j8Bi17w#G{a^ngd}1wK;{sZ}^W)^=W!yIHOw{CP8D|ik_}ja1)@ymVyk1}Q zb^r<6*}xP3gzFhzA?9S+N2ZLvxj7w|g#>V!zG35f&$xYd)uhSwzyBK8EeFp%3=|!8 zwGlU+N#{WEIY;@(xpZqJ5(8%Rf+)^5M3V?6Rfe4Ay8e{eCw8%Xv^_-ftAB%R+INxF@<>K(HAk9^zRlEU@~NuI!s(oe0OQ+f}!f zVNgkl(f6-Twa*V%mia?u?lB1w0`MHEVfTH?LKdK;pg0>XrmFe)|3AI?g8)j)pMof5 z+3AE8Z4)R zSYSs1{hg9`!ys3LvRUwPm8bPr0%>|uWs{gyn6v#j6HN?>0y7{p7hwVUE0()N5ctzn zBqv%}dlmopSGa~|EMCkk>uUdMEN!n05}UYU2yuDVpi!>-R}z#!PV@&REM5QW;U|on zoC|uI7cJrkFbq6Zj1SpQducrSibIwnx~B!3uTpcQ9tA>?KbuEPhbB;wo37@j5MLba z%LLW42WKq$Ml<+u_xlYzX+F9d)YVm)+JUGn4#+BE^I%F`=|YSex<5^R%6;;Z=x-@+ z{V@#144o9P*Qg`p4)?n{M>d@Xr3s)Jw1vuFb!AMe^$zaO`AkYneu`A;7#F!6H6h~p barn%<|6{%4W#T_$V~TyXx};je0|5RHDUPqk From ebd07685c6faf6d16d1a93da7afbe09d5e13c73d Mon Sep 17 00:00:00 2001 From: PranavU-Coder Date: Thu, 5 Feb 2026 20:41:39 +0530 Subject: [PATCH 3/3] fix: corrected bot command name in !!time --- main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index fb49203..5ee253b 100644 --- a/main.py +++ b/main.py @@ -328,7 +328,7 @@ async def time(ctx, flag: str = None, *, date_str: str = None): if flag in ["-s", "-set", "--set"]: if not date_str: return await ctx.send( - "please provide a date\nusage: `!!exam -s DD-MM-YYYY`\nExample: `!!exam -s 15-04-2026`" + "please provide a date\nusage: `!!exam -s DD-MM-YYYY`\nExample: `!!time -s 15-04-2026`" ) try: @@ -342,7 +342,7 @@ async def time(ctx, flag: str = None, *, date_str: str = None): await ctx.send(message) except ValueError: await ctx.send( - "invalid date format!\nplease use: `!!exam -s DD-MM-YYYY`\nExample: `!!exam -s 15-04-2026`" + "invalid date format!\nplease use: `!!exam -s DD-MM-YYYY`\nExample: `!!time -s 15-04-2026`" ) elif flag in ["-r", "-reset", "--reset"]: