{ "cells": [ { "cell_type": "markdown", "id": "cb0637e2", "metadata": {}, "source": [ "# `fw` — Frank–Wolfe (LeBlanc et al. 1975) on the Braess network\n", "\n", "**What.** Frank–Wolfe solves Beckmann's convex UE program with nothing but repeated all-or-nothing (shortest-path) subproblems and a 1-D line search on the Beckmann integral, storing only the link-flow vector. It made equilibrium assignment on real networks efficient and provably convergent — but one scalar step is shared by all OD pairs, so its tail zig-zags.\n", "\n", "**Why it is in the benchmark.** It is the workhorse and the reference the whole convergence race is measured against (`[leblanc1975efficient]`). See its entry in the\n", "[model compendium](../../docs/MODELS.md) and the certificate design in\n", "[docs/ARCHITECTURE.md](../../docs/ARCHITECTURE.md) (P1).\n", "\n", "**Scope.** This notebook runs the solver on the built-in Braess scenario (5 links,\n", "one OD pair, no download) and certifies the result; it does not benchmark solver\n", "families against each other — for that, see `demos/demo_quickstart.py`.\n", "\n", "Primary reference: `[leblanc1975efficient]` ([docs/REFERENCES.md](../../docs/REFERENCES.md))." ] }, { "cell_type": "markdown", "id": "46284881", "metadata": {}, "source": [ "## How this notebook is graded\n", "\n", "**A notebook never claims a number it does not compute in that cell.** Every scored\n", "quantity below is recomputed live by the P1 `Evaluator` from the flows the model\n", "emitted, in the cell where it is claimed. Model self-reports are shown only as\n", "provenance and diffed against the certificate as an honesty check, exactly as the\n", "harness treats them ([README](../../README.md), *Certified, not self-reported*)." ] }, { "cell_type": "code", "execution_count": 1, "id": "2a31c5fa", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:44:47.972408Z", "iopub.status.busy": "2026-07-21T13:44:47.972123Z", "iopub.status.idle": "2026-07-21T13:44:49.871772Z", "shell.execute_reply": "2026-07-21T13:44:49.870907Z" } }, "outputs": [], "source": [ "# Setup. `fw` is a core model: a plain `pip install -e .` suffices — no\n", "# optional extra, so no guard cell. The inline backend is Agg-based (headless CI\n", "# renders into the notebook); NEVER matplotlib.use(\"Agg\") in-kernel — it silently\n", "# suppresses inline figure capture.\n", "%matplotlib inline\n", "import numpy as np\n", "\n", "from tabench import (\n", " FrankWolfeModel,\n", " Budget,\n", " Evaluator,\n", " RngBundle,\n", " Trace,\n", " braess_scenario,\n", " viz,\n", ")" ] }, { "cell_type": "markdown", "id": "d05cd0ab", "metadata": {}, "source": [ "## The scenario\n", "\n", "The built-in Braess network: 4 nodes, 5 links, a single OD pair (1 → 2) with demand\n", "6. Scenarios are frozen and content-hashed (P2) — the hash printed below is the\n", "identity of the benchmark instance, so a silently edited network cannot masquerade\n", "as it." ] }, { "cell_type": "code", "execution_count": 2, "id": "15a9318f", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:44:49.876547Z", "iopub.status.busy": "2026-07-21T13:44:49.876137Z", "iopub.status.idle": "2026-07-21T13:44:49.881709Z", "shell.execute_reply": "2026-07-21T13:44:49.881026Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "scenario : braess\n", "content hash : cf00f411cdccec88…\n", "links : 5 (tail→head: 1->3, 1->4, 3->4, 3->2, 4->2)\n", "total demand : 6.0\n" ] } ], "source": [ "scenario = braess_scenario()\n", "net = scenario.network\n", "\n", "print(f\"scenario : {scenario.name}\")\n", "print(f\"content hash : {scenario.content_hash()[:16]}…\")\n", "print(f\"links : {net.n_links} (tail→head: \"\n", " + \", \".join(f\"{i}->{j}\" for i, j in zip(net.init_node, net.term_node)) + \")\")\n", "print(f\"total demand : {scenario.demand.total}\")" ] }, { "cell_type": "markdown", "id": "17cf6b01", "metadata": {}, "source": [ "## Solve\n", "\n", "The model contract ([CONTRIBUTING.md](../../CONTRIBUTING.md)): a model receives\n", "`(scenario, budget, rng, trace)`, records checkpoints, and respects the budget.\n", "Budgets are hardware-free (iterations / shortest-path calls; wall-clock is recorded\n", "but never the ranking axis, P7). Whatever the model writes into `self_report` is\n", "provenance, not a score." ] }, { "cell_type": "code", "execution_count": 3, "id": "c01dbb91", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:44:49.885279Z", "iopub.status.busy": "2026-07-21T13:44:49.885123Z", "iopub.status.idle": "2026-07-21T13:44:49.922250Z", "shell.execute_reply": "2026-07-21T13:44:49.921546Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "model : fw\n", "budget spent : 103 iterations, 104 shortest-path calls\n", "checkpoints : 103\n", "emitted flows : [4. 2. 2. 2. 4.]\n", "self-reported gap: 7.188e-14 (provenance only)\n" ] } ], "source": [ "model = FrankWolfeModel()\n", "bundle = model.solve(scenario, Budget(iterations=200), RngBundle(0), Trace())\n", "\n", "final = bundle.final\n", "print(f\"model : {model.name}\")\n", "print(f\"budget spent : {final.coords.iterations} iterations, \"\n", " f\"{final.coords.sp_calls} shortest-path calls\")\n", "print(f\"checkpoints : {len(bundle.trace.checkpoints)}\")\n", "print(f\"emitted flows : {np.round(final.link_flows, 6)}\")\n", "print(f\"self-reported gap: {final.self_report['relative_gap']:.3e} (provenance only)\")" ] }, { "cell_type": "markdown", "id": "89f55dce", "metadata": {}, "source": [ "## Certify (P1)\n", "\n", "The harness, never the model, computes every scored metric: the relative gap is a\n", "property of `(link_flows, scenario)`, recomputed here by the same `Evaluator` that\n", "scores every model in the benchmark. We also recompute the analytic Braess anchor\n", "in-cell rather than quoting it: at UE the flows are (4, 2, 2, 2, 4) and every used\n", "route costs 92 (pinned in [`tests/test_braess.py`](https://github.com/UMN-Choi-Lab/TABenchmark/blob/main/tests/test_braess.py)).\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "94be7dc8", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:44:49.925797Z", "iopub.status.busy": "2026-07-21T13:44:49.925481Z", "iopub.status.idle": "2026-07-21T13:44:49.960424Z", "shell.execute_reply": "2026-07-21T13:44:49.959722Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "certified relative gap : 7.188e-14\n", "feasible : 1\n", "Beckmann objective : 386.000008\n", "route time (TSTT/D) : 92.000000 (analytic UE: 92)\n", "checkpoints certified : 103 (first gap 1.912e-01, last 7.188e-14)\n" ] } ], "source": [ "evaluator = Evaluator(scenario)\n", "metrics = evaluator.evaluate(final.link_flows)\n", "\n", "certified_gap = metrics[\"relative_gap\"]\n", "print(f\"certified relative gap : {certified_gap:.3e}\")\n", "print(f\"feasible : {metrics['feasible']:.0f}\")\n", "print(f\"Beckmann objective : {metrics['beckmann_objective']:.6f}\")\n", "\n", "# FW reaches a near-machine-zero gap on Braess, but note the checkpoint count below:\n", "# it spends many shortest-path calls grinding down the zig-zag tail.\n", "assert metrics[\"feasible\"] == 1.0\n", "assert abs(certified_gap) < 1e-8\n", "\n", "# Honesty diff (P1): this white box's self-report must match the certificate.\n", "assert np.isclose(final.self_report[\"relative_gap\"], certified_gap, rtol=1e-9, atol=1e-12)\n", "\n", "# Analytic anchor, recomputed in-cell.\n", "ref_flows = np.array([4.0, 2.0, 2.0, 2.0, 4.0])\n", "assert evaluator.evaluate(ref_flows)[\"relative_gap\"] < 1e-6\n", "assert np.allclose(final.link_flows, ref_flows, atol=1e-3)\n", "route_time = metrics[\"tstt\"] / scenario.demand.total\n", "print(f\"route time (TSTT/D) : {route_time:.6f} (analytic UE: 92)\")\n", "assert abs(route_time - 92.0) < 1e-3\n", "\n", "# Certify EVERY checkpoint the same way — the trace feeds the visual below.\n", "trace_iters = [c.coords.iterations for c in bundle.trace.checkpoints]\n", "trace_gaps = [evaluator.evaluate(c.link_flows)[\"relative_gap\"] for c in bundle.trace.checkpoints]\n", "print(f\"checkpoints certified : {len(trace_gaps)} \"\n", " f\"(first gap {trace_gaps[0]:.3e}, last {trace_gaps[-1]:.3e})\")" ] }, { "cell_type": "markdown", "id": "2b25552a", "metadata": {}, "source": [ "## Visualize\n", "\n", "Both figures come from `tabench.viz`, the house visualizer — one visual style across\n", "every tutorial, every plotted number certified above. Left/top: the certified\n", "equilibrium link flows on the Braess diamond. Right/bottom: the emitted flows against\n", "the analytic UE recomputed in the previous cell — points on the `y = x` guide mean\n", "the solver reproduced the certified equilibrium link-for-link." ] }, { "cell_type": "code", "execution_count": 5, "id": "c7e9bc8d", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:44:49.964146Z", "iopub.status.busy": "2026-07-21T13:44:49.963798Z", "iopub.status.idle": "2026-07-21T13:44:50.268165Z", "shell.execute_reply": "2026-07-21T13:44:50.267170Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAesAAAGsCAYAAAD9ro91AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABFo0lEQVR4nO3deXxM5+IG8OfMlswMSYRIEESiQamdNCQUtdVSglhCl3svov1paa9yW0vaa+u9tlYttbXqaq+dWm6rJS2hJaQtpYIEbWKLIiGTZWYyvz/SjIYsk5kzM2dmnq/P+XzMOe95z3uGyZP3Pe+cIxgMehOIiIhIsmTObgARERFVjGFNREQkcQxrIiIiiWNYExERSRzDmoiISOIY1kRERBLHsCYiIpI4hjUREZHEMayJiIgkjmFNoujXrx+mTZvm7GbYxcPn9sQTT2D58uUW73/48GH4+vrh7t27Fu9jMpnwyiuvomHDEPj6+uHUqVNu/R4TUcUUzm4AkatJTEyERqOx6zG+/vprfPrpp9i7dw9CQkJQs2ZNux6PiKSNYU1OU1hYCJVK5exmVFmtWrXsfoxLly4hKCgQERERdj8WEUkfh8FJNAaDEX//+xTUr98AjRqFYvbs2TCZHjwn5oknnsC//vUvjB8/HsHB9fHqq68CAGbOnIW2bdshKKgOWrZshdmzZ0Ov15eqe+/evYiO7oLatQPRsmUrzJ8/HwaDAUDxkPG8efPQvHkLBATURpMmTfHGG2+Y9129eg3atGmL2rUD0bjxYxgz5jmbzvPhYXBfXz+sX/8J4uLiEBRUB23atMW+ffvK3V+n02HIkKHo1at3mUPjEyZMwJQpb+C33zLg6+uHJ554osx67ty5i/Hjx6NBg4YICqqDIUOGIi0tDUDxexIaGoadO3eZy0dFRSE8vIn59XfffYeAgNrQ6XSVvodE5FwMaxLNZ599BoVCjoMHD+Ddd+dj2bLlWL/+k1Jlli79AC1atMChQ4cwZUpxGFSvXg0rVizHsWPf491352P9+k+wbNmDMDx69Cji4ydgwoR4HDt2DEuWLMHGjZ9iwYIFAIBduz7H8uUrsGTJYqSknMSnn27E4483BwCkpPyAqVOn4q233sSJE8nYtm0rOnfuZK5748aN8PX1s/nc3333XQwePBhHjhxBr149MXbsONy+feeRcnfv3sWgQYNRVFSEnTt3wM/v0WPPnz8fb731JurVq4fz51ORmJhY5jFfemkCfvjhR/z3v5/hq6/2w2QyYejQYdDr9RAEAZ06dUJSUhKA4mBPTT2P/Pw8nD9/HgCQlHQEbdu2hUajqfA9JCLn4zA4iaZevXqYN28eBEHAY489hjNnzmL58uV44YXnzWW6dInGxIkTS+03ZcoU898bNmyIiRMvYtu2bZg0qbjnPX/+u5g0aRJGjRoFAGjUKATTp7+FmTNnYdq0acjI+A21a9fGU089BaVSifr166Ndu3YAgIyM36DVatG7d29Ur14dDRo0QKtWrczH8/HxwWOPPWbzuY8aNRJDhw4FAMycORMrV36IlJSTePrpp81lbt68iRdffBGhoWFYu3ZNuZcAfH19Ua1aNcjlMgQGBpZZJi0tDfv2/Q/7939pHipfs2Y1Hn+8Ofbs2YvBgwchOjoKH330MQDg6NEjaNmyJQIDa+Pw4SSEh4cjKSkJnTt3Nr9P5b2HROR87FmTaDp0aA9BEMyvO3bsgLS0NBiNRvO61q3bPLLftm3b0atXbzz2WDjq1q2H2bNnIyMjw7z9559/xr/+9S/UrVvPvLzyyqu4fv06dDodBg0ahPz8fLRq1RoTJ76C3bt3m4fIu3Xrhvr1g9GqVWuMGzcOmzdvhk6nM9c9YMAAnDiRbPO5N2/ewvx3rVYLHx8fZGVllSozaNBgNGoUio8//sjma/WpqalQKBRo3769eZ2/vz8aN26M8+dTAQCdO3fGuXPncOvWLRw5cgRRUVGIiopCUlIS9Ho9jh8/jqioqD/aVv57SETOx7Amh9JqS8+iPn78OMaOHYuePXti06ZNOHz4EP7+99eh1xeay+Tm5uIf//gHDh8+bF6OHj2KlJQUeHt7Izg4GCdOJGPhwgVQq73x+ut/R9++z0Cv16N69eo4dOgQ1q5di8DAIMyZMxedO0dV6WtUllAqSw9SCQJQVFRUal2vXr1w9OhRnDt3TtRjl6d58+aoUaMGkpKOICnpCKKji8P6yJEjSElJgV6vR0RERwCo8D0kIufjMDiJ5sSJk6VeJyefQFhYGORyebn7HDt2DPXr18eUKX83r/v1199KlWnVqhUuXLiAsLDQcutRq9Xo27cv+vbti7Fjx6J9+w44c+YMWrduDYVCgW7dnkK3bk9h2rSpaNCgIQ4dOoSBAwdacZbWS0iYBa1Wi4EDn8XevXvQtGlTq+tq0qQJDAYDTpw4YR4Gv337Ni5evIgmTYrrLb5uHYl9+/bi3LlzePLJJ6HRaFBQUICPPvoIbdq0gVarNddZ0XtIRM7FsCbRZGRk4M0338SLL76In376CatWrcLs2bMr3CcsLAwZGRnYunUb2rZti/37v8SePXtKlXnjjTcwfPhw1K8fjGeffRYymQynT/+MX375BTNmTMfGjRthNBrRvn17qNUabNq0CWq1Gg0aNMAXX3yBy5cvo1OnTvDz88P+/V+hqKjIfJ169+7dePvtd0QZCrfEnDmzUVRkxIABA7F37x6Eh4dbVU9YWBj69XsGr7zyKpYsWYxq1aohIeFt1KlTB/36PWMuFxUVhbfemo42bdqgWrVqAIDOnTth8+YteOWVV8zlKnoPicj5OAxOohkxYgTy8vLRvXsPvP763xEfH48XX3yhwn2eeeYZvPTSS5gyZQqio6Nx7NhxvPHGlFJlnn66BzZt2oSDBxPRrVt3PP10Tyxfvhz169cHUDwha/36T9C7dx907twZ33zzLf773//C398fvr6+2L17NwYMGIiOHSPw0UfrsHbtWjRr1gwAkJOTgwsXLtjl/SjPvHnzMHjwIAwYMBAXL160up5ly5ajdetWGD58OHr27AWTyYStW7dAqVSay3Tu3BlGo9F8bRooDvCH11X0HhKR8wkGg95UeTEiIiJyFvasiYiIJI5hTUREJHEMayIiIoljWBMREUkcw5qIiEjiGNZEREQSx7AmIiKSOIY1ERGRxDGsiYiIJI5hTUREJHEMayIiIoljWBMREUkcw5qIiEjiGNZEREQSx7AmIiKSOIY1ERGRxDGsiYiIJI5hTUREJHEMayIiIoljWBMREUkcw5qIiEjiGNZEREQSx7AmIiKSOIY1ERGRxDGsiYiIJE7h7AYQuYKcnBykp6fh5s2bMOj1UCiVqF27NkJDw+Dj4+Ps5hFJTmFhIQwGg831KBQKqFQqEVrk2hjWROXIzs7GgQNf45vEg7h+/Xq55YKCgtCtew90794Dvr6+DmwhkTQVFhZi2Mgx8JLZHtZ+fn74YNkKjw9shjXRQwoLC7F58ybs3bMHRqMBTZo0RbduPRAaFoZ69YKhUipRqNcjMzMD6WlpSEk5ic8+3YjNmzahX//+iI0d7vE/WMizGQwGeMkM+OZ2OAwm66+2KoQiPIXzMBgMHv+ZYlgT/Ul6ejqWvr8EmZmZiIrugsGDYhDSqFGZZQMDA9G2bTsMHRaLy5cuYcfO7fh8106cPJGMia9MQmhoqINbTyQtBpMMRpPc2c1wC5xgRvSHs2fOIGHWDOTm6jDtH29h8uTXyw3qh4U0aoTJk1/HtGlvIjdXh4RZM3D2zBk7t5hI4gQRFgLAsCYCUNyjnjdvLmrU8Mf8d/+NDh06WlVPh44RmP/uv4vrmT8X6enpIreUyHUIIvyhYgxr8niFhYVY+v4SqNVqzEp4BwEBATbVFxAQgFkJ78DbW42l7y9BYWGhSC0lcjUCINiwMKzNGNbk8TZv3oTMzEzET3jJ5qAuERAQgPj4CcjMzMTmzZtEqZOIPBfDmjxadnY29u7Zg6joLlYPfZenQ8cIdI6Kxr69e5CdnS1q3USugRetxcKwJo924MDXMBoNGDwoxi71Dx4cA4PBgIMHD9ilfiJJY1aLhmFNHu2bxINo0qSpRbO+Bw4ciIiICERGRqJnz5746aefKt2nUaNQhDdpgkSGNXkgTjATD8OaPFZOTg6uX7+Otm3bWVT+k08+wbFjx/Ddd99h4sSJGD9+vEX7tW3TDtevX8e9e/dsaS4ReTCGNXms9PQ0AEBoWJhF5f38/Mx/z8nJgSBY9lt/Sf0lxyPyGLbMBDfPCCeAdzAjD3bz5k0AQL16wRbvM3bsWBw6dAgAsG3bNov2Kan/xo0bVWwhkauz9cIzw7oEe9bksQx6PQBApVRavM/q1auRmpqKmTNnYubMmRbto1IpSx2PiKiqGNbksRR/hHShFSEaFxeHQ4cO4ffff6+0bGGhvtTxiDwGZ4OLhmFNHqt27doAgMzMjErL3r17F9euXTO/3r17N/z9/eHv71/pviX1BwYGWtlSItfE2eDi4TVr8lihoX9M/EpLq3RGeE5ODsaMGYO8vDzIZDLUqlULW7dutWiSWXpaWqnjEXkMm28ZyrAuwbAmj+Xj44OgoCCkpJzE0GGxFZZt0KABvv32W6uOk/LDSQQFBaF69epW7U9ExGFw8mhPdeuO1NRzuHzpkl3qv3QpHedTU9Gtew+71E8kbbxoLRaGNXm0Hj2ehlyuwI6d2+1S/44d26FQKNCdYU1ENmBYk0fz9fVFv/79kXT4EJKTj4tad/LxYziSdBjP9OsPX19fUesmcgWCINi8UDGGNXm82NjhqFevHlauWI6srCxR6szKysLKlctRr14wYmOHi1InEXkuhjV5PJVKhYmvTEJ+fh7eTphpc2BnZWUhYdYM5OfnY+Irr0KlUonUUiJXw2vWYmFYEwEIDQ3FtGlv4s6d25g2dYrVQ+LJx49h2tS/4+7dO5g27U2EhoaK3FIiFyLAxnuDO/sEpINhTfSHx5s3R8Lb/4RWq8H8eXOwaNECi2eJX7qUjkWLFmD+/LnQarVIePufeLx5czu3mIg8Bb9nTfQnoaGhePdfC7B58ybs27sHR5IOI7xJE7Rt0w6hYWGoVy8YKpUShYV6ZGZmID0tDSk/nMT51FQoFAoMfHYQYmOHc+ibiETFsCZ6iEqlwujRYzBgwEAcPHgAiQcP4L///bTc8nXq1MGoUXHo1r0HZ30T/Ykg2HbLUN5u9AGGNVE5fH19MXhwDAYPjkFOTg4uXUrHjRs3YNDroVAqERgYiNDQMN6ZjKhcvN2oWBjWRBbw8fFBq1atnd0MIvJQDGsiIrIPdoxFw7AmIiI74TC4WBjWRERkF5xgJh5+z5qIiEji2LMmIiI74TC4WBjWRERkH8xa0TCsiYjITtizFguvWRMREUkce9ZERGQXAjgbXCwMayKJMZlMuHDDgGreAur4yiEI/IFFLkrgMLhYOAxOJDGCIEClAH6/X4Srd40wmUzObhIRORnDmkiCGtRUoJqXgNu5DGwi4jA4uYDbOTos+M+3SDxxEXfv56Nd03qY/pen0TSktrObZjcyQUDDWgpcuWXA7dwiAEBdPw6Jk4txwjD4urVrkJx8HDqdDt7eakRGRmL06DFQKJWlyt3KysLkyZNKrdPrC9GmTVtMnfYPAEDCrJk4fz4VcvmDqHzv/aXw9/ev+qnYiGFNknQ7R4e9Sb9ge+LPSDx5EX/uWF7NysHepHPYMn8Mnu74mPMaaWcMbHJ1zphg1qt3H4yKGw1vb2/k5ORg8aIF2PX5LgwZMrRUuVoBAdjwn43m1wa9HuPHj0XnzlGlysWNHoN+/fpbdwIiYliTZJQE9M5vz+Cbk2kwGIvKLVtkMmHEWxtx88uZkMnc92oOA5sIyMvLK/VaqVRC+VBPuURwcPCDFyYTBEGGa9euVXqM48nHUVRkQseICJvaai8Ma3KqqgT0w/QGIzZ+8QPGPNPOji10PgY2uSyRhsEnxI8rtXbosFjExg4vd6+dO7Zj27ZtKCjIR/Xq1RE3enSlR0o8eADR0dFQqVSl1m/fthVbt2xBQEAA+vXvj65dn6r6aYiAYU1O8ev1u0hYvR+7vj1TpYB+2MWM30VslXQxsMmTrVi5Cmq12vy6vF51iUGDYzBocAwyMjKQdPgQ/PxqVFg+K+smTp06jbjRz5VaP2pUHIKDg6Hy8sLPP5/G4kWLoPZWO6X37b7jhyRZl6/dQdTflmHbwdM2BTUAt55k9rCSwOYscXIZgmD7AkCtVkOj0ZiXysK6RHBwMBqGhGD5sqUVlktMTESjRo0QEhJSan14kybQaLVQKBRo3boNevbsiaNHj1j1VtiKYU0O99riz5Gdm29zPQq5DEO7txChRa6DgU1UNUaDscJr1kVFRfgm8SC69+hRaV3OHMliWJND5RfqcfjHS6LUNSD6cSgVnnclh4FNrkIQ4U9V5OflITHxIHJzc2EymfDrlSvYtm0rWrVqXe4+p079hHv37iHqoVngubm5SEk5iYKCAhQZjTh9+hS++mo/Ip580pq3wmae95OOnEpvKEKh3ihKXc/1c++JZRXhNWxyCY7+nrUgIOnwYWz4ZD30egN8fX0QEfEkYoePAADMnTMbTZs1Q0zMEPMuBw8eQMSTkdBotaWqMhoM2LplC95bshgAEBAQgOeefwGRkZ1sOB/rCQaDnr+Sk0O1HbMEaTZODPP30eDC9jegkMtFapVrKjKZcOWWAfcLTPDXyhjYJAk6nQ4vPD8GR4zdYLShTyiHAZ3lifh4/QZoNBoRW+h6OAxODvfO+F4219E/upnHBzXAIXEiT8GwJofrH/U4Jo2IqrxgBQZ19ayJZRVhYJNkiTQbnBjW5AQFhQacvXTD6v39fTTo0qaRiC1yfQxskiZBhIUAhjU5WEGhAWNmfYb9xy5YXUf/6GZQKjgE/jAGNpH7YliTw5QE9Zffn7epHg6Bl4+BTVLCUXDxMKzJIcQKag6BV46BTdLBYXCxMKzJ7sQKaoBD4JZiYJN0MKjFwLAmu6pqUGu8y7/nr0Iuw/8Nc84NCVwRA5vIfTCsyW6qGtS1a1RD4orxeOvF7pDJSv9WLZMJ+Gd8bzRp6DkP7hADA5ucihetRcPbjZJdWBPUexa/iCYNa6NpSCB6dHgMG/6XgosZtxBePwDDe7ZCRIsGdm61e+KtSclZHHyzUbfGsCbR2RLUJdo1C0a7ZsH2aqLHYWATuTYOg5OoxAhqsg8OiZPj2ToEzl8mSzCsSTSeENSuHm4MbHIsfnVLLAxrEoWnBPWFGwZk3RPnEZ/OwsAmh+EEM9EwrMlmnhDUAGACUGAwId8NnirLwCZyLQxrsomnBLU7YmCTvXEQXDwMa7Iag9r1MbDJrjgMLhqGNVmFQe0+GNhkP+xbi4VhTVXGoHY/DGwiaWNYU5UwqN0XA5tEx2Fw0TCsyWIMavfHwCYxcRBcPAxrsgiD2nMwsEk07FmLhmFNlWJQex4GNpG0MKypQgxqz8XAJttxIFwsDGsqF4OaGNhkG4a1WBjWLkin06FFixZ4663pdjsGg5pKODuwMzIy0K9fP3TsGIFOnTphx46dDjs2kVTwedYuaMGChWjfvoPd6mdQ08Oc+TxshUKBefPmoWXLlrhx4wa6dn0KvXr1hFartfuxyTa2zhFjv/oB9qxdTFpaGs6fP4+ePZ+2S/0MaiqPs3rYQUFBaNmyJQAgMDAQNWv6486dO3Y/LomBw+BiYVi7mOnTpyMhYZZd6mZQU2WcPST+ww8/wmgsQnBwsMOOSTbgV7dEw7B2IXv37kVYWGM0btxY9LoZ1GQpZwX27dt3EB8fj/feW2L3YxFJDa9Zu5Dk5BPYvn07du3aifv3c2EwGODjUx1Tp061qV4GNVWVo69hFxQUIC5uFCZPnoSIiAi7HINIyhjWLiQhYZZ5CHzjxo04e/YXBjU5jaMC22QyYcKEl9ClSxeMGDFC1LrJvgRBsOn/g8Br1mYcBvdgDGqylSOGxL///nts374de/fuRVRUFKKionDmzBlRj0H2wglmYmHP2kXFxcXZtD+DmsRi7x52ZGQk7t7l7G+yzLq1a5CcfBw6nQ7e3mpERkZi9OgxUCiVj5RNmDUT58+nQi5/EIXvvb8U/v7+AIrvabF61YdISTkJlUqF3n36YujQYQ47lz9jWHsgBjWJzZnfwyYJs3lGd9X37dW7D0bFjYa3tzdycnKweNEC7Pp8F4YMGVpm+bjRY9CvX/8yt61btxb379/H8hUfIjs7G/98520EBASga9enqtwuW3EY3MMwqMlenP21LiIACA4Ohre3d/ELkwmCIMO1a9eqXE9BQQGOHknCiJEjodVqUbduXfTt2xcHDxwQucWWYc/agzCoyd7YwyZ7yMvLK/VaqVRCWcawdomdO7Zj27ZtKCjIR/Xq1RE3enS5Zbdv24qtW7YgICAA/fr3N/ear17NhMFgQEhII3PZkJBG2LFju20nYyWGtYdgUJOjMLCphFizwSfEjyu1fuiwWMTGDi93v0GDYzBocAwyMjKQdPgQ/PxqlFlu1Kg4BAcHQ+XlhZ9/Po3FixZB7a1Gx4gI5Ofnw8vLG3K53Fxeo9U+8ouDozCsPQCDmhyNgU3FbJ3RXbzvipWroFarzWsr6lX/WXBwMBqGhGD5sqWYMTPhke3hTZqY/966dRv07NkTR48eQceICHh7e6OwsABGo9Ec2Dpdbql2OBKvWbs5BjU5C69hk1i3G1Wr1dBoNObF0rAGAKPBaPE16z//Mlm3bj3I5XJcuXzZvO7y5cto0KCBxccWE8PajTGoydkY2ORI+Xl5SEw8iNzcXJhMJvx65Qq2bduKVq1aP1I2NzcXKSknUVBQgCKjEadPn8JXX+1HxJNPAgC8vLzQqVNnbNr0GXS5ubh27Sq++N8+dO9hn4coVYbD4G6KQU1SwSFxchhBQNLhw9jwyXro9Qb4+vogIuJJxA4vvvPd3Dmz0bRZM8TEDIHRYMDWLVvw3pLFAICAgAA89/wLiIzsZK7uL3/9G1atWon4+HFQqVTo06evU762BQCCwaDnr7luhkFtH0UmE85k6uGnkaG+P3/PraoikwlXbhlwv8AEf62Mge3GdDodXnh+DE5oYlEkqKyuR2YqRHvdZny8fgM0Go2ILXQ9HAZ3MwxqkioOiXsgPiJTNAxrN8KgJqljYBNZh2HtJhjU5CoY2J6ED/IQC8PaDTCoydUwsD0Es1o0DGsXx6AmV8XAJrIcw9qFMajJ1TGw3Zsgwh8qxrB2UQxqchcMbDfG2eCiYVi7IAY1uRsGtrviRWuxMKxdDIOa3BUDm6h8DGsXwqAmd8fAdjPsWIuGYe0iGNTkKRjY7oRpLRbe4NgFMKjJ0/DhH+5BEASb/s04G/wB9qwljkFNnoo9bKIHGNYSxqAmT8fAdnUcBhcLw1qiGNRExRjYLoxZLRqGtQQxqIlKY2C7Kqa1WBjWEsOgJiobA5s8GcNaQhjURBVjYLsW3htcPAxriWBQE1mGge1COAouGoa1BDCoiaqGgU2ehmHtZAxqIuswsF0Bu9ZiYVg7EYOayDYMbKkTYNvjMRnWJRjWTsKgJhIHA1u6OMFMPAxrJ2BQE4mLgU3ujmHtYAxqIvtgYEsQL1mLhmHtQAxqIvtiYEsN01osDGsHYVATOQYDW0JsmVxmnmRGAMPaIRjURI7FwCZ3w7C2MwY1kXMwsJ2Ps8HFw7C2IwY1kXMxsJ2Ml6xFw7C2EwY1kTQwsMkdMKztgEFNJC0MbGdh11osDGuRMaiJpImB7QQCbJwN7uwTkA6GtYgY1ETSxsB2LE4wE4/C2Q1wFwxqItdQEthXbhlwO7cIAFDXTw6B3+l1C+vWrkFy8nHodDp4e6sRGRmJ0aPHQKFUliqXnZ2N9R9/hLNnzyAvLw+BgUGIjR2O9h06mMu8/FI87t7NhkxW3K+Vy2X4eP0Gh55PCYa1CBjURK6Fge2+evXug1Fxo+Ht7Y2cnBwsXrQAuz7fhSFDhpYql5+fh5BGjRA3egxq1KiBlJSTeG/JYsyb9y6C69c3l3t10iR07Bjh6NN4BMPaRgxqItfEwHYAW+9C9se+eXl5pVYrlUooH+oplwgODn7wwmSCIMhw7dq1R8oFBgZh4MBnza/bt++AunXr4vyF86XCWioY1jZgUBO5Nga2vdk6o7t43wnx40qtHTosFrGxw8vda+eO7di2bRsKCvJRvXp1xI0eXemRsrOzkZGRiYYNG5Zav3rVh/hw5QoEBdXBkKFD0bZtOyvOw3YMaysxqIncAwNb+lasXAW1Wm1+XV6vusSgwTEYNDgGGRkZSDp8CH5+NSosb9DrsWTxIkR26oSwsMbm9f838RWEhoZBJpPh2PffY+GCBXj7nX+icePGFdRmH5wNbgUGNZF74Sxx+xAEweYFANRqNTQajXmpLKxLBAcHo2FICJYvW1puGYNej4ULF8DLywvx4+NLbWvW7HF4eXlBqVQiKjoa7dq3w7Hvv7P+DbEBw7qKGNRE7omB7Z6MBmOZ16yB4qBetGghDAYDXv/7lEdmjD9MJjgvMhnWVcCgJnJvDGyROfgRmfl5eUhMPIjc3FyYTCb8euUKtm3bilatWj9S1mAwYNHihSgoyMeUN6Y+0lu/lZWFs2fPQK/Xw2Aw4OjRI0hOTkYHJ80M5zVrCzGoiTwDr2G7MEFA0uHD2PDJeuj1Bvj6+iAi4knEDh8BAJg7ZzaaNmuGmJghOJ+aihPJyVAqVfjrX140VzE4JgYxMUOQn5+Pj9atw/Xr1yGXy1CnTl1Mfu01hIeHO+fUDAY9f22sBIOaAKDIZMKZTD38NDLU9+fvue6uyGTClVsG3C8wwV8rY2BXgU6nwwvPj8HpoIkoknlZXY+sqABPXF+Kj9dvgEajEbGFrofD4JVgUBN5Jg6J287Bo+BujWFdAQY1kWdjYJNUMKzLwaAmIqDiwL5fUIT0m3rk82piOfiITLHwwlsZGNRE9GdlTTrzVQu4/LsRJhPw+30j6tXgj9NHiHS7UWLP+hEMaiIqy8M97Eu3ioMaAHLyijg8Xib2rMXCsP4TBjURVUQmCKhV/dEfm4YiQFfIsCb74bjNHxjURFSZ+wVFuPK7scxtd3VF0Hqx//NnHAUXD/9ngUFNRJa5eseA8ka7szkUXgYOg4uFYQ3g1YW7GNREVKl6NRTw8RbKjBBjEZBbUOTwNkkav2gtGo8fBj944iI+2/+jRWUZ1ESeTeslg9ZLBmORCffyi5CtK8K9fBNK+tM3copQzVvu1DaSe/L4sP7iaKpF5RjURFRCLhPgp5HDTyOHsciEnLwi3MwxQqtiT7A0W4ey+X6W8PiwvnnnfqVlGNREVB65TEANrRw1tOxRP4xRLR6Pv2Yd+UTDCrczqImIyNk8PqyHdH8CdWpVL3Mbg5qIyAYeOsFs9+7duHv3rqh1enxY1/LTYu/ivyK8Qa1S67u2DcX+D8YyqImIrOaZX91asGAhHnssHF26dMX06TOwf/9+3L9f+SXXinj8NWsACAuuieMfv4KU1Excu5WD+oF+aNm4Dp9dS0RkCw+9K8q3336DO3fu4siRJBw6dAizZiXg4sWLaNOmDfbv/9KqOhnWfxAEAe2aBju7GURE5AZq1PBDeHg4rl27juvXb+Dq1asoKrL+e/gMayIiIhH99a9/w5EjR1Czpj+6du2KkSNH4IMPlsLHx8fqOhnWRERkF4Ig2HQ50VUvRSYmJsLHxwdPP90T0dHR6NQpEhqNxqY6PX6CGRER2YtnTjBLT0/Df/6zAYGBtbFmzWo88URL9O7dB3PnzrW6TvasiYiIRNaiRQuEhISgcePGaNSoETZu3Ijk5GS8+eabVtXnsLB+7bNr+PZcrqMOV0rXplosGlnHKccmIiqLR/xMFGDjbHDRWuJQCQlvIykpCT/99BMee6wxoqOjsWzZMkRFRVtdp8PC+ttzudAbTVDKHfvu640mp30giIjKw5+J7isnJwcvv/wyoqOjUKtWrcp3sIBDh8GVcgGHp4c78pCInm3Zoy+JiByNPxPd06JFC81///3331GzZk2b6+QEMyIisouS2eC2LK4oLy8PkyZNRlBQHTRu/BiCgupg0qTJyM21fkSDYU1ERHbimbPB33zzLVy8eAGff74LqannsHv350hLS8P06TOsrpOzwYmIyD489BmZ//vf/3D06FH4+9cAANSuXRvr13+MyMhOWLx4kVV1smdNREQkIpPJBJms9G8agiCDyWSyuk6GNRER2YlnDoP37t0bzz33PFJSfsCtW7dw8mQKXnzxRfTp08fqOhnWRERkF4IIf1zR3LlzUL9+MPr06YPHHgvHM888g3r16mLOnNlW18lr1kREZCc2PiLTRcO6WrVqWLZsGT744APcunULtWrVsnlmO8OaiIjIDgRBQEBAgCh1MayJiIhs1KBBQ4t6z1euXLaqfsmH9fR/TMGXX/wPGb/9iq8Sk9DiiZbObhKRzTIyMjB+/HhkZd2CQiHHlClvYPDgQc5uFklcfn4+4se+iAup5+CtVqNWrQDM//ciNAoNc3bTyibYOAzuQjdF+fTTjXatX/Jh3W/AILw0cRKe7dfb2U0hEo1CocC8efPQsmVL3LhxA127PoVevXpCq9U6u2kkcWOeewHdn+4FQRCwbs2HeH3SRGz/fJ+zm1UmWyeJWbPvurVrkJx8HDqdDt7eakRGRmL06DFQKJWPlNXpdFi96kOkpJyESqVC7z59MXToMIu3/9msWQk4cOBrAMD8+fMxbdq0Kre9IpKfDR7ZqTPq1q3n7GYQiSooKAgtWxaPEgUGBqJmTX/cuXPHya0iqfP29kaPnr3Nw61t23XAb7/96uRWSUuv3n2weMn7WP/Jf/DvBQtx5cpl7Pp8V5ll161bi/v372P5ig/x9juzceDrr/Htt99YvP3PLly4AIPBAAD44INlYp+W9HvWRO7uhx9+hNFYhODgYGc3hVzMmlUr0LvvM85uRvlEGgbPy8srtVqpVEJZRk8ZQOnPkckEQZDh2rVrj5QrKCjA0SNJ+OfsOdBqtdBqtejbty8OHjiArl2fqnT7w6KjoxAVFY2wsDDk5eUhLm50me3buPE/Fp58aQxrIie6ffsO4uPj8f777zm7KeRi3lu8AJcvpWPzwt3Obkq5xLrb6IT4caXWDx0Wi9jY4eXut3PHdmzbtg0FBfmoXr064kY/GpxXr2bCYDAgJKSReV1ISCPs2LHdou0PW7duHXbt2oUrV65g//79eOKJFpaepkUY1kROUlBQgLi4UZg8eRIiIiKc3RxyISs+eB/79uzG5u27oNFonN0cu1uxchXUarX5dXm96hKDBsdg0OAYZGRkIOnwIfj51XikTH5+Pry8vCGXy83rNFqtuRdf2faHeXl5ITY2FgBw9262512zJnJHJpMJEya8hC5dumDEiBHObg65kJXLP8CO7VuxadtO+Pr6Obs5FSoZBbdlAQC1Wg2NRmNeKgvrEsHBwWgYEoLly5Y+ss3b2xuFhQUwGo3mdTpdrvmXgsq2V8SWO5WVR/JhPeW1V9H2iaa4djUTI2MHI7JDK2c3ichm33//PbZv3469e/ciKioKUVFROHPmjLObRRJ39Wom3p75JnJy7mLooP54+qnOeKZXN2c3q1xSeJ610WAs85p13br1IJfLceXyZfO6y5cvo0GDBhZtdzTJD4P/exGv5ZH7iYyMxN27nP1NVVO3bj1cu5Xj7GZYTBAAme3zyyyWn5eH777/Dh07RkCj0eC3X3/Ftm1b0apV60fKenl5oVOnzti06TO8+upkZOdk44v/7cPwESMt2u5okg9rIiIiiwgCkg4fxoZP1kOvN8DX1wcREU8idnjxpaa5c2ajabNmiIkZAgD4y1//hlWrViI+fhxUKhX69OlbaqZ3ZdsdiWFNRER2Idg4HbyqPWtvb2/MmDmr3O1vvjW91GuNRoNJk14rt3xl28uzevUajB37t0fWv/rqJLz33pIq1we4wDVrIiJyTZ75NGtg2bJl2LWr9I1YXnvtdZvmpbBnTUREdiHYeFMUMSaYOcPWrVswcOCzqFmzJqKiovDGG28gJSUFu3bttLpOhjUREZGIGjdujA0bPkFc3Gh06RKNc+dS8fnnu+Dr62t1nQxrIiKyC5kAmDzjoVv4+eefS7328vLC+PHjsXLlSqxZsxoZGRnIyMhAixbW3dmMYU1ERHbh6AlmzhQVFQ1BEGAymR7ZNmDAQADFw/p37ty2qn6GNRERkY3sfd8EhjUREdmFJ/Ws7c2hYa03mhA9+7wjDwm90QSlnP/iRCQ97v4zUSYIMHngbPCrV69izpw5+PHHH3Hv3v1S206d+smqOh0W1l2bavHtuVxHHc5MKRfQtanW4cclIqqIJ/xMtDVqXTOqgXHjxkGt1mDSpEmiPRXNYWG9aGQdRx2KiEjy+DPRff34409IT0+DSqUSrU7ewYyIiOxCrEdkupqmTZvixo0botbJCWZERGQXnjrBbMCAARg5ciT+9rexqF07oNS2Z555xqo6GdZERGQXnjrBbM2aNQCAhQsXllovCALDmoiISApOnz4lep0MayIisgtPHQa3B4Y1ERHZhSd9dat37z748ssvADy49WhZDh8+ZFX9DGsiIrILm2d0u1Ba/+1vfzX//aWXJoheP8OaiIjIRsOGDTP/fdSoUaLXz7D+E73RhKx7RgRUl/MWpURENrL1mrUr9az37dtnUTnOBhdBocGE3+8X4V5+EUIDlAxsIiIbCPCccfCpU6dVWoZf3RKJ1kuGOn5yXLtrRHqWnoFNREQWscfXtf6MYf2QWtXkAMDAJqJHFOoN2Jb4M365dAOP1a+FuD5tIJPxrs3lkXnQMLi9MazLwMAmohJ6gxGHfriEDftOYvfhszAYi8zbJi/ejf/OicPTHR9zYguly5OuWdsbw7ocDGwiz6U3GPFtSjp2fnsGe5LO4k5OXrnlhk3bgO/W/R+ahtR2cCuljz8xxcOwrgADm8hzWBrQDysymTDnowPY8PZIO7eQPBnDuhIMbCL3lnrlJpZuPlqlgH7YiV8yRG6VexBsvSsK7zdqxrC2AAObyD0t23IUM1Z+CWNRUeWFK1CjulqkFrkXTjATD6cxWqhWNTnq+MlRaADSs/TQG03ObhIR2eD701cwfeUXNgc1AHRrHyZCi9xPScfaloWKMayrgIFN5D42ff0Tiops/wwLAvB6XFcRWkRUPoZ1FTGwidzDhV9viVJP9/aN4e+jEaUud8OetXgY1lZgYBO5vrDgmqLUE9PtCVHqcUcyCDYvVIxhbSUGNpFre+6ZdpDJbAsDhVyGZzo3FalFROVjWNuAgU3kuto1C8Y/nu9mUx3d2odxCLwCHAYXD8PaRgxsItc1sMvj0Hgrrd5/UNcWIrbG/TCsxcPvWYuA38Mmcj2pV25iwGsfQ5evt2p/pUKOflHNRG6Ve3H0vcH1ej3Wrl2D06dO4d69HPj7+2Pgs4PQvXuPR8reysrC5MmTHtq/EG3atMXUaf8AACTMmonz51Mhlz+IyvfeXwp/f/8qn4qtGNYiYWATuY7UKzfRf/JHuHnnvtV1PNUulDdDkRij0Ygafn6YMXMWAgMDceHCBcybOxs1a9ZEq1atS5WtFRCADf/ZaH5t0OsxfvxYdO4cVapc3Ogx6NevvyOaXyGGtYgY2ETSJ0ZQAxwCt4QgCMW3HLWS6Y998/JK3wZWqVRCqXz08oW3tzeGj3hwj/bw8HA0b94C53755ZGwftjx5OMoKjKhY0SE1e21J4a1yBjYRNIlVlBzCNwyNl93FgATgAnx40qtHjosFrGxwyvdvbCwEBcvXkBUVHSlZRMPHkB0dDRUKlWp9du3bcXWLVsQEBCAfv37o2vXp6pyBqJhWNsBA5tIesQKagB4tsvjHAK3gK2XrIHisF6xchXU6gfvd1m96kf2M5mwcuUK1KlTp9LeclbWTZw6dRpxo58rtX7UqDgEBwdD5eWFn38+jcWLFkHtrXZK75uzwe2Es8SJpKOqQd37yXBMGhFV5jZfrTcSxvUSs3lUCbVaDY1GY14qC2uTyYQ1q1fh2tVMTJkyFTJZxVGXmJiIRo0aISQkpNT68CZNoNFqoVAo0Lp1G/Ts2RNHjx6x9XSswp61HbGHTeR8VQ3qPpFN8EnCCHipFOjQvD5mrdqPi7/9Di+lAlGtQ7Bo8kDUD/Szb6PdhMzGYXCTAFT1MSsmkwlr16zGxYsXMGNmAjRabYXli4qK8E3iQQwaHFNp3bZcf7cVw9rOGNhEzmNLUANA/6jH0T/qcdzTFUClkJvXk2VsnWBmTdKvXbsGqannMHPW26hWrVql5U+d+gn37t1D1EOzwHNzc5Gaeg7Nm7eAUqHAmbNn8NVX+zE+fkKV2yQG/s9zAAY2kePZGtR/Vl3jJXbzyA6ysm5i/5dfQKlU4qUJ8eb10V26YNy48Zg7ZzaaNmuGmJgh5m0HDx5AxJORj/TAjQYDtm7ZgveWLAYABAQE4LnnX0BkZCfHnMxDBINBz4upDnLrvhHX7hqhUoCB7YKKTCacydTDTyNDfX/+nitlYgY1VZ1Op8MLz4+Bqtu7EBTeVtdjMuSjMHEqPl6/ARqNZ9/WlRPMHIiTzojsj0EtHTLB9oWKMawdjIFNZD8MamkRRFioGMPaCRjYROJjUJM7Y1g7CQObSDwMamkqvoOZYMPi7DOQDoa1EzGwiWzHoJYuPiJTPAxrJ2NgE1mPQS1tMtg4wczZJyAhfC8kgIFNVHUMavIkDGuJYGATWY5B7Ro4DC4ehrWEMLCJKsegdh2CCH+oGMNaYhjYROVjULsW3hRFPAxrCWJgEz2KQU2ejGEtUQxsogcY1C7K1uvV7FmbMawljIFNxKB2ZZxgJh6GtcQ5M7AzMjLQr18/dOwYgU6dOmHHjp0OOza5Bp1OhxYtWuCtt6bbpX4GNVEx/o92Ac56HrZCocC8efPQsmVL3LhxA127PoVevXpC+9BzX8lzLViwEO3bd7BL3Qxq11dy21Bb9qdi7Fm7CGf0sIOCgtCyZUsAQGBgIGrW9MedO3fsflxyDWlpaTh//jx69nxa9LoZ1O6Bs8HFw7B2Ic4cEv/hhx9hNBYhODjYYcckaZs+fToSEmaJXi+D2n2U9cjLqi5UjGHtYpwR2Ldv30F8fDzee2+J3Y9FrmHv3r0IC2uMxo0bi1ovg5qobPwf7oIceQ27oKAAcXGjMHnyJERERNjlGOR6kpNPYPv27di1ayfu38+FwWCAj091TJ061eo6GdTux9YZ3bxk/QD/l7soRwS2yWTChAkvoUuXLhgxYoSodZNrS0iYZR4C37hxI86e/YVBTY+QCQJkTGtRcBjchdl7SPz777/H9u3bsXfvXkRFRSEqKgpnzpwR9RhEDGr3xe9Zi4f/212cPXvYkZGRuHuXs7+pYnFxcVbvy6Amsgx71m6AdzojV8Sgdn/sWYuHYe0mGNjkShjUnkEmwkLF+F64EQY2uQIGNVHVMazdDAObpIxB7Vk4DC4ehrUbYmCTFDGoPU/JvcFtWagYw9pNMbBJShjUnok9a/EwrN0YA5ukgEFNZDuGtZtjYJMzMag9G5+6JR6GtQdgYJMzMKgJtg6BM6zNGNYegoFNjsSgJgAQRPhDxRjWHoSBTY7AoCYSH8PawzCwyZ4Y1PRnvGYtHn5CPJAjn4dNnoNBTQ9z9POs9Xo91q5dg9OnTuHevRz4+/tj4LOD0L17jzLLJ8yaifPnUyGXP/g/+N77S+Hv7w8A0Ol0WL3qQ6SknIRKpULvPn0xdOgwq8/HFvyUeCgGNomJQU1lcXRYG41G1PDzw4yZsxAYGIgLFy5g3tzZqFmzJlq1al3mPnGjx6Bfv/5lblu3bi3u37+P5Ss+RHZ2Nv75ztsICAhA165PVa1hIuAwuAfjkDiJgUFN9paXlwedTmde9Hp9meW8vb0xfMRIBAUFQRAEhIeHo3nzFjj3yy9VPmZBQQGOHknCiJEjodVqUbduXfTt2xcHDxyw9XSswk+Lh2MPm2zBoKaKCLDtlqEls8EnxI8rtX7osFjExg6vdP/CwkJcvHgBUVHR5ZbZvm0rtm7ZgoCAAPTr39/ca756NRMGgwEhIY3MZUNCGmHHju1WnInt+IkhBjZZhUFNlbH1MZclY30rVq6CWq02r1cqlZXvazJh5coVqFOnDjpGRJRZZtSoOAQHB0Pl5YWffz6NxYsWQe2tRseICOTn58PLyxtyudxcXqPVIi8vz4Yzsh6HwQkAh8SpahjU5EhqtRoajca8VBbWJpMJa1avwrWrmZgyZSpksrKjLrxJE2i0WigUCrRu3QY9e/bE0aNHABQPqRcWFsBoNJrL63S5pX5pcCSGNZkxsMkSDGqylDMe5GEymbB2zWpcvHgBb02fCY1WW4X2Pjhg3br1IJfLceXyZfO6y5cvo0GDBlVvlAgY1lQKA5sqwqCmqnBGWK9duwapqecwfcYsVKtWrdxyubm5SEk5iYKCAhQZjTh9+hS++mo/Ip58EgDg5eWFTp06Y9Omz6DLzcW1a1fxxf/2oXuPp619O2zCTxA9gtewqSwMaqoqmSBAZsMEM1MV983Kuon9X34BpVKJlybEm9dHd+mCcePGY+6c2WjarBliYobAaDBg65YteG/JYgBAQEAAnnv+BURGdjLv95e//g2rVq1EfPw4qFQq9OnT1ylf2wIAwWDQs+tEZbp134hrd41QKcDABlBkMuFMph5+Ghnq+3tWADGoqSp0Oh1eeH4MWo5cArnK+mu8xsI8nPpsEj5evwEajUbEFroeDoNTuTgkTgCDmqznjGFwd8WwpgoxsD0bg5pswbAWD8OaKsXA9kwMarKVTISFivG9IIswsD0Lg5pIWhjWZDEGtmdgUJNYBEGweaFiDGuqEga2e2NQk6hsvV7NrDbjJ4yqzJO+h20sMuF6thHGIsD0x52KcwuK8OvvBgBANW8B/lp5RVW4DAY1kXTxU0ZW8ZTA1htNuJ1b9NA6IDuv6I+/u0dYM6jJHhz9PGt3xmFwsponDIl7K2XQqMr/iVGzmut/hBjUZC8ywfaFirn+TxpyKk8I7ECfsnvOXgrAV+3aHyEGNdmTIMIfKubaP2lIEtw9sKt5l927ru0jd+nZqgxqItfBsCZRuHtgP9y7dvVeNYOaHIF3MBOP6/60Iclx58Au7l0/eO3KvWoGNTkKr1mLh2FNonLnwK79R+9aJrhur5pBTY7EnrV4XPMnDkmauwZ2dW85/DQCgmu4Zq+aQU3kuvgpJLtw1+9h1/dXOrsJVmFQkzPYestQV/yl2F7Ysya7cdcetqthUJOzCCIsVIxhTXbFwHYuBjWRe2BYk90xsJ2DQU3Oxtng4mFYk0MwsB2LQU1SwNng4mFYk8MwsB2DQU1SwedZi4dhTQ7FwLYvBjWRe2JYk8MxsO2DQU1Sw2vW4mFYk1MwsMXFoCYpEmDjNWtnn4CEMKzJaRjY4mBQk5TxO9biYFiTUzGwbcOgJvIM/MSS07nrrUntjUFNUicTBMhsmNFty77uhj1rkgT2sKuGQU2ugN+zFg/DmiSDgW0ZBjW5Coa1eBjWJCkM7IoxqIk8E8OaJIeBXTYGNbka9qzFw7AmSWJgl8agJlckE2GhYnwvSLIqCuy8wiJk64qc2DrHYVATET/NJGllfa2rQG/C5d8NMJmAcJUSXgr3HStjUJMrs/VhHHyQxwP8RJPk/TmwL97Qw1gElPSxs3VFqO0jd17j7IhBTa7O1uvOVd1Xr9dj7do1OH3qFO7dy4G/vz8GPjsI3bv3eKRsdnY21n/8Ec6ePYO8vDwEBgYhNnY42nfoYC7z8kvxuHs3GzJZ8SC0XC7Dx+s3WH9CNuCnmlxCrWpyFOhNuJ1beug7O8/olmHNoCZ3YOvDOKq6r9FoRA0/P8yYOQuBgYG4cOEC5s2djZo1a6JVq9alyubn5yGkUSPEjR6DGjVqICXlJN5bshjz5r2L4Pr1zeVenTQJHTtGWH8SIuE1a3IJ9/OLcKeMa9T5eqDA4F6TzxjURKXl5eVBp9OZF71eX2Y5b29vDB8xEkFBQRAEAeHh4WjevAXO/fLLI2UDA4MwcOCzqFmzJmQyGdq374C6devi/IXz9j4dq/DTTZKnNz64Rl0WdxoKZ1CTOxFrGHxC/LhS64cOi0Vs7PBK9y8sLMTFixcQFRVdadns7GxkZGSiYcOGpdavXvUhPly5AkFBdTBk6FC0bdvO8hMQET/hJHkyAVArBegKy07ruzr3GAq/dPU2g5rcilgTzFasXAW1Wm1er1QqK93XZDJh5coVqFOnDjpGVDyMbdDrsWTxIkR26oSwsMbm9f838RWEhoZBJpPh2PffY+GCBXj7nX+icePGFdRmH/yUk+TJZQLCaitRaDAhO6/4K1t5+gfBXWAo/iqXWuW6V3VMJhNeWbCLQU1uxdZHXZbsq1arodFoLN7PZDJhzepVuHY1EzNmzDJPECuLQa/HwoUL4OXlhfjx8aW2NWv2uPnvUdHROJ58DMe+/45hTVQRlUJAQHU5AqrLzcH9+30j9EYgT2+CWuXsFlrvpwvXcOiHdIvKMqiJymcymbB2zWpcvHgBM2YmQKPVllvWoNdj0aKFMBgMeGPqNCgq6bHLBOd1CFy3K0IerSS4m9ZRoXldBfy1rj0M/tuNuxaVY1CTKymZDW7LUlVr165Bauo5TJ8xC9WqVSu3nMFgwKLFC1FQkI8pb0x9ZGj9VlYWzp49A71eD4PBgKNHjyA5ORkdnDQznJ94cnkVDXG5iroBPpWWYVCTq3H096yzsm5i/5dfQKlU4qUJD4a0o7t0wbhx4zF3zmw0bdYMMTFDcD41FSeSk6FUqvDXv7xoLjs4JgYxMUOQn5+Pj9atw/Xr1yGXy1CnTl1Mfu01hIeHW39CNhAMBr17fe+FyAWZTCZ0fOF9nP/1VpnbGdTkSnQ6HV54fgyGvbYCSi915TuUQ1+Qhy2LJuDj9RuqdM3aHbl+l4TIDQiCgM9mx6FOreqPbBvZqzWDmlxSyWxwWxYqxk8/kUQ0rl8LSatfxvbE0zh66goC/auhT6em6NYuzNlNI7KKYOMdzJjVDzCsiSSklp8W4wY/iXGDn3R2U4hsJtZXt4jD4ERERJLHnjUREdmFo2eDuzOGNRER2YVMECCzIXFt2dfdMKyJiMgu2LMWD69ZExERSRx71kREZBfsWYuHYU1ERHYhwMawFq0lro9hTWSBnJwcpKen4ebNmzDo9VAolahduzZCQ8Pg41P5fb2JPJEMAmQ2RK4t+7obhjVRObKzs3HgwNf4JvEgrl+/Xm65oKAgdOveA92794Cvr68DW0hEnoJhTfSQwsJCbN68CXv37IHRaECTJk3RrVsPhIaFoV69YKiUShTq9cjMzEB6WhpSUk7is083YvOmTejXvz9iY4dDpXLhh2sTiYTXrMXDsCb6k/T0dCx9fwkyMzMRFd0FgwfFIKRRozLLBgYGom3bdhg6LBaXL13Cjp3b8fmunTh5IhkTX5mE0NBQB7eeSFoY1uLhV7eI/nD2zBkkzJqB3Fwdpv3jLUye/Hq5Qf2wkEaNMHny65g27U3k5uqQMGsGzp45Y+cWE5GnYFgTobhHPW/eXNSo4Y/57/4bHTp0tKqeDh0jMP/dfxfXM38u0tPTRW4pkeuQCbYvVIxhTR6vsLAQS99fArVajVkJ7yAgIMCm+gICAjAr4R14e6ux9P0lKCwsFKmlRK6leBjcludZO/sMpINhTR5v8+ZNyMzMRPyEl2wO6hIBAQGIj5+AzMxMbN68SZQ6iVyNIMJCxRjW5NGys7Oxd88eREV3sXrouzwdOkagc1Q09u3dg+zsbFHrJiLPwrAmj3bgwNcwGg0YPCjG4n02bNiAatWqYffu3ZWWHTw4BgaDAQcPHrClmUQuqWQ2uC0LFWNYk0f7JvEgmjRpavGs7ytXruDjjz9Gx46W9cIbNQpFeJMmSGRYkwcSbJxcxrB+gGFNHisnJwfXr19H27btLCpfVFSEl19+GQsWLKjSTU/atmmH69ev4969e9Y2lcgl2Ta5rHihYgxr8ljp6WkAgNCwMIvKL126FE8++STatGlTpeOU1F9yPCKiquIdzMhj3bx5EwBQr15wpWXPnDmDXbt24csvv6zycUrqv3HjRpX3JXJlvIOZeBjW5LEMej0AQKVUVlr26NGjuHLlClq1agWgOHgnTpyI69evY+zYsRXuq1IpSx2PyFPIYNvwLYd+H2BYk8dS/BHShRaE6NixY0uFcp8+ffDyyy9jwIABle5bWKgvdTwioqriLy7ksWrXrg0AyMzMsOtxSuoPDAy063GIpIZf3RIPe9bksUJD/5j4lZZm8YzwEl988YXFZdPT0kodj8hT2Dqjm7PBH2DPmjyWj48PgoKCkJJy0q7HSfnhJIKCglC9enW7HodIavggD/EwrMmjPdWtO1JTz+HypUt2qf/SpXScT01Ft+497FI/EXkGhjV5tB49noZcrsCOndvtUv+OHduhUCjQnWFNHojXrMXDsCaP5uvri379+yPp8CEkJx8Xte7k48dwJOkwnunXH76+vqLWTeQKGNbiYViTx4uNHY569eph5YrlyMrKEqXOrKwsrFy5HPXqBSM2drgodRK5GkGEP1SMs8HJ46lUKkx8ZRISZs3A2wkzMSvhHZuea52VlYWEWTOQn5+Paf94q0r3ESci6+n1eqxduwanT53CvXs58Pf3x8BnB5V7GUqn02H1qg+RknISKpUKvfv0xdChwyze7kjsWRMBCA0NxbRpb+LOnduYNnWK1UPiycePYdrUv+Pu3TuYNu1NhIaGitxSItfh6NngRqMRNfz8MGPmLKz/5D946eWJ2PDJevz0049lll+3bi3u37+P5Ss+xNvvzMaBr7/Gt99+Y/F2R2JYE/3h8ebNkfD2P6HVajB/3hwsWrTA4lnily6lY9GiBZg/fy60Wi0S3v4nHm/e3M4tJpI2R1+z9vb2xvARIxEUFARBEBAeHo7mzVvg3C+/PFK2oKAAR48kYcTIkdBqtahbty769u2LgwcOWLTd0TgMTvQnoaGhePdfC7B58ybs27sHR5IOI7xJE7Rt0w6hYWGoVy8YKpUShYV6ZGZmID0tDSk/nMT51FQoFAoMfHYQYmOHc+ibCEBBfp4o++flla5HqVRCacHtewsLC3Hx4gVERUU/su3q1UwYDAaEhDx4ln1ISCPs2LHdou2OxrAmeohKpcLo0WMwYMBAHDx4AIkHD+C///203PJ16tTBqFFx6Na9B2d9EwFQKBTw8/PDe2//n811eXt7Y0L8uFLrhg6LrXTipslkwsqVK1CnTh10jIh4ZHt+fj68vLwhl8vN6zRarfkXg8q2OxrDmqgcvr6+GDw4BoMHxyAnJweXLqXjxo0bMOj1UCiVCAwMRGhoGO9MRvQQlUqFD5atgMFgsLkuk8n0yG1HK+tVm0wmrFm9CteuZmLGjFmQyR694uvt7Y3CwgIYjUZzIOt0uVCr1RZtdzSGNZEFfHx80KpVa2c3g8hlqFQqp1wOMplMWLtmNS5evIAZMxOg0WrLLFe3bj3I5XJcuXwZoWHF9+2/fPkyGjRoYNF2R+MEMyIichtr165Bauo5TJ8xC9WqVSu3nJeXFzp16oxNmz6DLjcX165dxRf/24fuPZ62aLujCQaD3uSUIxMREYkoK+smXn5pApRKJWSyB9eao7t0wbhx4zF3zmw0bdYMMTFDABR/j3rVqpVIOVn8Peo+ffpi6LBY836VbXckhjUREZHEcRiciIhI4hjWREREEsewJiIikjiGNRERkcQxrImIiCSOYU1ERCRxDGsiIiKJY1gTERFJHMOaiIhI4hjWREREEsewJiIikjiGNRERkcQxrImIiCSOYU1ERCRxDGsiIiKJY1gTERFJHMOaiIhI4hjWREREEsewJiIikjiGNRERkcQxrImIiCSOYU1ERCRxDGsiIiKJ+39kDVvccN9oIwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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mS+gsLAIhYWFeP75mRg3bhwUCgUGDRqMM2fO4K233obNZsPmzZuxbds25/OHDBmMvLw8LF26DBUVFbDb7Thy5Ai2b9/u0utrtVpcf/31eOGFF/Drr7/ihhtucD72wQcfIC8vD5IkISoqCgqFosbI60LczZWYmIjrrrsOjzzyCAoKCgBUrrD9+OOPG3yN8ePHYdu2bdiwYQOsViusVisOHDiAvXv3uZTxjjv+D3PnvoQDBw5ACIETJ044F/tMmjQRs2bNxpEjRwAAJSUl+PTTT53zoUSewNIkaoS5c+ciNTUVPXv2RM+eGWjbti1mz54FAIiNjcH7769AdnY2UlNb45133sHYsWOdzw0PD8eGDRvw3//+F507X460tDTcdddE5Obmufz6EyaMx5dffonrrrsOERERzvu/+eYb9OnTF0lJyZgw4Sa88MJMXH755RfY03mNybV48SJERUVhwICr0KpVCoYMuRb79zd80oOkpCSsW/ch/vOft9Cx4yVo374DHn74EZeLbcqUKbjrrjvxf/93B5KTW2HEiBtw4kTloqjJkyfjpptuwi233IpWrVLQo0dPl+aJidwh2WzWC385i4iIiABwpElEROQyliYREZGLWJpEREQuYmkSERG5iKVJRETkIpYmERGRiwK6NKtOe3axSx4RERG5IqBL02w24/9uvxVms7nJ+yosyPdAIu9iZu9g5ubnb3kBZvaWpmQWQsBkKnbpsnxVAro0PcmdN9VXMLN3MHPz87e8ADN7S2MzCyFgNBagvKwUNpvrF0hnaRIRUVCpKkzLuXOIjomDWq1x+bksTSIiChq1C1OjCXXr+bw0GBERBQ1JkqBRh0KnC3e7MAGONImIKAgIIVBRUbkoVBfWuMIEWJpERBTgqg7JFhuLYLfbm7QvHp69ALtDYM/Rcuz+3QyD0Qx9tAE922nRo60OympXoyciIt9Uew5TqVQ2aX8szQbs+q0Mr39RgNwSG4DKZc0KRQk+3l+CxMgQ3DswDr3ah8mckoiIGtLURT/14eHZenx9qBRPr8tDbokN7RLUuDczDo8N1OLezDi0jVcjt8SGp9fl4etDpY3a/1NPPY2ePTMwb94rHk5ORERVhBAQQnisMAGONOvIK7HhpU/zIYTA9GviMPIfkZAkCYb8CujjozDiikis31uCrC8L8NKn+bisVSjiI9x7G99//338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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Certified equilibrium flows on the network (house style via tabench.viz).\n", "display(viz.plot_network_flows(net, final.link_flows))\n", "\n", "# Emitted flows vs the analytic UE recomputed above (off-diagonal == disagreement).\n", "display(viz.plot_flow_scatter((\"analytic UE\", ref_flows), {\"fw\": final.link_flows}))" ] }, { "cell_type": "markdown", "id": "d0d18e66", "metadata": {}, "source": [ "## Takeaways & pointers\n", "\n", "- **Certified, not self-reported.** The gap above came from `Evaluator`, recomputed\n", " from the emitted flows here; the self-report was only diffed against it.\n", "- **The tail is the story.** FW reaches machine-scale accuracy but over many checkpoints — the zig-zag `cfw`/`bfw` were built to remove (count printed above).\n", "- **Where next.** the conjugate-direction variants that kill FW's tail: [`cfw`](04-cfw.ipynb) · [`bfw`](05-bfw.ipynb); the baselines: [`aon`](01-aon.ipynb) · [`msa`](02-msa.ipynb); the lineage in the\n", " [model compendium](../../docs/MODELS.md); the full matrix via `run_experiment(...)`\n", " as in `demos/demo_quickstart.py`." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.10.12" }, "tabench": { "covers": [], "requires_extra": null, "track": "static", "unit": "fw" } }, "nbformat": 4, "nbformat_minor": 5 }