{ "cells": [ { "cell_type": "markdown", "id": "4409f162", "metadata": {}, "source": [ "# 04 - Model Improvement by Ablation\n", "\n", "\n", "Phase 2 turns the baseline result into an improvement story. Each ablation changes one experimental choice and asks whether that change improves held-out performance or exposes a shortcut.\n", "\n", "Questions:\n", "- Does higher resolution help?\n", "- Does normalization reveal color shortcuts?\n", "- Does source holdout reveal source-specific learning?\n", "- Does face crop help?\n", "- Does augmentation help or over-regularize?\n", "\n", "Roadmap link: this notebook selects the best supported classifier setting from existing logs. `05_gradcam` checks where the selected and comparison models focus, then `06_model_families` tests stronger pretrained families and `07_data_scaling` records the scaling plan/status.\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "5df1be05", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Project root: c:\\Users\\diogo\\Documents\\MIA_UP\\2_Semestre\\DRL\\DRL_2\\DRL_PROJ\n", "Classifier root: c:\\Users\\diogo\\Documents\\MIA_UP\\2_Semestre\\DRL\\DRL_2\\DRL_PROJ\\classifier\n" ] } ], "source": [ "from __future__ import annotations\n", "\n", "import json\n", "import random\n", "import sys\n", "from collections import Counter, defaultdict\n", "from pathlib import Path\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "\n", "\n", "def find_project_root(start: Path | None = None) -> Path:\n", " \"\"\"Find DRL_PROJ whether the notebook runs from repo root or classifier/notebooks.\"\"\"\n", " start = Path.cwd() if start is None else Path(start)\n", " for candidate in [start, *start.parents]:\n", " if (candidate / \"classifier\").is_dir() and (candidate / \"docs\" / \"DRL_Project.md\").exists():\n", " return candidate\n", " raise RuntimeError(\"Could not find DRL_PROJ root. Run this notebook from inside the repository.\")\n", "\n", "\n", "PROJECT_ROOT = find_project_root()\n", "CLASSIFIER_ROOT = PROJECT_ROOT / \"classifier\"\n", "if str(CLASSIFIER_ROOT) not in sys.path:\n", " sys.path.insert(0, str(CLASSIFIER_ROOT))\n", "\n", "DATA_DIR = PROJECT_ROOT / \"data\"\n", "CROPPED_DIR = PROJECT_ROOT / \"cropped\" / \"classifier\"\n", "LEGACY_CROPPED_DIR = PROJECT_ROOT / \"data_cropped\"\n", "OUTPUTS_DIR = CLASSIFIER_ROOT / \"outputs\"\n", "LOGS_DIR = OUTPUTS_DIR / \"logs\"\n", "CONFIGS_DIR = CLASSIFIER_ROOT / \"configs\"\n", "FIGURES_DIR = OUTPUTS_DIR / \"figures\"\n", "ANALYSIS_DIR = OUTPUTS_DIR / \"analysis\"\n", "FIGURES_DIR.mkdir(parents=True, exist_ok=True)\n", "ANALYSIS_DIR.mkdir(parents=True, exist_ok=True)\n", "\n", "SEED = 42\n", "random.seed(SEED)\n", "np.random.seed(SEED)\n", "\n", "print(f\"Project root: {PROJECT_ROOT}\")\n", "print(f\"Classifier root: {CLASSIFIER_ROOT}\")\n", "\n", "from src.utils import load_config\n", "\n", "def load_run(run_name: str) -> dict | None:\n", " path = LOGS_DIR / f\"{run_name}.json\"\n", " if not path.exists():\n", " print(f\"Missing log: {path.relative_to(PROJECT_ROOT)}\")\n", " return None\n", " with path.open() as f:\n", " return json.load(f)\n", "\n", "\n", "def scalar_metric(results: dict | None, metric: str, field: str = \"mean\") -> float:\n", " if not results:\n", " return np.nan\n", " return results.get(\"aggregated_metrics\", {}).get(metric, {}).get(field, np.nan)\n", "\n", "\n", "def metric_values(results: dict | None, metric: str) -> np.ndarray:\n", " if not results:\n", " return np.array([], dtype=float)\n", " values = results.get(\"aggregated_metrics\", {}).get(metric, {}).get(\"values\", [])\n", " return np.array(values, dtype=float)\n", "\n", "\n", "def pairwise_auc(results: dict | None, pair_key: str, field: str = \"mean\") -> float:\n", " if not results:\n", " return np.nan\n", " return results.get(\"aggregated_pairwise\", {}).get(pair_key, {}).get(\"auc_roc\", {}).get(field, np.nan)\n", "\n", "\n", "def best_gap_values(results: dict | None) -> np.ndarray:\n", " \"\"\"Train AUC - validation AUC at each fold's best validation epoch.\"\"\"\n", " gaps = []\n", " if not results:\n", " return np.array(gaps, dtype=float)\n", " for fold in results.get(\"fold_results\", []):\n", " hist = fold.get(\"history\") or {}\n", " val = np.array(hist.get(\"val_auc\", []), dtype=float)\n", " train = np.array(hist.get(\"train_auc\", []), dtype=float)\n", " if len(val) and len(train):\n", " best_idx = int(np.nanargmax(val))\n", " gaps.append(float(train[best_idx] - val[best_idx]))\n", " return np.array(gaps, dtype=float)\n", "\n", "\n", "def summarize_run(run_name: str, label: str | None = None) -> dict:\n", " results = load_run(run_name)\n", " cfg = (results or {}).get(\"config\", {})\n", " return {\n", " \"run\": run_name,\n", " \"label\": label or run_name,\n", " \"backbone\": cfg.get(\"backbone\"),\n", " \"image_size\": cfg.get(\"image_size\"),\n", " \"data_dir\": cfg.get(\"data_dir\"),\n", " \"augment\": bool(cfg.get(\"augment\")) if cfg.get(\"augment\") is not None else False,\n", " \"normalization\": cfg.get(\"normalization\", \"imagenet/default\"),\n", " \"auc\": scalar_metric(results, \"auc_roc\"),\n", " \"auc_std\": scalar_metric(results, \"auc_roc\", \"std\"),\n", " \"auc_ci95\": scalar_metric(results, \"auc_roc\", \"ci_95\"),\n", " \"accuracy\": scalar_metric(results, \"accuracy\"),\n", " \"f1\": scalar_metric(results, \"f1\"),\n", " \"best_gap\": np.nanmean(best_gap_values(results)) if results else np.nan,\n", " }\n", "\n", "\n", "def paired_delta(before: str, after: str, metric: str = \"auc_roc\") -> dict:\n", " b = load_run(before)\n", " a = load_run(after)\n", " b_vals = metric_values(b, metric)\n", " a_vals = metric_values(a, metric)\n", " n = min(len(b_vals), len(a_vals))\n", " b_vals = b_vals[:n]\n", " a_vals = a_vals[:n]\n", " delta = a_vals - b_vals\n", " out = {\n", " \"before\": before,\n", " \"after\": after,\n", " \"metric\": metric,\n", " \"n_folds\": n,\n", " \"before_mean\": float(np.nanmean(b_vals)) if n else np.nan,\n", " \"after_mean\": float(np.nanmean(a_vals)) if n else np.nan,\n", " \"delta_mean\": float(np.nanmean(delta)) if n else np.nan,\n", " \"delta_ci95\": float(1.96 * np.nanstd(delta, ddof=1) / np.sqrt(n)) if n > 1 else 0.0,\n", " }\n", " try:\n", " from scipy import stats\n", " out[\"paired_t_p\"] = float(stats.ttest_rel(a_vals, b_vals, nan_policy=\"omit\").pvalue) if n > 1 else np.nan\n", " except Exception as exc:\n", " out[\"paired_t_p\"] = np.nan\n", " out[\"test_note\"] = f\"scipy unavailable: {exc}\"\n", " return out\n", "\n", "RUNS = {\n", " \"p1_simplecnn_baseline\": \"P1 SimpleCNN 128\",\n", " \"p1_resnet18_baseline\": \"P1 ResNet18 128\",\n", " \"p2a_t1_original\": \"ResNet18 224 ImageNet norm\",\n", " \"p2a_t2_real_norm\": \"ResNet18 224 real_norm\",\n", " \"p2a_t3_holdout_text2img\": \"Holdout text2img\",\n", " \"p2a_t3_holdout_inpainting\": \"Holdout inpainting\",\n", " \"p2a_t3_holdout_insight\": \"Holdout insight\",\n", " \"p2b_simplecnn_224\": \"SimpleCNN 224\",\n", " \"p2b_resnet18_224\": \"ResNet18 224\",\n", " \"p2c_simplecnn_facecrop\": \"SimpleCNN 224 facecrop\",\n", " \"p2c_resnet18_facecrop\": \"ResNet18 224 facecrop\",\n", " \"p2d_simplecnn_aug\": \"SimpleCNN 224 aug\",\n", " \"p2d_resnet18_aug\": \"ResNet18 224 aug\",\n", " \"p2e_simplecnn_facecrop_aug\": \"SimpleCNN 224 facecrop aug\",\n", " \"p2e_resnet18_facecrop_aug\": \"ResNet18 224 facecrop aug\",\n", "}\n" ] }, { "cell_type": "markdown", "id": "18c7e2e1", "metadata": {}, "source": [ "## 1. Evidence table and experiment matrix\n", "\n", "The ranked evidence table uses existing Phase 1 and Phase 2 logs. The experiment matrix is generated from `classifier/configs/phase2/*.json` with `extends` resolved, so it documents what was actually run.\n", "\n", "No unexecuted experiments are treated as results.\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "50b8f9e5", "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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
runbackbonepretrainedimage_sizedata_dirnormalizationaugmenttrain_sourceseval_sources
0p2a_t1_originalresnet18True224dataimagenetFalseallall
1p2a_t2_real_normresnet18True224datareal_normFalseallall
2p2a_t3_holdout_inpaintingresnet18True224dataimagenetFalsewiki, text2img, insightwiki, text2img, insight, inpainting
3p2a_t3_holdout_insightresnet18True224dataimagenetFalsewiki, text2img, inpaintingwiki, text2img, inpainting, insight
4p2a_t3_holdout_text2imgresnet18True224dataimagenetFalsewiki, inpainting, insightwiki, inpainting, insight, text2img
5p2b_resnet18_224resnet18True224dataimagenet/defaultFalseallall
6p2b_simplecnn_224simple_cnnFalse224dataimagenet/defaultFalseallall
7p2c_resnet18_facecropresnet18True224cropped/classifierimagenet/defaultFalseallall
8p2c_simplecnn_facecropsimple_cnnFalse224cropped/classifierimagenet/defaultFalseallall
9p2d_resnet18_augresnet18True224dataimagenet/defaultTrueallall
10p2d_simplecnn_augsimple_cnnFalse224dataimagenet/defaultTrueallall
11p2e_resnet18_facecrop_augresnet18True224cropped/classifierimagenet/defaultTrueallall
12p2e_simplecnn_facecrop_augsimple_cnnFalse224cropped/classifierimagenet/defaultTrueallall
\n", "
" ], "text/plain": [ " run backbone pretrained image_size \\\n", "0 p2a_t1_original resnet18 True 224 \n", "1 p2a_t2_real_norm resnet18 True 224 \n", "2 p2a_t3_holdout_inpainting resnet18 True 224 \n", "3 p2a_t3_holdout_insight resnet18 True 224 \n", "4 p2a_t3_holdout_text2img resnet18 True 224 \n", "5 p2b_resnet18_224 resnet18 True 224 \n", "6 p2b_simplecnn_224 simple_cnn False 224 \n", "7 p2c_resnet18_facecrop resnet18 True 224 \n", "8 p2c_simplecnn_facecrop simple_cnn False 224 \n", "9 p2d_resnet18_aug resnet18 True 224 \n", "10 p2d_simplecnn_aug simple_cnn False 224 \n", "11 p2e_resnet18_facecrop_aug resnet18 True 224 \n", "12 p2e_simplecnn_facecrop_aug simple_cnn False 224 \n", "\n", " data_dir normalization augment train_sources \\\n", "0 data imagenet False all \n", "1 data real_norm False all \n", "2 data imagenet False wiki, text2img, insight \n", "3 data imagenet False wiki, text2img, inpainting \n", "4 data imagenet False wiki, inpainting, insight \n", "5 data imagenet/default False all \n", "6 data imagenet/default False all \n", "7 cropped/classifier imagenet/default False all \n", "8 cropped/classifier imagenet/default False all \n", "9 data imagenet/default True all \n", "10 data imagenet/default True all \n", "11 cropped/classifier imagenet/default True all \n", "12 cropped/classifier imagenet/default True all \n", "\n", " eval_sources \n", "0 all \n", "1 all \n", "2 wiki, text2img, insight, inpainting \n", "3 wiki, text2img, inpainting, insight \n", "4 wiki, inpainting, insight, text2img \n", "5 all \n", "6 all \n", "7 all \n", "8 all \n", "9 all \n", "10 all \n", "11 all \n", "12 all " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# \n", "phase2_rows = []\n", "for cfg_path in sorted((CONFIGS_DIR / \"phase2\").glob(\"*.json\")):\n", " cfg = load_config(str(cfg_path))\n", " aug = cfg.get(\"augment\")\n", " train_sources = cfg.get(\"train_sources\")\n", " eval_sources = cfg.get(\"eval_sources\")\n", " phase2_rows.append({\n", " \"run\": cfg.get(\"run_name\", cfg_path.stem),\n", " \"backbone\": cfg.get(\"backbone\"),\n", " \"pretrained\": cfg.get(\"pretrained\", False),\n", " \"image_size\": cfg.get(\"image_size\"),\n", " \"data_dir\": cfg.get(\"data_dir\"),\n", " \"normalization\": cfg.get(\"normalization\", \"imagenet/default\"),\n", " \"augment\": bool(aug) if aug is not None else False,\n", " \"train_sources\": \", \".join(train_sources) if train_sources else \"all\",\n", " \"eval_sources\": \", \".join(eval_sources) if eval_sources else \"all\",\n", " })\n", "phase2_config_df = pd.DataFrame(phase2_rows)\n", "display(phase2_config_df)\n" ] }, { "cell_type": "markdown", "id": "9a4dc461", "metadata": {}, "source": [ "\n", "Phase 2 has five experiment groups: normalization/source diagnostics (`p2a`), 224x224 resolution (`p2b`), facecrop (`p2c`), augmentation without facecrop (`p2d`), and augmentation with facecrop (`p2e`). The source-holdout configs deliberately remove one fake source during training and then evaluate with it restored, so pairwise AUC is the key number for those runs.\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "aad751e2", "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", " \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", " \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", " \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", " \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", "
 labelrunbackboneimage_sizedata_diraugmentnormalizationaucauc_stdaccuracyf1best_gap
1P1 ResNet18 128p1_resnet18_baselineresnet18128dataFalseimagenet/default0.93660.00380.86500.9073+0.0394
0P1 SimpleCNN 128p1_simplecnn_baselinesimple_cnn128dataFalseimagenet/default0.77860.00660.70390.7801+0.0069
2ResNet18 224 ImageNet normp2a_t1_originalresnet18224dataFalseimagenet0.96600.00370.91320.9415+0.0312
3ResNet18 224 real_normp2a_t2_real_normresnet18224dataFalsereal_norm0.96780.00260.91650.9440+0.0295
5Holdout inpaintingp2a_t3_holdout_inpaintingresnet18224dataFalseimagenet0.95370.00600.88370.9195+0.0290
6Holdout insightp2a_t3_holdout_insightresnet18224dataFalseimagenet0.94010.00300.83030.8748+0.0111
4Holdout text2imgp2a_t3_holdout_text2imgresnet18224dataFalseimagenet0.89600.00870.78510.8407+0.0296
8ResNet18 224p2b_resnet18_224resnet18224dataFalseimagenet/default0.96600.00370.91320.9415+0.0312
7SimpleCNN 224p2b_simplecnn_224simple_cnn224dataFalseimagenet/default0.78530.00490.72280.7993+0.0010
10ResNet18 224 facecropp2c_resnet18_facecropresnet18224data_croppedFalseimagenet/default0.97550.00480.92230.9468+0.0271
9SimpleCNN 224 facecropp2c_simplecnn_facecropsimple_cnn224data_croppedFalseimagenet/default0.76610.00820.70520.7852+0.0042
12ResNet18 224 augp2d_resnet18_augresnet18224dataTrueimagenet/default0.96650.00400.90050.9313+0.0148
11SimpleCNN 224 augp2d_simplecnn_augsimple_cnn224dataTrueimagenet/default0.73460.00910.63860.7136-0.0241
14ResNet18 224 facecrop augp2e_resnet18_facecrop_augresnet18224data_croppedTrueimagenet/default0.97370.00240.91740.9434+0.0223
13SimpleCNN 224 facecrop augp2e_simplecnn_facecrop_augsimple_cnn224data_croppedTrueimagenet/default0.71360.00490.60890.6825-0.0205
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAKyCAYAAADIG729AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAA1KtJREFUeJzs3QeU1FTbwPEL0gTB3kHsFRULFixYAVGxYO8gdhEUOxZUsFewYMOCXbFXLNh7Q0URO3b0VUBUisp3/vf9Mm92dmZ3Fjbuwv5/5+TITjJJJpOJee7z3Jt6M2bMmBEkSZIkSVK1q1/9q5QkSZIkSQbdkiRJkiRlyEy3JEmSJEkZMeiWJEmSJCkjBt2SJEmSJGXEoFuSJEmSpIwYdEuSJEmSlBGDbkmSJEmSMmLQLUmSJElSRgy6JUlzhC+//DLUq1cv3HjjjdWyvmeffTauj//WRrVh/9h+//79y7z2xhtvhPbt24dmzZrF+e+++25chn9r5o5pXfncRx55ZE3vhiRlwqBbklQjCI650S42vfrqq//Kflx55ZXVFqjXddOnTw+77rpr+OWXX8Ill1wShg0bFlq3bl3Tu6Vq9vLLL8eGgQkTJnhsJakEDUpZSJKkrJx55plhmWWWKff68ssvX6X1ENz9+eefoWHDhlUOuhdaaKFwwAEHlHl90003jetr1KhRldZXl3B8GjT4363EZ599Fr766qtw7bXXhp49e+ZeP+WUU8KJJ55YQ3s5ex/T2hp0n3HGGfE3M99889X07khSrVe7r+qSpDneNttsE9Zdd91ZXg/Z8SZNmoTqUr9+/Wpd35wo//iMHz8+/jc/ECOIrM5A8o8//ghNmzYNc4p//vknTJs2LR5Pz7l/1++//x67QkhSliwvlyTVaqeffnoMgJ9++ukyrx988MExCz1q1Kiifbp/+OGH0L1799CyZcvQuHHjsPjii4cddtghLoull146jB49Ojz33HO5svbNNtusaJ9p5rVp0yZ8+OGHYfPNN4+B35JLLhnOP//8cvtNxrdr167xhn6RRRYJRx99dHjiiSdK7of97bffhgMPPDAsscQScd+pBjjssMNicFbMCy+8EMu7l1pqqfieVq1axe2SPU2r7LjgzTffDJ06dYpVAHPPPXfcfo8ePYr2Pybr2aFDh/hv9iF9LIv16b7lllvCOuusE9e/wAILhD322CN8/fXXZZZJjvlbb70Vqw845ieffHKFx27MmDFhl112ieskiKVR58EHHyzTOLDwwgvHdc+YMSP3+qeffhq/r913373g9umrnhyLIUOGlNvu1KlT4/lKlUZy/I8//vj4eqH+y7feemtYbbXV4rKPP/54uWOaPnZjx44N++yzT5h33nnjvp966qlx3zlefHctWrQIiy22WLjoootmeb/uv//++JlZlv1L9i3Zn+OOOy7+m+OQ/G6Sc+fJJ58MG2+8cWx4mWeeecJKK61U6feVxjHhPXxvnBvPP/98bt7IkSPjtu67775y77vtttvivFdeeaXSLi383g8//PD4u+Q3kJy/XA/yFTp3SzlOxSTXlbvuuisMHDgwbp/PuuWWW8bzb2Z+z+w7x3rcuHFhu+22i//munTFFVfE+e+//37YYost4rlNRRDHKh9dBfr06RO3wbY4V84777zYICRp1pnpliTVqIkTJ4aff/65zGvclC644IK50uSHHnooBqDcPDZv3jwGr5Qwn3XWWWHNNdcsuu5u3brFoLpXr17xhppgi6CAm1P+vvTSS+M8blL79esX37PoootWuL+//vpr6Ny5c9h5553DbrvtFu65555wwgknhNVXXz1m7ZPsGTe533//fejdu3cMhrjRJWgoxXfffRfWW2+9eCNM48LKK68cg3C2RZa3WMn73XffHecTnHP8Xn/99TB48ODwzTffxHmlHhf+7tixYwzuKAsngCKouvfee4vu8yGHHBJv9M8+++xw1FFHhXbt2lV4LAk4CBw5hpSi//TTT3FfCazfeeedMtny//znP/HYEpQTeFa0Xj7XRhttFPeFfSfQIMDZcccdw/Dhw8NOO+0Ug62rrroqBjRsk/0luCB44fyiy0H+d96lS5e4r3vuuWdcH8eY7yFpiOD9NLK8+OKL8TtbZZVV4vlK33YCZgK0tGeeeSauh+CNho1CAV8aDQGs89xzzw2PPPJIGDBgQGxUuPrqq+O5RoBEwHrsscfGY89xnJn9Yjm+Z4JSjsWgQYPi+cK5wTnFec/7br/99rgO9h2cKxx7gr411lgjdhsheCOQfOmll0IpCIbvvPPO+H3wXr4HfmucxwS3NIAQFPI5+R7TeG255ZYLG264YaXb4bOxv6eddlr8rc6Myo5TZfgeaUzk++IaSMPd3nvvHV577bUq/57x999/x98I3zvr4nhwbnH+c21j3Xx3NBbtt99+8Tgl3XrYBg1mXGP4HRPk04XgpJNOitcwrpOSZtEMSZJqwA033ECKseDUuHHjMsu+//77Mxo1ajSjZ8+eM3799dcZSy655Ix11113xvTp03PLfPHFF/G9rBcsx98XXHBBhfux2mqrzejQoUO510eOHBnfz38TLMdrN998c+61qVOnzlhsscVmdOvWLffaRRddFJe7//77c6/9+eefM1ZeeeVy6yxkv/32m1G/fv0Zb7zxRrl5//zzT9H9++OPP8otf84558yoV6/ejK+++qrk43LffffFZQptP41lTj/99NzfyT7dfffdZZZjmfQtx5dffjljrrnmmjFw4MBy33ODBg3KvJ4c8yFDhswoxZZbbjlj9dVXnzFlypQyx6x9+/YzVlhhhTLL7rnnnjOaNm06Y+zYsfF45H9n6e3znaa/87Zt285YZJFFZkybNi2+NmzYsPidvfDCC2Xez37z/pdeeqnMcWPZ0aNHV3pMk2N38MEH517766+/ZrRs2TJ+r+eee27udb7bueeee8b++++fe62q+8Xv7NNPP829NmrUqPj64MGDc68lx4rfXNoll1wSX//pp59mVFXy23/zzTdzr3HONmnSZMZOO+2Ue+2kk06K14cJEybkXhs/fnw8b9LHraJrzsYbbxyPYRrHrHXr1uXek3/uVuU4FZL8RlZZZZV4HiUuu+yy+Dq/gar8npN9571nn312uXOBZe+4447c62PGjCl3jp111lkzmjVrFn8HaSeeeGL8nY4bN67CzySpcpaXS5JqFCWQZFnT02OPPVZmGbJcDNx03XXXxZJnMuM33XRThf2EKQMmE0k5J5nK6kJWnGxrgm2Qlf78889zr1FmSqaVDGOCEtKDDjqo0vWTmST7uP322xfs617Ro7f4zAkyeBwnSqKJE8gel3pckizzww8/HEckr25kCPmcZI7Zx2SiImCFFVYoVxFA1pNy+MowajoZZNb722+/5dZLppzz5pNPPonZvMTll18ey7UpRSfrvu+++8ZS7XycZ2QAExw//qYigLJzkHkki0xVQvozkYVG/mcis7jqqquWfMzSA9PNNddc8dzge6UCJP29UZqdPherul9bbbVVzBgnyFpTup5eZzHJefPAAw/MVFky2VdKyhNkXPk+qGwhkwuytJTFU/WRIDv+119/lfld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fv3119x7x40bF7bffvuw0korhVVXXTUMHjy4pHmqOwy6azEC1++//z5eKPr27Rv69+8fLrjggjjv77//joHfUUcdFbbaaqsqrfeGG26I633zzTfDRhttFHbZZZfw/vvvV9t+0wjw1FNPhZEjR4YscAHkYnfYYYcVnD958uR47JZaaqnw2muvhRdffDEGwATe06dPL7reP/74I77v5JNPLjh/zJgx8YJ89dVXx4v1JZdcEoYMGVJmeS7KO+ywQ9hiiy3Cu+++GwPwn3/+Oey8887V8MklSZJUVYccckg4+OCDw9ixY8MJJ5wQEzv5rr/++vD222/H6aOPPgr169cPl112WZy3xBJLxPtJ7u0++OCD+Df35ZgxY0bYaaedwn777Rc+/vjj8OGHH4bddtut0nmqWwy6a7HGjRuHxRZbLLRu3ToGmATXDz74YJzXrFmzcNVVV4WDDjooLlMVZH95D619Z511VsyepwPkr7/+Ol4QWG6BBRaIQWQ6U0u2er311ov7wDIE7l999VVuPq/36NEjnHjiiRXuR0Xb4UJ20003xSx8kplPsuRnnHFGOProo2OWv1hw/Msvv8TKAFoVV1tttZiR/vHHH8vsZ74+ffrEfSZLXQgBOQ0WHTt2DMsuu2zo2rVrbBG99957c8u89dZbsUFkwIABMRO+9tprx2W4SFcU8EuSJKn6jR8/Piaa9tlnn/g3FYjcg3766adllqMiknttKky579xmm23CsGHDcvfkJLvAfd7vv/8el8HTTz8d55MQSiy66KKVzlPdYtA9G+HHnl/KPCsItmnVAxcYEBiSESYz/MILL4SXXnopzDPPPDHgZNu8h5LvDh06hPfeey+88sorseUwufAkCJrJnt9zzz0Ft13ZdghUCciTbD8TZUGlINBecMEF42djXX/++Wf89yqrrBKWXnrpUJ0mTpwYGwwSlB7RMkpwzkWZ+VywuYg3bNiwWrctSZI0J5s+dUqlEwFwRRPZ7cUXXzxWYoJ7VqohKftO4x6O5NakSZPifepdd91VJunEPSXl5QsttFCsQiUJBLLXdCfcY489wlprrRUz259//nml81S3/PfsU61GaQotZZQq9+rVa5bXt+eee4a55porBqOUSxOIJqUud955Z3ztuuuuywXSBJBko8k0r7vuujGQ3G677WImFwSz+Si76d27d+jXr1/BftmV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eGCYNm1abv64ceNiPLXSSivFOGnw4MElzXv44Yfj+lZYYYWw8847h0mTJtWZr6zKmW6Cpe+//z58/vnn4ZJLLglXX311OP3006t1pwi+TjvttJCF33//Pay55prhiiuuKLrMMcccEx5//PFwyy23hI8++ij06dMnBuEPPvhg0fcQLO65555h5MiR4ZVXXgmtWrUKHTt2DN9++22c/8cff4S33347nHrqqfG/9957b/j4449D165dC66PxgwC8zlRgwYNwlNPPRWP1ewqfeGRJEmSZgeHHHJIOPjgg8PYsWNjQrBQUvP666+P8QoTsVD9+vXDZZddFufNmDEj7LTTTjF5SCzz4Ycfht12263SeZMnT47BOwlPAn/inLPOOivUFVUOuhs3bhwWW2yxGFSSZSSj++STT5ZpGTnnnHNiFpwsMQHuPffck5v/66+/hr333jssvPDCcT4tHTfccEOZbRDgEvB+8MEHRfejou18+eWXYfPNN4//JutMEJ+cUNtss00YMGBAPCGKefnll8P+++8fNttss5hF5sRk/enMdb5bb701HH744TE7TQvOddddF/fx6aefjvPnnXfeeJw48Wj52WCDDcLll18e3nrrrdgilPbYY4+FESNGhAsvvDDMDD4vjSHbbbddaNq0aVhllVViQ8Cnn34aPxOZdlq4Pvvss9x7+PcOO+wQFl100TDPPPPEli8C4zQaW7bddtt4vDnut912W7ksOxnrnj17xu+3RYsWYYsttgijRo0qsx6236NHj3DiiSdW+Dm+/vrreLzmm2++sMACC8T947tF//79w0033RQeeOCBXPVFsSw5n/moo46KDRmsh/OX96fxHbB+Pjv7zXZ//PHH3HyW57vle+WzU40xs8dakiRJ+reNHz8+vPnmm2GfffaJf3fr1i3eb3Pfmsa9OzFeo0aN4r0u8dOwYcPiPGIb4sFdd901tzzxQ2XzHnvssbDWWmvFOAnETbfffnuoK2apTzdBMQEqX0iCQPjmm2+O5diUKxx99NHxi33uuefifDK9tHpw4Gk5ueqqq8JCCy1UZr0bbbRRDGIqCsoq2g4NAsOHD4/L0cpCsJi0zpSCIImsNllqWmzIyNIaROa6VGS2KSknyCtm4sSJ8UQmqEwQ6B100EHxxCaIm1m0HNHKRGk6J/dee+0VW7ZOOumk+GPjc9G4kaD1qUuX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OnWKscK7/z8RcO+9995x3i+//BJ69eoVnnzyyTiPQL0q8dTsZo4JutG5c+fw/fffh88//zxccskl4eqrrw6nn356tW6DQPO0004LWfj999/DmmuuGa644oqiyxxzzDHh8ccfD7fccks86fv06ROD8AcffLDCIH/PPfcMI0eODK+88kpo1apV6NixY/j222/j/D/++CP+iE499dT433vvvTf+aLp27VpwfTRmEJjPDAL8OQEXmL/++qumd0OSJEmaKePHjw9vvvlm2GeffeLf3bp1C19//XX49NNPyyw3atSomLRr1KhRjIW22WabMGzYsDjv6aefDo0bNw677rprbvlFF1203La+++67uOy+++6by55zP/3bb7/Fv0lGklScU81RQTdf+GKLLRaDSrLPnBy0niT4cs8555yYBSdLTIB7zz335Ob/+uuvsfVl4YUXjvNXWGGFcMMNN5TZBgEuAe8HH3xQdD8q2s6XX34ZNt988/hvss6cuEmrDifwgAEDYmtRMS+//HLYf//9w2abbRaWXnrp2DLF+tOZ63y33nprOPzww2N2mpKQ6667Lu4jJz7mnXfeeJxolaIsZIMNNgiXX355eOutt2K5SNpjjz0WRowYES688MJQCj7fVVddFQN4sugDBw6Mrz/wwAOxtYvKgWWXXTacccYZZYLYiy++OJd55/tk/8nyz4z+/fvHz87FgWPG591jjz1yP/Ike3/UUUeFRRZZJO7TxhtvHN54441y1Ql8/nXWWSeeay+++GL8Hmilo/GD75OLDJUFNKB07949NG/ePCy//PLxfZIkSVIWpk+dUnDinrTQBALsxRdfPDRo0CD+zb3uUkstVe7+n3tfEnyTJk2KCbS77rorxjQgs03sxL01JeLEMSRAC3UN7dKlS7zXxkILLRSrdYkHWrduHXr06BGXmVP99wjPgQiKCVD5EhMEwgTMfMEE1JRz07LDidKhQ4eY6eXEIUDiRKCV588//yyz3o022iiWX5x44onh4YcfLrjtirZDMDd8+PDYkkQ2uUWLFjEwLxV9LjjpOTHJNhMMsj9k9ktFZpsfzAILLFB0mYkTJ8YfXrrf9I8//hgOOuigWPbetGnTKgW95557brj00kvjj/qFF16IJSiDBg2KZe+fffZZbDxAUplA2Qrzabjgh0vQTYb9yiuvDDODbbDffGc0rtDAwD4l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kqSMGHRLkiRJkpQRg25JkiRJkjJi0C1JkiRJUkYMuiVJkiRJMuiWJEmSJGn24iPDpFqqz+ARoVGTpjW9G5IkSZoJQ/p28bgpsrxckiRJkqSMGHRLkiRJkpQRg25JkiRJkjJi0C1JkiRJUkYMuiVJkiRJyohBtyRJkiRJGTHoliRJkiQpIwbdkiRJkiRlxKBbkiRJkqSMGHTP5pZeeulw6aWXVrhMvXr1wv333/+v7VNt2HYpx6UUm222WejTp0+17JMkSZKU9sknn4T27duHFVdcMbRr1y6MHj263AH6559/wrHHHhvatGkTVl555XDggQeGadOmxXlffvllmGuuuULbtm1z02effRbnffHFF2GdddaJr/HeXXfdNfz6669x3hNPPFHmPUsssURYe+21/XIyYtBdAw444ICw4447lnv92WefjUHqhAkTQm1XalD7/fffh2222Sb82954441w8MEHl7x8sWN/7733hrPOOiuDPZQkSVJdd8ghh8R71rFjx4YTTjghxgn5rr/++vD222/H6aOPPgr169cPl112WW5+8+bNw7vvvpublltuufg6gfSLL74YX/vggw/i3/3794/zOnXqVOY9BNx77733v/jJ6xaDbmVqscUWC40bN/7Xj/LCCy8cmjZtOsvrWWCBBeKFTJIkSapO48ePD2+++WbYZ5994t/dunULX3/9dfj000/LLDdq1Kiw1VZbhUaNGsUkEQmtYcOGVbp+7sHnnnvu+O+///47/P777/H9+b777rvw9NNPh3333bfaPpvKMuiu5YYPHx5WW221+KMhu3zRRRdVWqKy6aabhiZNmoRVV101PPnkk+WWef/998MWW2wRf4QLLrhgbF2bPHlyhSXVZOaTljfmf/XVV+Hoo4+OP9xCP95C5eWUv/A32ePNN988BsVrrrlmeOWVV3LL33jjjWG++eaL71lhhRXi56AljgtQgpKZHXbYISy66KJhnnnmiaU4Tz31VIWZeLZ73XXXhZ122ilul3U/+OCDuf1ifzD//PPHZdOfNX0sWO/ZZ58devToEYPxpZZaKlxzzTVltv3yyy/HMh32fd11142fhXXSiihJkqTZy/SpU2ZqIsitaCK7TYJq6tSp8e8//vgjtGzZMowbN67M9ikR57510qRJYfr06eGuu+6K968J3sv9MNnqM888MwbYCcrQuS9daKGFYpxwxhlnlPt83H936dIlLLLIIhkfybqrQU3vgIp76623wm677RbLQHbfffcYzB1++OExUC5UekJ/j5133jkGo6+99lqYOHFiueCZHyVB7IYbbhhLsGlh69mzZzjyyCPjD64UBM0EywTrBx10UJW/wn79+oULL7wwBr78e88994wteg0a/Pd05IIzcODAcPPNN8cWPT7zHnvsEV566aU4nwYCLgwsQ2MEy22//fbh448/jkFwMVxkzj///HDBBReEwYMHxxIaGg9atWoVGzdoXWQdLVq0yLUKFkLDByXnJ598crjnnnvCYYcdFjp06BBWWmmleDFkX9i/2267La6/sj7hXGiZEqxDkiRJtcPQft1m8n2lLUcSqSLc93NPyf0m96hkvUeMGBHnLb744uHbb7+NAfMvv/wSYwbuVY8//vg4n3tpEj8E37169QpXX311bh5mzJgRhg4dGgYNGjRTn1GlMdNdQx5++OH4A0tP+X2fL7744rDllluGU089NQ6uwA+O4JigsRCyvWPGjIlBKEExGW+ysmkEglOmTInLMKACGe/LL788lqj8+OOPJZdcM2ADmV5a55iqgoEgtt122/iZCIS5iKTLaGjBY59oGKBl76abbooNDq+//nqcz2ej/wv7T+BOAEzflSRzXQzHjwB/+eWXj8eF4J118ln4TOCCxeeZd955i66HgJqGANZD3xtaDkeOHJk7vmS1r7322lhpwHd63HHHVbhf55xzTtxeMtEIIEmSpLopP4nEvSVJuHfeeSfeE3OPSSUsSEAlGWruZ6nGfOGFF8qtk+C7e/fu5crSn3vuuRgbkJRTdsx01xDKma+66qoyr5GdTvp0gIESKKNO22ijjWLZNGUjBItpLE/AxiAJCQLX/GUIWps1a1ZmnWTJyfKSJc/aGmuskfs3rXMg485ojCDjTYlMgtcpOWff11tvvRgsc+F55JFH4kBtf/31V/jzzz/LleJUtF0+Pxlttjsr+89FkCA9WQ/HkPmUlifY54qcdNJJ4ZhjjimT6TbwliRJqh16DBw+U+8b1LvyQLZz587x/p/pvvvui0k3EjtpBMXc69IN8ueffw7nnntubqBf7kF5vWHDhrFykorUtdZaK84jsZWMc8S9/t13313mPjYZpI3EVH5coepl0F1DCPryf1DffPNNqA0YEZFSkzSyz9WFi0Ii6Q/OhaAqmXL6qlOizjGkzGaXXXbJPTqhlO0m267Kdqt7PQlaKGtisDlJkiRVrmHj/yVTqiKd5CqGMYcIeikJJyFEhSfo/tm1a9c40WWUcYa4R+ees3fv3rE7Ixid/LTTTotBM4koqljpvon33nsv92/eR5/vdBk56yVIZ7wnZcuguxZbZZVVcv2YE/xNWXah1iiWZ8Axsr9JBvnVV18ttwx9t+nbnVwIWCc/YvokgxYx1pEgq85jBpLBxpISlfQgDdWJCwYjOSYZYrLHPMqLfU/2l4sTg6KBzHd6MImZwefBrH4mjuEtt9wSWxqTQJq+85IkSVKhe8f0oMLpYDxBJSoVn4UwnhNTIQTmSXBeCN0aiQmUPft012J9+/aNw/dTPsLohrR80deZTG8hDKpAQL7//vvHRwvQnyNp3UoweBilzyxDIE1fZAZV4BEBSWk5LWSUbjPRR5yBwvKfX80o3s8//3wcuIEyl+pEJpl9otyeweQIsDfYYINcEE4/blrlGBSCz7nXXnvNUqYZrVu3jhlr+tr/9NNPZUZzr4pkXxhkjovjE088ETPyqGiUd0mSJElzJoPuWowSEB4JcMcdd8RBwygd4TEAhUYuB9lq+oLQ54MAlbIURvhOo08HgSCjG9JvmrJsBmsjmE8wAANB+X777RdHSVx22WXLZLnBfpBdZgAzMuPViX1kgDICWPqbM8jcnXfemZtPXxf6rrRv3z623jHwA8dqViy55JJxULcTTzwxNj4wYN3MoCzooYceig0CPJ6BRg++N6T7eUuSJEmqG+rNyO+8K9UgSt95xFZ+Zn12duutt8bRIuk3U9GjyNIDqVHu033A3aFRk6b/yj5KkiSpeg3p28VDOhuY9P/33tyrk0DLgn26pWrG49ioDiB7Tvk7WXuet15KwC1JkiRpzmLQLVWzH374IZaU818GtNt1113LlflLkiRJqhssL5dqGcvLJUmSZn+Wl88eJv0L5eUOpCZJkiRJUkYMuiVJkiRJyohBtyRJkiRJGTHoliRJkiQpIwbdkiRJkiRlxEeGSbXUpb06ZjaCoiRJkqR/h5luSZIkSZIyYtAtSZIkSVJGDLolSZIkScqIQbckSZIkSRkx6JYkSZIkKSMG3ZIkSZIkZcRHhkm1VJ/BI0KjJk1rejckSZJmW0P6dqnpXZDMdEuSJEmSlBXLyyVJkiRJyohBtyRJkiRJGTHoliRJkiQpIwbdkiRJkiRlxKBbkiRJkqSMGHRLkiRJkpQRg25JkiRJkjJi0C1JkiRJUkYMulXU0ksvHS699NIKj1C9evXC/fffXyNHsTq3/eyzz8b1TZgwoeT39O/fP7Rt27Zati9JkqSa8cknn4T27duHFVdcMbRr1y6MHj263DL//PNPOPbYY0ObNm3CyiuvHA488MAwbdq0cssdcMAB5e4pX3vttbDmmmvG9W+xxRbh22+/zc3bZZddwhJLLFHl+1DNXgy65zD80HfcccdqCSprc7CP77//PmyzzTbVsk0utKxv3nnnDdVps802C3369KnWdUqSJKn6HHLIIeHggw8OY8eODSeccEK8n853/fXXh7fffjtOH330Uahfv3647LLLyixz7733hoYNG5YL1vfee+94b8v6u3TpUube8NBDDw3vvvuuX+cczqBbs63FFlssNG7cuFrW1ahRo7g+GiYkSZJUN4wfPz68+eabYZ999ol/d+vWLXz99dfh008/LbPcqFGjwlZbbRXvGblfJPEzbNiw3Pwff/wxnH322eHiiy8u87633norNGjQIGy++ea5AP+hhx4KU6ZMiX+zzkUWWeRf+KSqSQbdddjw4cPDaqutFgNXsssXXXRRpaU3m266aWjSpElYddVVw5NPPllumffffz+Wzcw999xhwQUXjK2GkydPrjDzS2Y+aVFk/ldffRWOPvroeEGrKAhOl5d/+eWX8W9aGLmoNW3aNJbxvPLKK7nlWe/2228f5p9//tCsWbP42R999NGilQDXXnttaNWqVVzXTjvtFC+i8803X7n94ILL8SNLvscee4Tffvstvs5neu6552IraPJZ2E9JkiRVn+lTpxSdfv/996ITCLAXX3zxGBgn95dLLbVUGDduXJltrLPOOuHBBx8MkyZNCtOnTw933XVXmfu6gw46KJx//vmhefPmZd7Helq3bp37m/ktWrQI3333nadAHfLfs0t1Dq1uu+22W+yXvPvuu4eXX345HH744TFQLlRSQ2nMzjvvHBZddNHYL2XixInlgmcuXp06dQobbrhheOONN2LLYc+ePcORRx4ZbrzxxpL2i6CZYJlgnYtXVfXr1y9ceOGFYYUVVoj/3nPPPWNLJRfSI444Iva9ef7552PQ/eGHH4Z55pmn4HpeeumlWO5z3nnnha5du4annnoqnHrq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9C8y6Fad8Pzzz8eg+9FHHw1vvfVWbDXefvvtwzvvvJNbZoEFFgjNmzev0f2UJElzpvHjx4c333wz7LPPPvHvbt26ha+//rpMFjtJHkydOjVMmTIlzJgxI0yaNCm0bNkyziMQ33jjjXP3KwTPw4YNi/9mPayfLHliscUWi//l3qdBgwbx/icJ/h966KG4DUnZM+iejQ0fPjyWDjVu3Dhmly+66KJKS5o23XTT0KRJk1iSRGtpvvfffz+WHM0999xhwQUXjK2xkydPrrAEm8x80lLL/K+++iocffTR8X8aTIWwv6AsimWSv/HAAw+EtddeO+7nsssuG84444zw119/xXlnnnlmWGKJJcJ//vOf3PLbbrtt/J8IrbjF1kvL7vHHHx9LuVZYYYVw9tlnx//yP5xin433DhgwIOy3335hnnnmCa1bt46tzz/99FPYYYcd4muUffE/uLRrr702tGrVKjRt2jTux8UXXxzmm2++Cr8bSZL075s+dUq1Tr///nvRiQwzQTABNX//8ccfMZj++OOPyyzHfdhGG20Ul1188cXD008/He9/QGb7qaeeCj/88EMMyG+99dbw22+/hV9++SVmvlnfYYcdFpfr2LFjLrkwbty4eB+TIGin8u+7777ztJP+BQ3+jY2o+tFiudtuu4X+/fuH3XffPbz88svh8MMPj4FyoVIlAtKdd945LLroorFPz8SJE8sFz1zoO3XqFEuv33jjjdgi27Nnz3DkkUeGG2+8saT9okSb/kIE6wcddFDR5Vj/IossEkukOnfuHOaaa674+gsvvBCD3EGDBoVNNtkkfPbZZ3FdOP3002MJ1eOPPx7367777gtXXHFF/Oy0/NavX7/oegsdD/4nRXa7IpdcckkM0E899dT473333Tf2xaJ8iz5VlIaxv5RwEeRTDnbooYeG8847L3Tt2jX+j5H3VoT/+TIlaNGWJEnZG9qvWzWvr/JlaLRP22677Youy70K/bK5t7jllltikuHYY4+N7+Eeh8Z9kMUmQfH666/H+5arr746PPbYY3G5L7/8ctY/mKRZYtBdCz388MPlLsh///13mb/JntLHJwnoGBSDFk4CwUJBN8HfmDFjYj9mMsXgorzNNtvklrnttttimdHNN98cmjVrFl+7/PLLYxk2QSQBe2UIYvmfAC2oSUlTIfStBhng9HJktfmfy/777x//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0aNHl1vmhhtuiNfDZFpooYXCzjvvnJs/bty4sP3224eVVloprLrqqmHw4MGVzps8eXL8/w7r4houSZI0RwXdZEjfeeedGLiNHTs2PPjggzHj/J///Ce3DIE4AXlttO+++8bs+A477BBGjhwZA+lTTz01PPDAA2HEiBG55Zo0aRKuv/76eFNZGQLuCy+8sEr78fzzz8eg+9FHHw1vvfVW2HzzzePNJcc28dxzz4UjjjgivPrqq+HJJ58M06dPDx07dgy///57ufXRaEDAXYrPPvssrLLKKqFNmzbxuyr1ff+madOm1fQuSKrEIYccEg4++OD4/4ITTjghHHDAAeWW6d69e7zOJhPXnL333jvXWLjTTjuF/fbbLzYofvjhh2G33XardF7Dhg3j9p566im/I0mSNGcF3ZQhkyE977zzYpDYunXrsN5664WTTjopdO3aNbdcOtuaZIPvuuuusMkmm4S55547ZkS4SXvjjTdilpmMM1lasugJbt7I7J5xxhm5bDCZ54qCsalTp4Zjjz02LLnkkqFZs2Yxm/3ss8/m5rMPt956a7j99tvDySefHPdj6aWXjgH4M888Ez9TgswKf/fr16/S49KrV69w8cUXh/Hjx5d8LAmSjz/++LgPK6ywQjj77LPjfx966KHcMo8//ng8DquttlpYc801w4033hgzPwTpadzIXnTRRWHo0KGVbpcGEpYl6Od74W8MGzYsfhdk1bkp3muvvcp9HrJY2223XfwuWI7vkwA+cd1118VgngaLlVdeOVx55ZVl3v/NN9+EPffcMyywwALx+2F7r732WpxHVQBZMNaxzDLLxHWAz8v3wznCdrnp/vHHH3PrTN539dVXh1atWoWmTZvGZSZOnFjydyGp6rg+vPnmm2GfffbJNch+/fXX4dNPPy36Hn7vvC/5/8XTTz8dG2h33XXX3DKLLrpopfN4fYsttjDLLUmS5rygm8CHiYCaALcqTj/99HDKKaeEt99+OzRo0CAGdQSdl112WQzkuVE77bTTyryHm66PPvooBs4EypRkE4QXc+SRR4ZXXnkl3HHHHeG9996LN2udO3fOZasJuAmmCeLyEYDml1mfe+65Yfjw4fHGsiIEkssvv3w488wzw8z6559/YsacgLSYJJBML0NJPMfyiiuuiMFyZTiGBx10UCxnp7Scv0EW/ayzzgqjRo2K3y+N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bYcSkM033zz+m6wzP7ikJYwf3oABA2JLVjEvv/xy2H///cNmm20Wll566diixvrTmet8t956azj88MNjdppSluuuuy7uIz9gzDvvvPE40WJGycoGG2wQLr/88vDWW2/FUpa0xx57LIwYMSJceOGFoRQXX3xxLoPO98J+kK1P9O/fP+5X2qWXXho/W+Kvv/4KRx11VJhvvvnCggsuGFsPOQZ8x5IkSdKsmD51SqUTybFiE9ltYpAGDRrE9XF/v9RSS5W7j15nnXViomzSpEmx0vSuu+6KsQHIXhOD7LHHHmGttdaK8QCJxMrmgX2gpH3ttdcOZ555Zvj7779DXfDfo60aRVBMgNq6devcawTCBMyUYxNQU85NixQncYcOHWKml5OawHKhhRaKrVN//vlnmfVutNFG8Yd14oknhocffrjgtivazsYbbxyGDx8eW8DIJrdo0SIG5qWirwg/1h49esRsM1ls9ofMfqnIbPNDX2CBBYouM3HixHjBINBN/Pjjj+Gggw6KZe9NmzYtaVuUzQwaNCg2QHBxIOgmU37llVeWvL/nnXdebDigAWSVVVaJZTjsQ9J4UawEninBxU2SJEnKN7Rft0oPytB+s37cSLTRTZW4g/t/EoQks5Ik0zPPPBNeffXVsNpqq8U4goQYGfSK5i2++OKxenWRRRYJv/zyS9h9993DRRddFO+353QG3TWEIHieeeaJJyYBFwEfGVvw99lnnx2eeuqpsOGGG8bXll122fDiiy/GMnROflqjaD1ad9114/x0tjU/qF5jjTXCCy+8EPtKp5WynSTY5ceRDmpLwaAJZLfp001rGp+RPtubbrppyesgU0zAzg+9EPrBswwl6TQKJH1JuFAceuih8fgkrXKVofw9wfEkk886qhJ085lPOumkXAUA3+mjjz5a4Xv4js4444yStyFJkiTNCmIQ7s+5byauINudRkKLKk8m3HHHHTGIBssShyR/77vvvjFZRaKsonmNGzeOMQWIMUjM3XbbbQbdyg6Zz6uuuiqWWJD55aQnowyy1mR4t9566zLvYcRATmIcdthhcXn6NdPnmfJlMsv5GLyMgQzIdr/00ktl5pWynVlBAEorF9lusvhk0Y844ogKg+i0c889N/7AyZAzKFw+fry0nHGx4Fimt/vbb7/F4LcqaHwgAB4zZkzMNnMxIqjnGJWSLSfjToZ9vfXWy73GCI2U51AiXwz7Sf/3BNumvF2SJElK6zFweKUHZFDvTpWOLUWlK0kqqlpJkC2//PJlluEemCpaupj+/PPP8b78rLPOynUzJTtN1nrJJZeMCSYqPBkguqJ548ePj+vj3yT/GJupOmKO2YGZ7hpCv+Hk5B46dGjs68wogQzHn/QjfuSRR+LJmkYLETihKfngRKaP85ZbbhkD2kL9l8mi8kiA/BHGS9nOzOJHevLJJ4f77rsvbLvttvE1Mu6MUsg+VhZ0sww/bgJh3lcs4OYYUMKSZLnB3wzClv8ZyHrTD/6mm24qtz6y4dttt11szBg4cGBsfSPjnzwegaCbTD0Bfv5+zCr2c1aPtyRJkuZ8DRuXT0QVijMqwphJBNxUvHIPnYwL1bNnzzg4MRPJJMZl4v6X5FHv3r3jk4uS9VM2zj0+98aMuUSirLJ5L774YhzkmaQUya0tttgi9OtXDbXwswGD7lqAk5kAlWznXnvtFbPTBGGUelDiXQz9rhmki4nS8eOOO65g0E3WlEHV2EZ6WP5StsOIhajqIAcEo0x8tjR+ZBVlfXH++efHwPeJJ57Ilc8XCrh5xiCjnDNgWRr9sikNT/A4sU6dOoU777wzrL/++gW3yUBs7Bf9SpJ9ZsCI/OP9ww8/xAsIJTdIP4aMiwqjM77xxhu5EnqOG9UI+QOwSZIkSTWBwYhJUBUKxhPc0/L0oWKotGWqyrydd945TnWRQXctwbD6BM08gosH0TMdffTRMRBkQDNamygPpzWKIJtWIsqW6S9BeQZ9xCndqKiEmf7UX3zxRRy0IHlOXmXboSycAJP1d+nSJQ6kQF90suTpRwuwXgJQMsT05eD9BPJ8Jt7Dep577rlw8803x1HCKxqIjM9G/w76VRPkgm0yEXDvsssuMZBlnwhqk2XYNo0E+X1SeB9ocKB8phCqDlg3pem04nEM8p8pTmvfTz/9FBsF2Aceh8ZAdukse69evWKJOutj9HXWx0jzSZAuSZIkqW7xkWG1BH26yUYT0NHPmz4TjFBOAEcwTd8LysAZWRsElwTSlF6TVSWDnJRuFEJAyoBj9M9Iq2w7lJ1Tnk6fcFq82EcwAiF9MJJ+GGTp+Xf6ueDsD48EoKSbrDrl4mSwGZysGPpmU85NUMsIh8mUZPDpH0If8W+++SZmj9PLMAL8zKK8n8YAgv42bdrEEcg5JmkcHwZVo2EkefQZjRZpyaBu9KNncDoCfrLshfqkS5IkSZrz1ZuR30lVUrWhgoBgnXL4ZPCJyjCQGqXq3QfcHRo1Ke1xZ5IkSRKG9O3igaiC5N6bit90BWt1srxcqkYM7MYzDCmtp+yfR4ZRek9ffUmSJEl1j+XlUnX+oOrXDzfeeGMsq99oo43C+++/H0dgr6i/vSRJkqQ5l5luqRoxUnz+89AlSZIk1V1muiVJkiRJyohBtyRJkiRJGTHoliRJkiQpIwbdkiRJkiRlxKBbkiRJkqSMOHq5VEtd2qtjaNGiRU3vhiRJkqRZYKZbkiRJkqSMGHRLkiRJkpQRg25JkiRJkjJi0C1JkiRJUkYMuiVJkiRJyohBtyRJkiRJGfGRYVIt1WfwiNCoSdOa3g39S4b07eKxliRJmgOZ6ZYkSZIkKSMG3ZIkSZIkZcSgW5IkSZKkjBh0S5IkSZKUEYNuSZIkSZIyYtAtSZIkSVJGDLolSZIkScqIQbckSZIkSRkx6JYkSZIkKSMG3f+ievXqhfvvvz/z7Wy22WahT58+mW9H0r/rk08+Ce3btw8rrrhiaNeuXRg9enS5ZW644YbQtm3b3LTQQguFnXfeOc774osvwjrrrBNfb9OmTdh1113Dr7/+Wm4dBxxwQLxeTZgwIfcay+29995x26uttlo48cQTM/60kiRJcwaD7mry008/hcMOOywstdRSoXHjxmGxxRYLnTp1Ci+99FJume+//z5ss802oTaaMWNGuOaaa8L6668f5plnnjDffPOFddddN1x66aXhjz/+iMv0798/3ogfeuihZd777rvvxte//PLL+Df/5e9FFlkk/Pbbb2WW5Waf9RRz7733hq233josvPDCoUWLFmHDDTcMTzzxRJllzjnnnBhwNG/ePG5jxx13DB9//HHRz8Ux/7caPKQsHXLIIeHggw8OY8eODSeccEIMjvN17949/iaTiWsRwTKWWGKJ8OKLL8bXP/jgg/h3/u+R32DDhg3LrbdHjx5hrbXWitsm2LdhT5IkqTQG3dWkW7du4Z133gk33XRTvCl98MEHY8b5P//5T24Zbn4JyGujfffdN95E77DDDmHkyJHxpvzUU08NDzzwQBgxYkRuuSZNmoTrr78+ZtwqQ8B94YUXVmk/nn/++Rh0P/roo+Gtt94Km2++edh+++3jsU0899xz4YgjjgivvvpqePLJJ8P06dNDx44dw++//15ufTQaEHBLs7vx48eHN998M+yzzz65a87XX38dPv3006Lvee211+L7unbtGv/m+jP33HPHf//999/xN5P+ffz444/h7LPPDhdffHGZ9bANtn3MMceUuZ5JkiSpcgbd1YASzBdeeCGcd955MUhs3bp1WG+99cJJJ52Uu9lFOtuaZIPvuuuusMkmm8QbYbK3BOxvvPFGzDKTcSZLSxY9QWaLzO4ZZ5yRywaTeZ42bVrR/Zs6dWo49thjw5JLLhmaNWsWs9nPPvtsbj77cOutt4bbb789nHzyyXE/ll566RiAP/PMM/EzJVZaaaX4d79+/So9Lr169Yo379z0l4og+fjjj4/7sMIKK8QAgP8+9NBDuWUef/zxeBwocV1zzTXDjTfeGMaNGxeD9DQaDi666KIwdOjQkrY9bNiweNzJoBNQ7LXXXmX2ne1QAZDG95kf1A8YMCBm4FlPz549YxkuGX7NWaZPnVKtEwFwRRPXBs5Lfs/8TQVKy5YtY5VHsffQQEaDWjpzzbUiKTun8YxrSeKggw4K559/fjx30z788MO4Lap5KE+nkSvdECZJkqTiGlQwTyUiOGYiANtggw2qlM0+/fTTY6BJWTrlmwR63PBedtlloWnTpmG33XYLp512Wrjqqqty73n66adjxpnAmeCdctIFF1wwDBw4sOA2jjzyyHjTfMcdd8Ry0vvuuy907tw5vP/++zGgJeAmmCbIzkdAOe+885Z57dxzz41BMZkvgtRi9txzz5iJPvPMM8Pll18eZsY///wTM+YLLLBA0WUmTpwY/5tehoCEY3nFFVeUnJEjY37WWWfFY0GwTVaP4J6se6k4lnwPV155Zdhoo43iMSfwX2aZZYq+hyCKKTFp0qSSt6eaM7Rft2peX2nLca1J22677Youy7WEipC0Ro0axQYpgm8axq6++urY0HXdddfF69AWW2xRbj1//fVXeP3112MjGMs/9thjcbtcfwqVokuSJOl/zHRXgwYNGsQsKKXlZEIJtsgYv/fee5W+lww0fb9XWWWV0Lt375itpaybddB/8sADD4zl3vk3zWRvyfRuu+22MagdNGhQDFDzkQFmYKW77747ZtSXW265uM2NN944vg6yXQSapVp77bVjYwB9SitCwE6ATl/xzz77LMwMytMnT54ct1cIn5my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1HhCso/vvvtuhdu+5JJLwvfffx+XGzt2bCVHRpIkSVJddMghh4SDDz44xgzEJoXiq+uvvz68/fbbcfroo49C/fr1w2WXXRbnderUKcYcyUTAvffee8d5xE1PPfVUGDVqVJxYtnfv3nEeMVD6fdttt13ufbVZjWW6abEgwPv8889jsHf11VeH008/vVq3QaB52mmnhSzQAkPLyxVXXFF0mWOOOSY8/vjj4ZZbboknWp8+fWIQ/uCDD1YY5O+5555h5MiR4ZVXXgmtWrUKHTt2DN9++22c/8cff8QT99RTT43/vffee8PHH38cunbtWnB9NGYQmJfis88+C+uss05YYYUVwiKLLBJqo6R1TJIkSdK/b/z48eHNN98M++yzT/y7W7du4euvvw6ffvppmeUImEkgNmrUKMZl22yzTRg2bFi59ZE8fPrpp8O+++4b/yY4b968efz3jBkzwqRJk+L785GwvfXWW2MGvbarsaC7cePGYbHFFotBJdlnvpAnn3yyTDnCOeecE7PgtHYQ4N5zzz25+b/++mts1Vh44YXjfALFG264ocw2CHAJeD/44IOi+1HRdihj2HzzzeO/yTrzZSetOJw0AwYMCDvttFPRdb/88sth//33D5tttlksfaA1iPWnM9f5OHEOP/zwmJ2mDOO6666L+8iJiHnnnTcep9122y2stNJKYYMNNgiXX355eOutt8K4cePKrOuxxx4LI0aMCBdeeGGoDPs3fPjwcPPNN5f5nBdffHEuq853xb6RwU976aWX4mds2rRpPE60RvH9VHZ8E5Sj0ErVokWL+AMj008DANgPzo+BAwfGxgM+c1JassUWW8R1LrjggvHYpvcred8ZZ5wRzxHWfeihh1YYtP/nP/+JDR5LLrlk/Cx87ttvv73ccbr00kvLvMZ31b9//9zfY8aMCRtvvHGstKC6gZa6YtUQkiRJUk2ZPnVKuYnkYqEpQYC9+OKLhwYNGsS/uc9daqmlysUiJPNINk6aNClW69511125MvG0G2+8MXTp0qVc0o/4kHjx7rvvLpjoJPm47LLLxnvx2u6/R6qGERQToLZu3Tr3GoEaATPl2ATUlHPTmkIA1aFDh5jp/fDDD2NgudBCC8WWlT///LPMejfaaKNY8nDiiSeGhx9+uOC2K9oOgROBKK03ZJMJ3AjySkU/B060Hj16xICRLDb7Q2a/VGS2OUkr6qswceLEeLKn+2H/+OOP4aCDDoqBHgFkZd54441Yps5npOwj+Zy0NA0aNCgGzVQlEHSTPb/yyivjfMo6ttxyy/gZeR8/PrL0f//9d0nfIxn8TTfdNAbtzzzzTNw+Qfxff/2V2zcaHHg9aZThR09gv+GGG8b9prWtZ8+esZGFH236fQS+HHd+4N27d48BOgF8IbSWcXGgRIbtPfLII7HFbbnllgvrrbdeCd9WiJ+bYJ8Lz2uvvRZ+++230Ldv3wrfQxcApgQXJkmSJClrQ/t1K/Ba4WXJOlcFSTC6+nbo0CHGFgTRJATz1zl06NAYb+QjcUUCj3t3piT+SJevzw5Z7hoNugmC55lnnhhcEXAQ3JGxBX+fffbZ8UATWIFWjBdffDGWofPF0ZKy1lprhXXXXTeXgSyEoG+NNdYIL7zwQsygppWynSTYpeWlqoOLDR48OGZg6dNNMMpnpM82QWapCAAJ2DlJiwWKLEOGlkAxOXk5ycnscnwKtSjlIwim+oAfBC1KCUriExxjsvusNznpzz///LiN9I9gtdVWK/n40mpF9v6OO+6I/fvBgAxpZNnJ+FOaAo4hn5usPPPAuUMf+/POOy8suuii8TWW50dMowP7dOaZZ4bjjjsunHXWWfG7yEeGm8EeEr169YqDPNAqV2rQTcMAWXoC/eQ4cpFggLpiOEfJyEuSJEm1HdWvdBMmjiPGIfYgNiPplEZSkGrQ/v9fEcr9fhInJJ577rl4X09CrRDu2UkkkrxLxxtffPFFePXVV2OCdHZQY0E3ZdtXXXVVzFqS+eULI6MMstZkePMDFUqDCbRx2GGHxeXp10yfZ7KLZJbzUd5LBpdsNxnUtFK2MysIujkZyHaTxSfLe8QRR1QYRKede+658eQkgCNjm48MOGXmnOgcy/R2ybCedNJJs/wZCJgJCimZJgPLj4sfBseNYJZM96677lrwvaUcX95PY0gScBdCmXcScIP+8ZSpJwF3UtVASxgVCUnQzTLpLD+BPyXolMSkqyrSWWoaCQiyycCznzQclFIpkGD7XIjSDReVBex8T/T/T3CcWYckSZKUpR4Dywetg3oXDoATJCMZ+IxqVhJ9BL4kGZdffvkyyxEzUIk8//zzh59//jnGNiS/8rPVrGOuueYq80QlkoG8D3feeWdMoqaRWKOb7+zyxKUaC7oJmJIvhoNGgJSUCCR9cynvJfuYxheQ9KmmXOHRRx+N2UVKnAloC/VfJotI9jS/T20p25lZnGAnn3xyuO+++8K2224bX+NkIchkHysLulmGE5OgN/8kSwfcHIOkLDvB3wzClv8ZyEjTD/6mm24q6TOQIaevNQ0cZGvJ+pOlTob7JxitqNy+lONbSrl+OrjO0gUXXBBL5OmznfRjJ9Of7gdOa1t+aQ3fxazgWMzq+SZJkiRVVcPGTWbq3puqVYJlElbEIcnYWnT5ZIBnJrrA0oW0fv36MTnGCORUpiaYT79sxmpKI2vO6OgkxLjvpqsnAX6CddGllKrX2UWt6NPNF0GASrZvr732itlpghAOOCXIFZVEM1AZE9lSSocLBd1kDenvyzb40hKlbCfJsCZ9lEtFIMaUX8ZMKw4nSkUo2SbIpbQ5KZ8vFHDzfDz6T9NPOY0+EZSBp0cEpGSDViKeeVcqBmdjXy+66KLc5yALnEaDAH2nC5VHl3J8eT+NAHymirLdaausskr8oVElkVwUqGJgH5OB1pIRE2n8SAJ7qg7o0lAsi8w6dthhh9xIjHx2+uDzOdLnHOU06aw05S0Jtk8mnT71ScadfueSJEnSnIJ7XpJ8+egSmuBemArVYuhimh6gLV0l+s477xR9H/f83G/PTmps9PJ8lCgTkNLHlxGs6Vt79NFHx4CMPrKUkVM2nWRpeRTYAw88EEuYGf2aPuIEYxWV8BJ8kjlOlLIdypDpj8D6f/rpp1z2lv8mz4cDgRf/Tkbto8WHQJOGAMrDmZ+0yFQ04jl9khkkjuw/fagpr2BKtktwussuu8Rh+v+vvTuBm6n8/z9+IXuWiuxbSJJI4Sv6KmQrpL5FSUibrRJKfEVJKiVlTV9Li1KytJCor6VFqShtfLOkzVKWkJ3ze7yv/tf8z8w9c99zL8c99+31fDwm98ycOefMuc5M87k+n+s6mulcnQFuGZeR1XgKXYTe3dwYaXU4qPQjXqpE0PZ0PDSJmqb4j7zOuI6rgkpNsLZmzRpbhq5Sd5WQxHN81RmiwLVjx472PakjQdtRmXYsytar3F6dLZqETx0PGn+tSc9coCs6HsrKa8I9VUToknTaXrTx3KKxIqqa0KR++oJQD5uCZz/NmK790xwB6pXTPvjLYVRKr+Osx3U8FMj/+9//ts9Fu9QBAAAAgOwtYYJujelWQKQsr3o8VO+v4FPjiRVM67reKlPWLNouA62AT5lSTUymwEfjn2NRabQmHNPYAr+UtqOyaGVxNSZcAZ32URQgalyyG5usLL3+9l8XXPtTt25dGyQqW6pycWWwNRFZLApYFSwqsNZU/O7mMvgaa6wx4r/88oudHt+/jILFjKSSf10yTB0BCt4V5Os4+Smg1yyEyiqrV0rjptUZ4i4hkNLxVZZe5fDqVFAnhWYP10RpyWW9VdauKoCdO3fa46tjpeEFbiI+R48pkNb50aFDB1vm4r+0VyQFxxqfoqoAlcJoXLbmCvDTOaf9VNm9hg3oeX/1hM5DDWPQ+9G+qcRm8OC/p4CMNi4fAAAAQPaWw0vt3O9AFqAxJrt3706Ia2Mr263Lz6kqwx+gx6LMv8ptuj08y+TJF/8kbgAAAEB6TerX+qQ6iHv+329vjTH3z5OV7cZ0A9mJJs/T2HFl2RVoa9IIza4eT8ANAAAAIHsh6AYymC7XpqEMGt9frFgxO1O9JqMDAAAAcPIh6Ea2pEnrMouuC68bAAAAACTMRGoAAAAAAGQ3BN0AAAAAAASEoBsAAAAAgIAQdAMAAAAAEBCCbgAAAAAAAsLs5UCCGtOnuSlcuHBm7wYAAACAdCDTDQAAAABAQAi6AQAAAAAICEE3AAAAAAABIegGAAAAACAgBN0AAAAAAASEoBsAAAAAgIAQdAMAAAAAEBCu0w0kqLvHLjJ58hXI7N3IMib1a53ZuwAAAAAkQaYbAAAAAICAEHQDAAAAABAQgm4AAAAAAAJC0A0AAAAAQEAIugEAAAAACAhBNwAAAAAAASHoBgAAAAAgIATdAAAAAABk9aA7R44cZt68eYFv59JLLzV333134NvJbvbv32+uueYaU7hwYdtWu3fvzuxdAjLcDz/8YC6++GJz9tlnm7p165pvv/02yTLTpk0ztWvXDt2KFStmrr76avvcvn37TIsWLexjRYsWDXvdpk2bzIUXXmhfc95555lrr73W7Nq1K/T8Tz/9ZNq0aWOqVatmzj33XDN27FhaGAAA4CSQIUH377//bnr06GHKly9v8ubNa0qWLGl/mH700UehZbZs2WJatWplEpHneWby5Mmmfv365tRTT7U/pi+66CIzZswYG4zKsGHDbDB6xx13hL32yy+/tI//+OOP9r7+1f0zzzzT7N27N2xZ/RjXemKZM2eOufzyy03x4sVt8NugQQPz7rvvhi0zcuRIGywUKlTIbuOqq64y69ati/m+dMzj6fB4/vnnzQcffGA+/vhj21ZFihRJ4agBWc/tt99ubrvtNvO///3P3HfffaZr165JlunWrZv9XLubvs86depkn8udO7d93XvvvZfkdaVLlzYffvihfc0333xj77vPuz6L7du3NzfddJP9vH733XfmuuuuOwHvGAAAANki6FaGdPXq1TZw04/ZN99802acd+zYEVpGP1wVkCeizp072+x4u3btzJIlS+yP5iFDhpg33njDLFq0KLRcvnz5zJQpU2y2LCUKuJ944olU7cfy5ctt0L1gwQLzxRdfmMsuu8xmxnRsnWXLlplevXqZTz75xCxevNgcOXLENG/e3Pz1119J1qdOAwXc8diwYYOpXr26zdCpreJ93Yl0+PDhzN4FZGHbt283n3/+ubnxxhtD31s///yzWb9+fczXfPrpp/Z1bdu2tff1HdakSZMkWW73XP78+e3fx44ds59J9zl6//337fPKfjslSpTI8PcIAACAbBh0qwxZGdLHHnvMBokVKlQw9erVM/fff3/oh6r4s60uG/zaa6+ZSy65xP5QVfZWAftnn31ms8zKOCtLqyy6o6yUMrsPPvhgKBuszHNywdihQ4dM//79TZkyZUzBggVtNnvp0qWh57UPM2bMMK+88ooZNGiQ3Y+KFSvaAPy///2vfU+OykJ1f/DgwSkelz59+pjRo0fbH+zxUpB877332n2oWrWqeeSRR+y/b731VmiZhQsX2uNQo0YNU6tWLTN9+nRbtqog3U8dB08++aSZOnVqittVB4mWVdCvdtF9efHFF21bKKuuQPyGG25I8n5UnnvllVfattByak8F8M5//vMfG8yrw+Kcc84xEyZMCHv9L7/8Yq6//npz+umn2/bR9hToiLKEqg7QOipVqmTXIXq/ah+dI9quMobbtm0LrdO97tlnnzXlypUzBQoUsMv8+eefMY+BgqTu3bvb7eh8VFs//fTTKQ5d0Pnoz5aqSuCKK66w69C6Xn75ZXs+qW2RekcOHYz7piA3uZu+X3Qe6ztBdK6rOkfnUyzqZFOnnDLc8dB3kStJV+ecvqtEmW19Z3Xs2NFccMEFNuu9ceNGTgkAAICTwCnpXYECH90UUP/jH/9IVTZ76NChNhjRD9+bb77ZBnUK3BTsuEDpgQceMBMnTgy9RhkjBV8KnBW8qxT0jDPOMCNGjIi6jd69e9sfvDNnzrTlnnPnzjUtW7Y0X3/9tQ1oFXArwFIQF0k/yiPLrB999FEbFCtjpgAxFgWSykQ/9NBDZty4cSYtjh8/bjPmCkhjcYGkfxmVxOtYjh8/3gYZKVFZ+8CBA21JrP7OkyePfVxZ9OHDh9vjo2D7nnvusQGmMvHy66+/mn/+8582GFUHhQJgDSk4evSofV7HVu2n969AQxn7W2+91QbXXbp0seNjGzdubDtEVB2hfV21apV9346ykLNnz7b7lStXLvucC7iV9de2lPnv0KFDWGeKXqcOFXVY7NmzxwbUPXv2tPsU61iXLVvWzJo1y55PKrNXGXKpUqVSVQas8uE//vjD7osCNR2zlDpeFAS6QFC0v/jb1MHXxH0opqbcF2bp3FG5d0oUqOt7Q1Ul8dJnRx1eCr7V8aaOH3Wk6TzVZ0TrUofZpEmT7Hml7xEAAABkb+kOuk855RSbbVUwpR+SderUsYGUMjrnn39+sq9VBlpjv+Wuu+6ygaqC6oYNG9rHFChp3ZE/apW9VVCuH68KagcMGGCDw5w5wxP3ymBpUiT9q4DbbVPZYj2uTLKyUQoq46X3px/LGtepfY1FAbsCdJWH9+3b11SuXNmklsrTFZjGCvoUKCrzquOlsnBH29NkUdE6EqJRwK7jqWPrD9LVEeKcddZZ5plnnrEdDtonBS4K6tUpocDEZQI1QZW/U0UZdDcJlTK/6gBRIKKgW1lgVTKousF1GlSpUiVs3xS8vPDCCzZLKOrIUIeJJq1SFlv0vM4FrUf7JwcPHrSPK6AXTVqlDLT2J1pHhPbfZSXdvq5YscIG7vEG3WvXrrVjfV21hihLr86d5Gicvn/bODEUeOu7QZ1+0agDRueVJj1LLX2W1CGo70UF3dqGOp60PlH2XJ1A6tiKN4sOAACAkzTodmMjFdCozFyZnHfeecc8/vjjNuCINlGR4w/K3fjGmjVrhj0WmSVUSbUCREeTjSkI1NhMlbb7KThT2bA/EBRlFZXNlHgyXpEefvhhWzKt8d6azCwWdSg0atTIjg9XgJkaWl6BmMaVx9qGMrzKTmvyJkcZY2XU/OPA00ol6yrV/uqrr+wszC4DrUBFgYgyeionjxY0KEuoMnN1nCjwcJTxc9UDer0CkeQy+WpTF3DL999/b4NtF3CL9kVjbPWcC7oV5LiA250n2n9NYhUr+69OBHXo6P0dOHAgVCocL61bnVDqmHHUiXDaaacl+zoNxVBG3J/p9r+/k9nNI2bHvewzd/3dgZccVbm4Md2qoFB1Q2RHj7+0XOdvvDZv3mzPVX0/6VxT0O6+4zRURsG3qkN0XqpaRN8hBNwAAADZX4YE3aKSb00CppuCzFtuucVmOpMLuv0/ON2EQ5GP+UuNU0vBuEqSFTzqXz9lakUBuTKUqaGstQJJlWTrh3lylO1WwKdsfLyUOdbx04/2Zs2axSybf/vtt+04bAUOjgJuBbuREz2pY0QBsr8EOzkKmtVpoJtKshVMKBjVfTeG3k0aFevYy3PPPWfH0fu5tkju9Y5K0U8EHXNVQSgTrvbSMIdRo0aFxpeLKikiO2mUqUwvDclI1EkGM1vuvH+P449HPOeK6whUO2s4hCpeRJ83zUHh5qFQB4o6hdxQCj8F0qrQUOeIPnua50HzH6xZsyY034O+t9T5ouoQt2+qBFLnpM4hVyECAACA7C/Dgu5Iyj4GcV1uZV2VhXQBmzLrCqCjZQaVRVWmW9lyBZzRaOyzSuGVUY4sx9aPY/2wjnb5LI1VVvCd0g9nTSqn8moF6PHQhG4q69Z69QM9kvZJY0U1Nl0BtMqg/bQdBRB+qh546qmnbKl7vNQRodnn1Wngjm3k+FMFH5qxPlqJrKoUVNKvyaLc5ZYi6fUKgnbu3JlstttP2UFVNejm9ksl65rQz18GrA6C3377LTSsQOeJguZYQwk0Fl0l+Sr5dfwTwok6HjRRmqNzS5UGbrI9rVuZfFUZ6HrNbmy5/1rNyFxqIw0biKTzMHK5yEv+OQquo9HnK7nPmK4yoBsAAABOLumevVyBmS6h89JLL9kfoxprqwytysvjHVOcGsqyquRTgZayUMqmK+sbOZ7bZbEV8GlyK03EpX1buXKlHUM7f/58u4zG62oSLo0n1xhvBZYqE1UWWVlmXUIsGgWVKgl2mazkaJI3ZaBjXU/bX1KufVUWTtnhrVu32pt/1m2VlOtYa1llY90y6ogQlU5rfLf/5sqtIwP05Gh5jUvVWGgFzipb17h5Px13dUqo00LHTePjlfFz71Pl8TrWOkaaOVrl/sosalZ30THX/moGcAW92o5KfqMFRY7aRJ0IaldNuqb21DHTPAL+ie1UeaFx4+qk0bCHO++807Z1rNJyjbvWe9B10bWvqtbQ2Gw/nec6b3RTp4SuTa9g39Hs7No/TcCm/VLwrb/VQZSIl2ADAAAAkAWCbmWZFSAqk6qZrBXkKWBR+XVaZ+1OTtOmTW2ApG0pWFY5qMYdx6IgT0FZv379bPZKAZ6CKTd5koIhBbAKBJWZV/CmDKzWqU4DN9FbNCpHdmXqyVHwr+y1JvdKzuTJk0OzcWvWbHfTJHOOZnJXEK4Zw/3LvPrqqyYjKaurSezUgaIMsjLekdcd17h4dSa4WciV3VU5uct6K+OuDKLaQIGyltE6XfCvoN6Ni2/durVdRtuJHArgp/ZSVYLGSescUJCrSd4i37/G6arCQOtVdlFtGnm5Mr/bb7/dLq9zSuezOpP8WW9RGyqQd0G+tuu/pJxo8jZ1yGjfdFkofQ7UOeIudwYAAADg5JLDS8tMYplEYzGVWQyibB3ZhzpMdI5oTG5m03XIVQavWc3VYRQPN6Sh28OzTJ58/3/SQCRvUr/WHCIAAACkivvtrcSm5vzJUmO6gZORy/wra6/x35qxumLFijbzDQAAAODkQ9ANZCBNKjdo0CA7Pl1l5ZqcTbO/c2koAAAA4OSUpcrLgZMB5eVpQ3k5AAAAErG8PN0TqQEAAAAAgOgIugEAAAAACAhBNwAAAAAAASHoBgAAAAAgIATdAAAAAAAEhEuGAQlqTJ/mgc2gCAAAAODEINMNAAAAAEBACLoBAAAAAAgIQTcAAAAAAAEh6AYAAAAAICAE3QAAAAAABISgGwAAAACAgBB0AwAAAAAQEIJuAAAAAAACQtANAAAAAEBACLoBAAAAAAgIQTcAAAAAAAEh6AYAAAAAICAE3QAAAAAABISgGwAAAACAgBB0AwAAAAAQEIJuAAAAAAACQtANAAAAAEBACLoBAAAAAAgIQTcAAAAAAAEh6AYAAAAAICAE3QAAAAAABISgGwAAAACAgBB0AwAAAAAQEIJuAAAAAAACQtANAAAAAEBACLoBAAAAAAjIKUGtGEDaeJ5n/92zZw+HEAAAAAiQ+83tfoMHgaAbSDB79+61/5YrVy6zdwUAAAA4KezYscMUKVIkkHXn8IIM6QGk2vHjx81vv/1mChUqZHLkyJGlegnVUfDzzz+bwoULZ/buIB1oy+yBdsw+aMvsg7bMPmjL7OPPP/805cuXN7t27TJFixYNZBtkuoEEkzNnTlO2bFmTVSngJujOHmjL7IF2zD5oy+yDtsw+aMvs9Rs8KEykBgAAAABAQAi6AQAAAAAICEE3gAyRN29eM3ToUPsvsjbaMnugHbMP2jL7oC2zD9oy+8h7An7DMpEaAAAAAAABIdMNAAAAAEBACLoBAAAAAAgIQTcAAAAAAAEh6AYQ1fjx403FihVNvnz5TP369c3KlStjHqlLL73U5MiRI8ntiiuuCC3jeZ554IEHTKlSpUz+/PlNs2bNzA8//MDRz4Jt2bVr1yTPt2zZkrZMsLaUMWPGmGrVqtnPXLly5Uzfvn3NwYMH07VOJGZbDhs2LMnn8pxzzqG5Eqwtjxw5Yh566CFTuXJlu3ytWrXMwoUL07VOJGY78pnMHMuXLzdt2rQxpUuXtt+D8+bNS/E1S5cuNXXq1LETqVWpUsVMnz494z+THgBEmDlzppcnTx5v6tSp3rfffuvdeuutXtGiRb1t27ZFPVY7duzwtmzZErp98803Xq5cubxp06aFlnn00Ue9IkWKePPmzfO++uorr23btl6lSpW8AwcOcPyzWFt26dLFa9myZdhyO3fupB0TrC1nzJjh5c2b1/67adMm79133/VKlSrl9e3bN83rROK25dChQ70aNWqEfS5///13mizB2vLee+/1Spcu7c2fP9/bsGGDN2HCBC9fvnzeqlWr0rxOJGY78pnMHAsWLPAGDx7szZkzx1OoO3fu3GSX37hxo1egQAHvnnvu8b777jtv7Nix9nfPwoULM/QzSdANIIl69ep5vXr1Ct0/duyY/Z/LyJEj4zpaTz31lFeoUCFv37599v7x48e9kiVLeqNGjQots3v3bvsj8pVXXqEFslBbuqC7Xbt2gewvMq4ttWyTJk3CHtOPioYNG6Z5nUjcttQP/Fq1atFECd6W6iwZN25c2GNXX32116lTpzSvE4nZjnwmM5+JI+hWB4o6LP06dOjgtWjRIkM/k5SXAwhz+PBh88UXX9jybydnzpz2/ooVK+I6WlOmTDEdO3Y0BQsWtPc3bdpktm7dGrbOIkWK2PKceNeJxGhLfynWmWeeactde/ToYXbs2EETJVhbXnzxxfY1rgRu48aNZsGCBaZ169ZpXicSsy0dDdlRSeVZZ51lOnXqZH766SeaLMHa8tChQ7Y81U9DBj788MM0rxOJ144On8nEt2LFirC2lxYtWoTaPqM+kwTdAML88ccf5tixY6ZEiRJhj+u+AueU6EfhN998Y2655ZbQY+51aV0nEqctReO3X3jhBfP++++bxx57zCxbtsy0atXKbguJ05Y33HCDHXPYqFEjkzt3bjv2UGP2Bw0alOZ1IjHbUtSJqXGIGlc6ceJE29l5ySWXmL1799JsCdSW+jE/evRoG4wdP37cLF682MyZM8ds2bIlzetE4rWj8JnMGrZu3Rq17ffs2WMOHDiQYZ9Jgm4AGUqZ0Zo1a5p69epxZLNpWyrz3bZtW/vcVVddZd5++23z2Wef2ew3Eofa45FHHjETJkwwq1atsj8I58+fb4YPH57Zu4YA2lIdX9dee605//zzbUCgTPju3bvNa6+9xvFOIE8//bSpWrWqneQuT548pnfv3qZbt242c4bs1Y58JuHHJxxAmGLFiplcuXKZbdu2hT2u+yVLlkz2aP31119m5syZpnv37mGPu9elZZ1IrLaMRqWs2tb69etprgRqyyFDhpjOnTvbSgV1kLRv394GbiNHjrSZmfScH0istoymaNGi5uyzz+ZzmWBtWbx4cTubsr5jN2/ebNauXWtOPfVU+z2a1nUi8doxGj6TiUltHK3tCxcubIcMZNRnkqAbQBj12F544YW2dNjRjzrdb9CgQbJHa9asWXac04033hj2eKVKlewXk3+dKtv59NNPU1wnEqsto/nll1/smG5dDg6J05b79+9Pkj3TDwfR/DLpOT+QWG0Zzb59+8yGDRv4XAYoPZ8hjQcuU6aMOXr0qJk9e7Zp165duteJxGnHaPhMJia1sb/tRcMFXNtn2GcyVVPAATgp6NIImll8+vTp9vIJt912m700wtatW+3znTt39gYOHJjkdY0aNbIzPkajS4ZpHW+88Ya3Zs0aO/s1lwzLem25d+9er3///t6KFSvspYvee+89r06dOl7VqlW9gwcPnoB3dPJKbVtq5lzNPK8rBOiSKIsWLfIqV67sXXfddXGvE1mnLfv16+ctXbrUfi4/+ugjr1mzZl6xYsW87du304wJ1JaffPKJN3v2bHuZqeXLl9tZ6fX/wl27dsW9TmSNduQzmTn27t3rrV692t4U6o4ePdr+vXnzZvu82lHtGXnJsAEDBnjff/+9N378+KiXDEvvZ5KgG0BUuk5h+fLl7XUJdakE/Q/Gady4sb1slN/atWvtl5t+DEajy4YNGTLEK1GihP3iatq0qbdu3TqOfhZry/3793vNmzf3ihcv7uXOndurUKGCvV4lPwYTry2PHDniDRs2zAZnun5suXLlvJ49e4b9KExpncg6balOMl3GSOsrU6aMvb9+/XqaMMHaUh0j1atXt/8fPOOMM+yP/19//TVV60TWaEc+k5ljyZIl9jdM5M21n/5Ve0a+pnbt2rbtzzrrLG/atGkZ/pnMof9kXIIeAAAAAAA4jOkGAAAAACAgBN0AAAAAAASEoBsAAAAAgIAQdAMAAAAAEBCCbgAAAAAAAkLQDQAAAABAQAi6AQAAAAAICEE3AAAAAAABIegGAABpNmzYMFO7du10HcGlS5eaHDlymN27d8dcZvr06aZo0aLp2g4S+zwqUaKEPQ/mzZuX4vI//vijXfbLL79M13kFACcCQTcAAAmoa9euNmC44447kjzXq1cv+5yWQcaKJ5iL1KJFC5MrVy7z2WefJXnu0ksvNXfffXdcnQh79uwxgwcPNuecc47Jly+fKVmypGnWrJmZM2eO8TzPZFfff/+9efDBB82zzz5rtmzZYlq1apXZuwQAGYqgGwCABFWuXDkzc+ZMc+DAgdBjBw8eNC+//LIpX758pu4b/vbTTz+Zjz/+2PTu3dtMnTo1zYdF2diLL77YvPDCC+b+++83q1atMsuXLzcdOnQw9957r/nzzz9PyCFXcH/06FFzIm3YsMH+265dO9vRkDdv3hO6fQAIGkE3AAAJqk6dOjbwVqbT0d8KuC+44IKwZY8fP25GjhxpKlWqZPLnz29q1aplXn/99dDzx44dM927dw89X61aNfP000+HrUOZ86uuuso88cQTplSpUuaMM86wWfUjR46kuK8vvviiqVixoilSpIjp2LGj2bt3b9z7Fo0ywXqfBQoUMO3btzc7duyI65jNnj3b1KhRwwZu2p8nn3wy7Plo5cvKOGt7on0UHV8tq0x1cqZNm2auvPJK06NHD/PKK6+EdZCkxqBBg2yW/dNPPzVdunQx5557rjn77LPNrbfearPup556asyAVcGqSrO1TN26dc17770XtsyhQ4fMfffdZ88lHZcqVaqYKVOmhJVgv/POO+bCCy+0z3/44Yf2NXfeeac588wzbda9UaNGYZn8Xbt2mU6dOpnixYvbNq1atao9FnL48GHbCaFzSK+tUKGCbf9YZeVt2rSxf+fMmdPuiztnHnroIVO2bFm7TxrCsHDhwmSP4YIFC+wx0/5cdtll9nj6bd682W7rtNNOMwULFrTniV4DAEEj6AYAIIHdfPPNoWBGlE3t1q1bkuUU1ChLOmnSJPPtt9+avn37mhtvvNEsW7YsFMQogJk1a5b57rvvzAMPPGADvddeey1sPUuWLLGBnP59/vnnbTDqAtJYtLwC2bffftvetM1HH3007n2LpMBTHQQK3BRwKoB6+OGHUzxWX3zxhbnuuuts0P/111/bgG7IkCEp7r/fypUr7b8KXFXq7O/wiJYVVtvovagkXMFsSp0J0ahtVNGgILZ06dJJnlcwfcopp0R97b59+0zr1q3N+++/b1avXm1atmxpA0tl4J2bbrrJdgg888wztpRbZdyRQfzAgQNtm+n5888/32bX1YGhc0BZd703ldHv3LnTLq/jqvNIwbpeM3HiRFOsWDH7nLbz5ptv2nNr3bp1ZsaMGbYDJJr+/fuHzm8db91EHULqMFEH0Jo1a+y227Zta3744Yeo6/n555/N1Vdfbd+7zplbbrnFvic/dSCpM0EVBDo/HnvssZidGQCQoTwAAJBwunTp4rVr187bvn27lzdvXu/HH3+0t3z58nm///67fU7LyMGDB70CBQp4H3/8cdg6unfv7l1//fUxt9GrVy/vmmuuCdtmhQoVvKNHj4Yeu/baa70OHTrEXMfQoUPttvfs2RN6bMCAAV79+vXj3rclS5ZowLK3a9cue1+Pt27dOmx57UORIkWSPWY33HCDd/nll4c9pn0599xzQ/e1nblz54Yto/VOmzbN/r1p0ya7zOrVq72ULFq0yCtevLh35MgRe/+pp57yGjduHLaM7t91111JXqvtufezbds2u83Ro0d7GaFGjRre2LFj7d/r1q2z6168eHHUZd2xnzdvXuixffv2eblz5/ZmzJgReuzw4cNe6dKlvccff9zeb9OmjdetW7eo6+zTp4/XpEkT7/jx43Htr9oj8ieptjVixIiwx+rWrev17Nkzajvdf//9Ye0s9913X9h5VbNmTW/YsGFx7RMAZCQy3QAAJDCV715xxRU2W6uMoP52GUVn/fr1Zv/+/ebyyy+3mTt3U3bZjZeV8ePH2xJirVPPT548OSwjKiq51aRgjkqEt2/fnuw+KotZqFChqK+Jd9/8lDmtX79+2GMNGjQI/a199q/rkUceCb2uYcOGYa/TfWVHVV6f0VR1oDHXLgt9/fXXm48++ijm+4olPZOkKdOtbHH16tVtmbyOh46Da1dlfdWejRs3TnY9F110Uehv7b+GFPiPZe7cuU29evXsukXl9MrOq+xbWXGNa/cPU9B2NYRBJeqLFi1K1XvShHK//fZb1LZ020/tOSPaF1VMaD1Dhw61GXQAOBGi1yoBAICEKjFXqbULnKMFXjJ//nxTpkyZsOfcpFQKkBScqWRXwYiC5FGjRtlSbj8FV34aY6vy5+Qk95p49i21VILtn1389NNPj/u12rfIIDeeMeuRVGY9d+5c+1qVVjsK7hWMjxgxwt4vXLhw1EnQNHGaxr+LOkEUMK9duzbV+6E2Xbx4sS3DVgm4xjP/61//suOqRffjoTHOqaEZxjVGWmOitf2mTZva8m3th+Yi2LRpky09V5m+Sv41C3taSu8zkkrOVaauc1EdARr2oM9Dnz59MnW/AGR/ZLoBAEhwGqerIEoBnoKGSJp0SwGsspsKvPw3TZ4lysBqduyePXvaScL0XGozsmkRz75FUtY2sjPgk08+Cf2tzLJ/PS7o1uv0Pv10X5Nruey9Alw3bliUBVcm3smTJ4/9N6XMuMYpa4z8V199ZTsA3E1BnKoS3OuV7dWY6Eh6TPvlJhDTOHStUxneSOq4iDWjuN6fMsuabK5mzZp29m//BGJ6TB0gscbPR1O5cmV7HPzHUueeJlJTezo6lpr07aWXXjJjxoyxlROOOhtUBfDcc8+ZV1991Y4Pd+PBU6LXqmMlWlv6t++ntnfj8aOdM47OOV2GT2P1+/XrZ/cPAIJGphsAgASngNGV1fpLvx1lrZXx1ARlCrA007SyqwpSFMAoMNLs0irpfvfdd+0M3ZptXEGUm607KPHsWySVAasEWFlTzcytfU5p5mpREKXZu4cPH24DvhUrVphx48aZCRMmhJZp0qSJfUzZfgXGmtXbn6nXbN3KDmt7Cqo1+7bLSPtp9m9llM8777wkQZ0u+aXXayiAyrC1Pb0nZVrVAaFMqyY2e+utt0KvU2ZcM4mrRFp/q9xb+/XBBx/YjKzaKvK63qJ2VQCpCcSUxdcEZ/7KBJX+6xirWkITnGnmeGWoVf6vDHSsrLf2e8CAAbZDQ7PIP/7447ZzQhPciSbi01AFDUfQ5GSaQE+Br4wePdoOMVDnjjoUNHmfOgOi7X8s2rZKwNUBoBJ2Da1Qp4Y6JqJRIK0OD71Ox1mT6kVOoKfrpStDr84Ozb6uyQLdPgNAoDJ0hDgAAMjQidRi8U+kJpq0asyYMV61atXsJFia4KtFixbesmXLQhOade3a1U7eVbRoUa9Hjx7ewIEDvVq1aiW7TU0CFjk5WOREav51uAnFNCFbvPsWOZGaTJkyxStbtqyXP39+O2nXE088keJEavL666/bCbW0nfLly3ujRo0Ke/7XX3/1mjdv7hUsWNCrWrWqt2DBgrCJ1OS5557zypUr5+XMmTPqe//888/t/q5cuTLqPrRq1cpr37596L6W0wRvet/aliaZi5zMTXbv3m3bRPuVJ08er0SJEl6zZs3ssrEmJdOEYpdddpk9TtrncePGJZm87cCBA17fvn29UqVK2fVWqVLFmzp1asxj716jCdGKFStmJ/Jr2LBh2PsdPny4V716dbvd008/3Z43GzdutM9NnjzZq127tj3GhQsX9po2beqtWrXKS81EaseOHbOTnpUpU8a2pc6xd955J+x9R05499Zbb9n3pv295JJL7Hv0v7fevXt7lStXts+rLTp37uz98ccfMfcLADJKDv0n2LAeAAAAAICTE2O6AQAAAAAg6AYAAAAAIGsh0w0AAAAAQEAIugEAAAAACAhBNwAAAAAAASHoBgAAAAAgIATdAAAAAAAEhKAbAAAAAICAEHQDAAAAABAQgm4AAAAAAAJC0A0AAAAAQEAIugEAAAAAMMH4Pyvm70RaS+2WAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "summary_df = pd.DataFrame([summarize_run(run, label) for run, label in RUNS.items()])\n", "summary_df = summary_df.sort_values(\"run\")\n", "display(\n", " summary_df[[\"label\", \"run\", \"backbone\", \"image_size\", \"data_dir\", \"augment\", \"normalization\", \"auc\", \"auc_std\", \"accuracy\", \"f1\", \"best_gap\"]]\n", " .style.format({\"auc\": \"{:.4f}\", \"auc_std\": \"{:.4f}\", \"accuracy\": \"{:.4f}\", \"f1\": \"{:.4f}\", \"best_gap\": \"{:+.4f}\"})\n", ")\n", "\n", "fig, ax = plt.subplots(figsize=(10, 7))\n", "plot_df = summary_df.sort_values(\"run\", ascending=False)\n", "ax.barh(plot_df[\"label\"], plot_df[\"auc\"], xerr=plot_df[\"auc_std\"], color=\"#4C78A8\", alpha=0.85)\n", "ax.set_xlim(0.68, 1.0)\n", "ax.set_xlabel(\"Mean held-out AUC across folds\")\n", "ax.set_title(\"Existing classifier experiments by run name\")\n", "for y, (_, row) in enumerate(plot_df.iterrows()):\n", " ax.text(row[\"auc\"] + 0.003, y, f\"{row['auc']:.4f}\", va=\"center\", fontsize=8)\n", "fig.tight_layout()\n", "fig.savefig(FIGURES_DIR / \"04_phase2_ranked_auc.png\", dpi=180, bbox_inches=\"tight\")\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "884028c3", "metadata": {}, "source": [ "## 2. Does higher resolution help?\n", "\n", "Resolution is tested by comparing the 128x128 Phase 1 baseline against the matching 224x224 Phase 2 run.\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "2fdd6a67", "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", "
 modelbefore_meanafter_meandelta_meandelta_ci95paired_t_p
0SimpleCNN0.77860.7853+0.00670.00580.08683
1ResNet180.93660.9660+0.02940.00197.456e-06
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "resolution_rows = [\n", " {\"model\": \"SimpleCNN\", **paired_delta(\"p1_simplecnn_baseline\", \"p2b_simplecnn_224\")},\n", " {\"model\": \"ResNet18\", **paired_delta(\"p1_resnet18_baseline\", \"p2b_resnet18_224\")},\n", "]\n", "resolution_df = pd.DataFrame(resolution_rows)\n", "display(resolution_df[[\"model\", \"before_mean\", \"after_mean\", \"delta_mean\", \"delta_ci95\", \"paired_t_p\"]]\n", " .style.format({\"before_mean\": \"{:.4f}\", \"after_mean\": \"{:.4f}\", \"delta_mean\": \"{:+.4f}\", \"delta_ci95\": \"{:.4f}\", \"paired_t_p\": \"{:.4g}\"}))\n" ] }, { "cell_type": "markdown", "id": "0354d84e", "metadata": {}, "source": [ "Higher resolution barely changes SimpleCNN, but it substantially improves ResNet18 from AUC `0.9366` to `0.9660`. This is the first major improvement step, and it fits the architecture story: the pretrained model can use the extra spatial detail, while the smaller scratch-trained CNN cannot turn it into much additional signal.\n" ] }, { "cell_type": "markdown", "id": "88538759", "metadata": {}, "source": [ "## 3. Does normalization reveal color shortcuts?\n", "\n", "`real_norm` computes normalization statistics from real training images only within each fold. If this had strongly changed results, color distribution would be a stronger suspect.\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "a7da9597", "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", "
 before_meanafter_meandelta_meandelta_ci95paired_t_p
00.96600.9678+0.00180.00310.3135
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "norm_df = pd.DataFrame([\n", " {\"question\": \"normalization\", **paired_delta(\"p2a_t1_original\", \"p2a_t2_real_norm\")}\n", "])\n", "display(norm_df[[\"before_mean\", \"after_mean\", \"delta_mean\", \"delta_ci95\", \"paired_t_p\"]]\n", " .style.format({\"before_mean\": \"{:.4f}\", \"after_mean\": \"{:.4f}\", \"delta_mean\": \"{:+.4f}\", \"delta_ci95\": \"{:.4f}\", \"paired_t_p\": \"{:.4g}\"}))\n" ] }, { "cell_type": "markdown", "id": "2aa30a40", "metadata": {}, "source": [ "The real-image normalization diagnostic is almost neutral: `real_norm` is only `+0.0018` AUC above the ImageNet/default normalization run. That difference is too small to drive the model choice, and ImageNet normalization remains the cleaner default for a pretrained ResNet because it matches the scale used during pretraining.\n" ] }, { "cell_type": "markdown", "id": "5181b3ae", "metadata": {}, "source": [ "## 4. Does source holdout reveal source-specific learning?\n", "\n", "A source-holdout experiment trains without one fake source, then evaluates all sources. The key number is held-out pairwise AUC versus the average pairwise AUC on the fake sources seen during training.\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "83e7cb25", "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", "
 held_out_sourcerunglobal_aucheld_out_pairwise_aucin_source_pairwise_auc_meandelta_in_source_minus_held_out
0text2imgp2a_t3_holdout_text2img0.89600.75950.9642+0.2048
2insightp2a_t3_holdout_insight0.94010.84210.9891+0.1470
1inpaintingp2a_t3_holdout_inpainting0.95370.92960.9657+0.0361
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "HOLDOUTS = {\n", " \"text2img\": \"p2a_t3_holdout_text2img\",\n", " \"inpainting\": \"p2a_t3_holdout_inpainting\",\n", " \"insight\": \"p2a_t3_holdout_insight\",\n", "}\n", "\n", "holdout_rows = []\n", "for held_source, run_name in HOLDOUTS.items():\n", " results = load_run(run_name)\n", " pairs = (results or {}).get(\"aggregated_pairwise\", {})\n", " held_key = f\"wiki_vs_{held_source}\"\n", " seen_aucs = []\n", " for pair_key, metrics in pairs.items():\n", " if pair_key != held_key:\n", " seen_aucs.append(metrics.get(\"auc_roc\", {}).get(\"mean\", np.nan))\n", " held_auc = pairwise_auc(results, held_key)\n", " in_source_auc = float(np.nanmean(seen_aucs)) if seen_aucs else np.nan\n", " holdout_rows.append({\n", " \"held_out_source\": held_source,\n", " \"run\": run_name,\n", " \"global_auc\": scalar_metric(results, \"auc_roc\"),\n", " \"held_out_pairwise_auc\": held_auc,\n", " \"in_source_pairwise_auc_mean\": in_source_auc,\n", " \"delta_in_source_minus_held_out\": in_source_auc - held_auc,\n", " })\n", "\n", "holdout_df = pd.DataFrame(holdout_rows).sort_values(\"held_out_pairwise_auc\")\n", "display(holdout_df.style.format({\n", " \"global_auc\": \"{:.4f}\",\n", " \"held_out_pairwise_auc\": \"{:.4f}\",\n", " \"in_source_pairwise_auc_mean\": \"{:.4f}\",\n", " \"delta_in_source_minus_held_out\": \"{:+.4f}\",\n", "}))\n", "\n", "fig, ax = plt.subplots(figsize=(7, 4))\n", "x = np.arange(len(holdout_df))\n", "ax.bar(x - 0.18, holdout_df[\"held_out_pairwise_auc\"], width=0.36, label=\"held-out source\")\n", "ax.bar(x + 0.18, holdout_df[\"in_source_pairwise_auc_mean\"], width=0.36, label=\"seen fake sources\")\n", "ax.set_xticks(x, holdout_df[\"held_out_source\"])\n", "ax.set_ylim(0.7, 1.0)\n", "ax.set_ylabel(\"Pairwise AUC\")\n", "ax.set_title(\"Source holdout generalization\")\n", "ax.legend()\n", "fig.tight_layout()\n", "fig.savefig(FIGURES_DIR / \"04_source_holdout.png\", dpi=180, bbox_inches=\"tight\")\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "34d814ce", "metadata": {}, "source": [ "Source holdout exposes the largest weakness. Holding out `text2img` drops `wiki_vs_text2img` to `0.7595`; holding out `insight` drops `wiki_vs_insight` to `0.8421`; inpainting generalizes better at `0.9296`. The overall AUC is high, but these runs show that performance is not fully source-agnostic.\n" ] }, { "cell_type": "markdown", "id": "4ea27793", "metadata": {}, "source": [ "## 5. Does face crop help?\n", "\n", "Face cropping is evaluated against the matching 224x224 no-facecrop baseline.\n" ] }, { "cell_type": "code", "execution_count": 7, "id": "58bf28d2", "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", "
 modelbefore_meanafter_meandelta_meandelta_ci95paired_t_p
0SimpleCNN0.78530.7661-0.01930.00520.001946
1ResNet180.96600.9755+0.00950.00600.03641
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "facecrop_rows = [\n", " {\"model\": \"SimpleCNN\", **paired_delta(\"p2b_simplecnn_224\", \"p2c_simplecnn_facecrop\")},\n", " {\"model\": \"ResNet18\", **paired_delta(\"p2b_resnet18_224\", \"p2c_resnet18_facecrop\")},\n", "]\n", "facecrop_df = pd.DataFrame(facecrop_rows)\n", "display(facecrop_df[[\"model\", \"before_mean\", \"after_mean\", \"delta_mean\", \"delta_ci95\", \"paired_t_p\"]]\n", " .style.format({\"before_mean\": \"{:.4f}\", \"after_mean\": \"{:.4f}\", \"delta_mean\": \"{:+.4f}\", \"delta_ci95\": \"{:.4f}\", \"paired_t_p\": \"{:.4g}\"}))\n" ] }, { "cell_type": "markdown", "id": "ee339e9e", "metadata": {}, "source": [ "Facecrop helps ResNet18 but not SimpleCNN because the two models use visual evidence at different levels. ResNet18 is deeper and pretrained on ImageNet, so it already has reusable filters for edges, textures, facial parts, and object structure. Once the input is cropped around the face, that model can spend more of its capacity on the region where manipulation evidence should live, improving from 224x224 no-crop AUC `0.9660` to facecrop AUC `0.9755`.\n", "\n", "SimpleCNN is much smaller and trained from scratch on this limited subset. It may rely more on broad cues such as framing, background, clothing, color balance, or source-specific texture. Facecrop removes many of those cues. That is good for the intended detector, but it can hurt a low-capacity model that had not learned enough stable face-level evidence.\n" ] }, { "cell_type": "markdown", "id": "2d0a1535", "metadata": {}, "source": [ "## 6. Does augmentation help or over-regularize?\n", "\n", "Augmentation is tested both without facecrop and with facecrop. A useful augmentation should improve held-out AUC or reduce overfit without damaging source balance.\n" ] }, { "cell_type": "code", "execution_count": 8, "id": "398da62a", "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", " \n", "
 conditionmodelbefore_meanafter_meandelta_meandelta_ci95paired_t_p
0no facecropSimpleCNN0.78530.7346-0.05070.00607.851e-05
1no facecropResNet180.96600.9665+0.00050.00550.8721
2facecropSimpleCNN0.76610.7136-0.05250.00740.0001544
3facecropResNet180.97550.9737-0.00180.00350.3733
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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AML9PDfGU6H0gVu3br1kuxaHi87CGQAAAACSnxgHFk2aNHHt2rVzU6ZMsWBCt88++8ymQjVr1ix+9hIAAABA8qoK9c4779hCeC1btrTcCtHq208//bR766234mMfASDJOnHihMuUKZPdP378uMuYMWNC7xIAAPEixjkWHuVSbNy40e6rIlSGDBlcuCLHAkBkCCwAAElZvK687VEgUbJkySt9OwAAAIBkJFqBRePGjd348eMtStH9qEyfPj2u9g0AAABAcgosNPyhvApRcOHdBwAAAIBY5Vjg/yHHAkBkyLEAACRl8bqORY0aNdzhw4dD/lI9BwAAACD8xDiwWLhwoTt79uwl20+fPu1+/PHHuNovAAAAAElItKtCrV692n//r7/+crt37/Y/vnDhgpszZ4674YYb4n4PAQAAACSfwKJUqVKWtK1bqClP11xzjRsxYkRc7x8AAACA5BRYbN682SnPu3Dhwm758uUuR44c/ufSpk3rcubM6VKlShVf+wkAAAAgOQQWBQoUsJ8XL16Mz/0BAAAAkARd8crbyrPYunXrJYnc9evXj4v9AgAAAJCcA4tNmza5Ro0auTVr1li+hbcMhrdonhK5AQAAAISXGJebff75512hQoXc3r17XYYMGdzatWvd4sWLXdmyZa0ULQAAAIDwE+PAYunSpa5v377u+uuvdylTprRblSpVXP/+/V2nTp3iZy8BAAAQFk6cOOGvRKr7SMaBhaY6XXvttXZfwcXOnTv9yd0bNmxw8e29995zBQsWdOnTp3cVKlSwClVRmTp1qitWrJi9vmTJku7bb7+N8Lymcr366qsuT548VjK3Zs2a7p9//onnvwIAAAAI88CiRIkSbtWqVXZfJ/Zvv/22+/nnn20UQ6Vo49OUKVNcly5dXO/evd1vv/3m7rjjDlerVi2blhXKkiVLXLNmzVy7du3c77//7ho2bGi3P//80/8a7f/w4cPdqFGj3LJly1zGjBntM7WSOAAAAIDoSeHzsq+j6bvvvrNhqcaNG7t///3X1atXz/39998ue/bs7rPPPnP33nuviy8KZMqVK+feffddf+nbfPnyueeee8717Nnzktc3adLE9nXmzJn+bRUrVrTF/hRI6E/Pmzev69q1q+vWrZs9f+TIEZcrVy43fvx417Rp02jt19GjR12WLFnsvZkzZ46zvxdA0qc+KFOm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ly8f1/sHAAAAIDkGFh999JHbtWuXy58/vytSpIjddH/Hjh1u7Nix8bOXAAAAAJJXjoUCidWrV7u5c+e69evX27bixYu7mjVrRqgOBQAAACB8xDiwEAUQ999/v90AAAAAIFqBxfDhw6P9TXXq1IlvFQAAAAgz0QoshgwZEuHxvn373MmTJ/3VobSWhcrN5syZk8ACAAAACEPRSt7evHmz//bmm2/aAnlar+LgwYN2030tkPf666/H/x4DAAAASPpVoV555RU3YsQIV7RoUf823deoxssvv+ziiwKY5s2bu8yZM9tISbt27dzx48ejfM/p06fds88+67Jnz+4yZcrkHnrooQhlcg8cOOBq167t8ubN69KlS+fy5cvnOnbs6I4ePRpvfwcAAACQHMU4sFCp2fPnz1+y/cKFCxFO2uOagoq1a9daNaqZM2e6xYsX20rfUencubObMWOGmzp1qlu0aJHbuXOna9y4sf/5lClTugYNGrhvvvnG/f333278+PHuhx9+cE899VS8/R0AAABAchTjqlD33nuve/LJJ92YMWNs+pOsXLnSPf3001ZyNj5oqtWcOXPcihUrXNmyZW2bRk3q1Knj3nnnHRtxCHbkyBFbV2PSpEmuRo0atm3cuHFWGveXX35xFStWdNddd53tt6dAgQLumWeecQMHDoyXvwMAAABIrq5ogbzcuXPbCb6mD+mmFbdz5cplwUZ8WLp0qU1/8oIKURCjEYdly5aFfI+CnXPnzkUIdooVK2aL+enzQtGIxvTp0121atWi3J8zZ87YdKnAGwAAABDOYjxikSNHDvftt9/a1CFvgTydsN9yyy0uvuzevdsqTgVKnTq1y5Ytmz0X2XvSpk3rr1zlUQAU/J5mzZq5r7/+2p06dco9+OCDlw2Q+vfv7/r06XPFfw8AAADgwn3EwqNAon79+na70qCiZ8+ettheVDcveIlPSjz/7bffLLjYuHGj69KlS5Sv79Wrl0218m7btm2L930EAAAAkt3K29u3b7eE561bt7qzZ89GeG7w4MHR/pyuXbu61q1bR/mawoUL29SrvXv3RtiuBHJVitJzoWi79k1rbASOWijBPPg9eqybRl40CnL33Xdb9as8efKE/GxvChgAAACAKwws5s2bZ6MUOuHXaEKJEiXcli1bnM/n8ydzx2RalW6XU6lSJQsQlDdRpkwZ2zZ/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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "augmentation_rows = [\n", " {\"condition\": \"no facecrop\", \"model\": \"SimpleCNN\", **paired_delta(\"p2b_simplecnn_224\", \"p2d_simplecnn_aug\")},\n", " {\"condition\": \"no facecrop\", \"model\": \"ResNet18\", **paired_delta(\"p2b_resnet18_224\", \"p2d_resnet18_aug\")},\n", " {\"condition\": \"facecrop\", \"model\": \"SimpleCNN\", **paired_delta(\"p2c_simplecnn_facecrop\", \"p2e_simplecnn_facecrop_aug\")},\n", " {\"condition\": \"facecrop\", \"model\": \"ResNet18\", **paired_delta(\"p2c_resnet18_facecrop\", \"p2e_resnet18_facecrop_aug\")},\n", "]\n", "augmentation_df = pd.DataFrame(augmentation_rows)\n", "display(augmentation_df[[\"condition\", \"model\", \"before_mean\", \"after_mean\", \"delta_mean\", \"delta_ci95\", \"paired_t_p\"]]\n", " .style.format({\"before_mean\": \"{:.4f}\", \"after_mean\": \"{:.4f}\", \"delta_mean\": \"{:+.4f}\", \"delta_ci95\": \"{:.4f}\", \"paired_t_p\": \"{:.4g}\"}))\n", "\n", "fig, ax = plt.subplots(figsize=(8, 4))\n", "labels = augmentation_df[\"condition\"] + \" / \" + augmentation_df[\"model\"]\n", "colors = [\"#54A24B\" if d > 0 else \"#E45756\" for d in augmentation_df[\"delta_mean\"]]\n", "ax.bar(labels, augmentation_df[\"delta_mean\"], yerr=augmentation_df[\"delta_ci95\"], color=colors, alpha=0.85)\n", "ax.axhline(0, color=\"black\", linewidth=1)\n", "ax.set_ylabel(\"Delta AUC from adding augmentation\")\n", "ax.set_title(\"Augmentation ablation\")\n", "ax.tick_params(axis=\"x\", rotation=25)\n", "fig.tight_layout()\n", "fig.savefig(FIGURES_DIR / \"04_augmentation_delta.png\", dpi=180, bbox_inches=\"tight\")\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "202507a6", "metadata": {}, "source": [ "Augmentation separates the models even more clearly. SimpleCNN drops in both settings: without facecrop it goes from AUC `0.7853` to `0.7346`, and with facecrop it goes from `0.7661` to `0.7136`. This is consistent with a low-capacity scratch model: the extra flips, rotations, color shifts, blur, noise, erasing, and recompression make the task harder before the model has learned robust face/manipulation features. Some of the cues it was using may simply be removed.\n", "\n", "ResNet18 is more resilient because it starts from stronger pretrained visual features. Without facecrop, augmentation is almost neutral in AUC (`0.9660` -> `0.9665`), but accuracy and F1 still fall, so there is no practical win. With facecrop, augmentation becomes slightly negative (`0.9755` -> `0.9737`). Once the image is already concentrated on the face, the extra perturbations may hide the subtle evidence that made facecrop useful. For the current 20% data setting, augmentation looks more like over-regularization than improved generalization, so the best supported classifier remains ResNet18 at 224x224 with facecrop and no augmentation.\n" ] }, { "cell_type": "markdown", "id": "3c5b2bd7", "metadata": {}, "source": [ "## 7. Decision table\n", "\n", "These decisions summarize the best supported setting from existing classifier logs. They are recommendations for report interpretation and future work, not claims about unrun experiments.\n", "\n", "| Choice | Decision | Evidence | Confidence |\n", "|---|---|---|---|\n", "| Input size | 224x224 | ResNet18 improves from AUC `0.9366` to `0.9660`. | High |\n", "| Face crop | Enable | Best Phase 2 run is `p2c_resnet18_facecrop` with AUC `0.9755`. | Medium-high |\n", "| Augmentation | Disable for the current 20% setting | `p2e_resnet18_facecrop_aug` reaches AUC `0.9737`, below facecrop-only `0.9755`; SimpleCNN drops sharply with augmentation. | Low |\n", "| Normalization | ImageNet/default | `real_norm` is only `+0.0018` AUC and is less aligned with pretrained ImageNet weights. | Medium |\n", "| Source generalization | Report as limitation and diagnostic target | Holding out `text2img` and `insight` drops pairwise AUC to `0.7595` and `0.8421`. | High |\n" ] }, { "cell_type": "markdown", "id": "2739c949", "metadata": {}, "source": [ "## Conclusion\n", "\n", "Phase 2 improves the classifier through controlled ablations. The largest reliable improvement comes from moving ResNet18 from 128x128 to 224x224, increasing AUC from `0.9366` to `0.9660`. Face cropping gives the best observed classifier result, with `p2c_resnet18_facecrop` reaching AUC `0.9755`. Augmentation does not help at this data scale: `p2e_resnet18_facecrop_aug` reaches `0.9737`, slightly below facecrop-only, and augmentation substantially hurts SimpleCNN.\n", "\n", "The strongest caution is source generalization. When `text2img` is held out, `wiki_vs_text2img` AUC falls to `0.7595`; when `insight` is held out, `wiki_vs_insight` AUC falls to `0.8421`; inpainting generalizes better at `0.9296`. The model is therefore strong under the controlled DFF split, but not fully source-agnostic.\n", "\n", "Report-ready decision: use 224x224 input, facecrop enabled, augmentation disabled for the current 20% setting, ImageNet/default normalization, and discuss source generalization as the main limitation.\n", "\n", "Next: `05_gradcam.ipynb` inspects model focus qualitatively. The story then continues with `06_model_families.ipynb` for stronger backbones and `07_data_scaling.ipynb` for the data-scaling plan/status.\n" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "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.12.10" } }, "nbformat": 4, "nbformat_minor": 5 }