Created
November 13, 2025 16:06
-
-
Save TomAugspurger/fd2d35a904be0e0a71de6b1cc9ed5fa4 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "id": "9bcb01ea-5ce8-411f-ad0a-49b8d1d37d67", | |
| "metadata": {}, | |
| "source": [ | |
| "# Q4 spilling analysis\n", | |
| "\n", | |
| "This notebook looks at the spilling metrics for query 4 on an H100 (PDX cluster).\n", | |
| "It requires https://github.com/rapidsai/rapidsmpf/pull/662 (adding payload to spill metrics).\n", | |
| "\n", | |
| "<details>\n", | |
| "\n", | |
| "```\n", | |
| "export TERM=xterm\n", | |
| "unset UCX_NET_DEVICES\n", | |
| "export UCX_PROTO_ENABLE=\"y\"\n", | |
| "export UCX_RNDV_PIPELINE_ERROR_HANDLING=\"y\"\n", | |
| "export UCX_MAX_RNDV_RAILS=\"1\"\n", | |
| "export DASK_DISTRIBUTED__COMM__TIMEOUTS__CONNECT=\"300\"\n", | |
| "export DASK_DISTRIBUTED__COMM__UCX__CONNECT_TIMEOUT=\"300\"\n", | |
| "\n", | |
| ". /app/.venv/bin/activate\n", | |
| "\n", | |
| "\n", | |
| "gh run download 19333149615 --dir out --repo rapidsai/rapidsmpf --name rapidsmpf_wheel_cpp_librapidsmpf_cu12_x86_64\n", | |
| "gh run download 19333149615 --dir out --repo rapidsai/rapidsmpf --name rapidsmpf_wheel_python_rapidsmpf_cu12_py312_x86_64\n", | |
| "\n", | |
| "\n", | |
| "echo \"[Installing RapidsMPF]\"\n", | |
| "uv pip install out/*.whl\n", | |
| "echo \"[Installing cudf-polars]\"\n", | |
| "uv pip install --no-deps \"cudf-polars-cu12 @ git+https://github.com/TomAugspurger/pygdf@tom/rapidsmpf-statistics#subdirectory=python/cudf_polars\"\n", | |
| "\n", | |
| "query=4\n", | |
| "BLOCKSIZE=2_000_000_000\n", | |
| "SPILL_DEVICE=0.25\n", | |
| "RUNTIME=rapidsmpf\n", | |
| "STREAM_POLICY=pool\n", | |
| "\n", | |
| "\n", | |
| "nsys profile \\\n", | |
| " -o \"/data/profiles/rapidsmpf.q$query.1k\" -f true \\\n", | |
| " --nvtx-domain-exclude=CCCL,libkvikio,librapidsmpf \\\n", | |
| " --cuda-memory-usage=true \\\n", | |
| " python -m cudf_polars.experimental.benchmarks.pdsh ${query} \\\n", | |
| " --iterations 1 \\\n", | |
| " --path=\"/data/tpch-rs/scale-1000\" \\\n", | |
| " --suffix '' \\\n", | |
| " --spill-device ${SPILL_DEVICE} \\\n", | |
| " --blocksize ${BLOCKSIZE} \\\n", | |
| " --rmm-async \\\n", | |
| " --explain \\\n", | |
| " --stream-policy ${STREAM_POLICY} \\\n", | |
| " --no-print-results \\\n", | |
| " --runtime ${RUNTIME}\n", | |
| "```\n", | |
| "\n", | |
| "</details>\n", | |
| "\n", | |
| "The sqlite DB was extracted from that nsys report to `rapidsmpf.q4.1k.sqlite`." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "id": "684c5813-403d-4fd2-81cd-ac34d3067829", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import sqlite3\n", | |
| "import seaborn as sns\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "import pandas as pd" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "id": "a4bf9906-324c-4ce9-ac7e-a27e7fcb89c4", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "conn = sqlite3.connect(\"rapidsmpf.q4.1k.sqlite\")\n", | |
| "query = \"\"\"\\\n", | |
| "WITH rapidsmpf_domain AS (\n", | |
| " -- Find the domainId for 'rapidsmpf' domain\n", | |
| " SELECT DISTINCT domainId\n", | |
| " FROM NVTX_EVENTS\n", | |
| " WHERE text = 'rapidsmpf'\n", | |
| " LIMIT 1\n", | |
| "),\n", | |
| "postbox_spilling_id AS (\n", | |
| " -- Find the textId for 'postbox_spilling' messages\n", | |
| " SELECT id AS textId, value as eventName\n", | |
| " FROM StringIds\n", | |
| " WHERE value like 'postbox_spilling%'\n", | |
| ")\n", | |
| "select\n", | |
| " start,\n", | |
| " end,\n", | |
| " eventType,\n", | |
| " rangeId,\n", | |
| " int64Value,\n", | |
| " eventName\n", | |
| "FROM NVTX_EVENTS nvtx\n", | |
| "join rapidsmpf_domain on nvtx.domainId = rapidsmpf_domain.domainId\n", | |
| "join postbox_spilling_id on nvtx.textId = postbox_spilling_id.textId\n", | |
| "\"\"\"\n", | |
| "df = pd.read_sql(query, conn).assign(\n", | |
| " spill_request_id=lambda x: x['end'].notna().cumsum(),\n", | |
| " duration=lambda x: x['end'] - x['start']\n", | |
| ")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "3807259a-4be4-4393-80bb-21fe388e3cfa", | |
| "metadata": {}, | |
| "source": [ | |
| "# Q: How many times do we decide to spill?" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "id": "190344f9-da46-4dc8-9bfc-ca1dadf59db4", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "eventName\n", | |
| "postbox_spilling::chunk_spilled_bytes 1012\n", | |
| "postbox_spilling::amount 100\n", | |
| "postbox_spilling::total_spilled_bytes 100\n", | |
| "Name: count, dtype: int64\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "# A: 100 times, satisfied by actual buffers spilled.\n", | |
| "print(df.eventName.value_counts())" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "2d223786-f75e-4682-8e8d-e4d8d46432e7", | |
| "metadata": {}, | |
| "source": [ | |
| "# Q: How many buffers must we spill to meet our target?" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "id": "e2ff9329-bcf6-4c86-9928-06869199207d", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Index([84, 3, 28, 4, 0, 11, 28, 16, 0, 9, 0, 11, 28, 14, 28, 6, 28, 3,\n", | |
| " 0, 3, 25, 7, 0, 21, 0, 37, 0, 20, 0, 8, 0, 13, 0, 11, 0, 17,\n", | |
| " 0, 15, 0, 13, 0, 11, 0, 2, 0, 15, 0, 28, 0, 26, 0, 2, 0, 28,\n", | |
| " 0, 26, 0, 2, 0, 43, 0, 26, 0, 2, 0, 13, 0, 11, 0, 2, 0, 15,\n", | |
| " 0, 43, 0, 26, 0, 2, 0, 28, 0, 11, 0, 17, 0, 28, 0, 12, 0, 2,\n", | |
| " 0, 13, 0, 30, 0, 28, 0, 1, 0],\n", | |
| " dtype='int64')\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "# decrement by 2: one for the `::amount` and one for the `::total_spilled_bytes`\n", | |
| "spills_per_request = ((df[df.eventName == \"postbox_spilling::amount\"]).sort_values(\"start\").index.diff()[1:].astype(int) - 2)\n", | |
| "print(spills_per_request)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "2adb4388-4498-4987-9097-b63ea9690db1", | |
| "metadata": {}, | |
| "source": [ | |
| "## Observation: About 50% of the time we don't actually spill anything\n", | |
| "\n", | |
| "A value of 0 in the array above seems to indicate that `postbox.search(MemoryType::DEVICE);` failed to find any non-zero sized buffers to spill." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "id": "5c14e985-81f8-412b-9be5-406e576c5679", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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aqV6DAQ7taeeeso9RTdp0qTg66+/Ds4777ygXr16wfLly3NdtArhggsuCOrWrRu8/fbbwbJlyyKvDRs2RKY5//zzg/z8/GDatGnB7Nmzg27durkXMiP66V3Wd+Z9+OGHQdWqVYObb745mD9/fvD4448HtWvXDh577LHINLfeeqs7rrz44ovBF198EZxwwglBy5Ytg40bN2ahRBXfoEGDgj333DN45ZVXgoULFwbPPfdckJeXFwwZMiQyDescJUXoq+BGjx7tQkf16tXdEC4ffPBBrotUYeiaKdHroYceikyjE9+FF14Y1K9f350sTzzxRBcMkZ3Qx/rOvJdffjnYd9993QVku3btggkTJsT8XEOIDBs2LGjUqJGbplevXsE333yThZL4oaCgwNVpHbdr1qwZtGrVKrj22muDwsLCyDSsc5RUJf1T+vZCAAAA7Mzo0wcAAOABQh8AAIAHCH0AAAAeIPQBAAB4gNAHAADgAUIfAACABwh9AAAAHiD0AQAAeIDQB6DcWbRokVWqVMn9zd1sa9GihY0aNSrr8wGAbCP0AQAAeIDQBwAA4AFCH4Cd1vbt2+3222+3vffe22rUqGH5+fl28803R37+/fffW8+ePa127drWuXNnmzlzZuRn119/vXXp0iXm83SbVrdrQ2eeeab179/f/vWvf1mTJk1s9913t8GDB9uWLVuSlunf//631atXz6ZOneq+f/bZZ22//fazWrVqud/v3bu3rV+/PsNrAgBKr2oGPgMAsmLo0KH2wAMP2N13323du3e3ZcuW2bx58yI/v/baa11ga9Omjfv61FNPtQULFljVqqkf2qZPn+4Cn/7X755yyikuLJ577rk7TKsAqtcbb7xhBx98sCuP5qn3TjzxRFu7dq29++67FgRBxtYBAGQKoQ/ATkkB6p577rExY8bYoEGD3HutW7d24U8PcsiVV15pxx57rPt6xIgR1rFjRxfc2rVrl/J86tev7+ZRpUoV93v6PLXixYe+q6++2h599FGbMWOGm48o9G3dutUGDBhgzZs3d++p1Q8AdkaEPgA7pblz51phYaH16tUr6TSdOnWKfK3WOlm5cmVaoU8BToEv+nO+/PLLmGnuvPNOd8t29uzZ1qpVq8j7uqWs8ino9e3b1/r06WMnn3yyC5IAsLOhTx+AnZL6yBWnWrVqka81hEvYD1AqV668w23WRH31oj8j/JzwM0KHHXaYbdu2zSZPnhzzvsLim2++aa+99pp16NDBRo8ebW3btrWFCxemtIwAUJYIfQB2Suqnp+AXPjCRrj322MOWL18eE/xKOq6f+u8p2N1yyy2uD2F8SDz00EPd7eVPP/3Uqlevbs8//3yJ5gMA2cTtXQA7pZo1a7p+dEOGDHFBSsHq559/tq+++qrIW76hHj16uOn1kIVuuU6ZMsUFtzp16pSoPIcccoi9+uqr1q9fP/egyGWXXWazZs1yoVS3dRs2bOi+1zzbt29fonkAQDYR+gDstIYNG+YC1nXXXWdLly51/e3OP//8lH5Xweu+++5zrXM33nijnXTSSe7BjwkTJpS4PHqI5L///a8dc8wx7tauhmd555133FAwBQUF7mEO9f9TMASAnU2lgLEFAAAAKjz69AEAAHiA0AcAAOABQh8AAIAHCH0AAAAeIPQBAAB4gNAHAADgAUIfAACABwh9AAAAHiD0AQAAeIDQBwAA4AFCHwAAgFV8/wdJSrSto78fRgAAAABJRU5ErkJggg==", | |
| "text/plain": [ | |
| "<Figure size 500x500 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "g = sns.displot(spills_per_request[spills_per_request > 0])\n", | |
| "g.set(xlabel=\"chunks\", title=\"Distribution of number of chunks spilled per request (actually spilled only)\");" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "5c583c79-58b8-4f16-8819-618fb52c4268", | |
| "metadata": {}, | |
| "source": [ | |
| "Summary of spill requests.\n", | |
| "\n", | |
| "- duration is in ns\n", | |
| "- nbytes is in bytes\n", | |
| "- throughput is bytes/ns (which equals GB/s)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "id": "fc39e110-337b-4c37-884f-bc8285b1cb04", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>n</th>\n", | |
| " <th>duration</th>\n", | |
| " <th>nbytes</th>\n", | |
| " <th>request</th>\n", | |
| " <th>throughput</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>spill_request_id</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>84</td>\n", | |
| " <td>169520638.0</td>\n", | |
| " <td>586318080</td>\n", | |
| " <td>824440959</td>\n", | |
| " <td>3.458683</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>3</td>\n", | |
| " <td>81008589.0</td>\n", | |
| " <td>351011328</td>\n", | |
| " <td>238122879</td>\n", | |
| " <td>4.333014</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>28</td>\n", | |
| " <td>67400557.0</td>\n", | |
| " <td>195557312</td>\n", | |
| " <td>641032474</td>\n", | |
| " <td>2.901420</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>4</td>\n", | |
| " <td>97137307.0</td>\n", | |
| " <td>468403968</td>\n", | |
| " <td>445475162</td>\n", | |
| " <td>4.822081</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>0</td>\n", | |
| " <td>6264.0</td>\n", | |
| " <td>0</td>\n", | |
| " <td>1183553799</td>\n", | |
| " <td>0.000000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>...</th>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>96</th>\n", | |
| " <td>28</td>\n", | |
| " <td>677164233.0</td>\n", | |
| " <td>3225651840</td>\n", | |
| " <td>3196496568</td>\n", | |
| " <td>4.763470</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>97</th>\n", | |
| " <td>0</td>\n", | |
| " <td>14878.0</td>\n", | |
| " <td>0</td>\n", | |
| " <td>66991732</td>\n", | |
| " <td>0.000000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>98</th>\n", | |
| " <td>1</td>\n", | |
| " <td>23963319.0</td>\n", | |
| " <td>116961600</td>\n", | |
| " <td>66991732</td>\n", | |
| " <td>4.880860</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>99</th>\n", | |
| " <td>0</td>\n", | |
| " <td>11111.0</td>\n", | |
| " <td>0</td>\n", | |
| " <td>3162609415</td>\n", | |
| " <td>0.000000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>100</th>\n", | |
| " <td>28</td>\n", | |
| " <td>682606735.0</td>\n", | |
| " <td>3251558976</td>\n", | |
| " <td>3162609415</td>\n", | |
| " <td>4.763444</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "<p>100 rows × 5 columns</p>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " n duration nbytes request throughput\n", | |
| "spill_request_id \n", | |
| "1 84 169520638.0 586318080 824440959 3.458683\n", | |
| "2 3 81008589.0 351011328 238122879 4.333014\n", | |
| "3 28 67400557.0 195557312 641032474 2.901420\n", | |
| "4 4 97137307.0 468403968 445475162 4.822081\n", | |
| "5 0 6264.0 0 1183553799 0.000000\n", | |
| "... .. ... ... ... ...\n", | |
| "96 28 677164233.0 3225651840 3196496568 4.763470\n", | |
| "97 0 14878.0 0 66991732 0.000000\n", | |
| "98 1 23963319.0 116961600 66991732 4.880860\n", | |
| "99 0 11111.0 0 3162609415 0.000000\n", | |
| "100 28 682606735.0 3251558976 3162609415 4.763444\n", | |
| "\n", | |
| "[100 rows x 5 columns]" | |
| ] | |
| }, | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "summary = df.groupby(\"spill_request_id\").agg(\n", | |
| " n=(\"spill_request_id\", \"count\"),\n", | |
| " duration=(\"duration\", \"first\"),\n", | |
| " nbytes=(\"int64Value\", \"last\"), # this is the *actual* amount spilled\n", | |
| " request=(\"int64Value\", \"first\"),\n", | |
| ")\n", | |
| "summary[\"n\"] -= 2\n", | |
| "summary[\"throughput\"] = summary.nbytes / summary.duration\n", | |
| "summary" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "80591641-0b75-4f1d-9ab3-15c3a8ed1287", | |
| "metadata": {}, | |
| "source": [ | |
| "# Q: How close do we meet our target?\n", | |
| "\n", | |
| "Do we underspill? Overspill?" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "id": "bca67225-76a8-4e76-9f50-3a00ab9ec111", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAIBCAYAAACGBvzmAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAWjdJREFUeJzt3Qd4VFXaB/A3ddJ7h4QEAoReBWkiRRCxgHVZFAQLKhZW2U9wV0FdBXsX2wIqVlhARUURKYp0BAJICZAC6b2Rfr/nPZM7TBppk9z2//HMM5PJkDlz75373nPOe86xkyRJIgAAAFAle6ULAAAAAA1DoAYAAFAxBGoAAAAVQ6AGAABQMQRqAAAAFUOgBgAAUDEEagAAABVDoAYAAFAxBGoAAAAVQ6AGRb300kvUuXNncnBwoP79+6tib1x55ZXipma1yxgfH092dna0cuVKy3OLFy8Wz1mLjIykO++8k5SSlJRELi4utGPHDtILLRwvenVlC74H5eXlFB4eTu+++y5pBQK1DfAO5wNh6NChpEeff/45vf766zb/uz///DP93//9H40YMYJWrFhBzz//vM3fA9TlmWeeEd8T3udacuzYMXHC50AA2ubk5ESPPvooPffcc1RSUkJa4Kh0AfTgs88+EzWVPXv2UFxcHEVHR5PeAvWRI0do3rx5Nv27v/76K9nb29N///tfcnZ2tunf1ju+yGmJEydOiG2uhIyMDPr444/FTWs4UD/99NOi9sbfdVvsC2i9n1u47WfNmkULFiwQ57bZs2erflegRt1KZ8+epT/++INeffVVCgwMFEEbmiY9PZ1cXV11HaSrqqra5Kqdt1lLtpvJZBI1CiWsWrWKHB0d6brrriM9aem+MBK1fQ98fHxowoQJNZrI1QyBupU4MPv6+tLkyZPp5ptvrjdQy/0mL7/8Mr3zzjuiT9bNzU0cKNxnxwuYPfvss9SxY0cRuG644QbKzs6ut4m9V69e4mQbFhZGc+fOpdzc3Cb1Qdbuy9m6daso09dffy2agPi9ue9w3LhxolXA+v99//33lJCQIF7Pt9o1itoqKirE5+nSpYsoK7/+iSeeoNLSUstr+O9wc3dRUZHl717qS2PrzyX74IMPRDl5uw8ZMoR+++23et+fy75o0SLRWsKfifu4uNne+jPJn+vBBx8Ux4G8rzZu3Ch+9+WXX9KgQYPI09OTvLy8qE+fPvTGG29Y/i9/fv7/27dvpzlz5pC/v7943YwZMygnJ+eSn7upam9H+T25z5ibA/li093dnaZOnSpqwLVPttz8y8ceH79jxowRNc2m9nuvX79eNHt7eHjU+Sy9e/cWf4v/Jv/tDh060Isvvtji/XDhwgV6+OGHKSAgQGzv66+/ns6fPy8+K38GGR/XDzzwAHXv3l0cA7zNb7nllhpN3LyN+DnG5ZOPVz7Wau+LtLQ0cTHCte/6WjP4/7399tuW5/j7yy1V/Dn48/DneuGFF8S2ttXF8F133UXBwcHie9CvX78aLRrcX+vn5ydqmLXl5+eL/zN//nzdfQ/YVVddRb///nu951q1QdN3K/GBeOONN4qrumnTptGyZcto7969dNlll9X72rKyMnrooYfEwcEnoltvvZXGjh0rvvSPP/64CCZvvfWW+HIsX77c8n/55MJf/vHjx9P9998vvvTye/FJtqW1pKVLl4qmUH6/vLw8Uabp06fT7t27xe//9a9/iefPnTtHr732mniu9om2trvvvlucDPjC5bHHHhN/a8mSJfTXX3/RunXrxGs+/fRTESS5u+Cjjz4Szw0fPrxFn6Eln4txkzufCPh9+WR55swZcULnExefgGR80uTn+Ut97733Uo8ePSg2NlZsj5MnT4oAVLtJny8U+ETFgYID2aZNm8TxwRcMfCJmvD143z3yyCM1/j//P77i530u72cOKPJFSFvgY5IvOPkkzEGKcxK4HF999ZXlNQsXLhTbkWvEEydOpEOHDon7ptSUOCDwscrHbn34BHz11VeL7xJ/J9asWSO+D3wSnzRpUrP3A1848D6444476PLLL6dt27aJi+nauEzcIva3v/1NXNTxZ+ftzSd/vnDgi4YrrrhCBP0333xTXHDy+zL53hoHxNGjR4v35m1pjbclJ03KQb+4uFi8li8g+DiMiIgQZeHtnJKSUiMvhLdPZWVlo9uZy8s3+WKFPwefU3hfRkVF0erVq8W24QsEPu74vMEXZWvXrqX333+/Ru2UtycHYN42zd3+WvgeDBo0SFSSeJtfe+21pGq8HjW0zL59+3gtb2nTpk3i56qqKqljx47SI488UuN1Z8+eFa8LDAyUcnNzLc8vXLhQPN+vXz+pvLzc8vy0adMkZ2dnqaSkRPycnp4ufp4wYYJUWVlped3bb78t/v/y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", | |
| "text/plain": [ | |
| "<Figure size 500x500 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "# negative implies overspilling\n", | |
| "underspilling = summary[\"request\"] - summary[\"nbytes\"]\n", | |
| "g = sns.displot(underspilling, kind=\"kde\")\n", | |
| "g.set(title=\"Amount of underspilling (negative=overspill)\", xlabel=\"Bytes\");" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "a01bed41-c560-4615-8c58-fd01d9122a3d", | |
| "metadata": {}, | |
| "source": [ | |
| "# Q: How quickly do we spill?" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "c8e543d6-210d-4223-a4c4-63a28337a3fa", | |
| "metadata": {}, | |
| "source": [ | |
| "Two observations:\n", | |
| "\n", | |
| "1. Some spill requests take up to a second to satisfy.\n", | |
| "2. When don't actually spill any buffers, we at least do that quickly." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "id": "37c823c3-6102-434d-9aa6-fb1d4e6c3e1c", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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wyi7efPmFVT7AAAA/DsYff7559K6dWvz9RdffOF1G4XYAAD4VteuXc3f6RdffJEfRVEEo08++SQ/DwMAAEXgvffeu2g0x03q168vo0aNMptr1jECAAD+qXLlyr5uQvEqvu7WrZt07979khsAAPDtUJqnt2XBggXSqFEjCQ0NlerVq8tvf/vbq3qOCxcuyOzZs81pwMLCwqRVq1ayevXqrNs3btxoymf0pPI33nijuY9mAF34ee3atdKsWTMpX7689OvXT9LS0rzaNmLECLPpyej19GKTJ08Wx3Gybv/6669l9OjR5vl1O3PmjHmu7N9fffDBB1KmTBk5ffq0b3uMPPVFHufOnZPdu3ebeqOcJ5cFAAC+sWvXLvnjH/8ob775pllm54cffpD//Oc/V/XY2bNny1tvvWXWLtRgtXnzZhkwYIBUrVpVbr311qz7TZs2TV555RUJDw+XPn36mC0kJMTMXk9NTZV7771X/vSnP8n48eOzHrN06VIZMmSI7Ny507Rx2LBhEhkZKUOHDjXDgBrCdJ9eVxp+7r//flm8eLFXsPNcL1eunG+D0fz583Pdry+OvggAAMD34uPjTai46667THioV6+e6d25koyMDJk1a5aZfd6xY0ezr0GDBrJlyxZ57bXXvILRzJkzpXPnzuZrDTsTJkyQQ4cOmfsrDS5am5w9GNWtW9dkCe0NatKkiezZs8dc1yCkw4AlS5Y07a1Ro4bXUkEa7o4fP27OuqE9Ux999JFpo8+H0i5FkyTnSQMAwD/cfvvtJgxpSNGzVSxfvtxrWOtSDh48aO6njy9btmzWtmzZMhN6stNlezx0qE57jjyhyLNPQ0x2HTp08JrFruHrwIEDcv78+Uu26aabbpIWLVqY3ialvVl6bLfccov4bTDavn27GcMEAAC+p70usbGx8s4775helilTpphhqqSkpMs+LtWO/qxZs8aUyni2vXv3XlTnk332m4adnLPhdF/Ok83nl/Ya6SnJPMNogwcPLvBlgvI1lNa7d2+v61owpV1bOk6oBVQAAMA/BAcHS48ePcw2depUqVixovz73/++6G95ds2bNzd1QjoUl33YrKB8+umnXtd37Nhh6ph0CE2VLl06194jHZkaN26cvPzyyyakFUZdc76CkVaRZ1eiRAkzRjhjxgz51a9+VVBtAwAA1+DDDz+Uw4cPm+GmSpUq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Rx85kyZNct577z2dley8//77l73/4cOHnfDwcGfMmDHmve5Pf/qTee9bt26dE+jH/vjjjztz5851du7c6Xz11VfOhAkTzPt8bGxskbUZRYtglM1NN93kDB8+POv6+fPnnVq1ajmzZ8/O9cXr06eP07NnT6997du3dx555BEn0I89p59++skpV66cs3TpUqc4HLseb6dOnZy//OUvzqBBg1wbjPJ67K+++qrToEEDJzMz03G7vB673rd79+5e+zQodO7c2XGzqwkH48aNc1q0aOG1r2/fvk5UVJQT6Meem+bNmzvTp08vlDbB9xhKszIzMyUmJsYMCXmUKFHCXN++fXuuvW26P/v9VVRU1CXvH0jHnlNaWpqcO3dOKleuLMXh2GfMmCHVqlWTIUOGiFvl59j//ve/m6EEHUrTRVavv/56mTVrlpw/f14C/dg7depkHuMZbjt8+LAZQrzzzjsl0AXKe11B0NNSnT592nXvdQigla+LSmJionlzz7mitl7ft29fro/Rlbhzu7/uD/Rjz2n8+PFmzD7nm2cgHvuWLVtk0aJFsnv3bnGz/By7hoF///vf0r9/fxMKDh48KI899pgJxbpScCAfe79+/czjunTpoj3t8tNPP8mjjz4qEydOlEB3qfc6PQv92bNnTc1VcfH8889Lamqq9OnTx9dNQSGhxwjXbM6cOaYI+f333zdFrIFMPyk+8MADpvg8IiJCiuOnZe0pe/31180JnvWUPZMmTZKFCxdKoNPiY+0dW7BggcTGxpqi3DVr1sjTTz/t66ahiLz99tsyffp0Wblypfl/gMBEj5Glf+RKliwpCQkJXi+QXq9Ro0auL57uz8v9A+nYs3960mD08ccfS8uWLcVt8nrshw4dkqNHj5pZLdnDggoODpb9+/dLw4YNJVB/7joTrVSpUuZxHs2aNTM9Cjo8Vbp0aQnUY588ebIJxQ8//LC5rrNQ9YTWw4YNM+FQh+IC1aXe63SWVnHpLdIPf/qz15nIbusZR94E7v/kPNI3dP0EvGHDBq8/eHpdaypyo/uz31/961//uuT9A+nY1bPPPms+LetJfdu1aydulNdj16UZ9uzZY4bRPNtvfvMb6datm/lap3AH8s+9c+fOZvjMEwbVV199ZQKTW0JRfo9d6+hyhh9PQAz0U04Gyntdfr3zzjsyePBgc9mzZ09fNweFzdfV3/42fVen4y5ZssRMSR02bJiZvnvixAlz+wMPPOA8+eSTXtP1g4ODneeff95MWZ86daqrp+vn5djnzJljpjqvXr3aOX78eNZ2+vRpJ9CPPSc3z0rL67HHx8eb2YcjRoxw9u/f73z44YdOtWrVnJkzZzqBfuz6/1uP/Z133jHT1//5z386DRs2NLNT3Ub/n+pSG7rpn4F58+aZr7/++mtzux63Hn/O6fpjx44173W6VIdbp+vn9dh1eQZ9n9djzv5el5SU5MOjQGEiGOWg63NERkaaP/o6nXfHjh1Zt916663mj2B2K1eudBo3bmzur9NZ16xZ4xSHY69Xr555U8m56R+P4vBzD5RglJ9j37Ztm1mWQkOFTt1/5plnzPIFgX7s586dc6ZNm2bCUGhoqFO3bl3nsccec3788UfHbT755JNc//96jlcv9fhzPqZ169bmtdKf++LFix03yuux69eXuz8CT5D+U+jdUgAAAC5AjREAAIBFMAIAALAIRgAAABbBCAAAwCIYAQAAWAQjAAAAi2AEAABgEYwAAAAsghEQILp27SqjRo3y2Znng4KCJCkpySffH8ivzZs3m5NC16pVy/wOf/DBB3l+jpUrV0rr1q0lPDxc6tWrJ8899xw/EBcjGAG45gDWqVMnOX78uFSoUIFXE65y5swZadWqlURHR+fr8WvXrpX+/fvLo48+Kl988YUsWLBA5s+fL6+88kqBtxVFg2AEwDh37tw1na2+Ro0a5hM34CZ33HGHzJw5U+69995cb8/IyJAnnnhCateuLWXKlJH27dubHlKPN998U3r16mWCUYMGDaRnz54yYcIEmTt3rp6LtAiPBAWFYAS49FPuwIEDpWzZslKzZk154YUXvG7PbUigYsWKsmTJEvP10aNHzX3effddufXWWyU0NFSWL18u33//vfz+9783fwR0WOCGG26Qd955J+s5HnzwQdm0aZO89NJL5vG66XPlNpT217/+VVq0aCEhISFSv379i9qo+2bNmiUPPfSQlCtXTiIjI+X1118vpFcMyJ8RI0bI9u3bZcWKFfL555/L7373O/n1r38tBw4cyApO+v8nu7CwMPnmm2/k66+/5mV3IYIR4EJjx441AeVvf/ub/POf/zTBJDY2Ns/P8+STT8rjjz8ucXFxEhUVJenp6dK2bVtZs2aNGRYYNmyYPPDAA7Jz505zfw1EHTt2lKFDh5qhM93q1q170fPGxMRInz595P7775c9e/bItGnTZPLkyVnBzEPDUrt27eS///2vPPbYY/KHP/xB9u/ffw2vDFBw4uPjZfHixbJq1Sq5+eabpWHDhqb3qEuXLma/0v837733nmzYsEEuXLggX331VdaHAP3/AfcJ9nUDAORNamqqLFq0SN566y257bbbzL6lS5dKnTp18vxSaq1Q7969vfbpG7/HyJEjZf369aa49KabbjI1RDpspr1JOnR2KfPmzTNt0zCkGjduLHv37jVFqdrr5HHnnXeaQKTGjx9vajM++eQTadKkSZ6PBShoGurPnz9vfn+z016iKlWqmK/1Q8KhQ4fkrrvuMsPR5cuXNx829MNAiRL0PbgRwQhwGX0TzszMNLUOHpUrV85XmNDemuz0j4AOb2kQ+vbbb8330T8CGoTyQnug7rnnHq99nTt3lhdffNF8j5IlS5p9LVu2zLpdh+I0bJ08eTLPxwEU1ocQ/V3VHlDP76yHDmN7fm+1nkj/35w4cUKqVq1qeo+U1hzBfQhGQADSN+uchZ+5FVdrMWl22qOjw2UaYLS+SG/XXiUNSIWhVKlSF7VbhyMAf3DjjTeaIK9hXYfSLkeDk9bmKa3L0yFnDUlwH4IR4DJa56CB4tNPPzUFy+rHH380tQ1aSK30DTl7fYMWiqalpV3xubdu3Wp6egYMGGCue2ommjdvnnUfHUrTPxaX06xZM/NcOZ9bhyRyfvIGfN0rdPDgwazrR44ckd27d5teWP191an4OtFB64Y0KJ06dcr0CGlvp85AS0xMlNWrV5tlLLRGz1OTpDWAcCeCEeAy2oU/ZMgQU4CtdQ7VqlWTSZMmedUzdO/e3ayjop9aNcRo/U7O3pncNGrUyLzJb9u2TSpVqmRqhRISEryCkc4m01Cms9G0LfoHJKf/+7//k1/+8pfy9NNPS9++fc2sHm2PrvEC+JNdu3ZJt27dsq6PGTPGXA4aNMhMFtCgo9P59Xdah5cjIiKkQ4cOpqbIQ2v8tDZPe2n1/5xOhtCaPLgTwQhwIR3y0k+6umKvTnXXN+3k5OSs2/XT7eDBg033v67oq8NjWidxJU899ZQcPnzYzLTRuiKdlaZrtGR/bv0DoH80NCydPXvWfMLOqU2bNqZOacqUKSYc6ZICM2bM8Cq8BvyB9vRcbr0h/UAxffp0s+VGg5IGfwSOIIcVqAAAAAzmEgIAAFgEIwAAAItgBAAAYBGMAAAALIIRAACARTACAACwCEYAAAAWwQgAAMAiGAEAAFgEIwAAAItgBAAAID/7f8ECg4lGgaw8AAAAAElFTkSuQmCC", | |
| "text/plain": [ | |
| "<Figure size 584.875x500 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "sns.displot(summary.assign(is_empty=lambda x: x.n == 0), x=\"duration\", hue=\"is_empty\");" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "b242a9ac-b735-493d-ab6e-cd2df80ad1b1", | |
| "metadata": {}, | |
| "source": [ | |
| "# What's our spill throughput\n", | |
| "\n", | |
| "Most spills peak at ~4-5 GB/s. Some lower." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "id": "7f6d1bb9-7d89-4897-8270-2f9dfc09bbe0", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAekAAAIACAYAAACmbZRAAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAXWFJREFUeJzt3Qd8VFX2B/CT3ntPCIQQWigJBAm9CaJY0NUVXRVkESv+XVFX0BWsi7sq4iorimJfQRTBCiKCioJAQu8QSCOV9Dop8/+cO3lDyiSZSWbmvZn3+34+85nJZMrNm8mcufeee66DVqvVEgAAACiOo9wNAAAAAMMQpAEAABQKQRoAAEChEKQBAAAUCkEaAABAoRCkAQAAFApBGgAAQKEQpAEAABQKQRoAAEChEKSBnn76aXJwcLDKkZg0aZI4SXbs2CGe+/PPP7fK8995550UExNDSlZRUUF33XUXhYeHi2Pzt7/9TbZjw8/P7w/J+++/L647f/58l56D78f3f/nll8lWcfsXLFhAtmTGjBk0f/58sgW33HIL3XzzzXI3QzEQpO2M9CEqndzd3SkyMpKmT59O//nPf6i8vNwsz3PhwgXx4X3gwAFSGiW3zRj//Oc/xet433330UcffUR33HEH2ZrvvvuuRXAH8/j999/FcS0pKTH6Pr/99hv98MMP9Pjjj7f5XX5+Pi1atIiGDBlC3t7e4vMiLi6O5s6dSzt37uzws4VPoaGhNHnyZPr+++/bff5HHnmE4uPjjW4vt/OLL76ggwcPGn0fe+YsdwPAMp599lnq3bs31dXVUW5uruixco9s+fLl9NVXX9HQoUP1t/3HP/4h/lFNDYTPPPOM6HklJiYafT/+sLC0jtq2evVqamxsJCX76aefaNSoUbR06VKrPq85jw0H6ZUrVyJQWyBI83ubRz38/f2Nus9LL71El19+uQi+ze3Zs4euvvpq8cWde6/33nsvubm50blz52jjxo0iKP/88880YcIEg58tvO1DXl6euB331L/++mu65ppr2jz/t99+S9dee63Rf+OwYcNoxIgR9Morr9CHH35Iaocgbaeuuuoq8UaXLF68WHz48z/RddddR8ePHycPDw/xO2dnZ3GypKqqKvL09CRXV1eSk4uLCykd925M6Xmo6dhUVlaSl5eX3M2wGfxe4iC5atWqFtcXFxfT9ddfL/7vecRpwIABLX7//PPP09q1a/WfER19tsybN4/CwsLo008/bROk09LS6OTJk22evzM83M1fUv/73/+KHr6aYbhbRaZMmUJPPfUUpaen08cff9zhnPTWrVtp3Lhx4ts6/5P079+fnnjiCfE77pVfdtll4jIPi0lDX/yNmvGc8+DBgyklJUV8C+fgLN239Zy0pKGhQdyG52H5Q5i/SGRmZra4DfeMuQfRWvPH7KxthuZd+YOfh+Sio6NFT4L/Vp4zbb1BnDQXyb0M/vv4toMGDaLNmzcb/YEpfaDxsGJCQgJ98MEHbebnuSfDH6xS2zua/+3odWr+mOvWrev0+Jprvp4fh3vRrPnQaGtvv/029enTRxxHfs327t3b5nH4bzp79qzoqfn4+NBtt91m9GsmzX9Lr31Hc+3SseLgw68Nt+utt97qMF+js/eBdN8TJ06IoOPr60tBQUH00EMPUU1Njcnt5PPHHntMXOaerDHvD34f1dfX09SpU1tcz0EzJyeHVqxY0SZAS89766236v+XOsLvPQ7mhr7o8/P7+fmJ9yjjXjuP6PH7jI8bD5dPmzaNUlNTW9yPr+PXeOvWraR26EmrDM9v8oc1Dzu3l0hy9OhR8Y2Yh8R5aIv/mc6cOSPmttjAgQPF9UuWLKG7776bxo8fL64fM2aM/jEuXrwovnHzMNrtt98uAlNHXnjhBfHBwPNRHMz4w4M/WPhbvqFv8+0xpm3N8Yc6B6zt27eLAMrD41u2bBEfhtnZ2fTqq6+2uD3P023YsIHuv/9+ETR4nv/GG2+kjIwM8QHcnurqavFFgo8jB3r+kF2/fr0IRDy/yB/c3Haeg3744YepR48eIgixkJCQLr1Olji+xrjnnnvElAN/wPLfY8j//vc/8YHNt+V2/fvf/6Y//elPoufVvEfPAYbzKfhDnoMwf+Ez9TUzxv79++nKK6+kiIgIMZzMXxr5mLZ37E15H3CA5qC0bNky2r17t7gt92RNHcrl43Pq1CnRY+W/MTg4WFzfXhul4XFuT69evVpcz0PT/LrzY5qqtLSUCgsLxevA76XXX39dJDvy/7mhaQ8OuFIA5yF1ThLl/wEeLeLPCT6WPLI3fPhw/f34d9y+3377jW644QZSNd5PGuzHe++9x10J7d69e9u9jZ+fn3bYsGH6n5cuXSruI3n11VfFzwUFBe0+Bj8+34afr7WJEyeK361atcrg7/gk2b59u7htVFSUtqysTH/9Z599Jq5/7bXX9Nf16tVLO2fOnE4fs6O28f35cSQbN24Ut33++edb3O6mm27SOjg4aM+cOaO/jm/n6ura4rqDBw+K619//XVtR1asWCFu9/HHH+uv02g02tGjR2u9vb1b/O3cvquvvlrbGWNeJ1OOb+tjI/3N/P5o/f46d+5ch2174IEHWrynJHw/vj4oKEhbVFSkv37Tpk3i+q+//rpFe/i6RYsWtXgMY18z6bkMvQ9a/13XXnut1tPTU5udna2/7vTp01pnZ+c2f4ex7wPp/+q6665rcf/7779fXM/3MbWdL730klHHXzJu3DhtUlJSm+sDAgK0iYmJba7n9wi/n6RTRUVFm9e+9cnNzU37/vvvt3msyspKrbu7e4u/iz97+L1hjH79+mmvuuoqrdphuFuFeAixoyxvKSFl06ZNXU4k4l4dDzcba/bs2aJHIrnppptEr4a/iVsSP76TkxP93//9X4vruRfLn5Gts1a598lDoRLuxfIwJvcAO3seHmrmIUQJ9xj5ebkXwgk6pjLldZLr+LZn1qxZFBAQoP9ZGvEwdBw5y707r1lnuNf8448/ijlaXgkh4UQrHg0yxJT3wQMPPNDi5wcffFD/d1ga91SbH2dJWVmZwbleHmnjnrl0MpQRzlMZPErCJ5424+xuXjLIIwvNcQ5MbW1ti2PI79k//vhDjLR0httdWFhIaocgrUIcFJp/YBv6AB07dqz4x+Nhah6y/uyzz0wK2FFRUSYlifXt27fFzzwEyh+SXV2Payyen+cP5tbHg4eepd8317NnT4MfJjx82dnz8N/o6Oho1PMYw5TXSa7j257Wx1EKJK2PIw+T8tB/d16zzvCQLU9HtM5+ZoauM9T+jt4HrY89B3d+H1jr2LfOrWB87PhzoDUe4pcCcHtGjhwpvqTwiXMEeN6Zh6d5CFuj0ehvx9fzHH/zqS6e1jhy5IjIJeDH4Xn29r7gcrsdrFS/QckQpFUmKytLzCm19+HDeC7ol19+Eb0L/mZ96NAhERB4bol7HcYw9zwna+8f1tg2mQP34Iz9ILQ0c7xOcjH2OPKITOsvNkp4v3TnfdC6XZZsJ89HG/riwMlinHXNSzSb4xEBKQAbi18f7k1zItrp06f11/NIASf8tZ6f56DM89j8RYuXh3HSnaHRD253cNO8u5ohSKuMlMjDyTid/ePx2kpeV33s2DGReMTDV5ysw8z9Dbf5P7f0YcdJUM2zjbmnYqiIQ+uekylt44QaHnprPfzPGbnS782BH4f/xta93O4+T2evkynH15ws2QMy9jWTeuet3zOt3y+cYcwZ3Xw8WjN0nalaH3t+TH4fSMfe2HZ25bhyMObVAq1xwiGPHnz55ZdkDpzgx6TeOfeWOYmO12G3xtMsnHDH2fHcNv4iwe/b1o/Hqw8GNo2OqBmCtIrwh/dzzz0nMoulpSyGFBUVtblOKgrCc0xMWqtqSuWjjnCma/MPXc4A5W/mzeezeJiQs2ObD6l98803bZYSmdI2/qbPPZY33nijxfWcPcsfiO3NSZqKn4eLyvBSqOYfRNyj4LnBiRMnmvyYxrxOphxfczL3+6MrrxnPEXNPjEcbmuO1t617xdxz5KDRfK6Ug6mp89uGSMvRJPyaM1Pb2ZXjOnr0aNEjbT2kzPP8PAzNKwk4Y7w7I0PcG+fVIjy9JQVV7kXz4zdfT82vGY/itf6CxD3q1u9X/sLJy9TGtLMqQ02wBMtO8YcL9yw4EHBVIA7QPM/EvQyuOMY9h/bwvBR/YPC3YL49z9nxBwbPDUrrHTlgchIIr7fk+S3+8EhOThZfALoiMDBQPDYnm3F7eYkQD8k3XybGc68cXHipDA+b8fpZTlxpnsBjatu4EhIP1T355JNijpDXLvMHDidj8XrO1o/dVbwcjNfd8pIrXj/OvSj+W3iJCf+tHeUIdOd1MuX4mlNSUpI45+QuHrXhQMhz5uZgymvG75kXX3xRnHPA4ONlKCjx3Cg/Bs/xcwCTvgTwOujulpfl3iIvGeP37a5du8R79i9/+Ytot6ntlI4r/+18PDn5kI9HewVe+L3B8/o8JcLvwebvB+5F8325HfxYvCaaH4+/9PLywPbm3qXPFsbvOV5Ox6MFXLWQv3BI89H8JaR5z5+/JPJ7k5MW+Tn5yym3i9fHc3Wx5vizipfbTZs2zeTjbXfkTi8H82q9TIKXioSHh2unTZsmlts0X4bT3hKsbdu2aWfOnKmNjIwU9+fzW2+9VXvq1KkW9+NlM/Hx8fplKtJSC14ONWjQIIPta28J1qeffqpdvHixNjQ0VOvh4SGWIKWnp7e5/yuvvCKWE/Gyj7Fjx2r37dvX5jE7apuhZUbl5eXahx9+WPydLi4u2r59+4qlLo2NjS1ux49jaPlIe0vDWsvLy9POnTtXGxwcLI7rkCFDDC67MXYJljGvkynH15xLsOrr67UPPvigNiQkRCyLkt5f0nIjPr6ttX4ubo+Xl5fBxzf2NauqqtLOmzdPLP3x8fHR3nzzzdr8/Pw2zyUdT16ayMeyT58+2nfeeUf7yCOPiGVEXXkfSP9Xx44dE8vD+Pl56dOCBQu01dXVXW7nc889J/4HHB0djXoteAnY5ZdfbvB3OTk52scee0z8r/D7gv+vYmNjtbNnz9b+8ssvLW5raAkWHxteyvXmm2/qj31JSYn4v+Nlfs3V1taK50pISBB/I7+2fPm///1vm3YlJydrb7/99g7/LrVAkAawY1KQXr9+vdxNsUn8JSguLq5L95WCdEfr2K2Bgy0H9NZfsi1l3bp1IkhzsO6K/fv3iy92fA5YJw0AIHAiVXM8hMtzq4bK2NoSXoN+xRVXiOVP1sBTTVxVjcuBdgUP+/OQuCkb99gzzEkDABBRbGysyBngc86sfvPNN0Uy1N///nebPz7mSIAzFn8h6A7e2AMuQZAGACASiV1cF5uz8Hl9NmdG897erYuRAFiTA4/5W/UZAQAAwChYJw0AAKBQCNIAAAAKpbogzaP7vAMMRvkBAEDpVBekueoNLw3oaKtGAAAAJVBdkAYAALAVCNIAAAAKhSANAACgUAjSAAAACoUgDQAAoFAI0gAAAAqFIA0AAKBQCNIAAAAKhSANAACgUAjSAAAACoUgDQAAoFAI0gAAAAqFIA0AAKBQCNIAAAAKhSANAACgUAjSAAAACoUgDQAAoFAI0gAAAArlLHcDAADsTUVtPX28O50OZpZQTLAXjegVQFMGhJKDg4PcTQMbgyANAGBGm4/k0qINh6ikqq7F9VcOCqd/3TSU/DxccLzBaBjuBgAwkyPZpfTQ2v0iQPcO9qLHpvenWy6LJhcnB9p8NJeufX0n5ZXV4HiD0Ry0Wq2WVKSsrIz8/PyotLSUfH195W4OANiJokqNCMLZJdU0uX8IrZ49gpyddP2gQ1kldP8nqZRVXE1De/jRurtHk4erk9xNBhuAnjQAgBm8+P1xEaB7BXnSilnD9AGaDe3hT5/clUwBni50KKuUFn52gFTWP4IuQpAGAOgmDs4bUrPF5eU3J5CfZ9t5515BXvT27BHk6uRI3x/Jpc/2ZeK4Q6cQpAEAumn1L2lU36ilMX2CKKlXYLu3uywmkB6d3k9cfu4bXc8boCMI0gAA3XCxopbW7s0Ql++fFNfp7eeNi6XhPf3FMq1FXxzCsDd0CEEaAKAbPt2TQTV1jZTQw4/GxgV1ensnRwd6+c8J5ObsSL+eLqRvD+fg+EO7EKQBALrhm0O6IHv7qF5GFyuJDfGm+yb1EZef/+Y4VdbW4zUAgxCkAQC66Ex+BZ3ILRfroK+IDzfpvvdO7EPRgR6UW1ZDb2w/g9cADEKQBgDoou+ahqrHxQUbzOjuiLuLEy25ZpC4/M6vaXS2oAKvA7SBIA0A0M0gPWNIRJfuP3VgqCh8Utegpae/OookMmgDQRoAwMpD3RKew1567SCxdpqTyLYczcNrAS0gSAMAdMGPx3UBdUwf04e6m+Ndsu6ZGCsuP/fNMarWNOD1AGUF6ZUrV1JMTAy5u7tTcnIy7dmzp93bTpo0SXz7bH26+uqrrdpmAFC3XWcvivMJ/UK6/Vi8vjrK30MUN/nvDiSRgYKC9Lp162jhwoW0dOlSSk1NpYSEBJo+fTrl5+cbvP2GDRsoJydHfzpy5Ag5OTnRn//8Z6u3HQDUqa6hkfaeLxKXucpYd/FmG09dM1BcfuvnNDpfWNntxwT7IHuQXr58Oc2fP5/mzp1L8fHxtGrVKvL09KQ1a9YYvH1gYCCFh4frT1u3bhW3R5AGAGvhXa2qNA1iw4z+YT5meczpg8JpfN9g0jQ00rPfHDPLY4LtkzVIazQaSklJoalTp15qkKOj+HnXrl1GPca7775Lt9xyC3l5eRn8fW1trdiesvkJAMAcQ92jYoPI0dG4Aiad4Wm7p68bJBLRfjqRTz8eQxIZyBykCwsLqaGhgcLCwlpczz/n5uZ2en+eu+bh7rvuuqvd2yxbtkzsHy2doqOjzdJ2AFCv35uCtDmGupvrE+ItanuzZ745SjV1SCJTO9mHu7uDe9FDhgyhkSNHtnubxYsXU2lpqf6UmYnt4QCg6zhwpqQXi8ujzRyk2YNT4ijCz50yi6rpjZ+QRKZ2sgbp4OBgkfSVl9dyWId/5vnmjlRWVtLatWtp3rx5Hd7Ozc2NfH19W5wAALrqQGYJ1dY3UoiPm+j5mpuXmzMtuSZeXOZM7z3ndAlqoE6yBmlXV1dKSkqibdu26a9rbGwUP48ePbrD+65fv17MN99+++1WaCkAgM7+jBJxfllMgNEbapjqqiERdOPwHtSoJfrb2v1UWlWHw69Ssg938/Kr1atX0wcffEDHjx+n++67T/SSOdubzZ49WwxZGxrqvv766ykoyPzDTQAAHWV2s6E9/C16kJ6ZOYhigjzpQmkNLfg0VSz7AvVxlrsBs2bNooKCAlqyZIlIFktMTKTNmzfrk8kyMjJExndzJ0+epJ07d9IPP/wgU6sBQK0OZZWK86E9/Cz6PN5uzvTGX4bTn1ftEiVDl2w6Qv+8YYjFeu+gTA5arVZLKsJLsDjLm5PIMD8NAKYorKilEc//SBwnDy29gnzcu14O1Fi8FOvuj/aJoe/543vT4qsGmm3ZFyif7MPdAAC2NtQdG+xllQDNpsaH0TMzB4vLq389R49+fpBq67E0Sy0QpAEAjHQwUzfUnWDh+ejW7hjVi17+cwI5OTrQhtRsmvnGb3Q8B4WZ1ABBGgDA5KQxy85HG3JTUg96d84ICvJyFVtkXvv6Tvr75wcp/SLqfNszBGkAACNw+o4+aSzauj1pyaT+obTl4Qk0fVAY1Tdq6bN9WTTp5R10+zt/0Mb92djm0g7Jnt0NAGALeBvJi5UacnZ0oPgI+YoiBXu70Vt3jBBVz/6z7TT9fKqAdp4pFCfOCL96SATdNKIHjehluXXcYD0I0gAARjh2QTcH3DfMh9xdnGQ/Zkm9AuiDv46kzKIq+iI1S5y4lOi6fZniNDDCl5ZeGy82AQHbheFuAAAjnMwtF+cDw82zNaW5RAd60t+m9qOfH51Ma+8eJeauPV2dRGLZLW/vpsc/P0SaehRCsVUI0gAARjiRpwvS/RUWpCW8dpp7zZwFvvPxKXT7qJ7Ey6m5V33ne3uotBqlRW0RgjQAgBFONfWk+yk0SDcX6OVKz18/hN6bO5K8XJ3E1ppz39uDHrUNQpAGAOgEFw9JK9QtdRpgA0FaMrFfCK2/dwz5ujtTakYJPf/tMbmbBCZCkAYA6MTZ/EpqaNSKYBfu625Txys+0pdW3JIoLn+4K502HciWu0lgAgRpAIBOnGo2H22Ly5qmDAij/5sSJy4/980xqqitl7tJYCQEaQCATnCFLyUnjRljwZS+1DvYiworNLRqx1m5mwNGQpAGAOjEyVzdGun+4fIVMekuV2dHWnTVAHF59a9pdKGkWu4mgREQpAEAOnEqr8LmksYMuSI+jEb2DqTa+kZ6Y/sZuZsDRkCQBgDoQFlNnSgJyvqF2naQ5vn0h6f2E5e51jf/baBsCNIAAB04k6/rRYf5upGfp3X2kLakUbGB1C/Mm6o0DfRFSpbczYFOIEgDAHQgrUC3PrpPiLddHCfuTfP+1Oyj3elidy9QLgRpAIAOpBXoetKxIV52c5xuGN5D7JjFX0B+O3NR7uZABxCkAQCM6EnHBttHT5pxgL5hWJS4vGE/hryVDEEaAKADaYX215Nm1yZEivMfj+WhpreCIUgDALSDS4Gev1hlV3PSzfejDvZ2o7KaetqVhiFvpUKQBgBoR3ZxtehlciGQSH8PuzpOTo4ONH1QmLj8/eEcuZsD7UCQBgBox9mmoe7eQV4iqNmbGUMixPkPx/KovqFR7uaAAQjSAADtOJtvn/PRkuTegRTg6UJFlRrac75I7uaAAQjSAADtkPaQttcg7ezkSJcP1A15/3yyQO7mgAEI0gAAna2RtqPlV62NiwsW5zvPFMrdFDAAQRoAoLM10nbak2Zj4oLE+bGcMiqu1MjdHGgFQRoAwICK2nrKL68Vl2PtbPlVc6E+7qKWN1cHxVIs5UGQBgAwIP2irhcd6OVKfh62v7FGR8b00Q15/4Yhb8VBkAYAMCCjqYhJz0BPuz8+Y5vmpX8/i6ImSoMgDQBgQHqRLkj3CrL/IJ0cG0i8DPxcYaV+72xQBgRpAAAD0pt60r1U0JP2dXehoT38xeXd6E0rCoI0AIABGUW6OemeQfab2d3ciF4B4vxAZoncTYFmEKQBADrqSatguJsN66kL0vszi+VuCjSDIA0A0ApvqnGhaW5WDcPdbFhP3XD38ZxyqtY0yN0caIIgDQDQCidPNWqJPFycKMTHTRXHJ8LPncJ83cT2nIezS+VuDjRBkAYAaGeNNC+/cnCwv92vDOG/c1i0NC+NIW+lQJAGAGglo2n5VU+VzEe3HvLen4HkMaVAkAYAUPHyK4PJYwjSioEgDQDQznC3WjK7JUOi/MjJ0YFyy2r0iXMgLwRpAIB2etJqWSMt8XB1ov5hPuIykseUAUEaAKAZrVZLmcXqHO5mgyJ9xfmxC2VyNwUQpAEAWiqs0FBNXSNxUnekv4fqDk+8FKRzEKSVQPae9MqVKykmJobc3d0pOTmZ9uzZ0+HtS0pK6IEHHqCIiAhyc3Ojfv360XfffWe19gKAfZN60RG+7uTqLPtHpNUNjEBPWkmc5XzydevW0cKFC2nVqlUiQK9YsYKmT59OJ0+epNDQ0Da312g0NG3aNPG7zz//nKKioig9PZ38/XXLBgAAuiurWJcw1SNAfUPdzYM0F3QpraojP0/73ktb6WT9mrh8+XKaP38+zZ07l+Lj40Ww9vT0pDVr1hi8PV9fVFREGzdupLFjx4oe+MSJEykhIcHqbQcA+5TV1JPuEaC+oW7m5+Gi/9uP52LIW7VBmnvFKSkpNHXq1EuNcXQUP+/atcvgfb766isaPXq0GO4OCwujwYMH0z//+U9qaGi/zmxtbS2VlZW1OAEAdN6TVmeQZvEY8lYM2YJ0YWGhCK4cbJvjn3Nzcw3eJy0tTQxz8/14Hvqpp56iV155hZ5//vl2n2fZsmXk5+enP0VHR5v9bwEAOwzSKszsliB5TDlsKiuisbFRzEe//fbblJSURLNmzaInn3xSDJO3Z/HixVRaWqo/ZWZmWrXNAGBb1D7czdCTVg7ZEseCg4PJycmJ8vLyWlzPP4eHhxu8D2d0u7i4iPtJBg4cKHrePHzu6ura5j6cAc4nAIDONDZq9T3paJUmjjXvSZ/OLxfbdqoxy10pZDvyHFC5N7xt27YWPWX+meedDeFksTNnzojbSU6dOiWCt6EADQBgisKKWhGUHB2Iwv3cVXvwovw9yMfdmeoatHS2oELu5qiarF+PePnV6tWr6YMPPqDjx4/TfffdR5WVlSLbm82ePVsMV0v495zd/dBDD4ng/O2334rEMU4kAwDorsymXnSEnwe5OKm398jbVvZrKg96Jh9BWrXrpHlOuaCggJYsWSKGrBMTE2nz5s36ZLKMjAyR8S3hpK8tW7bQww8/TEOHDhXrpDlgP/744zL+FQBgLzAffUnfUG9KSS+m0wjS6g3SbMGCBeJkyI4dO9pcx0Phu3fvtkLLAEBt1F7IpLm4UG9xfia/XO6mqJp6x3MAAFrBGulL+jYNd5/Kw3C3nBCkAQCaYLi75XA3O19YKZLpQB4I0gAATTDcfUmEnzt5uTpRfaOW0i9W4j0iEwRpAICmfaQvlKAkaPMM77imIW8kj8kHQRoAgIiKKjVUW6/bRzrMV71rpA0NeZ/GvLRsEKQBAIjoQkmNOA4h3m6osNU6SCPDWzYI0gAAHKRLmwqZ+Ku3ZndrfcOkZVjI8JYLgjQAgOhJ64J0lD+GuiV9Q3Vz0mkFlVTfgAxvOSBIAwAQUU5pjb4kKFyq4e3m7EiahkbKbvoSA9aFIA0AQKQPQpEY7r4UIBwdqHewl7icVohlWHJAkAYA4J60FKRVvPuVITFBuiB9rgBBWg4I0gAAzbK70ZNuqXeILkifR0ETWSBIA4DqcVJUfnnTnDQSx1roLfWkMdwtCwRpAFC9vPJaatQSuTg5ULCXm+qPh6GeNIK0PBCkAUD1pOVXnNnNyVJwiZQ4xol1NXUNODRWhiANAKp3KUgjaay1IC9X8nFzJq2WKKOoSvXvFWtDkAYA1ZOSxnhdMLTdaAND3vJBkAYA1cvRlwRFT7qjIW/MS1sfgjQAqJ403I3lV4ZhrbR8EKQBQPX0a6RREtSgWCnDG2ulrQ5BGgBUD8PdRvaksVba6hCkAUDVqjUNVFxVJy5juNuwmKY56YLyWqqsrbfiqwMI0gCgatI+0t5uzuTr7iJ3cxTJz8NFnFhmMZZhWROCNACo2qWkMWR2d6RXkKc4z7iIIG1NCNIAoGo5TUlj2Ee6Y9GBTUEaBU2sCkEaAFQN+0gbpxeCtCwQpAFA1aTMbuwj3bGeCNKyQJAGAFWT1khHoCSocUEac9JWhSANAKomZXcjcaxjPZsSx7KKq6mB9/UEq0CQBgDV0mq1+sQxVBvrGCfWOTs6kKahkXLLdMcMLA9BGgBUq6Sqjqqb9kgOxzaVHXJydKAeAbpdwjDkbT0I0gBAah/qDvZ2JXcXJ7mbo3g9m8qDZmIZltUgSAOAauk31kDSmFF6Bup60ulFlZZ8WaAZBGkAUC39xhoY6jZKr0BdTzqjSHfcwPIQpAGA1F7IBNXGTKw6hi0rrQZBGgBUS8rsjsJwt0lrpTOL0ZO2FgRpACC1D3cjs9s4UU3Z3UWVGqrSYMtKa0CQBgDVktb7Yk7aOLxdpY+bc4vdw8CyEKQBQLWFTPJKa8Vl9KRN701z5TGwPARpAFAlHrLl6lkODkShPthL2ljS/L2UdAeWhSANAKqUU6ob6g7yciNXZ3wUGgs9aevCOxMAVCm3KUhjPto0UmnQbAx3WwWCNACoOmkszBdD3aaI8tctw8Jwt3UgSAOAKqEn3b3hbvSkrQNBGgBU3ZNGZnfXEsfyymtIU99ogVcGFBekV65cSTExMeTu7k7Jycm0Z8+edm/7/vvvk4ODQ4sT3w8AoCs96XAMd5uEdwxzc3YkrfbSMQQ7DtLr1q2jhQsX0tKlSyk1NZUSEhJo+vTplJ+f3+59fH19KScnR39KT0+3apsBwPZhc42u4Y6R1JvOKqky62sCCgzSy5cvp/nz59PcuXMpPj6eVq1aRZ6enrRmzZoO3yTh4eH6U1hYmFXbDAC2L69MV8gkDDtgmQzz0ioJ0hqNhlJSUmjq1KmXGuToKH7etWtXu/erqKigXr16UXR0NM2cOZOOHj3a7m1ra2uprKysxQkA1K28po4qanW1pzHcbTp9TxrLsOw7SBcWFlJDQ0ObnjD/nJuba/A+/fv3F73sTZs20ccff0yNjY00ZswYysrKMnj7ZcuWkZ+fn/7EgR0A1C2vKWnM192ZvJpqUYPxUHVMRcPdpho9ejTNnj2bEhMTaeLEibRhwwYKCQmht956y+DtFy9eTKWlpfpTZmam1dsMAMqsNobM7q7pEYhlWNYi61fI4OBgcnJyory8vBbX888812wMFxcXGjZsGJ05c8bg793c3MQJAKBtkNYFGzANCpqopCft6upKSUlJtG3bNv11PHzNP3OP2Rg8XH748GGKiIiwYEsBwJ7k6Zdf4Qt8dxLHOEO+sVFr1tcGWpJ9MoaXX82ZM4dGjBhBI0eOpBUrVlBlZaXI9mY8tB0VFSXmltmzzz5Lo0aNori4OCopKaGXXnpJLMG66667ZP5LAMBW5OgLmaAn3RVhPm7k5OhAdQ1ayi+vxbSBPQfpWbNmUUFBAS1ZskQki/Fc8+bNm/XJZBkZGSLjW1JcXCyWbPFtAwICRE/8999/F8u3AABM6Uljc42ucXZyFFnxXL87u6QKQdqCHLS887mK8BIszvLmJDIuigIA6jPjtV/pWE4ZvXfnZTR5QKjczbFJN7+1i/acK6LXbkmkmYlRcjfHbtlcdjcAgLmWYCG7u+t6YK20VSBIA4Cq1NQ10MVKjbiMQiZmqDpWUm2mVwYMQZAGAFXJbyoHyptE+Hu6yN0c2y9ogqpjFoUgDQCq3KKSk8Z4HwDomh4BnuIcPWnLQpAGAFXufhWGLSrNtsmGyvKPrQpBGgBUmTSG5VfdIx2/6roGKq6qM8MrA4YgSAOAKkuCYovK7nF3caIQH13FNsxLWw6CNACoSq5UyATD3WbcDauq+w8GBiFIA4AqE8dQEtR889LYV9pyEKQBQJU9aRQy6T4UNLE8BGkAUI2GRt2GEAyJY92HgiaWhyANAKpRWFErAjXv4BTsjW0quyuyaRcxaVkbmB+CNACoLrM7tGmrReieCH/dMqycEt1xBfNDkAYA1cB8tGV60lwLnWuig/khSAOAauQ2DctiYw3z4NrnXAO9eZEYMC8EaQBQjdymzTWQ2W0eXPs8smmt9AUMeVsEgjQAqAZ60uYnZcnnliF5zBIQpAFAdYlj6EmbT0TTvDR60paBIA0AqiHNm2JO2vw9aSzDsgwEaQBQBd5OUepJS70/6D4sw7IsBGkAUIXS6jqqrW8Ul0N9UcjE/AVNkN1tCQjSAKAKUhAJ9HIV2yyCeUjz+xjutgwEaQBQVyETbFFpkZ50cVUdVWtQ0MTcEKQBQGVbVOp6fmAevh7O5OmqG5lAb9r8EKQBQBWw/MpyBU30a6UxL212CNIAoAp5UmY3hrstt1YaQdrsEKQBQBVymoa7wzDcbbm10iWoOmZuCNIAoKqSoFJAAfOJaKrfLX0RAvNBkAYAVUB2t+VEoidtMQjSAGD3qjT1VFZTLy4ju9uSa6XRkzY3BGkAUE0v2tvNmXzcXeRujt25tF0l5qTNDUEaAFQTpMNQDtQipHl+Hq2orNWNWIB5IEgDgGoKmWBjDcvg0QkfN2dxGUPe5oUgDQB2TwocYVgjbTGo4a2gIJ2Wlmb+lgAAWHi4O9Ify68svgyrBMljsgfpuLg4mjx5Mn388cdUU4MXBACUDSVBrbgMCxne8gfp1NRUGjp0KC1cuJDCw8PpnnvuoT179pi3ZQAAZiJt/IBCJpYjzfdjkw0FBOnExER67bXX6MKFC7RmzRrKycmhcePG0eDBg2n58uVUUFBg5mYCAJijkIkukID5SV+AUL9bQYljzs7O9Kc//YnWr19P//rXv+jMmTP06KOPUnR0NM2ePVsEbwAAOdXUNdDFSo24jJ605UQ0zfdL5VdBAUF63759dP/991NERIToQXOAPnv2LG3dulX0smfOnGmmZgIAdE1+Wa04d3N2JH9PFDKx+HA3EsfMSrewzUQckN977z06efIkzZgxgz788ENx7uioi/m9e/em999/n2JiYszbWgAAE0lzpFwVi/c+BsuQRinKa+upvKYOld3kDNJvvvkm/fWvf6U777xT9KINCQ0NpXfffbe77QMAMEshk3CskbYoLzdn8nV3FlXHOMMb5VdlDNI8nN2zZ099z1mi1WopMzNT/M7V1ZXmzJljpmYCAHSNtCQI89GWx6MVZbnl4pj3C/OxwjPavy7NSffp04cKCwvbXF9UVCSGugEAlCKnadMH7H5ledIXIemYg0xBmnvMhlRUVJC7u+kVfVauXCnmr/m+ycnJRq+5Xrt2rZhjuv76601+TgBQB/SkrSe8KXkMy7BkGu7m4iWMA+OSJUvI09NT/7uGhgb6448/xBpqU6xbt0487qpVq0SAXrFiBU2fPl0kpfG8dnvOnz8vssnHjx9v0vMBgErnpJsCCFi+6hiWYckUpPfv36/vSR8+fFjMO0v4ckJCggicpmaKz58/n+bOnSt+5mD97bffiiIpixYtMngf/kJw22230TPPPEO//vorlZSUmPScAKAe6EnLUL8bpUHlCdLbt28X5xxQueKYr69vt55co9FQSkoKLV68WH8dJ6NNnTqVdu3a1e79nn32WdHLnjdvngjSAAAGP2PqG6mwQrdOGoljVpyTRpCWN7ub10ibAyefca84LCysxfX884kTJwzeZ+fOnWJp14EDB4x6jtraWnGSlJWVdbPVAGAr8striFNoXJ0cKdDr0sgfWIaUnCeVYQUrBmku/8kFSrj3zJc7smHDBrKE8vJyuuOOO2j16tUUHBxs1H2WLVsmhsUBQMU1u/3cUcjEij3pitp6KqupI193VHizWpD28/PTv8n5sjlwoHVycqK8vLwW1/PPvLtWa1xylBPGrr32Wv11jY2N+jrinGzGy8Oa46F0KeFN6klzbXEAsH9SljGWX1mHp6sz+Xm4UGl1nfiChCBtxSDdfIjbXMPdnGyWlJRE27Zt0y+j4qDLPy9YsKDN7QcMGCAS1pr7xz/+IXrYPEduKPi6ubmJEwCoj5RljPlo6+FjzUH6Qkk1CprINSddXV0tMrylJVjp6en05ZdfUnx8PF1xxRUmPRb3crky2YgRI2jkyJFiCVZlZaU+25t304qKihLD1ryOmrfDbM7f31+ct74eAEBKYEJP2rpB+kRuOeal5QzSvLsVz0vfe++9YvkTB1fuFXMiGC+puu+++4x+rFmzZon9p3nddW5urlhnvXnzZn0yWUZGRpvyowAApsxJR6But9VI69GR4S1jkE5NTaVXX31VXP7888/F/DGvof7iiy9EsDUlSDMe2jY0vM127NjR4X05mQ0AoMM10k3rd8F6BU2k3cege7rURa2qqiIfH13x9B9++EH0qrm3O2rUKDH0DQCgqJ50U+AAy5OmFtCTljFIx8XF0caNG8WOV1u2bNHPQ+fn53e7wAkAgDnUNzSKddIMc9LW3QmLIUjLGKR5SJvLf/KmGFxve/To0fpe9bBhw8zUNACArssvr6VGLZGzowMFe2GFh7WgoIkC5qRvuukmGjduHOXk5Ih63ZLLL7+cbrjhBnO2DwCgS6SeXJivOzk66mo8gHULmpTX1JEPCppYP0gzThZrXXCEs7wBAJQA89HyFzThL0oI0jIEaV7H/OKLL4qiIzwPLVX9kqSlpXWzWQAA3SNlF2M+Wr6CJhyk+4XpkozBikH6rrvuop9//lnU0Y6IiEBNXABQHPSklVDQBMuwZAnS33//vdjzeezYsd1uAACAJeSUScuvsEZaroImF0qwG5Ys2d0BAQEUGBjY7ScHALCUnBLU7ZY7eQxbVsoUpJ977jmxDIuLmgAAKH2bSpAnSF/AcLc8w92vvPKK2DaS62vzWmkXF5c2ZUMBAOTS0KilvPJacRnD3dYnHXP0pGUK0tK2kgAASlRYUSsCtZOjA4X4oJCJtaGgicxBeunSpWZsAgCAZQqZhPq4iUAN8gx3l6OgSbd1eQ9I3qLynXfeocWLF1NRUZF+mDs7O7v7rQIAMEPSGOaj5eHl5ky+7ro+IIa8ZehJHzp0iKZOnUp+fn50/vx5mj9/vsj23rBhg9j/+cMPP+xmswAAui67KUhHYYtKWTfaKMstpwulNdQXBU2s25NeuHAh3XnnnXT69Glyd7+UOTljxgz65Zdfut4aAABzBukArJGWf14aBU2sHqT37t1L99xzT5vro6KiKDc3t1sNAgDoruxi9KSVMi+NLStlCNJubm5UVlbW5vpTp05RSEhIN5sEANA90vrcSFQbk30ZVg6qjlk/SF933XX07LPPUl1dnfjZwcFBzEU//vjjdOONN3avRQAA3SSVo8Rwt/zD3VJ5VrBikOZiJhUVFaLXXF1dTRMnTqS4uDjy8fGhF154oYtNAQDovipNPRVVavTJSyAPaRRDyrQHK2Z3c1b31q1b6bfffqODBw+KgD18+HCR8Q0AoIRetI+bbl9jkAcKmsgUpHnv6Pfff18st+LlVzzU3bt3bwoPDyetVottKwFAEZnd6EXLCwVNZBju5iDM89G8nzQXLRkyZAgNGjSI0tPTxZKsG264wUzNAgDomgtYfqUIKGgiQ0+ae9C8Dnrbtm00efLkFr/76aefRE1vLmQye/ZsMzUPAKBrQTrSH7tfKSHDu6ymXCzDQkETK/SkP/30U3riiSfaBGg2ZcoUWrRoEX3yySddbAoAgPnWSGO4W34RTV+UclDQxDpBmsuBXnnlle3+/qqrrhKJZAAAckFJUOVAQRMrB2neSIP3kG4P/664uNgMzQIA6BoEaeUI98W+0lYN0g0NDeTs3P40tpOTE9XX13e7UQAAXcF7SEu7LqGQiXKGu3mTDbBC4hhnd3MWN5cFNaS2traLzQAA6L6C8lqqb9SKPaRDfZA4ppThbmyyYaUgPWfOnE5vg8xuAJBLdkmVOA/3dReBGuSF+t1WDtLvvfeeGZ4SAMAyslGzW5FVx8pr66m8po583FEBziq1uwEAlAhbVCqLt5sz+bjr+oJ52GijSxCkAcD+qo1hYw3FbbQh1VQH0yBIA4AdVhvD7ldKgY02ugdBGgDscHMNZHYrhfRaXEDVsS5BkAYAuwvSPQLQk1YKFDTpHgRpALALZTV1VF6jK6aE4W7lQGnQ7kGQBgC7mo8O8HQhT1eTVpeCBWGTje5BkAYAu4CkMWVCT7p7EKQBwC5gi0plCm9agsVTERW12NvBVAjSAGBf1caw/EqxBU1Qw9t0CNIAYBewRaVyYci76xCkAcC+qo1h+ZXiYKONrkOQBgC7gMQx5UJPuusQpAHA5tU1NOo3cMCctIJ70qg6ZptBeuXKlRQTE0Pu7u6UnJxMe/bsafe2GzZsoBEjRpC/vz95eXlRYmIiffTRR1ZtLwAoS25pDTVqiVydHSnIy1Xu5kAr6EnbcJBet24dLVy4kJYuXUqpqamUkJBA06dPp/z8fIO3DwwMpCeffJJ27dpFhw4dorlz54rTli1brN52AFCGzKIqfTlQR0cHuZsDrWCTDRsO0suXL6f58+eLQBsfH0+rVq0iT09PWrNmjcHbT5o0iW644QYaOHAg9enThx566CEaOnQo7dy50+ptBwBlyCzWBenoAE+5mwIGYJMNGw3SGo2GUlJSaOrUqZca5Ogofuaecme0Wi1t27aNTp48SRMmTDB4m9raWiorK2txAgD7ktHUk44OxMYaSoSCJjYapAsLC6mhoYHCwsJaXM8/5+bmtnu/0tJS8vb2JldXV7r66qvp9ddfp2nTphm87bJly8jPz09/io6ONvvfAQDyyizSLb/qGYietBKhoIkND3d3hY+PDx04cID27t1LL7zwgpjT3rFjh8HbLl68WAR16ZSZmWn19gKAZWG4W/mQPNY1sm4VExwcTE5OTpSXl9fiev45PDy83fvxkHhcXJy4zNndx48fFz1mnq9uzc3NTZwAwP570tHoSSt6yPtUXgXllOqWyoEN9KR5uDopKUnMK0saGxvFz6NHjzb6cfg+PPcMAOpTrWmgwgrd/z8Sx5Qr0s9dnOc01VgH48i+6SoPVc+ZM0esfR45ciStWLGCKisrRbY3mz17NkVFRYmeMuNzvi1ndnNg/u6778Q66TfffFPmvwQA5Bzq5k0c/Dxd8CIofRlWmW7UA2wkSM+aNYsKCgpoyZIlIlmMh683b96sTybLyMgQw9sSDuD3338/ZWVlkYeHBw0YMIA+/vhj8TgAoN410kgaU7bIpqpjF9CTNomDltcxqQgvweIsb04i8/X1lbs5ANBN7/92jp7++hhdOSicVt2RhOOpUL+cKqDZa/ZQ/zAf2vKw4SWzYCfZ3QAAksxiKWkMa6RtI7sbw92mQJAGALsY7kZmt7JF+Ou+RJXV1FNlbb3czbEZCNIAYCfVxlDIRPEFTdx0aVDoTRsPQRoAbBan1GRJw92o2614kU296WwkjxkNQRoAbFZxVR1VNA2d8g5YoGxRTa9RdtMXK+gcgjQA2KzzFyv1hTLcXZzkbg50Ikrfk9ZNUUDnEKQBwGalNwXpXkFecjcFjICetOkQpAHAZp0v1PXIegUhacy2etIY7jYWgjQA2Cz0pG0LetKmQ5AGAJuV3rT8KgY9aZvQo6knnVtWQ3UNjXI3xyYgSAOAzUq/KA13Y07aFgR7u5GrkyM1aolysWWlURCkAcAmlVbXUVGlRlzGnLRtcHR0oEh/XXlQzEsbB0EaAGxSRlMvmntnXk2VrED5MC9tGgRpALDpNdKYj7YtyPA2DYI0ANgkZHbbpih/3XI5VB0zDoI0ANik803D3ehJ2+hwN9ZKGwVBGgBsek66VzAyu20JhrtNgyANADbpnFQSFFtU2pQezXrSjbwWCzqEIA0ANqe8po4KymvF5Rj0pG1KuJ87OToQaeobqbBS9xpC+xCkAcDmnCus1C+/8vNwkbs5YAIXJ0cK821aK40tKzuFIA0ANietQBekY0MwH22LMC9tPARpALA5aQUV4rwPgrRNQkET4yFIA4DNOds03B0b7C13U6AL0JM2HoI0ANics/m6njSGu20TetLGQ5AGAJvCy3akkqCxIehJ2yL0pI2HIA0ANuVCaTXV1DWSi5MDRTetuQUbXSuN7O5OIUgDgE1mdvcM9CRnJ3yE2aJIf12QLq+tF1uOQvvwDgcAm8zsxlC37fJ0daZAL1dxGb3pjiFIA4BNSZMyu7H8yqZhXto4CNIAYJPD3X2w/Mo+gnSxbqMUMAxBGgBsyln9cDeqjdkybFlpHARpALAZZTV1lFNaIy73DfORuznQDRjuNg6CNADYjNN55eI83NcdG2vYOBQ0MQ6CNADYjFN5uqHuvmEoYmLr0JM2DoI0ANiMU0096X4Y6rabgiaFFRqq1jTI3RzFQpAGAJtxuqkn3Q89aZvH+4D7uDuLy1nI8G4XgjQA2Az0pO2HgwOXdfUUlzOKsAyrPQjSAGATSqo0lF9eKy4js9s+cGlXlokg3S4EaQCwqaQxTjjydtMNk4Jt6xkk9aSr5W6KYiFIA4BNDXUjs9t+SLuYYbi7fQjSAGBTa6SR2W0/ojHc3SkEaQCwCSelnnQo1kjb3Zx0cRVptVq5m6NICNIAoHj8AX48RxekB0b4yt0cMGPVMQcHoipNA12s1OC4GoAgDQCKd6G0hkqr68jFyQHD3XbEzdlJlHhlmJdWcJBeuXIlxcTEkLu7OyUnJ9OePXvave3q1atp/PjxFBAQIE5Tp07t8PYAYPuOZpeK87hQH3J1VsTHFpgJ5qU7Jvu7fd26dbRw4UJaunQppaamUkJCAk2fPp3y8/MN3n7Hjh1066230vbt22nXrl0UHR1NV1xxBWVnZ1u97QBgHcdyysR5PIa67Q7WSis8SC9fvpzmz59Pc+fOpfj4eFq1ahV5enrSmjVrDN7+k08+ofvvv58SExNpwIAB9M4771BjYyNt27bN6m0HAOs4dkEXpAdFYj7a3qDqmIKDtEajoZSUFDFkrW+Qo6P4mXvJxqiqqqK6ujoKDAy0YEsBQBE9aQRpu9MzCGulOyJr2Z7CwkJqaGigsLCwFtfzzydOnDDqMR5//HGKjIxsEeibq62tFSdJWZnunx0AbENpVR1lFesqUiGz256Hu1F1TJHD3d3x4osv0tq1a+nLL78USWeGLFu2jPz8/PQnnsMGANvrRfPWhrxzEthn4tiF0mqqrceWlYoK0sHBweTk5ER5eXktruefw8PDO7zvyy+/LIL0Dz/8QEOHDm33dosXL6bS0lL9KTMz02ztBwDrBWnMR9unEG838nJ1Iq5lgt60woK0q6srJSUltUj6kpLARo8e3e79/v3vf9Nzzz1HmzdvphEjRnT4HG5ubuTr69viBAC24+gF3fKr+Ag/uZsCFtqysleQl7icfrESx1hpw928/IrXPn/wwQd0/Phxuu+++6iyslJke7PZs2eL3rDkX//6Fz311FMi+5vXVufm5opTRYVuhxwAsC8HM0vE+ZAe+IJtr2KCdUPe5y9iX+nWZN/vbdasWVRQUEBLliwRwZaXVnEPWUomy8jIEBnfkjfffFNkhd90000tHofXWT/99NNWbz8AWA5XGTtboOtdJfTwx6G2U+hJKzhIswULFohTe8VLmjt//ryVWgUAcjucVarPAA7ydpO7OWAhMU37SqMnrcDhbgCA9hzILBbnidHoRdsz9KTbhyANAIp1oGk+OgFB2q7FNCWO8Xr4uoZGuZujKAjSAKDY7SmlII2etH0L9XEjdxdHamjUUnZT4RrQQZAGAEXiXlVhhUZsT4k10vbN0dGBegXqetPnsQyrBQRpAFAkqRfNpUDdXZzkbg5YWK+m5LF0LMNqAUEaABRpf0bTfDSWXqlCTDB60oYgSAOAIu09XyTOR8QEyN0UsGLy2PlCVB1rDkEaABSnrKZOXw40uXeQ3M0BK8BaacMQpAFAcVLOF1OjVjdPGe5neIc7sC+9Q3Q96YyiKtLUYxmWBEEaABRn97mL4jy5d6DcTQErCfd1J09XJ7EMiwM16CBIA4Di/JGmm4/GULe6dsPq3ZQ8llaADZMkCNIAoCiVtfV0OLtpPjoWPWk1iQ3xFudpSB7TQ5AGAEVJSS8WQ549AjyoR4Bu7SyoQyx60m0gSAOAovx+VpqPRla32sQ2JY+lNW1PCgjSAKAwO07mi/MJ/YLlbgpYWR8Md7eBnjQAKEZOaTWdyC0nBweiCX1D5G4OWJmUOFZUqaGSKg2OP4I0ACjJzycLxPmwaH8K8HKVuzlgZV5uzmIpFjuLIW8BPWkAUIztTUPdk/uHyt0UkEmfUCzDag5BGgAUgatM7TxdKC5PQpBWrdhgLMNqDkEaABRhX3oRVWoaKNjbDftHq5iU4X02HwVNGII0ACjC5iO54nxy/xBydHSQuzkgc4b3GVQdExCkAUB29Q2N9N3hHHH5moRIuZsDMuoX5iPO0y9WUW19g+pfCwRpAJDd7rQiKqzQUICnC43pgyImahbm60Y+7s6i6tw5lAdFkAYA+X198II4v2pIBLk4oe+g9o02+obqhrxP5WFeGv8NACB7Vvf3R3RD3dcOxVA3XBryPp1XrvrDgSANALKXAS2rqacQHzcaif2jgYj6NgXpUwjSCNIAIK+PdqeL8z8NiyInZHWD6EnrhrtPYxkWgjQAyCetoIJ+PV0oanXfPqoXXgoQkOF9CYa7AUA2H+/O0JcBjQ7E3tGgE+pzKcM7TeU1vBGkAUAWVZp6Wp+SKS7fMRq9aGiZ4S31pk+pfF7aWe4GAIBlA+H+jBI6lFVKxVUaqqytJ39PFwr386DEHv40MMKHnGVa8vTRrnQqr6mnXkGeNBHbUoKBeemU9GI6o/J5aQRpADvEH24f7TpP3x3OJU1DY7u383FzpisHh9OfhvegUbGBogdjDeU1dfTmz2fF5Qen9EUZUGijb6iuJ30yFz1pALATWcVV9Pw3x2nzUV0dbBbp507DewVQpL8Hebg4UUmVhtKLqkQg557s+pQscYqP8KX7JvWhq4dEWDxovvPrOSqpqqO4UG+6YViURZ8LbNOACF2QPp5bRmqGnjSAndi4P5sWbzhM1XUNYikTB7/Zo3vR0B7+Bm/f2KilfenF9OX+bHHfYzll9OCn++mdX9PoH9fE02UxgRZpZ15ZDb2785y4vHBaPyy7AoP4SyPLLKqmspo68nV3ITVy0Gq1WlKRsrIy8vPzo9LSUvL11b0JAGx9c4pnvzlGH+7SrTceGRNIz10/mPqH63oixiiu1Ij7r/41jSpq68V1M4aE06IrB1LPIPNlXfPHzV/f30vbTxZQQrQ/fXnfGAx1Q7vGLNtGF0pr6LN7Rqu20A2yuwFsvKQm936lAP1/l/elT+8eZVKAZgFervTQ1L60/dFJ9JfknsSj3TyfPfXVn2n5DyepWmOe3YjW78sSAdrV2ZFeumkoAjR0aGBTb/p4jnqHvBGkAWw4QN/7cQp9fySXXJ0cadXtw7s9fMylOf95wxD67qHxNC4uWDzHf346Q1OX/0ybj+SInnBXHc4qpWe+PiouPzKtn36JDUB7BiJII0gD2CKeT378i0P004l8cndxpNVzRtCVgyPM9vgDwn3po3kjReCP8veg7JJquvfjVJq9Zk+XlsScLaigOe/toUpNA42NC6K7xseara1g/0H6GHrSAGBL/r3lpEj44l7zm7cn0cR+IWZ/Dl6OxYH/x4UT6f+mxIkhai7heeWKX2jppiOUU1pt1OP8fqaQbnl7NxVVamhIlB+tuj0JyWJglIERl5Zhce6FGiFxDMDGbDqQTQ+tPSAuv/znBLopqYdVnjf9YiU9+/Ux2nYiX/zMQ+ycXHbziGiR1NO6KArffs3Oc/Th7nTiUfL+YT70v/nJFOTtZpX2gu1raNTSkKe3UJWmgX5cOIHimtZOqwmWYAHYEE6g4WFudv+kPlYL0KxXkBe9e+dl9NuZQnpt22nac66INh64IE6erk40tIcfBXu7Ec9an82voJN55SI4s1tHRtOSawaRh6uT1doLts/J0UEkQXLVvGM55QjSAKBcXNLz/k9Sqaaukcb3DaZHrugvSzvGxgWL04HMEvpsXyZ9eyiHSqvraHdaUZvbTuofQvPG9abxKPsJ3ZiX3s9B+kIZXZcQqbrjiJ40gI147ptjdK6wkiL83Ok/twyTfV43MdpfnJ6fOZhO5ZfT0ewyUXSChyh7B3tRfKQvRfh5yNpGsH2DI/3E+ZHsUlIjBGkAG7D5SC6t3Zsp9l1+5eYEsa5ZKbiEKGeD8wnA3Ib20AXpQ1klYgmgterLKwXWSQMoHNfafvLLw+LyPRP60Jg+wXI3CcBq+of7iJUFZTX1lH6xSnVHXvYgvXLlSoqJiSF3d3dKTk6mPXv2tHvbo0eP0o033ihuz9+mVqxYYdW2Asjhn98dp4uVGuob6i2KlQCoiYuTo76O98GsElIbWYP0unXraOHChbR06VJKTU2lhIQEmj59OuXn65Z4tFZVVUWxsbH04osvUnh4uNXbC2Btv58tpM/2ZYnLL944RPQoANQ75F1KaiPrf/zy5ctp/vz5NHfuXIqPj6dVq1aRp6cnrVmzxuDtL7vsMnrppZfolltuITc3rLUE+1ZT10BPbNANc98+qicl9VLnBgMAQ5t2cuPSsmojW5DWaDSUkpJCU6dOvdQYR0fx865du8z2PLW1tWLnq+YnAFvwxk9n6PzFKgrzdaO/XzlA7uYAyCahqSd95EKpWD2gJrIF6cLCQmpoaKCwsLAW1/PPubmXNqzvrmXLlomtKaVTdHS02R4bwFJO5JbRqp/PisvPXDdYtXvpArDYEG9RMIcrj3Wldrwts/sJrsWLF4u9o6VTZmam3E0C6BAvM1my6SjVN2rpivgwunIw8i9A3ZwcHWhwlJ8qk8dkC9LBwcHk5OREeXl5La7nn82ZFMZz176+vi1OAEpfE80lN3l3q6XXDZK7OQCKkBitm5fm6mNqIluQdnV1paSkJNq2bZv+usbGRvHz6NGj5WoWgOzJYv/8/ri4fPeEPmKbSAAgSuoVIA5DSnrb8rP2TNaKY7z8as6cOTRixAgaOXKkWPdcWVkpsr3Z7NmzKSoqSswrS8lmx44d01/Ozs6mAwcOkLe3N8XFxcn5pwCYxZrfzlFmUTWF+7rTvROx5zJA6yB9Kq+CSqvqyM9THXkasgbpWbNmUUFBAS1ZskQkiyUmJtLmzZv1yWQZGRki41ty4cIFGjZsmP7nl19+WZwmTpxIO3bskOVvADCX/PIaWvnTGXH58av6k6crqvYCSHiHtdhgL0orrKSUjCKaMqBl0rG9wn7SAArx+OeHaN2+TEqI9qcv7xsjamIDwCWPrT9I61OyxDatalmWaPfZ3QC2gHf4+SxFt/JgyTXxCNAABlwWoyvosy+9WDXHB0EaQAFLrngbSq2WxH650twbALSUFKP73ziYWUKa+kZSAwRpAJltOZpLf5wrIjdnR3r8KnUM4QF0RWywFwV6uVJtfaOoPqYGCNIAMi+5euE73ZKreybEYskVQAccHBz0I01cS0ANEKQBZPT+7+fFkiuuz33PxD54LQA6MaZPkDj/7UyhKo4VgjSATAoravVLrh6bPoC83LDkCqAzY+OCxfne80VUW99g9wcMQRpAJq9uPUXltfU0OMqX/jQsCq8DgBH6hnpTiI8b1dQ1Umq6/ZcIRZAGkMGpvHL6dE+GuPzU1VhyBWDKvPTYpiHv38/a/5A3gjSADF749jjxtrhXDgqn5FjdBw4AGGdM05D3ThXMSyNIA1jZjpP59POpAnJxcqBFWHIF0OV56UNZpVRWU2fXRxBBGsCK6hsaRS+azRkdQzHBXjj+ACaK8veg3sFe1NCopV1nL9r18UOQBrCitXsz6XR+BQV4utCDl/fFsQfooon9QsT5T8fz7foYIkgDWAkPy3FGN/vb1H7k56GOrfYALOHygaHifNuJfGrkBA87hSANYCX/3X6WLlZqKDbEi/6S3BPHHaAbknsHkbebs6g3cDDLfpdiIUgDWMH5wkpas/OcuPzkjIHk4oR/PYDucHV21A95b7PjIW98UgBYYZerp78+SpqGRhrfN5imDNAN0wGAeYa8fzyeZ7eHEkEawMJ+OJZHO07qllw9c90gUYwBALpvcv9QcnQgOpFbTplFVXZ5SBGkASyoWtNAz359TFy+e0IsxYZ443gDmEmAlytdFhMoLn93OMcujyuCNIAFvbH9NGWXVIt1nQ9MjsOxBjCz6xIjxfmmAxfs8tgiSANYSFpBBb39S5q4/NQ18eTpil2uAMxtxuAIcnZ0oGM5ZXQmv8LuDjCCNICFksWWbDpKdQ1amtQ/hKYPCsNxBrDQkPeEpizvrw7aX28aQRrAAtbtzRTF/3mZyNJrkSwGYEnXJeiGvL86kC2+INsTBGkAM+M56Oeb6nM/ekU/UWMYACxnWnwYubs40vmLVZSaUWxXhxpBGsCM+Fv8oi8OUUVtPQ3v6U/zxsXi+AJYmJebM10zVNeb/mS3bp92e4EgDWBGn+7JpF9PF5KbsyO9/OcEcuJFnABgcbeP6iXOvzmcQ8WVGrs54gjSAGbCxRRe+Fa3Jvqx6f2xJhrAihJ6+NGgSF/S1DfSF6lZdnPsEaQBzID3tX10/UGq1DTQiF4BNHdsbxxXACtycHCg25J1velP/siwm52xEKQBzOC1bafpj3NF5OXqRC9hmBtAFjMTI8nHzZnOFVaKcrz2AEEaoJt+O1NIr/90Wlz+55+GIJsbQMYEstljdL3pldvP2MVyLARpgG7OQy/4XyrxZ8GsEdE0MzEKxxNARn8d25s8XJzocHYp/XK60OZfCwRpgC6q0tTT3R+lUHFVHQ2O8qVnZg7CsQSQWZC3G906sqe4/MZPp22+N40gDdAF9Q2N9NDaA3Q8p4yCvV3p7TtGkLuLE44lgALcPSFWVPvbe76Yttr43DSCNEBX6nJ/dVT88/MHwarbkyjS3wPHEUAhwv3caf543QqLF747TrX1DWSrsC0PGI3f6NnF1ZTJp6IqyiurEWsSeROJ+sZGcnRwEL3KYG83CvFxox4BntQnxIucnRztKkC/tOUk/e+PDHJwIPrPLYk0omk/WwBQjvsmxdFn+7Io/WIVffD7ebp7Qh+yRQjS0C4OwnvOFVFKerE48VZwvB7YFFx5a0CELw2O9KXhPQNofL9gCvVxt9kA/fIPJ+m/O86Kn5+9bhBdOThC7mYBgAHebs6iqNDfPz9EK348TVcOiqCeQZ5kaxy0tj6rbqKysjLy8/Oj0tJS8vX1lbs5isJvheM55WIYd+vxXDqSXdbmNp6uThQd4EnRgR4U4echitpzT9nF0YHqG7V0sUJDBRW1lF9eQ+cLq0QN69biI3xpYv8QURR/WLS/KEKgdPzl5LlvjtH7v58XPy+5Jp7+Og4FSwCUrLFRS7es3i06GyNjAunTu0fZXKleBGmgnNJq+iIli9an6IaG9G8OB11A5QpaSTGBlNQrgCL93I0OqvwPkl5URUcvlNLhrFL6/exFsSyiOQ721w6NpOsSI2lAuDK/NFVrGuiR9Qfou8O54uel18ajohiAjci4WEVXvvYLVWkaaPFVA+ieibY17I0greL55R+P5dNn+zLpl9MFYp2vNDw9vm+w6OVOGRAm5pbNqbCiln49XUDbjueLU3XdpYSOfmHeYl9YXmscHaiMYanzhZV078cpdCK3nFycHOiVmxP1e9cCgG34dE8GLd5wWPSiP/zrSBobF0y2AkFaZbhXu35fFm08kE0lVXX665N7B9KfR0TTVYPDRdUea60z5kD91cEL9PPJAtI0NOp/d1lMAN0wrAddPSSC/DxdSI6hfz5OPMRdXlsvEuLe+MtwGhUbZPW2AED3/58fWX+QNqRmk5+HC218YKzNVAZEkFaBkioNbTpwQfSaj164NM8c7utONyX1EKcYmd+wpVV1tOVorvjysCvtor5n7+rkSFMGhNL1w6Jo8oAQcnO2/Frk03nl9Ow3x8SWk4yH+1feNpzCfG0z4Q0AiGrqGujW1btpf0YJRfl70Nq7RylmxK4jCNJ2XGyDgwxv2fbD0Tx9L5WDHg9l/3lEDxrfN0SRSRQ8R/7VgQv05f5sMcws4W/AM4aE0xXx4TS6T5DZi4ekFVTQ27+kibl5ThTjNdCPTOtHd42PVeRxAgDTcELrLW/tprTCShGoP7krWfYOSmcQpO1sSId7yjykw0PIPP8rGRjhS7NG9BDzvQFermQruKIXB+tNB7Ipr+zS38O1eXnunLPER/QKpL6h3uTYhUAqDblvSM2iHacuzc1fER9Gi64agD2hAexwaemtq3dTWkEl+Xu60Bu3DqdxfZU7R40gbQe4B/j9kVzauD+bTudX6K8P9HIVSU48nD04yo9sGfdsd529KIbEfzyeRzmlNS1+7+vuTMN7BVD/cB+xRKxnoCf1CPAgH3cXcnNxpPoGrQjIBeW1ohgLB//U9GJKzSgWxVgklw8IpXsn9aHLUKAEwK571PM/TKGDmSXE3+0XTI6jB6bEWWU6zVQI0jYasA5llYhgteVoHp1pFph5iHbawDD60/AomtAvhFzsqNpX6xED/vv/SCuiA5klLbLETcXLwGYmRNENw6OoT4i3WdsKAMqdo/7HxiP0eUqW+JlH4568eiBN7BeiqNoNCNI2EpQ5EP9x7iLtPF0oEqvKay4VCXF2dBBztDOGRIgTz92qSV1DI53IKRe9Yt7snUuWZhZXiRKmlZpLwZvn43lJWYSfO/UL96FBkb40tk8w9QryVNQ/JQBY7wv/d4dzaelXR6iwQqNfWTJvXG+aOjBMESWNFRGkV65cSS+99BLl5uZSQkICvf766zRy5Mh2b79+/Xp66qmn6Pz589S3b1/617/+RTNmzLCLimNcC5sDzam8clGG80BGiSgA0rpyl4+7s5iT5SSqyQNCVReYjcVv79r6RjGigOQvADCkuFJDK7efoQ93p4vPYBbq4yaWpE6LD6dhPf2ttjRVcUF63bp1NHv2bFq1ahUlJyfTihUrRBA+efIkhYaGtrn977//ThMmTKBly5bRNddcQ//73/9EkE5NTaXBgwcrOkhzBS7uARdXaSi3rIYulFTrTqW6y9wDPH+xymB9bC7HmRjtLxbh84lrYSvhWx4AgL3ILa2hD3edp3V7M+lipa5nzXjemisictXF4b38afqgcPJ0dVZHkObAfNlll9Ebb7whfm5sbKTo6Gh68MEHadGiRW1uP2vWLKqsrKRvvvlGf92oUaMoMTFRBHprBmnOOOYymjy3UVPXSDX1fN5AtXyZr6tvoIqaeiqprhOFQ8pq6vTZwx3xcXOmuDBv6h/mQwnR/iI49wvzQU8QAMBKFRl/O1NI3x/OFeWMs0uqW/z+4NIrrDZ6KesuWBqNhlJSUmjx4sX66xwdHWnq1Km0a9cug/fh6xcuXNjiuunTp9PGjRsN3r62tlacJBycpWDdXZ/8eoJ2pxWZfD8PV0exExTPjXJBkXA/3qzCjSL8PSg22EsUzWg9R1pZcWm9MAAAWNaISA8aEcmb6PSmvNIaOphVQvszS+hiRS051FVTWV3LwN1VPj4+HebEyBqkCwsLqaGhgcLCwlpczz+fOHHC4H143trQ7fl6Q3hY/JlnnmlzPffW5XRK1mcHAICuemsemU1no7p2v58099Kb97x5OL2oqIiCgoLMmtHLPXMO/JmZmYpMSLMFOIY4fnj/2Tb8D3etJ90RWYN0cHAwOTk5UV5eXovr+efw8HCD9+HrTbm9m5ubODXn7+9PlsIBGkEax1BOeA/i+MkN70HzkTU92NXVlZKSkmjbtm0terr88+jRow3eh69vfnu2devWdm8PAABgq2Qf7uah6Dlz5tCIESPE2mhegsXZ23PnzhW/5+VZUVFRYm6ZPfTQQzRx4kR65ZVX6Oqrr6a1a9fSvn376O2335b5LwEAALCzIM1LqgoKCmjJkiUi+YuXUm3evFmfHJaRkSEyviVjxowRa6P/8Y9/0BNPPCGKmXBmtzFrpC2Jh9SXLl3aZmgdcAzxHrQN+B/GMVQi2ddJAwAAgGEoWQUAAKBQCNIAAAAKhSANAACgUAjSAAAACoUg3U2//PILXXvttRQZGSkqmLVXQxwM46V1vMEKV93hXc+uv/56sQMaGO/NN9+koUOH6gtIcM2A77//Hoewi1588UXxv/y3v/0Nx9BITz/9tDhmzU8DBgzA8TMDBOlu4jXdvAc274kNpvv555/pgQceoN27d4uiNHV1dXTFFVeI4wrG6dGjhwgsvFkN1wyYMmUKzZw5k44ePYpDaKK9e/fSW2+9Jb70gGkGDRpEOTk5+tPOnTtxCO1hnbStu+qqq8QJuobXxDf3/vvvix41BxzeNxw6xyM5zb3wwguid81ffPiDE4xTUVFBt912G61evZqef/55HDYTOTs7t1ueGboOPWlQFGkr0cDAQLmbYpN4VzmuwscjESiVaxoe0eEqhrxVLpju9OnTYtovNjZWfNnhQlTQfehJg2Jw3XaeBxw7dqzsFeRszeHDh0VQrqmpIW9vb/ryyy8pPj5e7mbZDP5ik5qaKoa7wXTJycliFKx///5iqJu3Bx4/fjwdOXKk012eoGMI0qCongz/U2Muy3T84XjgwAExEvH555+Levg8349A3TneXpb3BOCcCHd39y4cfWg+5cfz+Ry0e/XqRZ999hnNm2fGzZdVCEEaFGHBggX0zTffiGx5ToQC03eUi4uLE5d5ZznuEb722msiCQo6xvkP+fn5NHz48BbTBvxefOONN6i2tlZsqQvG4+2A+/XrR2fOnMFh6yYEaZAVl45/8MEHxfDsjh07qHfv3nhFzDR1wMEFOnf55ZeL6YLmeBc+XkL0+OOPI0B3MQnv7NmzdMcdd+At2E0I0mZ4Mzb/tnju3Dkx7MiJTz179uzuw6tiiJt3Ndu0aZOYu+Kd0Jifnx95eHjI3TybsHjxYjHcyO+38vJycTz5C8+WLVvkbppN4Pdd6xwILy8vCgoKQm6EkR599FGxyoCHuC9cuCB2BOTRh1tvvdUSL5mqIEh3E69LnTx5cov9sRnPCXIiBXSMlwqxSZMmtbj+vffeozvvvBOHzwg8VMv7rnPCDn+54TlBDtDTpk3D8QOryMrKEgH54sWLFBISQuPGjRNLAPkydA+2qgQAAFAorJMGAABQKARpAAAAhUKQBgAAUCgEaQAAAIVCkAYAAFAoBGkAAACFQpAGAABQKARpABvD1cQcHByopKSElComJoZWrFghdzMAbB6CNIDCcTU23sIT2nr66acpMTERhwbsFoI0gApoNBq5mwAAXYAgDaBgXL+c94XmbSd5iJtP58+f12+xOGLECPL09KQxY8bQyZMn2/Qw33nnHbGzmLRPckZGBs2cOZO8vb3J19eXbr75ZsrLy2vxfNdff32LNnAvvnltdd7E47bbbhObUERERNCrr75qsLdfVVVFf/3rX8UGFrz5x9tvv63/Hf8N/LesXbtWtJ3bx5tc8N8q4dr3vOVhcxs3bhT3k37/zDPP0MGDB/XHBvXywd4gSAMoGAfn0aNH0/z588UGGnyKjo4Wv3vyySfplVdeEZu8ODs7i4DYHO/O9sUXX9CGDRvEzmy8fSUH6KKiIhEMt27dSmlpaTRr1iyT2sSbyPz222/01Vdficf49ddfKTU1tc3tuG38JWL//v10//3303333dfiiwR77LHH6JFHHhG34b+Td1LiTRqMwe3m+w4aNEh/bEz9WwCUDrtgASgY72rl6uoqesvh4eHiuhMnTojzF154gSZOnCguL1q0iK6++mqqqanR95p5iPvDDz/U70TEAZX3TebtVKVAz7/nILd371667LLLOm0P96I/+OADsR0m78Ms7VgWGRnZ5rYzZswQwZnxvszc496+fTv1799ff5sFCxbQjTfeqN8RbfPmzfTuu+/S3//+907bwluZ8ogAf0GRjg2AvUFPGsBG8ZaUEh52lratlPDevs23Cjx+/LgIzlKAZvHx8WJImX9nDO5519XV0ciRI1t8kWgeeA21j4eiOZA2bx/j3rOEgy33vI1tC4AaIEgD2CgXFxf9ZWmeloe0JTxnbCpHR0fSarUtruOg3N32SW1s3j5rtgXAViFIAygcD3c3NDR0+3EGDhxImZmZ4iQ5duyYWG/NPWrGPW+e222O57MlsbGxIvjy8LiktLSUTp061aU27d69W3+5vr5eJMNxO6W28PB6ZWWlwbaY89gAKBWCNIDCcWGQP/74Q2REFxYWmtQbbW7q1Kk0ZMgQkZnNiV579uyh2bNni3ltHmZmU6ZMEYloPFd9+vRpWrp0KR05ckT/GJypPWfOHJHwxfPLR48epXnz5oler9SbN8XKlSvpyy+/FPPsDzzwABUXF+sT4JKTk8Vc/BNPPEFnz54V8+Cts7f52PAcOwdvPja1tbVdOjYASoUgDaBwjz76KDk5OYneLvcueRlVV3AQ3bRpEwUEBNCECRNE0Oae8bp16/S3mT59Oj311FMicYsTybgny4G8ueXLl4u55GuuuUY8xtixY0XvV0pYM8WLL74oTgkJCbRz506RMR4cHCx+FxgYSB9//DF999134svFp59+KpaWNcdJZ1deeSVNnjxZHBu+DYA9cdC2nvQBADABD0dHRUWJJVfcqzYGjwrw+m1eeoWKYQDtwxIsADAJB1YenuYMb56PfvbZZ8X1vAYbAMwLQRoATPbyyy+LwiScuJWUlCQKmkjD1ABgPhjuBgAAUCgkjgEAACgUgjQAAIBCIUgDAAAoFII0AACAQiFIAwAAKBSCNAAAgEIhSAMAACgUgjQAAIBCIUgDAACQMv0/KRa6yPvpl0wAAAAASUVORK5CYII=", | |
| "text/plain": [ | |
| "<Figure size 500x500 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "g = sns.displot(summary[summary.n > 0], x=\"throughput\", kind=\"kde\");\n", | |
| "g.set(title=\"Distribution of spill throughput (GB/s)\");" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "a7b7ceae-28bc-42cb-9ceb-1b10e2b5ca84", | |
| "metadata": {}, | |
| "source": [ | |
| "# Which spills are slow?\n", | |
| "\n", | |
| "There's *some* positive relationship between the size of the buffer spilled and the throughput, but it isn't strong. The variance seems to be reduced though." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "id": "0f1c98bb-aad3-4f4c-a764-8b5b400de2ba", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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n3ziEW4yMjJk+/btprvq6aef9vXxAQAAeMVn3VLz58+Xjz76SJYtWyaBjG4pAACCjzef3z5bOLNTp06yatUqXz0cAABAkfgk3Fy6dEleeeUVqVWrli8eDgAAoORqbipUqOBRc6O9Wrr0QtmyZeX9998v+pEAAABYEW5eeumlHKOnqlSpIh07djTBBwAAIKjCzfDhw3325LNnzzaXQ4cOmestW7aUJ598Um688cZcbz9v3rwci3NGRkbK5cuXfXZMAACglIUbdf78eXn77bflxx9/NNdbtGhhQkfFihW9epzatWvLtGnTpEmTJqZ7S4eTDxgwwAwt16CTG62Q3rt3r+t6fnPuAACA0sfrguK1a9eadaS0gFhDjl706wYNGph93rjlllvkpptuMuGmadOm8txzz5k1qzZu3JjnfTTMVK9e3XWpVq2aty8BAADYmNfhZvTo0WZtKV0FXCf008svv/wid955p9lXVDqz8YIFCyQ1NVU6d+6c5+1SUlKkXr16UqdOHdPKs2fPniI/JwAAsB+vJ/GLjo42K4M3a9bMY7t2FbVt29YMC/fGrl27TJjRuhlttdHJALU1JzcbNmyQffv2SUJCgpnE5+9//7tpLdKAo11cuUlLSzMX90mANBixcCYAAMHDr5P4tW/f3lVr4063tWnTxtuHMyFJw9J3330n9913nylY/uGHH3K9rYagYcOGmRDVs2dP02qkI7XmzJmT5+NPnTrVnAznRYMNcl888cDpFNl+5LwcOJNirgMAUCpabnSJhUcffVTGjh1rZiVWWiPz2muvmeLgq666ynVbbWHxVmJiojRq1CjfwOLu9ttvl7CwMPnwww9z3U/LTcGOJ12SCYt3yjf7zrq29WhSWaYNSpCa5aML/b0DACAoVwUfMmSI+V8DTm77tOBX85L+X5QVwrOysjy6kfKjj6/dWnl1YzmHiusFudMWmuzBRq3dd1YeW7xTXh3SjhWjAQBBxetwo4XEvjJx4kQzp03dunXNLMdab/P111/L559/bvZrF5Qu6aBdS2rKlCmmtahx48aSlJQkM2bMkMOHD8uoUaN8dkylzdmU9BzBxj3g6P74shElflwAAJRYuNGRSr5y+vRpE2BOnDhhmpq0G0uDTd++fc3+I0eOmBmQnXTY+d133y0nT540syF36NBB1q9fb+bZQdEkX87Id//FAvYDABD0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g+jXBBv/FnEfOHBAatSoIVaj5cZLOgxcm5L1h+Xaa6811fdaFDhixAj/fIdK8Q+Je/o/ePCg+cWkha5169a19Njs1hU1f/58WbZsmekjP3nypNkeHx8v0dHRVh+erUycONE04+v79+LFi+a8f/311/L5559bfWi2ou/j7DVjMTExUqlSJWrJfOyRRx4x85FpV9Tx48fNFCkaHocMGSJWI9x4afDgwWa47JNPPmk+CHR44WeffZajyBjFo/OA9OrVyyNUKg2WWsAG300sp6677jqP7XPnzpW77rqL0+xD2lUybNgwU3ip4VFrFDTY9O3bl/OMoHTs2DETZM6dOydVqlSRbt26mTmz9GurMc8NAACwFWpuAACArRBuAACArRBuAACArRBuAACArRBuAACArRBuAACArRBuAACArRBuAASkkJAQWbp0qdWHAaCQdP0unbG4Zs2aRf751UU3dXLcsmXLmpmPZ8yYIUVBuAFgW/Xr1zdLpADwP12KqE2bNvLaa68V6f6ffvqpWQPs3nvvld27d8vrr78uL774olnw1FuEGwAAUGy6dtqzzz4rt956a677dZFYXY+qVq1aZr2vjh07mvXVnP7xj3/IwIEDTbhp2LCh9O/f36zJNn36dLPIrzcINwAsoetZPfDAA/Loo4+aBVGrV68ukydP9riNrsOkvzB1EU/9Zbdo0SLXvt69e5sVzd3pum8RERGyatUq8/iHDx+WBx980DSR68Vp3bp10r17d/O4derUMcehf3U66V+MTZo0kaioKLNu3B/+8Ae/ngugNBgzZoxs2LBBFixYIDt37pTbb79dbrjhBtm3b58r/OjPnDv9GdU1rPRn2SsOALBAz549HXFxcY7Jkyc7fv75Z8e7777rCAkJcXzxxRdmv/56qlSpkuOtt95y7N271/H44487QkNDHT/88IPZ/8EHHzgqVKjguHz5susxX3jhBUf9+vUdWVlZjnPnzjlq167tmDJliuPEiRPmovbv3++IiYlxvPjii+Z5v/32W0e7du0cd911l9m/efNm8zzz5893HDp0yLFt2zbHyy+/zHsE8IL+/C5ZssR1/fDhw+bn6tdff/W4XZ8+fRwTJ040X8+ZM8dRtmxZx5dffunIzMw0P/fNmzc3j7V+/Xpvnt5BuAFgWbjp1q2bx7ZrrrnGMWHCBPO1/kK79957PfZ37NjRcd9995mvL126ZMLNRx995NqfkJBgwpJTvXr1TIhxN3LkSMc999zjse2bb75xlClTxjzm4sWLTehKTk724asFSne4Wb58udmmf1i4X8LCwhx33HGHuY3+UfLoo486oqKiTBDSn2/9edb7bdy40avnD/NlkxMAeCMhIcHjeo0aNeT06dOu6507d/bYr9d37Nhhvtbm6z/96U/yzjvvyB133CHbtm0zRYj//Oc/833O77//3jSJf/DBB65t+rs4KytLDh48KH379jWjNLQbTJvM9aI1BDp6A0DRpKSkSGhoqGzdutX87y42Ntb8r13HWl/z/PPPy8mTJ6VKlSqmi1npz6M3CDcALBMeHu5xXX+5acgorFGjRplho9onP3fuXFOHo8GkoF+yf/nLX0ydTXZ169Y1NTsalLTQ8YsvvpAnn3zS1AJt3rxZypcv78WrA+DUrl07yczMNH+8aL1bfjT8aNGx+vDDD80fNRp0vEG4ARCwNm7cKMOGDfO4rr8knVq3bi1XX321vPXWWzJ//vwcQ0Y1qOgvVHft27eXH374QRo3bpzn84aFhUliYqK5PPXUUybUrF69Wm677Tafvj7ATlJSUmT//v2u69oSqi2tOmCgadOmZpi3/jzPnDnT/BzrAABtmdEWXB0ZdfbsWTNoQAcDXL582fzBsnDhQlmzZo3Xx0K4ARCw9Bebhpdu3bqZbqRNmzbJ22+/naP1Rkdh6NDS7ENQdZ4bnVjszjvvlMjISKlcubJMmDBBOnXqZO6j99X7adhZuXKlCUfLly+XX375RXr06CEVKlSQFStWmNakZs2alfCrB4LLli1bpFevXq7rDz30kPl/+PDhMm/ePBNWdKj4ww8/LL/++qv5edSfxZtvvtl1n3fffdcMF9euYm2x0RbUa6+91vuD8XkVEQAUsqB43LhxHtsGDBjgGD58uPlafz299tprjr59+zoiIyPNKCj34mGnixcvmhEW999/f459GzZsMEXGen/3X3ebNm0yjxsbG2uKGvU2zz33nKu4WI9Nixmjo6PNvtyeF0DgCtF/fJPZAKDkHTp0SBo1amRqYrTLCQAINwCCUkZGhpw7d840YWvf/rfffmv1IQEIEMxQDCAoaZjRoePaYvPGG29YfTgAAggtNwAAwFZouQEAALZCuAEAALZCuAEAALZCuAEAALZCuAEAALZCuAEAALZCuAEAALZCuAEAALZCuAEAAGIn/w/GLVc02DIYmQAAAABJRU5ErkJggg==", | |
| "text/plain": [ | |
| "<Figure size 640x480 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "ax = sns.scatterplot(\n", | |
| " summary[summary.n > 0],\n", | |
| " x=\"nbytes\",\n", | |
| " y=\"throughput\"\n", | |
| ")\n", | |
| "ax.set(title=\"throughput ~ nbytes\");" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "77d1cfd5-002d-41aa-8605-0b07e7ecfce0", | |
| "metadata": {}, | |
| "source": [ | |
| "Naively, the more buffers required to meet a spill target the lower the throughput? Not much of a relationship." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "id": "d4c389ff-fdb7-46b3-b8a4-1ff5fdb51ada", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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CDcAAMBWCDcAAMBWCDe18Je//EXOOOMMSUhIkAsvvFA+//xz/18Z+Cw7O1vOP/98M/t08+bNZfjw4bJz5063fU6fPi3jxo2Tpk2bSnJysowYMUIOHz7M2Q4R06dPNzOHT5w40VnGNQstP/74o/z61782/4YSExOlR48esmHDBud2HaPyyCOPSMuWLc32wYMHy65du4J6zJGsrKxMpk6dKpmZmeZ6nHXWWfLEE0+4rc9ky2umo6VQcwsXLrTi4uKsuXPnWjt27LBuu+02Ky0tzTp8+DCnMciGDBlizZs3z9q+fbu1ZcsW68orr7TatWtnFRYWOve54447rLZt21orV660NmzYYPXp08fq169fUI8b/9/nn39unXHGGVZWVpY1YcIE52nhmoWOn376yWrfvr110003WevXr7e+++476/3337d2797t3Gf69OlWamqqtXTpUuvLL7+0rr76aiszM9M6depUUI89Uj311FNW06ZNreXLl1t79+61Fi1aZCUnJ1t//vOfbX3NCDc+uuCCC6xx48Y5n5eVlVmtWrWysrOz/X1tUEdHjhzRP02s1atXm+d5eXlWbGys+cft8PXXX5t91q1bx/kOohMnTlgdO3a0VqxYYQ0cONAZbrhmoWXSpEnWRRddVOn28vJyKyMjw5o5c6azTK9hfHy89frrr9fTUcLVsGHDrJtvvtmt7LrrrrNGjRpl62tGs5QPSkpKZOPGjabKznWtKn2+bt26QFSsoQ7y8/PN1yZNmpiveu1KS0vdrl/nzp2lXbt2XL8g06bCYcOGuV0bxTULLe+8846cd955cv3115um3169eslLL73k3L537145dOiQ23XUtYC0+Z7/RwZHv379ZOXKlfLtt9+a519++aV88sknMnToUFtfs4hbOLMucnNzTftlixYt3Mr1+TfffBO044L31d+130b//v2le/fupkz/AcfFxUlaWlqF66fbEBwLFy6UTZs2yRdffFFhG9cstHz33XcyZ84cue+++2TKlCnmmt1zzz3m39WYMWOc/468/T+Sf2PB8eCDD5rVv/UPuejoaHMPe+qpp2TUqFFmu12vGeEGtq0J2L59u/kLBaFr3759MmHCBFmxYoXpoI/Qpn80aM3N008/bZ5rzY3+O3v++edNuEHoefPNN+W1116TBQsWSLdu3WTLli3mD79WrVrZ+prRLOWD9PR0k3w9R9fo84yMDH9fG9TS+PHjZfny5fLhhx9KmzZtnOV6jbRpMS8vz21/rl/waLPTkSNH5Nxzz5WYmBjzWL16tTz77LPme/3rkWsWOnQ0TdeuXd3KunTpIjk5OeZ7x/8H+X9k6Pjd735nam9uvPFGM7Ltf/7nf+Tee+81o0vtfM0INz7QqtfevXub9kvXv2T0ed++fQNxfeAD7SCvwWbJkiWyatUqM/TRlV672NhYt+unQ8X1f8xcv+AYNGiQbNu2zfw16XhozYBWmTu+55qFDm3m9ZxeQftytG/f3nyv/+b0huj6b0ybRNavX8+/sSA5efKk6RvqSv9I13uXra9ZsHs0h+NQcO1F/vLLL1tfffWVdfvtt5uh4IcOHQr2oUW8O++80wxn/Oijj6yDBw86HydPnnQbVqzDw1etWmWGgvft29c8EDpcR0sprlloDdePiYkxw4t37dplvfbaa1bDhg2t+fPnuw0r1v8nLlu2zNq6dat1zTXXhP2w4nA2ZswYq3Xr1s6h4G+//baVnp5uPfDAA7a+ZoSbWpg9e7a5Qep8Nzo0/LPPPvP/lYHPNKt7e+jcNw76j/Wuu+6yGjdubP6nfO2115oAhNANN1yz0PKPf/zD6t69u/kjr3PnztaLL77otl2HFk+dOtVq0aKF2WfQoEHWzp07g3a8ka6goMD8e9J7VkJCgnXmmWdaDz30kFVcXGzraxal/wl27REAAIC/0OcGAADYCuEGAADYCuEGAADYCuEGAADYCuEGAADYCuEGAADYCuEGAADYCuEGAADYCuEGAADYCuEGAADYSkywDwAA6uqSSy6RrKwsSUhIkL/97W8SFxcnd9xxhzz22GOcXCACUXMDwBZeeeUVSUpKkvXr18vvf/97mTZtmqxYsSLYhwUgCFg4E4Atam7Kysrk448/dpZdcMEFctlll8n06dODemwA6h81NwBsQZulXLVs2VKOHDkStOMBEDyEGwC2EBsb6/Y8KipKysvLg3Y8AIKHcAMAAGyFcAMAAGyFcAMAAGyF0VIAAMBWqLkBAAC2QrgBAAC2QrgBAAC2QrgBAAC2QrgBAAC2QrgBAAC2QrgBAAC2QrgBAAC2QrgBAAC2QrgBAAC2QrgBAAC2QrgBAABiJ/8PILpXfI17J6YAAAAASUVORK5CYII=", | |
| "text/plain": [ | |
| "<Figure size 640x480 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "ax = sns.scatterplot(\n", | |
| " summary[summary.n > 0],\n", | |
| " x=\"n\",\n", | |
| " y=\"throughput\"\n", | |
| ")\n", | |
| "ax.set(title=\"throughput ~ count\");" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3 (ipykernel)", | |
| "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.18" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 5 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment