Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
{
"cells": [
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"from pylab import plot, Infinity, figure, xlabel, ylabel, show\n",
"import matplotlib.pyplot as plt\n",
"\n",
"import numpy as np\n",
"\n",
"import random"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Skip List\n",
"See http://blog.jnbrymn.com/2018/09/16/build-your-own-skip-list/ for details"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {},
"outputs": [],
"source": [
"import random\n",
"\n",
"class Node():\n",
" def __init__(self, value = None):\n",
" self.left = None\n",
" self.right = None\n",
" self.down = None\n",
" self.up = None\n",
" self.value = value\n",
" \n",
" def __repr__(self):\n",
" return '({})'.format(repr(self.value))\n",
" \n",
" def __lt__(self, value):\n",
" if self.down:\n",
" return self.down < value\n",
" else:\n",
" return self.value < value\n",
" \n",
"class StartNode(Node):\n",
" def __lt__(self, value):\n",
" return True\n",
" \n",
" def __repr__(self):\n",
" return '(S)'\n",
"\n",
"class EndNode(Node):\n",
" def __lt__(self, value):\n",
" return False\n",
"\n",
" def __repr__(self):\n",
" return '(E)'\n",
" \n",
"class SkipList():\n",
" def __init__(self, up_prob=0.5, verbose=False):\n",
" \"\"\"Skip list implementation\n",
" \n",
" up_prob = probability that we extend upwards\n",
" \"\"\"\n",
" self.up_prob = up_prob\n",
" self.verbose = verbose\n",
"\n",
" head = StartNode()\n",
" end = EndNode()\n",
" \n",
" head.right = end\n",
" end.left = head\n",
" \n",
" self.head = head\n",
" \n",
" self.index = 1\n",
" \n",
" def add(self, value):\n",
" if self.verbose:\n",
" messages = []\n",
" messages.append('adding {}'.format(value))\n",
" # find node to the left of value\n",
" skip_nodes = [] # the list of skip nodes above the final node\n",
" node = self.head\n",
" while True:\n",
" if node.right and node.right < value:\n",
" if self.verbose:\n",
" messages.append('\\ttraverse right')\n",
" node = node.right\n",
" elif node.down:\n",
" if self.verbose:\n",
" messages.append('\\ttraverse down')\n",
" skip_nodes.append(node)\n",
" node = node.down\n",
" else:\n",
" if self.verbose:\n",
" messages.append(\n",
" '\\tadding {} after {}'.format(\n",
" value, node\n",
" )\n",
" )\n",
" break\n",
" \n",
" # insert new node\n",
" new_node = Node(value)\n",
" \n",
" right = node.right\n",
" new_node.right = right\n",
" if right:\n",
" right.left = new_node\n",
" \n",
" left = node\n",
" new_node.left = left\n",
" left.right = new_node\n",
" \n",
" # project upward\n",
" low_node = new_node\n",
" while True:\n",
" if random.random() > self.up_prob:\n",
" # extend upwards\n",
" projection_node = Node('s' + str(self.index))\n",
" self.index += 1\n",
" low_node.up = projection_node\n",
" projection_node.down = low_node\n",
" \n",
" if skip_nodes:\n",
" left_node = skip_nodes.pop()\n",
" right_node = left_node.right\n",
" if self.verbose:\n",
" messages.append(\n",
" '\\tplacing projection_node {} between left_node {} and right_node {}'.format(\n",
" projection_node, left_node, right_node or 'NONE'\n",
" )\n",
" )\n",
" left_node.right = projection_node\n",
" projection_node.left = left_node\n",
" projection_node.right = right_node\n",
" if right_node:\n",
" right_node.left = projection_node\n",
" else:\n",
" # we are projecting higher than the head node, so make a new head and a new lane\n",
" new_head = Node('s' + str(self.index))\n",
" self.index += 1\n",
" if self.verbose:\n",
" messages.append(\n",
" '\\tpointing new_head {} to new projection_node {}'.format(\n",
" new_head, projection_node\n",
" )\n",
" )\n",
" projection_node.left = new_head\n",
" new_head.right = projection_node\n",
" new_head.down = self.head\n",
" self.head.up = new_head\n",
" self.head = new_head\n",
" break\n",
" low_node = projection_node\n",
" else:\n",
" break\n",
" \n",
" if self.verbose:\n",
" messages.append('')\n",
" print('\\n'.join(messages))\n",
" \n",
" return new_node\n",
" \n",
" def pop(self, node=None):\n",
" if not node:\n",
" node = self.head\n",
" while node.down:\n",
" node = node.down\n",
" node = node.right\n",
" original_node = node\n",
" \n",
" if self.verbose:\n",
" messages = []\n",
" messages.append('popping node {}'.format(node))\n",
" while True:\n",
" left = node.left\n",
" right = node.right\n",
" if self.verbose:\n",
" messages.append(\n",
" '\\tconnecting {} to {}'.format(\n",
" left, right\n",
" )\n",
" )\n",
"\n",
" if left:\n",
" left.right = right\n",
" if right:\n",
" right.left = left\n",
" \n",
" node.left = None\n",
" node.right = None\n",
" node.down = None\n",
" if node.up:\n",
" old_node = node\n",
" node = node.up\n",
" old_node.up = None\n",
" else:\n",
" break\n",
" \n",
" while True:\n",
" if left is self.head and left.right is None:\n",
" if self.verbose:\n",
" messages.append(\n",
" '\\tremoving head {} so that {} is the new head'.format(\n",
" self.head, self.head.down\n",
" )\n",
" )\n",
" left = self.head = left.down\n",
" else:\n",
" break\n",
" \n",
" if self.verbose:\n",
" print('\\n'.join(messages))\n",
" \n",
" return original_node\n",
" \n",
" def __iter__(self):\n",
" node = self.head\n",
" while node.down:\n",
" node = node.down\n",
" \n",
" node = node.right # skip start node\n",
" while node.right:\n",
" yield node\n",
" node = node.right"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# DistributionSketch"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [],
"source": [
"class Value():\n",
" \"\"\"Holds an individual value drawn from the distribution along with a minimum (low) and maximum (high) count \n",
" for the number of times that value \n",
" \"\"\"\n",
" def __init__(self, value):\n",
" self.value = value\n",
" self.high = 1\n",
" self.low = 1\n",
"\n",
" self.weight = None\n",
"\n",
" def __lt__(self, group):\n",
" return self.value < group.value\n",
"\n",
" def __repr__(self):\n",
" return 'v:{} h:{} l:{}'.format(self.value, self.high, self.low)\n",
"\n",
"\n",
"class Weight():\n",
" \"\"\"Holds information about how much \"impact\" this point has in the sketch in terms of how much additional\n",
" area would be added to the cumulative bounds if this point was removed.\n",
" \"\"\"\n",
" def __init__(self, value_node, weight_skip_list):\n",
" self.weight = self.get_weight(value_node)\n",
" self.weight_node = weight_skip_list.add(self)\n",
" value_node.value.weight = self\n",
" self.value_node = value_node\n",
"\n",
" def __lt__(self, weight):\n",
" return self.weight < weight.weight\n",
"\n",
" def __repr__(self):\n",
" return str(self.weight)\n",
"\n",
" @staticmethod\n",
" def get_weight(value_node):\n",
" \"\"\"pulls neighboring values from this value_node, creates a weight\n",
" \"\"\"\n",
" left_value = value_node.left.value\n",
" center_value = value_node.value\n",
" right_value = value_node.right.value\n",
"\n",
" left_weight = center_value.high * (center_value.value - left_value.value)\n",
" right_weight = center_value.low * (right_value.value - center_value.value)\n",
" weight = left_weight + right_weight\n",
"\n",
" return weight\n",
"\n",
"\n",
"class DistributionSketch():\n",
" def __init__(self, num_values, increase_num_values_at_extrema=False):\n",
" self.value_skip_list = SkipList()\n",
" self.value_skip_list.head.value = Value(-float('infinity'))\n",
" self.value_skip_list.head.right.value = Value(float('infinity'))\n",
"\n",
" self.value_count = 0\n",
" self.num_values = num_values\n",
" self.increase_num_values_at_extrema = increase_num_values_at_extrema\n",
"\n",
" self.weight_skip_list = SkipList()\n",
"\n",
" def add_value(self, value):\n",
" # add new value to value_skip_list\n",
" value = Value(value)\n",
" value_node = self.value_skip_list.add(value)\n",
" extrema_found = False\n",
" if (\n",
" (isinstance(value_node.left, StartNode) or isinstance(value_node.right, EndNode))\n",
" and self.increase_num_values_at_extrema\n",
" ):\n",
" extrema_found = True\n",
" \n",
" Weight(value_node, self.weight_skip_list)\n",
"\n",
" # the weights associated with the node to the left and right is now invalid\n",
" # drop them and create a new ones\n",
" left_value_node = value_node.left\n",
" right_value_node = value_node.right\n",
" self.recalculate_weight(left_value_node)\n",
" self.recalculate_weight(right_value_node)\n",
"\n",
" if self.value_count >= self.num_values and not extrema_found:\n",
" # then we have exceeded the list size and we need to start deleting values\n",
" weight_node = self.weight_skip_list.pop() # this is the smallest weight\n",
" value_node = weight_node.value.value_node\n",
"\n",
" # distribute the value's high to the left value\n",
" # and distribute the value's low to the right value\n",
" left_value_node = value_node.left\n",
" right_value_node = value_node.right\n",
"\n",
" left_value_node.value.high += value_node.value.high\n",
" right_value_node.value.low += value_node.value.low\n",
"\n",
" # delete the value_node\n",
" self.value_skip_list.pop(value_node)\n",
"\n",
" # the left and right values now have invalid weights since the neighbors changed\n",
" # so drop them and recreate them\n",
" self.recalculate_weight(left_value_node)\n",
" self.recalculate_weight(right_value_node)\n",
"\n",
" self.value_count += 1\n",
"\n",
" def recalculate_weight(self, value_node):\n",
" if not value_node.value.weight:\n",
" # the StartNode and the EndNode don't have are created with dummy values that don't have weights\n",
" return\n",
"\n",
" weight = value_node.value.weight\n",
" self.weight_skip_list.pop(weight.weight_node)\n",
"\n",
" Weight(value_node, self.weight_skip_list)\n",
" \n",
" def get_bounds(self):\n",
" values, lows, highs = list(zip(*[\n",
" (v.value.value, v.value.low, v.value.high) \n",
" for v in self.value_skip_list\n",
" ]))\n",
" \n",
" values = list(values)\n",
" \n",
" low_bounds = []\n",
" cumulation = 0\n",
" for low in lows:\n",
" cumulation += low\n",
" low_bounds.append(cumulation)\n",
" \n",
" high_bounds = []\n",
" cumulation = 0\n",
" for high in highs:\n",
" cumulation += high\n",
" high_bounds.append(cumulation)\n",
" \n",
" return np.array(values), np.array(low_bounds), np.array(high_bounds)\n",
" \n",
" def get_estimated_percentile_for_array_of_values(self, evaluation_values):\n",
" values, low_bounds, high_bounds = self.get_bounds()\n",
" sketch_percentiles = np.interp(evaluation_values, values, low_bounds/low_bounds[-1])\n",
" return sketch_percentiles\n",
" \n",
" def get_estimated_value_for_array_of_percentiles(self, percentile_values):\n",
" values, low_bounds, high_bounds = self.get_bounds()\n",
" sketch_values = np.interp(percentile_values, low_bounds/low_bounds[-1], values)\n",
" return sketch_values"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Use the distro sketch"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x1a2ae2e550>"
]
},
"execution_count": 95,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAD8CAYAAACcjGjIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3XmUFOXZxuHfwyKgaERAZGc0uIAoy4gom2BEFCNq1IALqMgMyCAoEjEaQBCDioAoID2sGhVwiyRxQ1yIiSiDIipqQCQwQlgNYAQUeL4/uvBrmRlmn+qeua9z+nT3229V3V3Tp5+pt6qrzN0RERGJVS7sACIiEn9UHEREJAsVBxERyULFQUREslBxEBGRLFQcREQkCxUHERHJQsVBRESyUHEQEZEsKoQdoKBq1KjhjRo1CjuGiEhCWbZs2VZ3r5lbv4QtDo0aNSIjIyPsGCIiCcXM/p2XfhpWEhGRLFQcREQkCxUHERHJImH3OWTnxx9/JDMzkz179oQdpUyoXLky9erVo2LFimFHEZEiVqqKQ2ZmJkcffTSNGjXCzMKOU6q5O9u2bSMzM5OkpKSw44hIEct1WMnM6pvZW2b2uZl9ZmaDgvbjzGyhma0K7qsF7WZmk8xstZmtMLOWMfPqHfRfZWa9Y9pbmdknwTSTrIDf7Hv27KF69eoqDCXAzKhevbq20kRKqbzsc9gHDHH304A2wAAzawIMAxa5e2NgUfAc4CKgcXBLAaZCtJgAI4CzgdbAiIMFJeiTEjNd14K+IRWGkqN1LVJ65Voc3H2ju38YPN4FfA7UBboDc4Juc4DLgsfdgSc8aglwrJnVBi4EFrr7dnf/FlgIdA1eO8bd3/PoNUufiJmXiIgE0s/rSe9TImzZUvzLytfRSmbWCGgBvA/UcveNEC0gwPFBt7rA+pjJMoO2w7VnZtOe3fJTzCzDzDK2lMTaKYCqVasW6fxGjhzJuHHjinSeuWnUqBFbt24t0WWKyOHteGQW094ZwrxV11OuBI4zzfMizKwq8Dww2N13Hq5rNm1egPasje4Rd0929+SaNXP99beISKnw3aSZXDz4ZD6iBVd3HEr16sW/zDwVBzOrSLQwPOXuLwTNm4IhIYL7zUF7JlA/ZvJ6wIZc2utl057Q3J2hQ4dy+umn06xZM+bNmwfALbfcwoIFCwC4/PLLuemmmwCYMWMG99xzT7bz+vjjj+ncuTONGzcmPT39sPN/++23ueSSS36aNi0tjdmzZwPRLYIRI0bQsmVLmjVrxhdffAHAtm3b6NKlCy1atCA1NZXo6J6IxAOfFuHKQXX4J205r8W1tBt3RoksN9dDWYMjh2YAn7v7+JiXFgC9gbHB/Usx7WlmNpfozucd7r7RzF4D7o/ZCd0FuMvdt5vZLjNrQ3S4qhfwaGHf2OBXB7P8P8sLO5ufaX5CcyZ2nZinvi+88ALLly/n448/ZuvWrZx11ll06NCBDh068Pe//51LL72Ub775ho0bNwLw7rvv0qNHj2zntWLFCpYsWcL//vc/WrRoQbdu3XjvvfeynX9uatSowYcffsiUKVMYN24c06dP595776Vdu3YMHz6cv/3tb0QikbyvFBEpNj4tQlq/H3mNrrRpchu/Te9MSquUEll2XrYc2gLXA53NbHlwu5hoUbjAzFYBFwTPAV4G1gCrgXTgFgB33w6MBpYGt1FBG0B/YHowzVfAK0Xw3kL17rvv0rNnT8qXL0+tWrXo2LEjS5cupX379vz9739n5cqVNGnShFq1arFx40bee+89zj333Gzn1b17d6pUqUKNGjXo1KkTH3zwQY7zz80VV1wBQKtWrVi7di0Aixcv5rrrrgOgW7duVKtWLafJRaSEuEPfP1RiCgNo2mgSN8w5rcQKA+Rhy8Hd3yX7/QIA52fT34EBOcxrJjAzm/YM4PTcsuRHXv/DLy45Dc3UrVuXb7/9lldffZUOHTqwfft25s+fT9WqVTn66KOZPHnyT0NHL7/8MpD1kFEzy3H+FSpU4MCBAz89P/R3CJUqVQKgfPny7Nu372fzFJE4EYnw4H2ZzNgyikuqTuOSZyuTmlxyhQF0bqVi06FDB+bNm8f+/fvZsmULixcvpnXr1gCcc845TJw4kQ4dOtC+fXvGjRtH+/btARgwYADLly9n+fLl1KlTB4CXXnqJPXv2sG3bNt5+++2fhpCym3/Dhg1ZuXIle/fuZceOHSxatChPWZ966ikAXnnlFb799ttiWisikhczH1jO79ePILny69ye9m6JFwYoZafPiCeXX3457733HmeeeSZmxoMPPsgJJ5wAQPv27Xn99df55S9/ScOGDdm+fftPxSE7rVu3plu3bqxbt44//OEP1KlT57Dzv/rqqznjjDNo3LgxLVq0yDXriBEj6NmzJy1btqRjx440aNCgaFaCiOTb1BtGcMeah0iq+AnXv55Jp/ZPhpLDEvXIlOTkZD/0Yj+ff/45p512WkiJyiatc5Gi89nIZ+l0b0eOZhcPDZzAFZMeK/JlmNkyd0/OrZ+GlURE4sD8tEH86t52AFx5Wf9iKQz5oeIgIhKyrePnMHxyf76jKtf9ug8n3XNl2JG0z0FEJEzfTZpJlyHNWUsjbujSl/EL/hJ2JEBbDiIioXltaB8uG9SAjzmTjmddRcv7cz4wpaRpy0FEJAR7J09nwrireItOXHnu3Zw/6dcl+iO33Kg4iIiUMJ8W4ca0qrxGV65o8wfm/WNs7hOVMA0rFbG1a9dy+ulZf+w9fPhw3njjjcNOm9fTc+s03iIJLBLhrn7beYZraNl4JBc+Vj/3aUKgLYcSMmrUqLAjiEjYIhEmpH7OA0zg5PozSHm6TlwNJcXSlkMx2L9/P3379qVp06Z06dKF3bt3c8MNN/Dcc88B0XMmnXrqqbRr145bb731Z6fYXrlyJeeddx4nnngikyZNynEZOo23SIKJRHgm9S1uZwKNTniewc8eCOW0GHlVerccBg+G5UV7ym6aN4eJuZ/Qb9WqVTzzzDOkp6dz9dVX8/zzz//02p49e0hNTWXx4sUkJSXRs2fPn037xRdf8NZbb7Fr1y5OOeUU+vfvT8WKFbMsQ6fxFkksLz38Jjcxi1rV/sEdL3xL/7P7hh3psLTlUAySkpJo3rw58PNTY0P0y//EE08kKSkJIEtx6NatG5UqVaJGjRocf/zxbNq0Kdtl6DTeIonjuYG3cuO/pvCL8pu5Y95XDDjn5rAj5ar0bjnk4T/84nLwtNgQPTX27t27f3qe2/DModPu27dPp/EWSWDP3zqQ+x7rw14q8ejN93PtBSV7MElB5brlYGYzzWyzmX0a0zYv5sI/a81sedDeyMx2x7z2eMw0rczsEzNbbWaTgivMYWbHmdlCM1sV3Jfqf1FPPfVU1qxZ89N/6Af3CxyOTuMtkpieG3grgx69k1U0ZsRvJ3Pt44lRGCBvWw6zgceAJw42uPtvDz42s4eBHTH9v3L35tnMZyqQAiwherW4rkSv+DYMWOTuY81sWPD8zvy9jcRRpUoVpkyZQteuXalRo8ZP13jIL53GWyS+7XxkFvc+1pdtVGfSjWPoO/O+sCPlj7vnegMaAZ9m027AeqBxLv1qA1/EPO8JTAsefwnUjun3ZV4ytWrVyg+1cuXKLG3xaNeuXe7ufuDAAe/fv7+PHz8+5EQFlyjrXKQk/TAl4l141cvzo9/8qxvCjvMzQIbn4Tu2sDuk2wOb3H1VTFuSmX1kZu+Y2cEThdQFMmP6ZAZtALXcfWNQqDYCxxcyU9xLT0+nefPmNG3alB07dpCamhp2JBEpKpEIg2/5gde5kHOa3cJZY88JO1GBFHaHdE/gmZjnG4EG7r7NzFoBfzazpmR/Dep8HzhvZilEh6YSepjjtttu47bbbgs7hogUg/Fj1jKF+2l24sNcPys5bn/klpsCbzmYWQXgCuCnParuvtfdtwWPlwFfAScT3VKoFzN5PWBD8HiTmdUO5lkb2JzTMt094u7J7p5cs2bNnPoU9C1JPmldi8SIRHi6cR9+t24ULSq9Sf+nj0nYwgCF+53Dr4juR/hpuMjMappZ+eDxiUBjYE0wXLTLzNoERyn1Al4KJlsA9A4e945pz7fKlSuzbds2fWmVAHdn27ZtVK5cOewoInHh+XGL6bP6MRpW/IzRA+bG/Y/ccpPrsJKZPQOcB9Qws0xghLvPAHrw8yElgA7AKDPbB+wH+rn79uC1/kSPfKpC9CilV4L2scB8M+sDrAOuKuibqVevHpmZmWzZsqWgs5B8qFy5MvXq1cu9o0gpN7vvMAaumspxFTbQ7y8r6HZh4p9RwBL1v+zk5GTPyMgIO4aIlHHrxj5F67vOB+CxtPu58tGcz4kWD8xsmbsn59ZPp88QESmgJ1OH0uGutvyPo7ju0j5xXxjyo/SePkNEpBjN7juModN/h2PcePGNnDy8e9iRipSKg4hIPr1waxr3Th9CRX5kXL+HuWbqc2FHKnIaVhIRyYfdj81g7KO92EQtRtzwONdMfTjsSMVCWw4iInm0b2o63Qc2ZCmtua7jraTOKj37GA6lLQcRkTz6wx+PZCFdaNcshfYPZ71WfGmi4iAikptIhDH1RzF2/bVcVHU25W77V0L/+jkvNKwkIpKLSfev5p7MB2ld+RU6XPYQx50xKOxIxU7FQUTkMKb3uYeh/x7NmZXe5rqFGxnY7rOwI5UIFQcRkRysG/sUI2f2oyZbGJk6n8vaTQk7UolRcRARycZ/J87m4ruS2cEv6Pvra7nskQVhRypR2iEtInKIH6ZMp+ttp/IvTqb92b/h1BGXhB2pxGnLQUQkhk+LcPuAH3ifNnRq0ZPLJl9Z6o9Myo62HEREAj4twq399jKZNJo2eoQe6Z3KZGEAFQcRkahIhLH9vuYxBnJ60gQGPlulzBYGUHEQEYFIhPtT1/J7/khS7fmkzT+K1OSyWxggD8XBzGaa2WYz+zSmbaSZfWNmy4PbxTGv3WVmq83sSzO7MKa9a9C22syGxbQnmdn7ZrbKzOaZ2RFF+QZFRA4rEmFi6kru5n5OqvMUQ57fWeYLA+Rty2E20DWb9gnu3jy4vQxgZk2IXj60aTDNFDMrH1xXejJwEdAE6Bn0BXggmFdj4FugT2HekIhInkUijE/9gtuYSMNaLzLkhe8ZcM7NYaeKC7kWB3dfDGzPrV+gOzDX3fe6+9fAaqB1cFvt7mvc/QdgLtDdzAzoDBw8Gfoc4LJ8vgcRkQIZPXozQxhPw1ovMvTFbfQ/u2/YkeJGYfY5pJnZimDYqVrQVhdYH9MnM2jLqb068F9333dIu4hIsRp5+aMMz7yHc6u8xO/+vE1bDIcoaHGYCpwENAc2AgevdmHZ9PUCtGfLzFLMLMPMMrZs2ZK/xCIigft+M5Exf+5HW95lRNpL3NJGheFQBSoO7r7J3fe7+wEgneiwEUT/868f07UesOEw7VuBY82swiHtOS034u7J7p5cs2bNgkQXkbIsEiH9xIEMf+FWWrGMu25/gi4Pzgw7VVwqUHEws9oxTy8HDh7JtADoYWaVzCwJaAx8ACwFGgdHJh1BdKf1And34C3gymD63sBLBckkIpKbpx78gIFfP8QpRyxl1NAI3R6OhB0pbuV6+gwzewY4D6hhZpnACOA8M2tOdAhoLZAK4O6fmdl8YCWwDxjg7vuD+aQBrwHlgZnufvC8t3cCc83sPuAjYEaRvTsRkcCU3vdyx1eTOKHiGm7+25d0+ZW2GA7Hov+8J57k5GTPyMgIO4aIJIBpNw7nd7OHcDybeejWCVz2SNk59fahzGyZuyfn1k+/kBaRUm3TuCcZM/tmjmM7f0x7tEwXhvxQcRCRUuv5WwfSaWgrtlKDS7vdwZWPTgo7UsJQcRCRUmnP5Bk88Oj1rKMBvbr0o+m9F+Y+kfxE13MQkVLHp0UYnHaApbSm13kDePy1J8KOlHC05SAipc69o7cyjX6cnjSBtuPODDtOQtKWg4iUHpEIw0dtZ/Q3v+fcKgu4fm5VUlrpfEkFoeIgIqXGmNH/YfQ3w2lb5c+MuvVFOreeE3akhKXiICIJz6dFGHf/Ou7JvI82Vf5Kj4Xb6NxWhaEwVBxEJLFFIvy+3zbGch/JlV/n3rQX6NJWv34uLBUHEUlYPi3CwH4/MJm7OLn+DG569gBdzlZhKAo6WklEEtagEfuZTBqnJ03ktucO6GI9RUhbDiKSeIKjkh7dNIyuR83isvlHkpqswlCUVBxEJLFEIqSnLmU06bQ/8nmGDnyLzsn6kVtRU3EQkYQy96F/cgvp1K2xkJ5/3U7ns1UYioOKg4gkjHkDBnPL6vHUqbCawfM2aB9DMdIOaRFJCFsefoJhUwbhGGP6zOS2zr3DjlSq5VoczGymmW02s09j2h4ysy/MbIWZvWhmxwbtjcxst5ktD26Px0zTysw+MbPVZjbJzCxoP87MFprZquC+WnG8URFJXH+7PYVf33Ey/+EErr+4L9c9/lDYkUq9vGw5zAa6HtK2EDjd3c8A/gXcFfPaV+7ePLj1i2mfCqQQva5045h5DgMWuXtjYFHwXEQEgO8mzWTkhL58RAuuPu8OTh/VJexIZUKuxcHdFwPbD2l73d33BU+XAPUONw8zqw0c4+7vefS6pE8AlwUvdwcO/s59Tky7iJRxrw3tw5WD6rCMVvTsNJg5b00mpVVK2LHKhKLY53AT8ErM8yQz+8jM3jGz9kFbXSAzpk9m0AZQy903AgT3x+e0IDNLMbMMM8vYsmVLEUQXkXi1+7EZPDjuGhZyAZe3Gcm5D7UIO1KZUqijlczsbmAf8FTQtBFo4O7bzKwV8GczawpYNpN7fpfn7hEgApCcnJzv6UUkMfi0CL0GVuNNzufqtncy790Hwo5U5hR4y8HMegOXANcGQ0W4+1533xY8XgZ8BZxMdEshduipHrAheLwpGHY6OPy0uaCZRKQUiES4r996nuMqkk/5Pec/clLYicqkAhUHM+sK3Alc6u7fx7TXNLPyweMTie54XhMMF+0yszbBUUq9gJeCyRYAB49J6x3TLiJl0MwHljOc0ZxU52lu/lMj7WMISa7DSmb2DHAeUMPMMoERRI9OqgQsDI5IXRIcmdQBGGVm+4D9QD93P7gzuz/RI5+qEN1HcXA/xVhgvpn1AdYBVxXJOxORhLPotr+StmYcjY9YxqDnvic1WYUhLBaMCCWc5ORkz8jICDuGiBSRR68fzZ1/GkIj1vKbq1IYPf/dsCOVSma2zN2Tc+unX0iLSOg+G/ksd/9pEPVZz1VX96H+nb3CjlTm6dxKIhKqzeOe4NJ721KJvVz5m1Tunfde2JEEbTmISIgW3nkjvx56ChupzbnndqfhXdeEHUkC2nIQkVDsfzydmQ924QPO5rqOt9L+4Rt0ZFIcUXEQkRK3//F0buxfibn05KKW43jy7UlhR5JDaFhJRErUD1Om06v/kTxJL5r/8j4uixwTdiTJhrYcRKTE7J08nYvTkniT80k+5W76PtVQQ0lxSlsOIlIifFqEgWkHeJPzadusnwpDnFNxEJHiF4kwot9/SCeFM056gF6zWqowxDkNK4lI8YpEmJX6HqOZxcn1Z3LL3GoqDAlAxUFEik8kwpupc0nlVepUX8TgZ/frfEkJQsNKIlJs3n3kOX7D8xx51BqGPree/mf3DTuS5JGKg4gUi2fTBnHNyukcKLefoU99xODzbgg7kuSDioOIFLnnbx3InZMH8V+O5cFek7i7e8+wI0k+qTiISJHaNO5J7nn0FjZzPGN7jSd11qiwI0kB5Kk4mNlMM9tsZp/GtB1nZgvNbFVwXy1oNzObZGarzWyFmbWMmaZ30H9VcJnRg+2tzOyTYJpJwdXiRCTBvDykLxcNbcrXJHFdl/7cMmdk2JGkgPK65TAb6HpI2zBgkbs3BhYFzwEuInp50MZACjAVosWE6FXkzgZaAyMOFpSgT0rMdIcuS0Ti3J7JMxgz/gZWcAY9Ot1Oy/vbhx1JCiFPh7K6+2Iza3RIc3eilw8FmAO8TfS60t2BJzx6ibklZnasmdUO+i48eNlQM1sIdDWzt4Fj3P29oP0J4DL+/zKiIhLnfFqEG9KO4Z+0pUe7O5j95pSwI0khFeZ3DrXcfSOAu280s+OD9rrA+ph+mUHb4dozs2mXAvjxR1jzx3kseeJNMnbU4fsDVdnjR7L+hyR+Uf7bLP2d7Ebwsh/Vy+6KstlPn317fvpmlyHH6b3ol5VT33y9r2xy5bysvC0/XxmyXX7h/zbZte36vh2f04RWJ/+BThNPznZekliK40dw2X3KvADtWWdslkJ0+IkGDRoUNF+p87fbU/jHU0fz5x3Xs+aHU9jrvwV++9PrVcvt4Ajby/b9x1On4r+zTG/ZrO7s2nJuz3vfHOdree1bBMvKtm8O8pgrf8vK6brt2fTNZvn5mW++lpWf93BIrkpVdtAhaQY9Z9fXr59LicIUh01mVjvYaqgNbA7aM4H6Mf3qARuC9vMOaX87aK+XTf8s3D0CRACSk5Nz+tSXGT9OTeeBB8sxdu14/kdV6lf8io5VX6HtUW+wucU2Gg2+hNt/dT3lyv0iZqqGoeWV0u6csANIESpMcVgA9AbGBvcvxbSnmdlcojufdwQF5DXg/pid0F2Au9x9u5ntMrM2wPtAL+DRQuQqE+YNuI0xU27kE86g/ZF/pmXnOUz8y4vAScAVYccTkQSXp+JgZs8Q/a+/hpllEj3qaCww38z6AOuAq4LuLwMXA6uB74EbAYIiMBpYGvQbdXDnNNCf6BFRVYjuiNbO6JxEIrwx4a/c9sXj7KYK13UcxLreH9PkDF17V0SKjnl2exkTQHJysmdkZIQdo8S9ftplXPHFnzii3Hc8fNNEbkwfG3YkEUkgZrbM3ZNz66ezsiaQHY/MIvWLCRxZ/ltuf2kxN3ZTYRCR4qHikCgiEVIHH8N66pPa5TqGdZsbdiIRKcV0bqUE8eSDS5lHD85sPIYzR3cOO46IlHLackgAOx6ZxdCvRnNixRXcOKseKa36hB1JREo5bTkkgD8++C2bOIFuF4wira0Kg4gUPxWHOLd38nTmbOjJWZVf5fRRXcKOIyJlhIpDnJv4wDr+Q23ObDdfpyUQkRKj4hDH9k1N5/H1N9LkiPdI/mObsOOISBmi4hDHZj20grUkkXzun0hN1laDiJQcFYd4FYnwzNeXU7P8es55oHnYaUSkjFFxiFNLJs3jLTrTotnz9GvdN+w4IlLGqDjEqekbL6Ic++l0X82wo4hIGaTiEId+nJrOK9t7cu5RbzCs27VhxxGRMkjFIQ49O34JG6jLiWctCDuKiJRRKg5xaP7mThxlO2g9pmXYUUSkjFJxiDN7Js/gnZ3dOO/oVxlwrk6VISLhKHBxMLNTzGx5zG2nmQ02s5Fm9k1M+8Ux09xlZqvN7EszuzCmvWvQttrMhhX2TSWy+RPe579Uo9ZZb4QdRUTKsAKfldXdvwSaA5hZeeAb4EWilwWd4O7jYvubWROgB9AUqAO8YWYnBy9PBi4AMoGlZrbA3VcWNFsim7/lfI4ut51W950ddhQRKcOKaljpfOArd//3Yfp0B+a6+153/5roNaZbB7fV7r7G3X8A5gZ9y5wfp6bzz50X0LHqa9zS5uaw44hIGVZUxaEH8EzM8zQzW2FmM82sWtBWF1gf0yczaMupvcyZ//D7fMtxVG+1OOwoIlLGFbo4mNkRwKXAs0HTVOAkokNOG4GHD3bNZnI/THt2y0oxswwzy9iyZUuhcsejv2xrTWX7H2fdl+u1v0VEilVRbDlcBHzo7psA3H2Tu+939wNAOtFhI4huEdSPma4esOEw7Vm4e8Tdk909uWbN0vfL4Y93n82ZVT7QUUoiErqiKA49iRlSMrPaMa9dDnwaPF4A9DCzSmaWBDQGPgCWAo3NLCnYCukR9C1Tto6fw7/2ns6ZVT4IO4qISOGuIW1mRxI9yig1pvlBM2tOdGho7cHX3P0zM5sPrAT2AQPcfX8wnzTgNaA8MNPdPytMrkT0zKRPOUB5KrdRcRCR8BWqOLj790D1Q9quP0z/McCYbNpfBl4uTJZE9/L21lQrt4nThncNO4qIiH4hHS+W727DWUe9q9Nzi0hcUHGIA8+mDeI/++pzRuWMsKOIiAAqDnHhy+f3AHDKr/XnEJH4oG+jOPDB9x05tvxWbkrPsjtGRCQUKg4h82kRPtjZmbOO/Dvl9NcQkTihr6OQvfPIn9nECRzbbGnYUUREfqLiELI3t58EwOm3nxlyEhGR/6fiELIPd7fluPKb+cMVvw07iojIT1QcwhSJ8MXOZM6oshTL7vSDIiIhUXEI0ZbZf+MrfslRp3yae2cRkRKk4hCiv22KnqMws0tmyElERH5OxSFE7/z3VCrwA30ubhF2FBGRn1FxCEskwtfbm3Nq5RUMbHdT2GlERH5GxSEkP/5pHh/QmmOTtL9BROKPikNI3tpyNLs5kq3t1+feWUSkhKk4hOSN7acA0PvSE0NOIiKSVaGLg5mtNbNPzGy5mWUEbceZ2UIzWxXcVwvazcwmmdlqM1thZi1j5tM76L/KzHoXNle8W767DSdUWM+wbteGHUVEJIui2nLo5O7N3T05eD4MWOTujYFFwXOAi4heO7oxkAJMhWgxAUYAZwOtgREHC0pp5NMifLarNWdWeT/sKCIi2SquYaXuwJzg8Rzgspj2JzxqCXCsmdUGLgQWuvt2d/8WWAiU2utlrpu1iA3UpcppK8OOIiKSraIoDg68bmbLzCwlaKvl7hsBgvvjg/a6QOwe2MygLaf2Uun1zdHV8e8LN4ScREQkexWKYB5t3X2DmR0PLDSzLw7TN7szCPlh2n8+cbT4pAA0aNCgIFnjwj/++0sqspc+FyXn3llEJASF3nJw9w3B/WbgRaL7DDYFw0UE95uD7plA/ZjJ6wEbDtN+6LIi7p7s7sk1a9YsbPTQrNhzFqdW/pgB59wcdhQRkWwVqjiY2VFmdvTBx0AX4FNgAXDwiKPewEvB4wVAr+CopTbAjmDY6TWgi5lVC3ZEdwnaSp0fpkzny91n0rTyR2FHERHJUWGHlWoBL1r0fNMVgKfd/VUzWwrMN7M+wDrgqqD/y8DFwGrge+BGAHc2mPlZAAAKyElEQVTfbmajgYOXQxvl7tsLmS0uLZj4Dt9zM5VaLA87iohIjgpVHNx9DZDlEmbuvg04P5t2BwbkMK+ZwMzC5EkEr29vRjn203z42WFHERHJkX4hXZIiEb7e1oKTK33K4PNuCDuNiEiOVBxK0IGnnomebK+hft8gIvFNxaEEvbPlSHbyC75t/++wo4iIHJaKQwlatL0xANdd0ijcICIiuVBxKEEffX8O1ctv4u7uPcKOIiJyWCoOJcSnRVix61xaHvlPLLvfg4uIxBEVhxKy5NF5ZFKfqk0+DjuKiEiuVBxKyGvbTgPgjCFNQk4iIpI7FYcSkvF9O44tv5Xhv7k67CgiIrlScSgB7vD+/zrS+sh3KKc1LiIJQF9VJeCLUfPZur82rY9cHHYUEZE8UXEoAX+KrAPgQDudbE9EEoOKQ3GLRHh/Q3NOrLiChnddG3YaEZE8UXEoZvuemscS2lD7pI9JaZWS+wQiInFAxaGYvb/zNP5HVbZ3+irsKCIieabiUMzmbmxGeX7kuNOX5t5ZRCROFLg4mFl9M3vLzD43s8/MbFDQPtLMvjGz5cHt4php7jKz1Wb2pZldGNPeNWhbbWbDCveW4kgkwpJNLTm10lJ6nd097DQiInlWmCvB7QOGuPuHwXWkl5nZwuC1Ce4+LrazmTUBegBNgTrAG2Z2cvDyZOACIBNYamYL3D3hL3rwyWMzyWAJF542gZRWt4UdR0QkzwpcHNx9I7AxeLzLzD4H6h5mku7AXHffC3xtZquB1sFrq4NLjmJmc4O+CV8c/rK1GQAtBjcKN4iISD4VyT4HM2sEtADeD5rSzGyFmc00s2pBW11gfcxkmUFbTu3ZLSfFzDLMLGPLli1FEb1Y/eO7X3Fs+W2Muf7ysKOIiORLoYuDmVUFngcGu/tOYCpwEtCc6JbFwwe7ZjO5H6Y9a6N7xN2T3T25Zs2ahY1erPY/ns77u86n3VGv65QZIpJwCvW1ZWYViRaGp9z9BQB33+Tu+939AJDO/w8dZQL1YyavB2w4THtCe33iq2yjBkefmRF2FBGRfCvM0UoGzAA+d/fxMe21Y7pdDnwaPF4A9DCzSmaWBDQGPgCWAo3NLMnMjiC603pBQXPFi79ua4FxgBZ3Nw87iohIvhXmaKW2wPXAJ2Z28KRBvwd6mllzokNDa4FUAHf/zMzmE93RvA8Y4O77AcwsDXgNKA/MdPfPCpErfJEI72/tSpPKHzH0wuvDTiMikm+FOVrpXbLfX/DyYaYZA4zJpv3lw02XaL6e8SbLSKFb07FAq7DjiIjkm3aVFrVIhBc+iB5steW3OguriCQmFYei9vTTPMtVVD/mI/p07hx2GhGRAlFxKGJvbT6K92nDL7ou0VlYRSRhqTgUscjGS6nIXm7pe1TYUURECkzFoQjtfGQWL/+3B52P/gtDftUr7DgiIgWm4lCEnnhsJzv5BSe3nxt2FBGRQlFxKCL7pqYzbnV3TjliKSuu2hp2HBGRQlFxKCIzHvqUf9OI+s3Gck2za8KOIyJSKIX5hbQE9j+ezuSv+9CgwudcMbkrKa36hh1JRKRQtOVQBO4ZvZNPOIO250yn/9kqDCKS+FQcCuk/Dz3JpA39OLfKAjqOPyXsOCIiRULDSoVw4PEIfX9Xmx+pSLuuj5KavDD3iUREEoCKQyEMHGn8lV9zTtNbOenuq8KOIyJSZFQcCmjYJRGmbErhoqNm0H326TpVhoiUKioO+eTTIvxxzEYeXv97zucNhqQt5vzkOWHHEhEpUnGzQ9rMuprZl2a22syGhZ0nO6/c0Zcb+lXi7vUjaFn5DYYMmcf5Y1UYRKT0iYstBzMrD0wGLiB6TemlZrbA3VeGmyzqu0kzmTRuPdPX38U6GtCx6XR6zDrARWelhx1NRKRYxEVxAFoDq919DYCZzQW6E72kaIk5cAC+e3QWW55eyPJvy7F0R22Wfd+WD777DTv5Bb+s+BETe9xP2hPDSzKWiEiJi5fiUBdYH/M8Ezi7OBZ0adJzrPjmTPZTgX1egX1ekX1U5L/7qwc9bgxuUcdX+IZOx/yF2ue8SvP7OpCarMIgIqVfvBSH7K5F7Vk6maUAKQANGjQo0IJOqLKRvZWNiraP8uyjgv1IBfuRchzgB69EwyNWs+GUH1jZ2unZqQXDul2D2XXAdQVanohIIoqX4pAJ1I95Xg/YcGgnd48AEYDk5OQsxSMvIisHFmQyEZEyJV6OVloKNDazJDM7AugBLAg5k4hImRUXWw7uvs/M0oDXgPLATHf/LORYIiJlVlwUBwB3fxl4OewcIiISP8NKIiISR1QcREQkCxUHERHJQsVBRESyUHEQEZEszL1AvyULnZltAf4dPK0BbA0xTkEkYmZIzNzKXDKUuWQUNnNDd6+ZW6eELQ6xzCzD3ZPDzpEfiZgZEjO3MpcMZS4ZJZVZw0oiIpKFioOIiGRRWopDJOwABZCImSExcytzyVDmklEimUvFPgcRESlapWXLQUREilBCFwczu8rMPjOzA2aWHNPeyMx2m9ny4PZ4mDlj5ZQ5eO0uM1ttZl+a2YVhZTwcMxtpZt/ErNuLw86UEzPrGqzL1WY2LOw8eWVma83sk2D9ZoSdJztmNtPMNpvZpzFtx5nZQjNbFdxXCzPjoXLIHNefZzOrb2ZvmdnnwffGoKC92Nd1QhcH4FPgCmBxNq995e7Ng1u/Es51ONlmNrMmRK9j0RToCkwxs/IlHy9PJsSs27g8k26w7iYDFwFNgJ7BOk4UnYL1G6+HWc4m+jmNNQxY5O6NgUXB83gym6yZIb4/z/uAIe5+GtAGGBB8jot9XSd0cXD3z939y7Bz5MdhMncH5rr7Xnf/GlgNtC7ZdKVKa2C1u69x9x+AuUTXsRQBd18MbD+kuTswJ3g8B7isREPlIofMcc3dN7r7h8HjXcDnQF1KYF0ndHHIRZKZfWRm75hZ+7DD5EFdYH3M88ygLR6lmdmKYDM9roYOYiTS+jyUA6+b2bLguumJopa7b4TolxpwfMh58ioRPs+YWSOgBfA+JbCu4744mNkbZvZpNrfD/Re4EWjg7i2A24GnzeyYkklc4MyWTVsoh5Llkn8qcBLQnOh6fjiMjHkQN+uzANq6e0uiQ2IDzKxD2IFKsYT4PJtZVeB5YLC77yyJZcbNleBy4u6/KsA0e4G9weNlZvYVcDJQIjv3CpKZ6H+29WOe1wM2FE2i/MlrfjNLB/5azHEKKm7WZ365+4bgfrOZvUh0iCy7/WrxZpOZ1Xb3jWZWG9gcdqDcuPumg4/j9fNsZhWJFoan3P2FoLnY13XcbzkUhJnVPLgz18xOBBoDa8JNlasFQA8zq2RmSUQzfxBypiyCD+JBlxPdwR6PlgKNzSzJzI4gurN/QciZcmVmR5nZ0QcfA12I33V8qAVA7+Bxb+ClELPkSbx/ns3MgBnA5+4+Pual4l/X7p6wN6J/zEyiWwmbgNeC9t8AnwEfAx8Cvw47a26Zg9fuBr4CvgQuCjtrDvmfBD4BVgQf0NphZzpM1ouBfwXr9O6w8+Qx84nB5/bj4DMcl7mBZ4gOw/wYfJ77ANWJHjmzKrg/Luycecgc159noB3R4dAVwPLgdnFJrGv9QlpERLIolcNKIiJSOCoOIiKShYqDiIhkoeIgIiJZqDiIiEgWKg4iIpKFioOIiGSh4iAiIln8Hz33sXyJaHhUAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"num_samples = 20000\n",
"sketch_size = 300\n",
"\n",
"# actual_values = [1,2,2.75,3,5,6,7,8,4] # use with sketch size of 8\n",
"# actual_values = np.random.normal(0, 100, num_samples)\n",
"# actual_values = np.random.uniform(10, 20, num_samples)\n",
"# actual_values = np.random.binomial(4, 0.25, num_samples)\n",
"# actual_values = np.random.exponential(1, num_samples)\n",
"\n",
"# actual_values = np.concatenate([\n",
"# np.random.normal(-10,1,int(num_samples/2)), \n",
"# np.random.normal(10,1,int(num_samples/2)), \n",
"# ]); np.random.shuffle(actual_values)\n",
"\n",
"actual_values = np.concatenate([\n",
" np.random.normal(-10,1,int(num_samples/2)), \n",
" np.random.uniform(10, 20, int(num_samples/2))\n",
"]); np.random.shuffle(actual_values)\n",
"\n",
"distro_sketch = DistributionSketch(sketch_size)\n",
"for value in actual_values:\n",
" distro_sketch.add_value(value)\n",
"\n",
"values, low_bounds, high_bounds = distro_sketch.get_bounds()\n",
"plot(values, low_bounds-0.05, 'g', drawstyle='steps-post')\n",
"plot(values, high_bounds+0.05, 'r', drawstyle='steps-post')\n",
"\n",
"plot(sorted(actual_values), range(1,len(actual_values)+1), 'b', drawstyle='steps-post')\n",
"\n",
"plt.legend(['low-bound', 'high-bound'])"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x11162df60>]"
]
},
"execution_count": 98,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# hey cool! the bounds are the least in areas where the distributions are lower\n",
"plot(values,(high_bounds-low_bounds)/num_samples*100, '.')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Plots for the Blog Post"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Explanation"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"from pylab import rcParams\n",
"rcParams['figure.figsize'] = 10, 5"
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# dots\n",
"num_points = 20\n",
"page_load_times = sorted(np.random.exponential(1, num_points))\n",
"\n",
"plot(page_load_times, np.zeros(num_points), '.', markersize=20)\n",
"\n",
"plt.xlabel('page load times (seconds)')\n",
"plt.title('Page Load Times')\n",
"plt.grid()"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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hYwYMYKDDjoorxgD+P3vf79u+U9/+hNPP/30uvfHHnssZ511FmPGjOH+++9niy22aDL2bbbZhuuuu46LLroob/0//vEPZs2aRXV1NR9++CH77bcfX/jCF+jVqxennnoqv/3tb7nqqqua7NvaD4+smZlZh7Z1r625ZL9L6NalW4MRti7qQrcu3bhkv0sKPhj3xhtvZNy4cQDsuOOODB48GIABAwawxRZb8M477zR57JtvvpljjjkGgDlz5lBTU8OYMWMA6N69O5tsskmT+w8aNIidd96ZTp3y/1zPmTOH/fbbjy5dutCjRw922WUXHnjgAQD22WcfHn744SaLU2tfXKyZmVmHt8/Afbj9i7dz5I5H0im6QYieXXty5I5HcvsXb2efgfs02GfNmjXMnTuXQYMGNdj21FNPsWbNGrbffvtGj/nGG2/w2muvsf/+yR2mL730Er1792b8+PHsuuuuXH755dTW1m7Q59lll124//77WblyJYsXL+bRRx9l3rzkOXGdOnVihx124Jlnntmgvq38+DSomZlVhK17bc1Ze5217vEczd1MsHjx4ganOAEWLVrEN7/5TSZOnNhgxCvXpEmTOPLII+ncuTMANTU1PPbYYzz99NNss8027L///lx33XV861vfWu/PMnbsWKZPn87nPvc5Nt98c0aNGkWXLh//Sd9iiy3Wnaq19s8ja2ZmZgV0796d1atX561btmwZhx56KBdccAF77bVXk/tPmjRp3SlQgIEDB7Lrrruy3Xbb0aVLF/bee29mzZq1wfGdddZZVFdX89BDDxER607RAqxevZru3btvcN9WXlysmZmZFdCnTx9qa2vXFWxr1qzhiCOO4Nhjj+UrX/lKk/u++OKLLF26lFGjPh6923333Vm6dOm669yefvpphgwZAsCZZ57JHXfckTm22tpa3n33XQBmz57N7NmzGTt27LrtL730EkOHDs3cn5W3Zos1STtKekTSc+n7nSX9vPihmZmZta2xY8fy+OOPA3DrrbcydepUrrvuunWP5qiurgbg7LPP5u677163380338zRRx+NpHXrOnfuzEUXXcQBBxzAZz/7WSKCE088EYBnn32WLbfcssHxp0+fzsCBA7nttts4+eST1xVga9euZZ999mHIkCGcdNJJ/PWvf113GvStt96ie/fu9O/fvzhJsZLLcs3aVcCPgSsA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O+zAU089BcDhhx/OjTfemPkYZmZmpZClWFstqRPwsqTTJB0BbJGl84g4JiL6R0TXiBgYEddExLsRcUBEDE5/LknbzoiIb+fse21E7JC+/rJBn85aZvAYOPV/YcRxfEB3PkKw8aYw4rhkfSMPxF2zZg1z585l0KBBACxYsICtt/74rPbAgQNZsGBBwX0vvfRSdt55ZyZMmNDo6FtLNBXLsGHDmD59eqsf08zMrCWyFGvfBzYBTieZyeCbfHwa0zq6vtvBoRczvvtfOKb//XDmfDj04ianmlq8eDG9e6+74ZdCdxwXmrrs1FNP5dVXX6W6upr+/fvzox/9qHU+Q46mYuncuTMbbbQRy5c3f2OFmZlZqTRbrEXE9IhYAbwPfC8ixkfEk8UPzdqr7t27s3r1x092GThwIPPmzVv3fv78+QwYMKDBfv369aNz58506tSJE088cd3pydbUXCwffvjhep1uNTMzK7Ysd4N+VtLTwHPA85JmShpW/NCsverTpw+1tbXrCraDDjqIBx98kKVLl7J06VIefPBBDjrooAb7LVq0aN3yHXfcwbBhzX/Njj322PUq6r70pS8xadIkPvzwQ1577TVefvll9thjDyC563TzzTena9dmbqwwMzMroWafswZcAfwwIh4FkDSa5LlmnytiXNbOjR07lscff5wDDzyQvn378otf/ILdd98dgLPPPpu+ffsC8O1vf5tTTjmFkSNH8pOf/ITq6mokMWjQIK644op1/Q0aNIhly5axZs0a7rzzTh588EGGDBnC7Nmz6d+/f4Pj33HHHXzve9/jnXfe4dBDD2X48OFMnjyZoUOHctRRRzFkyBC6dOnCn//8Zzp37gzAo48+uu4OVDMzs3KRpVjrUVeoAUTEFEk9ihiTdQCnnXYal1xyCQceeCAAEyZMYMKECQ3aXX311euWb7ih8SfCvP766w3WLVu2jMGDB+fdMFDniCOO4IgjjijY11lnncVZZ53VYP1NN93EhRde2GgMZmZmbSFLsTY3ne6p7i/pN4DXiheSdQS77rorVVVV1NbWrhu5am29evXitttua5W+1qxZw+GHH17wcR9mZmZtKcvdoBOAzYHbgTvS5ROKGZR1DBMmTChaodbaNtpoI4499ti2DsPMzKyBLHODLiV5bIeZmZmZlVijxZqke2hk8nSAiPhSUSIyMzMzs3WaGlnL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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# cumulative plot\n",
"ys = np.linspace(1,num_points,num_points)\n",
"plot(page_load_times, ys, drawstyle='steps-post')\n",
"\n",
"# median\n",
"i = 9\n",
"yx = page_load_times[i], ys[i]\n",
"plot(yx[0], yx[1], '.', markersize=20)\n",
"plt.annotate('({:.2f}, {:.0f})'.format(*yx), (yx[0]+.07, yx[1]-.7))\n",
"\n",
"\n",
"# 95%\n",
"i = 18\n",
"yx = page_load_times[i], ys[i]\n",
"plot(yx[0], yx[1], '.', markersize=20)\n",
"plt.annotate('({:.2f}, {:.0f})'.format(*yx), (yx[0]+.07, yx[1]-.7))\n",
"\n",
"\n",
"\n",
"plt.xlabel('page load times (seconds)')\n",
"plt.ylabel('number of page loads below a given time')\n",
"plt.title('Cumulative Plot of Page Load Times')\n",
"plt.grid()"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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QSZJ6vMOHn8wAwd0UZANGMhB4w9qfvzSSy+x6667snLlSubMmcPOO+/MlltuyTbbbMMll1zSbh+f//znmTBhAhMmTGCLLbZg6NChzfsee+wx9thjD97xjncwfvx4Hn300U7jefnll/nwhz/M5ptvzqRJkzps/4Mf/ICtttqKLbfcku9///vN20844QQ22WST5nhmz54NwD333MMhhxzS6bHV+3jJUpLU540ZMobTdj2No/90NCtWrmgxwX9gDGTggIGctutpLX4c9pxzzmH//fdnwIABDBo0iAsuuIBx48axYMECdthhB/bcc88WBRfA9773veb7P/rRj7jrrruaHx900EEcd9xxTJs2jaVLl7LWWmt1WpSdffbZDBs2jIceeoiZM2dyzDHHtCkE7733Xn7yk59w6623ss4667DXXnuxzz77MG7cOKAoEL/4xS+2eM7WW2/N/Pnzeeyxx9h0003rT6Iq5QiZJGmNsMvoXfjVvr9ixhYzWCvXhQwGrz2YGVvM4Ff7/opdRu/Sov3Pf/5zpk+fDsAWW2zRXORsvPHGbLjhhjz11FOdHu/iiy/mwAMPBGDu3LmsWLGCadOmATB48GAGDRrU6fOvuOIKDj74YABmzJjBH/7wBzKzRZv777+fyZMnM2jQIAYOHMiuu+7K5Zdf3mUu9t13X2bOnNllO/UeFmSSpDXGmCFjOG7ycbz95R8y/uX/4eaP3Mxxk49rs2zSK6+8wrx58xg7dmybPm699VZeeeUV3va2t3V4nL///e888sgjvOc9xU9oPPjggwwdOpT999+f7bbbji996UusXLmy01ifeOIJxowp4ho4cCBvfOMbWbRoUYs2W221Fddffz2LFi3ixRdfZPbs2Tz++Gs/bnv66aezzTbbcOihh7J48eLm7RMnTuSGG1yZoC+xIJMk9TtPP/10m8uRAAsXLuTjH/845557Lmut1fFH5MyZM5kxYwYDBgwAYMWKFdxwww2ceuqp3HbbbcybN4/zzjuv0xhaj4YBRESLx+94xzs45phjmDZtGnvttRfbbrstAwcWs40+/elP8/DDDzNnzhxGjRrFF77whebnbbjhhixYsKDT46t3sSCTJPU76623HsuWLWuxbcmSJeyzzz6cfPLJTJ48udPnz5w5s/lyJcDo0aPZbrvt2GyzzRg4cCDvf//7ufPOOzvtY/To0c2jXStWrOC5555j+PDhbdoddthh3HnnnVx//fUMHz68+dLqyJEjGTBgAGuttRZHHHEEt956a/Nzli1bxnrrrdd5EtSrWJBJkvqdYcOGsXLlyuai7JVXXuEDH/gABx10EP/2b//W6XMfeOABFi9ezM47v/ZbWjvuuCOLFy9unnf2xz/+kfHjxwPwla98pd15X/vttx/nn38+AJdddhnvec972oyQATz55JNA8S3OX/3qV82F4MKFC5vbXH755Wy11VbNjx988MEWj9X7WZBJkvqlPfbYgxtvvBGASy+9lOuvv57zzjuv+Wck5syZA8Dxxx/PrFmzmp938cUXc8ABB7QongYMGMCpp57KbrvtxtZbb01mcsQRRwDFz1BstNFGbY5/2GGHsWjRIjbffHNOO+00TjnlFAAWLFjA3nvv3dzugx/8IOPHj2fffffljDPOYNiwYQB8+ctfZuutt2abbbbh2muvbfEN0GuvvZZ99tmnu1KlHuDPXkiS+qWjjjqK0047jd13352PfexjfOxjH2u33UknndTi8QknnNBuu2nTpnH33Xe32b58+fIWo2lN1l13XX7xi1+02b7xxhs3/6YY0OHk/AsvvLDd7S+//DK33357i98sU+9nQSZJfdhFtzzGFXOeqDqMZn1p4ejtttuOqVOnsnLlyubJ+Y1w1VVXNazv9jz22GOccsopzZP/1Tf4bklSH3bFnCfqKj76m3oXjj700EN7IJqeNW7cuOaJ/+o7LMgkqY8bP2oIl3yydyzW7MLR0upxUr8kSVLFLMgkSZIqZkEmSZJUMQsySZKkilmQSZIkVcyCTJIkqWIWZJIkSRWzIJMkSaqYBZkkSVLFLMgkSZIq5tJJkirV2xbHXlVVL6btOpbSmsERMkmValocW6un3kW0JfVujpBJqlxvWhx7VbmYtqTu4AiZJElSxSzIJEmSKmZBJkmSVDELMkmSpIpZkEmSJFXMgkySJKliFmSSJEkVsyCTJEmqWEMLsojYKyIeiIiHIuLYdvZvGhHXRsRdEXF3ROzdyHgkSZJ6o4YVZBExADgDeC8wHjgwIsa3avZV4NLM3A44APjvRsUjSZLUWzVy6aSdgIcycx5ARMwEpgNza9ok0LQq7huBBQ2MR9JqqF38uxELabs4tiRBZGZjOo6YAeyVmYeXjz8OTMrMo2rajAKuBoYB6wO7Z+Yd7fR1JHAkwMiRI3eYOXNmt8S4dOlSBg8e3C19rQnMR1vmBL59y0s89vyrbLrBWqxcuZIBAwZ0+zF23nggU8as3e399gTPkZbMR0vmo63+lpOpU6fekZkTu2rXyBGyaGdb6+rvQOC8zPxuROwMXBgRW2Xmqy2elHkWcBbAxIkTc8qUKd0SYLEocPf0tSYwH22ZEzjzgZsZOhQu+eTO5qMd5qQl89GS+WjLnLSvkZP65wNjah6Ppu0lycOASwEy82ZgXWBEA2OSJEnqdRpZkN0GjIuIt0bEOhST9me1avMYsBtARLyDoiB7qoExSZIk9ToNK8gycwVwFHAVcD/Ftynvi4iTImK/stkXgCMi4i/AxcAh2ahJbZIkSb1UI+eQkZmzgdmtth1fc38u8K5GxiBJktTb+Uv9kiRJFbMgkyRJqpgFmSRJUsUsyCRJkipmQSZJklQxCzJJkqSKNfRnL6T+pHYR7jWJi39LUuM5QiZ1kyvmPMHchUuqDqPbjR81hOkTNqk6DElaozlCJnWj8aOGcMknd646DElSH+MImSRJUsUsyCRJkipmQSZJklQxCzJJkqSKWZBJkiRVzIJMkiSpYhZkkiRJFbMgkyRJqpgFmSRJUsUsyCRJkirm0klao3T3At/PPvsSZz5wc11tXYRbkrS6HCHTGqXKBb5dhFuStLocIdMapzsX+L7uuuuYMsXFwiVJjeUImSRJUsUsyCRJkipmQSZJklQxCzJJkqSKWZBJkiRVzIJMkiSpYhZkkiRJFbMgkyRJqpgFmSRJUsUsyCRJkirm0kl63bp7Qe/XwwW+JUl9kSNket2qXNC7NRf4liT1RY6QqVt054LekiT1N46QSZIkVcyCTJIkqWIWZJIkSRWzIJMkSaqYBZkkSVLFLMgkSZIqZkEmSZJUMQsySZKkitVVkEXEoIj4WkT8pHw8LiLeV8fz9oqIByLioYg4toM2H4qIuRFxX0RctGrhS5Ik9X31/lL/ucAdQNNPsc8HfgFc2dETImIAcAYwrWx/W0TMysy5NW3GAV8B3pWZiyNiw1V/CZIkSX1bvQXZ2zLzwxFxIEBmvhQR0cVzdgIeysx5ABExE5gOzK1pcwRwRmYuLvt9cpWiVyVaLybugt6SJL0+kZldN4r4P2A34KbM3D4i3gZcnJk7dfKcGcBemXl4+fjjwKTMPKqmza+BB4F3AQOAEzLzd+30dSRwJMDIkSN3mDlz5iq8xI4tXbqUwYMHd0tfa4J68/HtW17isedfZdMNXrvivfPGA5kyZu1GhlcJz5GWzEdb5qQl89GS+Wirv+Vk6tSpd2TmxK7a1TtC9nXgd8CYiPg5RQF1SBfPaW8ErXX1NxAYB0wBRgM3RMRWmflsiydlngWcBTBx4sScMmVKnWF37rrrrqO7+loT1JuPMx+4maFD6ReLiXuOtGQ+2jInLZmPlsxHW+akfXUVZJl5TUTcCUymKLQ+m5lPd/G0+cCYmsejgQXttPlzZi4HHomIBygKtNvqiUuSJGlN0Om3LCNi+6Yb8BZgIUVRtWm5rTO3AeMi4q0RsQ5wADCrVZtfA1PLY40AtgDmrfrLkCRJ6ru6GiH7bif7EnhPhzszV0TEUcBVFPPDzsnM+yLiJOD2zJxV7tsjIuYCK4EvZeaiVXoFkiRJfVynBVlmTn09nWfmbGB2q23H19xP4OjyJkmS1C91WpBFxHsy848RsX97+zPzV40JS5Ikqf/o6pLlrsAfgX3b2ZeABZkkSdLr1NUly6+Xd0/KzEdq90XEWxsWlSRJUj9S7+Liv2xn22XdGYgkSVJ/1dUcsrcDWwJvbDWPbAiwbiMDkyRJ6i+6mkP2L8D7gKG0nEf2PMU6lJIkSXqduppDdgVwRUTsnJk391BMqlDrhcPb42LikiR1r3rXsnwoIv4DGFv7nMw8tBFBqTpXzHmiy4Jr/KghTJ+wSQ9GJUnSmq3eguwK4Abg9xS/qK812PhRQ/rFwuGSJPUW9RZkgzLzmIZGIkmS1E/V+7MXV0bE3g2NRJIkqZ+qtyD7LEVRtiwilkTE8xGxpJGBSZIk9Rd1XbLMzA0aHYgkSVJ/VdcIWRQ+FhFfKx+PiYidGhuaJElS/1DvJcv/BnYGPlI+Xgqc0ZCIJEmS+pl6v2U5KTO3j4i7ADJzcUSs08C41NOemce4B3/Muf/4E+vmS/CtwbDNh+CdR8HwzaqOTpKkNVq9I2TLI2IAkAAR8Wbg1YZFpZ71t2vgzHcxasHVDMoXWYuEV56HOy+AM99V7JckSQ1Tb0H2Q+ByYMOI+CZwI/CthkWlnvPMPLj0IFj+Imu1/s3fV5fD8heL/c/MqyY+SZL6gboKssz8OfBl4NvAQuD9mfmLRgamHvJ/p8PK5Z23WbkcbnbKoCRJjVLvtywnA09k5hmZeTowPyImNTY09Yi7Ly1Gwjrz6nK4+5KeiUeSpH6o3kuWZ1J8s7LJC+U29XWvLO26zaq0kyRJq6zegiwyM5seZOar1P8NTfVm6wzu3naSJGmV1VuQzYuIz0TE2uXts4CzvNcE23wI1lq78zZrrQ3bfLhn4pEkqR+qtyD7FPBO4AlgPjAJOLJRQakHvfMoGNBFQTZgbdj533smHkmS+qEuC7Ly98c+mpkHZOaGmTkyMz+SmU/2QHxqtOGbwYcugLUH8SoDWu5ba21Ye1Cxv/xx2Jdeeoldd92VlSuLn8g4//zzGTduHOPGjeP8889v9xAnnHACm2yyCRMmTGDChAnMnj0bgEWLFjF16lQGDx7MUUcdVVe4zzzzDNOmTWPcuHFMmzaNxYsXt9tuwIABzcfbb7/9mrc/8sgjTJo0iXHjxvHhD3+YV155BYDTTz+dc889t64YJEnqbl0WZJm5EpjeA7GoKuOmwadvYsHGe/JiDOJVAt6wAexwMHz6pmJ/6ZxzzmH//fdnwIABPPPMM5x44onccsst3HrrrZx44okdFkif//znmTNnDnPmzGHvvfcGYN111+Ub3/gGp556at2hnnLKKey222787W9/Y7fdduOUU05pt916663XfLxZs2Y1bz/mmGP4/Oc/z9/+9jeGDRvG2WefDcChhx7KD3/4w7rjkCSpO9V7yfKmiDg9InaJiO2bbg2NTD1r+GY8tMUn+cRGv+LAUb+Fr8yHfb7bZtmkn//850yfXtTnV111FdOmTWP48OEMGzaMadOm8bvf/a7uQ66//vq8+93vZt111637OVdccQUHH3wwAAcffDC//vWv635uZvLHP/6RGTNmtHn+oEGDGDt2LLfeemvd/UmS1F3qLcjeCWwJnAR8t7zVP6yhNcIrr7zCvHnzGDt2LABPPPEEY8aMad4/evRonnjiiXafe/rpp7PNNttw6KGHdjiKVo9//vOfjBo1CoBRo0bx5JPtXzlftmwZEydOZPLkyc1F16JFixg6dCgDBw5sN96JEydyww03rHZskiStrnp/qX9qO7f3NDo49S5PP/00Q4cObX5c80sozSKizbZPf/rTPPzww8yZM4dRo0bxhS98oaFxAjz22GPcfvvtXHTRRXzuc5/j4Ycf7jLeDTfckAULFjQ8NkmSWqv3l/pHRsTZEfHb8vH4iDissaGpt1lvvfVYtmxZ8+PRo0fz+OOPNz+eP38+G2+8cZvnjRw5kgEDBrDWWmtxxBFHvK7LgiNHjmThwoUALFy4kA033LDddk1xbLbZZkyZMoW77rqLESNG8Oyzz7JixYp24122bBnrrbfeascmSdLqqveS5XnAVUDTp9eDwOcaEZB6r2HDhrFy5crmomzPPffk6quvZvHixSxevJirr76aPffcs83zmgoogMsvv5ytttqqy2MddNBB7RZu++23X/O3Oc8///zm+Wy1Fi9ezMsvvwwUo3o33XQT48ePJyKYOnUql112WbvPf/DBB+uKTZKk7lZvQTYiMy+e50dYAAAS00lEQVQFXgXIzBXAyoZFpV5rjz324MYbbwRg+PDhfO1rX2PHHXdkxx135Pjjj2f48OEAHH744dx+++0AfPnLX2brrbdmm2224dprr+V73/tec39jx47l6KOP5rzzzmP06NHMnTsXgLvvvrt5rlitY489lmuuuYZx48ZxzTXXcOyxxwJw++23c/jhhwNw//33M3HiRLbddlumTp3Ksccey/jx4wH4zne+w2mnncbmm2/OokWLOOyw1wZ6b7rpJnbffffuTpkkSV2qd/mjFyLiTUBC82LjzzUsKlXiuseXc8sjLzDprcM7bHPUUUdx2mmnNRcuhx56KIceemibdj/96U+b71944YUd9vfoo4+22bZkyRLGjRvX4gsDTd70pjfxhz/8oc32iRMnNh/zne98J/fcc0+7x9tss83aHXm766672HLLLRkxYkSHsUqS1Cj1FmRHA7OAzSLiJuDNwIyGRaVK3LygmFs1fcImHbbZbrvtmDp1KitXrmTAgAEdtns9hgwZwi9+8YuG9N2Rp59+mm984xs9ekxJkprUW5DNBS4HXgSeB35NMY9Ma5hJbx3ORyZt2mmb9kbE+rpp06Z13UiSpAapdw7ZBcDbgW8BPwLGAR1fh5IkSVLd6h0h+5fM3Lbm8bUR8ZdGBCRJktTf1DtCdlc5kR+AiJgE3NSYkCRJkvqXekfIJgEHRcRj5eNNgfsj4h4gM3ObhkQnSZLUD9RbkO3V0CgkSZL6sboKssz8e6MDkSRJ6q/qnUMmSZKkBrEgkyRJqlhDC7KI2CsiHoiIhyLi2E7azYiIjIiJjYxHkiSpN2pYQRYRA4AzgPcC44EDI2J8O+02AD4D3NKoWCRJknqzer9luTp2Ah7KzHkAETETmE6xDFOtbwD/CXyxgbEIuOiWx7hizhMd7n/s+VcZOrQHA5IkSQBEZjam44gZwF6ZeXj5+OPApMw8qqbNdsBXM/ODEXEd8MXMvL2dvo4EjgQYOXLkDjNnzuyWGJcuXcrgwYO7pa++4Nu3vMRjz7/Kphu0PzC6cuVK3j3mDUwZs3YPR9Z79bdzpCvmoy1z0pL5aMl8tNXfcjJ16tQ7MrPLKVmNHCGLdrY1V38RsRbwPeCQrjrKzLOAswAmTpyYU6ZM6ZYAr7vuOrqrr77gzAduZuhQuOSTO7e7v7/lox7mpCXz0ZY5acl8tGQ+2jIn7WvkpP75wJiax6OBBTWPNwC2Aq6LiEeBycAsJ/ZLkqT+ppEF2W3AuIh4a0SsAxwAzGramZnPZeaIzBybmWOBPwP7tXfJUpIkaU3WsIIsM1cARwFXAfcDl2bmfRFxUkTs16jjSpIk9TWNnENGZs4GZrfadnwHbac0MhZJkqTeyl/qlyRJqpgFmSRJUsUsyCRJkipmQSZJklQxCzJJkqSKWZBJkiRVrKE/e6Hq1S4oPnfhEsaPGlJxRJIkqTVHyNZwV8x5grkLlwAwftQQpk/YpOKIJElSa46Q9QPjRw3pcEFxSZJUPUfIJEmSKmZBJkmSVDELMkmSpIpZkEmSJFXMgkySJKliFmSSJEkVsyCTJEmqmAWZJElSxSzIJEmSKmZBJkmSVDGXTlpDNS0q7oLikiT1fo6QraFqizEXFJckqXdzhGwN5qLikiT1DY6QSZIkVcyCTJIkqWIWZJIkSRWzIJMkSaqYBZkkSVLFLMgkSZIqZkEmSZJUMQsySZKkilmQSZIkVcyCTJIkqWIundRHNC0WXi8XFZckqe9whKyPaFosvF4uKi5JUt/hCFkf4mLhkiStmRwhkyRJqpgFmSRJUsUsyCRJkipmQSZJklQxCzJJkqSKWZBJkiRVzIJMkiSpYhZkkiRJFWtoQRYRe0XEAxHxUEQc287+oyNibkTcHRF/iIi3NDIeSZKk3qhhBVlEDADOAN4LjAcOjIjxrZrdBUzMzG2Ay4D/bFQ8kiRJvVUjR8h2Ah7KzHmZ+QowE5he2yAzr83MF8uHfwZGNzCePuuiWx7jlkeeqToMSZLUIJGZjek4YgawV2YeXj7+ODApM4/qoP3pwD8y8+R29h0JHAkwcuTIHWbOnNktMS5dupTBgwd3S1+N9O1bXuKBxa9yyJbrMGXM2g07Tl/JR08yJy2Zj7bMSUvmoyXz0VZ/y8nUqVPvyMyJXbVr5OLi0c62dqu/iPgYMBHYtb39mXkWcBbAxIkTc8qUKd0S4HXXXUd39dVIZz5wM5OGwgkfb+zC4n0lHz3JnLRkPtoyJy2Zj5bMR1vmpH2NLMjmA2NqHo8GFrRuFBG7A8cBu2bmyw2MR5IkqVdq5Byy24BxEfHWiFgHOACYVdsgIrYD/gfYLzOfbGAskiRJvVbDCrLMXAEcBVwF3A9cmpn3RcRJEbFf2ey/gMHALyJiTkTM6qA7SZKkNVYjL1mSmbOB2a22HV9zf/dGHl+SJKkv8Jf6JUmSKmZBJkmSVDELMkmSpIpZkEmSJFXMgkySJKliFmSSJEkVa+jPXqhw0S2PccWcJ1b7+XMXLmH8qCHdGJEkSepNHCHrAVfMeYK5C5es9vPHjxrC9AmbdGNEkiSpN3GErIeMHzWESz7Z2MXBJUlS3+QImSRJUsUsyCRJkipmQSZJklQxCzJJkqSKWZBJkiRVzIJMkiSpYhZkkiRJFbMgkyRJqpgFmSRJUsUsyCRJkipmQSZJklQxCzJJkqSKWZBJkiRVzIJMkiSpYhZkkiRJFbMgkyRJqpgFmSRJUsUsyCRJkipmQSZJklQxCzJJkqSKWZBJkiRVzIJMkiSpYhZkkiRJFRtYdQC9zYm/uY+5C5Z0a59zFy5h/Kgh3dqnJElaczhC1gPGjxrC9AmbVB2GJEnqpRwha+Xr+25ZdQiSJKmfcYRMkiSpYhZkkiRJFbMgkyRJqpgFmSRJUsUsyCRJkipmQSZJklQxCzJJkqSKWZBJkiRVzIJMkiSpYhZkkiRJFbMgkyRJqlhkZtUxrJKIeAr4ezd1NwJ4upv6WhOYj7bMSUvmoy1z0pL5aMl8tNXfcvKWzHxzV436XEHWnSLi9sycWHUcvYX5aMuctGQ+2jInLZmPlsxHW+akfV6ylCRJqpgFmSRJUsX6e0F2VtUB9DLmoy1z0pL5aMuctGQ+WjIfbZmTdvTrOWSSJEm9QX8fIZMkSapcvyjIImKviHggIh6KiGPb2f+GiLik3H9LRIzt+Sh7Th35OCQinoqIOeXt8Cri7CkRcU5EPBkR93awPyLih2W+7o6I7Xs6xp5URz6mRMRzNefH8T0dY0+KiDERcW1E3B8R90XEZ9tp09/OkXpy0m/Ok4hYNyJujYi/lPk4sZ02/e1zpp6c9KvPmi5l5hp9AwYADwObAesAfwHGt2rz/4Afl/cPAC6pOu6K83EIcHrVsfZgTv4V2B64t4P9ewO/BQKYDNxSdcwV52MKcGXVcfZgPkYB25f3NwAebOf/mf52jtSTk35znpTv++Dy/trALcDkVm36zefMKuSkX33WdHXrDyNkOwEPZea8zHwFmAlMb9VmOnB+ef8yYLeIiB6MsSfVk49+JTOvB57ppMl04IIs/BkYGhGjeia6nldHPvqVzFyYmXeW958H7gc2adWsv50j9eSk3yjf96Xlw7XLW+sJ2v3pc6benKhGfyjINgEer3k8n7b/cDS3ycwVwHPAm3okup5XTz4APlheerksIsb0TGi9Vr056092Li9F/DYitqw6mJ5SXmbajuKv/Vr99hzpJCfQj86TiBgQEXOAJ4FrMrPDc6QffM4AdeUE/Kxp1h8Ksvb+AmldpdfTZk1Rz2v9DTA2M7cBfs9rf9X1V/3p/KjHnRRLgWwL/Aj4dcXx9IiIGAz8EvhcZi5pvbudp6zx50gXOelX50lmrszMCcBoYKeI2KpVk353jtSREz9ravSHgmw+UFt1jwYWdNQmIgYCb2TNvWTTZT4yc1Fmvlw+/AmwQw/F1lvVcw71G5m5pOlSRGbOBtaOiBEVh9VQEbE2ReHx88z8VTtN+t050lVO+uN5ApCZzwLXAXu12tWfPmda6Cgnfta01B8KstuAcRHx1ohYh2Iy5axWbWYBB5f3ZwB/zMw19S+XLvPRau7LfhTzQ/qzWcBB5TfpJgPPZebCqoOqSkRs1DT3JSJ2ovh3ZFG1UTVO+VrPBu7PzNM6aNavzpF6ctKfzpOIeHNEDC3vrwfsDvy1VbP+9DlTV078rGlpYNUBNFpmroiIo4CrKL5heE5m3hcRJwG3Z+Ysin9YLoyIhyj+Yjmguogbq858fCYi9gNWUOTjkMoC7gERcTHFN8JGRMR84OsUE1DJzB8Dsym+RfcQ8CLwiWoi7Rl15GMG8OmIWAG8BBywJn+wAO8CPg7cU86HAfgPYFPon+cI9eWkP50no4DzI2IAReF5aWZe2V8/Z0r15KRffdZ0xV/qlyRJqlh/uGQpSZLUq1mQSZIkVcyCTJIkqWIWZJIkSRWzIJMkSaqYBZmkHhcRS7tuVVc/J0TEF9vZ/v6IGF/z+KSI2L07jllnXN+PiH/tqeN1pat8R8TvI2JYT8UjqS0LMklrovcDzQVZZh6fmb/viQNHxHBgcrlIe19xIfD/qg5C6s8syKR+LiLGRsRfI+L8mkV+B5X7jo+I2yLi3og4q+aX13cs294cEf8VEfeW2weUj28r93+yi2NH0/Mj4p6I+HC5fXBE/CEi7iy3T695znER8UBE/B74l3b6fCfFr37/V0TMiYi3RcR5ETGj3P9oRHyrjP32iNg+Iq6KiIcj4lM1/Xyp5nWcWG5bPyL+N4oFs+9tireVGcDvavo5JSLmlv2cWm57c0T8suz/toh4V83rPrd8zXdHxAfL7QeW2+6NiO/U9L00Ir5ZxvPniBhZbn9r+fpui4hv1LQfFRHXl3m5NyJ2KXfNAg7s7L2S1FgWZJKgKGzOKhf5XcJroyWnZ+aOmbkVsB7wvnL7ucCnMnNnYGVNP4dRLBu0I7AjcEREvLWT4+4PTAC2pVha5b+iWE5lGfCBzNwemAp8tyzedqD4hfPtyufu2LrDzPw/igLjS5k5ITMfbue4j5ex3wCcR1FETQZOAoiIPYBxwE5lfDuUlyD3AhZk5rZlTn7XTt/vAu4o+xkOfADYssztyWWbHwDfK/P0QeCn5favlfnbumz/x4jYGPgO8J4ylh0j4v1l+/WBP5cLeF8PHFHT/5ll//+oie0jwFXlgs/bAnPKnC0G3hARb2rn9UjqARZkkqAoUG4q7/8MeHd5f2pE3BIR91AUBFtGsT7dBmXhA3BRTT97UKzpOAe4BXgTRWHTkXcDF2fmysz8J/AniiIrgG9FxN3A74FNgJHALsDlmfliZi6h7bq09Wp63j3ALZn5fGY+BSwrX98e5e0u4E7g7eXruAfYPSK+ExG7ZOZz7fQ9CniqvL+Eorj8aUTsT7GsEhTF5+llnmYBQyJig3L7GU0dlYXSjsB1mflUZq4Afg40zU97BbiyvH8HMLa8/y7g4vL+hTWx3QZ8IiJOALbOzOdr9j0JbNxBviQ12Bq/lqWkurReQy0jYl3gv4GJmfl4+SG+LkWx1JEA/r/MvKrO43bU10eBNwM7ZObyiHi0PHZ7sa6Ol8v/vlpzv+nxwDKub2fm/7QJuBil2xv4dkRcnZkntWryUlOs5dqxOwG7UYzsHUVR2K4F7JyZL7XqO2j7+jrL9/Ka9SFX0vLf9DZ5yszry5G+fSjWVfyvzLyg3L1uGbukCjhCJglg04jYubx/IHAjrxVAT0fEYIrLek2jNs9HxORyf+0iyVdRLCi9NkBEbBER63dy3OuBD5dzz95MMfJzK/BG4MmyGJsKvKWm/QciYr1yRGnfDvp9HtigrlfevquAQ8vXTURsEhEblpcPX8zMnwGnAtu389z7gc3L5w0G3piZs4HPUVxyBLiaojijbNfR9mEUI427RsSIKBZqPpBiJLEzN/Ha+/LRmv7eQpHXn1Asdr19uT2AjYBHu+hXUoNYkEmCoog4uLxEOJxi/tGzwE8oLtP9muJyV5PDgLMi4maKEZymS3c/BeYCd0Yx0f9/6Hwk/nLgbuAvwB+BL2fmPyguy02MiNspCoq/AmTmncAlFHOffkkxB6w9M4EvRcRdEfG2urNQysyrKS7F3lxerr2MosDbGri1vNR4HK/NCav1v8CU8v4GwJVlXv8EfL7c/pny9d0dEXOBpi8TnAwMKyfc/wWYmpkLga8A11Lk6c7MvKKLl/BZ4N8j4jaK4rbJFGBORNxFMXftB+X2HSjmoq3ool9JDRKvjXZL6o8iYixwZTlJvd7nDM7MpeX9Y4FRmfnZxkTY90TEjcD7yqK214uIHwCzMvMPVcci9VfOIZO0OvaJiK9Q/Bvyd+CQasPpdb4AbAr0iYIMuNdiTKqWI2SSJEkVcw6ZJElSxSzIJEmSKmZBJkmSVDELMkmSpIpZkEmSJFXMgkySJKli/z+ZGi3FukPQKgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# distribution plot\n",
"ys = np.linspace(1,num_points,num_points)/num_points\n",
"plot(page_load_times, ys, drawstyle='steps-post')\n",
"\n",
"# median\n",
"i = 9\n",
"yx = page_load_times[i], ys[i]\n",
"plot(yx[0], yx[1], '.', markersize=20)\n",
"plt.annotate('({:.2f}, {:.2f})'.format(*yx), (yx[0]+.05, yx[1]-.04))\n",
"\n",
"\n",
"# 95%\n",
"i = 18\n",
"yx = page_load_times[i], ys[i]\n",
"plot(yx[0], yx[1], '.', markersize=20)\n",
"plt.annotate('({:.2f}, {:.2f})'.format(*yx), (yx[0]+.05, yx[1]-.04))\n",
"\n",
"\n",
"\n",
"plt.xlabel('page load times (seconds)')\n",
"plt.ylabel('percentile')\n",
"plt.title('Empirical Distribution of Page Load Times')\n",
"plt.grid()"
]
},
{
"cell_type": "code",
"execution_count": 131,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(0, 4.5)"
]
},
"execution_count": 131,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# various n distribution plot\n",
"page_load_timeses = [\n",
" sorted(np.random.exponential(1, n))\n",
" for n in [20,100,100000]\n",
"]\n",
"\n",
"for i, page_load_times in enumerate(page_load_timeses):\n",
" num_points = len(page_load_times)\n",
" plot(page_load_times, np.linspace(0,num_points,num_points)/num_points, drawstyle='steps-post')\n",
" index_95th = int(num_points*.95)-1\n",
" \n",
" \n",
"plot([0.25,1.25], [0.5,0.5], 'k:') \n",
"plt.annotate('50th percentile', (1, 0.45))\n",
"plot([2.25,4.25], [0.95,0.95], 'k:') \n",
"plt.annotate('95th percentile', (3.75, 0.9))\n",
" \n",
"plt.legend(['20 points','100 points','true distribution'])\n",
" \n",
"plt.xlabel('page load times (seconds)')\n",
"plt.ylabel('percentile')\n",
"plt.title('Distributions of Page Load Times')\n",
"plt.grid()\n",
"plt.xlim((0,4.5))"
]
},
{
"cell_type": "code",
"execution_count": 134,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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e+yxHHnkkTz66KOsVXI9tDvuuINnnnmGRx55hJaWFiZNmsS999672Hs7Wufcc89l4MCBtLS0MHr06EzbMjPLi4sws3p23XXJVKH11luPHXbYAYCRI0dy3333MW3aNDbYYAM22WQTAA4++OB2C5Jll12WPffcE4DBgwczc+bMivY9e/ZsZs2axc477/zRfiZPnrzEevfffz/7778/AAceeOBHy++44w7uuOMOtt56a7bZZhuefvppnnnmmcXem2WdStYzM8uDfx1pVs9ae6r23beit0la4nlEZHrvMsss89H7l156aRYuXFjRvivRNidARHDyySfz3e9+t8P3dbRO24Ixy7bMzPLinjCzenbrrclUoRdeeIEHH3wQgGuvvZYdd9yRzTbbjJkzZzJ9+nQAxo0b91FvVRb9+vVrd2xX29dWWWUVVl11Vf7xj398tJ+tttpqiffssMMOTEjvjfmHP/zho+Vf/vKXueqqq5g7dy4AL730Eq+//vpi7+1onbYZs2zLzCwvLsLM6tmKKyZThT772c8yduxYBg0axNtvv82RRx7J8ssvz9VXX803v/lNttxyS5Zaaim+973vZd7mfvvtx+jRo9l6660XG5jf3mtjx47lxBNPZNCgQbS0tHDQQQctsb2LLrqI3/zmNwwdOpTZs2d/tHy33XbjgAMOYLvttmPLLbdkxIgRSxR/Ha2z+uqrs8MOO7DFFltw4oknZtqWmVlelPUURJGGDBkSrb/MykNTUzJvbs5tFxVrbm6mqTVYH+O2N2V/wzXXJPORIzO/ZebMmey5555MnTq1snA58jFvKjpGIdz2pqJjFKIvtF3SpIgYUm4994SZ1aMZM+Coo+CQQ+DAA2HllZPnbXqgzMys53IRZlZvbrsNBg2CK6+ERYuSZXPmJM8HDUpe78SAAQN6VC+YmVlfVUgRJml3SdMkTZd0UhEZzOrSjBkwYgTMmwcLFiz+2oIFyfIRI9wjZmZWB2pehElaGvgNsAewObC/pM7vh2JmiQsuWLL4amvBAvj1r2uTx8zMqlZET9jngekR8WxEfABMAPYuIIdZ/bnmmmxF2LhxtcljZmZVq/mvIyWNAHaPiMPT5wcC/y8ijm6z3ihgFMCaa645uPV6QXm45JKNADj66Om57aNSc+fOpaGhoegYhXDbO277zl/8IsrwZzYk7vnb37ozWq58zN32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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# example of removing a dot 1\n",
"# page_load_times = sorted(np.random.exponential(1, 10))\n",
"added_new_point = False\n",
"page_load_times = [\n",
" 0.12146025469577916,\n",
" 0.18623819827983728,\n",
" 0.19845379192433754,\n",
" 0.2091002354904542,\n",
" 0.26043419315144166,\n",
" 0.33044754092176754,\n",
" 0.3444238071213646,\n",
" 0.3601231983791873,\n",
" 0.46747868330655723,\n",
" 0.5252607990516103,\n",
"]\n",
"num_points = len(page_load_times)\n",
"ys = np.linspace(1,num_points,num_points)\n",
"plot([page_load_times[0],page_load_times[0]], [0,1], 'b')\n",
"plot(page_load_times, ys, 'b', drawstyle='steps-post')\n",
"\n",
"# point\n",
"i = 4\n",
"yx = page_load_times[i], ys[i]\n",
"plot(yx[0], 0, '.r', markersize=20)\n",
"plot([yx[0], yx[0]], [0, num_points], 'r:', markersize=20)\n",
"\n",
"plt.annotate('point to delete', (page_load_times[4]+.01, 0.25))\n",
"\n",
"plt.xlabel('page load times (seconds)')\n",
"plt.ylabel('number of page loads below a given time')\n",
"plt.title('Dropping Data but Retaining Distribution Bounds')\n",
"plt.grid()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# example of removing a dot 2\n",
"# page_load_times = sorted(np.random.exponential(1, 10))\n",
"plot([page_load_times[0],page_load_times[0]], [0,1], 'b')\n",
"plot(page_load_times[:4], ys[:4], 'b', drawstyle='steps-post')\n",
"plot(page_load_times[3:6], ys[3:6], 'b:', drawstyle='steps-post')\n",
"plot(page_load_times[5:7], ys[5:7]-1, 'b', drawstyle='steps-pre')\n",
"plot(page_load_times[5:], ys[5:], 'b', drawstyle='steps-post')\n",
"\n",
"plot(page_load_times[3:6], np.array([4,5,5])+.07, 'r', drawstyle='steps-pre')\n",
"plot(page_load_times[3:6], np.array([4,4,5])-.07, 'g', drawstyle='steps-post')\n",
"\n",
"plt.annotate('?', (page_load_times[4]-.0085, 4.15), fontsize=26)\n",
"\n",
"plt.xlabel('page load times (seconds)')\n",
"plt.ylabel('number of page loads below a given time')\n",
"plt.title('Dropping Data but Retaining Distribution Bounds')\n",
"plt.grid()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# example of removing a dot 3\n",
"# page_load_times = sorted(np.random.exponential(1, 10))\n",
"plot([page_load_times[0],page_load_times[0]], [0,1], 'b')\n",
"plot(page_load_times[:4], ys[:4], 'b', drawstyle='steps-post')\n",
"plot(page_load_times[3:7], ys[3:7]-1, 'b:', drawstyle='steps-pre')\n",
"plot(page_load_times[6:8], ys[6:8]-1, 'b', drawstyle='steps-pre')\n",
"plot(page_load_times[6:], ys[6:], 'b', drawstyle='steps-post')\n",
"\n",
"plot(page_load_times[3:6], np.array([4,5,5])+.07, 'r:', drawstyle='steps-pre')\n",
"plot(page_load_times[3:6], np.array([4,4,5])-.07, 'g:', drawstyle='steps-post')\n",
"\n",
"plot(page_load_times[3:7], np.array([4,6,6,6])+.07, 'r', drawstyle='steps-pre')\n",
"plot(page_load_times[3:7], np.array([4,4,4,6.1])-.1, 'g', drawstyle='steps-post')\n",
"\n",
"plt.annotate('?', (page_load_times[5]-.0085, 4.7), fontsize=26)\n",
"\n",
"plt.xlabel('page load times (seconds)')\n",
"plt.ylabel('number of page loads below a given time')\n",
"plt.title('Dropping Data but Retaining Distribution Bounds')\n",
"plt.grid()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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R4rIesbPHw/AAd0PCJxERKS4JTkdmX0X8DbAcUDnwsQRkbS7svJKQGPCRERySXI68uMas241sxeBKwoTSUTS7C9H/SV0BBGRVEhyOnKPrMkNiHrG2hUskYikWo9OGqkgIpJEktORt2Q9Xw3MB35UkDQiknrj5o0DYGCPgYGTiIgUtySnIwc0RxARKQ3XTrgWUBEmIpJLktORGwPHAt2zl3f3awoXS0TSatTRo0JHEBFJhSSnI58AlgJTybpifinp2xc++gh69gydZK1MppyOHUOnaJiqKigvD51CQuvWoVvoCCIiqZCkCNva3Q8peJKAPvoIli8PnSL9ysvhhBNCp5DQnpnzDACH9CzpXxsiIk2WpAibaGa93X1mwdMEUt0DVlkZNMY6KiurqKioCB1DpMFuePEGQEWYiEguSYqw/sDJ8ZXzvwQMcHfvU9BkIpJKYwaPCR1BRCQVkhRhhxY8hYiUjC3KtggdQUQkFZJcouKd5ggiIqVh7OyxAAzqNShwEhGR4pakJ0xEJLFbJkXXd1YRJiJSPxVhIpJXj/7o0dARRERSQUWYiORVl7ZdQkcQEUmFDUIHEJHS8tgbj/HYG4+FjiEiUvRUhIlIXt32ym3c9sptBd/Paaedxuuvv17vMo8//nidy9T3WlN1796dJUuWrDf/qquu4uabby7IPkUkfVSEiUhePTHkCZ4Y8kTB93PPPfewyy671LtMqCJMRCQJFWEiklcd2nSgQ5sODVrn/fffZ6edduKkk06iT58+DB48mBUrVgDw/PPP07dvX3r37s2pp57Kl19Gt7CtqKhgypQpAJSVlXHZZZex++67s/fee/PBBx8wceJEnnzySS666CLKy8uZO3fuN/ur7bWqqir23ntv+vTpw9FHH82nn366Xs6xY8fy3e9+l759+zJw4EA++OADAD7++GMOPvhg+vbtyxlnnIG7f7POddddR69evRg4cCCzZ89u2JspIiVNRZiI5NXDsx7m4VkPN3i92bNnM2zYMGbMmEH79u254447WLlyJSeffDIPP/wwM2fOZPXq1dx5553rrfv555+z9957M336dPbff3/uvvtu9t13X4488khuuukmqqqq2H777b9ZvrbXfvrTn3LjjTcyY8YMevfuzdVXX73efvr378/LL7/Mq6++ypAhQ/jtb38LwNVXX03//v159dVXOfLII1mw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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# example of adding a dot 4\n",
"# page_load_times = sorted(np.random.exponential(1, 10))\n",
"new_point = 0.29\n",
"\n",
"if not added_new_point:\n",
" page_load_times = page_load_times[:5] + [new_point] + page_load_times[5:]\n",
" ys = np.append(ys, [11])\n",
" added_new_point = True\n",
"\n",
"plot([page_load_times[0],page_load_times[0]], [0,1], 'b')\n",
"plot(page_load_times[:4], ys[:4], 'b', drawstyle='steps-post')\n",
"plot(page_load_times[3:8], ys[3:8]-1, 'b:', drawstyle='steps-pre')\n",
"plot([page_load_times[7],page_load_times[7]], ys[6:8], 'b')\n",
"plot(page_load_times[7:], ys[7:], 'b', drawstyle='steps-post')\n",
"\n",
"\n",
"\n",
"plot(page_load_times[3:8], np.array([4,6,6,7,7])+.07, 'r', drawstyle='steps-pre')\n",
"plot(page_load_times[3:8], np.array([4,4,5,5,7.1])-.1, 'g', drawstyle='steps-post')\n",
"\n",
"# point\n",
"i = 5\n",
"yx = page_load_times[i], ys[i]\n",
"plot(yx[0], 0, '.g', markersize=20)\n",
"plot([yx[0], yx[0]], [0, num_points+1], 'g:', markersize=20)\n",
"\n",
"plt.annotate('point to add', (page_load_times[5]+.01, 0.25))\n",
"\n",
"plt.xlabel('page load times (seconds)')\n",
"plt.ylabel('number of page loads below a given time')\n",
"plt.title('Dropping Data but Retaining Distribution Bounds')\n",
"plt.grid()"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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dve3Y49G0uuaa4Kxvqik0Ci3RSSLKEXYvsDo8M75KwED3N13iTUySZeJE5OOQCQeym0RySJKEXZo7FGIdO+edAQi8VBui0gWUW5RMb85ApGUe/zxYDxiRLJxiOSacltEsohyJkwkfjeE9wTWF5UUGuW2iGShIkzyw6RJSUcgEg/ltohkoSJM8kOXLklHIBIP5baIZNEq6QBEAHj44WAQKTTKbRHJQmfCJD/cckswPvLIZOMQyTXltohkoSJM8sOjjyYdgUg8lNsikoWKMMkPnTolHYFIPJTbIpKF+oRJfnjggWAQKTTKbRHJQmfCJD/cfnswPvroZOMQyTXltohkoSJM8sNTTyUdgUg8lNsikoUuR0p+aNcuGPLEvHnzGDBgQIPWGTduHAsWLFj7+qabbmLZsmW5Dq1O06ZN49xzz61zmfLycv785z83aLtJtKVg5Flui0j+UBEm+eH++4OhBctFEVZVVdWkGAYNGsQt1bdEyCKJIqyp7WrRCiC3RSQeKsIkWXPmwJlnwujRcMIJsMkm9L3xxmB+wiorKxk1ahS77LILI0eOXFuETJ8+naFDhzJw4EAOOeQQPvvsMyZNmsS0adM47rjjKCoq4uabb2bBggWUlJRQUlICwLPPPsuQIUPYfffdOeqoo6ioqACgV69eXHnlley7775Mnjx5nRhGjx7N6aefzn777cf222/PE088AcCKFSs48cQT2Xnnndltt9144YUXACgtLWX48OEAXH755YwZM4bi4mJ69+69tjgbO3Ysc+bMoaioiIsuuojPPvuM/fffn6KiIgYMGMBLL720Tgy33HLLem2ZMGECO++8MwMGDOBXv/pVrZ9fZrseeugh5syZw7Bhwxg4cCD77bcf77333to23njjjZSUlNC7d28mT57MmDFj2GGHHRg9evTa7dW2z9tvv51f/vKXa5cZN24c55xzDgD3338/e+yxB0VFRZx22mnNXwjWktuceWZe5LaI5Al3z/th4MCBHqehQ4Mhn7zwwgtJhxC/p55yb9fOvU0bd1g7VLVuHcx/6qnEQvvwww8d8Jdfftnd3U888US/7rrrfNWqVT5kyBD/4osv3N194sSJfuKJJ7q7+9ChQ33q1Klrt9GzZ09ftGiRu7svWrTI99tvP6+oqHB392uuucavuOKKtctde+217r7+cR81apQfcsghXlVV5e+//75vvfXWvnz5cr/++ut99OjR7u7+7rvveo8ePXz58uX+wgsv+GGHHebu7pdddpkPGTLEV6xY4YsWLfLNNtvMV61a5R9++KHvtNNOa/dx/fXX+1VXXeXu7pWVlf7tt9+u93lktuXTTz/1Hj16+BdffOGrV6/2kpIS/9e//lXrOtXtcnf//ve/7++//767u0+ZMsVLSkrWtrGkpMTXrFnjjzzyiHfs2NFnzJjhVVVVvvvuu/ubb76ZdZ9ffPGFb7fddmv3MWzYMH/ppZf8nXfe8eHDh/uqVavc3f2MM87we++9d/0DHZcsue1t2qyX26n4t56F2p5OaWg7MM0j1DeJdMw3s2HAzUBr4G53vyaJOCRBc+bAyJFQyyWuVlVVwfyRI2HGDNhuuwQChB49erDPPvsAcPzxx3PLLbcwbNgwZs6cyUEHHQQEl9m23HLLerc1ZcoU3nnnnbXbW7VqFUOGDFn7/tF1/HLuJz/5Ca1ataJv37707t2b9957j5dffnntGZ/+/fvTs2dP3n///fXWPeyww2jbti1t27ala9eufP755+stM3jwYMaMGcPq1as54ogjKCoqqrMtU6dOpbi4mC222AKA4447jhdffJEjjjhivWWr21VRUcGrr77KUUcdtfa9lStXrp0eMmQIZsbOO+9Mt27d2HnnnQHYaaedmDdvHvPnz8+6z969ezNlyhT69u3L7Nmz2WeffbjtttuYPn06gwcPBmD58uV07dq1znblTB25zerVwZBwbotIfmj2IszMWgO3AQcBnwBTzewxd3+nuWORBN1wQ/BlVJfVq+HGG+HWW5snphrMbL3X7s5OO+3Ea6+91qBtuTsHHXQQEyZMqPX99u3bNziOKNq2bbt2unXr1lRWVq63zP7778+LL77Ik08+yQknnMBFF13Ez372s6zbjLpv+K5da9asoXPnzpSVldW63IYbbghAq1at1om5VatWVFZWssEG2f9UHX300Tz44IP079+fH/3oR2s/n1GjRnH11VdHjjVnWkBui0h+SKJP2B7AB+4+191XAROBwxOIQ5J0//3Rvqjuu6954qnFRx99tLbYmjBhAvvuuy/9+vVj0aJFa+evXr2aWbNmAdCxY0eWLFmydv3M13vttRevvPIKH3zwAQDLli2r9cxVbR566CHWrFnDnDlzmDt3Lv369WP//ffnH//4BwDvv/8+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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# removing better data points\n",
"# page_load_times = sorted(np.random.exponential(1, 10))\n",
"added_new_point = False\n",
"page_load_times = [\n",
" 0.12146025469577916,\n",
" 0.18623819827983728,\n",
" 0.19845379192433754,\n",
" 0.2091002354904542,\n",
" 0.26043419315144166,\n",
" 0.33044754092176754,\n",
" 0.3444238071213646,\n",
" 0.3601231983791873,\n",
" 0.46747868330655723,\n",
" 0.5252607990516103,\n",
"]\n",
"num_points = len(page_load_times)\n",
"ys = np.linspace(1,num_points,num_points)\n",
"plot([page_load_times[0],page_load_times[0]], [0,1], 'b')\n",
"plot(page_load_times[0:2], ys[0:2], 'b', drawstyle='steps-post')\n",
"plot(page_load_times[1:4], ys[1:4], 'b:', drawstyle='steps-post')\n",
"plot([page_load_times[3],page_load_times[3]], [3,4], 'b', drawstyle='steps-post')\n",
"plot(page_load_times[3:6], ys[3:6], 'b', drawstyle='steps-post')\n",
"plot(page_load_times[5:8], ys[5:8], 'b:', drawstyle='steps-post')\n",
"plot([page_load_times[7],page_load_times[7]], [7,8], 'b', drawstyle='steps-post')\n",
"plot(page_load_times[7:], ys[7:], 'b', drawstyle='steps-post')\n",
"\n",
"plot(page_load_times[1:4], [2,2,3], 'g', drawstyle='steps-post')\n",
"plot(page_load_times[5:8], [6,6,7], 'g', drawstyle='steps-post')\n",
"plot(page_load_times[1:4], [2,3,3], 'r', drawstyle='steps-pre')\n",
"plot(page_load_times[5:8], [6,7,7], 'r', drawstyle='steps-pre')\n",
"\n",
"# point\n",
"i = 2\n",
"yx = page_load_times[i], ys[i]\n",
"plot(yx[0], 0, '.r', markersize=20)\n",
"plot([yx[0], yx[0]], [0, num_points], 'r:', markersize=20)\n",
"\n",
"\n",
"# point\n",
"i = 6\n",
"yx = page_load_times[i], ys[i]\n",
"plot(yx[0], 0, '.r', markersize=20)\n",
"plot([yx[0], yx[0]], [0, num_points], 'r:', markersize=20)\n",
"\n",
"plt.annotate('better points to remove', (page_load_times[3]+.017, 0))\n",
"\n",
"plt.xlabel('page load times (seconds)')\n",
"plt.ylabel('number of page loads below a given time')\n",
"plt.title('Dropping Data but Retaining Distribution Bounds')\n",
"plt.grid()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Animation"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.animation\n",
"\n",
"class DistroSketchAnimator():\n",
" def __init__(self, sketch_size, stop_indices, fps=30):\n",
" self.distro_sketch = DistributionSketch(sketch_size)\n",
" self.stop_indices = stop_indices\n",
" self.fps = fps\n",
" num_samples = stop_indices[-1]+1\n",
" self.index = 0\n",
"\n",
"# actual_values = [1,2,2.75,3,5,6,7,8,4] # use with sketch size of 8\n",
"# actual_values = np.random.normal(0, 100, num_samples)\n",
"# actual_values = np.random.uniform(10, 20, num_samples)\n",
"# actual_values = np.random.binomial(4, 0.25, num_samples)\n",
"# actual_values = np.random.exponential(1, num_samples)\n",
" actual_values = np.concatenate([\n",
" np.random.normal(10,1,int(num_samples/2)), \n",
" np.random.normal(-10,1,int(num_samples/2)), \n",
" ]); np.random.shuffle(actual_values)\n",
"\n",
" self.actual_values = actual_values\n",
" \n",
" def advance_to_next_stop_point(self):\n",
" while self.stop_indices and self.index < self.stop_indices[0]:\n",
" self.distro_sketch.add_value(self.actual_values[self.index])\n",
" self.index += 1\n",
" self.stop_indices.pop(0)\n",
" return self.index\n",
" \n",
" def update(self, i=None):\n",
" # todo add text\n",
" point_num = self.advance_to_next_stop_point()\n",
" print(point_num)\n",
" values, low_bounds, high_bounds = self.distro_sketch.get_bounds()\n",
"\n",
" plt.gca().cla()\n",
" plt.xlim(-16, 16)\n",
" plt.ylim(0, 1)\n",
" plot(values, low_bounds/point_num, 'g', drawstyle='steps-post')\n",
" plot(values, high_bounds/point_num, 'r', drawstyle='steps-post')\n",
" plot(sorted(self.actual_values[:point_num]), np.array(range(1,point_num+1))/point_num, 'b:', drawstyle='steps-post')\n",
" plt.xlabel('value')\n",
" plt.ylabel('percentile')\n",
" plt.title('Distribution After Point {}'.format(point_num))\n",
" plt.grid()\n",
" \n",
" def animate(self):\n",
" fig, ax = plt.subplots()\n",
" anim = matplotlib.animation.FuncAnimation(fig, self.update, frames=len(self.stop_indices))\n",
" anim.save('distro_sketch.mp4', fps=self.fps, extra_args=['-vcodec', 'libx264'])\n",
"\n",
"stop_indices = list(range(2,200))\n",
"stop_indices = list(range(2,50)) + list(range(50, 500, 10)) + list(range(500, 5000, 100)) + list(range(5000, 50000, 1000))\n",
"DistroSketchAnimator(sketch_size=20, stop_indices=stop_indices, fps=5).animate()\n",
"\n",
"# for i in range(len(stop_indices)):\n",
"# dsa.update()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Accuracy"
]
},
{
"cell_type": "code",
"execution_count": 148,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x1a2ad266d8>"
]
},
"execution_count": 148,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"num_samples = 1_000_000\n",
"sketch_size = 100\n",
"type = 'expon'\n",
"\n",
"if type == 'norm':\n",
" from scipy.stats import norm\n",
" dist = norm\n",
" dist_args = [0,1]\n",
" actual_values = np.random.normal(0, 1, num_samples)\n",
" title = 'Normal Distribution'\n",
"elif type == 'uniform':\n",
" from scipy.stats import uniform\n",
" dist = uniform\n",
" dist_args = [-5,10]\n",
" actual_values = np.random.uniform(-5, 5, num_samples)\n",
" title = 'Uniform Distribution'\n",
"elif type == 'expon':\n",
" from scipy.stats import expon\n",
" dist = expon\n",
" dist_args = [0, 1]\n",
" actual_values = np.random.exponential(1, num_samples)\n",
" title = 'Exponential Distribution'\n",
"else:\n",
" raise Exception('what is that?')\n",
"\n",
"distro_sketch = DistributionSketch(\n",
" sketch_size, \n",
" increase_num_values_at_extrema=True,\n",
")\n",
"for value in actual_values:\n",
" distro_sketch.add_value(value)\n",
"\n",
"values, low_bounds, high_bounds = distro_sketch.get_bounds()\n",
"\n",
"plot(values, low_bounds, 'g', drawstyle='steps-post')\n",
"plot(values, high_bounds, 'r', drawstyle='steps-post')\n",
"plot(sorted(actual_values), range(1,len(actual_values)+1), 'b', drawstyle='steps-post')\n",
"plot(values, low_bounds, 'g:')\n",
"\n",
"plt.grid()\n",
"plt.legend(['low-bound', 'high-bound'])"
]
},
{
"cell_type": "code",
"execution_count": 151,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAn8AAAFNCAYAAABxFAnAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xd8V/X1+PHXySCQQRjBsAlhQwgEIlMgaIu4UbFuoai4R61WrC2OWmv9UmttHT9aFa221FoHbXHUEQEXW2XvEcJMyJ6fT87vj3sTQ0gghJD7SXKej0ce+bzvfd97z+d8bpKT912iqhhjjDHGmOYhyOsAjDHGGGNMw7HizxhjjDGmGbHizxhjjDGmGbHizxhjjDGmGbHizxhjjDGmGbHizxhjjDGmGbHizxhj6khE8kQkvhb94kRERSTkJLb1goj8sq7LV1lXdzf2YLedKiI31Me63fW9JyLT6mt9xpj6ZcWfMeaUEJEdIlLoFhnlX3/yOq66qq5AUtVIVd1WD+suz1WuiGSJyBcicrOIVPyOVtWbVfVXtVzXD47VR1V3ubH76yH2h0XktSrrP0dVXznZdRtjTo06/xdqjDG1cIGqfuR1EI3EBar6kYhEAxOAPwAjgR/X50ZEJERVffW5TmNM42Ijf8aYBiciz4vIm5XavxWRj8WRIiJpIvJzETnkjmRdXalvtIi8KiIHRWSniPyifIRMRKaLyBIRmSMih0Vku4icU2XZF0Vkr4jsEZHHKh36rHFZEfk1MA74U+URTPdQbm/39XkiskpEckRkt4g8XJfcqGq2qi4ALgemiUiCu/55IvKY+zpGRP7jjhJmishiEQkSkb8C3YF/u3H+rNIh5+tFZBfwSQ2HoXuJyFIRyRaRd0WknbutFBFJq/L57RCRH4jIZODnwOXu9r5x51eMkrpx/cL9rA64n120O688jmkissv9vB+sS96MMbVnxZ8xxgs/BRLdgmsccD0wTb9/3mRHIAboAkwD5opIP3feH4FoIB5nhOw6jhwdGwlsdJd/EnhRRMSd9wrgA3oDScAk4IbjLauqDwKLgdvdw6W3V/Oe8t1Y2gDnAbeIyJQTzoxLVZcCaThFZ1U/ded1AGJxCjBV1WuBXTijiJGq+mSlZSYAA4Cza9jkdcAMoDNOjp6pRYzvA48D/3C3N6SabtPdr4k4n1kkUPXw/xlAP+AsYLaIDDjeto0xdWfFnzHmVHrHHZ0q/7oRQFULgGuAp4DXgDtUNa3Ksr9U1WJV/Qz4L/Ajd5TucuABVc1V1R3A74BrKy23U1X/7J7P9grQCYgVkVjgHOBuVc1X1QPA74Erjrdsbd6oqqaq6neqWqaq3wJ/xym4TkY60K6a6aVubD1UtVRVF1cqnGvysPu+C2uY/1dVXaOq+cAv+T7fJ+tq4ClV3aaqecADwBVVRh0fUdVCVf0G+Aaorog0xtQTO+fPGHMqTanpnD9VXSoi24DTgDeqzD7sFiHlduKMSMUALdx25XldKrX3VdpGgTvoF4lTRIUCe78fCCQI2F2LZY9LREYCTwAJboxhwD9rs+wxdAEyq5n+f8DDwIdujHNV9YnjrGv3CczfiZOrmNqFeUydOfrzCuHIonpfpdcF1DLnxpi6sZE/Y4wnROQ2nAIpHfhZldltRSSiUru72+8QzqhXjyrz9tRik7uBYiBGVdu4X61VdVAtQz7eyNrfgAVAN1WNBl4A5NiL1ExETscp/pYcFYgz6vlTVY0HLgDuEZGzjhPn8eLvVul1d5w8H8I5nB1eKa5gnMPNtV1vOkd/Xj5g/3GWM8acIlb8GWManIj0BR7DOfR7LfAzERlapdsjItLCPSfwfOCf7uHYN4Bfi0iUiPQA7sE5dHxMqroX+BD4nYi0di9E6CUitT00ux/nnLWaRAGZqlokIiOAq2q53iO4sZ0PzAdeU9Xvqulzvoj0ds9lzAH87ldt4qzJNSIyUETCgUeBN918bwJauhe0hAK/wCnay+0H4qTSbWmq+DvwExHpKSKRfH+OoF1xbIxHrPgzxpxK5Vedln+97Z7r9RrwW1X9RlU341yw8FcRKS8q9gGHcUaNXgduVtUN7rw7cEajtuGMiv0NeKmW8VyHc0h2nbv+N3HOnauNPwBT3SuBq7sY4lbgURHJBWZz9KHs4/m3u+xu4EGc8yFrus1LH+AjIA/4EnhOVVPdeb8BfuGeY3nvCWz/r8A8nNy3BO4E5+pjnPf2F5wR1nyci03KlR/azhCRldWs9yV33YuA7UARzmdojPGIHP8cYWOMaTgikoIz4tXV61iMMaYpspE/Y4wxxphmxIo/Y4wxxphmxA77GmOMMcY0IzbyZ4wxxhjTjFjxZ4wxxhjTjNgTPo4hJiZG4+LiTvl28vPziYiIOH7HJsxy4LA8OCwPDsuDw/LgsDw4LA+O6vKwYsWKQ6raoYZFKljxdwxxcXEsX778lG8nNTWVlJSUU76dQGY5cFgeHJYHh+XBYXlwWB4clgdHdXkQkZ3V9z5SkzjsKyIvicgBEVlTw3wRkWdEZIuIfCsiwxo6RmOMMcaYQNAkij+cu9JPPsb8c3DuiN8HmAk83wAxGWOMMcYEnCZx2FdVF4lI3DG6XAS8qs59bb4SkTYi0sl91qcxpplRVcpvcqWAqjNNBMoUfD4ICoagIPCXOe3gYD2yHfL9/NJSCAlx5vv8zvyQUI5sV5pfWgotWoAEgd8PJeVtUXw+p92ypft8u4KSijYopaXO/FatAHHWVVoKLVt9P7+8LQIlJeArhXD31KCq7eJipx0R6bSLiqDM//38o9qFTswV/QuhrMyZr0BhgdMun1+Q73wvX74g38l3+fz8PCfO8vlV27k5sLMwiF1FRRXt4ODv5+dkQ0gItHLb2VkQGvr9/OwsJ7etwp12ViaEtay5fTjDyV2rcCfOrMwj24cznNetwp33eThDCY9w+pSVOf3L236/046IdNo+H2QfhsgoZ5s+nzM/qrXTLi115kdFQ1jY0e20UmHZjkKi20JoC+ezy8mC6LbOeywuctpt2js5qNouKnTa7To4OSssgNzso9vtT3NyXJDvtGNinXZ+HuTlQExHZ9/Oy3XasZ2dzyw3B/JzK7WznWU6dnE/qyxnnTW1szKdGCu3i4uc9QFkHoLSEueZj9sKC8k4CH4fnOY+oLFq+9B+5zMpbx/c53zv0NH5fmCvE2d5e3+68z5jYp32vj3Oz3HMaU57b5qT9/J2epoQFqa0d8+w27NLaNnq+3baTiE8QmkX47RbBwcT06IFgaBJFH+10AXneZnl0txpVvyZJs2vSqHfz77DZeQWltG6g1JcVsaWzUqxHzr28lGiyjdLg/BpGXHDSikuK2PZhy3QkDJ6jSukRJUv54cTGuWnz9n5+FT54vk2hJ9WSp8pOfiBL+e0J6J7Cb0uzcKnytePdKR1v0K6X5aJT5WV93ej9dB8Ov3oIH7gu9viiT4jm/Y/OkCZKpt+PIA2kzNo+6P9KLB52um0vXQH0Zfvx18Ku380hNZXpRNx6X58BcL+K5OInJZGyyn78OcGk3nlMFrduJMWF+7HlxFC3jXJtLh1K8Hn7ce/rwUl004n6CebYdI+ytJawfTT4YENcNYB2B4BM06Hh9ZBykHYFAk3JcNj38HYDFjXGm4bBr/9FkZkwjfRcHcS/G41DMuC5W3hviHwzEoYnANftoOfJ8LzK6B/LiyKgYcS4C/LoFc+fHIa/GogvLIUuhfAB7HwxAB4/SvoXAT/6QS/6wdvfAEdgAd2wDN94e3PoU0pvNEVnu8N/1kMEX74W3f4czx8sAhalMErPWBeT/g41Tm285eeML8bfLTI2SleiId3u8B7i532M73ho1hY8LnTfqovLImBt75w2r/tByvbwj++ctqPDYANUfDaUqf98EDYEQHzljntBxPgYBjMXeG0f5YIeSHwnPvY33uGgF/gD6ud9u1J0NIPc7512jcPc97nE9857euTocsAaOVu/7oR0DsPZq9z2leNhIRs+Ln76OfLRsPIDLh3k9OeMsb5XO/e7LTPOwPO3Qu3bXXak8bD1DSYuc1pnzkBrtkJM3aAT+CHE+D6bXDNLigMgnPHw01b4YrdkBMCF50Bt2+GS/dAZgu4dAz8ZBNcmA77w+CK0XDfBjh3H6S1gmtHws/XwQ8PwPZwmDECHlpbu31vXTRMatVA+14JvN05QPc94OuvG2jfK4RH157AvpdZ4753S+fOPNe3L4GguRR/Us20au9uLSIzcQ4NExsbS2pq6ikMy5GXl9cg2wlklgPwKRzMz2N+aiq7DoZxILMF7fvlkg+sW9aWA3ta0WNKOoXA5v92JGd3OF1v3kYxsPOlOAp3h9P2oXUUAVm/HoB/b0v0T6uclf8sEXJD4PlKvwR9As+4vwTvTYIWwO/cX2q/GQatS6Gz+wdybjJ0LCJowC6CAd+/TyM4voSvRqQTDOR+HktoRiHbz9hPMHBwQ2cyw0rJy8ggCMg91BXNLKZldjbBAJQSVFJEy7w8BAiPKSAqpICYggIEOBSfy2lR+XQsLET8UJSQRce2+cQWF1PmF4KTM+ncIZ/Y0lL8+Fk3/iBdO+Zzms+HP0RZO2kf3bvm06GsjNJWPtZdmE6Pbvl0AIqjfGy4fDdxPQpoDxS2KWHjtB3E9cinHVAQU8Lm67fRs3sB0UB+hyK2XL+N+C5OO6+j0+7duYgoIKdLIdtu2EafjsVEAdndnXa/mGIigMNx+Wy/YRsD2pUQAWTG57H9xm0Mii6hJZDRJ4+dN25jcGsfYcCh/jnsnLmVxAg/FBeTPSiHXTO3MrSln1Bgf2I2u2duJSm0jBBg79As9szcSnKwEgSkDzvMnhZlnC7OL760EZnsbV3K6e5+tmtUJgdjShjutneOPURG10LKT4TeMf4gh+PzSHLb2yceJGdADkPc9taz9lOQdJjB5e1J+ynMCSXBbW85Zx8lhcEMctubzk/HVxLEQLe98cJ0VKG/295wSRoSrPRz2+umphHasow+bnvtFbsJCi1ggNtec9VOwtuUEu+2v7t2J5Hti+mJ836/mb6D6I5FxLnzV1+/nbZdC+nhtlfdtI2YHvl0c9srb9nCab3zKH+Q9Irbt9Cpfy6dgTJRVt2xmc4Dc+gE+EOVb+7cTOdB2XQEfC3L+PbOzXQbnMVpQEkrH9/duZnug7Mr9rW1d26i+6AcYoCiNqWsu3MTPfrlOvte+xLW37WJnn3yaAsUnFbMhrs2ER+fTxt3X9t01yZ698inNXAoJovdd2+iV7dCWgM53QvYevcm+nQuIhLI7pnPtp9som9sERFAVu88tv9kE/1jimkFHO6Xy86fbKR/W2ffyxyYw66fbGRAdKmz7w3OJu0nGxkY6aMFcHBoFnvu2cigVs6+d2D4YdLv2cjgFs6+t9/dtxLdfW/f6Az2tS9hiLvv7T3jEAc6FVXsO+njD3IoroBEt73nrANk9sut2JfSfriP7MSsin1n1+R95J1+uGLf2Xn+XgrHHaJnURFhLVuy48J0ivNCKvadHZfsoaQwmPLyavtlu/H7gujttrddsRstg17l++rVOwkK1op9afN1OwkNK6vYdzb9eDstwv0V7Y03bqNVVCnd3faGm7YS0ba0Yl/acNsWojoU4w5csv7OzUR3LMIduKRbejqp6enUl5P5u9lknvDhHvb9j6omVDPv/wGpqvp3t70RSDneYd/k5GS1q30bRlPLgb9M2XaolLyWxWT4Sln5rbLyqyD6/SiLDF8py/8VwZb/RNHtD5s4VFrKvue74Hu7E/zb/Q/4md7wv9jv27/vA4s7EPL2l0QFB1P6p3h866Lo/9JGwoOC2P9yJ0r3hDH2sX2EBwWx/V9t8WeHcOatuYQHBbE1NRwpDWLUeSWEBQWxdWkooRJE0mg/LYKC2LMxhLAQoX9/aCHC4X1BtGoRRJdYISwoCH+REBYqtGhR3f9R9a+p7Q91ZXlwWB4clgeH5cFRw9W+K1Q1+XjLNpeRvwXA7SIyHxgJZNv5fqaufGVlrNlXTOpqH+ED8jgYVMLS1CCWvRpN59lbOdCiiD2vd6Ds2d7w76UQ6XMOffy/XpC4hnathZC8zpTkR9MlKIyktpEcHh9CRlQ+gxWS+/cj++4wSq4tYuKwYUSHhBDycjBtw4JpEz4eEYEzyqNxf8Yrrl9v53x7sLzd3vl2XZU3cX6V9sgq7fgqbbulljHGNBlNovgTkb8DKUCMiKQBDwGhAKr6ArAQOBfYAhQAP/YmUtNYZOb7eX9lEYWd8kkPKeDrr2DJkzFEPrCFfR2y8H/SAX41CF7aAD3ziUg/Dd/O9vTKD+PM01oSfHZLDrfP5tJB/eneNoTQ3qFEPlBC3y5jaRES5BRvvwbKD3i4x8BSUyGlUyfoVCWg8AZ768YYY5q4JlH8qeqVx5mvwG0NFI5pRAr9fr7Lz2fR1gLm/ymMsEkHSe+RyY5lLeDOYfDEVhiZSfuiNpTRnsSgKKZ3b027qRH4huRy9rgE+rZvQauUYHgAKD87ZQBwQaUNtWn492aMMcZUp0kUf8bUxoFcH8sy8tkcnMOXuwp5d1pXSqbuQifvc67Se20k3eMyGTO4NVemRFD8UjYXpPRiRPdBhKcEw3SAqO9XmFjDhowxxpgAZsWfabJWbC9i0b58tsdksjgjm9UTk2BKNty0jY4hLWgbF8v43m24YlB7EiMi6ZYfRIuQXt+vYHDN6zbGGGMaKyv+TJOx/VAJb67JZUPHg3x8+DA7LxsCcUrE43sZ1bo158w6zJmnR3PN6NF0DAuDjwCivQ7bGGOMaVBW/JlGy1+mvL0ml5WRh/gwM5MVt/eE9Fa0+dshzmrThsm/yWdcz3AuH3MGIUFBMNTriI0xxhjvWfFnGpUiXxmLcrJ46+BBXns8gvz5nQj+9zeM6RDJjfeVMDyiJdePGUtIkMBRd3w0xhhjjBV/JuCVqbI4O5vfLsjh/Z/Gor/fTET3Ykaf34X4oXk8PGo0nVqHUPFIAmOMMcbUyIo/E7BW7SvgrseL2TRoD/v7HSI8vBVdh7Tl/h59uX5Ma1oGB3sdojHGGNPoWPFnAkqJT3l9w2H+7t/N//Zlw6uj6H1de56a0oEpMTGET7WCzxhjjDkZVvyZgJAL/HbXLh6e2pqi/GC6/DmfX/XrztTNSv8OVR93YYwxxpi6suLPeOq7XSXc/kwuy86Bwm3bSLiyB5Oj2/H4yFGEBgd5HZ4xxhjT5FjxZzyRVlTEE7t2MfcfPkp/P4Dhca15cXpfhqREeh2aMcYY06RZ8Wca1P78Uqb8NI/lbQ8gk/dx7aUdueqSIoIP5jAk0go/Y4wx5lSz4s80iCK/nz/t2cOvd+4i6/PBDBgew8IR3Ylr1QqA1FRv4zPGGGOaiyZzUpWITBaRjSKyRURmVTO/u4h8KiKrRORbETnXizibo9/9N4d2I/K5b81ORke3Ztlnwayb176i8DPGGGNMw2kSI38iEgw8C/wQSAOWicgCVV1XqdsvgDdU9XkRGQgsBOIaPNhmZHdRET/ZsoV/7SqmReZA/l+bRGYm2rN0jTHGGC81lZG/EcAWVd2mqiXAfOCiKn0UaO2+jgbSGzC+ZkVVmfb7w/S+J53/Zmby2LkxZG0OY+YYK/yMMcYYrzWJkT+gC7C7UjsNGFmlz8PAhyJyBxAB/KBhQmtedhcVcf3GjfxvYUfa5XZg6f91oleEHd41xhhjAoWoqtcxnDQRuQw4W1VvcNvXAiNU9Y5Kfe7Beb+/E5HRwItAgqqWVVnXTGAmQGxs7PD58+ef8vjz8vKIbAJXur6wtB0LeuahHUq4oTCIKWFl1PZWfU0lByfL8uCwPDgsDw7Lg8Py4LA8OKrLw8SJE1eoavLxlm0qI39pQLdK7a4cfVj3emAygKp+KSItgRjgQOVOqjoXmAuQnJysKSkppyjk76WmptIQ2zlVCvx+bly6jX88FE/H8zP5/NVI4k/wYo7GnoP6YnlwWB4clgeH5cFheXBYHhwnk4emcs7fMqCPiPQUkRbAFcCCKn12AWcBiMgAoCVwsEGjbIJW7M9n5MqV/L14D9Nf28+WV2NOuPAzxhhjTMNpEsWfqvqA24EPgPU4V/WuFZFHReRCt9tPgRtF5Bvg78B0bQrHvD30zOJMTh8Yys6PI3kvMZGXL+1MRCvxOixjjDHGHENTOeyLqi7EuX1L5WmzK71eB4xt6LiaIlXlt7t28UDhTtqPGMSb58ST0i7M67CMMcYYUwtNpvgzDaOgtIyJjxxg6fgdXNG1Ay/9pw2tgoO9DssYY4wxtWTFn6m1HJ+PCa9uZ/Wv+3BJ+2D+9sMYROwwrzHGGNOYWPFnauVAcQnnfPcta3rn86sP2vGLSR28DskYY4wxddAkLvgwp9bKXUXEjS5izWrh3YQEfjGpvdchGWOMMaaOrPgzx7SjsJALVqylOCOEJ9r349z2VvgZY4wxjZkd9jU12phRxOTN31DYwcdXq/2c3jbK65CMMcYYc5ICbuRPRMJF5Jci8me33UdEzvc6ruZm3f5iBp9ext6/dOTDxEQr/IwxxpgmIuCKP+BloBgY7bbTgMe8C6f5OVhSwsVbV8PQLJ6aEkNy69Zeh2SMMcaYehKIh317qerlInIlgKoWit1PpMEczPVzzsq17JJiPnkpnDPa2MOzjTHGmKYkEIu/EhFpBSiAiPTCGQk0p5ivrIyhP8olfXMf/rmoiDPatPE6JGOMMcbUs0As/h4C3ge6icjrOI9km+5pRM2AqnLb5s2kn1XE5eN6MLVzjNchGWOMMeYUCLjiT1X/JyIrgVGAAHep6iGPw2ryfvVtOnMP7+Xnl3Tn1/E24meMMcY0VQFT/InIsCqT9rrfu4tId1Vd2dAxNRdz/p3DQz/qyLg/lvLYhB5eh2OMMcaYUyhgij/gd8eYp8CZDRVIc7K1sJDHZB3tzotn/iVd7Vm9xhhjTBMXMMWfqk48meVFZDLwByAY+IuqPlFNnx8BD+MUk9+o6lUns83G7nChj4u+XUNwGx/L/hpF51YBszsYY4wx5hQJmL/2InKmqn4iIpdUN19V3zrGssHAs8APce4LuExEFqjqukp9+gAPAGNV9bCInFa/76BxUVVGzchl0+6evP92EPGtWnkdkjHGGGMaQMAUf8AE4BPggmrmKVBj8QeMALao6jYAEZkPXASsq9TnRuBZVT0MoKoH6iPoxuqVffvZFJPLuHYdOLuDXeBhjDHGNBcBU/yp6kPuy0dVdXvleSLS8ziLdwF2V2qnASOr9OnrrutznEPDD6vq+3WPuPHaWFDAbZs3kXJ9az4a0tvrcIwxxhjTgERVvY7hCCKyUlWHVZm2QlWHH2OZy4CzVfUGt30tMEJV76jU5z9AKfAjoCuwGEhQ1awq65oJzASIjY0dPn/+/Pp5Y8eQl5dHZGTDPEmjwCdc9uhA5NI05g3JJlDu5teQOQhklgeH5cFheXBYHhyWB4flwVFdHiZOnLhCVZOPt2zAjPyJSH9gEBBd5by/1kDL4yyeBnSr1O4KpFfT5ytVLQW2i8hGoA+wrHInVZ0LzAVITk7WlJSUE3wnJy41NZWG2A7AjZ/toGB7BLNa92ZqSlSDbLM2GjIHgczy4LA8OCwPDsuDw/LgsDw4TiYPAVP8Af2A84E2HHneXy7O+XrHsgzo4x4e3gNcAVS9kvcd4EpgnojE4BwG3lYPcTcaS7KyeFF3cNN7pfwmoY/X4RhjjDHGAwFT/Knqu8C7IjJaVb88wWV9InI78AHO+XwvqepaEXkUWK6qC9x5k0RkHeAH7lPVjHp+GwErI9/Pxb/OosdFrZjT/3inUBpjjDGmqQqY4q+SLSLycyCOSvGp6oxjLaSqC4GFVabNrvRagXvcr2bnqhcOcmhOHL9MaU9kSCB+7MYYY4xpCIFYBbyLczHGRzgjdOYkLc7K4sPhG7jirRLuPK+71+EYY4wxxkOBWPyFq+r9XgfRVOQXlzHji+3EtWvJXy7s4nU4xhhjjPFYkNcBVOM/InKu10E0FZf+MpstlyfwcEQ/IoKDvQ7HGGOMMR4LxOLvLpwCsEhEckQkV0RyvA6qMdpRWEjq4C0MvD6DaYPbeh2OMcYYYwJAwB32VdXAuflcI3fnli2E9Cjk/cvs8W3GGGOMcQTcyJ84rhGRX7rtbiIywuu4GpvH38nm379ox6z2PenW8nj3yDbGGGNMcxFwxR/wHDCa72/SnAc86104jU9pWRlPf5pF6Kr23BlnF3kYY4wx5nuBWPyNVNXbgCIAVT0MtPA2pMblhfR0Dl68nX98mU/riED8iI0xxhjjlUCsDEpFJBhQABHpAJR5G1LjsSuzlF+m7uesNm2Y0rmd1+EYY4wxJsAEYvH3DPA2cJqI/BpYAjzubUiNxxWP5JA9bRj3hvVBRLwOxxhjjDEBJhCv9n1dRFYAZwECTFHV9R6H1ShsKyxk2ZkbGNcxnskDOnkdjjHGGGMCUMAVfyIyClirqs+67SgRGamqX3scWsB7ZMcOQtr6mX+PHe41xhhjTPUC8bDv8zhX+JbLd6eZY1i4soBXr+/AtdqDzmFhXodjjDHGmAAViMWfqKqWN1S1jFqMUIrIZBHZKCJbRGTWMfpNFREVkeR6ijcgPL7kELI9kp/0tsO9xhhjjKlZIBZ/20TkThEJdb/uArYdawH36uBngXOAgcCVIjKwmn5RwJ1AkzqE/G1eHp8nbmPWonQGdLG74hhjjDGmZoFY/N0MjAH2AGnASGDmcZYZAWxR1W2qWgLMBy6qpt+vgCdx7yHYVNzzyV5aBwVzX1w3r0MxxhhjTIALqOLPHcG7WlWvUNXTVDVWVa9S1QPHWbQLsLtSO82dVnndSUA3Vf1P/UbtrXdX5fHxxb0Z+8lA2oaGeh2OMcYYYwKcVDq9LiCISKqqppzgMpcBZ6vqDW77WmCEqt7htoOAT4DpqrpDRFKBe1V1eTXrmok70hgbGzt8/vz5J/N2aiUvL4/IyMg6LTu7JIiv/9uJv0w4SLd2JfUcWcM5mRw0JZYHh+XBYXlwWB4clgeH5cFRXR4mTpy4QlWPe01DwN3qBfhcRP4E/APnSl8AVHXlMZZJAyof8+wKpFdqRwEJQKp74+OOwAIRubDLXG3pAAAgAElEQVRqAaiqc4G5AMnJyZqSklL3d1JLqamp1GU7mwsK+HzpUn52VzDXxo+p/8AaUF1z0NRYHhyWB4flwWF5cFgeHJYHx8nkIRCLv/Iq5tFK0xQ48xjLLAP6iEhPnHMFrwCuqlhYNRuIKW8fa+SvMbnm4TyC2sZw1+gux+9sjDHGGEMAFn+qOrEOy/hE5HbgAyAYeElV14rIo8ByVV1Q33F6bVd+Mcv+GcGAkV3paPf1M8YYY0wtBVzxJyKxOM/y7ayq57i3bBmtqi8eazlVXQgsrDJtdg19U+opXM/8cV8a/GU3f0sY6XUoxhhjjGlEAupqX9c8nBG8zm57E3C3Z9EEoAP5pTy/O50rO53GkNhWXodjjDHGmEYkEIu/GFV9AygD55Au4Pc2pMBy05w88q9O5vpwu6+fMcYYY05MIBZ/+SLSHuciD0RkFJDtbUiBw6/KV6330XFsHmfGRXkdjjHGGGMamYA75w+4B1gAxIvI50AHYKq3IQWO/2ZksC9pP29c3d7rUIwxxhjTCAVi8bcOeBsoAHKBd3DO+zPAL1/PofPgVlwcE3P8zsYYY4wxVQTiYd9Xgf44V/z+EegD/NXTiALEe98V8O3d8Qx+vy8hQYH40RljjDEm0AXiyF8/VR1Sqf2piHzjWTQB5O3Q3bT4YyF/uGSQ16EYY4wxppEKxOGjVe5FHgCIyEjgcw/jCQjZPh+vH9jPtT9oSb/OoV6HY4wxxphGKhBH/kYC14nILrfdHVgvIt8BqqqJ3oXmnbuey6FgRXdu+H07r0MxxhhTD0pLS0lLS6OoqKhW/aOjo1m/fv0pjirwWR6gZcuWiEidlw/E4m+y1wEEGlXlv1+W0uqbDoxsG+51OMYYY+pBWloaUVFRxMXF1eoPeW5uLlFRdouv5p4HVSUjI4OIiIg6ryPgij9V3el1DIFmRW4uh25az9Pd+yBS9w/bGGNM4CgqKqp14WdMORGhffv27N69u87rCMRz/kwVL+zcS6ugIKZ3j/U6FGOMMfXICj9TFye731jxF+D2Zfl4KaUnSZ/1ITok4AZqjTHGNFJZWVk899xzDba9uLg4Dh06BMCYMWOO2ffxxx8/5vxzzz2XrKwsduzYQUJCwgnFkZqayhdffFHRfuGFF3j11VdPaB2NnRV/Ae5vuw6hZxxk+ujme36DMcaY+nes4s/v95/SbVcuvqpTU/GnqpSVlbFw4ULatGlTp21XLf5uvvlmrrvuujqtq7FqMsWfiEwWkY0iskVEZlUz/x4RWSci34rIxyLSw4s4T9Q/fekMenAPN5xl5/oZY4ypP7NmzWLr1q0MHTqU++67j9TUVCZOnMhVV13F4MGDjxpVmzNnDg8//DAAW7duZfLkyQwfPpxx48axYcOGo9afkZHBpEmTSEpK4qabbkJVK+ZFRkYCsHfvXsaPH8/QoUNJSEhg8eLFzJo1i8LCQoYOHcrVV1/Njh07GDBgALfeeivDhg0jLS3tiFFEn8/HtGnTSExMZOrUqRQUFABHjjQuX76clJQUduzYwQsvvMDvf/97hg4dyuLFi3n44YeZM2cOAKtXr2bUqFEkJiZy8cUXc/jwYQBSUlK4//77GTFiBH379mXx4sX1/Gk0rCZxHFFEgoFngR8CacAyEVmgqusqdVsFJKtqgYjcAjwJXN7w0dbekq0FfLWulCfHd7LzQowxpgm7e/NmVuflHbOP3+8nODi41uscGhnJ03361Dj/iSeeYM2aNaxevRpwRsSWLl3KmjVr6NmzJzt27Khx2ZkzZ/LCCy/Qp08fvv76a2699VY++eSTI/o88sgjnHHGGcyePZv//ve/zJ0796j1/O1vf+Pss8/mwQcfxO/3U1BQwLhx4/jTn/5UEdeOHTvYuHEjL7/8Ms899xy5ublHrGPjxo28+OKLjB07lhkzZvDcc89x7733Vht3XFwcN998M5GRkRV9Pv7444r51113HX/84x+ZMGECs2fP5pFHHuHpp58GnCJz6dKlLFy4kEceeYSPPvqoxvwEuiZR/AEjgC2qug1AROYDF+E8JxgAVf20Uv+vgGsaNMI6eODpYnhuBGfvLPE6FGOMMc3AiBEj6Nmz5zH75OXl8cUXX3DZZZdVTCsuLj6q36JFi3jrrbcAOO+882jbtu1RfU4//XRmzJhBaWkpU6ZMYejQodVus0ePHowaNaraed26dWPs2LEAXHPNNTzzzDM1Fn/Hkp2dTVZWFhMmTABg2rRpR7zHSy65BIDhw4cfszBuDJpK8dcFqHzNcxrOzaJrcj3wXnUzRGQmMBMgNjaW1NTUegqxZnl5eUdtR4FN41vQs20bMrccIHXLKQ/DU9XloDmyPDgsDw7Lg6Op5iE6OrpiFOtXHTset/+JjvwBR42SVZaXl0dZWVlFn4KCAsLCwiraRUVF+Hy+inZ2djY+n4/s7Gyio6OPOvRZdVtlZWXk5+dXTFdV8vLyCAsLq+iflJTEwoUL+eCDD7j66qu58847ueqqq45YX15eHq1atapo+/3+inXluaOlld+D3+8nNzeXoKAgcnJyCAsLIzMzs2J6cXExoaGhFctUbqvqEdstz4/f76/IRWFhIaWlpcfMbUNQ1Tr/XDSV4q+6Y6JazTRE5BogGZhQ3XxVnQvMBUhOTtaUlJR6CrFmqampVN3O59nZHFi1ildubUdKx4GnPAavVZeD5sjy4LA8OCwPjqaah/Xr15/QzYrr++bGnTp1Ij8/v2Kd4eHhhISEVLR79erFoUOHKCkpITIykv/9739MnjyZLl26EB8fz/vvv89ll12GqvLtt98yZMiQI9afkpLCu+++yy9+8Qvee+89srKyiIyMrFh/VFQUO3fuJD4+njvuuAO/31+Rk9DQUFq2bEloaCiRkZEEBQVVLJebm4uIVJw3uHv3btasWcPo0aN59913SUlJISoqivj4eDZu3Eh8fDzvvfcewcHBREVFERMTQ05OTsX6wsLCCAsLo2vXrrRr147Vq1czbtw43n77bSZOnEhUVBTBwcFEREQQFRVFcXExIuL5jaZFpM4/F03lgo80oFuldlcgvWonEfkB8CBwoaoePUYdQB58toCw1e24JCbG61CMMcY0Qe3bt2fs2LEkJCRw3333HTU/NDSU2bNnM3LkSM4//3z69+9fMe/111/nxRdfZMiQIQwaNIh33333qOUfeughFi1axLBhw/jwww/p3r37UX1SU1MZOnQoSUlJ/Otf/+Kuu+4CnHMKExMTufrqq4/7PgYMGMArr7xCYmIimZmZ3HLLLRXbv+uuuxg3btwRI6YXXHABb7/9dsUFH5W98sor3HfffSQmJrJ69Wpmz5593O03RlL56pvGSkRCgE3AWcAeYBlwlaqurdQnCXgTmKyqm2uz3uTkZF2+fPkpiPhIVf+rLfSVEdm9hB6nF7Ht3bpdyt7YNNX/7E+U5cFheXBYHhxNNQ/r169nwIABte7f3B9rVs7y4Fi1ahVJSUlHTBORFaqafLxlm8RhX1X1icjtwAdAMPCSqq4VkUeB5aq6APg/IBL4p3vl7C5VvdCzoI/hvcMZlM1bx296JHodijHGGGOamCZR/AGo6kJgYZVpsyu9/kGDB1VHf9u/n9iIEC7tE+11KMYYY4xpYprKOX9NxoEcP29P68Kobd0JCbKPxxhjjDH1y6qLAPPat1mUZYUysV3zONfPGGOMMQ2ryRz2bSq+aLOX2FezuW30sR96bYwxxhhTFzbyF0Cyi/3891Aml3boQEiQPc7NGGOMMfXPir8A8vCreRRNHcnY/OPf6d0YY4w5FeLi4jh06FCt+z/++OPH7TN9+nTefPPNkwmrQS1YsIAnnniiXtb19NNPU1BQUNE+99xzycrKqpd115UVfwFkVcsMWo7IYupgu3+RMcaYxqE2xZ+XfD7fCS9z4YUXMmvWrHrZftXib+HChbRp4+15/Vb8BYh8v5+lPdKY8XQ2LULskK8xxphTKz8/n/POO48hQ4aQkJDAP/7xjyPmFxYWMnnyZP785z8D8NprrzFixAiGDh3KTTfdhN/vZ9asWRQWFjJ06NCKp3G8+uqrJCYmMmTIEK699tqK9S1atIgxY8YQHx9f4yjglClTGD58OIMGDWLu3LkV0yMjI/npT3/KsGHDuOCCCzh48CDgPELu7rvvZsyYMSQkJLB06VIAHn74YWbOnMmkSZO47rrrKCoq4sc//jGDBw8mKSmJTz/9FICnnnqKGTNmAPDdd9+RkJBAQUEB8+bN4/bbbwecUctbbrmFiRMnEh8fz2effcaMGTMYMGAA06dPr4jxlltuITk5mUGDBvHQQw8B8Mwzz5Cens7EiROZOHEicOTI6lNPPUVCQgIJCQk8/fTTAOzYsYMBAwZw4403MmjQICZNmkRhYeEJfbbHpar2VcPX8OHDtSF8+umn+selB5V3Fmvq4cMNss1A8+mnn3odQkCwPDgsDw7Lg6Op5mHdunVHtCdMUH35Zed1SYnT/utfnXZ+vuoZZ5Tq/PlOOyvLmf+vfzntgwed9oIFTnvv3uNv/80339Qbbrihop2VlaWqqj169NDt27frWWedpa+88kpFrOeff76WlJSoquott9xSMS8iIqJiHWvWrNG+ffvqwYMHVVU1IyNDVVWnTZumU6dOVb/fr2vXrtVevXpVG1N5/4KCAh00aJAeOnRIVVUBfe2111RV9ec//7nedtttbs4mVLyHzz77TAcNGqSqqg899JAOGzZMCwoKVFV1zpw5On36dFVVXb9+vXbr1k0LCwvV7/fruHHj9K233tLhw4frkiVLVFX15ZdfrtjGtGnT9PLLL9eysjJ95513NCoqSr/99lv1+/06bNgwXbVq1RGx+3w+nTBhgn7zzTcV+SzPR+X28uXLNSEhQfPy8jQ3N1cHDhyoK1eu1O3bt2twcHDFei+77DL9a/mOUMnKlSuPmobzYIvj1jc28hcg5jwSStANpzO2td3Y2RhjzKk3ePBgPvroI+6//34WL15MdPT3f38uuugifvzjH3PdddcB8PHHH7NixQpOP/10hg4dyscff8y2bduOWucnn3zC1KlTiXGfS9+uXbuKeVOmTCEoKIiBAweyf//+amN65plnGDJkCKNGjWL37t1s3uw8jTUoKIjLL78cgMsvv5wlS5ZULHPllVcCMH78eHJycirOp7vwwgtp1aoVAEuWLKkYhezfvz89evRg06ZNBAUFMW/ePK699lomTJjA2LFjq43rggsuQEQYPHgwsbGxDB48mKCgIAYNGsSOHTsAeOONNxg2bBhJSUmsXbuWdevWHSv9LFmyhIsvvpiIiAgiIyO55JJLKp413LNnT4YOHQrA8OHDK7ZRX+xWLwHAB2RcvI0JkzoQEtTV63CMMcZ4IDX1+9ehoUe2w8Nh4cLCimfaRkcfOT8m5sh2x1pcN9i3b19WrFjBwoULeeCBB5g0aRKzZzsPxho7dizvvfceV111FSKCqjJt2jR+85vfHHOdqor7CNWjhIWFHdGvqtTUVD766CO+/PJLwsPDSUlJoaioqNp1Vd5G1e2VtyMiIo65vXKbN28mMjKS9PT0GvuUxx4UFHTE+wgKCsLn87F9+3bmzJnDsmXLaNu2LdOnT68x9trEVHkbwcHB9X7Y10b+AsB3QF6vbO64Muy4fY0xxpj6kJ6eTnh4ONdccw333nsvK1eurJj36KOP0r59e2699VYAzjrrLN58800OHDgAQGZmJjt37gQgNDSU0tLSin5vvPEGGRkZFf1qKzs7m7Zt2xIeHs6GDRv46quvKuaVlZVVnCf4z3/+kzPOOKNiXvm5ikuWLCE6OvqIEcxy48eP5/XXXwdg06ZN7Nq1i379+pGdnc1dd93FokWLyMjIqPMVyTk5OURERBAdHc3+/ft57733KuZFRUWRm5tbbUzvvPMOBQUF5Ofn8/bbbzNu3Lg6bf9E2chfAHjzq3aEti9l0rh2x+9sjDHG1IPvvvuO++67j6CgIEJDQ3n++eePmP/0008zY8YMfvazn/Hkk0/y2GOPMWnSJMrKyggNDeXZZ5+lR48ezJw5k8TERIYNG8brr7/Ogw8+yIQJEwgODiYpKYl58+bVKp7JkyfzwgsvkJiYSL9+/Rg1alTFvIiICNauXcvw4cOJjIw8okhr27YtY8aMIScnh5deeqnadd96663cfPPNDB48mJCQEObNm0dYWBi33HILt956K3379uXFF19k4sSJjB8//oRzOWTIEJKSkhg0aBDx8fFHHD6eOXMm55xzDp06daq40ARg2LBhTJ8+nREjRgBwww03kJSUVO+HeKsjxxp2bO6Sk5N1+fLlp3Qbqkpot0Lax/vYv6j1Kd1WIEtNTSUlJcXrMDxneXBYHhyWB0dTzcP69esZMGBArfvn5uZWHPZtbiIjI8nLywOOzENKSgpz5swhOTnZy/A8sWrVKpKSko6YJiIrVPW4yWgyh31FZLKIbBSRLSJy1M15RCRMRP7hzv9aROIaPsqjrc3Px//sSm5/vJ4v4zbGGGOMqUaTOOwrIsHAs8APgTRgmYgsUNXKl9pcDxxW1d4icgXwW+Dyho/2SO9mZEC0jxtO9/aGj8YYY0ygKh/1qyq18lUuptaaysjfCGCLqm5T1RJgPnBRlT4XAa+4r98EzpKaLklqQM8+0oJuy9rSKcwu9jDGGGPMqddUir8uwO5K7TR3WrV9VNUHZAPtGyS6GmzNLGbvgnactrF5nsNhjDHNnZ13b+riZPebJnHYF6huBK9qZmrTBxGZCcwEiI2NPaVDyruA0W/AZdlFpKbuOmXbaQzy8vJs+B7LQznLg8Py4GiqeYiMjCQtLY3o6Oga741Xmd/vr/aWIc1Nc8+DqpKdnU1xcXGdfy6aSvGXBnSr1O4KVL1bY3mfNBEJAaKBo25ApKpzgbngXO17qq8wu46meyXbibAcOCwPDsuDw/LgaKp5KC0tJS0tjT179tSqf1FRES1btjzFUQU+ywO0bNmS4uLiOv9cNJXibxnQR0R6AnuAK4CrqvRZAEwDvgSmAp+ojbcbY4zxSGhoKD179qx1/9TU1KNu7dEcWR4c5TfZrosmUfypqk9Ebgc+AIKBl1R1rYg8ivOQ4wXAi8BfRWQLzojfFd5FbIwxxhjjjSZR/AGo6kJgYZVpsyu9LgIua+i4jDHGGGMCSVO52tcYY4wxxtSCPd7tGETkIFD3g+q1FwMcaoDtBDLLgcPy4LA8OCwPDsuDw/LgsDw4qstDD1XtcLwFrfgLACKyvDbP4mvKLAcOy4PD8uCwPDgsDw7Lg8Py4DiZPNhhX2OMMcaYZsSKP2OMMcaYZsSKv8Aw1+sAAoDlwGF5cFgeHJYHh+XBYXlwWB4cdc6DnfNnjDHGGNOM2MifMcYYY0wzYsWfh0RksohsFJEtIjLL63i8ICLdRORTEVkvImtF5C6vY/KSiASLyCoR+Y/XsXhFRNqIyJsissHdL0Z7HZMXROQn7s/EGhH5u4g0i4eZishLInJARNZUmtZORP4nIpvd7229jLEh1JCH/3N/Lr4VkbdFpI2XMTaE6vJQad69IqIiEuNFbA2ppjyIyB1uHbFWRJ6s7fqs+POIiAQDzwLnAAOBK0VkoLdRecIH/FRVBwCjgNuaaR7K3QWs9zoIj/0BeF9V+wNDaIb5EJEuwJ1Asqom4Dy2srk8knIeMLnKtFnAx6raB/jYbTd18zg6D/8DElQ1EdgEPNDQQXlgHkfnARHpBvwQ2NXQAXlkHlXyICITgYuARFUdBMyp7cqs+PPOCGCLqm5T1RJgPs6H2Kyo6l5VXem+zsX5Q9/F26i8ISJdgfOAv3gdi1dEpDUwHudZ3KhqiapmeRuVZ0KAViISAoQD6R7H0yBUdRHO89cruwh4xX39CjClQYPyQHV5UNUPVdXnNr8CujZ4YA2shv0B4PfAz4BmceFCDXm4BXhCVYvdPgdquz4r/rzTBdhdqZ1GMy16yolIHJAEfO1tJJ55GueXWZnXgXgoHjgIvOwe/v6LiER4HVRDU9U9OP/F7wL2Atmq+qG3UXkqVlX3gvMPI3Cax/EEghnAe14H4QURuRDYo6rfeB2Lx/oC40TkaxH5TEROr+2CVvx5R6qZ1iz+g6mOiEQC/wLuVtUcr+NpaCJyPnBAVVd4HYvHQoBhwPOqmgTk0zwO8R3BPaftIqAn0BmIEJFrvI3KBAoReRDnlJnXvY6loYlIOPAgMNvrWAJACNAW55Sp+4A3RKS62uIoVvx5Jw3oVqndlWZyWKcqEQnFKfxeV9W3vI7HI2OBC0VkB84pAGeKyGvehuSJNCBNVctHf9/EKQabmx8A21X1oKqWAm8BYzyOyUv7RaQTgPu91oe3mhoRmQacD1ytzfNebb1w/in6xv192RVYKSIdPY3KG2nAW+pYinPUqFYXv1jx551lQB8R6SkiLXBO5l7gcUwNzv0v5UVgvao+5XU8XlHVB1S1q6rG4ewLn6hqsxvpUdV9wG4R6edOOgtY52FIXtkFjBKRcPdn5Cya4YUvlSwAprmvpwHvehiLZ0RkMnA/cKGqFngdjxdU9TtVPU1V49zfl2nAMPd3R3PzDnAmgIj0BVoAh2qzoBV/HnFP2r0d+ADnl/obqrrW26g8MRa4Fmeka7X7da7XQRlP3QG8LiLfAkOBxz2Op8G5I59vAiuB73B+VzeLpxqIyN+BL4F+IpImItcDTwA/FJHNOFd4PuFljA2hhjz8CYgC/uf+rnzB0yAbQA15aHZqyMNLQLx7+5f5wLTajgbbEz6MMcYYY5oRG/kzxhhjjGlGrPgzxhhjjGlGrPgzxhhjjGlGrPgzxhhjjGlGrPgzxhhjjGlGrPgzxhhjjGlGrPgzxhhjjGlGrPgzxhhjjGlGQrwOIJDFxMRoXFzcKd9Ofn4+ERERp3w7gcxy4LA8OCwPDsuDw/LgsDw4LA+O6vKwYsWKQ6ra4XjLWvF3DHFxcSxfvvyUbyc1NZWUlJRTvp1AZjlwWB4clgeH5cFheXBYHhyWB0d1eRCRnbVZ1g77GmOMMcY0I1b8GWOMMcY0I1b8GWOMMcY0I1b8mRPzwANw//1eR2GMMcaYOrLiz5yYJ56AJ58EVa8jMcYYY0wdWPFnas/v//51RoZ3cRhjjDGmzqz4M7Xz4osQUunOQHv2eBeLMcYYY+rMij9TO7/73ZHtw4e9icMYY4wxJ8WKP1M7mZlHtq34M8YYYxolK/5M7YRUeRhMVpY3cRhjjDHmpHha/InIZBHZKCJbRGRWNfPDROQf7vyvRSSu0rwH3OkbReTs461THL8WkU0isl5E7jzV769Jyc09sm3FnzHGGNMoefZsXxEJBp4FfgikActEZIGqrqvU7XrgsKr2FpErgN8Cl4vIQOAKYBDQGfhIRPq6y9S0zulAN6C/qpaJyGmn/l02EX4/5OQcOc2KP2OMMaZR8nLkbwSwRVW3qWoJMB+4qEqfi4BX3NdvAmeJiLjT56tqsapuB7a46zvWOm8BHlXVMgBVPXAK31vTkp199LSCgoaPwxhjjDEnzcvirwuwu1I7zZ1WbR9V9QHZQPtjLHusdfbCGTVcLiLviUifenof3tq8GdasObXbqDrKFxFhxZ8xxhjTSHl22BeQaqZVfWxETX1qml5dMVu+zjCgSFWTReQS4CVg3FFBicwEZgLExsaSmppabfD1KS8vr87bOePccwkpLCT100/rN6hKIjduJLlSuygykqytW9lQj7k5mRw0JZYHh+XBYXlwWB4clgeH5cFxMnnwsvhLwzkHr1xXIL2GPmkiEgJEA5nHWbam6WnAv9zXbwMvVxeUqs4F5gIkJydrSkpKrd9QXaWmplLn7RQWAtR9+doIOrKmbtmuHR1bt6ZjPW7zpHLQhFgeHJYHh+XBYXlwWB4clgfHyeTBy8O+y4A+ItJTRFrgXMCxoEqfBcA09/VU4BNVVXf6Fe7VwD2BPsDS46zzHeBM9/UEYNMpel8N57PPvn9dVHTqtuMWmEREON/Dw+2wrzHGGNNIeVb8uefw3Q58AKwH3lDVtSLyqIhc6HZ7EWgvIluAe4BZ7rJrgTeAdcD7wG2q6q9pnf+/vfuOk6o8Fzj+e1iWsiw99CKIgKIhClhQo9iuaIxEJTY0mlgSS/RqblRi1EQvaoqaaIy5RjHGaIg1EmM3rqjYFRCsSBEQQYr0suW5fzzneM7Mzu7O7uzs2fJ8P5/5nDrveedl2X3mrUFa1wPHici7wHXAmQ3xOfPquuui/eXL8/ecMPh7/nkLMouKYNOm6Pr118P48aDprfbOOeeca2ySbPZFVR8HHk87d2Vsfyvw3SreOwWYkk2awfkvgW/lmOXGJT7Q49JL4f778/OcMPgrLoa2bW3C5+efh7/9DU45BSZPtuuffgo77JCfPDjnnHOuXvgKH03VvHmwbFl0nL4CR30Kg7/27W37ySe2Pf98C/hCCxbkLw/OOeecqxce/DVV++5r2733hj59ov54+RD2JwyDvxUrbLtuHcyaFd0XD0adc8451yh58NdUhStutG0LXbrkd8WN9Jq/bduia0ti0yq+8QbMnJm/fDjnnHMuZ9UGfyJSICLPNlRmXB2UlUGnTqnLr912G1x7bf09Iz34GzQouvbRR1BQYPs33wz77Vd/z3XOOedcvas2+FPVcmCziHRuoPy4bFRURPvbt1tQFp/q5dxz4fLL6+95W7ZYgFdYaMevvALf/77tv/su9OsHXbtG9/uoX+ecc67RyqbZdyvwrojcKSI3h698Z8xVIz7IYvt2aNcuqp2LKy3NLr3Nm23kbnl55utbttgzQr17wxFHRHnp3Bm6d4+ub9yY3XOdc8451+CyGSL67+DlGovPP4/2RVJr/uK1gqtW2WCQmtx4I1xxBXTsCBMmVL6+ZUvU5BvqHFQGL10KY8akrgKyapWl5ZxzzrlGp8bgT1XvDlbLGBac+lBVs6xScnkRjnIlwDUAACAASURBVLYNxWv+XnopOp9tDdw779h26dLM1zMFf5062XbbNtuPDzhZtQoGD87u2c4555xrUDUGfyIyDrgbWAQIMEBETlPVGfnNmqvS6tXRfljzFwZ/Z5wRXcs2+Atr7b74IvP1rVsrB3/FxdF+p07W/Fzb5zrnnHOuwWXT5+8G4L9U9UBVPQA4HLgpv9ly1YoP7khv9p0/P7q2YUPVabz1Fnz3u9bfLxwpvHJl5nvfeCMa0RvabTc48EDb79AhtX+hB3/OOedco5VN8Feoqh+GB6r6EVCYvyy5GsXn2VNNbfbdc8/oWnVB2BVXwIMPwquvRitzrFtX+b7Fi+36++9XvnbCCVF+4jV/1QWdzjnnnEtUNsHfm8FI33HB68/AW/nOmKvC0qVw8cXRsarV/G3ebPvl5VF/u+qCv7B/35NPRrWF6fcvXpw6p1+6Hj1su3mzN/s655xzTUQ2wd85wDzgAuBC4D3gR/nMlKvGNdekHh94YFQT2KoVvP029Oxpx9UFYUVFtn344ejcBx/AokXR8T//Ge0//njlNNq0sW1paeooY6/5c8455xqtGlf4AO5U1RtV9VhVPUZVb1LVbdW9L1siMl5EPhSR+SJyWYbrbUXkH8H110RkUOza5OD8hyJyeC3SvEVEmm7V1OzZ0f4HH8BvfwsLF6beE9bIxYO/+fNhyBB4+WU7Liuz7Sef2HbgQFutIz5Kd9WqaP/QQyvnJewHWFYGw4dH573mzznnnGu0slnho0cw1Uu9CgLLW4EjgBHASSIyIu22M4C1qroTNsjkV8F7RwAnArsC44E/BkvRVZumiIwButT3Z2lQ8cmWhw+3VTfSp37JVPM3c6b13bv9djuOT81SVASjR0fH4eCN+HyChRm6eR5wAOy1F1x/PTz6qNUUtm/vNX/OOedcI5bNJM+LgJdFZDqwKTypqjfm+Oy9gPmqugBARKYBE7Bm5dAE4BfB/oPAH0REgvPTghrIhSIyP0iPqtIMAsPfACcDx+SY98alV6/U4y5drFZuwwZrEm7bNpoeJlzFIx78hTWFoRUroH//1OAvk44d4bXXouMJE+yc1/w555xzjVY2ff4+Ax4L7u0Ye+WqH7Akdrw0OJfxHlUtA9YB3at5b3Vpng9MV9Xl9ZD35GRaN/fPf049LiqygO/6622Fj4qKKJArLbU04sFf166pAzbCKV/WrrXt3Xdnn78OHWDTpprvc84551wiqq35C2rLilX1p3l4tmQ4lx7ZVHVPVeczBbMqIn2B7wLjasyUyNnA2QC9evWipKSkprfkbOPGjVk/Z481awgWVkt5z7jYPQs+/5wBBQU2H8/atcx86CEGvfcefYHVixcz99lnOTC2ju+60lLKP/+cbsHxOzNmsG79ekavWMG2ffdl7sCBkGX+9qyoYNOSJbxXy3KrTRk0Z14OxsvBeDkYLwfj5WC8HEwu5VBt8Keq5SIyqk4p12wpMCB23B+rZcx0z1IRaQ10BtbU8N5M5/cAdgLmW6sxRSIyP+hLmEJVbwduBxgzZoyOGzeuLp+tVkpKSsj6ObGm2JT3LF4MO+wAwI4DBqT0u9t36FBrCga6t2vHgfvsk5Jk5z59onkCgT369rU+gCJ0HDgw+7wBdO9Oh+Jietay3GpVBs2Yl4PxcjBeDsbLwXg5GC8Hk0s5ZNPnb1bQ3+8BUvv8PVz1W7LyBjBURAYDy7ABHCen3TMdOA14BZgI/EdVNcjPfSJyI9AXGAq8jtUIVkpTVecBvcNERWRjpsCv0Xv//dQRuHEDB0b76ZM1r1plc/GB9ceLrxACNkgjbOIFm7x52DBrvu3QoXZ5bNeucvrOOeecazSyCf66AauBg2PnFMgp+FPVMhE5H3gKKACmquo8EbkaeFNVpwN3AvcEAzrWYMEcwX33Y4NDyoDzgpHJZEozl3w2KplW2Yi7+Wa44ILKfe42bYpq9uLBX5cu1vevqCh1eTawaV9atap98BdfZ9g555xzjU6NwZ+qfj9fD1fVx4HH085dGdvfivXVy/TeKcCUbNLMcE9xXfKbuJoGUnTtatv0QSGbNmWu+eve3YK/tm3h+ONhzpzU91VU1K3mL16L6JxzzrlGpcbRviIyTESeE5G5wfFIEfl5/rPmKlm/vvrrxx9vS79de23q+Y0bU4O/cEWQ7t2jeyZPzhy0FdcyTm7f3pt9nXPOuUYsm6le/gxMBkoBVHUOQfOra2BhX75jj7VgLV2bNnDDDRbUrVgR1eTFa/62bElt9gUQsSbeLhnmv65LzZ83+zrnnHONVjZ9/opU9fVglGyoLE/5cdVZv94CvIceqvnenj2jZuB4n7/t26NAsHMwaUyrar4DtG1buzw2ZM1febkFuX37NszznHPOuWYgm5q/VSIyhGAOPhGZCDTtiZKbqvXroVOn7O8Pl2S74gpb2i300ku2DZeKyxT8/eAHtg0DxWw1ZM3fxRfbKOd33mmY5znnnHPNQDbB33nA/wE7i8gy4L+BH+U1Vy6zzZutZq2uwvmALr/ctm2CJZszBX9hrWH6KOCaNFTNn6qtPFJeDg/nOuuQc84513JkM9p3AXCoiHQAWqnqhpre4/Jk+/baN8PGDRuWulJHmJZkWDAlbBLOdK064Tx/qrV/b7ZKS2HGjKgP5Ftv5ec5zjnnXDOUTZ8/AFTVF2xN2vbtUW1dXfTunXocNgtnCtIuvtimgTnvvNo9I6yZ3LYtalaubxddBLfeavsdOsDChfl5jnPOOdcMZdPs6xqLXGv+wtq8UBicZQr+OnSwkcN1Ge0LVvtXUVH7PNZEFf7xj+j4oINg0aLKcxs655xzLiMP/pqSXGv+iopSj8PBI7kElOnCmr/77rMpZ+bOrb+0AVavTl3ibuxYCzRrmgPROeecc0AWzb4iUgT8BBioqmeJyFBguKo+lvfcuVS5Bn/ptXhnnWVNuz+Pzdm9Zo0NoqirsObvT3+ytJ95Bnbbre7ppVu0KPU4XNN4xYrKNZvOOeecqySbmr+7gG3A2OB4KfC/ecuRq0wVfvc7mDevfmv+OnaEX/86dfqYrl3ha1+r+zPC4O/dd2378cd1TyuTxYtt++9/2xQvPXva8cqV9fsc55xzrpnKJvgboqq/JlrhYwuQp2GcLqNVq2yQw8qV9VvzV5/NvaHWaZXJn39ev+mHNX/77AO77+7Bn3POOVdL2QR/20WkPdEkz0OwmkDXUL74ItqvbfA3alS0X1QEF1wQHedjKpawZi70yCNw//31l/6yZfY5wnkIe/Wy7YoVVot5xBHR2sXOOeecqySb4O8q4ElggIjcCzwHXFIfDxeR8SLyoYjMF5HLMlxvKyL/CK6/JiKDYtcmB+c/FJHDa0pTRO4Nzs8VkakiUlgfn6FB5BL8vfUWjB5t++3awe9/bytwLF1af/mLO/DAyud++MP6S3/1amuWDgPXsIl6yRK49FJ48klrEnbOOedcRjUGf6r6DHAscDrwd2CMqpbk+mARKQBuBY4ARgAniciItNvOANaq6k7ATcCvgveOAE4EdgXGA38UkYIa0rwX2Bn4OtAeODPXz9Bg1qyJ9utSWxdOgxKu5NGuHfTrl3u+Mhk9Gh59NPXcl1/atC+b6mGqyNWrbRRxqLAQiovh+eejcy+/nPtznHPOuWaqyuBPREaFL2AHbD3fz4CBwblc7QXMV9UFqrodmAZMSLtnAnB3sP8gcIiISHB+mqpuU9WFwPwgvSrTVNXHNQC8DvSvh8/QMOLLpW2owwIr3brZNl+TLqf71rfgl7+E446Lzk2eDH36pAaydZEe/IGN8n3tNdvv2hXmzMntGc4551wzVt1ULzdUc02Bg3N8dj9gSex4KbB3VfeoapmIrAO6B+dfTXtvWJVVbZpBc++pwIWZMiUiZwNnA/Tq1YuS+HJoebJx48Zqn9N79mx2DvbXrljB7FrmqfCcc+g5fDjLvvgidXm3fDrgAGS//ejbty9Db7nF+uMBK44/nvfjU8sEaiqD0F7LlrFxyBDei927Z2EhHVSpaN2aL0aNosusWbzSUJ+znmVbDs2dl4PxcjBeDsbLwXg5mFzKocrgT1UPqmuGspSp/TJ9mYaq7qnqfKaazPQ0/wjMUNUXM2VKVW8HbgcYM2aMjhs3LtNt9aqkpIRqn/Phh1/tdi0urv7eqhx7LENr/67clZXBLbd8ddjruefo9e9/VxppXGMZgNV6rl9P0S670DN+b79+sGgRrXbckV6HHALPPce4UaNSp7BpIrIqhxbAy8F4ORgvB+PlYLwcTC7lUF2z78HB9thMr7plNcVSYEDsuD/WrJzxHhFpDXQG1lTz3mrTFJGrgB7AxfWQ/4YTH71aWppcPuqiS5fK5+qyFu/69TBkCKxbV7nZN3xGnz6wyy62/8EHtX+Gc5l8+CGcdlr99Fl1zrlGoLoBH+GwzW9neB1VD89+AxgqIoNFpA02gGN62j3TgdOC/YnAf4I+e9OBE4PRwIOBoVg/virTFJEzgcOBk1Q1D4vO5lE8+Gtq05iEU7IA3B1035w/v/bpvPBCNOo5ve9iGPz17h0Ff++/X/tnOJfJBRfAX/+auqa0c841YdU1+14V7F4dDKr4ShBw5STow3c+8BRQAExV1XkicjXwpqpOB+4E7hGR+ViN34nBe+eJyP3Ae0AZcJ6qlgd5q5Rm8Mg/AYuBV2zMCA+r6tW5fo4GEQ/4KppW3JoS/I0NFomp7cTPW7fC0UdHx8uWpV4Pg79evax2sLAQ3nuv9nl1Lt2mTTBzpu3fdRf84AfJ5sc55+pBjWv7Ag8B6aN7HwRG5/pwVX0ceDzt3JWx/a3Ad6t47xRgSjZpBuez+ayNU1MO/uLNvv2DAdZnnQVHHgl9+2aXxhNPRPv9+sE556ReD/sP9uxpK4zstBN89FHV6W3aBFdfDUcdBd/8ZnZ5cC3TI4/Axo02efgTT9jP1bBhSefKOedyUl2fv51F5Digc1p/v9OBBpozxAFNO/grjM2l3b59tP/II9mnMXu2bT//3Can/vrXU6+H5RMuX9e3r036/Fl6F9LAbbfZ6OMTT4zmQHQuk7vvhsGD4Y47oKAApk5NOkfOOZez6vr8Dcf69nUhtb/fKOCs/GfNfSUe/JWXJ5eP+jR3bvb3vv8+7LhjtJRbunAexDC47NXLVjYZODCa/y/uySdt+9lnzWdgSFlZ6kowLneffgrPPWeDPfr2tfkr777byto555qwKoM/VX1UVb8PHKWq34+9LlDVmQ2Yx5Zr/Xr4xS9shGvHjlazde21Seeq9kaOhLPPtv2XXrJm2tosL7dggTXlVqWoyLZhE3O45Ft5Odx3X+q9ZWUWEB52mB3PbAY/yosXw4gR1uz9/e/X7xcEVasp3XFHG1Bz6aWwfXv9pd+Y3XOPff7vfc+OzzjDap8fr9SrxDnnmpRs+sHNF5GfAYPi96uq93zOt//7P1spA2DAAKuJaIrCZluA/faDQw+tXfC3cqUFN1X53/+12r6JE+14xYro2ptvpt47d6714Tr1VFsG7t13s89HfVu/3ra5zEeoap9l5UobjDB1KowaBT/+cf3kccoUuOIK6xvZs6c1l8+da0v4ta7m14cqvPGG3Tt4sK353Kq6hoZGRtWCvwMOsPyD9fvr1QvuvDN1AJJzzjUx2fw2fhSbX+9Z4N+xl8u3+IjVtEmRm7Q+fWD58uzuffNNa57t2bPqezp1gssvtz5ZYMEPWMAxZ05qv76wpu+b37S+g/lYCm7BgprnhJs925ql+/eHt9+u+7Oeew5efBGuu876pR18MFxzTf1MCfTaa3DllTBpkq0M8+CDcOutVvPVsyf85jdWtrNn21Qob7xhx198AYcfDnvvbbVlBx8Mu+9eu6b+pM2ebfP7TZoUnSsstFrAxx+HVauSy5tzzuUom+CvSFUvVdX7VfWh8JX3nLkomIG6zY3XWHXrBmvXpgRlBZmCpaeegj33tKbaqvr7ZfI//2N9+Y491mr54n+oX3/d0tphhyj4q89BH3/9q003M3ZsavPomjVRTR9Y8ylY7dlFF9XtWStXWsDXrZvV+onAZZdZ8PXAA3X/DGBl8uMfW1+3226Lau3OPdeCwLFj4ZJL7Pzuu1u/uL32goMOgjFjLCD93e/s5/a++yxPBxxQc7C9eXPj6FP397/bv82xafPZT5pk+cu1fJ1zLkHZBH+PiciRec+Jq0wyrWLXDHTtaoHRli12XFLC/kcfHU0CHXr66Wi/upq/dK1awfDhFuBBanP522/D6NFWtiNHwurV2ddC1kTV+miCNSeHAcKsWZaXQYPg44+tyfupp+AnP4HJk2HGDPjkk9o953vfsyD2H/+A7343qhk+5BBrpjz1VDs/dWrdgtvnn7eavKuusv6mcccdB489Bj/9qZX1FVfAvHnWJPzCC1bejz0GF15ogfBJJ1mNa1ERTJgAX35Z+XnLlsExx0BxMbRvz8hLLrEAMgmqMG2a9QsN+4+GRo6EXXeFe+9NJm/OOVcPsgn+LsQCwK0isl5ENojI+hrf5XLXXKchCSd+XrPGtg88gFRUWD+yuHgzYW2Cv9DAgbZdvNi227ZZU/oee9hxOGVMffX7e+stW7pu6lRrzn34YTt/xRU2CGPTJmuSDQcMHHssHH+87Yf31mTzZrj4YuuPNmmSfYZzz42ut2plo1LBguczzoCbb679Z7nhBgsuTz0183URC/ZWr7Y5E0eMsGBw5kxrij7kkNT7Bw+2GsMlSywojJszx/5Nnn7aAuILLqDDwoVWUzh5cuoAlm3brHy/9S0bhDJ0qM0Zefrp1j/21Vdz/3/z6qsWwJ54YubPfcop1l+0LssUOudcI1DjgA9V7VjTPS5P4v22DjoouXzUtzD4W7HCRpCGTdqLFqXeF5+ouS6DBcLg79NP7bV8uQUS4SS9u+1m2/fesz5quZoxw7ZHHgmvvGK1cqtXW7B3ySU2avuuuyzoHTjQAiYRW5KupMSCp+qoWkDyr39Z4HfPPZlrh6+5xppeTz7Zaul+9jOrBcx2Uu0VK2w6nMsuq7yUXrr0tZvDVVwy2WcfK4frroMf/cjuXbzYAsW2ba38dt4ZgNcOO4wDHn4Yrr/eyutPf7Kg7Hvfs5+XoUMtvfJy+zmZO9dqD3/xC2t+vvlmq/194AEr2yVLLA+9e9tE4V26WB++nXaC/fdPLZtp0yw/EyZk/hwnnWRB6X33WV9T55xrYmoM/sTWQpsEDFbVa0RkANBHVV/Pe+5aiIKNG+HnP7d+YPEmtrBZFOwPenMRBn9jxsB3vhM1y8aDP1WbVuOkk+wP9bhxtX9Ot272B37uXBu4sGGDnQ+Dwu7dbW7A2ow8rs5rr1nzbq9esO++8Oc/W3+5igpbTWTDBjv+97/hhBOiwG3//eH++2uewPvZZy3w+/Wvqw8Uu3SxPnhg/e6GDbPtr39dffoLFlhT68svW17igx3qy89+Zv0iL77YmognTrQuAC+/nLJyRkW7dnD77dbset111ldz3jwL3J54woL19MB37VoLuKdMscCwsBBKSy2wGzrU7pk928p/8+bU9+6/v9U6HnWU/VsceSR07pz5M+ywgw0Yuvde+zzNtXuGc67ZyqY65Y/AWODk4HgjcGvectQC9X7ySfuDdc89qRfiwV98dYymLr7e7z//GdX8rV1rAzVmzLBAaetWaw784x+hTZvaP0cEevSw2rYw8IMo+BOxKXRee80GLYTT6tTV669brRNYYAvw299aP7a99rLRx6HRsdUR99/fagXff7/69G+5xUZKX3BB9nnacUebluSuu6ofATxtmtW6nX66Ba1hzWR9Ky62Lzqvvgrf/raN5p46teol06ZMsWbWWbOsTN9+G8aPzxxwde1qNYrz5llwfPrp1hS/dKnV/pWU2AjejRujZvg337SpgsI+h4WF0ZeO6pxyiv17zZqVY4E451zDy2aev71VdZSIvAOgqmtFpA5/iV1VWocjXePLkc2cmTqZbHMK/tLntSsrY9OgQXRYtMhqVOKjc2szyjeTHj2sXEWivmD9+kXX+/eH//zH9mfPhvPPtxrB2tq0yWouzzjDjnfe2f7N1q2zz1RYmLrUXTz4C/sgzp5dddPsunU2SOS882o/7c8ZZ9hyes8+a8+94QarEbvoIqvFevdda04dO9aaS6dPt5rLfDn9dFuf+emnreb3uOOqvlfEagAPO8zuC5fwq06nTtXXcorYq6jIymP0aKt1v+ceGzXdoUPUb7IqEyfaz8rf/mb/fuvX2yCZF1+0oHDRIvuZKC21mtguXawmsazMfh7XrLGfx1at7Ge0Tx8LgHff3V677FJzk7tzztVRNsFfqYgUAAogIj2AellgVkTGA78HCoA7VPX6tOttgb8Co4HVwAmquii4Nhk4AygHLlDVp6pLU0QGA9OAbsDbwKmq2iiWKpAwKIn3a0tfQ7Q5/SEoLq50avOAARb8pc+fVh/BH1ifyTDIiwdP/fvbtl07q2n8z3+sf1xthbWXYQ1W69a2P3s2fOMb0X077GD93MKAD6xvWmGhBWFVBX9PPGHNo+FE1rVx6KFW5nfcYdO3LFliP2v33We1lRdeaN0NHn7YAt94fvOhXTubL/DSS605uibt20erbORL69a2Osoxx1igHa4aU5Vu3axp+MYbLdD7178s0Gvb1gL/4cMtCC0osPTWrrXpblq1sp+L7t1tP1yW77PPrMY7bI4uKIDevdl382a7r6jIajY7drSayzVrLM3t2+16q1YWtHbtmvrq3t1qf4cMsdewYalfQpxzLVI2wd/NwCNATxGZAkwEfp7rg4OA8lbgMGAp8IaITFfV2MzGnAGsVdWdRORE4FfACSIyAjgR2BXoCzwrImG7UVVp/gq4SVWnicifgrRvy/Vz1Iuwr1c8+OvWLfWe5lTzlz51CLAlXhsXl2vwF44S3nFH61v4+eeZ0z/rLFtR5Y036hb8ffyxbePNl2FTdTyYKimxWt1403ebNhYwzJlT9cCTF16wctt779rnrW1bW53igQfsD/+LL1ot1NixNnXJhg1w0011q/Gsq3POgTPPrFtzfj6FtXTZmDTJRqg/+aTVyE6YYGVa1wnZy8ttyp9Zs+yLwGefsWrlSvoOHGi1iGvXWuDXvbvVDnbtas+qqIiasdeutal0Vq+2LyQrV6bOL9m2rf2bjxljX0B22sne/+WXFqRu2GBpVVRYzWT6dvt2ayL/9FP7ErF0qX1pKiiIXq1bWyDaqVPNr7Zt7f2bN1s3l82b7RWu1w0gwk6ffWZfTtq1s9+F4auoKNovLraf606dom1xsffJdC6DbEb73isibwGHAAJ8R1Vr6JyUlb2A+aq6AEBEpgETgHjwNwH4RbD/IPCHYADKBGCaqm4DForI/CA9MqUpIu8DBxP1W7w7SLdRBH8FYd++X/7SOpC3aZP6yw+aV/CXoeluc1gDly4eJNVFWMs4aJAN/EifBmTtWtsOHWqjf+u64kc4Mjm+BnE4Rcnw4dG5QYPslW7kyGi0cPz9V15pzYj/+peNio1P/F0bhxxiwd9JJ9lgCLBBRGH/wbC5uqGINL7Ar7YmTrRR3bvvXj818wUF9uVh2LCvpgD6qKSEvnUZ7BRStVrCTz6xLyizZlk/x7/9zQYf1ZaIjZgeMMDmOxw/3n43lZdHr7IyC0TXr7fXunUWLG7YYMfx/reZ0i8qsvIMu2qo0quszL4cb91a+XdjTfmNB4PVbYuLo1eHDlFgne1LJKqFbdWq8nFtzoWBdLgfbNusXm0Bfdr5Stuwa4NzVchmtO8+wDxVvTU47igie6vqazk+ux+wJHa8FEiv1vjqHlUtE5F1QPfg/Ktp7w2rjjKl2R34UlXLMtyfnKVL4Q9/oGN8SpOnn7YRhxs3pt7bnJp9M0zbsiUe/N1xRzQhcjhRc12F/Sn79s1cI7PPPva8/fazEafpawFn6+OPrd9WvEn7zjttkuQ996z5/bvsAvfeS9HixVYD0r699Vu79tronmzSqcopp1itZ3w1kR/+0Gr8TjghY22sq4FIFEg3ViJWU9i9uw06CkdwV1RYc/WCBRaEd+5sNZ4dO1rNXRiQpG/D4CIXFRX2+239egvkwtq7oiLLS4ag5eWSEsaFQXBFhQ1e2rIlem3eHKW5bl312y++sGA4PI4PrGvkatUTN/7v1di3tTR02TKbN7S2kpw7V8T6f59wQnJ5iMmm2fc2YFTseFOGc3WR6WtJ+r9MVfdUdT7T6OXq7q+cKZGzgbMBevXqRUlJSabb6kWHhQvZ81e/ojgW2H0wYwafFxczYsEC4tMal8yc2ay+yY1LO14TCz5e7NuX8oICawrNsfx3W7iQrwFzP/2UVZnS2nFH2v7jH2xbv57BhYUMXLiQGc8+i7bO5r9GZPd33kG6d+ed9GdcdJGNbK1Bj7IydgX2Ov10tlx2GbNuuokx11/PurFj+ew732HkpZfy5oABbMylPA48sPI6wnfeaT9Xefw5r4uNGzfm9f9eU5H3cmjd2oKptWujWvBGKOtyaNfOXrXoLiKlpbTevJmCLVtotWULBcGrVWkpGgRQGgS/VW2/+t1cUWF9uMNtfD92Tqo6H9QixreiCuXliCrbtmyhXWFh5evhfvz9qkjwvjpfT89LRQWUliLl5VVfD9KtdD3tfMp7aqmHKqV1/HuoCfwdDfv1L1+1igW5dmWKyen3g6pW+wJmZTg3p6b3ZZHuWOCp2PFkYHLaPU8BY4P91sAqLJBLuTe8r6o0g/esAlpnenZVr9GjR2teffZZ+Oshet1xh107/HDVPfeMzjc3vXurTpr01eeb8fjj+fmsr7yi2qOH6qpVNd/7l7/Y8z/6qPbP2Wkn1RNOqP37QnPmqIKWtWunWlio+rWvWV6ef96ul5bWPe0m6Pnwc7dwXg7Gy8F4ORgvB5OpHIA3NYsYLJt5/haIyAUiUhi8LgQW1C3UTPEGMFREBgdTyFhjGgAADupJREFUx5wITE+7ZzoQzFbLROA/wYebDpwoIm2DUbxDgderSjN4z/NBGgRppq0lloD0KU8gmutv48aMo2KbjeXLrd9RoDxfzdr77GN9ZLIZzBDO/7dkSdX3qEZNyfFzy5alTiFTW7vtBvfdx8yHHrIm2lWrrJn6m9+067WsiXTOOeeqkk3w9yOsq8Eyoj50Z+f6YLX+d+djtXbvA/er6jwRuVpEjg5uuxPoHgzouBi4LHjvPOB+bHDIk8B5qlpeVZpBWpcCFwdpdQ/STlamPmgvvGDb7dvrPmqwKWoMTdphv8NwxY+//92m8oj3E7n0UgvK74z9+Kxda/2Gqhq0kg0ROOkkyouKotU5+vTJvX+Vc845l6ba6oRgOpZJqpphhfPcqerjwONp566M7W8FMs67oapTgCnZpBmcX0A0IrhxaN3aXmVl0bkhQ2xbWtoy5uM68shoMuudd648xU1DCmvuli2zlUZOPjnK15FH2qjJG2+0c1dfbdOn/PKX0dJhudT8xe2/v009c+aZ9ZOec845F1Nt8Keq5SIyAbipgfLT8rRvnzr1Qdj8GQZ/v/2tjUJtrh57LBpwUNPyZvkWTuz7s5/Z+q6hBx6w4O/pp20qix/+0OYEPOwweC82M1F9BX8FBbaqhXPOOZcH2TT7viwifxCRb4rIqPCV95y1FOl93cL+ZGHw95Of2OSmzVVjaO7NZNYsm5z5mGOikbAzZlg/zZ/+1I7fey910uVcmn2dc865BpJN8LcvtpLG1cANweu3+cxUixJO3jxunNUopQd/rmHNm2cBN9ggkb33tvnQvvzSVl0YOdJWCwn98pfRfp8+DZpV55xzri6yWeHjoIbISIsVDuooLLRZ5T34S9aIETYR7g032BJYu+5q5+fNs+Dv5JNTayv33z9aF7ipr1jhnHOuRchmhY9ewLVAX1U9IlhXd6yqJj9atjkIA7zCQgsitm+3Yw/+krPHHtbPcswYG/wB8NRTtiLAbrvZ8fTp8M47FrAvWGDTyTjnnHNNQDbNvn/Bpk7pGxx/BPx3vjLU4sSDv8JCG/kbLqDuwV9y9t3XavJ22MH6+T30kJ0fNsy23/62rbsL1tz7jW8kk0/nnHOulrIJ/r6mqvcDFfDV/Hzlec1VSxJO3ltYGDUblpbay5sRk9eqldUEhqN6w4mgnXPOuSYqm+Bvk4h0J1gLV0T2AdblNVctSVi716ZNFOxt3+7Nvo1JvFbPgz/nnHNNXDZrRl2MLac2REReBnoQLZPmchWv+QuDPQ/+Gpedd47287UMnXPOOddAshnt+7aIHAgMBwT4UFVL856zliLe5y+s+du6FSoqPPhrLOLBn3POOdfEZTPatx1wLrA/1vT7ooj8KVh6zeUqU/C3eXPqNZcsD/6cc841I9k0+/4V2ADcEhyfBNxDFWvuulrKNOAjnOvPg7/GoXdv2x7kU14655xr+rIJ/oaranwei+dFZHa+MtTipE/1Al7z19iI2Fx+PXoknRPnnHMuZ9mM9n0nGOELgIjsDbycy0NFpJuIPCMiHwfbrlXcd1pwz8ciclrs/GgReVdE5ovIzSK25EJV6YrIJBGZE7xmikjjmZTNa/6ahsGDobg46Vw455xzOcsm+NsbmCkii0RkEfAKcGAQfM2p43MvA55T1aHAc8FxChHpBlwVPH8v4KpYkHgbcDYwNHiNryHdhcCBqjoSuAa4vY75rn8FBbZt186DP+ecc87lXTbNvuNrvqXWJgDjgv27gRLg0rR7DgeeUdU1ACLyDDBeREqATqr6SnD+r8B3gCeqSldVZ8bSfRXoX58fJiflwXzZ7dpFwd7ll9vWgz/nnHPO1bNspnpZnIfn9lLV5UH6y0WkZ4Z7+gFLYsdLg3P9gv3089mmewYWKDYO8eAvrPmbN8+2YQ2gc84551w9yabmr05E5Fmgd4ZLl2ebRIZzWs35bPJ0EBb87V/NPWdjTcr06tWLkpKSbJKus69//jndgQ8//ZTNIuwRu/bJu++yJM/Pbyw2btyY97JuCrwcjJeD8XIwXg7Gy8F4OZhcyiFvwZ+qHlrVNRFZISJ9gtq5PsDKDLctJWrCBWuqLQnO9087/1mwX2W6IjISuAM4QlVXV5Pv2wn6BI4ZM0bHjRtX1a31o3NnAIbvvjvstFPKpSF9+jAk389vJEpKSsh7WTcBXg7Gy8F4ORgvB+PlYLwcTC7lkM2Aj3yYDoSjd08DHs1wz1PAf4lI12Cgx38BTwXNuhtEZJ9glO/3Yu/PmK6IDAQeBk5V1Y/y8YHqrDRYLKV9+2jkb2jLlobPj3POOeeataSCv+uBw0TkY+Cw4BgRGSMidwAEAz2uAd4IXleHgz+Ac7BavPnAJ0R9+DKmC1wJdAf+KCKzROTNPH++7FUX/PXrV/l+55xzzrkc5K3ZtzpBs+shGc6/CZwZO54KTK3ivt1qke6Z8XQble3bbdu+fTTtC1jgd/75yeTJOeecc81WUjV/LlRVzd/EidDK/3mcc845V788ukhaVcFfUVEy+XHOOedcs+bBX9LCZt+2bVODv3XrksmPc84555o1D/6SFk7y3Lp1avD30kvJ5Mc555xzzZoHf0nTYH7qVq1SB3z8/vfJ5Mc555xzzZoHf0mrqLBtq1apNX8+zYtzzjnn8sCDv6T95jeUFhdD376pwV/HjsnlyTnnnHPNViLz/LmY447j5e7dGde2LWzdGp334M8555xzeeA1f42JT/XinHPOuTzz4K8xadMm2hdJLh/OOeeca7Y8+GtMCgvhssvgG99IOifOOeeca6Y8+GtsrrsOZs1KOhfOOeeca6Y8+HPOOeeca0E8+HPOOeeca0E8+HPOOeeca0E8+HPOOeeca0FEw7VlXSUi8gWwuAEe9TVgVQM8pzHzMjBeDsbLwXg5GC8H4+VgvBxMpnLYQVV71PRGD/4aARF5U1XHJJ2PJHkZGC8H4+VgvByMl4PxcjBeDiaXcvBmX+ecc865FsSDP+ecc865FsSDv8bh9qQz0Ah4GRgvB+PlYLwcjJeD8XIwXg6mzuXgff6cc84551oQr/lzzjnnnGtBPPhLkIiMF5EPRWS+iFyWdH6SICIDROR5EXlfROaJyIVJ5ylJIlIgIu+IyGNJ5yUpItJFRB4UkQ+Cn4uxSecpCSJyUfB/Yq6I/F1E2iWdp4YgIlNFZKWIzI2d6yYiz4jIx8G2a5J5bAhVlMNvgv8Xc0TkERHpkmQeG0Kmcohd+x8RURH5WhJ5a0hVlYOI/DiII+aJyK+zTc+Dv4SISAFwK3AEMAI4SURGJJurRJQBP1HVXYB9gPNaaDmELgTeTzoTCfs98KSq7gx8gxZYHiLSD7gAGKOquwEFwInJ5qrB/AUYn3buMuA5VR0KPBccN3d/oXI5PAPspqojgY+AyQ2dqQT8hcrlgIgMAA4DPm3oDCXkL6SVg4gcBEwARqrqrsBvs03Mg7/k7AXMV9UFqrodmIb9I7YoqrpcVd8O9jdgf+j7JZurZIhIf+BbwB1J5yUpItIJOAC4E0BVt6vql8nmKjGtgfYi0hooAj5LOD8NQlVnAGvSTk8A7g727wa+06CZSkCmclDVp1W1LDh8Fejf4BlrYFX8PADcBFwCtIiBC1WUwznA9aq6LbhnZbbpefCXnH7AktjxUlpo0BMSkUHAHsBryeYkMb/DfplVJJ2RBO0IfAHcFTR/3yEiHZLOVENT1WXYt/hPgeXAOlV9OtlcJaqXqi4H+8II9Ew4P43BD4Anks5EEkTkaGCZqs5OOi8JGwZ8U0ReE5EXRGTPbN/owV9yJMO5FvENJhMRKQYeAv5bVdcnnZ+GJiJHAStV9a2k85Kw1sAo4DZV3QPYRMto4ksR9GmbAAwG+gIdROSUZHPlGgsRuRzrMnNv0nlpaCJSBFwOXJl0XhqB1kBXrMvUT4H7RSRTbFGJB3/JWQoMiB33p4U066QTkUIs8LtXVR9OOj8J2Q84WkQWYV0ADhaRvyWbpUQsBZaqalj7+yAWDLY0hwILVfULVS0FHgb2TThPSVohIn0Agm3WzVvNjYicBhwFTNKWOVfbEOxL0ezg92V/4G0R6Z1orpKxFHhYzetYq1FWg188+EvOG8BQERksIm2wztzTE85Tgwu+pdwJvK+qNyadn6So6mRV7a+qg7Cfhf+oaour6VHVz4ElIjI8OHUI8F6CWUrKp8A+IlIU/B85hBY48CVmOnBasH8a8GiCeUmMiIwHLgWOVtXNSecnCar6rqr2VNVBwe/LpcCo4HdHS/NP4GAAERkGtAFWZfNGD/4SEnTaPR94Cvulfr+qzks2V4nYDzgVq+maFbyOTDpTLlE/Bu4VkTnA7sC1CeenwQU1nw8CbwPvYr+rW8SqBiLyd+AVYLiILBWRM4DrgcNE5GNshOf1SeaxIVRRDn8AOgLPBL8r/5RoJhtAFeXQ4lRRDlOBHYPpX6YBp2VbG+wrfDjnnHPOtSBe8+ecc84514J48Oecc84514J48Oecc84514J48Oecc84514J48Oecc84514J48Oeccw1IRDYmnQfnXMvmwZ9zzjnnXAviwZ9zzuVARH4lIufGjn8hIleJyHMi8raIvCsiEzK8b5yIPBY7/oOInB7sjw4Wan9LRJ4KlzZzzrn64MGfc87lZhpwQuz4eOAu4BhVHQUcBNyQ7YLrwVrXtwATVXU0Nov/lPrNsnOuJWuddAacc64pU9V3RKSniPQFegBrgeXATSJyALbYej+gF5DN+qPDgd2wJbwACoL0nHOuXnjw55xzuXsQmAj0xmoCJ2GB4GhVLRWRRUC7tPeUkdr6El4XYJ6qjs1rjp1zLZY3+zrnXO6mASdiAeCDQGdgZRD4HQTskOE9i4ERItJWRDoDhwTnPwR6iMhYsGZgEdk175/AOddieM2fc87lSFXniUhHYJmqLheRe4F/icibwCzggwzvWSIi9wNzgI+Bd4Lz20VkInBzEBS2Bn4HzGugj+Oca+ZEVZPOg3POOeecayDe7Oucc84514J48Oecc84514J48Oecc84514J48Oecc84514J48Oecc84514J48Oecc84514J48Oecc84514J48Oecc84514L8Px3baxwcZeJsAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 720x360 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# distribution and percentile_error \n",
"min_val = np.min(actual_values)\n",
"max_val = np.max(actual_values)\n",
"evaluation_points = np.linspace(min_val,max_val,100000)\n",
"true_percentiles = dist.cdf(evaluation_points, *dist_args)\n",
"sketch_percentiles = distro_sketch.get_estimated_percentile_for_array_of_values(evaluation_points)\n",
"\n",
"plt.subplot(2, 1, 1)\n",
"plot(evaluation_points, true_percentiles, 'c')\n",
"plot(evaluation_points, sketch_percentiles, 'b:')\n",
"plt.title(title)\n",
"plt.ylabel('percentile')\n",
"plt.legend(['true distribution', 'sketch approximation'])\n",
"plt.grid()\n",
"\n",
"\n",
"plt.subplot(2, 1, 2)\n",
"plot(evaluation_points, (true_percentiles-sketch_percentiles), 'r-')\n",
"plt.xlabel('value')\n",
"plt.ylabel('percentile error')\n",
"plt.grid()\n"
]
},
{
"cell_type": "code",
"execution_count": 152,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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mpaWpnl5eXr55ZfrgAEDdNq0aXUxzpw5U4cNG6bp6el6++23q6rqo48+qmFhYTpo0CDNzc1t8P0e2H9GRoZmZGToww8/rKqqmzZt0gEDBuhVV12l6enpetppp2lFRUWT31dL/A61FZ999lmgQzCNWE6Ck+UluAz8eLGO+s+8Ft8PsEh9rad87RgsjyYKwIeAWd7ns4A/NPGe9sAmINH72AS0P9K+grEAfPPNN/Wqq66qaxcVFamqp0DZtGmTnnrqqfrCCy+oqifWs88+W2tqalRV9ZprrqnbFhMTUzfGypUrtV+/fnUFTkFBgap6iqhJkyapy+XSVatWae/evZuM6UD/iooKzcjI0H379qmqKqAvv/yyqqredddddcXZ+PHj6z7D559/rhkZGarqKQCHDh1aVzjNnj1bp0+frqqqa9as0R49emhlZaW6XC4dO3asvvXWWzps2DBdsGCBqupBBeDFF1+sbrdb33nnHY2Li9MVK1aoy+XSoUOH6tKlSxvE7nQ6dfz48bp8+XJVVU1JSan7Pg58v3v37tVFixbpoEGDtKysTEtLSzU9PV2XLFmimzZt0pCQkLpxL7roIn3ppZea/L6sADx29kct+FhOgpPlJbiEp1Zo0vjdLb6foykAT6hjAEXkVeAroL+I5IvIlcADwGkisg44zdtGRHJE5G8AqloI/B741vu42/vaccvNheef9zyvrfW0X37Z066o8LS9q4cUF3vab73lae/b52m//77nnre7dh15f4MHD+bjjz/m5ptvZv78+SQkJNRtO++887j88suZOnUqAJ988gmLFy9m+PDhZGVl8cknn7Bx48aDxvz000+ZNGkSSUme6xO1b9++btv555+Pw+EgPT2d3bt3NxnTY489xpAhQxg5ciTbtm1j3bp1ADgcDi6++GIAJk+ezIIFC+rec+mllwIwbtw4SkpK6o6vO/fcc4mKigJgwYIFTJkyBYABAwbQs2dPfvjhBxwOB88//zxTpkxh/PjxjB49usm4zjnnHESEwYMHk5yczODBg3E4HGRkZLB582YA3njjDYYOHUp2djarVq1i9erVh/v6WbBgARdccAExMTHExsZy4YUX1t2bOC0tjaysLACGDRtWtw9jjDFtW9L0HXQ+04c/8n50Qh0DqKqXHmLTqU30XQRcVa/9HPBcC4XmN/369WPx4sW899573HLL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\n",
"text/plain": [
"<Figure size 720x360 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# distribution and value_error \n",
"from scipy.stats import norm\n",
"delta = .001/100\n",
"evaluation_points = np.linspace(0+delta,1-delta,100000)\n",
"true_values = dist.ppf(evaluation_points, *dist_args)\n",
"sketch_values = distro_sketch.get_estimated_value_for_array_of_percentiles(evaluation_points)\n",
"\n",
"plt.subplot(2, 1, 1)\n",
"plot(evaluation_points, true_values, 'c')\n",
"plot(evaluation_points, sketch_values, 'b:')\n",
"plt.title(title)\n",
"plt.ylabel('value')\n",
"plt.legend(['true distribution', 'sketch approximation'])\n",
"plt.grid()\n",
"\n",
"plt.subplot(2, 1, 2)\n",
"error = true_values-sketch_values\n",
"plot(evaluation_points, error, 'r-')\n",
"plt.xlabel('percentile')\n",
"plt.ylabel('value error')\n",
"cutoff_index = int(len(error)/100)\n",
"plt.ylim(min(error[cutoff_index:-cutoff_index]),max(error[cutoff_index:-cutoff_index]))\n",
"plt.grid()"
]
},
{
"cell_type": "code",
"execution_count": 140,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnoAAAFNCAYAAACXPcKEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3XmcXfP9x/HXJ5NdIouMbJKZCBlCrUGCkFpqrSh+KNVYU1UtLUqrRdOiaG2l1aCW+vmpXdoqUkzsWSxJBFlEyCabWCaZLJP5/P74nmtuJjOTmbnLuffO+/l4nMc595xzz/me+53kfu53NXdHRERERApPq7gTICIiIiKZoUBPREREpEAp0BMREREpUAr0RERERAqUAj0RERGRAqVAT0RERKRAKdATiYGZXWVmD8SdDmk5zGyEmS2IOx2ZZmYVZrZttH2vmf0u7jSJxEmBnkiGmNkpZjYl+uJZbGb/MbP9405XnKJgozr6TJKXYXGnLcHMSs3Mzax1Bq7d1czuM7Ol0XJVreP7mtkkM/vKzKY19PfSiGu5mW2XQlrLzWxNlD/LzexxM+vd3OtlQpTGs5P3uXsnd58bV5pEco0CPZEMMLOfATcD1wA9gf7An4GRcaYrRyyKvoyTl9drn2RBq83t25wMBWzdzaxNM956E9ARKAX2Bk4zszMS1wTGATcAXYHrgX+aWbemXiuNznf3TsCgKE03NfUCmfj8RaTxFOiJpJmZdQHGAD9y98fdfZW7r3f3f7r7JfW85xgzm2Fmn0elFDsmHbvUzBZGpTwzzezgaH8rM7vMzD40sxVm9nAULNRZTWdm88zskGj7KjN71Mz+EV33LTPbtYFn2tfMJpvZF9F636Rj5Wb2WzN7NbrWc2bWo5mfXbmZXW1mrwKrgW3r2dfHzMaZ2WdmNsfMzkm6RuLZHjCzL4HT67jPUWb2tpl9aWbza5WGvRStP2+gtPFQYIGZ/dHMdm7CI34buN7dV7v7POBu4Mzo2L7AEnd/xN03uPsDwDLguKZey8wSzzA1eoaTkp79oqgEcHFjA0N3/wx4DNg5ukY7M/uDmX1iZkvM7A4z6xAdG2FmC6K/20+Be6L9I83snegz/9DMDo/2dzGzu6P0LDSz35lZUXTsdDN7JbrXSjP7yMyOiI5dDQwHboue8bZof70lmWZ2dJSGz83sNTPbpTHPL5LPFOiJpN8woD3wRGNONrNBwP8BFwLFwNOEkpy2ZlYGnA/s5e6dgcOAedFbfwIcCxwI9AFWArc3IZ0jgUeA7sCDwJN1lVJFweO/gVuBrYAbgX+b2VZJp50CnAFsDbQFLm5COmo7DRgNdAY+rmff/wELCM99AnBNIgBOerZHCaVQ/1vHPVYB34+OHwX80MyOjY4dEK271lfa6O7/AA4GqoHnouD3vAZK35JZre2dk7atjnMbCiTrvJa7J55h1+gZ/hG97gV0AfoCZwG3NybNUeB+PPB2tOs6QinfbsB20fWuSHpLL8LfVQkw2sz2Bu4HLiF85gdQ83d8H1AVXWd34FtAcnXsPsBMoAehlPNuMzN3vxx4majU0d3P38wz7AH8DfgB4e/4r8A4M2u3uecXyWcK9ETSbytgubtXNfL8k4B/u/t4d18P/AHoQCjh2QC0AwabWRt3n+fuH0bv+wFwubsvcPe1wFXACU2oKnvT3R+N7nkjITgdWsd5RwGz3f3v7l7l7v8HfEAoUUq4x91nuXsl8DAhAKhPn6hEJXnZIun4ve4+I7rX+tr7CEHE/sCl7r7G3d8B7iIEgwmvu/uT7l4dpWkj7l7u7tOj49MIgeOBDaR5E+7+blRC2w+4EhgBfGRmD5nZlvW87RngMjPrHJU6nUmofgV4LfpsvmtmbcxsFDAw6XhTrlWf9cCYqIT5aaACKGvg/FvN7HNgKrAY+JmZGXAO8FN3/8zdvyI0UTg56X3VwJXuvjb6/M8C/hb9jVe7+0J3/8DMegJHABdGJd9LCdXDydf62N3vdPcNhKCwN6E5RFOdA/zV3SdGJab3AWup+29epGAo0BNJvxVAjyYEXH2oKbnC3auB+UBfd59DKOm7ClgaBRF9olNLgCcSwRLwPiEwbOyX4Pxa90yUkDWYvsjHhFKchE+TtlcDnRq47yJ371prWVVXuurZ1wdIBBj1paeua3zNzPYxsxfNbJmZfQGcSygxarIoAHmXEAx9RihVq6/93k+ASmA28BQ1JZO4+wpCSeTPgCXA4cB/E8ebcq0GrKj1A2RzefWTKH/6uvup7r6MUOrcEXgz6W/vmWh/wjJ3X5P0uh/wIZsqIXxWi5Ou9VdCyXDC139b7r462mwozfUpAS5K/oERpauuv3mRgqFATyT9XgfWEKpVG2MR4UsICB0OCF9ACwHc/UF33z86xwnVZhCCmSNqBUzt3X0hoWqyY9I1i9j4i5joHonjrYBtorQ0mL5I/0T6MsA3s28R0N3MOjeQnrqukexBQseHfu7eBbiDmmrQzb0XADPrFLUhewF4ixBonuTuO0dB26YPEUrATnX3Xu6+E+H/4ElJxye4+17u3p1QQlmWfLwp18qg5YQAc6ekv7suUaeNr5NX6z3zCaWTtc0nlKr1SLrWltHzNEaj8irpXlfX+vfSMSqhFilYCvRE0szdvyC0V7rdzI41s45RVdwRZnZ9HW95GDjKzA6O2shdRPjye83MyszsoKgd0RrCF+yG6H13AFebWQmAmRWbWaJX7yygfdTpoA3wK0IVcLI9zey4qOTxwuieb9SRvqeBQRaGi2kdNewfDPyrOZ9Pqtx9PqGa81ozax81qD+Lutvi1aczoVRwTdR+7JSkY8sIVY/b1vfmqCPBIkK1+18Jpa/nufvkhm5qZgPNbCszK4o6FYwGfpd0fPfob2VLQhX+And/tjnXIpQK1vsMzRWV/t4J3GRmW0dp6WtmhzXwtruBM6K/8VbR+Tu4+2LgOeCPZrZldGygmTW2Gr0pz3gncG5UmmtmtkX076PzZt8pkscU6IlkgLvfSKiC+xUhcJhP6FTxZB3nzgS+B/yJUFrybeDb7r6OEJz9Ptr/KaFK65fRW28hlEo9Z2ZfEYK0faJrfgGcR2i7lijhq12t9xQhUFlJKD06LqlNXHL6VgBHEwLQFcDPgaPdfXkTP5aEPrbpOHrHN/Ea3yUMK7KI0OnlSncf34T3nweMiT63KwjBNvB19eDVwKtRFV9dbbhmAju4+xHu/o+ojWRj7AlMB74CrgVOdfcZScd/Tsjr+YS2aN9JHDCz4WZW0YRrXQXcFz3DiY1MX2NdCswB3rDQs/m/NNDWz90nETrr3AR8AUygppT4+4QOPO8R/hYfJTx7Y9xCaJe60sxubehEd59CaKd3W3SfOdTRI1uk0Jh7U0q+RaQQWBhOZDt3/17caRERkcxRiZ6IiIhIgVKgJyIiIlKgVHUrIiIiUqBUoiciIiJSoBToiYiIiBSoxo7cnze6du3q221X53zWkgdWrVrFFltssfkTJScp//KX8i6/Kf/y15tvvrnc3WsPaJ82BRfo9ezZkylTpsSdDGmm8vJyRowYEXcypJmUf/lLeZfflH/5y8xqTzGZVqq6FRERESlQCvRERERECpQCPREREZECpUBPREREpEAp0BMREREpUAr0RERERAqUAj0RERGRAqVAT0RERKRAKdATERERKVAK9EREREQy7cEHYcKErN9WgZ6IiIhIpl16Kdx/f9Zvq0BPREREJNMqK6FDh6zfVoGeiIiISKatXq1AT0RERKTguKtET0RERKQgrV0b1gr0RERERApMZWVYK9ATERERKTCJQK9jx6zfWoGeiIiISCapRE9ERESkQCnQExERESlQCvRERERECpQCPREREZECpUBPREREpECtXh3WCvRERERECkxLLdEzs8PNbKaZzTGzyxo47wQzczMbks30iYiIiKSsJQZ6ZlYE3A4cAQwGvmtmg+s4rzPwE2BidlMoIiIikgYtMdAD9gbmuPtcd18HPASMrOO83wLXA2uymTgRERGRtGihgV5fYH7S6wXRvq+Z2e5AP3f/VzYTJiIiIpI2MQZ6rbN+xxpWxz7/+qBZK+Am4PTNXshsNDAaoLi4mPLy8vSkULKuoqJC+ZfHlH/5S3mX35R/uW3AzJn0a9OGl15+Oev3jjPQWwD0S3q9DbAo6XVnYGeg3MwAegHjzOwYd5+SfCF3HwuMBSgrK/MRI0ZkMNmSSeXl5Sj/8pfyL38p7/Kb8i/HPfkkdOwYSx7FWXU7GdjezAaYWVvgZGBc4qC7f+HuPdy91N1LgTeATYI8ERERkZxWWRlLtS3EGOi5exVwPvAs8D7wsLvPMLMxZnZMXOkSERERSasYA704q25x96eBp2vtu6Kec0dkI00iIiIiadUSS/REREREWoTVqxXoiYiIiBQkleiJiIiIFCgFeiIiIiIFSoGeiIiISIGqrISOHWO5tQI9ERERkUxSiZ6IiIhIgVKgJyIiIlKgFOiJiIiIFCB3BXoiIiIiBWn9eqiuVqAnIiIiUnBWrw5rBXoiIiIiBaayMqwV6ImIiIgUGAV6IiIiIgVKgZ6IiIhIgVKgJyIiIlKgEoGepkATERERKTAq0RMREREpUAr0RERERAqUAj0RERGRAqVAT0RERKRAaWYMERERkQKlEj0RERGRAqVAT0RERKRAVVZC69ZhiUGsgZ6ZHW5mM81sjpldVsfxc81supm9Y2avmNngONIpIiIi0iyVlbGV5kGMgZ6ZFQG3A0cAg4Hv1hHIPeju33D33YDrgRuznEwRERGR5qusjG1WDIi3RG9vYI67z3X3dcBDwMjkE9z9y6SXWwCexfSJiIiIpCbmEr14KoyDvsD8pNcLgH1qn2RmPwJ+BrQFDqrrQmY2GhgNUFxcTHl5ebrTKllSUVGh/Mtjyr/8pbzLb8q/3DX444/Zwp3JMeVPnIGe1bFvkxI7d78duN3MTgF+BYyq45yxwFiAsrIyHzFiRHpTKllTXl6O8i9/Kf/yl/Iuvyn/cljnzrDVVrHlT5xVtwuAfkmvtwEWNXD+Q8CxGU2RiIiISDq11M4YwGRgezMbYGZtgZOBccknmNn2SS+PAmZnMX0iIiIiqVm9umW20XP3KjM7H3gWKAL+5u4zzGwMMMXdxwHnm9khwHpgJXVU24qIiIjkrMpK6NEjttvH2UYPd38aeLrWviuSti/IeqJERERE0qUFV92KiIiIFDYFeiIiIiIFSoGeiIiISIFSoCciIiJSoFrwFGgiIiIihWv9etiwQSV6IiIiIgWnsjKsFeiJiIiIFBgFeiIiIiIFSoGeiIiISIFavTqsFeiJiIiIFBiV6ImIiIgUKAV6IiIiIgVKgZ6IiIhIgVKgJyIiIlKgEoGeZsYQERERKTAq0RMREREpUAr0RERERAqUAj0RERGRAqVAT0RERKRArV4NRUXQpk1sSVCgJyIiIpIJlZWxluaBAj0RERGRzFCgJyIiIlKgFOiJiIiIFKiWHuiZ2eFmNtPM5pjZZXUc/5mZvWdm08zseTMriSOdIiIiIk3WkgM9MysCbgeOAAYD3zWzwbVOexsY4u67AI8C12c3lSIiIiLNVFkZ6/RnEG+J3t7AHHef6+7rgIeAkcknuPuL7r46evkGsE2W0ygiIiLSPC25RA/oC8xPer0g2lefs4D/ZDRFIiIiIumSA4Fe6xjvbXXs8zpPNPseMAQ4sJ7jo4HRAMXFxZSXl6cpiZJtFRUVyr88pvzLX8q7/Kb8y017rVjBqs6deS/GvIkz0FsA9Et6vQ2wqPZJZnYIcDlwoLuvretC7j4WGAtQVlbmI0aMSHtiJTvKy8tR/uUv5V/+Ut7lN+Vf7tqipIStY8ybOKtuJwPbm9kAM2sLnAyMSz7BzHYH/goc4+5LY0ijiIiISPPkQNVtbIGeu1cB5wPPAu8DD7v7DDMbY2bHRKfdAHQCHjGzd8xsXD2XExEREcktORDoxVl1i7s/DTxda98VSduHZD1RIiIiIumQA4GeZsYQERERSbeqqrAo0BMREREpMJWVYa1AT0RERKTAJAK9FjwzhoiIiMRt9Wq44gpYtizulBQWleiJiIhI7K65Bn77W3jyybhTUlgU6ImIiEisZs2CG24I2x9/HG9aCk2OBHqxDq8iIiIiMXGH88+H9u2hSxeYNy/uFBWW1avDWiV6IiIiknWPPgrjx8Pvfgc77aRAL91ypERPgZ6IiEhL89VX8NOfwm67wQ9/CKWlCvTSLUcCPVXdioiItDRjxsDChaFUr3XrEOgtWgRr10K7dnGnrjDkSKCnEj0REZGW5N134aab4OyzYejQsK+0NLTZmz8/1qQVFAV6IiIiklXu8KMfhc4X115bs7+0NKxVfZs+ORLoqepWRESkpXjgAXjpJRg7Fnr0qNmvQC/9ciTQa1SJnpl1NLNfm9md0evtzezozCZNRERE0mbJktABY5994KyzNj7Wty8UFSnQS6c8mwLtHmAtMCx6vQD4XUZSJCIiIunlDj/4AVRUwD33QKtaX/+tW0O/fgr00qmyMnzObdrEmozGBnoD3f16YD2Au1cClrFUiYiISPo88AA89RRcfTXsuGPd55SWwkcfZTVZBa2yMlTbWrzhUmMDvXVm1gFwADMbSCjhE5F8VV0N06fDLbfAccfB5ZfDqlVxp0pE0m3BAvjxj2H//eHCC+s/T2PppVci0ItZYztjXAk8A/Qzs/8F9gNOz1SiRCQD3GH2bCgvhxdeCMuyZeFY//7wxBPhV//tt8PRaoIrUhDcQ3u89evh3ntDO7z6aCy99Fq9On8CPXcfb2ZvAUMJVbYXuPvyjKZMRFLjDu+/DxMm1CyffhqO9e4Nhx0GBx8M3/wmlJTAK6+ENjzf/jYcf3wo6evbN95nEJHUjB0Lzz0XfsANHNjwuYmet598Attvn/GkFbx8KNEzsz1q7VocrfubWX93fyszyRKRJlu7Ft56C159NQRtr74Ky6PfY337wkEHwQEHwIEHQlnZpu1G9t8f3n4b/vjHMGr+c8+F9jznnddwKYCI5Ka5c+Gii+CQQ+Dcczd/fvIQKwr0UpcPgR7wxwaOOXBQGtMiIk2xeDFMnAhvvAGvvQaTJoVgD2C77eCoo2oCu223bVyD4LZt4Re/gBNPDIOq/uQnobrnz38OQzKISH6oroYzzgg/0u6+e9NetnXRWHrplQ+Bnrt/M1sJEZEGrFoVStsmTw6B3RtvhOoVCF3399gjBGb77w/77gs9e6Z2v4ED4T//gYcfhp/9DIYNg3POCSPpd++e+vOISGZdf30YGPlvfwttcBtDY+mlVz4EemZ2kLu/YGbH1XXc3R/PTLJEWrDKytAb9s03Q2A3eTK89174hQ6hPd2wYWHg06FDYbfdoH379KfDDE46CY48Eq66KrTZe/zx8AUyalTjSghEJPsmTAi96E88EU4/vfHv01h66VVZCVtuGXcqNlt1eyDwAvDtOo45kFKgZ2aHA7cARcBd7v77WscPAG4GdgFOdvdHU7mfSM5ZuRKmTQuldW+9Fdbvvw8bNoTjPXrAXnuF4U+GDAnbvXplN42dO4d2e6NGwQ9/CGeeCXfdBbfdBrvvnt20iEjDPv0UTj45NN+4666mj+GmIVbSp7Iy9lkxYPNVt1dGm2PcfaNRFM1sQCo3NrMi4HbgUMJMG5PNbJy7v5d02ieEYVwuTuVeIrGrqoI5c0JQN20aTJ0a1onqVwg9YffYA449Nqz32CNUucQ82ObXdtkFXn4Z7rsPLr00BJ4/+AH87neqzhXJBRs2wCmnwBdfhM5UnTs3/RqlpeG9krp8qLpN8hhQuwfuo8CeKdx7b2COu88FMLOHgJHA14Geu8+LjlWncB+R7HEPI8tPnw7vvgszZoTlgw9g3bpwTlER7LAD7Ldf6NG6yy6hZCzbJXXN0apVaOD9ne/AlVeGUr2HH4Zrrtl07kwRya4rr4QXXwxTnH3jG827hsbSS598CPTMbAdgJ6BLrXZ6WwKpNgrqC8xPer0AULc+yR9ffRXazk2dWrNMmxb2J5SUwM47w+GHw047hf98Bw/O//9Au3YNbfbOOiuMuP+DH8DYsWx5xhkwYkTcqRNpcbpPnBiGQzrzzKa1y6tNY+mlTz4EekAZcDTQlY3b6X0FnJPiveuqj/JmXchsNDAaoLi4mPLy8hSSJXGqqKjIufxrtXYtHebPZ4t589jio4/Ceu5cOiQGHwaqttiCim23ZdXBB1MxcCAV227L6tJSNtRun/HFF/D661l+ggy76iq2fuEFBt5xB3ucfz5LnnySuaNHs7a4OO6USRPk4r89aZx2S5aw59VXU7Httrx14olUp5CPXVauZHdg6lNPsXLIkLSlsSU6YNUq5i9bxkcx/7vaXBu9p4CnzGyYu6f722kB0C/p9TbAouZcyN3HAmMBysrKfIRKFPJWeXk5seXfihUwaxbMnBlK6t5/P6w/+ihUyULolVZWFkqtdt45lNLtuiutS0vpakbXeFIev29+Ey69lHnnnUfpww/T87XX4LLL4OKLc+IXrWxerP/2pPkqK2HECKo2bKDTM89wQKqlcAMGwE9/yq5duqh0PhUbNkBVFSVlZZTE/Dk2to3eHDP7JVCa/B53PzOFe08Gto86dSwETgZOSeF6Ipv35Zfw4YehY8ScOTWB3axZIdBLaNs2BHRDhsBpp4Xq1h13DPvato0v/bmsUyfmnXkmpWPGwM9/DldcEXr9XX99GOYhVzqViBSK6upQTTt5Mh/85jfsnI6qVo2llx6VlWGdAz90GxvoPQW8DPwX2JCOG7t7lZmdDzxLGF7lb+4+w8zGAFPcfZyZ7QU8AXQDvm1mv3H3ndJxfylQ1dWwcGEohZs7t2Y9d24I7JYu3fj83r1D8Hb88WFdVgaDBoVfta0b+89DNlJaGjpoTJgAF1wQhnq45Ra48cYw7p+IpMevfx3+rV1/Pcv32is919RYeumRh4FeR3e/NN03d/engadr7bsiaXsyoUpXJFi1ChYsgPnzw/Lxxxsv8+fD+vU155uF/7QGDIBvfzs0Lt5uu7AMHAidOsX3LIXuwAPDoM/33RcGbx02LAzAfO21IT9EpPnuuSf0dj/nnNBEYsKE9F1bY+mlLg8DvX+Z2ZFRYCaSflVVsGwZnWbNgoqKUCq3aFFYFi4Mwd2CBWGA4WRmoVSupAT23hv+539CEDFgQJjftX9/VbXGqago9AI88cRQhfuHP8ATT4SSvl/+MvTeFZGmeeEFGD0aDj0Ubr89/c0iNJZe6vIw0LsA+KWZrQPWEXrMurvHP7eH5Cb3ELCtWAHLloUq06VLN97+9NOwLFkS9ruzUR8vM9h6a+jTJwRuw4eH0rlttglLv35hUSCX+zp1gjFjwpfT5ZfDDTeEOTh/9asw20a+Dzcjki0ffBCamgwaBI88Eua6TrcBAzSWXqryLdBz92YMry15LxGsffHFpsvKlTXLZ5/VrFesCMvy5RtXoSbr0AGKi8MAwQMGhCq9Xr2gZ0/eXb6cnQ87LDQI7tkzM/+JSXy22SZU5V5wQZhd46c/De33rr46tOXT/Lki9Vu2DI46Kvy4/fe/oUuXzNxHY+mlLhHo5foUaAlmZsCpwAB3/62Z9QN6u/ukjKauGTrNmRP+SLfYombp1CmsO3QIH3rHjjXb7duH7fbtN17atQv/mNq1q9lu2zYEHokl8bqoKHxBZbJXofvX3bVZty4EUevX12yvXbvxsmZNWFdW1iyrV9esV63aeKmoCAP9Ji8VFTXDitSnQwfo1i0s3buHtm9Dh8JWW4V5WrfaKgR1xcWhdK64OORFPZ/V8vJy2EfjZhe8PfaA8eND9dCll8Kpp4b5dK+7Dg45JO7UieSelSvhsMNCSVt5eU0wlgmJa8+bp0CvufKtRA/4M1ANHAT8FqggzFObpm4+6VPVuXMY+ycRvKxaFf5hrFpVE+QklnQrKgpL69Yh8Ku9mNUd4LiH3qLJi3sI6jZsCEt1GmeBKyraOABOLD16hBK2zp1rli23DL8aE0vXrjXrbt1CUCzSXN/6VgjsHnwwVOMeeigcfHAo4VPALxJ89RUccUSYVnHcuMz/20gO9KR58jDQ28fd9zCztwHcfaWZ5WTDqDU9e8K9927+RPdQ6pVYKis3fr12bSgtq71OlKQll6YlgrFEYFZVVROs1Q7g6pNcKphYt25dEzgmrxMlickljImSx0RpZGI7UVrZoUPN0qaNxjST3NGqFXzve6EjzR13hCBv6FA49lj47W/DwNQiLdXq1aG6dsoUePTRMJ1ipvXpE75vFOg1X6IwKY8CvfVmVkQ0RZmZFRNK+PKXWU3gIyLxa9cutN0788zQbu+GG+Cpp0K17lVXheFwRFqSNWtg5Eh49dVQ6n3ssdm5r8bSS10Oleg1tuXzrYSBi7c2s6uBV4BrMpYqEWm5OncO1bgffQSXXBJKMcrK4Oyz9cUjLce6dXDCCfDf/4Ye6iedlN37ayy91ORboOfu/wv8HLgWWAwc6+6PZDJhItLCde8eOmd8+CGcdx78/e+hYfi554begCKFat06+O53Q8/aO+6AUaOynwYFeqnJt0DPzIYCC939dne/DVhgZmopLSKZ16cP3HprCPhGjw6lG9tvDz/6UZgJRaSQrFoFxxwDjz8ON98MP/hBPOkoLa0ZS0+aLt8CPeAvhJ62CauifSIi2bHNNmEWgDlzwkTuY8eGdnujR4dqXpF8t2JF6HU+fjzcfXdosxqX5LH0pOkqK0NfgBwYcLqxgZ651wyo5u7VNL4jh4hI+vTvD3/9awj4zj47DMC8/fYh+Js1K+7UiTTPggVh9p933oHHHgudkuKkIVZSU1kZRrzIgREuGhvozTWzn5hZm2i5AJibyYSJiDSopAT+/OdQmvfjH8PDD8OOO4a2TVOnxp06kcabORP22y8Ee888k73etQ1RoJeaysqcmBUDGh/onQvsCywEFgD7AKMzlSgRkUbr0wduuikEfBdfHBqw77ZbGGB2woTNz+4iEqdJk2D//cNQKhMmhAH/c4HG0ktNZWVOtM+DRgR60fh5p7r7ye6+tbv3dPdT3H1pFtInItI4PXuGXrqffALXXANvvRW+NIcNgyefTO/sMiIcvA9fAAAgAElEQVTp8MADcOCBYZaiV16B3XePO0U1NJZeavIp0HP3DcDILKRFRCR1XbvCL34RvqD+8pcwEfx3vgM77BBeZ2L6Q5GmqKqCiy6C004Ls8BMmpSbc8pqiJXmW706fwK9yKtmdpuZDTezPRJLRlMmIpKKDh3CmHszZ8JDD4UA8LzzQinFr34FixfHnUJpiVasCM0KbrwxtC197jkoLo47VXUrLVWP9ubKpxK9yL7ATsAY4I/R8odMJUpEJG1atw6zCkycCC+/DAccEKp2S0tDT9233oo7hdJSTJ8Oe+0FL70UxoO89dYw93iuKi0NP4jWrIk7Jfkn3wI9d/9mHctBmU6ciEjamIVG7088EYZhOeecML3annuGHo8PPQTr18edSilE7nDPPaG9aKLTxRlnxJ2qzRswIKw//jjedOSjfAv0zKynmd1tZv+JXg82s7MymzQRkQzZbju47bYwnMVNN8GSJWFYlpISGDMGPv007hRKoVixIsxZe+aZoTTvzTdDu7x8kAj0VH3bdPkW6AH3As8CfaLXs4ALM5EgEZGs6doVLrwwlPD961+wyy5w5ZWhHd8JJ4QZCtRbV5pr/PjwN/XPf8L118Pzz0Pv3nGnqvEKJdD78MMQaGdzOrc8DPR6uPvDQDWAu1cBGzKWKhGRbGrVCo46KgxWO3NmmHqqvBy+9S0YNCh8SS/ViFLSSGvWwM9+Fv5+unQJ7UMvuST8neWT3r3DFF75Huj96U+h6nzatOzdMw8DvVVmthXgAGY2FPgiY6kSEYnLoEHwhz+Eat0HHggDx156aZhr94QTwoDMVVVxp1Jy1UsvhXafN90EP/oRTJmSW+PjNUWrVqE5Qz4Heu7w+ONhO5ttDfMw0PsZMA7Y1sxeBe4Hfpzqzc3scDObaWZzzOyyOo63M7N/RMcnmllpqvcUEWmU9u3h1FPDF/eMGXD++WH76KPDfLuXXRZK/0QgjNd4xhlhAORVq+Dpp0M70ByZBqvZBgzI70Bv8mSYPz9sZzvQy5G8b2yg9x7wBDAZWALcSWin12zRjBu3A0cAg4HvmtngWqedBax09+2Am4DrUrmniEizDB4cxj1bsCCUDgwZEkr9dtgh9KS87bbwRS8tT3U13HknlJWFEuDLLoP33gtj5RWCfA/0Hn88DLHUoUP2Ar3q6tAeMM9K9O4HdgCuAf4EbA/8PcV77w3Mcfe57r4OeIhNZ+AYCdwXbT8KHGxmluJ9RUSap23bMMvGuHEh6LvhhjAC/o9/HNozHXUUPPhgKNGRwpeYp3b0aPjGN2DqVLj22pwpyUmLAQPgs8/gyy/jTknTucNjj8FBB8HAgdkL9BLjDuZZoFfm7me7+4vRMhoYlOK9+wLzk14viPbVeU7UAeQLYKsU7ysikrpeveDii8OX+7RpYXv69FDd27MnnHxyGKdPU64Vnvfeg+OOg332gTlz4L77QuedwbUrpQpAPve8nT495M/xx4e2htmazi3xbz5HAr3WjTzvbTMb6u5vAJjZPsCrKd67rpI5b8Y5mNloYDRAcXEx5eXlKSZN4lJRUaH8y2MtOv8OPxy+9S26TJ9Oz+efp8ezz9L2H/9gQ/v2rNhnH5YdeCArhg6lOkf+86+tReddI7X/9FNK772XnuPHs6F9e+affjoL/ud/2NCxYxgEOUaZyr/On33GnsC7//wny1euTPv1M6n0nnsoMeO14mJKW7em54cf8koW/sbbLV3KMGDmJ5+wOBf+Tbn7ZhfgfcLQKvOipRqYAUwHpjXmGnVccxjwbNLrXwC/qHXOs8CwaLs1sBywhq47aNAgl/z14osvxp0ESYHyL8n69e7PP+/+wx+6b721O7i3b+9+9NHuY8e6L1oUdwo3orxrwNy57uef796mjXu7du4XXeS+bFncqdpIxvJv+fLwt3vjjZm5fibttJP7AQeE7euuC8/x+eeZv+/MmeFeDzzQqNOBKd6MOKqxS2NL9A5PR1BZy2RgezMbACwETgZOqXXOOGAU8DpwAvBC9KGIiOS21q1D26CDDgrjeL38Mjz5JDz1VBicGWDvveGYY+DII2HXXfNvnLVC98Yb8Mc/hgb9rVqFuZGvuCIMqN1SdO8OnTvnX9XtzJmht/wtt4TXJSVh/fHHYRDrTKqsDOscKb1v7Fy3Hze0NOfGHtrcnU8otXsfeNjdZ5jZGDM7JjrtbmArM5tDGOJlkyFYRERyXlERjBgBN98Mc+eGNn2/+1049qtfwR57hM4cp50Wem5qcOb4bNgQArv99gs9qv/73zDY8bx5oXdtSwryIMwRnY89bxNj5x13XFgnB3qZlmOBXmNL9DLC3Z8Gnq6174qk7TXA/2Q7XSIiGWMWemh+4xtw+eWweDE89xw8+2yYmeOBB8J5u+8egsMRI2D4cOjWLc5UF74PPgidKu6/HxYtCsHNLbeEqbM6dYo7dfEaMCB0asgnjz0WOstss014rUBPRERi0bs3jBoVlupqePvtEPSNHw9//nOYYcEsVO0mgr6hQ8OMHZKazz+Hf/wD7r03VNMWFYXx7/70Jxg5MryWEOiNHx+GK8mHEc7mzYM33wxTFyb07Bmmc1OgJyIisWnVKkyfteee8MtfhvG4Jk0KQ3dMmAB33BGqfyFUIQ4dGpZ99gmBYEsveWqMhQvhn/8MbSVfeAHWrYOddgoDYJ96ahg2RzY2YEAYMmT5cigujjs1m1e72hbCv63+/bMb6OXIeIoK9EREclX79nDAAWGBMNr+O++E0qfE8sgj4ZgZbL897LZbzfKNb0DfvvlRCpMpVVWhlPSZZ0Jw9+abYf/AgWFau1NOCW0kW/JntDnJY+nlQ6D32GPhh8/AgRvvLylRiZ6IiOSwdu1C6d0++8AFF4R9n34aSv3eeScskyfDww/XvKdTpzA9V1lZmLKtrCx8cZeUhC/tQgtw1qwJn8FLL4XltdegoiI859ChYeaKY46BHXcsvGfPlNLSsP7oo9BTPJctWhTyfMyYTY+VlNT0eM8kBXoiIpI2vXqFwOWYY2r2ff55mLFjxowwzMQHH8Crr4bp2ZJ16BCqs0pKKCsqCm0Dt946BICJddeuIVjcYotwfi4FR8uX18xMMm1azTOvWxeO77wzfP/7oUR0xIjQTkuaLp9mx3jiibA+/vhNj5WUwJIlIRDLZBCWpzNjiIhIvujaFQ48MCzJVq+G2bNDY/VPPgnVWNHSfe7c0OC+qqr+65qFoG/LLUOVcL9+oVdjv35h6dUrjLuWWNq3b1763cPcqitWhHlWlywJ6Zw3b+Nl2bKa9/TqFcZHu+CCMP/sfvvBVpoxMy06dYIePfIj0Hv88VByXdd0dImet598Ekq2M6WiIqy32CJz92gCBXoiIi1Fx46h7dKuu25y6PXyckYceGAoDVy2LCxLl4aAq6KiZlm1KpyzYEEoPXvmmbCvvvt16xYCvnbtoG3bsG7XLjSOX78+lL4l1uvWhWuvXBnGs6utbdvwZV1aCsceG76sd901BHhbb53ez0o2lg9j6c2eDS++CL/+dd3Hk4dYyWSgt2xZ+DHUrl3m7tEECvRERCQwC4FZt24waFDj3uMegrP580Ng+Nlnmy5r14Zl3bqa7Q0bQgDYuXMI4Nq0CesuXWpKBLfaKqx79AjBXa9emj0kLgMGwFtvxZ2Khv3xj+Hv6Ic/rPt4tsbSW7o0p354KNATEZHmSw4OpXANGBDav23YkJvjCy5ZEsZDHDWq/iFy+vYNPxQyHegtWZJTgZ5+GomIiEjDBgwIVeyLFsWdkrrddlsoMb7oovrPadMmBHvZKNHLoY4/CvRERESkYbnc87aiAm6/Pcxmsrm2d6WlLa7qVoGeiIiINCyXA72//S104Lnkks2fm+lBkzdsCMP+KNATERGRvNG/f2iPmWuBXlUV3HhjGE5n3303f35JSZgGr6FhhFKxYkWYs1pVtyIiIpI32rUL7dtyLdB75JFQQvfznzfu/JKSUOq2cGFm0rN0aVirRE9ERETySq6NpecON9wQBkg++ujGvSfTQ6wo0BMREZG8lGuB3gsvwNtvw8UXN358xUwHekuWhLUCPREREckrAwaEKs+1a+NOSXD99WHMvO99r/Hv6d8/rOfNy0iSvi7RUxs9ERERySsDBoTq0k8+iTslMHUqPPdcmNu4KVONdegQStsyWXXbunWYbzpHKNATERGRzcuVIVaqq+GnPw3T5517btPfn8khVpYsgeLinJqqL3dSIiIiIrkrVwK9226DF18Mw6o0p+Qsk4Fejs2KAQr0REREpDH69AnTiMUZ6H3wAVx6KRx1FJx1VvOuUVoaqp+rq9OaNCDnZsUABXoiIiLSGEVFoTQsrkCvqgpGjYKOHeHOO8MAzs1RUhI6lCQ6TqTTkiUK9ERERCRPxTnEyu9/D5MmwV/+Ar17N/86mRxiRVW3IiIikrfiCvTefht+8xv47nfhxBNTu1amAr1Vq2D1apXoAZhZdzMbb2azo3W3es57xsw+N7N/ZTuNIiIiUsuAAbB8OVRUZO+ea9bAaaeF3qy33Zb69TIV6OXgrBgQX4neZcDz7r498Hz0ui43AKdlLVUiIiJSv0TP20wNOFyXK66AGTPg7ruhe/fUr9elS1jSHejl4KwYEF+gNxK4L9q+Dzi2rpPc/Xngq2wlSkRERBqQ7SFWbr4Z/vAHGD0ajjgifdfNxBArOTgrBsQX6PV098UA0Tq3wl8RERHZVCLQe/31MEtGpmzYABdeGAZG/s53QsCXTiUl6S+VzNGq29aZurCZ/RfoVcehyzNwr9HAaIDi4mLKy8vTfQvJkoqKCuVfHlP+5S/lXX7LWv65s+vuu9Pt2mtZ9vLLzL7gAtb16JHWW7Rau5Ydr76a4pdfZv4JJ/DhuefCxIlpvcd2rVvTa+5cXnnxxeYP01JL/zfeYFvgpfffp/rDD9NyzbRw96wvwEygd7TdG5jZwLkjgH819tqDBg1yyV8vvvhi3EmQFCj/8pfyLr9lNf/Wr3e//nr39u3du3Rxv/NO9+rq9Fx72TL3ffd1N3O/6ab0XLMuN9zgDu6ffZa+a/7kJ+HzaCJgimcw5oqr6nYcMCraHgU8FVM6REREpClat4ZLLoFp02D33eGcc+Dgg2HOnNSu+/77sO++8Oab8Mgjoeo2U0pLwzqd7fRycFYMiK+N3u+BQ81sNnBo9BozG2JmdyVOMrOXgUeAg81sgZkdFktqRUREZGPbbw/PPw9jx4bgbMcd4eij4cEHGz/8yrp18PDDcMghMHgwrFgRrnn88ZlNeyaGWMnBWTEgg230GuLuK4CD69g/BTg76fXwbKZLREREmqBVq1Cid+SRocPEQw/Bv/8dpik75pgwwPHuu4d2cK1a1ayXLYP77gvLsmUh8Prtb+Hss6FXXc370ywTgd7SpTBoUPqulyaxBHoiIiJSQPr2hRtugOuug1dfDaV6jzwSAr/6FBXByJFh6JRDDgmvs6W4GDp0SH+gNzz3yqcU6ImIiEh6tGoVgp3hw+HWW+GFF2D+/DAUS3V1zbptWzjqqNTmrE2FGfTvn75Ab8OGMGOIqm5FRESkRWjTBg7L4ab1Awem3oEkYfnyEMTmYKAXV2cMERERkfgMGgSzZoUSxlTl6KwYoEBPREREWqKyMqishAULUr9Wjs6KAQr0REREpCUqKwvrmTNTv9aSJWGtQE9EREQkByQCvVmzUr+Wqm5FREREckjv3tCpU3pK9JYuDTOGdO2a+rXSTIGeiIiItDxmoUNGugK9rbcO18wxCvRERESkZSorS18bvRxsnwcK9ERERKSlKiuDTz4JvW9TsXRpTrbPAwV6IiIi0lINGhQGOk514ORE1W0OUqAnIiIiLVM6hlhxV9WtiIiISM4ZNCisUwn0Vq0KVb+quhURERHJIZ06Qd++qY2ll8OzYoACPREREWnJUu15m8OzYoACPREREWnJEmPpuTfv/Tk8KwYo0BMREZGWrKwMPv8cli1r3vtVdSsiIiKSo1LteZsI9IqL05OeNFOgJyIiIi1XItBrboeMJUugSxdo1y59aUojBXoiIiLScpWUQNu2qZXo5Wj7PFCgJyIiIi1ZURFst11qgV6Ots8DBXoiIiLS0qUyxEoOz4oBMQV6ZtbdzMab2exo3a2Oc3Yzs9fNbIaZTTOzk+JIq4iIiBS4sjL48EOoqmr6e1V1W6fLgOfdfXvg+eh1bauB77v7TsDhwM1m1jWLaRQREZGWoKwsBHkffdS091VVwYoVKtGrw0jgvmj7PuDY2ie4+yx3nx1tLwKWArnZd1lERETyV3PnvF2xIgy0rEBvEz3dfTFAtG7wEzKzvYG2wIdZSJuIiIi0JM0dSy8x/VkOV922ztSFzey/QK86Dl3exOv0Bv4OjHL36nrOGQ2MBiguLqa8vLxpiZWcUVFRofzLY8q//KW8y2/Kv9Ttt+WWLHvxRWbtuWej39PtzTfZFXh74UK+yNHPP2OBnrsfUt8xM1tiZr3dfXEUyC2t57wtgX8Dv3L3Nxq411hgLEBZWZmPGDEipbRLfMrLy1H+5S/lX/5S3uU35V8a7LwzfSoq6NOUz3HRIgB2P+ywmlLBHBNX1e04YFS0PQp4qvYJZtYWeAK4390fyWLaREREpKUZNKj5Vbdqo7eJ3wOHmtls4NDoNWY2xMzuis45ETgAON3M3omW3eJJroiIiBS0sjL49FP48svGv2fpUmjTBrrm7qAgGau6bYi7rwAOrmP/FODsaPsB4IEsJ01ERERaouQOGXvt1bj3JGbFMMtculKkmTFEREREEoHerFmNf0+Oz4oBCvREREREYOBAaNWqae30cnxWDFCgJyIiIgLt2kFpadMDPZXoiYiIiOSBsrLGB3ruCvRERERE8kZZWWijV13n/AwbW7ECKiuhd+/MpysFCvREREREIAR6lZWwcOHmz500Kaz32COzaUqRAj0RERERCIMmA7z//ubPnTgxdN4YMiSzaUqRAj0RERERgN13D2PiTZy4+XMnToSddoJOnTKfrhQo0BMREREB6NYNdt4ZXnml4fPcQ9XtPvtkJ10pUKAnIiIikrD//vDaa1BVVf85s2fDypUK9ERERETyyvDhUFEB06bVf06ialeBnoiIiEge2X//sG6o+nbixNA2b/Dg7KQpBQr0RERERBL69YP+/eHll+s/Z+LE0Nu2qCh76WomBXoiIiIiyYYPDyV67pseW7MGpk7Ni2pbUKAnIiIisrH994dPP4W5czc99s47sH69Aj0RERGRvDR8eFjXVX2bRx0xQIGeiIiIyMZ23DGMqVdXh4yJE6FvX+jTJ/vpagYFeiIiIiLJWrWC/farv0QvT0rzQIGeiIiIyKaGD4dZs2Dp0pp9y5aFdnsK9ERERETyWGI8vVdfrdk3aVJYK9ATERERyWN77gnt2m1cfTtxYqjW3XPP+NLVRAr0RERERGpr1y6U3CV3yJg4EXbeOcyKkScU6ImIiIjUZf/94a23YNUqqK4OVbd5VG0LMQV6ZtbdzMab2exo3a2Oc0rM7E0ze8fMZpjZuXGkVURERFqo4cNhwwZ44w2YPRs+/1yBXiNdBjzv7tsDz0eva1sM7OvuuwH7AJeZWX4MWiMiIiL5b9gwMAvVt3k2UHJC65juOxIYEW3fB5QDlyaf4O7rkl62Q9XMIiIikk1dusAuu4RAb+nS0DZvxx3jTlWTxBU89XT3xQDReuu6TjKzfmY2DZgPXOfui7KYRhEREWnphg+H118Pw6zstRcUFcWdoibJWImemf0X6FXHocsbew13nw/sElXZPmlmj7r7kjruNRoYDVBcXEx5eXnzEi2xq6ioUP7lMeVf/lLe5TflX+YUd+vGTqtWwdSpfHzKKXyUZ5+zuXv2b2o2Exjh7ovNrDdQ7u5lm3nPPcC/3f3Rhs4rKyvzmTNnpjG1kk3l5eWMGDEi7mRIMyn/8pfyLr8p/zJo4ULYZpuw/cQTcOyxab28mb3p7kPSetEkcVXdjgNGRdujgKdqn2Bm25hZh2i7G7AfoAhOREREsqdvXxgwIGznWUcMiC/Q+z1wqJnNBg6NXmNmQ8zsruicHYGJZjYVmAD8wd2nx5JaERERabkOOwzKyqB377hT0mSx9Lp19xXAwXXsnwKcHW2PB3bJctJERERENnbTTbBmTdypaJa4hlcRERERyQ/t24clD2lsOhEREZECpUBPREREpEAp0BMREREpUAr0RERERAqUAj0RERGRAqVAT0RERKRAKdATERERKVAK9EREREQKlAI9ERERkQKlQE9ERESkQJm7x52GtDKzr4CZcadDmq0HsDzuREizKf/yl/Iuvyn/8leZu3fO1MULca7bme4+JO5ESPOY2RTlX/5S/uUv5V1+U/7lLzObksnrq+pWREREpEAp0BMREREpUIUY6I2NOwGSEuVfflP+5S/lXX5T/uWvjOZdwXXGEBEREZGgEEv0RERERIQcDfTM7HAzm2lmc8zssjqOl5jZ82Y2zczKzWybpGPXmdm70XJS0v6DzOytaP99ZtY62m9mdmt0r2lmtkd2nrIwZTnvTo2uM83MXjOzXbPzlIUrm/mXdHwvM9tgZidk9ukKW7bzzsxGmNk7ZjbDzCZk/gkLW5b/7+xiZv80s6lR/p2RnacsTGb2NzNbambv1nO83jjDzEaZ2exoGZW0f08zmx6951Yzs2h/dzMbH50/3sy6bTaB7p5TC1AEfAhsC7QFpgKDa53zCDAq2j4I+Hu0fRQwnjBszBbAFGBLQkA7HxgUnTcGOCvaPhL4D2DAUGBi3J9Bvi4x5N2+QLdo+wjlXX7lX9I9XwCeBk6I+zPI1yWGf3tdgfeA/tHrreP+DPJ5iSH/fglcF20XA58BbeP+HPJ1AQ4A9gDered4nXEG0B2YG627RduJ77RJwLDoPf8Bjoj2Xw9cFm1flsjHhpZcLNHbG5jj7nPdfR3wEDCy1jmDgeej7ReTjg8GJrh7lbuvIvxjORzYCljr7rOi88YDx0fbI4H7PXgD6GpmvTPxYC1AVvPO3V9z95XR/jeAr3/hSrNk+98ewI+Bx4Cl6X6YFibbeXcK8Li7fwLg7sq/1GQ7/xzoHJUSdSIEelXpf6yWwd1fInyG9akvzjgMGO/un0XfZeOBw6NjW7r76x4iuvuBY5OudV+0fV/S/nrlYqDXl/ArJGFBtC/ZVGr+YL9D+IPdKtp/hJl1NLMewDeBfoTRwtuYWWIwyROi/Y29nzROtvMu2VmEXz3SfFnNPzPrG13jjgw8S0uT7X97g4BuURXim2b2/bQ/UcuS7fy7DdgRWARMBy5w9+r0PpIkqS9/G9q/oI79AD3dfTFAtN56czfPxUDP6thXu2vwxcCBZvY2cCCwEKhy9+cIVUCvAf8HvB7td+Bk4CYzmwR8Rc2vl8bcTxon23kXbmr2TUKgd2kan6Ulynb+3Qxc6u4b0v4kLU+28641sCeh2vAw4NdmNii9j9SiZDv/DgPeAfoAuwG3mdmW6X0kSVJf/jZ1f7Pk4hRoC9i4xGYbwq+Or7n7IuA4ADPrBBzv7l9Ex64Gro6OPQjMjva/DgyP9n+L8Iu0UfeTRst23mFmuwB3EdovrMjIU7Uc2c6/IcBDURvjHsCRZlbl7k9m4uEKXBz/by6PqgpXmdlLwK7ALKQ5sp1/ZwC/j4LBOWb2EbADoV2YpF99+bsAGFFrf3m0f5s6zgdYYma93X1xVMW7+WYTmWiYmMpCCD7nAgOoaZS6U61zegCtou2rgTHRdhGwVbS9C/Au0Dp6vXW0bkdo53BQ9PooNm4kOSnuzyBflxjyrj8wB9g37mcvhCXb+Vfruveizhh5k3eEar/no/t2jN6zc9yfQ74uMeTfX4Crou2ehNLBHnF/Dvm8AKXU3xmjzjiD0AnjI0JHjG7Rdvfo2OTo3ERnjCOj/TewcWeM6zebtrg/nHo+lCMJvww/BC6P9o0Bjom2TyD8YplFKM1pF+1vT+gJ9h6hcf5uSde8AXgfmAlcmLTfgNuje00HhsT9/Pm8ZDnv7gJWEqog3gGmxP38+b5kM/9q3fdeFOjlVd4Bl0Tvebe+fNWSm/lHqLJ9LvrOexf4XtzPn88Locp8MbCeUBp3FnAucG50vN44AziTUGAxBzgjaf+QKG8+JLSpTExwsRUhaJ8drbtvLn2aGUNERESkQOViZwwRERERSQMFeiIiIiIFSoGeiIiISIFSoCciIiJSoBToiYiIiBQoBXoi0qKYWUXcaRARyRYFeiIiGWJmrRt63cD7ijKTIhFpaRToiUjeMrPrzOy8pNdXmdlFZtbJzJ43s7fMbLqZjazjvSPM7F9Jr28zs9Oj7T3NbIKZvWlmz0ZTDdV+f7GZPWZmk6Nlv6Q0jDWz54D7zex0M3vEzP4JPGfBDWb2bpS2k5LS82I0hdX0dH9WItIy5eJctyIijfUQcDPw5+j1icDhwBrgO+7+pZn1AN4ws3HeiBHizawN8CdgpLsviwKxqwkj2Ce7BbjJ3V8xs/7As4SpwQD2BPZ398ooeBwG7OLun5nZ8YSJ5HclTGs1OZorFmBvwlRiHzX9oxAR2ZQCPRHJW+7+tpltbWZ9gGJgpbt/EgVr15jZAUA10Jcwp+enjbhsGbAzMN7MIMwluriO8w4BBkfnAGxpZp2j7XHuXpl07nh3/yza3h/4P3ffQJigfAKwF/AlYQ5MBXkikjYK9EQk3z1KmAe0F6GED+BUQuC3p7uvN7N5hDlBk1WxcfOVxHEDZrj7sM3ctxUwrFZARxT4rap1bvJro3613ycikhK10RORfPcQcDIh2Hs02tcFWBoFed8ESup438eEErl2ZtYFODjaPxMoNrNhEKpyzWynOt7/HHB+4oWZ7dbI9L4EnGRmRWZWDBwATGrke0VEmkSBnojkNXefAXQGFrp7oor1f4EhZjaFULr3QR3vmw88DEyLzn872r+OEDReZ2ZTgXeAfUh/l9kAAABuSURBVOu49U+ie0wzs/eAcxuZ5Ceie04FXgB+7u6NqVIWEWkya0TbZBERERHJQyrRExERESlQCvRERERECpQCPREREZECpUBPREREpEAp0BMREREpUAr0RERERAqUAj0RERGRAqVAT0RERKRA/T/C2typWZnyyQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# distribution and value_error closeup (100,000 w/ extension)\n",
"plot(evaluation_points, true_values-sketch_values, 'r-')\n",
"plt.xlim(99.9/100,1)\n",
"plt.title('Closeup on Error at > 99.9th Percentile')\n",
"plt.xlabel('value error')\n",
"plt.ylabel('percentile')\n",
"plt.grid()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.