{ "cells": [ { "cell_type": "markdown", "id": "4f16fcbe", "metadata": {}, "source": [ "# HDBSCAN Stop Detection" ] }, { "cell_type": "markdown", "id": "f69ed80f", "metadata": {}, "source": [ "The HDBSCAN algorithm constructs a hierarchy of non-overlapping clusters from different radius values and selects those that maximize stability." ] }, { "cell_type": "code", "execution_count": 1, "id": "3561532d", "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib\n", "import matplotlib.pyplot as plt\n", "\n", "# Imports\n", "import nomad.io.base as loader\n", "import geopandas as gpd\n", "from shapely.geometry import box\n", "from nomad.stop_detection.viz import plot_stops_barcode, plot_time_barcode, plot_stops, plot_pings\n", "from nomad.stop_detection.density_algs import st_hdbscan\n", "import time\n", "\n", "# Load data\n", "import nomad.data as data_folder\n", "from pathlib import Path\n", "data_dir = Path(data_folder.__file__).parent\n", "city = gpd.read_parquet(data_dir / 'garden-city-buildings-mercator.parquet')\n", "outer_box = box(*city.total_bounds)\n", "\n", "filepath_root = data_dir / \"gc_data_long\"\n", "tc = {\"user_id\": \"gc_identifier\", \"x\": \"dev_x\", \"y\": \"dev_y\", \"timestamp\": \"unix_ts\"}\n", "\n", "users = ['admiring_brattain']\n", "traj = loader.sample_from_file(filepath_root, format='parquet', users=users, filters=('date','==', '2024-01-01'), traj_cols=tc)\n", "\n", "stops_hdb = st_hdbscan(traj,\n", " time_thresh=720,\n", " min_pts=3,\n", " complete_output=True,\n", " traj_cols=tc) " ] }, { "cell_type": "code", "execution_count": 2, "id": "ca45c6c3", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmkAAAKbCAYAAACuKx3AAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABeLUlEQVR4nO3deXxU5aH/8e8smewzyYQkJBCMgBF3RVBRx2IVRGNV1LpvxS63t9req92urdUu91pve293ve2vKq211VbFWuNSd+NORRErGBAjIIFJMiETsk1m+f1BJyWQPXNmnhw+79err0pyzvM855xnznxzludxJBKJhAAAAGAUZ6YbAAAAgL0R0gAAAAxESAMAADAQIQ0AAMBAhDQAAAADEdIAAAAMREgDAAAwECENAADAQIQ0AAAAAxHSAAAADERIAwAAMBAhDQAAwECENAAAAAMR0gAAAAxESAMAADAQIQ0AAMBAhDQAAAADEdIAAAAMREgDAAAwECENAADAQIQ0AAAAAxHSAAAADERIAwAAMBAhDQAAwECENAAAAAMR0gAAAAxESAMAADAQIQ0AAMBAhDQAAAADEdIAAAAMREgDAAAwECENAADAQIQ0AAAAAxHSAAAADOTOdAOAyaqhoUGRSMSSsj0ej2pqaiwpG8Dkwrlm32XLkFZXV6dQKGRJ2X6/X7W1taqvr1djY6MldaSznnSw07ZI/9wep9O6C9HJsq3sy+lkpz5gp22R7LU9djs/c64Zu+Q+swtbhrRQKKRgMGhpHeFw2PI60llPOthpW9IlHX05nezUB+y0LZK9tofz89jZ7VxjFzyTBgAAYCBCGgAAgIEIaQAAAAYipAEAABiIkAYAAGAgQhoAAICBCGkAAAAGIqQBAAAYiJAGAABgIEIaAACAgQhpAAAABiKkAQAAGIiQBgAAYCBCGgAAgIEIaQAAAAYipAEAABiIkAYAAGAgQhoAAICBCGkAAAAGIqQBAAAYiJAGAABgIEIaAACAgdyZbgCGV1FRkekmTJjf7890EyYtu+y78vLyTDch5dLx2ezr61NHR4eldSSPjdfrVVlZmaV1Wc2O/SxdONeYiZBmuLlz52a6CSnjcrky3YRJI7mvamtrM9yS1HI67XPx3k6fTUkKBAIKBAKZbkZK2KmfWc2u5xq7IKQZrr6+Xo2NjZluxoT4/X7V1tYqFotluimTRnJf1dfXKxwOZ7g1E+f1ehUIBBSPxzPdlJSx+rOZ/NysWrVKTU1NltUj7Qo1djg2duxnVrPrucYuCGmGC4fDCgaDmW4GMqSxsdEWx7+srMxWJ04pfZ/NpqYmrVu3zvJ67MCO/SxdONeYiWvCAAAABiKkAQAAGIiQBgAAYCBCGgAAgIEIaQAAAAYipAEAABiIkAYAAGAgQhoAAICBCGkAAAAGIqQBAAAYiJAGAABgIEIaAACAgQhpAAAABiKkAQAAGIiQBgAAYCBCGgAAgIEIaQAAAAYipAEAABiIkAYAAGAgQhoAAICBCGkAAAAGIqQBAAAYyJ3pBljB7/dbVnZ5ebkkyev1qqysbNLXkw522hbpn9uTDlb25XSyUx/gHGAuux0bzjVjl859lg6ORCKRyHQjgMlo3bp1ikajlpTt8XhUU1NjSdkAJhcrzzX5+fnaf//9LSkbE2e7K2kNDQ1yOq29i+twOJSObJuuetLBTtsiSdFo1LKTpiRFIpG09OV0slMf4BxgLrsdG6vPNbFYTJJUX1+vcDhsWT3p4vV6FQgEMt2MlLFdSItEIpluApAS9GUA6dLY2KhgMJjpZkxYWVmZrUKaff5MBwAAsBFCGgAAgIEIaQAAAAYipAEAABiIkAYAAGAgQhoAAICBCGkAAAAGIqQBAAAYiJAGAABgIEIaAACAgQhpAAAABiKkAQAAGIiQBgAAYCBCGgAAgIEIaQAAAAYipAEAABiIkAYAAGAgQhoAAICBCGkAAAAGIqQBAAAYiJAGAABgIEIaAACAgdyZbkCqeTweOZ32yJ7xeFyRSMTyetKxz1wul2KxmKV1pJOdtsdO/Sxd7HT8JXttj522RUrf5xNmsl1Iq6mpyXQTUqqhocHSD6jH47HdPsPY0c8Ac1n9+YS5bBfSJKmurk6hUCjTzZgQv9+v2tpay688JMu3cp8lt6W+vl6NjY2W1JFOdtoeO/WzdLHT8ZfstT122hYpfZ9PmMuWIS0UCikYDGa6GZNKOvZZOBy21XGx2/akg50+m3Y7/nbaHjttC/ZtxHMAAAADEdIAAAAMREgDAAAwECENAADAQIQ0AAAAAxHSAAAADERIAwAAMBAhDQAAwECENAAAAAMR0gAAAAxESAMAADAQIQ0AAMBAhDQAAAADEdIAAAAMREgDAAAwECENAADAQIQ0AAAAAxHSAAAADERIAwAAMBAhDQAAwECENAAAAAO5M90A7DsqKioy3YSU8Pv9mW7CpFVdXT3p999kb/9QvF6vysrKMt2MCSkvL5dkj22R/rk96WCXfp3OfZYOhDSkzdy5czPdhJRyuVyZbsKkkdxXgUAgwy1JHbsd/0AgYJvjY6dtkSSHw2FZ2cl+XFtba1kdGD9CGtKmvr5ejY2NmW7GhPn9ftXW1ioWi2W6KZNGcl/V1dUpFApluDUTY9fjv2rVKjU1NVlSttfrVSAQsLSOJKfTqXg8bmkd6ZLcb4lEwrI6kv24vr5e4XDYsnrSJbnP7IKQhrQJh8MKBoOZbgYyKBQK0QcM1dTUpHXr1llSdllZmQKBgKV12FFyv6VDY2OjLT6b6dxn6cCLAwAAAAYipAEAABiIkAYAAGAgQhoAAICBCGkAAAAGIqQBAAAYiJAGAABgIEIaAACAgQhpAAAABiKkAQAAGIiQBgAAYCBCGgAAgIEIaQAAAAYipAEAABiIkAYAAGAgQhoAAICBCGkAAAAGIqQBAAAYiJAGAABgIEIaAACAgQhpAAAABiKkAQAAGMid6QZYobq6Wn6/P9PNmJB0t3/27NmW1en1eiVJFRUVlpS/u76+PnV0dFhaR3l5uaRd21VWVmZpXVZLbku6TPbPpWSv4y+lZ3vsts/SJd2fT5jHkUgkEpluBIb2/vvvq7u727Lyc3NzNWvWLMvKx+Swbt06RaNRy8r3eDyqqamxrHzAzqz8HsjJydHs2bN19913KxgMWlJHOpWVlenyyy/PdDNSxpZX0urq6hQKhTLdjAnx+/2qra2V1Rk6Wb6d9tnmzZvV29traV0Oh8PyY5Mu0WjU0oAmSZFIRA0NDXI67fGEhZ2Ov5Se7UlHHdnZ2aqqqlJ9fb3C4bCldaWD1+tVIBCwVV/D2NgypIVCIVv8RZBOdtpnvb296unpyXQzsIdIJJLpJmAf0djYaIvzWVlZmQKBQKabgQyyx5+1AAAANkNIAwAAMBAhDQAAwECENAAAAAMR0gAAAAxESAMAADAQIQ0AAMBAhDQAAAADEdIAAAAMREgDAAAwECENAADAQIQ0AAAAAxHSAAAADERIAwAAMBAhDQAAwECENAAAAAMR0gAAAAxESAMAADAQIQ0AAMBAhDQAAAADEdIAAAAMREgDAAAwkDvTDbBCdXW1/H5/ppsxIZO9/Xbn8XjkdFr7N47L5VIsFrO0jnTWE4/HFYlELK+HY2OmdB1/yT7nz/Ly8rTVxT4zky1DWiAQyHQTUsbhcGS6CdiDx+NRTU1NppsxKTU0NFj6Rc2xMZvVx9/lckmSamtrLasjE6z8HrDrPrMLW4a0uro6hUKhTDdjQvx+v2pra5VIJDLdFOwheZXGyn6WPP719fVqbGy0pI5M1GP1FS6OjZnSdfyTVx3r6+sVDoctrSsdvF6vAoGApd8D6dpnFRUVmjt3ruX1JPeZXdgypIVCIQWDwUw3AzaXjn4WDofT0pfTVU+6cGz2bY2NjbbYZ2VlZWkLHOnaZ1bXk859lg68OAAAAGAgQhoAAICBCGkAAAAGIqQBAAAYiJAGAABgIEIaAACAgQhpAAAABiKkAQAAGIiQBgAAYCBCGgAAgIEIaQAAAAYipAEAABiIkAYAAGAgQhoAAICBCGkAAAAGIqQBAAAYiJAGAABgIEIaAACAgQhpAAAABiKkAQAAGIiQBgAAYCB3phtgherqavn9/kw3Y0Ime/v3BVb2s2S5Xq9XZWVlltQhSeXl5WmtJ12s/Pyke5/5/X5L60kHzmfA+NgypAUCgUw3IWUcDkemm4A9uFwuSenpZ4FAwFb1RKNRS8uPx+OSpNraWkvrkdK3zxYsWKAFCxZYXk86JD87AEbHliGtrq5OoVAo082YEL/fr9raWiUSiUw3BXuIxWKSrO1nyeO/efNm9fb2WlJHksPhSEs/i0ajloe0SCSihoYGOZ3WPsmRrn2WSCQs/0MtOztbVVVVqq+vVzgcnnB5sVhMHR0dKiws7A9lXq9XgUCg/7MDYHRsGdJCoZCCwWCmmwGbS0c/6+3tVU9Pj6V12E0kEsl0EyalxsbGCffnWCymlStXqr29XT6fT/Pnz5fL5VJZWZmt7nAA6cKLAwCAlOjq6lJ7e7skqb29Xd3d3RluETC5EdIAACmRl5cnn88nSfL5fMrNzc1wi4DJzZa3OwEA6edyuTR//nx1d3crNzeXFwWACSKkAQBSxuVyqaCgINPNAGyB250AAAAGIqQBAAAYiJAGAABgIEIaAACAgQhpAAAABiKkAQAAGIiQBgAAYCBCGgAAgIEIaQAAAAYipAEAABiIkAYAAGAgQhoAAICBCGkAAAAGIqQBAAAYiJAGAABgIEIaAACAgQhpAAAABiKkAQAAGMid6QbADNXV1fL7/ZluxoSku/1W7rN0bovH45HTyd9rJorH44pEImmpy8o+V15eblnZg5ns57KkdO43q/dZsnyr60l3X7MaIW0f53K5JEmBQCDDLUkdh8Nhafnp3GdWb4vH41FNTY2ldWBiGhoaLA1qyf5cW1trWR1JVvfneDwuKT3bkk7RaNSystN5/NNZj10Q0vZxsVhMklRXV6dQKJTh1kyM3+9XbW2tEomEpfWkY5+la1uSV9DscPztJtkHrL7KmezP9fX1CofDltTh9XoVCAQs78+RSEQNDQ22ujIcjUYtDWnpOP5JLpervz6rJPuaXRDSIEkKhUIKBoOZbsakYqd9Zqdtwfg0NjZa1gfKysrS9sWZrtvDdmPl8U+ndPa1dLDPnxsAAAA2QkgDAAAwECENAADAQIQ0AAAAAxHSAAAADERIAwAAMBAhDQBgnGg0qtbWVkvHCANMxzhpAACjRKNRrVixQs3NzSotLdXSpUvldvN1hX0PV9IAAEZpb29Xc3OzJKm5udnykfABUxHSAABG8fl8Ki0tlSSVlpbK6/VmuEWjwy1apBrXjwEARnG73Vq6dKnC4bC8Xu+kuNXJLVpYgStpAADjuN1u+f3+SRN0uEULKxDSAGAfFo1GFQwGFYvFMt2USW2y3qKF2SbHnygAgJSLRqN66KGHFI1GtWnTJs2ZM0culyvTzZqUJuMtWpiPK2kAsI9qb29XMBiUJLW1tam7uzvDLZrcJtstWpiPkAYA+yifz6eysjJJUnFxsXJzczPcIgC7I+4DwD7K7Xbr/PPPV0lJierq6tTa2prpJgHYDVfSANhOLBZTR0cHD8OPgtvtVmlpKc+iAQbiShoAW4nFYlq5cqXa29vl8/k0f/58AsgYxONxhcNhdXR0KBKJqK+vTw6HQx6PR9nZ2fL5fMrLy5PD4ch0UwHbI6QBsJWuri61t7dL2vVgfHd3twoKCjLcKnN1dnbqqaeeUt2jj2rjxg/U1tamvPwClZaVKzcvT9k5uUrE4+rubtHOjrCC25vkkDRlyhRNLS/T9OnTVVlZKaeTGzNAqhHSANhKXl6efD5f/5U0HobfWzwe1+rVq/Xc8y9o9eq3NeeQQzXzoCO05JyLVbVftfILCoddd0eoVRvfX6+177yt1994XeGnn9XMmdU65OCDVVJSksYtAeyNkAbAVlwul+bPn6/u7m7l5uZyq3M38XhcL730kv788F8UicZ14smn6qp/vV7TZ+y3a87Jvr4Ry3A6nfJPKZV/SqnmHXu8Llv2OW1q/EAvPv+0/vLIoyorm6K5Rx2lqVOnpmGLAHuzZUirrq6W3+/PdDMmJN3tn+z7S5LKy8vTWp+V+yzd22I3LpeLW5x72LBhg+68a7micYfOu+xqbdn0oVqC2/Xsk4/p4is/Lbdr/F8Hs2oO1KyaA/XJS67U00/U6eH7/6BZM6t1ysc/roKCgrT2Z4/HY6tbr/F4XJFIJNPNQIbYMqQFAoFMNyFlrH44Nx6PS5Jqa2strSedotGopeWnc59ZvS2wv76+Pt1773167oV6XXTFp7XojE+oLdSqt/72uiQpuH272ne0qWRK6YTrKikp0VWf+bzOvfAS3XPnL3XvfX/Ut278pk455RRJ1p/PPB6PampqLK0jExoaGghq+yhbhrS6ujqFQqFMN2NC/H6/amtrlUgkLK0nEomooaHBNn95RqNRy4NNuvZZOrYF9tbS0qIf/ejHys736n9uv0v+kimSJF9RsUrLp6p5+zaVlZfLV1Ssjo4OxWPxlNV9yVWf0xFHH6tv3Hiz7r//Af30pz+x/HyW/Eza4TtA+uf3gF3Ozxg7W4a0UCjUP9UJRsZfaGPHPoPpNm3apP/6/q06efGZuvDyTw34one73Tr3wksVbt+hoqJiud1uRSKRUT2TNhazDjhQ3/7BT3X7j27Vv/37v+tfPve5tAzdkarvgN7eXvX09OzaN9Go3G63PB6PcnJylJ2dnYKWAsOzZUgDgH3Z+vXrdet//0CXLPsXnbrkzEGXcbvd8pdMkXMMoSkajSrcvkNeX9Go56f0+Yr0tZv+S7+743bd+K2bdMN/fF15eXmKRqP9b+CaMNdlT0+PPvroI23+6CM1BVu1Y0e7unt6lJ2bL3d2jlzuLMWifYr29qi3u1O5OTkqKvKpoqxEVdOmadq0acrJycn0ZsBmMv/JAACkzJYtW3TrD36oq6+5XiecdHLKyu3p6dED996tzp0dKiuv0JlLPznqcJXl8ei6G27W/97ybf3gh/+jr37ly3rkkUfU3Nys0tJSLV26NCNBra+vTxs2bNC7DRu0+aMmFU/fX6WzDtXMo05X4ZSpKiieIucgL1TEY1HtbGtRR8s2tW56Xy/+/R21/fUZTa8o1yEHHqBZs2bJ4/GkfXtgP4Q0ALCJ9vZ23fL9W3XBZVenNKBFo1E9cO/deun5p5WXv+ut2Y5wu4r9ox8Tzel06vNf+oq+/+0b9OMf/0Reb6EcDoeam5sVDofT+oZ5d3e33lq9Wqve/rsKK/bXjPmn68ir5ik7L39U6ztdbnmnTJV3ylRNm3OkpPMU6e7U5r+/oZWrXtAz9S/rqMMO0VFHHsE4fZgQQhoA2EA8HtcvbrtN844/SUs+cU5Kyw6371Dnzg7l5RWoq3OnCgq8KvT6xlyO2+3Wv//HTfratZ9Vb2+PysrKVFpaKq/Xm9L2DiUWi2nVm2/p1TfeUvmcuTrpX25WccWMlJTtyc3XrHknada8k9TWtElrn31Yb/z29zpu7hGaO/coxuvDuBDSAMAG6urqFO7s1lev/rykXVe/2ne0yfePFwMmwusrUll5hSSpoKBQ51502bjLzM3N0/Xf/I6+9eVrdO655+rggw9Oy63OrVu36omnn5OzqFwLP/9tFVdUWVZXccUMHX/JNdqxfYtWPbRca35/n5acslCVlZWW1Ql7IqQBwCTX3NysBx/6s773P7fJ4/EoGo3qwfvuUfP2bSotn6pzL7x0QkHI7XbrzKWfVEe4XYXeiT/ov1/1TH3y0k/pT/c/oG/ffOiEyhpJPB7XG2+s0qtvrdHhZ16pmUefOKo3TOOxqHp2hpVT4B30ubTRKCqfrpM/+w198OZLeuDh5Tr2yEM17+ijGVIDo0ZPAYBJ7u67f6dFZ5ytqv2qJUntO9rUvH2bJKl5+zaF23dMuA63261if0nKrnot+cRSdff2qb6+PiXlDSYajarusSf09ofbdco139OseYFRB7S/P/eIVj/5oP7+3COKx8Y/XqHD4dDMuSfqlGu+pzUfBvWXRx9n/EOMGiENACaxjRs3au17DTrv4sv7f5YcrFaSSsunyusrylDrhuZ2u3XlZ7+gP93/gCWhpaenRw/8+S/q8BTplM/fJO+U0c8l2rMzrJ1tLZKknW0t6unsmHB7vFOm6pTP36TOHL8eeOhh9fT0TLhM2B8hDQAmsYf+/LBOP+s85ebm9f8sOVjtxVdePeFbnWMRjUYVam0Zdeg6/Kh58haX6OWXX05pOyKRiFY8/IhcUw/QiZf/m9yesQ08m1PgVUHxrtkZCoqnKCe/MCXtcnuyd7Wn8kA98Oe/qC/FgwfDfghpADBJtbS06O231wz6NmdysNp0BrRHVvxJD973Oz2y4k+jCmoOh0PnXHCp6h59LGXt6Onp0W/uvkcqmaFjz//MuJ4nc7rcOmThmTpi8Xk6ZOGZ434mbdCynS4dc96n5S6fqb88+rhisVjKyob9ENIAYJJ68cUXNf/4E1VQmJ4hLIYTbt+hlubtkqSW5u3qCLePar2jj1mg1lCbNm/ePOE2RKNRXXrp5Wr48CN5p85QIjH+uUidLrfyvMVjDmjxWFRd7aFhn2NzOJ067sLPa6erQC/UvyRp1/AgHR0dhDYMQEgDgEnqxZde1okLF415vWg0qtaW5pQ+C+b1FWlKabkkaUpp+ajHUcvKytKCk07WSy+9NOE2PPvss3rp9ZWacfix6gq3peRZsrHY/YWDd555WDtDzUOGNZc7S8dfeq3e/WCzGhoatHLlSr388stauXIlQQ39GIIDACah1tZWNbe06LAj545pvT2H5zj/osuUiqnCJzJMx/zjTtQ9v/65Fi1aNO65PMPhsH551281J3C6+qIx5fr8KXuWbLSSLxwk4nF98ObL2hH8SMVTq4a8ZZpT4NOxF31Bjy//b82sqlRWVpba29vV3d2tgoKCtLYdZuJKGgBMQmvXrtWBBx065kCTiuE5hnpBYLzDdMyqOVBvv/227r77bq1YsWJcV/ju/v0fVHrQfC1edp2OOu2TKX+WbDB73tpMvnAQjfRKktxZ2SO+HTp19iGafuSJ2h5sliT5fD6mkkI/rqQBwCTU0LBecw49YszrJYfnSF5JG+vwHMkXBFqat2tKafmYJlofSqS3V3n5+QqFQvJ4PGOey/P999/X8y+/rrP+46dyudzK8xWrz+KxyJK3Nne2taigeEp/KDxk4ZnqCrfp/b/Vq6s9NKq3Qw8//SI99s7rOuCAA7TffvsxhRT6EdIAYBLa2tSkQ48JjHm95PAc4fYd8vqKxhywBntBYCwTrQ/GV1Ssisrp2rlz57jm8vzDH+/XgQvPVm7h2OcTHY94LKq2rZvU0RqUw+nsv1qWfNGgoLhUh338LPV0dignv3DEK3o5+YWa8/GlWv1OvWbOnJmWbcDkwO1OAJiEmpq2qWLa9HGtO5HhOcb7gsBI7Tl58RmaOXOWli5dOqZ2bdq0SW+vbdBBJy6ecDtGI3kF7b1XnlK4easS8figV8vG+nbo7GM/ri3BFjU3Nw+5TDQaVWtrKzMW7EO4kgYAk1B7uF3FxRO7gjUeqZ7HM6lkSqk2rf/7mMt79LEnVH3sqfLk5A273Hjn4txzveTLAQ6nU97SSh14wmIVT50+4effsrJzNGvBaXrz7TVafMrH9/p9NBrVihUr1NzcrNLS0jGHWUxOXEkDgEkmGo2qr69POWl4wHywlwRSPY+nJOXm5o55qqS+vj698Mqrqjlm4bDLjXcuzsHW2302gsKSspQEtKTquSeq4f0PBr1S1t7e3n+Vrbm5WeFwOCV1wmzEcACYZCKRiJxOpzwej6X1WPGSwFCyPB5FImObJumtt95SdnGZisqnDbvcYHNx5nmLRyx/qPUOWXjmqJ83GwvvlKnKn1KpxsZGzZ49e8DvfD6fSktL+6+kjfW5PUxOhDQASLNYLKauri7l5eWN602+rKwsxeNx9fX1KSsry4IW7mLFSwJDifb1KStrbF9Jq95arakHzRtxueTVr+SbmKMdP22o9ZLPm1mh8tBj1fjh6r1Cmtvt1tKlSxUOh+X1ernVuY/gKANAGsViMa1cuVLt7e3y+XyaP3/+mINaVlaWstxu9fZ0WxLSotGowu07lJdfoCml5f1X0lLxksBQuru7lZOTM6Z1Vr/zrg4653MjLpccGmOsV78GW2+8z7aNVtnMOXrztScG/Z3b7R7T0CSY/GwZ0qqrqyd9R05n+z0ej5xOax9PdLlcaZnqJB6PKxKJWF5POvZZurYF6dXV1aX29l3zWk5kdPlCr1dtoVDK5u10u9yKRqNqa23R88/8VaGWFk0pK9eZ516g7q7OEV8SSAa7wYb1yHKPHCR37AjJWzj6/dDR0aFtwaA+NmPWqJYf79Wv3dcbamy0VPJP21/hjg51dXWltNwR653k35lJ5eXlmW5CStkypAUCYx87yFQOh8PS8j0ej2pqaiytI90aGhosDTfp3GdWbwvSLy8vTz6fr/9K2nhHl59aXq5tTR+par/qCbUn8Y//zy/I16MP368P3t+gjRsadPBhR6hzZ1g52R5Nmzb8M1/RaFR/+v1vtH1bk8qnVuiTl1w5aKBLJAZZ+R+atmxRVUXFsHUk95nb7dbWrVtVWDJVrixrn8vb3XifbRsLl9utwilT1dbWpqqqKgWDQUuH3Ehexa2trbWsDoyfLUNaXV2dQqFQppsxIX6/X7W1tUoMd1ZLgeTVICv3WXV1tQKBgOXHJbnPrL7ClY59lq5tQfq5XC7Nnz9f3d3dys3NHffo8pUVU7Vl84eaf9wJE2pPIpFQT0+PQi3N2rpl867n3WIxde3cqf32n6mcnFz1jvDWZes/1pWkrVs2q3n7NvlLpuxRj5TQ0OezjzZ/qGOPOmTQ3w02/ERTU5MKSyvHuLVjs+etzfE+2zZWBVMqFAqF9MILL6ixsXHXsCdnnmnJc2jJOxz19fW2eGPU6/Xa6kKNLUNaKBRSMBjMdDMmFSv3WfIyut2Oi922B+njcrkmPIH2AQccoNffXCN9cuLtSSQSKvQVaUrZrumiAicv0sdPO0P+kilyulyKj/DH4u7rlpZPVYHXN+I6u4v09uqD9xs0a9a1g/5+sOEnQqGQsn3WjRM33LRPVrzZubvc4jK1tn4gt9utGTNmKBgMjnmqrLFqbGy0xfmsrKyMkAYAyKyDDz5Yv/nt7xSPx1NyxXUi00VNdKqphnXvqmLq1CGHlRhs+InOrm65s60bJ27PW5td4R1yOp3KKfBa9mZnkjsnVwo7VFy8q56ysjKG3NhHEdIAYBIqKyuTz+fV2nfe1iGHH5mSMpPTRaV73Tdef0WHHXrosGXvOfxEd0+PsrKtud0oDRx+I8/n18a/vaDOf0yYbsULA7tzZXkUj0snnXSSamtrmQpqH8YDLwAwSR2/4DjVP/tkRtsQjUbV2tI87hARj8f10nNP6cQTBz5bt+c8lcnhJ5JX6ZxOp6XP7CZvbR6x+DzNOjqgzvZdz58mXxiwXkIul0ulpaWMibYPI6QBwCQVCAT06ovPq7s7vcM1JEWjUT143z2697d36sH77hk0qI0U4lav+pvycnO0//77D1hnxYoVuu+++7RixYpB183PzVFfb3fqNmYQyeE38nzF/VNBWfnCQFK0t2fMA/vCnugFADBJVVRU6IDZM/X0E4/qzHPOT3v97Tva1Lx9mySpefs2hdt3DLjlmQxxyRcKzr3w0r2uCv35T7/X6UtOGzDc0GAvCuz50HxeXp6iW1us2rQB0vXCQFK0u1PZFk/5hcmBK2kAMImdc/bZ+sv9f8jIeHq+omKVlk+VJJWWT5XXVzTg94OFuN29t/bv+mjTB1q4cOHAcv/xooCkIeepLC0tVXdb+t5GTF5VszqgSVJnaJt8Putmd8DkwZU0AJjEDjroIE2rrNBfHrhP5118eVrrHumtzmSIS15J2z3ExeNx/eZXP9fSc87ea2qr0cxTWVlZqY7mrZZsV6Z1NG9V8ZEHZLoZMAAhDQAmuU9ddaW++a2bFDj5VJVNHXrUfivs+VZnNBpV+442+YqKhw1xzz31uCLdO7Vo0aKhyx1mXLCKigp1tbept6tT2Xn5qdugDOvr6VbXjpCKiooy3RQYgNudADDJTZs2TactWqRf/O/30zJH7lAGe5EgGeJ2D2jbt23V3b++XVcvWzbuGReys7M1a+b+2rZxbaqab4TmDxtUVjpFHp5JgwhpAGAL559/nqK9Xbr/97/JWBtGegZNkvr6+vSjW76tM5Ys1oEHHjih+o487GA1rX9nQmWMRTwWVVd7SPFYdNB/p8L299/VjEp7TRKO8SOkAYANuN1uffHaa/TXuof00gvPZqQNI71IEI/HdfuP/1t52VlaunTphOubN3eutr7zmhLx+LjLGG3QSk4TtfrJB/X35x5RNNIz4N+pCGqJREIfrXlVM3cbjgT7Np5JAwCbKC0t1de+8mXd8v3/VkFBgY6YOz+t9Q/3DFoikdBvf327Nm9s0E3fujElU1nV1NQoL8upbR+8p4pZB415/aHm5xzMntNEtQebBvy7p7NjwtNFtWzaIFc0ooqK9D5XCHNxJQ0AbGT27Nm69pp/1Y9uuVmvvVyf9voHewYtHo/rzv/7qVa9Wq8b/uPrysvLS0ldDodDixYGtP6Vp8a1/p7Ba7iZBJLTREm7BrT1lVWkfIDbja89o4NrZqUkwMIeuJIGADZz5JFH6ivXX6f/+d9b1dbaqtPOPHvAYLFW2POtzqTu7i7d9r+3qqVps759800pH/9ryWmn6YGHv6SO1qC8pVP7fx6PRdWzM6ycAu+QV8d2n59z96A12LqDDWibygFuO3e06qM1r2rJ5RdPqBzYCyENAGzooIMO0k3fulH/878/0rtr3tLnvvRl5ecXWFLXUDMLNG7coP/9r5u1X1Wlvv71rykSifS/8ZkqPp9Ppy4MaM2zf9YJF3xO0sDbmHk+v2YdHVCeb++BaAcLWsPdAk0OaLv7+hO9xZm07vk6HVIzW/n59hlOBBPHNVUAsKmqqird8l//Kbf6dP2/XKVXX3zekknJ93yrsyW4Xff+9g7d9NUvqnbJIl3zhS/o8ccfH3Yuzok4b+k5+uitF9W69UNJUvc/bmMm4nE1vvmyVj1275AP9+85k8BYboGmyo7tW7Tpjed0zPyjLa8LkwshDQBsLDc3V9d84Qv69LKrdPevf6Hv3nC91r7zdkrrSL7VGYvHFGpt0be//m/auO5t3fKf39OiRYsUDof3moszlUpKSnTJeUu18v5fK5FIKPcftzGjkV5Jkjsre9SBa89nz6yeTD2RSGjVn5fruLlHqLDQ2row+XC7EwD2AXPnztVhhx2mJ554Qj+65SaVVUzTabXnaP6CE5STkzuhsne0hRSPR/Vq/bPyFRbqpJMCmjNnjtrb2+V0OlVUVKTS0lI1NzcPORfnRJ1xxul69sWXtPqZh1V15Ik6ZOGZ6grv0Ma/vaDO9tCoA1e6J1Nf//KTirdt09wlJ1laDyYnQhoA7COysrJ05pln6rTTTtOLL76oJx+5X//vZ/+jI+cdq0OPnKuDDz1CldOrFI/HB30JICkSiWj1m3/T4395SGveWqXW1ha5XC6VV06TO9+nN95dr5Vr1qmnu0vhtpD6Ir2qrKzU7JnVmjlzpmXbdsNXrtdXvnGTcksq5auYoYLiKTr042eNOXCl8lmz4bRu+UB//+t9uuS8s8c98wLsjZAGAPuYrKwsnXzyyTr55JPV3NysN954Q2+//qLu++2v1dXVpWg0Kpc7S0VFxTpi7jwlElJPd6c6OsJav3attgW3Sw6HDj7qGJ1y3mWac/hRmjp9hrKyBp/KqLMjrM0fbND7776t5X+4Xztv/6VOOvEEnVl7hkpLS1O2XTNmzNBNN3xVX/7W97Twczcpt9A74huemdLVHtLLd/+vTj7hWJWUlGS6OTCUWb0WAJBWpaWlWrJkiZYsWaJEIqFNmzbpN7/5TX9Y8+W65fP5tG1bn95Z/b6y8gt0+Rc/paOP/5jyCkb3DFV+oVdzDp+rOYfPVe1FV2nrpka98vSj+rcvf1UnHHesLrn4opRNKH7WJz6hBx9coed/fYsqDpmnns6OEQeqTbferk49f8f3dfgB++nQQw7JdHNSIhaLqaurS3l5eVwVTCEzemyKVVdXy+/3Z7oZEzLZ2w9g8vB4PP0DqM6aNUuHH364gsGgysrKtGjRIv36jjv19rvrdPpln9XRJywc32CrCfW/WVo5o1rnfepftfjcS/TEA/foS9d9WZdedKEWLTo1JeO5nX/euWpp/X96/Zk/q3ruiepuDynW061sn/W3MEfS3bFD9XfeqkP2m6qzP3HmsNtbXj455vCMxWJauXKl2tvb5fP5NH/+fIJaitgypAUCgUw3IWWsHoASwL7N4/GopqZmwM++/vWvq62tTR988IG+/o0bNeuIY3Tjz29Qbt7ExvDq6ekZMARIoa9I5y/7go5duFh/uP2HWv322/rXz//LuMcKSwaD5HN3l1x6mV56/SUdfup5qtyvWq4MX0nbsf0jvbL8B7py6Rm67t+/NOqwa/r3QFdXl9rb2yVJ7e3t6u7uVkGBNWPy7WtsGdLq6uoUCoUy3YwJ8fv9qq2ttWRMIwBISgaFPc+bq1ev1mNPPqNzP/1FHTZvgbq6e9TV3TOuOlxul4p8RZJD0iCntKqZB+hL3/2J7r/z5/rmt27SN2/4j3E9pxWLxSRJ9fX1CofDuvyyS1U6ZYqerH9KRdP31/5HLhhVOfFYVN0dYeUWDv4smycrS3l5eerY2aFYbHSTu3/w1ita9eCv9YnFJ+ugOTV67LHHRlzH6/UqEAgY/z2Ql5cnn8/XfyUtN3dibwvjn2wZ0kKhkILBYKabAQCTRigUUlNTk7q6urRx4wd64+13dOWXb9K06lnqi/ZZXn92To4u+fz1evxPd+sb37pJ3/v2zZoyZcq4ympsbOz/Dpg1a6Zyc3P0yP3/p01rVuqIMy4ediiOaKRHq//6gHq7OlVYUjbks2x5kiK9EfWNMDBvT2eHVj92r1rWrtSZp52qyooKrVu3blTbUVZWNinuDLlcLs2fP1/d3d3Kzc3lVmcKMZgtAKD/uaJHHnlETz7zjK76yrc1rXpWWtvgcDh0+gVX6KiTlui7/3lLyga9rays1OUXfVIFXdv0+A+v1/pXnlZskHAVj0W1+q8PaOOql9Tc2KCO1uC4ZxyIx6Ja/9ozevyH16tg51ZdcfEFmjZt2kQ3xVgul0sFBQUEtBSz5ZU0AMDYdHZ2qqmpSR98uElHHr9QBUMMOBuLRrWzo10FhT65UjgH5+4Wn3eJwjtC+vFPfqpvfuMGOZ3OXRO4/+N22njm/szNzdVpp56iw5ua9Gx9ndY995AOPOkT2n/eScrKzpG0a0qo3q5OeXLyFOnpUnZewZhnHIhGevT+Gy+q4bk/y5fj1rlnLFJlZeWY2wtIhDQAgHaNnfbh5s2adciRqq45SPkFe4e0WDSq5x9dobaWZhVPKdXHzlhqSVBzOBw658rP6Rc3f1kPPfRnnXXWJ7RixYr+GQuWLl067knaKyoqdPEnz9WWLVv02htPa80T92rawfM146jjNWXGbBWWlEmSsvMKdMTic0c1bEc00qtg43va9OZL+ujvKzWtvFS1C49XVVWV8Q/9w2yENACAXnr5ZR145LE69+ovDHmVbGdHu9pads3B2dbSrM6dYXmLJjZcUCwaVUd4hwq9RQPqzMry6NJrv66ffvOLmjPnwL3m/pzIMEUOh0NVVVWqqqpSOBzWuvfe07pH7lQotENF0/ZT4dT9VFhartBHHyo7r0Du7Fy5srIU6+tTtLdbO6IRbels19YPGtS8ca3atmyUv7hIc2ZVa/HFn7Rk2ivsmwhpALCP27x5s15/403967f/V77iod+qLCj0qXhKaf+VtMGuto1FLBrVkw/dp1DzdvlLy7XonAsHBLXSqZU6YclSPbDiIc2pOcCSuT+9Xq+OmT9fx8yfr56eHm3ZskXbt29X25oPtWVHu7p7etXX16dotE9ut1tZWR5NKfHr2GPmyRlvVc3B1Zq26ATeaIQlCGkAsI/79R136phTauUvHX7wVJfbrY+dsVSdO8PKL/AOCFTjeVatI7xDoebtkqRQ83btDLfL5x8YEk8563z95xcf0fnnLlV5ebm8Xu+4b3WOJCcnR7Nnz9bs2bOHXW7OnDmqra3V3XffndKRBBi1H3vi7U4AsJFoNKrW1lZFRxgaIqm1tVWPPfFXBU47a1TLu9xueYv8ewW05x9doadW3KfnH12hWDSqWDSq9rbWQd+iTCr0FvUHQ39puQq8vr2WyfJkK3DGuXr4kTr5/X7LAlqmJd+uffnll7Vy5cr+Md+wb7NnbweAfVA0Gh3zA/bPPfecDpq3QN6i4nGPh7bns2rhHSG9+fLz/bdFTz3rgkHXc7ndWnTOhdoZbleBd+grcAs+vkTfe/Ce/rc7xyrVV6hisZiCwWBKg9Rgo/YDXEkDAJtob2/f6wH7kTz93Auad+IpE6o3+ayaJBVPKVVCiYEvGHQM3Q6X2y2fv2TYW6R5BYWqOWK+XnzxpRHbEo1GFQ6H+wNUqq9QxWIxPfnkk7rtttv0wgsvpCyoJUftl8So/ejHlTQAsAmfz6fS0tJRP2Df0tKiYHOLDjzsKO34x1WcoQz3zNmez6pJGviCQeHEH/Q/dN4CvfnyX1Vbe8aQy0SjUd1555166qmn5Ha7NX/+/JTPK9nV1aXW1laVlJSora0tZfNUMmo/BkNIAwCbcLvdWrp0qcLh8KgesH/33Xe1/4EHy+V29z9DNlgI2318NJ+/REefcLK8xQOfS0s+q5Y01AsG4zX7kMO14s6fKRqNDrld7e3t2rp1a/9/d3d3p3xeyby8vP55RYuLi1N6xSs5aj+QREgDgDSz8i0+t9s96jHE3t/4gabPnqNYNKpnH3lALcFtg4aw5DNn8Xhcb71Sr+DWLZo6fcawg9nuGdomqsg/RTn5BWpqalJVVdWgy/h8PlVWVmr16tX9gSzVV6hcLpcWLVqkBQsWqK6uTq2trRMqDxgOIQ0A0ij5jFTyys78+fMzdmvro6YmHXLSkQq3t6mtJThkCEs+c7Zt84eSEvJ4slM2mO1YlFZMHzakud1uLVu2TH19fers7Ozfr6m+QuVyuVRaWsotSViOFwcAII1MeouvpaVVxVPK5PUVq3hKmfp6e7RnCJP++czZ6RddoSMXnCSH0znsYLaR3h5t+WCDIr09KW1v0ZQytbS0DLuM2+2W1+slQMEWuJIGAGmU6mekJqK7p1u5eXlyud06+czz1Nq6XW/UP6v2UOteIczldqu4pEwnn3nesM+aRXp79Ov/vlmh4Hb5y8r16a/erCx3Vkram52bp56e1AY/wGSENABII5Pe4uuL9Mnt9uxq1yhD2EjPmgW3blEo+I9ZBILb1bxtq/JnHZiS9rpc7lEP0gvYAbc7ASDNks9IZfqWXHZ2tiKRgVemBptRYCzKKqfLX/aPWQTKylU6tXLC7UyK9kWUlZWaq3LAZMCVNADYR+Xm5qqnq2uvn49nHs4kT3aOPv3Vm9W8batKp1bKk50z5LKxaFQd4R0q9BZJUv9/D1Vnb1encqel70UFINMIaQCwjyorK1VrcNuAn+0+JlrxlNJhh9kYiic7R9P2mznsMrFoVE8+dJ9CzdtVVFIqKaEdrS3yl5Zr0TkXDlpnqHmbyk44ekxtmSyYXB2DIaQBwD5qekWFgls3D/jZnvNwWjXMRkd4h0LNu55d27blQ0lSTm6eQs3btTPcLp+/ZMDyiURCwa1bVFFRkfK2jFYySE1kKqjBwphJw7LALIQ0ANhHzZ49SyueeGbAz5JjovVP6TTEMBsTVegtkr+0XKHm7Zo6fT/tfiWtwLv3JOrN27ZK8ZjKy8stac9Idg9Sra2tOuOMoaenGk0ZeXl58vv9ag21aWdnp4LbmlRUVCRJKZtqCpMfIQ0A9lEHHXSQfvKL2xWJ9Pb/bM95OFMxpdNgXG63Fp1zoXaG25Wbl6+O8A45HA75igefbH3Du2/rkIMOktOZnvfd9rzitfv4dq2trWpraxtzmV1dXdqxY4eamrZp00dN8s86XPnT58hR6Fbzlh1q/Pt7Ki0p0nHHHZfqzcEkRUiDJGn27NmjnkpmrJK3J6ysQ9KIk0mnmpV/0Vu5n0yoDyNLxxUjn8+n2TNnas3fXtWsQ47Y9cJAuF0FXp9KpqSm/lg0qs6OdhX59r465nK7VeD19T+blnwebTBrXqvX4hOPSUmbRjLY7cfdx7crKSlRcXHxmMvNycnR5i0fqamtU1OPOUP7f+yTcv7jtua0eYvU2xFScM2Luvu+B3TpJ5eqrKxM0WhUra2tys7OHnEu1omwyzkgU1darUJI28c5HA5J0oIFCyyvKx11SLL8WY7kPlu8eLGl9UjWb0s8Hpck1dbWWloPxs/qccFOOXmhXqx/Wkcec4Iee/xhtQa3qaRsqk4/75IJX0WLRaN67IHf95d58pnnyukc2Kd3fzZtqOfRdoRatGn9Wh17/bUTas9oDTYrREFBQf/4dkcdddS4AtPba9aoy+PXUVd9RdneKf0BTZKcLpdyi0q1X2CpPsor1IpHHtd1+++vO++8U++8846Ki4u1dOnSlAc1zgFmI6Tt4xKJhCSprq5OoVAow62ZGL/fr9ra2gk91DsayX1WX1+vcDhsSR1er1eBQMDybYlEImpoaEjbLSSMTTQatTyknXDC8brn3vu05s2V+mhToyTpo02N2rLlQ/mKS4ZfeQTtoVZ9tKlRTqdDrcFt2hlu3+slhN2fTRvqebT6xx/W8ccdq7y8vAm1Z7SGmhVisPHtYrGYPvroI4XDYfl8Pk2bNm3Qz1NfX5/qX1ul/c76opxZ2cPWX3nUx7Xu/Te1cuXfNHXqritDzc3NCofDKb/iZcdzwOzZszPdhJQhpEGSFAqFFAwGM92MSaWxsdGyfVZWVqZAIGBJ2XuKRCJpqQdmKiws1AXnn6sXn3pURVPK+l8YcGdlj3oKpqHGVXN7slVYVKxwqFUl06cOGsB2fzatwLv3uGydHWG99syjuvV735nYho7BaGeFaGpq0i/v+p12xjxyFZQq1rFaRdkJnXfW6SopGRhwN23aJJevXDsa31VPOKQcr1/T5u26Gt/X3aGs3ML+K2sOp1Mlhwa0dv2rmjv3KIVCIZWWllr2SAfnAHMR0gBgH3flFVfo1ws/rsuu+5aKSqaM6YWB4cZVS76EEOnu1ozq/dUXiyoRT+xVhsvt3usWZ9Kjf/ytjpt3tKZNmzb+DRyH5FWzoYTDYd1+x92KTAvIW3Gg3DkFksOpjo2v6A/3/1mf/dRl8ng8/cu3trYqq6hCPeFddyx6wiFFOtvVvPa1AaEtGdQKyvfTtjfrtGzZMr3xxhuWP5MGM9nn+iYAYFz8fr8WBk7QX+7+1aABLRaNqr2tVbFBbr0ONq7a7lxut7zF45tmqnH9Or3z6vO6/LJLx7yu1VaseEi9BVWK93Wp7d2nFXrnSSViffLOOl7d2eV67733Biwfi8XkzslXjnfX7cocr18JJQaEtmj3zv7lHU6X4rGY3G63SkpKCGj7KEIaAEDHHHOMEj2denLFHwb8PHml7KkV9+n5R1fsFdSS46pJGjCu2nDBbjS6Onfq9z+/VcuuvEK+Qd4MzbS3/75WzsIK9e0Mqad1kzo2vaW2tc8oEY/JWVytYHPrgOW9Xq+i7ds1bd5i7bfgTE2bt1jZ+UUDQps7959X7rrbgiouLkrnJsFARHMAgJxOp5YsPlX3/ul+Tdtvlg475nhJI89AMNi4anveAj31rAvG1JZYNKp7fv7fOuLgA/Wxj52Uuo1MIX9xkRLxrXJ58hTv65ErK0ex3i7FejuV6OtSdvbAieCrq6v1+HMvKdrbJU/BP0PntHmLFe3eKXduwYC3PdsaViowxz4PwGN8uJIGAJAkFRQUqHbJaVpx58+04e+rd/1siCtlu3O53fIW/fOW5l7BrmP0b0HH43Hd+6sfy93Xqc9+5tMT3STLnLFkseJb35R31rEq3O9IZZfMUFaBX/FoRJHNf9PsWbMGLJ+fn69DamZp84sP9r8hLu0aesNT4BsQ0Nq3rFfPlnc0f968tG0PzERIAwD0q6io0GmnnKzf/+z7eueNV/uvlC0696JRT7a+V7ArHN1biX19Ed3901vU0dSor33ly8rKyhp5pQw56qijFJh3qNpf/6083nIVTD9Uzqx8bX/qxyot9KixsXGvIXQWBk6Qq2W9PnzhfsVjg98G3rFpnRof+5VqTz1Z+fn56dgUGIzbnQCAAfbbbz+duWSxVvy/n6i1aasCZ5wzpknWxzO1VFtrs373s1tVnOvWTTd+s39sMpOdecYS+QoL9Mbbb6g93KGiglxV7l+h4uLiAYPgJuXk5OiS85fqL4/9Ve/e810VH3KSCqbuJ5fbo+4dQe1Y/4b6tq/XOYtP1qxZMzO4ZTAFIQ0AsJfKykp98txz9PhfH9X7776ts6/6F5WUTR31+slboCNJJBJ685V6/fk3t2nJKSfrggs+aflMG6nicDh0wAGzVVGxa7/k5uZq1apVew2Cu7u8vDxdcO7Z+vDDD/X3de9o+/p6RaNR+XyFOna/6Tp4yaXKyclJ96bAUIQ0AMCgioqKdP65S/X6ypX6+Tf/TccvOVsnnPYJ5eUPPX7YWHy44T09et9ydYW268tfukaHHXZYSspNl1gsptdee01r166VtGvC+nnz5ikSiQw7CK7D4VB1dbWqq6vT2FpMRoQ0AMCQ3G63jl+wQAfNmaNXXntdP3jiYc1buFhHnbBQFVXV/XPZjlZfpFd/X/W6Xnv6MQW3bNRZtbU644zrjX7+bCidnZ1qbW1Vb2+vpF0D1kYikWEHwQXGgpAGABhRcXGxzlhymtra2rRmzTu685YnlVfo0wGHH63qmoNVWjldJWVTlbXbKPuJREKdHWG1tzTr7VCz3nv7Da1fs0ozqqbr4yedpI997N8HjMo/2eTn56ukpKR/eriSkpJJ8SwdJg9CGgBg1Lxer4466kgtWHCctm/fri1bPtJLD7+ltvZ27ezYKXdWljzZOYrFYor09sghqbysTB87KaCT5x+uz19+gcrKyjK9GSnhcrl07LHH6pBDDpGkvSZfByaKkAYAGJVYLKaVK1f2Pxg/f/58TZ8+vf/30WhUkUhEfX19cjqdysrKksfj0dSpU3X55Zdrw4YNo560fbJwuVxGzogAeyCkAQBGpaurS+3t7ZI06BATbrebOSaBFGIwWwDAqOTl5fVfNRpqiAkAqcOfPACAUXG5XJo/f766u7uHHWLCdLFYTF1dXcrLy5u024B9AyENADBqLpdrUg8xMdhzdQQ1mIrbnQCAfcZgz9VZLRaLqaOjY6+5PIGRcCUNALDPSD5XN9zUTanElTtMBCENALDPSPdzdSO9EQsMh9udAIB9SvK5unRc0eKNWEwEV9IAALCIXd6IRWbYMqRVV1fL7/dnuhkTku72z549e9LvM6/Xm+kmpFx2dnamm5AyLpcrLQ9Op6OeeDyuSCRiaR2S5PF45HRae8Mj2ces/PyXl5dbVvZgrD6XJcu3up507bd09DMpfecAO7FlSAsEApluQso4HI60lL9gwQJL60knO/ylWlhYKEmqqqrKcEswlIaGBkuDmsfjUU1NjWXl76m2ttbyOqw+nyU/++nYlnTWY+V+S3c/w9jYMqTV1dUpFApluhkT4vf7VVtbq0QiYWk9yfLttM/s8JdaVlaWJHscF2nX1e1AIGD59qSjnmQ/s/rKQ7L8dO2z+vp6hcNhS+rwer0KBAKWn8+Sn30rtyUpHVeFxrLfotFo/xukY5maK939zOp6kp9Pu7BlSAuFQgoGg5luxqTCPjOTXY5L8raQ1duTrnrSKV37rLGx0bJ6ysrK0nqHw8ptSafR7rdoNKoVK1aoublZpaWlWrp06ZjnUOWzaSbe7gQAYBJrb29Xc3OzJKm5udnyq4hIH0IaAACTmM/nU2lpqSSptLTUli9R7atsebsTAIB0y9TE7W63W0uXLlU4HJbX6x3zrU6YiyMJAMAEZXr6J7fbPemHUcLeuN0JAMAEZWLidtgfIQ0AgAli+idYgdudAABMENM/wQqENAAAUiA5cTuQKtzuBAAAMBAhDQAAwECENAAAAAMR0gAAmOSi0ahaW1sVjUYz3RSkEC8OAAAwiaVignWYiStpAABMYkywbl+ENAAAJjEmWLcvrocCADCJMcG6fXEkAQCY5Jhg3Z643QkAAGAgQhoAAICBCGkAAAAGIqQBAAAYyJYvDlRXV1v6AKXH41EkErGsfEk8ADoJlJeXW1Z28hV6K+tIp+T2WN2vk+VbWU+6jwn7DNh32TKkBQKBTDchZRwOR6abgD0kp11ZvHix5XWlo450qq2ttU09Vk+/E4/HJbHPgH2ZLUNaXV2dQqGQJWVXV1crEAhYWoe066/a2tpaJRIJy+rA+ESjUa1bt87ysYgcDoetjr/L5VIsFrO8nnTst2g0anngiEQiamhokNNp/VMpdtlngN3YMqSFQiEFg0FLyk7eErCyDpiPLxykg9WPVQAwGy8OAAAAGIiQBgAAYCBCGgAAgIEIaQAAAAYipAEAABiIkAYAAGAgQhoAAICBCGkAAAAGIqQBAAAYiJAGAABgIEIaAACAgQhpAAAABiKkAQAAGIiQBgAAYCBCGgAAgIEIaQAAAAYipAEAABiIkAYAAGAgQhoAAICBCGkAAAAGIqQBAAAYiJAGAABgIHemGzBZVVdXy+/3W1a+lWWbUJ8VysvLJUnZ2dkZbklquFwuxWKxTDcjZeLxuCKRiOX1eDweOZ38/TkWdulryc++Hc5n0j/Paelg9T5Llm91PencZ+lASBsjj8cjSQoEAmmpz+FwWFq+y+WSJNXW1lpaTzpVVVVlugkYQkNDg6VBzePxqKamxrLyMTnY6XwmWfs9kO7vALsdG6sR0sYo+QVTV1enUChkWT1+v1+1tbVKJBKW1SGp/6/n+vp6hcNhS+qoqKjQ3LlzLa1j93qsPjbpUF1drUAgYIttkf7Zn62+wpUs3y77LR3s1tcKCwuVlZVlaR3pOqd5vV4FAgFLvwfS8R2QlI4rtsl9ZheEtHEKhUIKBoOZbkbKNDY2Wr496ahDssexSd4SsMO2ZAL7bfTs1tfSuQ1Wn9PKysrSFjjSdX62Wjr3WTrw4AYAAICBCGkAAAAGIqQBAAAYiJAGAABgIEIaAACAgQhpAAAABiKkAQAAGIiQBgAAYCBCGgAAgIEIaQAAAAYipAEAABiIkAYAAGAgQhoAAICBCGkAAAAGIqQBAAAYiJAGAABgIEIaAACAgQhpAAAABiKkAQAAGIiQBgAAYCBCGgAAgIEIaQAAAAZyZ7oBk1V1dbX8fr9l5VtZNmB3Vn8+7aSqqirTTQAwBELaGHk8HklSIBBIS30OhyMt9QB24HK5JKXv8wkAViKkjVEkEpEk1dXVKRQKWVaP3+9XbW2tEomEZXUAdhOLxSRZ//m0k+rqakItYChC2jiFQiEFg8FMNwPAIPh8jh63hQFz8eIAAACAgQhpAAAABiKkAQAAGIiQBgAAYCBCGgAAgIEIaQAAAAYipAEAABiIkAYAAGAgQhoAAICBCGkAAAAGIqQBAAAYiJAGAABgIEIaAACAgQhpAAAABiKkAQAAGIiQBgAAYCBCGgAAgIEIaQAAAAYipAEAABiIkAYAAGAgQhoAAICBCGkAAAAGcme6AVbw+/2Wl21lHZJUXl5uafnprM/r9Vpex+71WH1s0iFd/Sxd0t2f7bLf0sFufS0d7Pg9YJfjn+5zjdUciUQikelGYGjr1q1TNBq1rHy32605c+ZYVj6wO6v7s8fjUU1NjWXlA5lg5ecmPz9f+++/vyVlY+JsF9IaGhrkdFp7F9fhcCgduy0ajVr6hZbkdrvldlt7UTVd+8zlcikWi1leTzqka5+lS7r6s8fjsfwcYDd262vpYJfvgZycHM2ePVv19fUKh8OW1ZMuXq9XgUAg081IGdvd7oxEIpluwqSTri9PIB04BwBj19jYqGAwmOlmTFhZWZmtQhp/bgIAABiIkAYAAGAgQhoAAICBCGkAAAAGIqQBAAAYiJAGAABgIEIaAACAgQhpAAAABiKkAQAAGIiQBgAAYCBCGgAAgIEIaQAAAAYipAEAABiIkAYAAGAgQhoAAICBCGkAAAAGIqQBAAAYiJAGAABgIEIaAACAgQhpAAAABiKkAQAAGMid6QakmsfjkdNpj+zpcrkUi8Uy3YyUSNe22GmfxeNxRSIRy+tJ12fGTscmXey0z+x2DrDLscnOzs50EzAM24W0mpqaTDcBSJmGhgZLg5rH4+EzAwCGsl1Ik6S6ujqFQqFMN2NCqqurFQgE2BYD60kHv9+v2tpay69wJcvn2JjHTvvMbucAOx4bmMmWIS0UCikYDGa6GRPi9/slsS0m1mNHHBvz2Gmf2e0cYMdjAzPZ4+EtAAAAmyGkAQAAGIiQBgAAYCBCGgAAgIEIaQAAAAYipAEAABiIkAYAAGAgQhoAAICBCGkAAAAGIqQBAAAYiJAGAABgIEIaAACAgQhpAAAABiKkAQAAGIiQBgAAYCBCGgAAgIEIaQAAAAYipAEAABiIkAYAAGAgQhoAAICBCGkAAAAGIqQBAAAYyJ3pBmDf4ff701K+1fWkQ3l5eaabAKRcdXW1pZ/PqqoqW9WTDsltmezbkWS3cychDZbzeDySpNra2rTUl6560sHhcGS6CcCEJc8BgUAgLfXZrZ50sNN5004IabBcJBKRJNXX1yscDltWT0VFhebOnWt5Peng9XoVCASUSCQy3RRgwpLngLq6OoVCIcvqqa6uViAQsE096ZDcFjucN6V/njvtgpCGtGlsbFQwGLRNPVYqKyuz1YkGkKRQKGTpZzN5y84u9aRDclvscN6U7Hfu5MUBAAAAAxHSAAAADERIAwAAMBAhDQAAwECENAAAAAMR0gAAAAxESAMAADAQIQ0AAMBAhDQAAAADEdIAAAAMREgDAAAwECENAADAQIQ0AAAAAxHSAAAADERIAwAAMBAhDQAAwECENAAAAAMR0gAAAAxESAMAADAQIQ0AAMBAhDQAAAADEdIAAAAM5M50A6zg9/sz3YQJS24D22JePelQXl6e1vo4Nuax0z6z2zmAY2OudJ87reZIJBKJTDcCAAAAA3G7EwAAwECENAAAAAMR0gAAAAxESAMAADAQIQ0AAMBAhDQAAAADEdIAAAAMREgDAAAwECENAADAQIQ0AAAAAxHSAAAADERIAwAAMBAhDQAAwECENAAAAAMR0gAAAAxESAMAADAQIQ0AAMBAhDQAAAADEdIAAAAMREgDAAAwECENAADAQIQ0AAAAAxHSAAAADERIAwAAMBAhDQAAwEDu0SwUj8e1detWFRYWyuFwWN0mAAAAW0okEuro6FBlZaWczuGvlY0qpG3dulVVVVUpaRwAAMC+bvPmzZo+ffqwy4wqpBUWFvYX6PV6J94yC0WicW1p65HDIXHRD73RmDaGuuWQ5KQ/WCLL5Rz3FfbO3qhe29Ihp0Ny8YE1QkIJFXhcck7wA9PZE9Vr61vkdDrkSlHbTNHd26f164NyOiSHYSeWLKfDkjte8URCiYQ0vThP2VlmbbMk9fbFFemL645rT9DMcrNzSjgcVlVVVX+2Gs6oQlrygHu93kkR0gqjHjmdkpOT/j6vpy+m/IhbLodjwl86GCiRSEiSst3OcX/WnL1R5eQn5HY65Ob4ZFwisSukFeZkyTXB4+HI6lNWbreynE65XTZ7/NkVkSt7p1xOp1yGbFtC//g8upyWXKCIJ6RYPKGCwnzlZJkXu92RqGJdfSosND+nJI0mTJvRuwAAADAAIQ0AAMBAhDQAAAADEdIAAAAMREgDAAAwECENAADAQIQ0AAAAAxHSAAAADGS7kNbU1KSf/OA/FdzW1P+z4LYm/ejW7+ndNav1o1u/N+B3ey4T3NY05H+P1njWGY/x1jPa9d5ds1oXnrVY765ZPei6E63/3TWr9b0bv67v3fj1vcoIbmvSDdddq6VLFo67/uC2Jn3/5ht0xw9u1vvr3tHdP/9vtQa3D7psa3D7iL//1a3f0k9u+rJ+detNA5bbfd2h/nu4ekaqe7j27NmW8dYxWLs3rH1nwM/2rO/9de/oq1ecow3vrhmkvG2666e3qjW4bdjtCDVv14v3/Ezb3n9Xz939U3W0Bke9DySpozWoJ355i/7y4xv1lx/fqCd+eYs6WoPqaA0OKG/3fzdteFfLv3ypmja8O2y5z939UzVteFdP/PKWAeUm/73775o27N3+werZs12j3cbkOuNZfyxldbQG9fzdP1V4mPLbW4J6/M4fqb0lOOC/d//dloZ39dgvb1HDQz9TT3vLuNq6u572Fr1X9/8GLSv5u/bNDUMuM1gZQ5U5mp/3hlvU8cafFOtqG1X7o51t2rHyPkU7h15+NMsMJ9L8gbY99C31NG8c9TrRzpBaXrtX0c7QqJZte/0+9Xa0jqldPR2teu/p36pnmPWSy7Q3bRhx2aGW7+0I6aOXfq/g9uHPOZON7ULatqYm/eyH/zXgQAW3b9NPfvBfali3Vj/5wX8NehCTywS3bxvyv0drPOuMx3jrGe16DevW6rWXX1TDurWDrjvR+hvWrdWvb/+pfn37T/cqI7h9m37/2zv05t9eH3f9we3btPyXP9NDv/k/bdrwnu75xQ8Vah48pISat4/4+weX/58e++Nv9eDy2wcst/u6Q/33cPWMVPdw7dmzLeOtY7B2777PBqtv04b3tOZvr6hxw3t7ldfavF2/+dkP1DrCNoWat+ul3/9czZs26Pnf/Uw7Q82j3geStDPUrFcfvFOrHrtXqx67V68+eKd2hpq1M9Q8oLzd/92yaYM+XPO6WjZtGLbc53/3M7Vs2qBXH7xzQLnJf+/+u5ZB2j9YPXu2a7TbmFxnPOuPpaydoWa9cM/Phw1p4dagnlj+E4VbgwP+e/ffbWts0CsP3qlNz92n3vDYvtQH09PeooZH7xgypDU8eoc6mjYOucxgZQxV5mh+3htu1c437x91SIt1tan9b38cdvnRLDOcvrbNijS9q0ho86jXiXa2KfT6H0cVDKOdbdrxtz+qd+fIgW53vR0hrX/2bvV2DL1ecpmdwQ9HXHao5Xt3hrT1lXsJaQAAALAeIQ0AAMBAhDQAAAADEdIAAAAMREgDAAAwECENAADAQIQ0AAAAAxHSAAAADERIAwAAMBAhDQAAwECENAAAAAMR0gAAAAxESAMAADAQIQ0AAMBAhDQAAAADEdIAAAAMREgDAAAwECENAADAQIQ0AAAAAxHSAAAADERIAwAAMBAhDQAAwECENAAAAAMR0gAAAAxESAMAADAQIQ0AAMBAhDQAAAADEdIAAAAMREgDAAAwECENAADAQIQ0AAAAAxHSAAAADOTOdANSbWpFha798g0qK5/a/7Oy8qn60lduUM2cg/Slrwz83Z7LJH831H+Pxp5lWWW89Yx2vZo5B+nY409UzZyDhlx3IvXXzDlIn/78F/t/tucyl1xxtda+u2bc9ZeVT9VVn7tWO3r6NGP2gbr0C1+Wv7R80GX9peUj/v7cq/5F3V1dys3LH7DcnusO9d9D1TNS3cO1R3Lstd546hhsG/bcZ3vWN2P2gTps3gJVzz5wr/JKSst15bVfUckI2+QvLdcJl1yj0hmz9bHLrlWBv3S0u0CSVOAv1XHnLlOku0uS5MnN6y9j9/IK/KX//LfDof0OO0ZTZswettyPXXatpsyYrePOXdb/M0n9/979d1MGaf+UGbP3qmdAO8awjbuvM579NNqyCvylOunSa+QtKRuyDG9JmU676kv9y+z+38nfTa2u0YJzl+mjUKeyvSXjauvucnxTVHPG1crxTRnyd4UVM4dcZrAyhipzVD/viajgqPPlyiseVftdecXyzbtg2OVHs8xwsoqr5Kk4WB5/1ajXcecXy3/MBXLnj1ynO79YRfMuUHaBf0ztyi7064CTL1d24dDrJZcpKNtvxGWHWj4RialywUWWf++mmyORSCRGWigcDsvn86m9vV1erzcd7Rq3SDSuzaEeOZ2S0+HIdHOQYT19Ma1v7ZTL4ZDTSX9IpeSpI9vtHPdnraM3qhc/bJfb6ZCb45NxiYSUUEK+nCy5Jng8Orr79MLa7cpyOuV22eumTXd3RH9f1ySX0ymXIduW0D8+jy6nrPjqiyekWDyhWaX5yslypb6CCeqORBXu6tMfrv+YZk01O6eMJVOZ0bsAAAAwACENAADAQIQ0AAAAAxHSAAAADERIAwAAMBAhDQAAwECENAAAAAMR0gAAAAw0qhkHkoNWhsNhSxuTCpFoXB0dPXI4ZMmAfphceqMxde7slkMSY6Vao9fllGOcH7bO3qh6OnfK6ZBcfGCNkFBCzohrwoM/d/ZE1dfdqZjTIfOGPp2Y7t4+xXq7lHBIMdNOLE7HuD+Pw4knEkokpJ0dcfVlGbbNknr74or1xdXREVY4L9OtGV4yS41iLoHRzTiwZcsWVVWNfqoJAAAADG3z5s2aPn36sMuMKqTF43Ft3bpVhYWFliT0iQqHw6qqqtLmzZuNn7YK1qEfQKIfYBf6ASQz+0EikVBHR4cqKyvldA7/1Nmobnc6nc4R054JvF6vMQcBmUM/gEQ/wC70A0jm9QOfzzeq5XhxAAAAwECENAAAAAPZIqRlZ2frpptuUnZ2dqabggyiH0CiH2AX+gGkyd8PRvXiAAAAANLLFlfSAAAA7IaQBgAAYCBCGgAAgIEIaQAAAAbKWEh74YUX9IlPfEKVlZVyOBx66KGH9lrmwQcf1OLFi1VSUiKHw6G33npr1OVv2bJFHo9Hhx566KC/dzh2zW/26quvDvh5b29vf33PPffcGLYI4zFSP+jr69PXvvY1HXbYYcrPz1dlZaWuuOIKbd26ddhyr7rqqv5j7PF4NHv2bH3nO99RNBqVJD333HNyOBwqLi5WT0/PgHVXrlzZvy7S5xe/+IWqq6uVk5OjY489Vq+//vqA3//qV7/SwoUL5fV65XA4tGPHjhHLpB9MPsP1g1AopGuvvVYHHnigcnNzNWPGDH3xi19Ue3v7sGUuXLiw/1jm5OTo4IMP1m233db/++XLl8vhcOiggw7aa90//elPcjgcqq6uTtk2YmQjnQ8+97nPadasWcrNzVVpaanOPvtsrVu3btgyJ2M/yFhI6+zs1BFHHKFf/OIXwy5z4okn6tZbbx1z+cuXL9cFF1ygcDis1157bdBlqqqqdNdddw342YoVK1RQUDDm+jA+I/WDrq4urVq1SjfeeKNWrVqlBx98UO+9957OOuusEctesmSJmpqatH79el1//fW6+eab9YMf/GDAMoWFhVqxYsWAn91xxx2aMWPG+DcKY3bffffpuuuu00033aRVq1bpiCOO0GmnnaZgMNi/TFdXl5YsWaIbbrhhTGXTDyaPkfrB1q1btXXrVv3whz/UO++8o+XLl+vxxx/X1VdfPWLZn/nMZ9TU1KR3331XF1xwgb7whS/oD3/4Q//v8/PzFQwG9corrwxYj36QfqM5Hxx99NG66667tHbtWj3xxBNKJBJavHixYrHYsGVPun6QMICkxIoVK4b8/QcffJCQlHjzzTdHVV48Hk/MnDkz8fjjjye+9rWvJT7zmc8MWuc3v/nNhNfrTXR1dfX/fNGiRYkbb7wxISnx7LPPjnFLMBEj9YOk119/PSEp8eGHHw65zJVXXpk4++yzB/xs0aJFieOOOy6RSCQSzz77bH8fOPXUU/uX6erqSvh8vv4+gPQ45phjEl/4whf6/x2LxRKVlZWJW265Za9lk8eura1txHLpB5PLWPpB0h//+MeEx+NJ9PX1DbnMxz72scSXvvSlAT874IADEhdddFEikUgk7rrrroTP50tcc801iU9/+tP9y2zevDmRnZ2d+PrXv57Yb7/9xrdRGLPx9IPVq1cnJCU2bNgw5DKTsR/Y8pm0Z599Vl1dXTr11FN12WWX6d5771VnZ+deyx199NGqrq7WAw88IEnatGmTXnjhBV1++eXpbjLGoL29XQ6HQ0VFRWNaLzc3V5FIZMDPLr/8ctXX12vTpk2SpAceeEDV1dWaO3duqpqLEUQiEb3xxhs69dRT+3/mdDp16qmn7vXXbCrQD8w03n7Q3t4ur9crt3tUU1H3G6wfLFu2TH/84x/V1dUladcdmSVLlqi8vHxMZWP8xtMPOjs7ddddd2n//fdXVVXVmOozvR/YMqTdcccduuiii+RyuXTooYdq5syZ+tOf/jTossuWLdOdd94padeBOOOMM1RaWprO5mIMenp69LWvfU0XX3zxqCfLTSQSeuqpp/TEE0/o4x//+IDflZWV6fTTT9fy5cslSXfeeaeWLVuW6mZjGC0tLYrFYnudAMvLy7Vt27aU1UM/MNt4+kFLS4u++93v6rOf/eyo64nFYvrd736nt99+e69+cNRRR2nmzJm6//77lUgktHz5cvpBmo2lH9x2220qKChQQUGBHnvsMT355JPyeDyjqmey9APbhbQdO3bowQcf1GWXXdb/s8suu0x33HHHoMtfdtlleuWVV7Rx40Y+kIbr6+vTBRdcoEQiodtvv33E5R955BEVFBQoJydHp59+ui688ELdfPPNey23bNkyLV++XBs3btQrr7yiSy+91ILWI1PoB/YUDodVW1urgw8+eNDjuafkF3pubq4+85nP6N///d/1+c9/fq/lli1bprvuukvPP/+8Ojs7dcYZZ1jQeqTCpZdeqjfffFPPP/+8ampqdMEFF+z1AtCeJls/GNv14Ung97//vXp6enTsscf2/yyRSCgej6uhoUE1NTUDli8pKdGZZ56pq6++Wj09PTr99NPV0dGR7mZjBMmA9uGHH+qZZ54Z1VW0k08+Wbfffrs8Ho8qKyuHvB1y+umn67Of/ayuvvpqfeITn1BJSUmqm49hTJkyRS6XS9u3bx/w8+3bt2vq1KkTLp9+MDmMpR90dHRoyZIl/S98ZGVljVj+pZdeqm984xvKzc1VRUWFnM7Br1Fceuml+upXv6qbb75Zl19++Zhvo2JixtIPfD6ffD6fDjjgAB133HEqLi7WihUrdPHFFw9Z/mTrB7a7knbHHXfo+uuv11tvvdX/v9WrVysQCPTf1tzTsmXL9Nxzz+mKK66Qy+VKc4sxkmRAW79+vZ566qlRf3nm5+dr9uzZmjFjxrAfMLfbrSuuuELPPfccV1IzwOPx6Oijj9bTTz/d/7N4PK6nn35aCxYsmHD59IPJYbT9IBwOa/HixfJ4PHr44YeVk5MzqvJ9Pp9mz56tadOmDfnFLEl+v19nnXWWnn/+efpBBoz3fJBIJJRIJNTb2zts+ZOtH2TsT4SdO3dqw4YN/f/+4IMP9NZbb8nv9/e/5hoKhbRp06b+MbHee+89SdLUqVMH/Qv7rbfe0qpVq3TPPfdozpw5A3538cUX6zvf+Y6+973v7XWiXrJkiZqbm0f9jBNSZ6R+0NfXp/PPP1+rVq3SI488olgs1v9cgt/vH/XzByP57ne/q6985StcPcmQ6667TldeeaXmzZunY445Rj/+8Y/V2dmpT33qU/3LbNu2Tdu2bevvL2vWrFFhYaFmzJghv9+fknbQDzJrpH6QDGhdXV363e9+p3A4rHA4LEkqLS1N2R/Zy5cv12233UY/yJCR+sHGjRt13333afHixSotLdWWLVv0/e9/X7m5uSm9LWlCP8hYSPvb3/6mk08+uf/f1113nSTpyiuv7H949+GHHx5wkr7oooskSTfddNOgzyDccccdOvjgg/cKaJK0dOlSXXPNNXr00Uf3GmPL4XBoypQpE90kjMNI/eCjjz7Sww8/LEk68sgjB6z77LPPauHChSlph8fjoQ9k0IUXXqjm5mZ961vf0rZt23TkkUfq8ccfH/Dw8P/93//p29/+dv+/TzrpJEnSXXfdpauuuiol7aAfZNZI/WDVqlX9417Onj17wLoffPBBygYazc3NVW5ubkrKwtiN1A9ycnJUX1+vH//4x2pra1N5eblOOukkvfzyyyorK0tZO0zoB45EIpHIaAsAAACwF9s9kwYAAGAHhDQAAAADEdIAAAAMREgDAAAwECENAADAQIQ0AAAAAxHSAAAADERIAwAAMBAhDQAAwECENAAAAAMR0gAAAAxESAMAADDQ/wfE49DIaoKVIgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, (ax_map, ax_barcode) = plt.subplots(2, 1, figsize=(6,6.5),\n", " gridspec_kw={'height_ratios':[10,1]})\n", "\n", "gpd.GeoDataFrame(geometry=[outer_box], crs='EPSG:3857').plot(ax=ax_map, color='#d3d3d3')\n", "city.plot(ax=ax_map, edgecolor='white', linewidth=1, color='#8c8c8c')\n", "\n", "plot_stops(stops_hdb, ax=ax_map, cmap='Blues')\n", "plot_pings(traj, ax=ax_map, s=6, color='black', alpha=0.5, traj_cols=tc)\n", "ax_map.set_axis_off()\n", "\n", "plot_time_barcode(traj['unix_ts'], ax=ax_barcode, set_xlim=True)\n", "plot_stops_barcode(stops_hdb, ax=ax_barcode, cmap='Blues', set_xlim=False, timestamp='unix_ts')\n", "\n", "plt.tight_layout(pad=0.1)\n", "plt.show()" ] } ], "metadata": { "jupytext": { "cell_metadata_filter": "all", "formats": "ipynb,py:percent" }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.0" } }, "nbformat": 4, "nbformat_minor": 5 }