You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
58 KiB
186 lines
58 KiB
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import matplotlib as mpl\n",
|
|
"import matplotlib.colors as mcolors\n",
|
|
"import numpy as np\n",
|
|
"import sys\n",
|
|
"from matplotlib.ticker import MultipleLocator, FormatStrFormatter\n",
|
|
"import matplotlib.ticker as ticker\n",
|
|
"import os\n",
|
|
"from collections import defaultdict\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import re\n",
|
|
"import argparse\n",
|
|
"import numpy as np"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"12983\n",
|
|
"12983\n",
|
|
"12983\n",
|
|
"12983\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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fj50Op3BjYiIiKiEWQeo0NBQ/N///R/i4uLwySefYN++fQgLC4NerwcAZGVlwc3NzeAxlpaWcHZ2RlZWltTG3d3doE3J/ZI2D4uOjoaDg4N08/LyMnbXiIiIqBYz6SG8irz00kvS335+fujQoQOaN2+O+Ph49OnTp9rWGxUVhcjISOm+TqdjiCIiIiKJWe+BelizZs3g4uKCCxcuAAC0Wi2uXbtm0KaoqAg3b96UzpvSarXIzs42aFNyv7xzq9RqNTQajcGNiIiIqEStClBXrlzBjRs34OHhAQAIDAxETk4OEhMTpTZ79uxBcXExAgICpDb79+9HYWGh1CY2Nha+vr5wcnKq2Q4QERFRnWDSAJWXl4ekpCQkJSUBANLT05GUlISMjAzk5eVh+vTpOHLkCC5duoS4uDgMHDgQLVq0QEhICACgTZs2CA0Nxbhx43Ds2DEcOnQIEydOxEsvvQRPT08AwIgRI6BSqTB27FicOXMGGzZswKJFiwwO0RERERHJoRBCCFOtPD4+Hr179y41PTw8HCtWrMCgQYNw8uRJ5OTkwNPTE8HBwfjoo48MTgq/efMmJk6ciK1bt0KpVGLIkCFYvHgx7OzspDbJycmIiIjA8ePH4eLigkmTJmHGjBmVrlOn08HBwQG5ubk8nEdERFRLVOf3t0kDVG3BAEVERFT7VOf3d606B4qIiIjIHDBAEREREcnEAEVEREQkEwMUERERkUwMUEREREQyMUARERERycQARURERCQTAxQRERGRTAxQRERERDIxQBERERHJxABFREREJBMDFBEREZFMDFBEREREMjFAEREREcnEAEVEREQkEwMUERERkUwMUEREREQyMUARERERycQARURERCQTAxQRERGRTAxQRERERDIxQBERERHJxABFREREJBMDFBEREZFMDFBEREREMjFAEREREcnEAEVEREQkEwMUERERkUwMUEREREQyMUARERERycQARURERCSTSQPU/v370b9/f3h6ekKhUGDLli3SvMLCQsyYMQN+fn5o0KABPD09MXr0aPzxxx8Gy2jatCkUCoXBbe7cuQZtkpOT0b17d1hbW8PLywvz5s2rie4RERFRHWXSAHXnzh34+/tj2bJlpebdvXsXv/zyCz744AP88ssviImJQVpaGgYMGFCq7Zw5c5CZmSndJk2aJM3T6XQIDg6Gt7c3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ROD48eNwcXHBpEmTMGPGjMp2m9fCIyIiqoWq8/tbVoD69ttv8dJLL0GtVmP16tWPDFDh4eFGKdAcMEARERHVPmYToOorBigiIqLapzq/v6t8DpSFhUWpX8ABwI0bN2BhYfFYRRERERGZsyoHqPJ2XOXn5xuM+k1ERERU18geB2rx4sUAAIVCga+++srgZG29Xo/9+/ejdevWxquQiIiIyMzIDlCff/45gPt7oL744guDw3UqlQpNmzbFF198YbwKiYiIiMyM7ABVcqHg3r17IyYmhoNREhERUb1T5Uu57N2715h1EBEREdUaVQ5QAHDlyhX89NNPyMjIQEFBgcG8BQsWPFZhREREROaqygEqLi4OAwYMQLNmzXDu3Dm0b98ely5dghACnTt3NmaNRERERGalysMYREVFYdq0aUhJSYG1tTX++9//4vLly+jZsydeeOEFY9ZIREREZFaqHKDOnj2L0aNHAwAsLS3x119/wc7ODnPmzMEnn3xitAKJiIiIzE2VA1SDBg2k8548PDxw8eJFad6ff/75+JURERERmakqnwPVrVs3HDx4EG3atMGzzz6Lt99+GykpKYiJiUG3bt2MWSMRERGRWalygFqwYAHy8vIAALNnz0ZeXh42bNiAli1b8hd4REREVKdVKUDp9XpcuXIFHTp0AHD/cB5HHyciIqL6okrnQFlYWCA4OBi3bt0ydj1EREREZq/KJ5G3b98ev/32mzFrISIiIqoVqhyg/vWvf2HatGnYtm0bMjMzodPpDG5EREREdZVCCCGq8kCl8u/spVAopL+FEFAoFNDr9Y9fnZnQ6XRwcHBAbm4uNBqNqcshIiKiSqjO729eTJiIiIhIpioHqJ49exqzDiIiIqJao8oBav/+/Y+c36NHj6oumoiIiMisVTlA9erVq9S0B8+FqkvnQBERERE9qMq/wrt165bB7dq1a9i1axeeeOIJ/Pzzz8askYiIiMisVHkPlIODQ6lpffv2hUqlQmRkJBITEx+rMCIiIiJzVeU9UOVxd3dHWlqasRdLREREZDaqvAcqOTnZ4L4QApmZmZg7dy46duz4uHURERERma0qB6iOHTtCoVDg4XE4u3XrhlWrVj12YURERETmqsoBKj093eC+UqmEq6srrK2tH7soIiIiInNWpQBVXFyMuLg4xMTE4NKlS1AoFPDx8cHQoUMxatQo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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"import json\n",
|
|
"f = open('/home/weihao/sledge/sledge_tree/runtime/tests/request_time.txt', 'r')\n",
|
|
"js = f.read()\n",
|
|
"f.close()\n",
|
|
"times = json.loads(js)\n",
|
|
"keys = list(times.keys())\n",
|
|
"int_keys = list(map(int, keys))\n",
|
|
"x=sorted(int_keys)\n",
|
|
"#print(x)\n",
|
|
"print(len(x))\n",
|
|
"y_list=list(times.values())\n",
|
|
"\n",
|
|
"y_queuing=[]\n",
|
|
"y_runnable=[]\n",
|
|
"y_blocking=[]\n",
|
|
"\n",
|
|
"for k in range(len(x)):\n",
|
|
" y_queuing.append(times[str(x[k])][0])\n",
|
|
" y_runnable.append(times[str(x[k])][1])\n",
|
|
" y_blocking.append(times[str(x[k])][2])\n",
|
|
"print(len(y_queuing))\n",
|
|
"print(len(y_runnable))\n",
|
|
"print(len(y_blocking))\n",
|
|
"#print(y_queuing)\n",
|
|
"legend_list=[\"Global Queuing\", \"Local Queuing\", \"Blocking\"]\n",
|
|
"#legend_list=[\"Local Queuing\", \"Blocking\"]\n",
|
|
"\n",
|
|
"#legend_list=[\"Global Queuing\", \"Blocking\"]\n",
|
|
"plt.scatter(np.array(x), y_queuing,c='g')\n",
|
|
"#plt.scatter(np.array(x), y_runnable, c='r')\n",
|
|
"#plt.scatter(np.array(x), y_blocking,c ='b')\n",
|
|
"\n",
|
|
"#plt.ylim((0, 90000)) \n",
|
|
"#plt.ylim((0,400000))\n",
|
|
"plt.xlabel(\"Request id\")\n",
|
|
"plt.ylabel(\"Duration(us)\")\n",
|
|
"\n",
|
|
"plt.legend(legend_list)\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"12983\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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p06dsG7dOjz++OOYM2cOOnTogHfffZdD54k0YDRyiDwR+T6DEI6mRvNflZWVCA0NRUVFBZvJiIiIfIRa12+f6iNEREREpCQmQkRERKRbTISIiIhIt5gIERERkW4xESIiIiLdYiJEREREusVEiIiIiHSLiRARERHpFhMhIiIi0i0mQkRERKRbTISIiIhIt5gIERERkW4xESIiIiLdYiJEREREusVEiIiIiHSLiRARERHpFhMhIiIi0i0mQkRERKRbTISIiIhIt5gIERERkW4xESIiIiLdYiJEREREusVEiIiIiHSLiRARERHpFhMhIiIi0i0mQkRERKRbTISIiIhIt5gIERERkW4xESIiIiLdYiJEREREusVEiIiIiHSLiRARERHpFhMhIiIi0i0mQkRERKRbTISIiIhIt5gIERERkW4xESIiIiLdYiJEREREusVEiIiIiHSLiRARERHpFhMhIiIi0i0mQkRERKRbTISIiIhIt5gIERERkW4xESIiIiLdYiJEREREusVEiIiIiHSLiRARERHpFhMhIiIi0i0mQkRERKRbTISIiIhIt5gIERERkW4xESIiIiLdYiJEREREusVEiIiIiHSLiRARERHpluaJ0Lx585CQkIDg4GAkJSVh+/btTW6fnZ2N7t27o1WrVjCZTHj88cdx7tw5D0VLRERE/kTTRGj58uWYPHkyMjMzsWvXLvTu3RtpaWk4evSow+2XLl2KqVOnIjMzE/v378d7772H5cuXY/r06R6OnIiIiPyBponQG2+8gXHjxmHs2LG44oorsGDBArRu3Rrvv/++w+2/+eYb/OUvf8GoUaOQkJCAm2++GSNHjmy2FomIiIjIEc0SodraWuzcuROpqakXgwkIQGpqKvLz8x0+Z8CAAdi5c6ct8fntt9+wfv163HrrrR6JmYiIiPxLC61euLy8HGazGdHR0Xbro6Oj8csvvzh8zqhRo1BeXo7rrrsOQghcuHABDz30UJNNYzU1NaipqbH9XVlZqUwBiIiIyOdp3llajry8PLz00kt45513sGvXLuTk5GDdunX45z//6fQ5WVlZCA0NtS0mk8mDERMREZE3MwghhBYvXFtbi9atW2PVqlUYNmyYbX1GRgZOnTqFtWvXNnpOSkoK+vfvj1dffdW2bsmSJXjwwQdRVVWFgIDGeZ2jGiGTyYSKigqEhIQoWygiIiJSRWVlJUJDQxW/fmtWIxQYGIjExETk5uba1tXV1SE3NxfJyckOn3PmzJlGyY7RaAQAOMvngoKCEBISYrcQERERARr2EQKAyZMnIyMjA/369cO1116L7OxsVFdXY+zYsQCAMWPGID4+HllZWQCAIUOG4I033kDfvn2RlJSEQ4cO4dlnn8WQIUNsCRERERGRVJomQiNGjMCxY8cwc+ZMlJaWok+fPtiwYYOtA3VhYaFdDdCMGTNgMBgwY8YMFBcXIzIyEkOGDMGLL76oVRGIiIjIh2nWR0grarUxEhERkXr8ro8QERERkdaYCBEREZFuMREiIiIi3WIiRERERLrFRIiIiIh0i4kQERER6RYTISIiItItJkJERESkW0yEiIiISLeYCBEREZFuMREiIiIi3WIiRERERLrFRIiIiIh0i4kQERER6RYTISIiItItJkJERESkW0yEiIiISLeYCBEREZFuMREiIiIi3WIiRERERLrFRIiIiIh0i4kQERER6RYTISIiItItJkJERESkW0yEiIiISLeYCBEREZFuMREiIiIi3WIiRERERLrFRIiIiIh0i4kQERER6RYTISIiItItJkJERESkW0yEiIiISLeYCBEREZFuMREiIiIi3Woh9wkFBQXYtm0bfv/9d5w5cwaRkZHo27cvkpOTERwcrEaMRERERKqQnAh9/PHHmDNnDnbs2IHo6GjExcWhVatWOHHiBA4fPozg4GCMHj0aTz/9NDp27KhmzERERESKkJQI9e3bF4GBgbjvvvuwevVqmEwmu8dramqQn5+PZcuWoV+/fnjnnXdw9913qxIwERERkVIMQgjR3EYbN25EWlqapB0eP34cR44cQWJiotvBqaGyshKhoaGoqKhASEiI1uEQERGRBGpdvyXVCElNggCgffv2aN++vcsBEREREXmK7FFju3btwt69e21/r127FsOGDcP06dNRW1uraHBEREREapKdCP3jH//AwYMHAQC//fYb7r33XrRu3RorV67EU089pXiARERERGqRnQgdPHgQffr0AQCsXLkS119/PZYuXYrFixdj9erVSsdHREREpBrZiZAQAnV1dQCAzZs349ZbbwUAmEwmlJeXKxsdERERkYpkJ0L9+vXDCy+8gI8++ghbt27FbbfdBsAy0WJ0dLTiARIRERGpRXYilJ2djV27dmHChAl45pln0KVLFwDAqlWrMGDAAMUDJCIiIlKLpHmEpDh37hyMRiNatmypxO5Uw3mEiIiIfI+m8whJwfuMERERka+RnQgFBATAYDA4fdxsNrsVEBEREZGnyE6EPv30U7u/z58/j927d+ODDz7ArFmzFAuMiIiISG2K9RFaunQpli9fjrVr1yqxO9WwjxAREZHvUev6LXvUmDP9+/dHbm6uUrsjIiIiUp0iidDZs2fx1ltvIT4+XondEREREXmE7D5CYWFhdp2lhRA4ffo0WrdujSVLligaHBEREZGaZCdC2dnZdn8HBAQgMjISSUlJCAsLUyouIiIiItXJToQyMjLUiIOIiIjI4yT1ESosLJS10+LiYsnbzps3DwkJCQgODkZSUhK2b9/e5PanTp3C+PHjERsbi6CgIHTr1g3r16+XFR8RERERIDERuuaaa/CPf/wD33//vdNtKioqsHDhQvTs2ROrV6+W9OLLly/H5MmTkZmZiV27dqF3795IS0vD0aNHHW5fW1uLv/71rzhy5AhWrVqFAwcOYOHCheykTURERC6RNI/Q8ePH8eKLL+L9999HcHAwEhMTERcXh+DgYJw8eRL79u3Dzz//jKuvvhrPPvssbr31VkkvnpSUhGuuuQZz584FANTV1cFkMuHRRx/F1KlTG22/YMECvPrqq/jll19cvqcZ5xEiIiLyPWpdv2VNqHj27FmsW7cOX331FX7//XecPXsWERER6Nu3L9LS0tCzZ0/JL1xbW4vWrVtj1apVGDZsmG19RkYGTp065XBixltvvRXh4eFo3bo11q5di8jISIwaNQpPP/00jEajw9epqalBTU2N7e/KykqYTCYmQkRERD7EK2662qpVKwwfPhzDhw93+4XLy8thNpsRHR1ttz46Ohq//PKLw+f89ttv+OKLLzB69GisX78ehw4dwiOPPILz588jMzPT4XOysrK84tYfZjOwbRtQUgLExgIpKYCT3I2IiIg8RPaEiosWLcLZs2fViKVZdXV1iIqKwr///W8kJiZixIgReOaZZ7BgwQKnz5k2bRoqKipsS1FRkQcjtsjJARISgEGDgFGjLP8mJFjWExERkXZkJ0JTp05FdHQ0HnjgAXzzzTcuv3BERASMRiPKysrs1peVlSEmJsbhc2JjY9GtWze7ZrDLL78cpaWlqK2tdficoKAghISE2C2elJMDDB8O/PGH/friYst6JkNERETakZ0IFRcX44MPPkB5eTkGDhyIHj164JVXXkFpaams/QQGBiIxMdHu/mR1dXXIzc1FcnKyw+f85S9/waFDh1BXV2dbd/DgQcTGxiIwMFBuUVRnNgMTJwKOemFZ102aZNmOiIiIPE92ItSiRQvceeedWLt2LYqKijBu3Dh8/PHHuPTSS3HHHXdg7dq1dolKUyZPnoyFCxfigw8+wP79+/Hwww+juroaY8eOBQCMGTMG06ZNs23/8MMP48SJE5g4cSIOHjyIdevW4aWXXsL48ePlFsMjtm1rXBNUnxBAUZFlOyIiIvI82TNL1xcdHY3rrrsOBw8exMGDB7F3715kZGQgLCwMixYtwsCBA5t8/ogRI3Ds2DHMnDkTpaWl6NOnDzZs2GDrQF1YWIiAgIu5mslkwsaNG/H444+jV69eiI+Px8SJE/H000+7UwzVlJQoux0REREpS9bweauysjJ89NFHWLRoEX777TcMGzYMDzzwAFJTU1FdXY3nn38ey5Ytw++//65GzG7x5DxCeXmWjtHN2bIFaCZnJCIi0jWvmEcIAIYMGYKNGzeiW7du+L//+z+MGTMG4eHhdtscPXoUMTExkpvIPMmTiZDZbBkdVlzsuJ+QwQB06AAUFHAoPRERUVO8Yh4hAIiKisLWrVuddmgGgMjISBQUFLgVmD8wGoE5cyyjwwwG+2TIYLD8m53NJIiIiEgrLjWN+TItbrGRk2MZPVa/47TJZEmC0tM9EgIREZFP85oaocceewxdunTBY489Zrd+7ty5OHToELKzs5WKzW+kpwNDh3JmaSIiIm8ju0YoPj4en332GRITE+3W79q1C3fccQf+aGq8uBfgTVeJiIh8j1rXb9nzCB0/fhyhoaGN1oeEhKC8vFyRoIiIiIg8QXYi1KVLF2zYsKHR+s8//xydO3dWJCgiIiIiT5DdR2jy5MmYMGECjh07hhtvvBEAkJubi9dff539g4iIiMinyE6E7r//ftTU1ODFF1/EP//5TwBAQkIC5s+fjzFjxigeIBEREZFa3Bo+f+zYMbRq1Qpt2rRRMiZVsbM0ERGR7/Ga4fP1RUZGKhUHERERkcfJ7ixdVlaGv//974iLi0OLFi1gNBrtFiIiIiJfIbtG6L777kNhYSGeffZZxMbGwmC9VwQRERGRj5GdCH311VfYtm0b+vTpo0I4RERERJ4ju2nMZDJBZ7cnIyIiIj8lOxHKzs7G1KlTceTIERXCISIiIvIc2U1jI0aMwJkzZ3DZZZehdevWaNmypd3jJ06cUCw4IiIiIjXJToQ4ezT5K7MZ2LYNKCkBYmOBlBSAAyGJiPyb7EQoIyNDjTiINJWTA0ycCPzxx8V1HToAc+YA6enaxUVEROqS3UcIAA4fPowZM2Zg5MiROHr0KADLTVd//vlnRYMj8oScHGD4cPskCACKiy3rc3K0iYuIiNQnOxHaunUrrrrqKnz33XfIyclBVVUVAOCHH35AZmam4gESqclsttQEORoIaV03aZJlOyIi8j+yE6GpU6fihRdewKZNmxAYGGhbf+ONN+Lbb79VNDgitW3b1rgmqD4hgKIiy3ZEROR/ZCdCe/fuxZ133tlofVRUFMrLyxUJishTSkqU3Y6IiHyL7ESoXbt2KHFwVdi9ezfi4+MVCYrIU2Jjld2OiIh8i+xE6N5778XTTz+N0tJSGAwG1NXV4euvv8aTTz6JMWPGqBEjkWpSUiyjw5zdMs9gAEwmy3ZEROR/ZCdCL730Enr06AGTyYSqqipcccUVuP766zFgwADMmDFDjRiJVGM0WobIA42TIevf2dmcT4iIyF8ZhIs3DisqKsLevXtRVVWFvn37omvXrkrHporKykqEhoaioqICISEhWodDXsLRPEImkyUJ4jxCRETaU+v6LTsRev755/Hkk0+idevWduvPnj2LV199FTNnzlQsODUwESJnOLM0EZH38ppEyGg0oqSkBFFRUXbrjx8/jqioKJi9fMIVJkJERES+R63rt+w+QkIIGBz0LP3hhx8QHh6uSFBEREREniD5XmNhYWEwGAwwGAzo1q2bXTJkNptRVVWFhx56SJUgiYiIiNQgORHKzs6GEAL3338/Zs2ahdDQUNtjgYGBSEhIQHJysipBEhEREalBciJkvet8p06dMGDAALRs2VK1oIiIiIg8QXIiZHXDDTfY/n/u3DnU1tbaPc4OyEREROQrZHeWPnPmDCZMmICoqChccsklCAsLs1uIiIiIfIXsRGjKlCn44osvMH/+fAQFBeHdd9/FrFmzEBcXhw8//FCNGImIiIhUIbtp7D//+Q8+/PBDDBw4EGPHjkVKSgq6dOmCjh074uOPP8bo0aPViJOIiIhIcbJrhE6cOIHOnTsDsPQHOnHiBADguuuuw5dffqlsdEREREQqkp0Ide7cGQUFBQCAHj16YMWKFQAsNUXt2rVTNDgiIiIiNclOhMaOHYsffvgBADB16lTMmzcPwcHBePzxxzFlyhTFAyQiIiJSi8t3n7f6/fffsXPnTnTp0gW9evVSKi7V8F5jREREvsdr7jXWUMeOHZGeno7w8HA8+OCDSsRERERE5BFuJ0JWx48fx3vvvafU7oiIiIhUp1giRERERORrmAgRERGRbjERIiIiIt2SPLN0enp6k4+fOnXK3ViIiIiIPEpyIhQaGtrs42PGjHE7ICIiIiJPkZwILVq0SM04iIiIiDyOfYSIiIhIt5gIERERkW4xESIiIiLdYiJEREREusVEiIiIiHRL0qixzz77TPIO77jjDpeDISIiIvIkSYnQsGHDJO3MYDDAbDa7Ew8RERGRx0hqGqurq5O0uJoEzZs3DwkJCQgODkZSUhK2b98u6XnLli2DwWCQnKgRERER1ad5H6Hly5dj8uTJyMzMxK5du9C7d2+kpaXh6NGjTT7vyJEjePLJJ5GSkuKhSImIiMjfGIQQQu6TqqursXXrVhQWFqK2ttbusccee0zWvpKSknDNNddg7ty5ACy1TyaTCY8++iimTp3q8DlmsxnXX3897r//fmzbtg2nTp3CmjVrJL1eZWUlQkNDUVFRgZCQEFmxEhERkTbUun5LvsWG1e7du3HrrbfizJkzqK6uRnh4OMrLy9G6dWtERUXJSoRqa2uxc+dOTJs2zbYuICAAqampyM/Pd/q8559/HlFRUXjggQewbdu2Jl+jpqYGNTU1tr8rKyslx0dERET+TXbT2OOPP44hQ4bg5MmTaNWqFb799lv8/vvvSExMxGuvvSZrX+Xl5TCbzYiOjrZbHx0djdLSUofP+eqrr/Dee+9h4cKFkl4jKysLoaGhtsVkMsmKkYiIiPyX7ERoz549eOKJJxAQEACj0YiamhqYTCbMnj0b06dPVyNGm9OnT+Pvf/87Fi5ciIiICEnPmTZtGioqKmxLUVGRqjESERGR75DdNNayZUsEBFjyp6ioKBQWFuLyyy9HaGio7CQjIiICRqMRZWVlduvLysoQExPTaPvDhw/jyJEjGDJkiG1dXV2dpSAtWuDAgQO47LLL7J4TFBSEoKAgWXERERGRPshOhPr27Yvvv/8eXbt2xQ033ICZM2eivLwcH330EXr27ClrX4GBgUhMTERubq5tCHxdXR1yc3MxYcKERtv36NEDe/futVs3Y8YMnD59GnPmzGGzFxEREckiOxF66aWXcPr0aQDAiy++iDFjxuDhhx9G165d8d5778kOYPLkycjIyEC/fv1w7bXXIjs7G9XV1Rg7diwAYMyYMYiPj0dWVhaCg4MbJVvt2rUDANlJGBEREZHsRKhfv362/0dFRWHDhg1uBTBixAgcO3YMM2fORGlpKfr06YMNGzbYOlAXFhbamuKIiIiIlCR7HqEbb7wROTk5tpoYq8rKSgwbNgxffPGFkvEpjvMIERER+R61rt+yq1ry8vIaTaIIAOfOnWt2Th8iIiIibyK5aezHH3+0/X/fvn128/yYzWZs2LAB8fHxykZHREREpCLJiVCfPn1gMBhgMBhw4403Nnq8VatWePvttxUNjoiIiEhNkhOhgoICCCHQuXNnbN++HZGRkbbHAgMDERUVBaPRqEqQRERERGqQnAh17NgRwMUJDImIiIh8nezh84Blhufs7Gzs378fAHDFFVdg4sSJjWZ1JiIiIvJmskeNbdy4EVdccQW2b9+OXr16oVevXvjuu+9w5ZVXYtOmTWrESERERKQK2fMI9e3bF2lpaXj55Zft1k+dOhX/+9//sGvXLkUDVBrnESIiIvI9al2/ZSdCwcHB2Lt3L7p27Wq3/uDBg+jVqxfOnTunWHBqYCJE3shsBrZtA0pKgNhYICUF4NgDIqKLvGZCxcjISOzZs6fR+j179iAqKkqJmIh0JScHSEgABg0CRo2y/JuQYFlPRETqktxZ+vnnn8eTTz6JcePG4cEHH8Rvv/2GAQMGAAC+/vprvPLKK5g8ebJqgeoJawf0IycHGD4caFgvW1xsWb9qFZCerk1sRER6ILlpzGg0oqSkBJGRkcjOzsbrr7+OP//8EwAQFxeHKVOm4LHHHoPBYFA1YHd5e9NYTg4wcSLwxx8X13XoAMyZwwuivzGbLTU/9T/r+gwGy2dfUMBEmIhI8z5CAQEBKC0ttWv+On36NACgbdu2igWkNm9OhJzVDlhzS9YO+Je8PEszWHO2bAEGDlQ7Gtew9pKIPMUr+gg1rO1p27atTyVB3sxsttQEOUpLresmTbJsR/6hpETZ7TyNfZuIyB/ImlCxW7duzTZ9nThxwq2A9GrbNudNJIAlGSoqsmznrbUDJE9srLLbeRL7NhGRv5CVCM2aNQuhoaFqxaJrvl47QPKlpFj6ABUXO64JtPYRSknxfGxNaa720mCw1F4OHcpmMiLyfrISoXvvvZdD5FXiy7UD5Bqj0dIJfvhwS/JQP7GwVrxmZ3tfMsHaSyLyJ5L7CHn7aDBfZ60dcPY2GwyAyeR9tQPknvR0SzNSfLz9+g4dvLd5ibWXRORPJNcIyZyAmmTy1doBcl96uqUZyVdGX7H2koj8iexbbPg6bx4+DzieR8hksiRB3lg7QPpjnf+oub5NnP+IiJSk1vVbVh8hUp+v1Q6Q/rD2koj8CRMhL2Q0spMpeTdr3yZHs6Cz9pKIfAkTISJyCWsvicgfMBEiIpex9pKIfJ2sW2wQERER+RMmQkRERKRbTISIiIhIt5gIERERkW4xESIiIiLdYiJEREREusVEiIiIiHSLiRARERHpFhMhIiIi0i0mQkRERKRbTISIiIhIt5gIERERkW4xESIiIiLd4t3nPcRsBrZtA0pKgNhYICXFcuduIiIi0g4TIQ/IyQEmTgT++OPiug4dgDlzgPR07eIiIiLSOzaNqSwnBxg+3D4JAoDiYsv6nBxt4iIiIiImQqoymy01QUI0fsy6btIky3beyGwG8vKATz6x/OutcRIREbmKiZCKtm1rXBNUnxBAUZFlO2+TkwMkJACDBgGjRln+TUhgDRYREfkXJkIqKilRdjtPYXMeERHpBRMhFcXGKrudJ/h6cx4RycMmcNI7JkIqSkmxjA4zGBw/bjAAJpNlO2/hy815RCQPm8CJmAipymi0DJEHGidD1r+zs71rPiFfbc4jInnYBE5kwURIZenpwKpVQHy8/foOHSzrvW0eIV9sziMiedgETnSRQQhHXwX/VVlZidDQUFRUVCAkJMRjr+srM0ubzZaq8eJixydJg8GSxBUUeGf8RNS8vDxLM1hztmwBBg5UOxoiadS6fnNmaQ8xGn3jhGJtzhs+3JL01E+GvLU5j4jkYRM40UVsGqNGfK05j/wDRy95DpvAiS5i0xg55SvNeeT7eD8+z2ITOPkiNo2Rx/lKcx75NuvopYYXZOvoJdZCKo9N4EQXsWmMyIvorXmIo5e0wyZwIgvWCBF5CT02D8mZwJO1k8pLTweGDmUTOOkbEyEiL6DX5iGOXtIem8BJ79g0RqQxPTcPcfQSEWnNKxKhefPmISEhAcHBwUhKSsL27dudbrtw4UKkpKQgLCwMYWFhSE1NbXJ7Im+n5/u7+eL9+IjIv2ieCC1fvhyTJ09GZmYmdu3ahd69eyMtLQ1Hjx51uH1eXh5GjhyJLVu2ID8/HyaTCTfffDOKi4s9HDmRMvTcPOSL9+MjIv+i+TxCSUlJuOaaazB37lwAQF1dHUwmEx599FFMnTq12eebzWaEhYVh7ty5GDNmTLPbcx4h8ja83YHjjuImkyUJ8se+UUQkn1/OI1RbW4udO3di2rRptnUBAQFITU1Ffn6+pH2cOXMG58+fR3h4uMPHa2pqUFNTY/u7srLSvaCJFGZtHmpucjt/bh7i6CXvxslVyZ9pmgiVl5fDbDYjOjrabn10dDR++eUXSft4+umnERcXh9TUVIePZ2VlYdasWW7HSqQWTm5nwdFL3snZtA5vvAFERjI5It+neR8hd7z88stYtmwZPv30UwQHBzvcZtq0aaioqLAtRUVFHo6SqHmc3I68kXVah4ad+f/4A7jnHkuT7qhRln8TEizbE/kaTWuEIiIiYDQaUVZWZre+rKwMMTExTT73tddew8svv4zNmzejV69eTrcLCgpCUFCQIvESqYnNQ+RNmprWwRF/n/OK/JemNUKBgYFITExEbm6ubV1dXR1yc3ORnJzs9HmzZ8/GP//5T2zYsAH9+vXzRKhEHmFtHho50vIvkyDSSnPTOjTk73Nekf/SvGls8uTJWLhwIT744APs378fDz/8MKqrqzF27FgAwJgxY+w6U7/yyit49tln8f777yMhIQGlpaUoLS1FVVWVVkUgIvI7rkzX4M9zXpH/0vwWGyNGjMCxY8cwc+ZMlJaWok+fPtiwYYOtA3VhYSECAi7ma/Pnz0dtbS2GDx9ut5/MzEw899xzngydiMhvuTObtz/OeUX+S/N5hDyN8wgRETXPbLZ0gHY2rUNT/HnOK9KOWtdvzZvGiMh/mc2WCSM/+cTyL/uO+I6mZv12hrdEIV/ERIiIVJGTY6lRcGWINRMo7+BsWgdH9DTnFfkXNo0RkeKs8880PLtYL5ZNDbF2NoHfnDkclq2VhjNLl5cDjz/OW6KQZ6l1/WYiRESKsvYtcTb02nrLkIKCxjUH7iRQ5Flq3HbDW27l4S1xkD0mQgphIkSkLldvIutOAkW+z1tqAr0lDmqMnaWJVMC+KMqTOnS64XbNTeDnjXPU8PhRhrNbeVhnq/bUrTu8JQ7yLCZCpFvudOYl56TOP9NwO1cTKK148/HjSwlaU7fy8ORs1d4SB3keEyHSJf7yU09KiqUpwdmQa2dDrF1NoLTgzcePNydojnhLTaDUON5+2zcSTJKOiRD5BTm/gPnLzz3NvddNzT/T1BBrVxMoT/Pm48ebEzRnvKUmUOr+H3/cNxJMko6JEPk8ub+AveUXqC9omPSsWiXtvXY2/0yHDs5HfrmaQHmatx4/3pygNcUbagLNZqCsTP7zvDnBJOk0v9cYkVSOhrSuXet4uLX1BOXooustv0C9naPRM444e6/T04GhQ+UNQ7YmUI5G7XjLHDXuHj9qDc2Wk6B50+0vrDWBzm7lYR0tqFZNoNTj3BEhLPFNmmQ51j2RpFuPn+Ji4NgxIDLS8oODQ/xdx0TIg/Q6N4US5XZ0soqPB86dc/4L2NkJyht+gXo7Z/P5ONLUe200yr/oupJAeZI7x4+aQ7N9NcG31gQOH245juofc2rXBMo5zp3xZILZVNLGIf5uEDpTUVEhAIiKigqPvu7q1UJ06CCE5WtjWTp0sKz3Z0qUe/VqIQwG+33IWbZssd/fhQuWGJzt02AQwmSybKdH1vdHiffaH7l6/Dg7jg0Gy+LuuWDLFt/+jBydK0wm6e/LhQuWsi1davm3ue+vO8e5o2XpUnffgaZJOQ8qcRx5M7Wu30yEPEDtE6C3UqLcSpysHJ2grLE1jK+52KSebOWelJsqvxL7kUPqBVWLi4G3kHv8NHccK5F8+0OC7+rx7soPLqnH+fjx2ieYUs+DvvAZu4OJkEI8nQh54gTojZQqtzsX5eZOUHJ/gUo92SpRC3bhghCzZgkRHu7eflyxdKny77U/knP8bN7smffP1QRfDmfJihZJuxCu/+CSepwvWaJ9gin3POiv30MmQgrxdCLk69XVrlKq3O5clOufoNw9eUs92SpRC7Z6tRDt2zsvk9q1iK4kn/6a0DdHyvGzenXjhNbZokSNmrtNTHL33aGDEFOmuJb8u5s8ufODS845yhMJZlPkngf9tWaWiZBCPJ0IST2A1TpwtfqVplS5Xa0Rqn+CcreGRurJtqbG/Vqw1au1Tzqaa2LxRHKm1XHrDkcxy+3fptQPIjXeP7llae64UOJ7+dprrr+vcpsS1Uwwm8MaIQsmQgrRU42Qlh20lSq3lJNV+/bOT1BK1NBILcubb7pXZrn9odQ82Tn7BexoUfpi4IsDCxzFHB/vvGavuYuut3G1r55aHcebqjV1tDj7wdXccT5rln3sWiXo7CNkwURIIVr1EfJ0+7LWHbSVLLeUamlHJyil+ilJrd2aMMG9k7LcX32eGKXiKMFcsUK9i4HWx61U9Y+3WbPkJwiOyuctZXPE3b569ZN2d7+XUmpNm3p9R/trKh5vScI5aoyJkGLUTIRqaiy1AhMmWP6tqbGsV6p9Wc6IJW/ooK1ku7or1dJK1Up5qkZIbj8Ad2uEpBxPnvwF7C3HbXOau3DKXdq39/6Llzt99QD7pN2d7+WFC5aaNqmvK/WYsQ5OcLYPb0kwmjr26p8PfbFpWQomQgpR642cMkUIo9H+wDQaLeuFcL99WU5zgTd10FayXV3ul1upfkpSa7esfYRcrQWT86vb3YTAG5ufvOm4dcbdOa0cLZs3a1ceqZSsEXLneyk3DqWm6Wj43dUy0bC+9pIllh9fS5bYx7BypRCRkd713VYKEyGFqPFGTpnS9JfRmgy5M0eGnOYCNTtou1IGrU4aSl5YpdZuuVMLJrWTsru/TrVqfmruONB6YEFzlJ6Az1tquKSQ24G+qTK6872UUzMlp6ZN7ggyNX9EuDNXWVPXIm+p1XIHEyGFKP1G1tQ0rglquBiNF5vJ5HKluUCtX9aungDkJEJKJk1K98+SWrvlTi1Yc5033W1G0ar5Scqx4+01QkrMadVw8aULk5wO9NZjqanJJV35Xsr5DOTUtElNsG65RV5Z5Vq9unHTX3y8tHOMlCkafCXxdoaJkEKUfiOl9gt5803X9u/KxWHFiqaTM1cudq7WIshJntT4paX0/B/u/FqTE7Ojk1zDESyu0CLZkHrseGpggaufjbv9ZBwts2b5Vj8OZ0m+o3mEmpuc1JXvpdQ+Qh06yPvBJXXCy6YWR8ennGOtuU7gzc1VJnXx5aH1TIQUovQbKXWk0COPqHvytTYXqDGyQE4tQsPRNFKTJ1cSLTmTIco5SXtDR0O1YvB085PcGii1J65zJ8lUo0ao4cXbnePcU5zF01ycDR9fudK1mlMpo8aa2kdTUx0o0f/LmmjI+WF34ULz0wG0b9/8XGVSliVLJHzIXoqJkEK0qhEKDZX2hWhIzi94KX0YjEbLCUgOqTHMmiX9S9oweZLbXCO39sidpMlfOhoK4fkaIamvt3mzfQKtxsR1zf1IaK7Z0dV+MlIXZz8QvO14dCUxc1aOZcscj7SVsj9HiUNzn6HUH4rufI4TJsj7ESiE9BopqRNINrVERvru+YyJkEK06CMk9aTniJzmArUucmo0CdSPRW7canX2lbNftX+ly91//e03b7Ysjp7r6XmtpB47Dfs3xMcr22wkZ0I6KRdSKRdLqbfVcPb+e+OcSq7UqMlpypE7s/TmzULMmGFZNm+2nI+dfW+kHgOunM9d/YytZsyQ9txhw5R5fV/tOM1ESCFajBqT84VwRGpzgavNHs1ddNVsEpgxQ95EhFJOZs31D3BEyn4jIiwnWrV/pcvdv9wJ4eQ2P7mT9Ll77Cj1nio5NYGzptaGE0260+9k8+amm0q0GHHmSo2a3JF27lykm/veyD0WBw9279htbqn/g1RqIvS3vynz2r40YrE+JkIKUeONlNJmLfULUV/D/jbNNRe4UiPk6OQREWE5qdePQ80mATnvk9QyZmbK+wyl7jcw0PmJRak+LHJqAaRW9UtpcpE6As6V+7S5euy0b6/MydqdySodJYJSkkN3yn7XXfLibCoeJWovXa1RczURDg+3JINKTjEi5xgwGBrPxaP0Uv8HqdSkeeNGZc/FvtZxmomQQpR+I5WYW8RRx1RHF6CwMCHuu6/xBFrWKuLp04Vo27bpL3f9XwErVzYd1xNPNO747KgWQc2TRf24a2qk/3Kyxm99f5q7ECjV/NfUrywpnUml3tzVOqGa1JO1KyNalGqakTvsuuEya5a012mK3Ntg1B984E4i6GrZm/oeN4yzqRilDsdujqs1au5+r6ROzyHle+NKDV3Dvp1KLm++aX8Ob66zdHh4002mrixyBkV4Q6d9JkIKUfqNVKLZqOF8F80d6CEhQkyadHHkhZybD1qft2yZ/Lbw9u0bv5bJJET//uqdLKwXEUfDc6Usd9wh7UKmZPOfo19ZSs6j484vVam/AJWeb8jVeU8AIdq0ce+k60qNrXXiPKUSQTmDCOR8viNGOI+xuefKSYZcrVFzd1i69b1u6v52cjrke0PNdv2l/jmgueO0ftPj6tWWmnt3X7/+IAVfGETCREghSr+RStQk1E+ElKhhcrQo0QHQegKp34m1pkZeIiZ3sc5RouTJy1nnZ6Xe94bDU5tLbK3J6ZIl6r2P1kXqL0A1Ot67M3eLq7VCrnyu9W+X0tQxJCcRdDSthLM+WpMmSY/Vne+1tdlRyi99uT8UrDVVcu4LJqec9S/CcvpGKlmbosTS8FzkbDRcw21Xr7a0ELjz2u3bO09uXJ0GRW1MhBTijTVCM2YoO7FX/aVNG+W/uPUvAGp1pB427GKipUZi6GxIvhL7fu21i/uUcyFW4hdec4vUxEXOxUXu/DH1mwOk1gq52lfIlTvDr1yp/jQDzmrIMjOVGSItdcnMlPZLv7lJWhsuzi6eSi31L8JyP6uVKz3zXZOzREZaznVSzhetW6s7hQMg/cetpztdMxFSiFp9hJQ6MF0ZcqvFYj2pqDW0fsYMy/7VnsSu4YXMlQtnw2X69Iv7Uzt+qUtTJ6yamsZzubgzd1TD6v6mHpfzfstNOlxNbK1Jm5Rt3Zl48sIFS/m97TvfsOZXblLToYM6P16cHdPNNfM3nJJAydjCwy82Tzp7jzIypO0rMlKZ848Wi6c6XTMRUohao8bc6Qzqi4u1w7bU0S1yF2tz4e23q1sOR1MJuFudb03ihHA9UVS7KdBqypTGFxGj0dLRvLn5hpqbiddZk2b9eC5ckF5rKbdjp6tNttaaKynbWmu4XOlE6m3NNEotap0TXF3qNycp9X4HBdn/7aj/pHXxtkRXjcVTN0JmIqQQtd5IJdvDfWFRc2iptRlkxQr1y+HoQtbcaLrmlvp9vlxt6lTy/XXWqbG5+a+GDm16pGBziUZTFx3rr/SVK6WPkHrtNenDw935ZW3dh5RbHji6TYQSI524KLdkZAhx5kzz73d4uGebJf1pYY2Qj1HrjRRC+f49/rK0aiVve+sstWq341v7ZDi6kE2ZIkRwsPx9Nhzh5Ooxceed0hOE5paNGxsfq1JmRA8IEOLRRxsnZSaT9lX4ERGWTsWOmubi413vG2c0Xuyr0VwiFBTUdLLX1GzL3tJkqpclIEDadq+/ro8aHKUW9hHyUWomQmreikJPi5ymCbW+3AaDJQlw5fn1awO84Zho29Z+gkwhpN8jz7qEhFhm2rX2IXrsMe3LpdYiZ+LO5hZntwrxhuOCi/4Wa+IuNTFsbl/+MmqsBUgxUVFaR+Affv0VqKvT7vWFsPw7d65rzx87Frj9diAwEIiNVS4uV50+DdxzDzBlCjB7tmXdxo3y9lFZCWzYYFleeAE4flz5OL1FVhYQHa3MvoqLgczMi3/HxwNvveUdxwXpT3w80KULkJfn/r7Cw4F//xtIT3d/X1oL0DoAf5GTA2RkaB2FdC1bah2Bc889B2zapHUUFxMiuSorLSecnBwgJQXo0AEwGJSNzRWvvgqsWmWJa8MG1/fjz0kQAPzvf8BHH6mz7+Ji4K67gGPHLMcFSdO+vf3f3vB98jUZGcCpU8okQYB/nQcMQrh6uvdNlZWVCA0NRUVFBUJCQhTZZ04OMHy46xdOTwoPB5YsAW69VetInDMYgDZtLDUZvsxgsCQegOXi5w3at7fEVV6udST61r49sGABcPfdWkfieQaD5Twk9UJ6zz3AHXcAubnA2rXAiRPqxkfSGAyWZL6gADAaPfOaaly/AdYIuc1sBiZO9I0kyGAAFi4EDhxwfR/WC6mahPD9JMhq0iRtm/kaOn6cSZA3OH4cCAsDVq+2JAV6YTDIP1euWAH87W/AokVMgryJEEBREbBtm9aRuI+JkJu2bQP++EPrKJrXoYOldiI9HTh82PX91NRYvgCsmm6e9UTxyCNaR0LeKDMTCA0FSkqAESO0jsYzIiIsZfWnZhW9KynROgL3MRFyU3Gx1hE0LyTEkvxYO7Vddpnr+6qqsvyrp1+x7jp2TOsIyBt9/TWQmmqpZTWbtY7GM1JSgOXLtY6ClOQPHf85asxNvnCRq6y0dJAzGi3/7tvn/j6Dg4F77wWWLXN/X46EhQEnT6qz7+a4Un1P5Kqqqot9yfxdTo7WEZCSIiKAAQO0jsJ9TITcFBmpdQTSpKUpu7/iYmDNGmX3WV9NjXr7bk5QEHDunDL7atvWc/2dmMARkSeVlwNxcb4/jJ5NY26Kj9c6Au0olSw4cuaMevtujpLlOn3aMgLOE32qmAQRkacdP24ZFevLtX1MhNw0YIDnhg6Sb6qqYpJCRP7tH/8Aamu1jsI1TITc9M03+unoSK7jKDsi8mfl5RcnkvU1TITc5A9DB0l9rBEiIn9XXu6bzWRMhNz0669aR0BEROQ9Ro/2rZYSJkJuMJstveWJiIjI4tw54PnntY5COiZCbti2zTcmVCQiIvKk117znVohJkJuKCrSOgIiIiLvc+aM79yHjImQG7Zu1ToCIiIi7zR2rNYRSOMVidC8efOQkJCA4OBgJCUlYfv27U1uv3LlSvTo0QPBwcG46qqrsH79eg9Fam/DBk1eloiIyOsdOQLcfrvWUTRP81tsLF++HJMnT8aCBQuQlJSE7OxspKWl4cCBA4iKimq0/TfffIORI0ciKysLt99+O5YuXYphw4Zh165d6Nmzp/QXrq52eybEk8VAa7f2QERE5L+2rAPuvhVYuVKBnVVXK7CTxgxCaDvDSVJSEq655hrMnTsXAFBXVweTyYRHH30UU6dObbT9iBEjUF1djf/+97+2df3790efPn2wYMGCZl+vsrISoaGhqAAQolgpiIiISE2VAEIBVFRUICREuSu4pk1jtbW12LlzJ1JTU23rAgICkJqaivz8fIfPyc/Pt9seANLS0pxuT0REROSMpk1j5eXlMJvNiI6OtlsfHR2NX375xeFzSktLHW5fWlrqcPuamhrU1LuVeWVlpeU/f/4JuJlRXtLGracTERHpxisvAxMmuLGDykrL7e4VpnkfIbVlZWVh1qxZjR+45BLL4gYNb5BORETkUw78AcCdy65KExNp2jQWEREBo9GIsrIyu/VlZWWIiYlx+JyYmBhZ20+bNg0VFRW2pYiT/xAREXncZZdpHYFjmiZCgYGBSExMRG5urm1dXV0dcnNzkZyc7PA5ycnJdtsDwKZNm5xuHxQUhJCQELtFKTt2KLYrIiIivxUQADzyiNZROKZ509jkyZORkZGBfv364dprr0V2djaqq6sx9v/PxDRmzBjEx8cjKysLADBx4kTccMMNeP3113Hbbbdh2bJl2LFjB/6twU2/EhM9/pJEREQ+54kngMBAraNwTPNEaMSIETh27BhmzpyJ0tJS9OnTBxs2bLB1iC4sLERAwMWKqwEDBmDp0qWYMWMGpk+fjq5du2LNmjXy5hBSkBCAwaDJSxMREXm9KVOA2bO1jsI5zecR8jTbPEIKz0OwcyfQr59iuyMiIvJZwcHAtGnA1KnK1QSpdf3WvEbIXyQmWmqHiIiIyHd4xb3GiIiIiLTARIiIiIh0i4kQERER6RYTISIiItItJkJERESkW0yEiIiISLeYCBEREZFuMREiIiIi3WIiRERERLqlu5mlrXcUqays1DgSIiIiksp63Vb6zmC6S4ROnz4NADCZTBpHQkRERHKdPn0aoaGhiu1Pdzddraurw59//om2bdvCoPBt4ysrK2EymVBUVKToDeG8DcvpX/RQTj2UEWA5/Q3LaU8IgdOnTyMuLg4BAcr17NFdjVBAQAA6dOig6muEhIT49UFrxXL6Fz2UUw9lBFhOf8NyXqRkTZAVO0sTERGRbjERIiIiIt1iIqSgoKAgZGZmIigoSOtQVMVy+hc9lFMPZQRYTn/DcnqG7jpLExEREVmxRoiIiIh0i4kQERER6RYTISIiItItJkIKmTdvHhISEhAcHIykpCRs375d65Cceu6552AwGOyWHj162B4/d+4cxo8fj/bt26NNmza46667UFZWZrePwsJC3HbbbWjdujWioqIwZcoUXLhwwW6bvLw8XH311QgKCkKXLl2wePFiVcv15ZdfYsiQIYiLi4PBYMCaNWvsHhdCYObMmYiNjUWrVq2QmpqKX3/91W6bEydOYPTo0QgJCUG7du3wwAMPoKqqym6bH3/8ESkpKQgODobJZMLs2bMbxbJy5Ur06NEDwcHBuOqqq7B+/XqPlfO+++5r9PkOHjzY58qZlZWFa665Bm3btkVUVBSGDRuGAwcO2G3jyWNVje+4lDIOHDiw0ef50EMP+UwZAWD+/Pno1auXbZ6Y5ORkfP7557bHff1zlFpOf/gsHXn55ZdhMBgwadIk2zqf+kwFuW3ZsmUiMDBQvP/+++Lnn38W48aNE+3atRNlZWVah+ZQZmamuPLKK0VJSYltOXbsmO3xhx56SJhMJpGbmyt27Ngh+vfvLwYMGGB7/MKFC6Jnz54iNTVV7N69W6xfv15ERESIadOm2bb57bffROvWrcXkyZPFvn37xNtvvy2MRqPYsGGDauVav369eOaZZ0ROTo4AID799FO7x19++WURGhoq1qxZI3744Qdxxx13iE6dOomzZ8/athk8eLDo3bu3+Pbbb8W2bdtEly5dxMiRI22PV1RUiOjoaDF69Gjx008/iU8++US0atVK/Otf/7Jt8/XXXwuj0Shmz54t9u3bJ2bMmCFatmwp9u7d65FyZmRkiMGDB9t9vidOnLDbxhfKmZaWJhYtWiR++uknsWfPHnHrrbeKSy+9VFRVVdm28dSxqtZ3XEoZb7jhBjFu3Di7z7OiosJnyiiEEJ999plYt26dOHjwoDhw4ICYPn26aNmypfjpp5+EEL7/OUotpz98lg1t375dJCQkiF69eomJEyfa1vvSZ8pESAHXXnutGD9+vO1vs9ks4uLiRFZWloZROZeZmSl69+7t8LFTp06Jli1bipUrV9rW7d+/XwAQ+fn5QgjLhTggIECUlpbatpk/f74ICQkRNTU1QgghnnrqKXHllVfa7XvEiBEiLS1N4dI41jBBqKurEzExMeLVV1+1rTt16pQICgoSn3zyiRBCiH379gkA4vvvv7dt8/nnnwuDwSCKi4uFEEK88847IiwszFZOIYR4+umnRffu3W1/33PPPeK2226ziycpKUn84x//ULSMQjQupxCWRGjo0KFOn+OL5RRCiKNHjwoAYuvWrUIIzx6rnvqONyyjEJaLZ/0LTEO+VkarsLAw8e677/rl51iftZxC+N9nefr0adG1a1exadMmu7L52mfKpjE31dbWYufOnUhNTbWtCwgIQGpqKvLz8zWMrGm//vor4uLi0LlzZ4wePRqFhYUAgJ07d+L8+fN25enRowcuvfRSW3ny8/Nx1VVXITo62rZNWloaKisr8fPPP9u2qb8P6zZavScFBQUoLS21iyk0NBRJSUl25WrXrh369etn2yY1NRUBAQH47rvvbNtcf/31CAwMtG2TlpaGAwcO4OTJk7ZttC57Xl4eoqKi0L17dzz88MM4fvy47TFfLWdFRQUAIDw8HIDnjlVPfscbltHq448/RkREBHr27Ilp06bhzJkztsd8rYxmsxnLli1DdXU1kpOT/fJzdFROK3/6LMePH4/bbrutUTy+9pnq7l5jSisvL4fZbLb7MAEgOjoav/zyi0ZRNS0pKQmLFy9G9+7dUVJSglmzZiElJQU//fQTSktLERgYiHbt2tk9Jzo6GqWlpQCA0tJSh+W1PtbUNpWVlTh79ixatWqlUukcs8blKKb6MUdFRdk93qJFC4SHh9tt06lTp0b7sD4WFhbmtOzWfaht8ODBSE9PR6dOnXD48GFMnz4dt9xyC/Lz82E0Gn2ynHV1dZg0aRL+8pe/oGfPnrY4PHGsnjx50iPfcUdlBIBRo0ahY8eOiIuLw48//oinn34aBw4cQE5Ojk+Vce/evUhOTsa5c+fQpk0bfPrpp7jiiiuwZ88ev/ocnZUT8J/PEgCWLVuGXbt24fvvv2/0mK99N5kI6dAtt9xi+3+vXr2QlJSEjh07YsWKFR5PUEh59957r+3/V111FXr16oXLLrsMeXl5uOmmmzSMzHXjx4/HTz/9hK+++krrUFTjrIwPPvig7f9XXXUVYmNjcdNNN+Hw4cO47LLLPB2my7p37449e/agoqICq1atQkZGBrZu3ap1WIpzVs4rrrjCbz7LoqIiTJw4EZs2bUJwcLDW4biNTWNuioiIgNFobNQbvqysDDExMRpFJU+7du3QrVs3HDp0CDExMaitrcWpU6fstqlfnpiYGIfltT7W1DYhISGaJFvWuJr6nGJiYnD06FG7xy9cuIATJ04oUnatjofOnTsjIiIChw4dAuB75ZwwYQL++9//YsuWLejQoYNtvaeOVU98x52V0ZGkpCQAsPs8faGMgYGB6NKlCxITE5GVlYXevXtjzpw5fvU5NlVOR3z1s9y5cyeOHj2Kq6++Gi1atECLFi2wdetWvPXWW2jRogWio6N96jNlIuSmwMBAJCYmIjc317aurq4Oubm5du3C3qyqqgqHDx9GbGwsEhMT0bJlS7vyHDhwAIWFhbbyJCcnY+/evXYX002bNiEkJMRWBZycnGy3D+s2Wr0nnTp1QkxMjF1MlZWV+O677+zKderUKezcudO2zRdffIG6ujrbCSs5ORlffvklzp8/b9tm06ZN6N69O8LCwmzbeFPZ//jjDxw/fhyxsbEAfKecQghMmDABn376Kb744otGTXWeOlbV/I43V0ZH9uzZAwB2n6c3l9GZuro61NTU+MXnKKWcjvjqZ3nTTTdh79692LNnj23p168fRo8ebfu/T32mkrtVk1PLli0TQUFBYvHixWLfvn3iwQcfFO3atbPrDe9NnnjiCZGXlycKCgrE119/LVJTU0VERIQ4evSoEMIy7PHSSy8VX3zxhdixY4dITk4WycnJtudbhz3efPPNYs+ePWLDhg0iMjLS4bDHKVOmiP3794t58+apPnz+9OnTYvfu3WL37t0CgHjjjTfE7t27xe+//y6EsAyfb9eunVi7dq348ccfxdChQx0On+/bt6/47rvvxFdffSW6du1qN6z81KlTIjo6Wvz9738XP/30k1i2bJlo3bp1o2HlLVq0EK+99prYv3+/yMzMVHRYeVPlPH36tHjyySdFfn6+KCgoEJs3bxZXX3216Nq1qzh37pxPlfPhhx8WoaGhIi8vz2648ZkzZ2zbeOpYVes73lwZDx06JJ5//nmxY8cOUVBQINauXSs6d+4srr/+ep8poxBCTJ06VWzdulUUFBSIH3/8UUydOlUYDAbxv//9Twjh+5+jlHL6y2fpTMMRcb70mTIRUsjbb78tLr30UhEYGCiuvfZa8e2332odklMjRowQsbGxIjAw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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"31416 32 [32, 10, 23382, 31416, 0]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import json\n",
|
|
"f = open('/home/weihao/sledge/sledge_tree/runtime/tests/request_time.txt', 'r')\n",
|
|
"js = f.read()\n",
|
|
"f.close()\n",
|
|
"times = json.loads(js)\n",
|
|
"keys = list(times.keys())\n",
|
|
"int_keys = list(map(int, keys))\n",
|
|
"x=sorted(int_keys)\n",
|
|
"#print(x)\n",
|
|
"print(len(x))\n",
|
|
"y_list=list(times.values())\n",
|
|
"\n",
|
|
"#deadline = 73076\n",
|
|
"deadline = 472592\n",
|
|
"y_latency=[]\n",
|
|
"yqueuing=[]\n",
|
|
"\n",
|
|
"for k in range(len(x)):\n",
|
|
" y_latency.append(times[str(x[k])][3])\n",
|
|
" yqueuing.append(times[str(x[k])][0])\n",
|
|
"\n",
|
|
"#print(y_latency)\n",
|
|
"plt.scatter(np.array(x), y_latency,c='b')\n",
|
|
"#plt.scatter(np.array(x), yqueuing,c='g')\n",
|
|
"plt.axhline(y=deadline,color='r')\n",
|
|
"plt.xlabel(\"Request id\")\n",
|
|
"plt.ylabel(\"Total Latency(us)\")\n",
|
|
"\n",
|
|
"plt.show()\n",
|
|
"\n",
|
|
"print(y_latency[1289], yqueuing[1289], times[str(x[1289])])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "haiwan_env",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.12.3"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|