{ "cells": [ { "cell_type": "markdown", "id": "e65d0b91", "metadata": {}, "source": [ "# Calculating Gene Program (GP) Importance Scores\n", "\n", "This tutorial demonstrates how to calculate and analyze Tripso **Gene Program (GP) importance scores** from the GPLearner model. GP importance scores quantify how much each gene program contributes to a cell's identity, enabling:\n", "\n", "## What are GP Importance Scores?\n", "\n", "GP importance scores are computed using an **ablation approach**:\n", "- The model is run with each gene program individually masked/removed\n", "- We compute the cosine similarity between perturbed cell representation (output of the model with the masked GP) and the original cell representation.\n", "- The output is (1 - cosine similarity with control cell) such that higher scores = more critical for the cell representation\n", "\n", "## Prerequisites\n", "- Completed model training with GP ablation enabled (see training tutorials)\n", "- Ablation results saved in `output_global/ablation/with_gp_ablation/`" ] }, { "cell_type": "code", "execution_count": 1, "id": "13d1287a", "metadata": {}, "outputs": [], "source": [ "import scanpy as sc\n", "import anndata as ad\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns" ] }, { "cell_type": "markdown", "id": "668dbd9e", "metadata": {}, "source": [ "## 2. Load GP Importance Scores\n", "\n", "The ablation analysis generates AnnData objects where:\n", "- **Cells (observations)**: Individual cells from your dataset\n", "- **Variables (features)**: Gene programs (e.g., `GP_GATA1`, `GP_LMO2`, etc.)\n", "- **Data matrix (X)**: GP importance scores for each cell-GP.\n", "\n", "### Data Loading Options\n", "\n", "**Option 1 (Recommended for publication)**: Combine multiple training runs\n", "- Train model 3 times with different random seeds\n", "- Average GP importance scores across runs. While patterns across runs are broadly consistentt, this increaases robustness and reduces noise from stochastic training effects\n", "- (this was the approach for the original Tripso manuscript)\n", "\n", "**Option 2 (Tutorial)**: Single run for simplicity\n", "- Faster to execute\n", "- Suitable for exploratory analysis" ] }, { "cell_type": "code", "execution_count": 2, "id": "0709cfee", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/software/cellgen/team292/mm58/venvs/lightning2/lib/python3.10/site-packages/anndata/_core/anndata.py:1754: UserWarning: Observation names are not unique. To make them unique, call `.obs_names_make_unique`.\n", " utils.warn_names_duplicates(\"obs\")\n" ] }, { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 26317 × 25\n", " obs: 'length', 'AuthorCellType', 'AuthorCellType_Broad', 'cell_type', 'Sorting', 'Study', 'donor', 'sex', 'development_stage', 'age_group', 'n_counts', 'idx', 'batch_key', 'cell_type_id', 'age_group_id', 'batch_key_id'" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Load GP importance scores from ablation analysis\n", "# The ablation process masks each GP and measures reconstruction loss change\n", "\n", "# # Option 1: Load and combine all data splits\n", "# train = sc.read_h5ad('output_global/ablation/with_gp_ablation/train_set.h5ad')\n", "# val = sc.read_h5ad('output_global/ablation/with_gp_ablation/val_set.h5ad')\n", "# test = sc.read_h5ad('output_global/ablation/with_gp_ablation/test_set.h5ad')\n", "# adata = ad.concat([train, val, test])\n", "\n", "# Option 2: Load only test set for faster tutorial execution (commented out)\n", "adata = sc.read_h5ad('output_global/ablation/with_gp_ablation/test_set.h5ad')\n", "\n", "adata" ] }, { "cell_type": "markdown", "id": "09757d85", "metadata": {}, "source": [ "## 3. Case Study: Dendritic Cell Subtypes\n", "\n", "Dendritic cells (DCs) are immune cells with distinct subtypes that have different functional roles:\n", "- **pDC (plasmacytoid DC)**: Specialize in antiviral responses, produce type I interferon\n", "- **cDC1 (conventional DC type 1)**: Cross-present antigens, activate CD8+ T cells\n", "- **cDC2 (conventional DC type 2)**: Present antigens to CD4+ T cells, Th2 responses\n", "\n", "**Goal**: Identify which gene programs distinguish these functionally distinct DC subtypes.\n", "In the next steps, we will look at which **genes** drive these differences. \n", "\n", "### 3.1 Filter to Dendritic Cell Subtypes" ] }, { "cell_type": "code", "execution_count": 3, "id": "27c8d250", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "View of AnnData object with n_obs × n_vars = 1704 × 25\n", " obs: 'length', 'AuthorCellType', 'AuthorCellType_Broad', 'cell_type', 'Sorting', 'Study', 'donor', 'sex', 'development_stage', 'age_group', 'n_counts', 'idx', 'batch_key', 'cell_type_id', 'age_group_id', 'batch_key_id'" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Subset to three dendritic cell subtypes for differential analysis\n", "dc = adata[\n", " adata.obs['AuthorCellType_Broad'].isin(['pDC', # Plasmacytoid dendritic cells\n", " 'cDC', # Conventional dendritic cell\n", " ])\n", "]\n", "dc" ] }, { "cell_type": "markdown", "id": "1f0c0cf7", "metadata": {}, "source": [ "## 4. Differential GP Analysis\n", "\n", "Now we perform **differential gene program analysis** - analogous to differential gene expression (DGE), but at the gene program level.\n", "\n", "### 4.1 Rank Gene Programs by Cell Type\n", "\n", "We use Scanpy's `rank_genes_groups` function, which:\n", "- Treats GP importance scores like gene expression values\n", "- For each cell type, identifies significantly enriched/depleted GPs\n", "- Uses statistical tests (default: t-test with overestimation correction)\n", "- Returns ranked lists with log fold changes and p-values\n", "\n", "Since the data matrix contains GP importance scores (not gene expression), this identifies GPs that are differentially important across cell types." ] }, { "cell_type": "code", "execution_count": 4, "id": "e8e338e2", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/software/cellgen/team292/mm58/venvs/lightning2/lib/python3.10/site-packages/scanpy/tools/_rank_genes_groups.py:645: ImplicitModificationWarning: Trying to modify attribute `._uns` of view, initializing view as actual.\n", " adata.uns[key_added] = {}\n", "/software/cellgen/team292/mm58/venvs/lightning2/lib/python3.10/site-packages/anndata/_core/anndata.py:1754: UserWarning: Observation names are not unique. To make them unique, call `.obs_names_make_unique`.\n", " utils.warn_names_duplicates(\"obs\")\n", "/software/cellgen/team292/mm58/venvs/lightning2/lib/python3.10/site-packages/anndata/_core/anndata.py:1754: UserWarning: Observation names are not unique. To make them unique, call `.obs_names_make_unique`.\n", " utils.warn_names_duplicates(\"obs\")\n" ] } ], "source": [ "# Perform differential GP analysis across dendritic cell subtypes\n", "# This identifies which GPs are significantly more/less important in each subtype\n", "sc.tl.rank_genes_groups(\n", " dc,\n", " groupby='AuthorCellType_Broad', # Compare GP importance across cell types\n", ")" ] }, { "cell_type": "markdown", "id": "eab4d90a", "metadata": {}, "source": [ "### 4.2 Extract Results for pDC\n", "\n", "Retrieve the ranked list of GPs for plasmacytoid dendritic cells.\n", "\n", "**Interpretation**:\n", "- **Positive logfoldchanges**: GPs more important in cDC1 vs. other DC types\n", "- **Negative logfoldchanges**: GPs less important in cDC1\n", "- **pvals_adj < 0.05**: Statistically significant differences" ] }, { "cell_type": "code", "execution_count": 5, "id": "dd42e378", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namesscoreslogfoldchangespvalspvals_adj
0GP_TAL110.4506180.6810921.619845e-241.349871e-23
1GP_KLF29.9035631.0804053.133774e-221.566887e-21
2GP_GATA19.8986010.3635051.696406e-221.060254e-21
3GP_IRF18.1980270.2572204.826885e-161.723888e-15
4GP_IRF27.9185911.9706805.059151e-151.580985e-14
\n", "
" ], "text/plain": [ " names scores logfoldchanges pvals pvals_adj\n", "0 GP_TAL1 10.450618 0.681092 1.619845e-24 1.349871e-23\n", "1 GP_KLF2 9.903563 1.080405 3.133774e-22 1.566887e-21\n", "2 GP_GATA1 9.898601 0.363505 1.696406e-22 1.060254e-21\n", "3 GP_IRF1 8.198027 0.257220 4.826885e-16 1.723888e-15\n", "4 GP_IRF2 7.918591 1.970680 5.059151e-15 1.580985e-14" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get differential GP results for cDC1\n", "pdc = sc.get.rank_genes_groups_df(dc, group='pDC')\n", "\n", "# Show top GPs enriched in cDC1 (positive log fold change, significant)\n", "pdc.head()" ] }, { "cell_type": "markdown", "id": "d18b9594", "metadata": {}, "source": [ "### 4.3 Extract Results for cDC" ] }, { "cell_type": "code", "execution_count": 6, "id": "981ec57b", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namesscoreslogfoldchangespvalspvals_adj
0GP_FOXO314.2527533.7281691.554398e-413.885994e-40
3GP_ATF46.2259621.9339157.386285e-101.678701e-09
4GP_JUNB5.8412731.3429996.925215e-091.331772e-08
9GP_NFYB1.4893720.8459791.365762e-011.484524e-01
6GP_FLI14.5395430.8304376.046568e-061.007761e-05
\n", "
" ], "text/plain": [ " names scores logfoldchanges pvals pvals_adj\n", "0 GP_FOXO3 14.252753 3.728169 1.554398e-41 3.885994e-40\n", "3 GP_ATF4 6.225962 1.933915 7.386285e-10 1.678701e-09\n", "4 GP_JUNB 5.841273 1.342999 6.925215e-09 1.331772e-08\n", "9 GP_NFYB 1.489372 0.845979 1.365762e-01 1.484524e-01\n", "6 GP_FLI1 4.539543 0.830437 6.046568e-06 1.007761e-05" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get differential GP results for cDC2\n", "cdc = sc.get.rank_genes_groups_df(dc, group='cDC')\n", "\n", "# Display top results\n", "cdc.sort_values(by = 'logfoldchanges', ascending = False).head()" ] }, { "cell_type": "code", "execution_count": null, "id": "114767a5-0b5d-44e3-b614-f5a8dea167b2", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "f6004ea6-cb8b-45e9-8219-9d9ea8f13713", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "84ea68fc", "metadata": {}, "source": [ "## 5. Visualize GP Importance Distributions\n", "\n", "To better understand how GP importance varies across cell types, we create box plots showing the distribution of importance scores." ] }, { "cell_type": "code", "execution_count": 7, "id": "d0247455", "metadata": { "tags": [] }, "outputs": [], "source": [ "def make_barplot(pert_data, gp, fig_size=(5, 5), save=None):\n", " \"\"\"\n", " Create box plot showing GP importance score distribution across cell types.\n", " \n", " Parameters:\n", " -----------\n", " pert_data : AnnData\n", " Data containing GP importance scores and cell type annotations\n", " gp : str\n", " Gene program name (e.g., 'GP_GATA1')\n", " fig_size : tuple\n", " Figure dimensions (width, height)\n", " save : str, optional\n", " File path to save figure\n", " \"\"\"\n", " # Color palette (may need customization based on your cell types)\n", " colors = [\n", " 'lightcoral', # Color for second cell type\n", " 'lightblue', # Color for third cell type\n", " 'navy', # Color for fourth cell type (if applicable)\n", " ]\n", " \n", " # Extract GP importance scores and add to observations for plotting\n", " # This converts the GP column from the data matrix to a metadata column\n", " pert_data.obs[gp] = pert_data[:, pert_data.var.index == gp].X.toarray().flatten()\n", "\n", " # Create box plot\n", " plt.figure(figsize=fig_size)\n", " ax = sns.boxplot(\n", " data=pert_data.obs,\n", " y=gp, # GP importance on y-axis\n", " x=\"AuthorCellType_Broad\", # Cell types on x-axis\n", " order=pert_data.obs['AuthorCellType_Broad'].cat.categories, # Preserve categorical order\n", " palette=colors\n", " )\n", "\n", " # Formatting\n", " plt.xticks(rotation=90)\n", " plt.xlabel(\"Cell type\")\n", " plt.ylabel(f\"{gp} importance score\")\n", " plt.title(gp)\n", " plt.tight_layout(rect=[0, 0, 0.85, 1]) \n", " \n", " if save:\n", " plt.savefig(save)\n", "\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 8, "id": "dfa31a3b", "metadata": { "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_1310618/1647168921.py:29: FutureWarning: \n", "\n", "Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect.\n", "\n", " ax = sns.boxplot(\n", "/tmp/ipykernel_1310618/1647168921.py:29: UserWarning: The palette list has more values (3) than needed (2), which may not be intended.\n", " ax = sns.boxplot(\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_1310618/1647168921.py:29: FutureWarning: \n", "\n", "Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect.\n", "\n", " ax = sns.boxplot(\n", "/tmp/ipykernel_1310618/1647168921.py:29: UserWarning: The palette list has more values (3) than needed (2), which may not be intended.\n", " ax = sns.boxplot(\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZ4AAAHqCAYAAAA0zyjYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABcd0lEQVR4nO3deViUZfs38O+MAwOyCihLLiDghoiliVgu6aiVC1j+UvNRQ9I2LTUrrcztMUzNzDSXUkzLXMrQ0FREzVJCxcTEDQmTFFBANkW2ud4/fOd+GEGdwWEGZr6f4+CQua5zZs5BmHPu+74WmRBCgIiIyEjkpk6AiIgsCwsPEREZFQsPEREZFQsPEREZFQsPEREZFQsPEREZFQsPEREZFQsPEREZFQsPEREZFQsPEREZFQsPUQ2lpaVhwoQJaNWqFRo2bIiGDRuiXbt2eOONN3Dq1CkpbtasWZDJZNKXJu7DDz9EQUGBXs9Z+XEqf3l4eFSJPXz4MIYMGQJ3d3colUp4e3vjlVdeweXLl6UYIQS6d++Oxo0bIycnp8pjvPrqq7CyssLJkyeltpycHLzzzjto3bo1bGxs4OLigv79+yMmJqbK/YuLixEREYH27dvDyckJ9vb2CAoKwueff46ysjK9XjuZD4WpEyCqj2JiYjBs2DAoFAqMHDkSQUFBkMvlOHfuHLZt24YVK1YgLS0NLVq0kO6zYsUK2Nvbo6ioCHv37sW8efOwf/9+HD58GDKZTOfn7tu3L0aPHq3VZmtrq3X7iy++wFtvvYWWLVti4sSJ8PT0xNmzZ/H1119j8+bN2LVrF7p16waZTIZVq1ahY8eOmDp1KqKioqTHiI+Px+rVqzFlyhR07NgRAHD+/Hn06dMH169fR3h4ODp37oy8vDx89913GDRoEKZOnYqFCxdKj1FcXIzk5GQ8++yz8Pb2hlwux5EjRzB58mQkJCRg48aN+vzYyVwIItLLxYsXhZ2dnWjbtq24evVqlf6ysjLx+eefi8uXLwshhJg5c6YAIK5fv64V99xzzwkA4siRIzo/NwDxxhtv3Dfm999/F3K5XHTv3l3cvHmzSu7u7u7C09NT5ObmSu3vv/++ACAOHjwohBCitLRUtG/fXjRv3lwUFRVptTVs2FD88ccfWo9bXl4uhg0bJgCITZs2PfB1TJgwQQAQGRkZOr1uMi881UakpwULFuDmzZuIioqCp6dnlX6FQoE333wTzZo1u+/j9O7dG8CdU3aGNHfuXMhkMnzzzTdo2LChVp+vry8WLFiAjIwMrFq1SmqfMWMGfH198corr6C0tBSffvopTp8+jWXLlsHOzg4A8OOPP+L06dOYNm0agoODtR63QYMGWLVqFZydnTFr1qwH5ujt7Q0AyMvLe6jXSvUTCw+RnmJiYuDn51flzVdfqampAABXV1e97nf79m1kZ2drfZWUlAAAbt26hbi4OHTv3h0+Pj7V3n/YsGFQKpVa12RsbGzw5Zdf4vz583j99dcxZ84cDBkyBIMGDZJifv75ZwCocppPw8nJCaGhoTh37hwuXryo1VdaWors7Gykp6fjp59+wqJFi9CiRQv4+fnp9drJPLDwEOmhoKAAV69eRfv27av05eXlaRWD4uJirf7c3FxkZ2fj0qVLWL16Nb788ku4u7uje/fueuWwZs0aNG7cWOvr+++/BwCkpKSgvLwcQUFB97y/UqlE69atcfbsWa32fv36YcSIEVizZg0UCgWWLl2q1X/mzBk4OTlpXbe6m+Z5737sbdu2oXHjxmjevDmee+45NG3aFD///DMUCl5mtkT8XyfSg2YUmr29fZW+Xr16ISkpSbq9cOFCTJ06VbrdunVrrfiAgIBqT4c9SGhoKCZMmFDlsQCgsLAQAODg4HDfx3BwcKh2RJ2bmxsAoF27dmjatKlWX2FhoU6PC6DKYz/11FOIjY1FXl4e4uLikJSUhJs3b973sch8sfAQ6UHzxlpUVFSlb9WqVSgsLERWVhb+85//VOn/8ccf4ejoCCsrKzRt2hS+vr41yqFp06ZQqVT3zU9TgO6luiJy/PhxLF++HO3bt0dCQgK+/fZbrdfh4OCA7OzsBz5u5Tw03N3d4e7uDgAYOnQoPv74Y/Tt2xcpKSnVDgUn88ZTbUR6cHJygqenJ06fPl2lLzg4GCqVCk888US19+3RowdUKhV69uxZ46LzIH5+flAoFFrziO5WUlKC8+fPo127dlJbRUUFxo8fDy8vLxw+fBjBwcF4++23tS7+t23bFvn5+VrzgO6med7Kj12doUOHoqioCNu3b9fxlZE5YeEh0tOAAQNw8eJFHD161NSpVGFnZ4ennnoKhw4dwj///FNtzJYtW1BSUoKBAwdKbUuXLsWff/6JL774Ao6Ojli5ciVycnIwbdo0KUYTv379+moft6CgANu3b0ebNm0eOGhAc/0rPz9fr9dHZsLU47mJ6psLFy6Ihg0bioCAAJGZmVml/++//xYAxMKFC4UQ957HUxPQYR7Pr7/+KuRyuejVq5e4detWldw8PDy05vFcvnxZ2Nvbi8GDB2vFTp48WcjlcmnOTklJiWjXrp2ws7MTx44d04qtqKgQL774ogAgvv/+e6n9+vXrQq1WV8lRM48nLi5O9xdPZoPXeIj05O/vj40bN2LEiBFo3bq1tHKBEAJpaWnYuHEj5HJ5lYvzxtKjRw8sWrQIU6ZMQYcOHfDSSy/B09MT586dw1dffQW1Wo1du3ahUaNGAICJEydCCIEvvvhC63Fmz56NLVu24NVXX8Xx48dhbW2NH374AX369MGTTz6ptXLBxo0bceLECbz99tsYPny49BjffvstVq5cibCwMLRs2RKFhYXYs2cPYmNjMWjQIGkuE1kYU1c+ovrq4sWL4rXXXhN+fn7CxsZG2NraijZt2ohXX31VnDx5Uooz9hGPxqFDh0RoaKhwc3MTVlZWonnz5mLcuHHi0qVLUsxPP/0kAIhFixZV+xg//PCDACAWL14stV27dk1MmTJF+Pn5CaVSKZydnYVKpRI7duyocv9jx46J//u//xPNmzcXSqVS2NnZiccee0wsXrxYlJWV6fnqyVzIhBDCtKWPiIgsCQcXEBGRUfEaD5GJVVRU4Pr16/eNsbe3r3bSKlF9xMJDZGLp6en3XFdNY+bMmTotvklUH7DwEJmYh4cHYmNj7xvTsmVLI2VDVPs4uICIiIyKgwuIiMioeKqtFqnValy9ehUODg56bW1MRFQfCSFQWFgILy8vyOX3Pq5h4alFV69efeAulERE5iY9Pf2+K3ew8NQizdLw6enpcHR0NHE2RES1q6CgAM2aNXvgvk0sPLVIc3rN0dGRhYeILMaDLi1wcAERERkVCw8RERkVCw8RERkVCw8RERkVCw8RERkVCw8RERkVCw8RERkVCw8RERkVCw8RERkVCw8RERkVl8yhOketViM1NRUFBQVwdHSEr6/vfVe6JaL6hYWH6pSkpCRER0cjNzdXanNxcUFYWBiCgoJMmBkRGQoLD9UZSUlJiIqKQkBAAMaMGQNPT09kZGQgNjYWUVFRCA8PZ/EhMgM8f0F1glqtRnR0NAICAhAREQFvb28olUp4e3sjIiICAQEB2L59O9RqtalTJaKHxMJDdUJqaipyc3PRt2/fKtdz5HI5VCoVcnJykJqaaqIMichQWHioTigoKAAAeHp6VtuvadfEEVH9xcJDdYJmo7yMjIxq+zXt3FCPqP5j4aE6wdfXFy4uLoiNja1yHUetVmPfvn1wdXWFr6+viTIkIkNh4aE6QS6XIywsDMnJyVizZg3S0tJw+/ZtpKWlYc2aNUhOTkZoaCjn8xCZAZkQQpg6CXNVUFAAJycn5Ofn8xSRjqqbx+Pq6orQ0FAOpSaq43R9z+M8HqpTgoKCEBgYyJULiMwYCw/VOXK5HP7+/qZOg4hqCT9GEhGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUbHwEBGRUdWJwrN8+XJ4e3vDxsYGwcHBOHr06H3jt27dijZt2sDGxgaBgYHYtWuXVr8QAh999BE8PT1ha2sLlUqFlJQUrZjc3FyMHDkSjo6OcHZ2RkREBIqKirRi9uzZg65du8LBwQGNGzfG888/j0uXLhnkNRMRWSqTF57NmzdjypQpmDlzJk6cOIGgoCD0798f165dqzb+yJEjGDFiBCIiIvDnn38iLCwMYWFhOH36tBSzYMECLF26FCtXrkRCQgLs7OzQv39/3L59W4oZOXIkkpOTERsbi5iYGBw6dAjjx4+X+tPS0hAaGorevXvj5MmT2LNnD7Kzs/Hcc8/V3g+DiMgSCBPr0qWLeOONN6TbFRUVwsvLS0RGRlYb/8ILL4gBAwZotQUHB4tXXnlFCCGEWq0WHh4eYuHChVJ/Xl6eUCqV4vvvvxdCCHHmzBkBQBw7dkyK+eWXX4RMJhNXrlwRQgixdetWoVAoREVFhRSzY8cOIZPJRGlpqU6vLT8/XwAQ+fn5OsUTEdVnur7nmfSIp7S0FImJiVCpVFKbXC6HSqVCfHx8tfeJj4/XigeA/v37S/FpaWnIzMzUinFyckJwcLAUEx8fD2dnZ3Tu3FmKUalUkMvlSEhIAAB06tQJcrkcUVFRqKioQH5+PjZs2ACVSgUrKyvD/ACIiCyQSQtPdnY2Kioq4O7urtXu7u6OzMzMau+TmZl533jNvw+KadKkiVa/QqGAi4uLFOPj44O9e/fi/fffh1KphLOzM/79919s2bLlnq+npKQEBQUFWl9ERKTN5Nd46qrMzEyMGzcOY8aMwbFjx/Drr7/C2toaQ4cOhRCi2vtERkbCyclJ+mrWrJmRsyYiqvtMWnjc3NzQoEEDZGVlabVnZWXBw8Oj2vt4eHjcN17z74Ni7h68UF5ejtzcXClm+fLlcHJywoIFC/Doo4+iR48e+PbbbxEXFyedjrvb9OnTkZ+fL32lp6fr8mMgIrIoJi081tbW6NSpE+Li4qQ2tVqNuLg4hISEVHufkJAQrXgAiI2NleJ9fHzg4eGhFVNQUICEhAQpJiQkBHl5eUhMTJRi9u/fD7VajeDgYADArVu3IJdr/3gaNGgg5VgdpVIJR0dHrS8iIrqLccY63NumTZuEUqkU69atE2fOnBHjx48Xzs7OIjMzUwghxKhRo8S0adOk+MOHDwuFQiEWLVokzp49K2bOnCmsrKzEX3/9JcXMnz9fODs7i+3bt4tTp06J0NBQ4ePjI4qLi6WYp59+Wjz66KMiISFB/P7778Lf31+MGDFC6o+LixMymUzMnj1bXLhwQSQmJor+/fuLFi1aiFu3bun02jiqjYgsia7veSYvPEII8cUXX4jmzZsLa2tr0aVLF/HHH39IfT179hRjxozRit+yZYto1aqVsLa2FgEBAWLnzp1a/Wq1WsyYMUO4u7sLpVIp+vTpI86fP68Vk5OTI0aMGCHs7e2Fo6OjCA8PF4WFhVox33//vXj00UeFnZ2daNy4sRg8eLA4e/aszq+LhYeILImu73kyIe5xpZweWkFBAZycnJCfn8/TbkRk9nR9z+OoNiIiMioWHiIiMioWHiIiMioWHiIiMioWHiIiMioWHiIiMioWHiIiMiqFqRMguptarUZqaioKCgrg6OgIX1/fKssXEVH9xcJDdUpSUhKio6ORm5srtbm4uCAsLAxBQUEmzIyIDIWFh+qMpKQkREVFISAgAGPGjIGnpycyMjIQGxuLqKgohIeHs/gQmQGev6A6Qa1WIzo6GgEBAYiIiIC3tzeUSiW8vb0RERGBgIAAbN++/Z4rgxNR/cHCQ3VCamoqcnNz0bdv3yrXczTboefk5CA1NdVEGRKRobDwUJ2g2Sbc09Oz2n5NO7cTJ6r/WHioTtCsZJuRkVFtv6adq3wT1X8sPFQn+Pr6wsXFBbGxsVWu46jVauzbtw+urq7w9fU1UYZEZCgsPFQnyOVyhIWFITk5GWvWrEFaWhpu376NtLQ0rFmzBsnJyQgNDeV8HiIzwI3gahE3gtNfdfN4XF1dERoayqHURHWcru95nMdDdUpQUBACAgLw22+/IScnB66urujevTsUCv6qEpkL/jVTnVLdEc+hQ4e4cgGRGWHhoTqDKxcQWQZeqaU6gSsXEFkOFh6qE7hyAZHlYOGhOoErFxBZDhYeqhO4cgGR5WDhoTqBKxcQWQ4WHqoTuHIBkeXgygW1iCsX6I8rFxDVX1y5gOqloKAgBAYGIjU1FQUFBXB0dISvry+PdIjMCAsP1TlyuRz+/v6mToOIagkLD9U5arWaRzxEZoyFh+qU6q7xuLi4cK02IjNS48JTWlqKtLQ0+Pr6cuVgMgiu1UZkGfQ+f3Hr1i1ERESgYcOGCAgIwOXLlwEAEydOxPz58w2eIFkGrtVGZDn0LjzTp09HUlISDh48CBsbG6ldpVJh8+bNBk2OLAfXaiOyHHqfI4uOjsbmzZvRtWtXyGQyqT0gIIBvClRjXKuNyHLofcRz/fp1NGnSpEr7zZs3tQoRkT64VhuR5dC78HTu3Bk7d+6UbmuKzddff42QkBDDZUYWhWu1EVkOvU+1ffzxx3jmmWdw5swZlJeX4/PPP8eZM2dw5MgR/Prrr7WRI1kAzVptUVFRWLNmDVQqlTSqbd++fUhOTkZ4eDjn8xCZgRqt1fb3338jMjISSUlJKCoqwmOPPYb33nsPgYGBtZFjvcW12vTHtdqI6i9d3/P0KjxlZWV45ZVXMGPGDPj4+BgkUXPGwlMzXLmAqH6qlcIDAE5OTjh58iQLjw5YeIjIkuj6nqf3x8iwsDBER0c/TG5ERGTB9B5c4O/vjzlz5uDw4cPo1KkT7OzstPrffPNNgyVHRETmR+9Tbfc7xSaTyfD3338/dFLmgqfaiMiS1NpGcGlpaQ+VGBERWbaHGiokhAB3ziYiIn3UqPCsX78egYGBsLW1ha2tLTp06IANGzYYOjciIjJDep9qW7x4MWbMmIEJEybgiSeeAAD8/vvvePXVV5GdnY3JkycbPEkiIjIfNRpcMHv2bIwePVqr/ZtvvsGsWbN4DagSDi4gIktSa/N4MjIy0K1btyrt3bp1u+fKwkRERBp6Fx4/Pz9s2bKlSvvmzZvh7+9vkKSIiMh86X2NZ/bs2Rg2bBgOHTokXeM5fPgw4uLiqi1IRERElel9xPP8888jISEBbm5uiI6ORnR0NNzc3HD06FEMGTKkNnIkIiIzUqNtEUg3HFxARJak1lYu2LVrFxo0aID+/ftrte/ZswdqtRrPPPOM/tkSVcJtEYjMm96FZ9q0aZg/f36VdiEEpk2bxsJDD6W6jeBcXFwQFhbGjeCIzITehSclJQXt2rWr0t6mTRtcvHjRIEmRZUpKSkJUVBQCAgIwZswYaevr2NhYREVFITw8nMWHyAzoff7Cycmp2hWoL168WGWLBCJdqdVqREdHIyAgABEREfD29oZSqYS3tzciIiIQEBCA7du3Q61WmzpVInpIehee0NBQTJo0CampqVLbxYsX8fbbb2Pw4MEGTY4sR2pqKnJzc9G3b98q13PkcjlUKhVycnK0fu+IqH7Su/AsWLAAdnZ2aNOmDXx8fODj44O2bdvC1dUVixYtqo0cyQIUFBQAADw9PaFWq5GSkoLExESkpKRArVbD09NTK46I6i+9r/E4OTnhyJEjiI2NRVJSkrQ6dY8ePWojP7IQmqGXhw4dwpEjR6oMLtAs08Rh6UT1n96FB7iz02i/fv3Qr18/AEBeXp4hcyIL5OvrC3t7e8TExFQZXLB3717ExMTA3t4evr6+pk6ViB6S3qfaPvnkE2zevFm6/cILL8DV1RWPPPIIkpKSDJocWS7NJoOc30xkfvQuPCtXrkSzZs0AALGxsYiNjcUvv/yCZ555Bu+8847BEyTLkJqaiqKiIgwcOBAZGRlYsmQJ3nvvPSxZsgSZmZkYOHAgioqKOLiAyAzofaotMzNTKjwxMTF44YUX0K9fP3h7eyM4ONjgCZJl0Awa6NGjB/r06VNl5YLS0lLExMRwcAGRGdD7iKdRo0ZIT08HAOzevRsqlQrAnVMjFRUVhs2OLIZm0EBGRgbkcjn8/f3RqVMn+Pv7Qy6XS3s9cXABUf2nd+F57rnn8OKLL6Jv377IycmRlsj5888/4efnZ/AEyTL4+vrCxcUFsbGxVSaJqtVq7Nu3D66urhxcQGQG9C48n332GSZMmIB27dohNjYW9vb2AO58Un399ddrlMTy5cvh7e0NGxsbBAcH4+jRo/eN37p1K9q0aQMbGxsEBgZi165dWv1CCHz00Ufw9PSEra0tVCoVUlJStGJyc3MxcuRIODo6wtnZGRERESgqKqryOIsWLUKrVq2gVCrxyCOPYN68eTV6jXR/crkcYWFhSE5Oxpo1a5CWlobbt28jLS0Na9asQXJyMkJDQ7lYKJEZMPm2CJs3b8bo0aOxcuVKBAcHY8mSJdi6dSvOnz+PJk2aVIk/cuQIevTogcjISAwcOBAbN27EJ598ghMnTqB9+/YA7oy8i4yMxDfffAMfHx/MmDEDf/31F86cOQMbGxsAwDPPPIOMjAysWrUKZWVlCA8Px+OPP46NGzdKz/Xmm29i7969WLBgAQIDA5GbmyvNrtcFt0XQX3WLhLq6uiI0NJTrtBHVcTq/5wkT69Kli3jjjTek2xUVFcLLy0tERkZWG//CCy+IAQMGaLUFBweLV155RQghhFqtFh4eHmLhwoVSf15enlAqleL7778XQghx5swZAUAcO3ZMivnll1+ETCYTV65ckWIUCoU4d+5cjV9bfn6+ACDy8/Nr/BiWqKKiQly4cEEcP35cXLhwQVRUVJg6JSLSga7veSY9b1FaWorExERpgALwv3W54uPjq71PfHy8VjwA9O/fX4pPS0tDZmamVoyTkxOCg4OlmPj4eDg7O6Nz585SjEqlglwuR0JCAgDg559/RsuWLRETEwMfHx94e3vj5Zdf1vokTrWjusEFRGQ+TPoXnZ2djYqKCri7u2u1u7u7IzMzs9r7ZGZm3jde8++DYu4+jadQKODi4iLF/P333/jnn3+wdetWrF+/HuvWrUNiYiKGDh16z9dTUlKCgoICrS8iItJWoyVzLIFarUZJSQnWr1+PVq1aAQDWrFmDTp064fz582jdunWV+0RGRmL27NnGTpWIqF6p0RFPXl4evv76a0yfPl069XTixAlcuXJFr8dxc3NDgwYNkJWVpdWelZUFDw+Pau/j4eFx33jNvw+KuXbtmlZ/eXk5cnNzpRhPT08oFAqp6ABA27ZtAQCXL1+uNrfp06cjPz9f+tLMdyL9VLc6NRGZD72PeE6dOgWVSgUnJydcunQJ48aNg4uLC7Zt24bLly9j/fr1Oj+WtbU1OnXqhLi4OISFhQG486YTFxeHCRMmVHufkJAQxMXFYdKkSVJbbGwsQkJCAAA+Pj7w8PBAXFwcOnbsCODOSIuEhAS89tpr0mPk5eUhMTERnTp1AgDs378farVaWn3hiSeeQHl5OVJTU6W5IxcuXAAAtGjRotrclEollEqlzq+fquLW10QWQN9RC3369BHvvPOOEEIIe3t7kZqaKoQQ4vDhw6JFixZ6j4LYtGmTUCqVYt26deLMmTNi/PjxwtnZWWRmZgohhBg1apSYNm2aFH/48GGhUCjEokWLxNmzZ8XMmTOFlZWV+Ouvv6SY+fPnC2dnZ7F9+3Zx6tQpERoaKnx8fERxcbEU8/TTT4tHH31UJCQkiN9//134+/uLESNGSP0VFRXiscceEz169BAnTpwQx48fF8HBwaJv3746vzaOatPPyZMnxVtvvSVWr14t0tLSxO3bt0VaWppYvXq1eOutt8TJkydNnSIR3Yeu73l6Fx5HR0dx8eJFIYR24bl06ZJQKpU1SFWIL774QjRv3lxYW1uLLl26iD/++EPq69mzpxgzZoxW/JYtW0SrVq2EtbW1CAgIEDt37tTqV6vVYsaMGcLd3V0olUrRp08fcf78ea2YnJwcMWLECGFvby8cHR1FeHi4KCws1Iq5cuWKeO6554S9vb1wd3cXL730ksjJydH5dbHw6K6iokLMmjVLrF69usrw6YqKCrF69Woxe/ZsDq0mqsN0fc/TewJpkyZNsGfPHjz66KNwcHBAUlISWrZsidjYWIwdO5bXNSrhBFLdpaSkYNmyZZg8eTK8vb2r9KelpWHJkiWYMGEC/P39jZ8gET2Qru95eg8uGDx4MObMmYOysjIAdzaFu3z5Mt577z08//zzNc+YLFrlra+rw62vicyH3oXn008/RVFREZo0aYLi4mL07NkTfn5+cHBw4DpmVGOVV6euDlenJjIfeo9qc3JyQmxsLA4fPoykpCQUFRXhscceq7KaAJE+Kq9OHR4ejrS0NGk/Hh8fH65OTWRGTL5IqDnjNR79JCUlYe3atbCyspJO5QKQbo8dO5ZDqonqsFq7xvPmm29i6dKlVdqXLVumNbeGiIioOnqfavvxxx+xY8eOKu3dunXD/PnzsWTJEkPkRRZGrVYjOjoa7du3r/ZUW1RUFLZv347AwEAuGkpUz+n9F5yTkwMnJ6cq7Y6OjsjOzjZIUmR5UlNTpb2OFAqF1urUCoUCKpUKOTk5SE1NNXWqRPSQ9C48fn5+2L17d5X2X375BS1btjRIUmR5OJyayHLofaptypQpmDBhAq5fv47evXsDAOLi4vDpp5/yNBvVWOXh1NVNIOVwaiLzoXfhGTt2LEpKSjBv3jzMnTsXAODt7Y0VK1Zg9OjRBk+QLEPl4dQRERFa13HUajWHUxOZkYcaTn39+nXY2trC3t7ekDmZDQ6n1k9SUhKioqIQEBAAlUoFT09PZGRkYN++fUhOTkZ4eDiHUxPVYbq+53EeTy1i4dFfddsiuLq6IjQ0lEWHqI7T9T1P71NtWVlZmDp1KuLi4nDt2jXcXbcqKir0z5bo/wsKCkJgYCBSU1Ol4dS+vr4cQk1kRvQuPC+99BIuX76MGTNmwNPTEzKZrDbyIgsml8u5AjWRGdO78Pz+++/47bffpN09iQxNrVbziIfIjOldeJo1a1bl9BqRoXDrayLzp/fHyCVLlmDatGm4dOlSLaRDlkwzqs3LywuTJ0/GggULMHnyZHh5eSEqKgpJSUmmTpGIDEDvUW2NGjXCrVu3UF5ejoYNG8LKykqrv/InVUvHUW26U6vVmDt3Lry8vKqdx7NmzRpkZGTgww8/5Gk3ojqq1ka1cXUCqg2atdrGjBlTpbDI5XKoVCosWbIEqampHHhAVM/pXXjGjBlTG3mQheNabUSWQ+/CU9nt27dRWlqq1cZTSlQTXKuNyHLofbL85s2bmDBhApo0aQI7Ozs0atRI64uoJiqv1VZeXo6UlBQkJiYiJSUF5eXlXKuNyIzofcTz7rvv4sCBA1ixYgVGjRqF5cuX48qVK1i1ahXmz59fGzmSBZDL5QgLC8PatWsxbdq0e259zYEFRPWf3oXn559/xvr169GrVy+Eh4eje/fu8PPzQ4sWLfDdd99h5MiRtZEnERGZCb0LT25urrThm6OjozR8+sknn8Rrr71m2OzIYnDrayLLofdfcMuWLZGWlgYAaNOmDbZs2QLgzpGQs7OzQZMjy1F56+t7Dafm1tdE5kHvI57w8HAkJSWhZ8+emDZtGgYNGoRly5ahrKwMixcvro0cyQJohklnZ2fjm2++qbJkzoABA7TiiKj+0rvwTJ48WfpepVLh3LlzSExMhJ+fHzp06GDQ5MhyaIZJb9iwAe3bt8eYMWOkjeBiY2OxYcMGrTgiqr/0PtW2fv16lJSUSLdbtGiB5557Dm3atMH69esNmhxZDh8fH8jlcjg4OCA8PBze3t5QKpXw9vZGeHg4HBwcIJfL4ePjY+pUiegh6V14wsPDkZ+fX6W9sLAQ4eHhBkmKLE9aWhrUajUKCwsRFRWFtLQ03L59G2lpaYiKikJhYSHUarV0fZGI6i+9T7UJIard/O3ff/+Fk5OTQZIiy6O5djNq1Cjs3LlTa01AV1dXjBo1Chs2bOA1HiIzoHPhefTRRyGTySCTydCnTx8oFP+7a0VFBdLS0vD000/XSpJk/jTXbtzc3DBjxowqG8H9888/WnFEVH/pXHjCwsIAACdPnkT//v1hb28v9VlbW8Pb2xvPP/+8wRMky1B5yZyIiAitFajVajWXzCEyIzoXnpkzZ6KiogLe3t7o16/fPVcRJqoJzZI5UVFRWLNmDVQqlTSqbd++fUhOTkZ4eDgnjxKZAb03grOxscHZs2c5ukgH3AhOf9z6mqj+0vU9T++Pj+3bt8fff//9UMkR3c/dn4X0/GxERHWc3kc8u3fvxvTp0zF37lx06tQJdnZ2Wv38ZP8/POLRT1JSEqKiohAQEIC+fftqTSDVnGrjUQ9R3aXre57ehafyOfbKw6o1w6wrKipqkK55YuHRnVqtxty5c+Hl5YUxY8bg8OHDyMnJgaurK5544gl88803yMjIwIcffsjrPER1lK7veXrP4zlw4MBDJUZUHc0ioT4+PnjvvfegVqulvh07duDRRx+VFgmtPOKNiOofvQtPz549ayMPsnCaiaGJiYlwcHBA586d4erqipycHBw/fhyJiYlacURUf+ldeAAgLy8Pa9aswdmzZwEAAQEBGDt2LFcuoBpr2LAhgDtzwho0aKB1ZO3s7Axra2uUlpZKcURUf+l9svz48ePw9fXFZ599htzcXOTm5mLx4sXw9fXFiRMnaiNHsgCZmZkAgNLSUjzyyCOYPHkyFixYgMmTJ+ORRx5BaWmpVhwR1V812hZh8ODB+Oqrr6Rlc8rLy/Hyyy9j0qRJOHTokMGTJPOXnZ2tdVsIIX3dL46I6h+9C8/x48e1ig4AKBQKvPvuu+jcubNBkyPLoSkwHTp0QHp6utYioS4uLggMDMRff/3FOT1EZkDvU22Ojo64fPlylfb09HQ4ODgYJCmyPC1atAAAXLhwoUpxUavVSElJ0YojovpL7yOeYcOGISIiAosWLUK3bt0AAIcPH8Y777yDESNGGDxBsgwuLi4AgNu3b6OsrAx9+vRB165d8ccff+DgwYPS/DBNHBHVX3oXnkWLFkEmk2H06NEoLy8HAFhZWeG1117D/PnzDZ4gWQbNDqQNGjRARUUF4uLiEBcXB+DOpGUrKytUVFRwjUAiM6B34bG2tsbnn3+OyMhIpKamArizpD2HudLD0OxAqlar0bZtW1hZWaG4uBi2trYoKyuThu6npaVxAilRPVejeTzAnXkXzs7O0vdED0MzMbRnz5747bfftFYukMvl6NmzJ3799VdOICUyA3oXnvLycsyePRtLly5FUVERAMDe3h4TJ07EzJkzYWVlZfAkyfxp1nX69ddfERAQIB31aI52fv31V604Iqq/9C48EydOxLZt27BgwQKEhIQAAOLj4zFr1izk5ORgxYoVBk+SzJ/mGo+dnR3Gjh2rNVw/JCQEs2bNws2bN3mNh8gM6F14Nm7ciE2bNuGZZ56R2jp06IBmzZphxIgRLDxUI5prPIWFhYiKiqqyA2lhYaEUx2s8RPWb3oVHqVTC29u7SruPjw+sra0NkRNZIM21m1GjRiEmJqbKBNJRo0Zhw4YNvMZDZAb0nkA6YcIEzJ07FyUlJVJbSUkJ5s2bhwkTJhg0ObIcmms3N27c0NrnSePGjRtacURUf+l9xPPnn38iLi4OTZs2lXaDTEpKQmlpKfr06YPnnntOit22bZvhMiWz5uvrC3t7e8TExKBt27Zo3749ysrKYGVlhevXryMmJgb29vbw9fU1dapE9JD0LjzOzs54/vnntdqaNWtmsISIzp49K83bISLzo3fhiYqKqo08yMKlpqZKw/NlMpnWem2a20VFRdyBlMgM1HgCKZEhaa7h2NvbY+bMmfjnn39QUFAAR0dHtGjRArNnz0ZRUZEUR0T1l96DC3JycvDGG2+gXbt2cHNzg4uLi9YXUU1cunQJANC1a1dYW1vD398fnTp1gr+/P6ytrdGlSxetOCKqv/Q+4hk1ahQuXryIiIgIuLu7VzsCiaim0tPToVarIZf/7zORWq3Gv//+a8KsiMiQ9C48v/32G37//XdpRBuRITRu3BgAcP78eaxZs6bKBNILFy5oxRFR/aV34WnTpg2Ki4trIxeyYN27d8eOHTtgbW2NK1euaE0gbdSoEWxsbFBaWoru3bubLkkiMgi9r/F8+eWX+OCDD/Drr78iJycHBQUFWl9ENaFQKNCrVy/cvn0b5eXl6NWrF4YOHYpevXqhvLwct2/fRq9evbTWcCOi+qlG83gKCgrQu3dvrXYhBGQymbRTJJG+QkNDAQAHDhzAwYMHpXaZTIbevXtL/URUv+ldeEaOHAkrKyts3LiRgwvI4Ly9vdGoUSPk5uZKbY0aNap2fUAiqp/0LjynT5/Gn3/+idatW9dGPmTBkpKSEBUVhYCAAIwZM0YaXBAbG4uoqCiEh4dzUAuRGdD7Gk/nzp2Rnp5eG7mQBVOr1YiOjkZAQAAiIiLg7e0trYQeERGBgIAAbN++XWtnUiKqn/QuPBMnTsRbb72FdevWITExEadOndL6qonly5fD29sbNjY2CA4OxtGjR+8bv3XrVrRp0wY2NjYIDAzErl27tPqFEPjoo4/g6ekJW1tbqFQqpKSkaMXk5uZi5MiRcHR0hLOzMyIiIqQlW+528eJFODg4SFt9k+GlpqYiNzcXffv21ZrDA9zZ+lqlUiEnJwepqakmypCIDEboSSaTVfmSy+XSv/ratGmTsLa2FmvXrhXJycli3LhxwtnZWWRlZVUbf/jwYdGgQQOxYMECcebMGfHhhx8KKysr8ddff0kx8+fPF05OTiI6OlokJSWJwYMHCx8fH1FcXCzFPP300yIoKEj88ccf4rfffhN+fn5ixIgRVZ6vtLRUdO7cWTzzzDPCyclJr9eWn58vAIj8/Hy97meJjh8/Lt58801x+/ZtUVFRIS5cuCCOHz8uLly4ICoqKkRxcbF48803xfHjx02dKhHdg67veTIhKq3GqIN//vnnvv0tWrTQq/AFBwfj8ccfx7JlywDcOeXSrFkzTJw4EdOmTasSP2zYMNy8eRMxMTFSW9euXdGxY0esXLkSQgh4eXnh7bffxtSpUwEA+fn5cHd3x7p16zB8+HCcPXsW7dq1w7Fjx9C5c2cAwO7du/Hss8/i33//hZeXl/TY7733Hq5evYo+ffpg0qRJyMvL0/m1FRQUwMnJCfn5+dxH5gFSUlKwbNkyDBw4EEeOHNEaXODi4oJu3bohJiYGEyZM4CKhRHWUru95eg8u0Lew3E9paSkSExMxffp0qU1zWiU+Pr7a+8THx2PKlClabf3790d0dDSAO1sjZ2ZmQqVSSf1OTk4IDg5GfHw8hg8fjvj4eDg7O0tFBwBUKhXkcjkSEhIwZMgQAMD+/fuxdetWnDx5knsL1bLK+/HcPbhg79693I+HyIzoVHh27NiBZ555BlZWVtixY8d9YwcPHqzzk2dnZ6OiogLu7u5a7e7u7jh37ly198nMzKw2PjMzU+rXtN0vpkmTJlr9CoUCLi4uUkxOTg5eeuklfPvttzofrZSUlGjtzMoJtTUnhJC+iMi86FR4wsLCpDfrsLCwe8aZ0wTScePG4cUXX0SPHj10vk9kZCRmz55di1mZL81+PJpTbZWXzHF1dcXAgQMRExPD/XiIzIBOhafyEFZDDmd1c3NDgwYNkJWVpdWelZUFDw+Pau/j4eFx33jNv1lZWfD09NSK6dixoxRz7do1rccoLy9Hbm6udP/9+/djx44dWLRoEYA7n8DVajUUCgVWr16NsWPHVslt+vTpWqcBCwoKuDurjjRHhz169ECfPn2Qmpoq7cfj6+uL0tJSxMTE8CiSyAzoPZzakKytrdGpUyfExcVJbWq1GnFxcQgJCan2PiEhIVrxABAbGyvF+/j4wMPDQyumoKAACQkJUkxISAjy8vKQmJgoxezfvx9qtRrBwcEA7lxLOnnypPQ1Z84cODg44OTJk9I1oLsplUo4OjpqfZFuND+rjIyMavs17fyZEtV/Jl9xccqUKRgzZgw6d+6MLl26YMmSJbh58ybCw8MBAKNHj8YjjzyCyMhIAMBbb72Fnj174tNPP8WAAQOwadMmHD9+HKtXrwZw53TfpEmT8N///hf+/v7w8fHBjBkz4OXlJZ0mbNu2LZ5++mmMGzcOK1euRFlZGSZMmIDhw4dLI9ratm2rlefx48chl8vRvn17I/1kLIuvry9cXFzwww8/4ObNm1VGtdnZ2cHV1ZWDC4jMgMkLz7Bhw3D9+nV89NFHyMzMRMeOHbF7925pcMDly5e1JhR269YNGzduxIcffoj3338f/v7+iI6O1ioI7777Lm7evInx48cjLy8PTz75JHbv3g0bGxsp5rvvvsOECRPQp08fyOVyPP/881i6dKnxXjhpkcvl6NixI/bv3w8HBwcMGzYMAQEBSE5Oxq5du5Ceno7evXtXmVxKRPWP3vN4SHecx6M7tVqNuXPnws7ODkVFRbhx44bUpzniuXXrFj788EMWH6I6qtbm8RDVBs2SOWPGjEHz5s2rDC74559/sGTJEo5qIzIDeheeiooKNGjQQLqdkJCAkpIShISEwMrKyqDJkeXQjFbz9PSEXC6vUlw0IxQ5qo2o/tP5nEVGRgaefPJJKJVK9OzZEzdu3MDAgQMREhKCXr16oX379vcckUT0IBzVRmQ5dC487733HoQQ+Omnn+Dp6YmBAweioKAA6enpuHTpEho3box58+bVZq5kxjSj2mJjY6vMFVOr1di3bx9HtRGZCZ1Pte3btw/btm1D165d8cQTT8DNzQ2xsbF45JFHAABz5szBuHHjai1RMm9yuRxhYWGIiorCmjVroFKppLXa9u3bh+TkZISHh3NgAZEZ0HlUm62tLS5cuCDNxLe3t8fJkyfh5+cH4M6w5zZt2uDWrVu1l209w1Ft+ktKSkJ0dLTWPB5XV1eEhoZy91GiOs7go9qaNGmCjIwMqfBMmDABLi4uUv+NGzdgZ2f3ECkTAUFBQQgMDKwyqo1HOkTmQ+e/5o4dO2ptVTB//nytwvP777+jQ4cOhs2OiIjMjs5HPNu3b79v/+OPP46ePXs+dEJk2ao71ebi4oKwsDCeaiMyE1y5oBbxGo9+kpKSsHbt2nv2jx07lsWHqA6rtZULtm7diu+//x4XLlwAALRq1Qovvvgihg4dWvNsyeKp1Wps3LgRwJ2BKwMHDpTWaouJiUFRURE2btyIwMBAXu8hqud0/gtWq9UYNmwYhg0bhjNnzsDPzw9+fn5ITk7GsGHDMHz4cO4WSTV24cIF3L59Gw0bNsTMmTPh5uaGlJQUuLm5YebMmWjYsCFu374tfeAhovpL5yOezz//HPv27cOOHTswcOBArb4dO3YgPDwcn3/+OSZNmmToHMkCHDt2DADQoUMHREZGVrnGExgYiISEBBw7dgxt2rQxVZpEZAA6F56oqCgsXLiwStEBgMGDB2PBggUsPFRjJSUlAIA//vgD7du3x5gxY6QJpLGxsUhISNCKI6L6S+dTbSkpKVCpVPfsV6lUSElJMUhSZHl8fHwA3NnFNTw8HN7e3lAqlfD29kZ4eDiUSqVWHBHVXzof8dja2iIvLw/Nmzevtr+goEBrozUifWiWXiopKcGaNWvQtm1bWFtbo7S0FGfPnpWOdDRxRFR/6Vx4QkJCsGLFCqxYsaLa/uXLlyMkJMRgiZFluXnzpvT9mTNncObMmQfGEVH9pHPh+eCDD9CrVy/k5ORg6tSpaNOmDYQQOHv2LD799FNs374dBw4cqM1cyYzpOs+J86GI6j+dC0+3bt2wefNmjB8/Hj/++KNWX6NGjfD999/jiSeeMHiCZBl8fHwgl8thZ2eH999/HzExMcjOzoabmxsGDhyIjz/+GDdv3uQ1HiIzoPfKBbdu3cKePXukgQStWrVCv3790LBhQ5SVlXEX0kq4coHuUlJSsGzZMgCAlZUVysrKpL7KtydMmMCtr4nqKIOvXDBq1CgsX74cjo6OGDJkSJX+48eP46WXXsLp06drljFZNF23tObW10T1n87Dqc+cOYN27dphz549Wu1lZWWYPn06unXrhieffNLgCZJlcHBwAHBn+427t9ews7NDkyZNtOKIqP7SufAkJCRg7NixGDRoEF555RUUFRXh+PHj6NixIzZu3IiYmBisXLmyNnMlM6Y543vt2rUqI9du3ryJa9euacURUf2lc+FRKBSYM2cOjhw5gsOHD6NVq1bo1q0bunbtir/++gv9+vWrzTzJzFU+hWZjY4Nhw4Zhzpw5GDZsmNb8MJ5qI6r/9F6d2sbGBlZWVsjPz4e1tTWeeuopXjinh1ZYWAjgzghJANi8ebPU5+LigkaNGuHGjRtSHBHVXzoXHiEE5s+fj9mzZ2PEiBE4cOAANm7ciNdeew3btm3DqlWr0Lhx49rMlczYrVu3AABOTk6YOHEi0tLSpK2vfXx8sHTpUty4cUOKI6L6S+dTbV27dsUXX3yBrVu3IioqCs7Oznj99deRlJSE7OxstGvXTutTKpE+ZDIZAODSpUuIioqCQqFAQEAAFAoFoqKi8M8//2jFEVH9pfMRj4+PD3755Re4uLhotbds2RK//vorlixZgoiICAwbNszgSZL58/f3x969e9GkSROkp6djyZIlUp+zszOaNGmCa9eucQ4PkRnQufBs2rRJ+j4vLw8XL14EAPj5+cHZ2RmTJ0+udssEIl34+fnB3t5eGr1WWV5eHoA7O5P6+fkZOTMiMjS99hC+dOkSBgwYADc3NwQHByM4OFha0uSff/7hp1GqMblcDm9v7/vGeHt7c9trIjOg8xFPeno6unbtCisrK8ydOxdt27YFcGdi6YoVK9C1a1ccO3YMTZs2rbVkyXyVl5cjOTkZwL2XzElOTkZ5eTkUCr0HYxJRHaLzWm0RERG4ePEi9uzZU2XfneLiYjz99NPw9/fH119/XSuJ1kdcq013+/fvx/bt2+Hl5YW33367yqi2Tz/9FFevXkVoaCh69+5t6nSJqBq6vufpfN5i9+7dmDdvXrWbvdna2mLu3LnYtWtXzbIli/f3338DAAYMGACFQgF/f3906tQJ/v7+UCgUePbZZ7XiiKj+0rnwZGdn3/ccfMuWLZGbm2uInMgCaba2vtfvkKZdE0dE9ZfOhcfT0/Oeu0ICwOnTp+Hh4WGQpMjyPP744wCAX375BaWlpUhJSUFiYiJSUlJQWlqK3bt3a8URUf2l81XasLAwTJ06FXFxcVVWKLh27Rree+89hIWFGTo/shCtWrWCjY0Nbt26hXfffVdrMVCZTAYhBGxsbNCqVSsTZklEhqBz4Zk5cyZ27doFX19f/Oc//9Ha+nrjxo3w8PDARx99VJu5khmTy+Xo1q0b9u/fX2UFas3tbt26cTg1kRnQufA0atQICQkJeP/997Fp0yZpUp+zszNefPFFfPzxx1VWNSDSlVqtxtGjR+8bc/ToUQwaNIjFh6ie02tCRKNGjbBixQp8+eWXuH79OgCgcePGXD+LHlpKSgqKiooAAG3btkXjxo2lrdSvX7+Os2fPoqioCCkpKWjdurWJsyWih6Fz4dm/fz969OgBhUIBmUwm7QhJZAgXLlwAcOeDTFZWFs6ePSv1ubi4oHHjxrh+/TouXLjAwkNUz+l8zqJv375aQ127du2KK1eu1EpSZHk0p26vX79eZc+dwsJC6QhbE0dE9Zde+/FUlpycjJKSEoMnRJbJ2dlZ+t7Pzw8BAQFaS+VojoAqxxFR/cRFr6hOsLW1lb5PSUnROtVWeW22ynFEVD/pfKpNJpNpDSK4+zbRw7h9+7b0fXl5uVZf5duV44ioftLrVFufPn2kT5+3bt3CoEGDYG1trRV34sQJw2ZIRERmRa8JpJWFhoYaPBmyXA0bNpS+VygUWkc5lW9XjiOi+qnGhedBDh8+jM6dO3NRR9KJnZ2d9H2rVq3Qtm1bWFtbo7S0FGfPnpXWCawcR0T1U60NLnjmmWdw8uRJtGzZsraegszIrVu3pO9TUlK0FqS1srKqNo6I6qdaW3tEx/3liAAADg4OAO5MFq28+ygAlJWVScsxaeKIqP7ioldUJzg5OQF48H48mjgiqr9YeKhO8PHxMWgcEdVdLDxUJ5w/f96gcURUd9Va4eHkUtLHgQMHpO/v3vag8u3KcUSGplartXa/VavVpk7JLNXaqDYOLiB93LhxAwDQoEEDVFRUaPWp1WqpXRNHZGhJSUn46aeftH7HGjVqhCFDhiAoKMiEmZkfvQrPH3/8gZ9//hmlpaXo06cPnn766XvG3r3CMNH92NjYAECVoqOhadfEERlSUlIS1q5dqzV0HwCKioqwdu1ajB07lsXHgHQuPD/88AOGDRsGW1tbWFlZYfHixfjkk08wderU2syPLISPjw/+/fdfAHdO01Y+Yq58m4MLyNDUajW2bNkC4M7k5X79+sHT0xMZGRnYu3cvkpOTsWXLFgQGBnL3WwPR+acYGRmJcePGIT8/Hzdu3MB///tffPzxx7WZG1mQy5cvS9/ffZq28u3KcUSGoNn9tmXLlnj55Zfh7e0NpVIJb29vvPzyy2jZsqW0+y0Zhs6F5/z585g6dSoaNGgAAHj77bdRWFiIa9eu1VpyZDkKCgoMGkekq4sXLwK4s9pKdQNbNJcUNHH08HQuPLdu3YKjo6N029raGjY2NigqKqqVxMiyaD7QGCqOiOouvQYXfP3117C3t5dul5eXY926dXBzc5Pa3nzzTcNlRxajadOmyM7OBnD/azxNmzY1SX5kvvz9/bF371788ssv8PPz0zrqUavV2L17txRHhqFz4WnevDm++uorrTYPDw9s2LBBui2TyVh4qEYqH8kIIdCsWTO0bdsWZ8+eRXp6erVxRIbg5+cHe3t7/P333/j666/Rt29faXBBbGws/v77b9jb28PPz8/UqZoNnQvPpUuXajENsnSNGjXSup2enq5VcO4VR/Sw5HI5XnjhBaxduxYXLlxAcnKy1KcZXv3CCy9wRJsB8SdJdULlfXY0u9xqVJ5bwf14qDYEBQVh7NixVVY/d3Bw4ByeWqDzEU9xcTHi4uIwcOBAAMD06dNRUlIi9Tdo0ABz587lBD+qkcoDV+633FLlOCJDCgoKQmBgIFJTU1FQUABHR0f4+vrySKcW6Fx4vvnmG+zcuVMqPMuWLUNAQABsbW0BAOfOnYOXlxcmT55cO5mSWau83UF1+/FUF0dkaHK5nIMIjEDnUv7dd99h/PjxWm0bN27EgQMHcODAASxcuFCa/UukL19fX60Rk9Wxt7eHr6+vkTIiotqic+G5ePEiAgMDpds2NjZah6BdunTR2q6YSF+aU7cNGjSAv78/OnfuDH9/f2kkW+VTu0RUf+lcePLy8rT+8K9fvw5vb2/ptlqtrvEbw/Lly+Ht7Q0bGxsEBwfj6NGj943funUr2rRpAxsbGwQGBmLXrl1a/UIIfPTRR/D09IStrS1UKlWV5S5yc3MxcuRIODo6wtnZGREREVqTYQ8ePIjQ0FB4enrCzs4OHTt2xHfffVej10cPdv78eZSVlUGhUEAIgZSUFBw/fhwpKSkQQkChUKCsrIz78RCZAZ0LT9OmTXH69Ol79p86dapGk/s2b96MKVOmYObMmThx4gSCgoLQv3//ey7Fc+TIEYwYMQIRERH4888/ERYWhrCwMK3cFixYgKVLl2LlypVISEiAnZ0d+vfvj9u3b0sxI0eORHJyMmJjYxETE4NDhw5pnUo8cuQIOnTogB9//BGnTp1CeHg4Ro8ejZiYGL1fIz3Y8ePHAdyZlHz3HihqtRrl5eVacURUf8mEjhvnvPXWW9i3bx8SExOrjFwrLi5G586doVKp8Pnnn+uVQHBwMB5//HEsW7YMwJ03mWbNmmHixImYNm1alfhhw4bh5s2bWgWga9eu6NixI1auXAkhBLy8vPD2229LK2fn5+fD3d0d69atw/Dhw3H27Fm0a9cOx44dQ+fOnQEAu3fvxrPPPot///0XXl5e1eY6YMAAuLu7Y+3atTq9toKCAjg5OSE/P5+jsR7gq6++uu8HG4327dtj3LhxRsiIiPSl63uezkc877//PnJzc9G6dWssXLgQ27dvx/bt27FgwQK0bt0aN27cwPvvv69XkqWlpUhMTIRKpfpfQnI5VCoV4uPjq71PfHy8VjwA9O/fX4pPS0tDZmamVoyTkxOCg4OlmPj4eDg7O0tFBwBUKhXkcjkSEhLumW9+fj5cXFz0eo2km7vnTzxsHBHVXToPp3Z3d8eRI0fw2muvYdq0adLaWTKZDH379sWXX34Jd3d3vZ48OzsbFRUVVe7n7u6Oc+fOVXufzMzMauMzMzOlfk3b/WKaNGmi1a9QKODi4iLF3G3Lli04duwYVq1adc/XU1JSonWdiysp6664uFjrdtOmTeHm5obs7Gxpn57q4oio/tFrkVAfHx/s3r0bubm50hLhfn5+Zn8UcODAAYSHh+Orr75CQEDAPeMiIyMxe/ZsI2ZmPjIyMrRu//vvv1oF515xRIakVqs5gdQI9Co8Gi4uLujSpctDP7mbmxsaNGiArKwsrfasrCx4eHhUex8PD4/7xmv+zcrKgqenp1ZMx44dpZi7By+Ul5cjNze3yvP++uuvGDRoED777DOMHj36vq9n+vTpmDJlinS7oKAAzZo1u+996I5bt24ZNI5IX0lJSYiOjkZubq7U5uLigrCwMC6ZY2AmLeXW1tbo1KkT4uLipDa1Wo24uDiEhIRUe5+QkBCteACIjY2V4n18fODh4aEVU1BQgISEBCkmJCQEeXl5SExMlGL2798PtVqN4OBgqe3gwYMYMGAAPvnkkyqTZ6ujVCrh6Oio9UW6sba2lr5v2LAhOnbsiC5duqBjx45o2LBhtXFEhpKUlISoqChp9ZUFCxZg8uTJ8PLyQlRUFJKSkkydolmp0RGPIU2ZMgVjxoxB586d0aVLFyxZsgQ3b95EeHg4AGD06NF45JFHEBkZCeDO6LqePXvi008/xYABA7Bp0yYcP34cq1evBnDnmtOkSZPw3//+F/7+/vDx8cGMGTPg5eWFsLAwAEDbtm3x9NNPY9y4cVi5ciXKysowYcIEDB8+XBrRduDAAQwcOBBvvfUWnn/+eenaj7W1tdmfWjSFhg0bIicnB8Cdo5qTJ0/eM47IkNRqNaKjoxEQEICIiAjp1Jq3tzciIiKwZs0abN++HYGBgTztZiAm/ykOGzYMixYtwkcffYSOHTvi5MmT2L17tzQ44PLly1rn9bt164aNGzdi9erVCAoKwg8//IDo6Gi0b99einn33XcxceJEjB8/Ho8//jiKioqwe/durWHg3333Hdq0aYM+ffrg2WefxZNPPikVL+DO2nS3bt1CZGQkPD09pa/nnnvOCD8Vy6Pr0SGPIsnQUlNTkZubi759+1a79bVKpUJOTg5SU1NNlKH50XkeD+mP83h0t2HDBp0mh3bu3BmjRo0yQkZkKRITE7F+/XosWLAASqWySv/t27fx3nvvYfTo0ejUqZMJMqw/DD6Ph6g2dejQwaBxRLrSvEHea8Skpp0fHg2HhYfqhAetz6dvHJGufH194eLigtjY2GqXa9q3bx9cXV25MroBsfBQnZCdnW3QOCJdyeVyhIWFITk5GWvWrEFaWhpu376NtLQ0rFmzBsnJyQgNDeXAAgMy+ag2IgDSwA+ZTIbqLjtq2rnDLdWGoKAghIeHIzo6GkuWLJHaXV1dER4eznk8BsbCQ3VCy5YtcenSpWqLDgCpvWXLlsZMiywIt742HhYeqhNkMplB44hqgltfGwdLOdUJuq7BxrXaiOo/HvFQnVB5VXBbW1s0atQI5eXlUCgUuHHjhrQq9b1WDyei+oOFh+qEwsJC6fvy8nJcvXpVum1lZVVtHBHVTzzVRnVCgwYNpO/vXo+t8u3KcURUP/GIh+oEV1dXXLlyBQBQVFSERx99FM2bN8fly5dx6tQprTgiqt9YeKhapaWlVfY9qk1dunTBTz/9BACoqKjAn3/+iT///LPauPT0dKPl5e7uzq0YiAyMhYeqlZWVhUWLFpk6jSo0xclYpk6dys38iAyMhYeq5e7ujqlTpxr1OS9cuIAdO3bcs3/w4MFo1aqVETOCtD0HERkOCw9Vy9ra2uif9Js1awY3Nzds27YNeXl5UnujRo0wZMgQLltCZCZYeKhO0SxbEh8fjy1btuCFF15ASEgIly0hMiP8a6Y6Ry6Xo3nz5gCA5s2bs+gQmRn+RRMRkVGx8BARkVGx8BARkVGx8BARkVGx8BARkVGx8BARkVGx8BARkVGx8BARkVGx8BARkVGx8BARkVGx8BARkVGx8BARkVGx8BARkVGx8BARkVGx8BARkVGx8BARkVGx8BARkVGx8BARkVGx8BARkVGx8BARkVEpTJ0AEVFdUV5ejt9++w05OTlwdXVF9+7doVDwbdLQ+BMlIgKwfft2HDx4EGq1WmrbsWMHevXqhdDQUBNmZn5YeIjI4m3fvh379++Hg4MDBgwYgICAACQnJ2Pnzp3Yv38/ALD4GBCv8RCRRSsvL8fBgwfh4OCAWbNmISQkBI6OjggJCcGsWbPg4OCAgwcPory83NSpmg0WHiKyaL/99hvUajUGDBhQ5XqOQqHAM888A7Vajd9++81EGZofFh4ismg5OTkAgICAgGr727dvrxVHD4+Fh4gsmqurKwAgOTm52v7Tp09rxdHDY+EhIovWvXt3yOVy7Ny5E6WlpUhJSUFiYiJSUlJQWlqKX375BXK5HN27dzd1qmaDo9qIyKIpFAr06tUL+/fvx7vvvgshhNQnk8kghEDv3r05n8eA+JOs43Jzc3Hz5k1Tp2F0WVlZWv9aGjs7O7i4uJg6DYvh7e0NAFpFp/JtTT8ZBgtPHZabm4uP581DmQUP49ywYYOpUzAJK4UC73/wAYuPEajVakRHR6NZs2YoLCxEXl6e1Ofs7AwHBwds374dgYGBkMt5dcIQWHjqsJs3b6KsvBzPurnB1crK1OmQkeSUlWFXdjZu3rzJwmMEqampyM3NRW5uLqzu+ju7efOmVIhSU1Ph7+9vggzNDwtPPeBqZQV3pdLUaRCZpfz8fOn7Vq1aoV+/fvD09ERGRgb27t0rjXarHEcPh8eNRGTRCgsLAQBeXl54+eWX4e3tDaVSCW9vb7z88svw8vLSiqOHxyMeIrJomsE71tbWUKvVSE1NRUFBARwdHeHj4wNra2utOHp4LDxEZNFkMhkA4NKlS5g2bRrKysqkPisrK+m2Jo4eHk+1EZFF8/Pzk76vXHTuvl05jh4OCw8RWTRfX1+DxtGDsfAQkUW7ePGiQePowVh4iMiiHT161KBx9GAsPERk0a5fv27QOHowFh4ismiVl8gxRBw9GAsPEVm04uJig8bRg7HwEJFFu3sI9cPG0YOx8BARkVGx8BARkVGx8BARkVGx8BARkVFxkdB6IIcXNS0K/7/J3LHw1AO7srNNnQIRkcHUicKzfPlyLFy4EJmZmQgKCsIXX3yBLl263DN+69atmDFjBi5dugR/f3988sknePbZZ6V+IQRmzpyJr776Cnl5eXjiiSewYsUKrW1rc3NzMXHiRPz888+Qy+V4/vnn8fnnn8Pe3l6KOXXqFN544w0cO3YMjRs3xsSJE/Huu+/Wzg/hPrj1tWXRbH1tqUpLS5GVlWXqNKqVnp5ulOdxd3eX9gEyRyYvPJs3b8aUKVOwcuVKBAcHY8mSJejfvz/Onz+PJk2aVIk/cuQIRowYgcjISAwcOBAbN25EWFgYTpw4gfbt2wMAFixYgKVLl+Kbb76Bj48PZsyYgf79++PMmTOwsbEBAIwcORIZGRmIjY1FWVkZwsPDMX78eGzcuBEAUFBQgH79+kGlUmHlypX466+/MHbsWDg7O2P8+PHG+wGBW1+TZcnKysKiRYtMnUa1jJXX1KlT0axZM6M8lynIhBDClAkEBwfj8ccfx7JlywAAarUazZo1w8SJEzFt2rQq8cOGDcPNmzcRExMjtXXt2hUdO3bEypUrIYSAl5cX3n77bUydOhXAnb3S3d3dsW7dOgwfPhxnz55Fu3btcOzYMXTu3BkAsHv3bjz77LP4999/4eXlhRUrVuCDDz5AZmam9Mlj2rRpiI6Oxrlz53R6bQUFBXByckJ+fj4cHR31/tmkp6dj0aJFGOXpycJjQbJKSrAhI8Okbz65ubkm23GzrKwMubm5Rnu+DRs26Bw7atSoWszkf1xcXGBlorMcdnZ2cHFxqdF9dX3PM+kRT2lpKRITEzF9+nSpTS6XQ6VSIT4+vtr7xMfHY8qUKVpt/fv3R3R0NAAgLS0NmZmZUKlUUr+TkxOCg4MRHx+P4cOHIz4+Hs7OzlLRAQCVSgW5XI6EhAQMGTIE8fHx6NGjh9bhbv/+/fHJJ5/gxo0baNSokSF+BDrhxWbLYur/79zcXMybNw/l5eUmzaMu0qdI1VcKhQIffPBBjYuPTs9Ra4+sg+zsbFRUVMDd3V2r3d3d/Z5HFZmZmdXGZ2ZmSv2atvvF3H0aT6FQwMXFRSvGx8enymNo+qorPCUlJSgpKZFuFxQUVPsadGVnZwcrhcKiz/dbKiuFAnZ2diZ7frVabbLnJtMyxv+9ya/xmJPIyEjMnj3bYI/n4uKC9z/4wCSnPLKysizi092DjBo1qsqHGGN4mNMdD8vFxQWTJk0y2TYAOTk52LVrl0meu6549tln4erqapLnbty4ca3/7pm08Li5uaFBgwZVRrBkZWXBw8Oj2vt4eHjcN17zb1ZWFjw9PbViOnbsKMVcu3ZN6zHKy8uRm5ur9TjVPU/l57jb9OnTtU4DFhQUPPQ5ehcXF5O8Abm7u0vXyCyZuY8uupcWLVqgRYsWJnnu0tJStGvXziTPffXqVXz//fcQQkAmk2HEiBHw8vIyeh7m/ntn0sJjbW2NTp06IS4uDmFhYQDuHObFxcVhwoQJ1d4nJCQEcXFxmDRpktQWGxuLkJAQAICPjw88PDwQFxcnFZqCggIkJCTgtddekx4jLy8PiYmJ6NSpEwBg//79UKvVCA4OlmI++OADlJWVSRf5YmNj0bp163te31EqlVCaySAAa2trsx5VQ3WXKX/3mjVrJr0HUC0SJrZp0yahVCrFunXrxJkzZ8T48eOFs7OzyMzMFEIIMWrUKDFt2jQp/vDhw0KhUIhFixaJs2fPipkzZworKyvx119/STHz588Xzs7OYvv27eLUqVMiNDRU+Pj4iOLiYinm6aefFo8++qhISEgQv//+u/D39xcjRoyQ+vPy8oS7u7sYNWqUOH36tNi0aZNo2LChWLVqlc6vLT8/XwAQ+fn5D/MjIiKqF3R9zzN54RFCiC+++EI0b95cWFtbiy5duog//vhD6uvZs6cYM2aMVvyWLVtEq1athLW1tQgICBA7d+7U6ler1WLGjBnC3d1dKJVK0adPH3H+/HmtmJycHDFixAhhb28vHB0dRXh4uCgsLNSKSUpKEk8++aRQKpXikUceEfPnz9frdbHwEJEl0fU9z+TzeMzZw87jISKqT3R9z+Pq1EREZFQsPEREZFQsPEREZFQsPEREZFQsPEREZFQsPEREZFQsPEREZFQsPEREZFQsPEREZFQsPEREZFTcj6cWaVYjetgN4YiI6gPNe92DVmJj4alFhYWFAMDtBYjIohQWFsLJyeme/VwktBap1WpcvXoVDg4OkMlkpk6nXtFsopeens4FVsmo+LtXc0IIFBYWwsvLC3L5va/k8IinFsnlcjRt2tTUadRrjo6O/OMnk+DvXs3c70hHg4MLiIjIqFh4iIjIqFh4qE5SKpWYOXMmlEqlqVMhC8PfvdrHwQVERGRUPOIhIiKjYuEhIiKjYuEhIiKjYuEhIiKjYuEhIiKjYuEhkysuLsaOHTukte0qKygowI4dO1BSUmKCzIioNrDwkMmtXr0an3/+ORwcHKr0OTo6YunSpfj6669NkBmZu6tXr2Lq1KnVriCfn5+Pd955B1lZWSbIzLyx8JDJfffdd5g0adI9+ydNmoRvvvnGeAmRxVi8eDEKCgqqXZPNyckJhYWFWLx4sQkyM28sPGRyKSkpCAoKumd/hw4dkJKSYsSMyFLs3r0bo0ePvmf/6NGjERMTY8SMLAMLD5lceXk5rl+/fs/+69evo7y83IgZkaVIS0tD8+bN79nftGlTXLp0yXgJWQgWHjK5gIAA7Nu37579e/fuRUBAgBEzIktha2t738Jy6dIl2NraGi8hC8HCQyY3duxYzJ07t9pTGj///DPmzZuHsWPHmiAzMnfBwcHYsGHDPfvXr1+PLl26GDEjy8CN4Mjkxo8fj0OHDmHw4MFo06YNWrduDQA4d+4cLly4gBdeeAHjx483cZZkjqZOnYq+ffvCyckJ77zzDtzd3QEAWVlZWLBgAdatW4e9e/eaOEvzw9Wpqc7YsmULNm7ciJSUFAgh0KpVK7z44ot44YUXTJ0ambFVq1bhrbfeQllZGRwdHSGTyZCfnw8rKyt89tlneO2110ydotlh4SEii3flyhVs2bIFFy9elD70DB06lFvX1xIWHqoz8vPzERsbi0uXLkEmk6Fly5bo06cP970nMjO8xkN1wrfffosJEyZUmUHu5OSElStXYtiwYSbKjCzB/v37sW3bNulDj4+PD4YOHYoePXqYOjWzxFFtZHInTpxAeHg4wsLC8Oeff6K4uBi3bt3C8ePHMWjQIIwaNQpJSUmmTpPM1KuvvgqVSoXvv/8eOTk5uH79Or777js89dRTmDhxoqnTM0s81UYmFx4ejqKiImzdurXa/qFDh8LR0RFr1641cmZk7n766ScMHz4cq1atwpgxYyCTyQAAarUa69atw2uvvYatW7di8ODBJs7UvLDwkMm1atUKX375JVQqVbX9+/btw+uvv44LFy4YOTMyd4MHD0ZAQAAiIyOr7X/vvfdw7tw5bN++3ciZmTeeaiOTu3r1Klq1anXP/latWuHKlStGzIgsxYkTJzBkyJB79j/33HNITEw0YkaWgYWHTO7WrVuwsbG5Z79SqcTt27eNmBFZiuzs7PsOmW7atClycnKMmJFl4Kg2qhP27NkDJyenavvy8vKMmwxZjNLSUlhZWd2zX6FQoLS01IgZWQZe4yGTk8t1O/BWq9W1nAlZGrlcjvHjx6Nhw4bV9t+6dQtfffUVKioqjJyZeWPhISKL1atXL2kk2/0cOHDACNlYDhYeqjMiIyPh7u5eZSXqtWvXIjs7G++++66JMiNLonlL1KUgUc1wcAHVGatWrUKbNm2qtAcEBGDFihUmyIgsyZo1a9C+fXvY2NjAxsYG7du3x9dff23qtMwSBxdQnZGZmQlPT88q7Y0bN0ZGRoYJMiJL8dFHH2Hx4sWYOHEiQkJCAADx8fGYPHkyLl++jDlz5pg4Q/PCwkN1RrNmzXD48GH4+PhotR8+fBheXl4myooswYoVK/DVV19hxIgRUtvgwYPRoUMHTJw4kYXHwFh4qM4YN24cJk2ahLKyMvTu3RsAEBcXh3fffRdvv/22ibMjc1ZWVobOnTtXae/UqRPKy8tNkJF54+ACqjOEEJg2bRqWLl0qzZ2wsbHBe++9h48++sjE2ZE5mzhxIqysrLB48WKt9qlTp6K4uBjLly83UWbmiYWH6pyioiKcPXsWtra28Pf3h1KpNHVKZOYmTpyI9evXo1mzZujatSsAICEhAZcvX8bo0aO1JpneXZxIfyw8RGTxnnrqKZ3iZDIZ9u/fX8vZmD8WHiIiMirO4yEiIqNi4SEiIqNi4SEiIqNi4SEiIqNi4SGqJ2bNmoWOHTtKt1966SWEhYWZLB+immLhITKCzMxMTJw4ES1btoRSqUSzZs0waNAgxMXF1dpzrlu3Ds7OzrX2+EQ1xSVziGrZpUuX8MQTT8DZ2RkLFy5EYGAgysrKsGfPHrzxxhs4d+6cqVMkMioe8RDVstdffx0ymQxHjx7F888/j1atWiEgIABTpkzBH3/8IcXl5eXh5ZdfRuPGjeHo6IjevXsjKSmpRs958OBBhIeHIz8/HzKZDDKZDLNmzcKcOXPQvn37KvEdO3bEjBkzAPzvFN7s2bOlXF599VWtLaDVajUiIyPh4+MDW1tbBAUF4YcffqhRrmR5eMRDVItyc3Oxe/duzJs3D3Z2dlX6K58K+7//+z/Y2tril19+gZOTE1atWoU+ffrgwoULcHFx0et5u3XrhiVLluCjjz7C+fPnAQD29vbIy8vD7NmzcezYMTz++OMAgD///BOnTp3Ctm3bpPvHxcXBxsYGBw8exKVLlxAeHg5XV1fMmzcPwJ1N+7799lusXLkS/v7+OHToEP7zn/+gcePG6Nmzp74/JrIwLDxEtejixYsQQlS7wV1lv//+O44ePYpr165Ja9MtWrQI0dHR+OGHHzB+/Hi9ntfa2hpOTk6QyWTw8PCQ2u3t7dG/f39ERUVJhScqKgo9e/ZEy5Ytte6/du1aNGzYEAEBAZgzZw7eeecdzJ07F2VlZfj444+xb98+ae+ali1b4vfff8eqVatYeOiBWHiIapGuK1IlJSWhqKgIrq6uWu3FxcVITU01aE7jxo3D2LFjsXjxYsjlcmzcuBGfffaZVkxQUBAaNmwo3Q4JCUFRURHS09NRVFSEW7duoW/fvlr3KS0txaOPPmrQXMk8sfAQ1SJ/f3/IZLIHDiAoKiqCp6cnDh48WKXP0CPTBg0aBKVSiZ9++gnW1tYoKyvD0KFDdb5/UVERAGDnzp145JFHtPq4kjjpgoWHqBa5uLigf//+WL58Od58880q13ny8vLg7OyMxx57DJmZmVAoFPD29jbIc1tbW6OioqJKu0KhwJgxYxAVFQVra2sMHz4ctra2WjFJSUkoLi6W2v/44w/Y29ujWbNmcHFxgVKpxOXLl3lajWqEhYeoli1fvhxPPPEEunTpgjlz5qBDhw4oLy9HbGwsVqxYgbNnz0KlUiEkJARhYWFYsGABWrVqhatXr2Lnzp0YMmRItbtjPoi3tzeKiooQFxcnnTrTnD57+eWX0bZtWwB3tha/W2lpKSIiIvDhhx/i0qVLmDlzJiZMmAC5XA4HBwdMnToVkydPhlqtxpNPPon8/HwcPnwYjo6OGDNmzMP9wMjssfAQ1bKWLVvixIkTmDdvHt5++21kZGSgcePG6NSpE1asWAHgzj4vu3btwgcffIDw8HBcv34dHh4e6NGjB9zd3Wv0vN26dcOrr76KYcOGIScnBzNnzsSsWbMA3DkF2K1bN+Tm5iI4OLjKffv06QN/f3/06NEDJSUlGDFihHRfAJg7dy4aN26MyMhI/P3339JR2/vvv1+jXMmycD8eIgskhIC/vz9ef/11TJkyRavvpZdeQl5eHqKjo02THJk9HvEQWZjr169j06ZNyMzMRHh4uKnTIQvEwkNkYZo0aQI3NzesXr0ajRo1MnU6ZIF4qo2IiIyKa7UREZFRsfAQEZFRsfAQEZFRsfAQEZFRsfAQEZFRsfAQEZFRsfAQEZFRsfAQEZFRsfAQEZFR/T/dB0GgH4U68QAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Visualize GP importance distributions for example gene programs\n", "# These GPs were selected based on known roles in hematopoiesis\n", "for gp in ['GP_TAL1', 'GP_FOXO3']:\n", " make_barplot(dc, gp)" ] } ], "metadata": { "kernelspec": { "display_name": "lightning", "language": "python", "name": "lightning" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" } }, "nbformat": 4, "nbformat_minor": 5 }