{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Multiple Traveling Salesman Problem\n", "\n", "## 1. Mathematical Problem\n", "\n", "In this notebook, we show how to solve the Multiple Traveling Salesman Problem (mTSP) using CVXPY. The problem considers $m$ traveling salesmen. To solve it, I'm going to use the Miller-Tucker-Zemlin formulation, which follows:\n", "\n", "The cities are identified with the numbers $1, \\ldots, n$, with which we define:\n", "\n", "$$\n", "x_{ij} = \\begin{cases} 1 & \\text{the path goes from the city} \\, i \\text{ to city } j \\\\ 0 & \\text{otherwise} \\end{cases}\n", "$$\n", "\n", "For $i = 1, \\ldots, n$, $m$ is the number of salesmen, $u_{i}$ is an auxiliary variable and $c_{i, j}$ is the distance from city $i$ to the city $j$. Then the mTSP can be written as the following integer linear programming problem:\n", "\n", "$$\n", "\\begin{align}\n", "\\min &\\sum_{i=1}^n \\sum_{j\\ne i,j=1}^n c_{i,j}x_{i,j}\\colon && \\\\\n", " & \\sum_{i=2}^n x_{i,1} = m \\\\\n", " & \\sum_{j=2}^n x_{1,j} = m \\\\\n", " & \\sum_{i=2,i\\ne j}^n x_{i,j} = 1 && j=1, \\ldots, n; \\\\\n", " & \\sum_{j=2,j\\ne i}^n x_{i,j} = 1 && i=1, \\ldots, n; \\\\\n", " & u_{i}-u_{j} + 1 \\le (n-1)(1-x_{i,j}) && 2 \\le i \\ne j \\le n; \\\\\n", " & 0 \\le u_{i} \\le n && 2 \\le i \\le n; \\\\\n", " & x_{i,j} \\in \\{0,1\\} && i,j=1, \\ldots, n; \\\\\n", " & u_{i} \\in \\mathbf{Z} && i=2, \\ldots, n. \\\\\n", "\\end{align}\n", "$$\n", "\n", "The objective function minimizes the distance of each salesman's routes. The first two restrictions guarantee that there is a number of salesmen $m$ who leave and return to the city of origin. The following two restrictions ensure that each city is reached from exactly one other city and that from each city there is an exit to exactly one other city. The constraints of the auxiliary variables force that no salesman passes through the same city twice.\n", "\n", "## 2. Example for a single Traveling Salesman\n", "\n", "We are going to find the optimal paths (shortest distance) for a single salesman that starts from the point of origin (O) and must pass through all points A to F and return to point O.\n", "\n", "| Point |\tCoordinates |\n", "| :----------: | :----------: |\n", "| Origin(O) | (-12.059296, -76.975893) |\n", "| A | (-12.079575, -77.009686) |\n", "| B | (-12.087303, -76.996620) |\n", "| C | (-12.084391, -76.975651) |\n", "| D | (-12.063603, -76.960483) |\n", "| E | (-12.056762, -77.014452) |\n", "| F | (-12.011531, -77.002383) |" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "code_folding": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Distance Matrix is:\n", "\n", "[[0. 4.3092 3.8329 2.7762 1.7441 4.2076 6.0199]\n", " [4.3092 0. 1.6596 3.7435 5.6408 2.5764 7.5691]\n", " [3.8329 1.6596 0. 2.3055 4.7278 3.8966 8.4056]\n", " [2.7762 3.7435 2.3055 0. 2.8311 5.2142 8.5694]\n", " [1.7441 5.6408 4.7278 2.8311 0. 5.9246 7.3483]\n", " [4.2076 2.5764 3.8966 5.2142 5.9246 0. 5.1733]\n", " [6.0199 7.5691 8.4056 8.5694 7.3483 5.1733 0. ]]\n" ] } ], "source": [ "################################################\n", "# Loading libraries\n", "################################################\n", "!pip install --quiet geopy\n", "\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import cvxpy as cp\n", "from geopy import distance # Library for geographical calculations\n", "\n", "################################################\n", "# Original Data\n", "################################################\n", "points = [(-12.059296, -76.975893),\n", " (-12.079575, -77.009686),\n", " (-12.087303, -76.996620),\n", " (-12.084391, -76.975651),\n", " (-12.063603, -76.960483),\n", " (-12.056762, -77.014452),\n", " (-12.011531, -77.002383)]\n", "\n", "################################################\n", "# Building distance matrix\n", "################################################\n", "n = len(points)\n", "C = np.zeros((n,n))\n", "\n", "for i in range(0, n):\n", " for j in range(0, len(points)):\n", " C[i,j] = distance.distance(points[i], points[j]).km\n", "\n", "# Showing distance matrix\n", "print('Distance Matrix is:\\n')\n", "print(np.round(C,4))" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The path is:\n", "\n", "0 => 6 => 5 => 1 => 2 => 3 => 4 => 0\n" ] } ], "source": [ "################################################\n", "# Solving the integer programming problem\n", "################################################\n", "\n", "# Defining variables\n", "X = cp.Variable(C.shape, boolean=True)\n", "u = cp.Variable(n, integer=True)\n", "ones = np.ones((n,1))\n", "\n", "# Defining the objective function\n", "objective = cp.Minimize(cp.sum(cp.multiply(C, X)))\n", "\n", "# Defining the constraints\n", "constraints = []\n", "constraints += [X @ ones == ones]\n", "constraints += [X.T @ ones == ones]\n", "constraints += [cp.diag(X) == 0]\n", "constraints += [u[1:] >= 2]\n", "constraints += [u[1:] <= n]\n", "constraints += [u[0] == 1]\n", "\n", "for i in range(1, n):\n", " for j in range(1, n):\n", " if i != j:\n", " constraints += [ u[i] - u[j] + 1 <= (n - 1) * (1 - X[i, j]) ]\n", "\n", "# Solving the problem\n", "prob = cp.Problem(objective, constraints)\n", "prob.solve(verbose=False)\n", "\n", "# Transforming the solution to a path\n", "X_sol = np.argwhere(X.value==1)\n", "orden = X_sol[0].tolist()\n", "\n", "for i in range(1, n):\n", " row = orden[-1]\n", " orden.append(X_sol[row,1])\n", "\n", "# Showing the optimal path\n", "print('The path is:\\n')\n", "print( ' => '.join(map(str, orden)))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAygAAAGbCAYAAAAvNbQDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABrEklEQVR4nO3dd3iTZfvG8e/TXTqhtKwCZRbKKnujiAiCKAiC29c9kKEIoj/n60JRBHHr6x4sAZUNArJllbL3LpvSPZM8vz8KyKZA2ydNzs9xeNCkSXriUZJcue/7ugzTNBEREREREXEGHlYHEBEREREROUUFioiIiIiIOA0VKCIiIiIi4jRUoIiIiIiIiNNQgSIiIiIiIk7DqzAetHTp0mZUVFRhPLSIiIiIiLiAVatWHTNNM/zc6wulQImKimLlypWF8dAiIiIiIuICDMPYc6HrtcVLRERERESchgoUERERERFxGipQRERExDJJSUn06tWLWrVqUbt2bZYuXWp1JBGxWKGcQRERERHJjwEDBtC5c2cmTJhATk4OGRkZVkcSEYupQBERERFLJCcns2DBAr777jsAfHx88PHxsTaUiFhOW7xERETEErt27SI8PJwHH3yQhg0b8sgjj5Cenm51LBGxmAoUERERsYTNZmP16tU8+eSTxMXFERAQwLBhw6yOJSIWU4EiIiIiloiMjCQyMpLmzZsD0KtXL1avXm1xKhGxmgoUERERsUTZsmWpWLEiW7ZsAeCvv/4iJibG4lQiYjUdkhcRERHLjB49mnvuuYecnByqVq3Kt99+a3UkEbGYChQRERGxTGxsLCtXrrQ6hog4EW3xEhERERERp6ECRUREREREnIa2eImIiEiRmRyXwPCZWziQlEn5UH8Gd4qme8MKVscSESeiAkVERESKxOS4BF6YuI7MXDsACUmZvDBxHYCKFBE5TVu8REREpEgMn7nldHFySmauneEzt1iUSESckQoUERERKXSZOXYSkjIv+L0DF7leRNyTChQREREpVOsTkuk6euFFv18+1L8I04iIs1OBIiIiIoXC7jD5/O8d9Ph0MenZNp68rhr+3p5n3cYABt5Yw5qAIuKUdEheRERECtyBpEyeHbeGZTsTubluWd7uUY+SAT5Elw063cWrVIAPx9Nz2HYkzeq4IuJEVKCIiIhIgfoz/gD/N2kdNofJez3rc0eTSAzDAPK6dZ3Zsev/Jq3jq4U76RhThqZRpayKLCJORFu8REREpECkZuXy7Lg19Ps1jirhgUzr35beTSueLk4u5MUutYks6c9z4+PJyLEVYVoRcVYqUEREROSardqTSJePFjI5LoH+N1RnwhMtiSodcNn7Bfh68X6vBuxNzGDY9M1FkFREnJ0KFBEREblqNruDD2dv5Y7Pl2KaMPbxljx7UzTenvl/i9G8ahgPta7CD0v3sGjbsUJMKyLFgQoUERERuSp7jqdzxxdLGfXXNrrHVmDagLZXfY5kcKdoqoYHMGRCPClZuQWcVESKExUoIiIickVM02T8yn10GbWQ7UfS+OiuhozoE0uwn/dVP6aftycjesdyKCWLN/7cWIBpRaS4UYEiIiIi+ZaUkcPTv8QxeMJa6lQIYcbAdtzaoHyBPHZsxVCevL4a41ft569NhwvkMUWk+FGBIiIiIvmyZMcxOo9cyMwNhxjSOZpfH21BhQKeAt+/Qw1qlQ1i6MR1nEjPKdDHFpHiQQWKiIiIXFKOzcE70zZxz9f/UMLHk4lPteKp66vj6XHx9sFXy9crb6tXUkYOr/yxocAfX0ScnwoUERERuajtR1Lp8elivliwkzubVmJK/zbUjwwt1J8ZUz6YAR1q8Gf8AaauPVioP0tEnI8myYuIiMh5TNPkp3/28tbUjfh7e/LlfY25qU7ZIvv5T1xXjdkbD/PS5HU0q1KK8CDfIvvZImItraCIiIjIWY6lZfPI9yt5efJ6mkaVYubAdkVanAB4eXrwQe8GpOfYeWHiOkzTLNKfLyLWUYEiIiIip83bcoTOIxewcPsxXrklhu8fbEZEsJ8lWapHBDGkUzRzNh1m4uoESzKISNHL1xYvwzB2A6mAHbCZptmkMEOJiIhI0crKtfPOtE18v3QP0WWC+OmR5tQqG2x1LB5sXYWZGw7x2p8baFU9jHIhBds1TEScz5WsoLQ3TTNWxYmIiIhr2XgghW6jF/H90j082DqK359u7RTFCYCnh8H7dzTAZjcZMmGttnqJuAFt8RIREXFTDofJ1wt30v2TxSRl5vL9Q814tVsd/Lw9rY52lsphAbzYtTYLtx3jl+V7rY4jIoUsvwWKCcwyDGOVYRiPXegGhmE8ZhjGSsMwVh49erTgEoqIiEiBO5Scxf3fLOfNqZu4LjqcGQPacl3NcKtjXdS9zSvRtkZp3pq6ib3HM6yOIyKFKL8FShvTNBsBNwN9DcNod+4NTNP80jTNJqZpNgkPd94nOBEREXc3fd1BOo9awKo9J3i7Rz2+vK8xYYHO3cbXMAze7VkfT8PguQnxOBza6iXiqvJVoJimmXDyzyPAJKBZYYYSERGRgpeebWPIhHie/Hk1FUuWYEr/NtzdvBKGUfAT4QtD+VB/XukWw/JdiXy7ZLfVcUSkkFy2QDEMI8AwjKBTXwM3AesLO5iIiIgUnDX7kuj60ULGr9rPU9dX47cnW1EtPNDqWFesV+NIbqwdwXszNrPjaJrVcUSkEORnBaUMsMgwjHhgOTDVNM0ZhRtLRERECoLdYTL6r230/GwJOTYHvz7agiGda+HjVTz75BiGwdu318Pfx5NB4+Kx2R1WRxKRAnbZOSimae4EGhRBFhERESlA+xIzeGbsGlbuOUG3BuV5s3tdQvy9rY51zSKC/Hjjtrr0+zWOLxbspG/76lZHEpEClK9BjSIiIlK8TI5L4OXJ6zGBD/s0oHtshWJz1iQ/ujUoz4wNhxg5Zys31IqgdjnnmNsiIteueK7vioiIyAUlZ+bS/9c4Bo5dQ3TZIKYPaEuPhpEuVZyc8sZtdQnx92HQuHhybNrqJeIqVKCIiIi4iH92HqfLqIVMXXeQZzvWZMxjLahYqoTVsQpNqQAf3rm9HhsPpvDx3G1WxxGRAqICRUREpJjLtTsYPnMzd361DC9PgwlPtKR/hxp4ebr+y3zHmDL0bBTJJ/N3EL8vyeo4IlIAXP+ZS0RExIXtPJpGz8+W8Mm8HdzROJKp/dvSsFJJq2MVqVe6xRAR5Mug8fFk5dqtjiMi10gFioiISDFkmia/Lt9L148Wsed4Bp/d04j3ejUg0Nf9+t+E+Hvzbs/6bD+SxojZW62OIyLXyP2exURERIq5xPQchv62llkbD9OqWhgf9G5AuRB/q2NZql3NcO5pXomvFu6kY0wZmkaVsjqSiFwlraCIiIgUIwu2HqXzyAXM23KE/+tSm58ebu72xckpL3apTWRJfwaNiyc922Z1HBG5SipQREREioGsXDv//XMj93+znGB/byb3bc2j7ari4eF67YOvVoCvF+/3asC+ExkMm77Z6jgicpW0xUtERMTJbTmUyoAxcWw+lMr9LSvzws218ffxtDqWU2peNYyHWlfhf4t20alOWdrUKG11JBG5QlpBERERcVIOh8k3i3bR7eNFHEvL5pv/NOG/t9VVcXIZgztFUzU8gCET4knJyrU6johcIRUoIiIiTuhIShb/+W4F/52ykdbVwpg+oB031Cpjdaxiwc/bkxG9YzmUksUbf260Oo6IXCFt8RIREXEyszYcYujEdaRn23jjtjrc26IyhqGzJlcitmIoT15fjU/m7aBz3bJ0qK3iTqS40AqKiIiIk8jIsfHipHU89uMqygb7MaVfG+5rGaXi5Cr171CDWmWDGDpxHSfSc6yOIyL5pAJFRETECazbn8wtHy3i1+V7ebxdVSb1bUWNMkFWxyrWfL3ytnolZeTwyh8brI4jIvmkAkVERMRCdofJp/O30+PTxWTk2Pn54ea80KU2vl46CF8QYsoHM6BDDf6MP8DUtQetjiMi+aAzKCIiIhZJSMrk2bFr+GdXIl3qleXtHvUILeFjdSyX88R11Zi98TAvTV5HsyqlCA/ytTqSiFyCVlBEREQs8Gf8ATqPXMD6hGSG96rPJ3c3UnFSSLw8PfigdwPSc+y8MHEdpmlaHUlELkEFioiISBFKzcrl2bFr6PdrHNXCA5k2oC13NKmog/CFrHpEEEM6RTNn02Emrk6wOo6IXIK2eImIiBSRVXsSGTh2DQknMunfoQb9bqiOt6c+KywqD7auwqwNh3ntzw20qh5GuRB/qyOJyAXoWVFERKSQ2ewORszeyh2fL8U0YdzjLXm2Y00VJ0XM08Ng+B31sdlNhkxYq61eIk5Kz4wiIiKFaM/xdHp9vpSP/tpG94YVmD6gLU2iSlkdy21VDgvgxa61WbjtGL8s32t1HBG5AG3xEhERKQSmaTJh1X5e+2MDHh4Go+9qSLcG5a2OJcC9zSsxa8Mh3pq6ibbVw6kUVsLqSCJyBq2giIiIFLCkjBz6/rKawRPWUrdCCDMGtlNx4kQMw+DdnvXxNAyemxCPw6GtXiLORAWKiIhIAVqy/RidRy5k1obDDOkczS+PtqBCqA5jO5vyof680i2G5bsS+XbJbqvjiMgZtMVLRESkAGTb7IyYtZUvF+6kSlgAk55qTb3IEKtjySX0ahzJzA2HeG/GZq6PDqdaeKDVkUQEraCIiIhcs+1HUunxyRK+WLCTu5pVYkr/NipOigHDMHj79nr4+3gyaFw8NrvD6kgiggoUERGRq2aaJj8u3U3XjxZxKCWLL+9rzNs96lHCRxsUiouIID/euK0ua/Yl8cWCnVbHERG0xUtEROSqHE3N5vnf1jJ38xHa1Qzn/V71iQj2szqWXIVuDcozY8MhRs7Zyg21IqhdLtjqSCJuTSsoIiIiV2je5iPcPGoBi7Yf49VuMXz3n6YqToq5N26rS4i/D8+OiyfHpq1eIlZSgSIiIpJPWbl2Xvl9PQ9+t4LSgb78+XQbHmxdBQ8Pw+poco1KBfjwzu312HQwhY/nbrM6johb0xYvERGRfNhwIJkBY9aw/UgaD7epwuBO0fh5e1odSwpQx5gy9GwUySfzd9ChdhkaVAy1OpKIW9IKioiIyCU4HCZfLthB908Wk5KZyw8PNePlW2JUnLioV7rFEBHky6Dx8WTl2q2OI+KWVKCIiIhcxKHkLO775h/enraZ9tERzBjYjnY1w62OJYUoxN+bd3vWZ/uRND6YtcXqOCJuSVu8RERELmD6uoMMnbiOHJuDYbfXo0/TihiGzpq4g3Y1w7mneSW+XrSLm+qUpWlUKasjibgVraCIiIicIT3bxpAJ8Tz582oqh5Vgav823NmskooTN/Nil9pElvRn0Lh40rNtVscRcSsqUERERE6K23uCLh8tZPyq/fRtX43fnmxF1fBAq2OJBQJ8vXi/VwP2nchg2PTNVscRcSsqUERExO3Z7A4++msbvT5fis1uMubRFgzuVAtvT71MurPmVcN4qHUVfly2h0XbjlkdR8Rt6JlXRETc2r7EDO78chkjZm+la71yTBvQluZVw6yOJU5icKdoqoYHMGRCPClZuVbHEXELKlBERMQtmabJpLj93DxqIVsOpTKyTywf3dWQEH9vq6OJE/Hz9mRE71gOpWTxxp8brY4j4hZUoIiIiNtJzsyl/5g1PDM2nlplg5g2oC3dG1awOpY4qdiKoTx1fXXGr9rPX5sOWx1HxOWpQBEREbfyz87jdBm1kGnrDjKoY03GPNaCiqVKWB1LnFz/DjWoVTaIoRPXcSI9x+o4Ii5NBYqIiLiFHJuD92Zs5s6vluHlaTDhiZb061ADLx2El3zw8fJgRO9YkjJyeOWPDVbHEXFpelYWERGXt+NoGj0/W8Kn83fQu3FFpvVvS8NKJa2OJcVMTPlgBnSowZ/xB5i69qDVcURclibJi4iIyzJNk1+X7+ONKRvx8fLgs3sacXO9clbHkmLsieuqMXvjYV6avI5mVUoRHuRrdSQRl6MVFBERcUnH07J57MdVvDhpHY0qhzJzYDsVJ3LNvDw9+KB3A9Jz7LwwcR2maVodScTlqEARERGX8/fWo3QetZC/txzlpa61+fGh5pQN8bM6lriI6hFBDOkUzZxNh5m4OsHqOCIuR1u8RETEZWTl2nl3xma+XbybGhGBfP9gM2LKB1sdS1zQg62rMGvDYV77cwOtqodRLsTf6kgiLkMrKCIi4hI2H0rhto8X8+3i3TzQsjJ/9muj4kQKjaeHwfA76mOzmwyZsFZbvUQKkAoUEREp1hwOk28W7eLWjxdzPD2bb//TlNdvq4uft6fV0cTFVQ4L4MWutVm47Ri/LN9rdRwRl6EtXiIiUmwdScli0Ph4Fm47RodaEbzbqz6lA9VVSYrOvc0rMWvDId6auom21cOpFKahnyLXSisoIiJSLM3acIhOIxewYncib3Svy9cPNFFxIkXOMAze7VkfT8PguQnxOBza6iVyrVSgiIhIsZKRY+OFiet47MdVlA/1Z0q/NtzXojKGYVgdTdxU+VB/XukWw/JdiXy7ZLfVcUSKPW3xEhGRYmPt/iQGjlnDruPpPH5dVQZ1jMbHS5+1ifV6NY5k5oZDvDdjM9fVDKd6RKDVkUSKLT2ri4iI07M7TD6Zt53bP11CRo6dnx9pzgs311ZxIk7DMAzevr0e/j6eDBofj83usDqSSLGlZ3YREXFqCUmZ3PXVMobP3EKnOmWZMbAtraqVtjqWyHkigvx447a6xO9L4osFO62OI1Js5XuLl2EYnsBKIME0zVsKL5KIiEieP+IP8H+T1uFwmLx/RwN6Nqqgsybi1Lo1KM+MDYcYOWcrN9SKoHY5zeIRuVJXsoIyANhUWEFEREROSc3K5dmxa+j/axzVIwKZNqAtvRpHqjiRYuGN2+oS4u/Ds+PiybFpq5fIlcpXgWIYRiTQFfi6cOOIiIi7W7k7kZtHLWTymgQGdKjB+MdbUjkswOpYIvlWKsCHd26vx6aDKYyeu83qOCLFTn5XUEYCQ4CLfgxgGMZjhmGsNAxj5dGjRwsim4iIuJFcu4MRs7bQ+4ulGAaMf6Ilz3SsiZenjktK8dMxpgw9G0Xy6fwdxO9LsjqOSLFy2Wd9wzBuAY6YprnqUrczTfNL0zSbmKbZJDw8vMACioiI69t9LJ1eny/lo7nb6d6wAtP6t6Vx5VJWxxK5Jq90iyEiyJdB4+PJyrVbHUek2MjPx1KtgVsNw9gNjAFuMAzjp0JNJSIibsE0Tcat2EeXjxay62gaH9/dkBG9Ywny87Y6msg1C/H35t2e9dl+JI0PZm2xOo5IsXHZAsU0zRdM04w0TTMKuBOYa5rmvYWeTEREXNqJ9Bye+nk1Q35bS/3IEGYMbMct9ctbHUukQLWrGc49zSvx9aJdrNidaHUckWJBG3tFRKTILd5+jM6jFjBn02GG3lyLnx9pQflQf6tjiRSKF7vUJrKkP4PGxZOebbM6jojTu6ICxTTN+ZqBIiIiVyvbZuetqRu55+t/CPD1YtJTrXniump4eqh9sLiuAF8v3u/VgH0nMhg2fbPVcUScXr4HNYqIiFyLbYdT6T9mDZsOpnBP80q81DUGfx9Pq2OJFInmVcN4qHUV/rdoF53qlKVNjdJWRxJxWtriJSIihco0TX5YuptbRi/icEoWX9/fhLd61FNxIm5ncKdoqoYHMGRCPClZuVbHEXFaKlBERKTQHE3N5qHvVvDK7xtoUTWMGQPbcmNMGatjiVjCz9uTEb1jOZSSxRt/brQ6jojT0hYvEREpFHM3H2bw+LWkZtt4rVsMD7SKwjB01kTcW2zFUJ66vjofz9tO57pl6VBbBbvIubSCIiIiBSozx87Lk9fz0HcrCQ/y5c+n2/Cf1lVUnIic1L9DDWqVDWLoxHWcSM+xOo6I01GBIiIiBWbDgWS6fbyIH5ft4eE2VZjctzXRZYOsjiXiVHy8PBjRO5akjBxe+WOD1XFEnI4KFBERuWYOh8mXC3bQ/ZPFpGTm8uPDzXj5lhj8vHUQXuRCYsoHM6BDDf6MP8CUtQesjiPiVHQGRURErsnB5EwGjYtnyY7jdKpThndur0+pAB+rY4k4vSeuq8bsjYd5efJ6mlcJIzzI1+pIIk5BKygiInLVpq07SOeRC4nbm8Sw2+vx+b2NVZyI5JOXpwcf9G5Aeo6dFyauwzRNqyOJOAUVKCIicsXSsm0MHh/PUz+vpnJYCab2b8OdzSrpILzIFaoeEcSQTtHM2XSYiasTrI4j4hS0xUtERK7I6r0neGbsGvYmZvB0++oMuLEG3p76vEvkaj3YugqzNhzmtT830Kp6GOVC/K2OJGIpvaKIiEi+2OwORs3Zxh2fL8VmNxn7WEue6xSt4kTkGnl6GAy/oz42u8mQCWu11Uvcnl5VRETksvYez6DPl8v4cM5WbqlfjmkD2tKsSimrY4m4jMphAbzYtTYLtx3jl+V7rY4jYilt8RIRkYsyTZOJqxN49Y8NGMCoO2O5LbaC1bFEXNK9zSsxa8Mh3pq6ibbVw6kUVsLqSCKW0AqKiIhcUHJGLv1+jWPQ+Hhqlwti2oC2Kk5ECpFhGLzbsz6ehsFzE+JxOLTVS9yTChQRETnP0h3HuXnUAmasP8TgTtGMeawlFUvp01yRwlY+1J9XusWwfFci3y7ZbXUcEUtoi5eIiJyWY3Pw4ZytfP73DqLCAvjtyVY0qBhqdSwRt9KrcSQzNxzivRmbua5mONUjAq2OJFKktIIiIiIA7Diaxu2fLeaz+Tvo06QiU/q1UXEiYgHDMHj79nr4+3gyaHw8NrvD6kgiRUoFioiImzNNk5//2UPXjxay/0Qmn9/bmGE96xPgq0V2EatEBPnxxm11id+XxBcLdlodR6RI6dVHRMSNHU/L5vnf1jFn02HaVC/NB70bUCbYz+pYIgJ0a1CeGRsOMXLOVm6oFUHtcsFWRxIpElpBERFxU/O3HKHzqIUs2HqUl7rW5oeHmqk4EXEyb9xWlxB/H54dF0+OTVu9xD2oQBERcTNZuXZe+2MD//l2BSVLeDO5b2seaVsVDw/D6mgico5SAT68c3s9Nh1MYfTcbVbHESkS2uIlIuJGNh9KYcCva9hyOJX/tIpi6M218PP2tDqWiFxCx5gy9GwUyafzd3Bj7TJqXiEuTysoIiJuwOEw+d+iXdw6ejHH03P49sGmvHZrHRUnIsXEK91iiAjyZdD4eLJy7VbHESlUKlBERFzc4ZQsHvh2OW9M2Ui7mqWZMbAt7aMjrI4lIlcgxN+bd3vWZ/uRND6YtcXqOCKFSlu8RERc2MwNhxj621oyc+282b0u9zSvhGHorIlIcdSuZjj3NK/E14t20TGmLM2qlLI6kkih0AqKiIgLysix8cLEtTz+4yrKh/ozpV9b7m1RWcWJSDH3YpfaRJb057nx8aRn26yOI1IoVKCIiLiY+H1JdP1oEWNW7OPx66oy6anWVI8ItDqWiBSAAF8v3u/VgH0nMhg2fbPVcUQKhQoUEREXYXeYfDJvOz0/W0JWrp2fH2nOCzfXxsdLT/UirqR51TAebl2FH5ftYdG2Y1bHESlwetUSEXEB+09kcNeXyxg+cwud6pZlxoB2tKpW2upYIlJInusUTbXwAIZMiCclK9fqOCIFSgWKiEgx9/uaBG4etZANB5L54I4GfHxXQ0JKeFsdS0QKkZ+3Jx/0juVQShZv/LnR6jgiBUoFiohIMZWSlcvAMXEMGLOGGhGBTB/Qjp6NI3UQXsRNxFYM5anrqzN+1X7mbDxsdRyRAqM2wyIixdCK3YkMHLOGQylZDLyxBk+3r46Xpz5zEnE3/TvUYM6mwwyduI7ZlUtSMsDH6kgi10yvZiIixUiu3cEHs7bQ54uleHoYjHu8JQNvrKniRMRN+Xh5MKJ3LMmZObzyxwar44gUCL2iiYgUE7uOpdPr86WMnrud2xtFMm1AWxpXLml1LBGxWEz5YAZ0qMGf8QeYsvaA1XFErpm2eImIODnTNBm3ch+v/7kRLw+DT+5uRNf65ayOJSJO5InrqjF742Fenrye5lXCCA/ytTqSyFXTCoqIiBM7kZ7Dkz+t5vnf1lE/MoQZA9upOBGR83h5evBB7wak59h5YeI6TNO0OpLIVVOBIiLipBZtO0bnUQv4a/NhXri5Fr880oLyof5WxxIRJ1U9IoghnaKZs+kwE1cnWB1H5KqpQBERcTLZNjtvTd3Ivf/7hwBfLyY91ZrHr6uGh4faB+fXvn37aN++PTExMdSpU4dRo0ZZHUmkSDzYugrNokrx2p8bOJCUaXUckauiAkVExIlsPZxK90+W8NXCXdzbohJT+7WlboUQq2MVO15eXnzwwQds3LiRZcuW8cknn7Bxo4bZievz9DAYfkd9bHaT539bq61eUiypQBERcQKmafL9kt10G72IIylZfH1/E97sXg9/H0+roxVL5cqVo1GjRgAEBQVRu3ZtEhK05UXcQ+WwAF7sWpuF247xy/K9VscRuWLq4iUiYrGjqdkMmRDPvC1Hua5mOMPvqE9EkJ/VsVzG7t27iYuLo3nz5lZHESky9zavxKwNh3hr6ibaVg+nUlgJqyOJ5JtWUERELPTXpsN0HrmAxTuO8/qtdfjuwaYqTgpQWloaPXv2ZOTIkQQHB1sdR6TIGIbBuz3r42kYPDchHodDW72k+FCBIiJigcwcOy9NXsfD368kPMiXKf3a8ECrKAxDB+ELSm5uLj179uSee+7h9ttvtzqOSJErH+rPK91iWL4rkW+X7LY6jki+aYuXiEgRW5+QzIAxcew4ms4jbaowuHM0vl46a1KQTNPk4Ycfpnbt2jz77LNWxxGxTK/GkczccIj3ZmzmuprhVI8ItDqSyGVpBUVEpIg4HCaf/72DHp8uJi3bxk8PN+elW2JUnBSCxYsX8+OPPzJ37lxiY2OJjY1l2rRpVscSKXKGYfD27XkNNwaNj8dmd1gdSeSytIIiIlIEDiRlMmhcPEt3HqdznbK8c3s9Sgb4WB3LZbVp00btVUVOigjy443b6tLv1zi+WLCTvu2rWx1J5JJUoIiIFLKpaw/ywsS12Bwm7/Wszx1NInXWRESKVLcG5Zmx4RAj52zlhloR1C6nphHivLTFS0SkkKRl2xg0Lp6+v6ymSnggU/u3pXfTiipORMQSb9xWlxB/H54dF0+OTVu9xHmpQBERKQSr9pygy6iFTIrbT78bqjPhiZZUKR1gdSyXNjkugdbD5lJl6FRaD5vL5DgNZhQ5U6kAH965vR6bDqYweu42q+OIXJS2eImIFCCb3cHH87Yzeu52ygb7MfbxljSNKmV1LJc3OS6Bob+tJevkp8IJSZm8MHEdAN0bVrAymohT6RhThp6NIvl0/g5urF2GBhVDrY4kch4VKCIiBWTv8QwGjo1j9d4kuseW57/d6xLs5211LKfncJik5dhIy7KRmmUjLTv35J8nL2fZSM22kZqVS9oZ16dm20jLyrvt0dRszj0Sn5lr580pG+lUpyz+PuqUJnLKK91iWLLjGIPGxzOlXxv8vPXvQ5yLURhdTpo0aWKuXLmywB9XRMQZmabJxNUJvPrHBgzgzR51uS3W9T+1dzhMMnLtpwuH1DMKilNFxqlCI+/75xceadl5/12OYUCgjxeBfl4E+noR5OdFoJ83QSe/HrNi30Xv6+VhUKdCCE0ql6RpVEkaVy5FeJBvQf6vECl2Fmw9yv3fLOfRtlX4v64xVscRN2UYxirTNJuce71WUERErkFyRi4vTl7H1LUHaRZVihF9GhBZsoTVsS7JNE0ycuz/rkRk5f5bRJxemfj3+nMvn17pyLGRn8+4Anw8CfLzPqu4KBfiR6CvF4G+3gT5nSw4fL3Oul2w378FSYCPFx4eF28usHDbMRKSMs+7PizAhz5NK7Jy9wl+XLaH/y3aBUBUWAkaVy5F06iSNIkqSbXwQDUvELfSrmY49zSvxNeLdtExpizNqmgrqjgPraCIiFylpTuO8+y4NRxNzeaZjjV54rpqeF7iTfS1Mk2TrFzHvysRp1cjzlmZuEjhceq2adk2HPl46i/h45lXRPjlFQ5Bvl5nXPbKu3zye6euD/bLKzpO3SbAx6tQ/5+cMjkugRcmriMz1376On9vT965vd7pMyjZNjvrE1JYuTuRlXtOsHJ3IicycgEoWcKbxpVL0iQqr2ipWyFEAzTF5aVn2+g8agEGBtMHtCXAV59bS9G62AqKChQRkSuUY3MwYvZWvliwg6iwAEb2ib3kQVPTNMm2Oc4uEi6yUnG5wsOej8rCz9uDQF/vs1YggvzOX634d6Xi7NWNIF9vAnw98fIsXo0eJ8clMHzmFg4kZVI+1J/BnaIveUDeNE12HkvPK1h2n2DlnhPsOpYOgI+XBw0iQ06vsjSuXJLQEhqsKa7nn53HufOrZdzbvDJvdK9rdRxxM1ddoBiG4QcsAHzJ2xI2wTTNVy91HxUoIuIqsm32s1Yg1uxL4qXJ609/v2/7atgdkJade/4Wqex/D3Xn2i9fWPh6eZxVPASdWok4febiIluifM8uOryLWWHhTI6mZrNqzwlW7Ulkxe4TrE9IxnayKKwREUiTqJI0qVyKJlElqVSqhLaFiUt4c8pGvl60ix8fbkbbGuFWxxE3ci0FigEEmKaZZhiGN7AIGGCa5rKL3UcFiohYLcfmOP9w9pkrE+dtfTq7e9Sp7+XYLz/MzNvTyNsCdapIOFk4nFVsnLklytf7vNWLAF9PbSlyQpk5duL3J53eFrZqzwlSs/IO9YcH+dLkjG1htcsFqziUYikr107XjxaSkWNn5jPt1H1QisxVH5I38yqYtJMXvU/+V/D7wkREyJsj8u8ZilNdns7uCHXhrlFnbJXKspGdjynJXh7GeSsTZYP9ThcUp67LsTkY9de20/f54r7GVAsPPH07FRauy9/HkxZVw2hRNQzI61y29UgqK3afYNXuvFWW6esP5d3W25OGlUJPFy0NK4USpDd6Ugz4eXvyQe9Ybv90MW/8uZHhdzSwOpK4uXydQTEMwxNYBVQHPjFN8/kL3OYx4DGASpUqNd6zZ08BRy04WVlZtGvXjuzsbGw2G7169eL111+3OpZIsWZ3mP9uazpnfsVZ5yzOmHVxoTkXWbmXLyw8PYwzVirO7wAVdNaWJ+8LHujOKyw8LrtFZ96WIwwev5aUzFyev7kWD7aKumQ3KXE/B5MzWbk7b3Vlxe5ENh1MwWGChwG1ygbnbQuLKkWTyiUpH+pvdVyRi3p/5hY+nredr+9vwo0xZayOI26gQA7JG4YRCkwC+pmmuf5it3P2LV6maZKenk5gYCC5ubm0adOGUaNG0aJFC6ujiRQ5u8Mk/QJD8s6eX3HpIXlp2TYycuyX/VkeBuefmzjzcPapblBnFR7ep28XdPK+ft6XLyyuVVaunWHTN/Pdkt1Elwli5J2x1C4XXKg/U1xDWraNuL0n8lZZ9iQStzfp9L+PCqH+ND5jHkt02aAi6XImkh85Nge3fryIY2k5zH6mHSUD1BhCCleBzEExTTPJMIx5QGfgogWKszMMg8DAQAByc3PJzc3VQUcpdq5kSN6ZqxfXOiTv1MpEiL83kSX9T7eePXP1IvCsVY1/C48SPp7F4t/axgMpDBwbx9bDaTzYOornO9fSpGXJt0BfL9rWCD992Nhmd7DpYCordieyas8Jlu08zh/xBwAI8vWiUeWSp7eFxVYM1dR7sYyPlwcjesdy2yeLeOWPDYy+q6HVkcRNXbZAMQwjHMg9WZz4Ax2Bdws9WSGz2+00btyY7du307dvX5o3b251JHETZw/JO/9Q9sVbz569JSq/Q/JOrUhcaEjemSsZp1Yrzj3QnZ8hea7C4TD5ZvEu3puxhZAS3nz/UDOuq6mONnJtvDw9qBcZQr3IEB5qUwXTNNl/IpMVZ8xj+WD20bzbauq9WCymfDADOtTg/Vlb6VSnDLfUL291JHFD+eniVR/4HvAEPIBxpmn+91L3cfYtXmdKSkqiR48ejB49mrp11f9bLu70kLzzOkAV7pC8vO1N3uecq/h3u9PZW6TO3hJVVEPyXMHhlCwGjYtn0fZj3Fi7DO/2rEdYoN4YStFIyshh9d4TefNYdp9gzf4kck42ejh76n0pqoUHFIuVSCm+bHYHPT9bwt7EDGY+046IID+rI4mL0qDGS/jvf/9LiRIleO6556yOIoXgUkPyzl2ZOFV4XOuQvNNTt88cineBIXkXul1xHZJXnM1Yf4ihE9eSlWvn5VtiuLtZJb0BFEtdfup93iwWTb2XwrL9SCpdPlpEuxrhfHV/Yz0nSqEokDMoruLo0aN4e3sTGhpKZmYms2fP5vnnz2tMJk7g3CF5Z61MnNMR6ryuUdcwJO/U1qeKpUpctAPU6S1RZ1wO8NWQvOIkPdvGG1M2MmbFPupWCGZkn4ZUjwi0OpYIvl6eNK6cN8H+cS489X7OpsOApt5L4ageEcSQTtG8OXUTE1cn0LNxpNWRxI245QrK2rVreeCBB7Db7TgcDnr37s0rr7xidSyXcuaQvJQztjpdakjeuYVHWj6H5Pl4epzXDer0NqczOkUFnVF4/HvO4t8tUj5eKizcSfy+JAaMiWNPYgZPXFeNZ26sqd8BKVbyO/W+aVQpKpby1yfgcsXsDpO7vlzGpkMpzBzYTm2ypcBpi5fkS67dQfo5Q/LO7wBV8EPyThUKQWcUFOdtiTpnOvep22lrg1wJu8Pks/nbGTlnGxFBvnzQO5aW1cKsjiVyzS439f7UoXtNvZcrsed4Op1HLqRJVEl+eKiZCl0pUCpQXNylhuSdN7+iAIbknV00XGhl4kKD884+0J2fIXkiBWn/iQyeHRvP8t2J3FK/HG91r0dICU36Ftd0oan3CUmZgKbey5X5cdkeXp68nrd61OWe5pWtjiMuRAWKk8rXkLwLbYm6xiF5Zx7UvuDKxEULj6IZkidS0H5fk8BLk9ZjAv+9rQ49GlbQ77G4nfxOvW8aVZJyIdrOI3lM0+T+b5azas8JZgxoR6WwElZHEhehAgWYHJfA8JlbOJCUSflQfwZ3iqZ7wwpX9ViOU4XFWZO2Lz8k79zCIz0fhcWpIXlnn7M4Z0vUBbdInV14FJcheSIFKSUrl5cnr+f3NQdoXLkkI/vEUrGUXlxF4PJT7/POseQVLTXLaOq9OzuQlEmnDxdQu1wwYx5r4RazsaTwuX2BMjkugRcmriMz99+CwNfLgyevr0bjyiXP7wBVCEPyzlqZ8L30/Iozu0aV8PbUE4HIVVi+K5Fnxq7hUEoW/W+oQd/21dS+WeQSzp16v2J3IkdSswFNvRcYv3Ifgyes5aWutXmkbVWr44gLcPsCpfWwuaf33uZHCR/PM7ZBXWBI3oXmV5yzJSrQTaZvizibXLuDUXO28en87USWLMHIO2NpVKmk1bFEip0LTb3fejgN0NR7d2SaJo/+sJKF244xtX9btWWXa+b2BUqVoVO52N90whMtz9oSFeCjIXkixdWuY+kMHBNH/P5kejWO5LVb6xDo65Yjn0QKxeWm3jeJKnV6lUVT713PkdQsbvpwAZXDAvjtiZZ6vyTXxO0HNZYP9b/gCoqHARsOpHBXs0qagSBSjJmmybiV+3j9z414e3rwyd2N6Fq/nNWxRFxOaAkfbqhVhhtqlQHOn3r/16bDTFi1H9DUe1cUEeTHG7fVpd+vcXyxYCd921e3OpK4ILdZQbngGRRPDyqGlWD7kTQqlSrBc52iuaVeOW3LEilmTqTnMHTiWmZuOEzLqmGM6NNAHYhELHKhqfe7jqUDmnrvSvr+sppZGw7xx9NtqF0u2Oo4Uky5/RYvuHAXr9tiy/P31qMMm76ZzYdSqVshmKGda9OmRmmr44pIPizcdpRB4+I5kZHDczdF82jbqvqQQcTJaOq960lMz+GmDxcQHuTL731baxeKXBUVKJfhcJj8Hp/A+zO3kpCUSdsapXm+cy3qVgixOpqIXEBWrp3hM7fwv0W7qB4RyMg+sfr3KlJMXMnU+5hywTrn4KRmbzzMoz+spN8N1Rl0U7TVcaQYUoGST9k2Oz8t28vHc7dxIiOXbg3K89xNNakcFmB1NBE5aevhVPr/GsfmQ6nc16IyL3aprXanIsWYpt4XX4PGxTN5TQITn2xFg4qhVseRYkYFyhVKycrly7938vWindjsJvc0r0S/DjUoHagWiiJWMU2T75fs5u3pmwny9eK9XvXpULuM1bFEpBBcbup906iSNNbUe8slZ+bSeeQCAny9mNKvDX7e+rBI8k8FylU6nJLFqL+2MXbFPvy8PHi0XVUeaVtVbUtFitiR1CwGj1/L31uP0j46nPd6NdDMBRE3oqn3zmvB1qPc/81yHm1bhf/rGmN1HClGVKBcox1H03h/5hamrz9E6UAf+neowZ1N1ZpYpCjM2XiYIb+tJT3bxv91rc19LSrrEK2Im9PUe+fyf5PW8cvyvYx9rCXNqpSyOo4UEypQCsjqvScYNn0zy3clUjmsBM/dFE1XtSYWKRSZOXbenLqRn//ZS+1ywXx0Zyw1ygRZHUtEnFB+pt43rVySJpp6XyjSs210HrUAA4PpA9oSoJ0mkg8qUAqQaZrM33KUd2fktSauVyGEoTfXonV1tSYWKSjrE5LpPyaOnUfTeaxdVQbdVFMD3kTkipyaep93+F5T7wvbPzuPc+dXy7i3eWXe6F7X6jhSDKhAKQR2h8nkuARGzFZrYpGCYneYfLVwJx/M2kKpAB8+uCNWc4lEpECcO/V+5e5ETmTkApp6X1DenLKRrxft4seHm9G2RrjVccTJqUApRFm5dn5atoeP520nKSOX22LLM6hjNJXCSlgdTaRYOZCUybPj1rBsZyI31y3L2z3qUTJAU6ZFpHDkZ+r9qVUWTb3Pn6xcO10/WkhGjp2Zz7QjWC2h5RJUoBSB5Mxcvvh7B98s3oXdYXJP88r0u6E6YWpNLHJZU9Ye4MWJ67A5TF7rVoc7mkRqu4WIFLnLT73PK1g09f7i1uxL4vZPF9OzUSTD72hgdRxxYipQitCh5CxG/bWVsSv2UcLHi8faVeXhNlV0YEzkAlKzcnntj438tno/DSqGMqpPLFGlNRhVRJyDpt5fnfdnbuHjedv5+v4m3BijeVVyYSpQLLD9SF5r4hkbDlE60JcBN9bgzqYV8daTlwgAq/acYODYOBJOZPJ0++r061BD/z5ExKnla+r9yVUWd556n2NzcOvHiziWlsPsZ9ppu65ckAoUC63ee4Jh0zazfHciUWElGNypFl3qldWysLgtm93B6Lnb+XjedsqF+PFhn1iaRqlvvogUT5p6f2EbD6Rw2yeL6FSnLB/f3cjqOOKEVKBYzDRN5m05wrvTt7DlcCoNIkN4/uZatKqm7kTiXvYez2Dg2DhW702iR8MKvH5bHR2iFBGXoqn3//p47jben7WVj+9uyC31y1sdR5yMChQnYXeYTIpLYMSsLRxIzuK6muE837kWMeWDrY4mUqhM0+S31Qm8+vt6PDwM3uxel9tiK1gdS0Sk0Lnz1Hub3UHPz5awNzGDmc+0IyLIz+pI4kRUoDiZrFw7Py7Na02ckpVL99gKPNuxJhVLqTWxuJ6kjBz+b9J6pq47SLMqpRjRuwGRJfW7LiLuyd2m3m8/kkqXjxbRrkY4X93fWFvc5TQVKE4qOTOXz//ewTeLdmGacG+Lyjx9Q3VK6TCZuIglO47x7Nh4jqVl8+xNNXm8XTWX3s4gInI1XH3q/dcLd/Lm1E18cEcDejaOtDqOOAkVKE7uUHIWI+dsZdzKvNbET1xXlYfaVKGEj1oTS/GUY3PwwawtfLlwJ1XCAhh5Zyz1I0OtjiUiUizkZ+p906i8VZbiMPXe7jC568tlbDqUwsyB7SgfeulmAQ899BBTpkwhIiKC9evXF1FKKWoqUIqJ7UdSeW/GFmZtPEx4kC8Db6xB7yZqTSzFy/YjqQwYs4YNB1K4q1klXr6ltoptEZFr4ApT7/ccT6fzyIU0iSrJDw81u+Qq0IIFCwgMDOT+++9XgeLCVKAUM6v2JDJs+mZW7D5B1dIBPNcpmpvrqjWxODfTNPnpn728NXUj/t6evNuzPjfVKWt1LBERl1Qcp97/uGwPL09ez5vd63Jvi8qXvO3u3bu55ZZbVKC4MBUoxZBpmvy16QjvztjMtiNpNKgYytDOtWhZLczqaCLnOZaWzfMT1vLX5iO0rVGaD+5oQESwurWIiBSVS029jwjyPdneuBRNLJx6b5om93+znFV7TjBjQDsqhV28YYoKFNenAqUYsztMflu9nw9nb+VgchbXR+e1Jq5dTq2JxTnM23KEwePjScmyMbRzLf7TKgoPHYQXEbHUpabel/DxJLaiNVPvDyRl0unDBdQuF8yYx1pc9PVCBYrrU4HiArJy7fywdDefzNtBSlYuPWIr8IxaE4uFsnLtvDNtE98v3UN0mSBG3RVLrbIqnEVEnJWzTL0fv3Ifgyes5aWutXmkbdUL3kYFiutTgeJCkjNy+ezvHXy7OK818X0tK9O3vVoTS9HaeCCFAWPi2HYkjQdbR/F851r4eTt3FxkRETlbvqben1xlKcip96Zp8ugPK1m47RhT+7elekTgebdRgeL6VKC4oIPJmYycvY3xq/YR4OPFE9dX48HWUeqWJIXK4TD5ZvEu3puxhZAS3rx/RwOuqxludSwRESkAl5x67+dFo0ol81ZZKl/71PsjqVnc9OECKocF8NsTLc86E3PXXXcxf/58jh07RpkyZXj99dd5+OGHr/nvJ85FBYoL23Y4lfdmbmH2xsNEBPky8Maa9G4SacnhN3Fth5KzeG58PIu2H6NjTBmG3V6PsMDiPeFYREQurrCn3k9Ze4Cnf4ljcKdo+ravXhh/BXFiKlDcwMrdibwzfTOr9uS1Jh7SOZpOddSaWArGjPUHGTpxHdm5Dl6+JYa7mlXU75aIiBvKz9T7U6ss+Zl63/eX1czacIjf+7YhprzOMboTFShuwjRN5pxsTbz9SBqxFUMZenMtWlRVa2K5OunZNv7750bGrtxHvQohjLwzlmrh5+8VFhER93SpqfelAnxObwu72NT7xPQcbvpwAeFBvvzetzU+XtoB4i5UoLgZm93BxNUJjJi9lUMpWbSPDmeIWhPLFVqzL4mBY+LYk5jBk9dVY+CNNfXCISIil3Q1U+/fnLKRrxftAvIO5w/uFE33hhWs/GtIEVCB4qaycu18t2Q3n87bTmq2jR4NK/Bsx5pEllRrYrk4u8Pks/nb+XDONsoE+TKiT6xW4URE5Kpdaup92WA/jqZlY3f8+57U39uTd26vpyLFxalAcXNJGTl8Nn8H3y7ZDSbcf7I1cUm1JpZz7EvM4Nlxa1ix+wS31C/HW93rEVKiaIZ3iYiIezhz6v3oudvJPnmG5UwVQv1ZPPQGC9JJUVGBIkDe9NYPZ2/lt9X7T7cmfqh1lWtqEyiuY3JcAi9PXo8J/Pe2OvRoWEEH4UVEpFBVGTqVC70bNYBdw7oWdRwpQhcrULSZ3M2UD/Vn+B0NmD6gHc2rlmL4zC1c//48fl2+F5v9/E8vxD0kZ+bS/9c4Bo5dQ3TZIKYPaMvtjSJVnIiISKErH3rhifVhgdrl4a5UoLip6LJBfP1AU8Y93pIKof68MHEdN41cwIz1hyiMVTVxXv/sPE6XUQuZuu4gz3asyZjHWlCxlM4oiYhI0RjcKRp/7/N3chxLyyE922ZBIrGaChQ316xKKX57shVf3NcYA3jip1Xc/tkSlu9KtDqaFLJcu4PhMzdz51fL8PI0mPBES/p3qKEBnyIiUqS6N6zAO7fXo0KoPwZQPsTv9PeeGbvGslxiHZ1BkdNsdgcTVu3nwzlbOZySTYdaEQzpXIvoskFWR5MCtvNoGgPHrmHt/mR6N4nklW51CPT1sjqWiIgIALuOpdP+/fkA/PhwM9rWCLc2kBQKHZKXfMvMsfPtkl18Nn8Hadk2ejaK5JmONalwkT2iUnyYpsmYFfv4758b8fHyYNjt9bi5XjmrY4mIiJznywU7eHvaZgDWvnYTwX7qKOlqVKDIFTuRnsOn87fz/ZI9YMB/WkXx1PXVCC2hQ2vFUWJ6DkN/W8usjYdpVS2MD3o3oFyIik4REXFODodJ/ddnkZZto3mVUox9vKXVkaSAqUCRq7b/RAYfzt7GxLj9BPp68dT11XmwdRR+FzjQJs5pwdajPDc+nhMZOQzpVIuH21TBw0MdukRExLkdSMqk1bC5AHx5X2NuqlPW4kRSkFSgyDXbfCiF92ZsYe7mI5QN9uOZjjXo2ShSh6qdWFaunfdmbOGbxbuoHhHIqDtjqVM+xOpYIiIi+fbr8r28MHEdAHEvd9SQaReiOShyzWqVDeab/zRl7GMtKBfqx/O/raPzqIXM2qDWxM5oy6FUun+ymG8W7+L+lpX58+k2Kk5ERKTYubNpRSqWytuSfNdXyyxOI0VBBYpcseZVw5j4ZCs+v7cxDtPksR9X0evzpazYrdbEzsA0Tb5dvItuHy/iWFo23/ynCf+9rS7+PtqSJyIixY9hGEx8sjUAmw+l8vuaBIsTSWHTFi+5Jja7g/Gr9vPh7K0cSc3mxtplGNI5mppl1JrYCkdSsxg8fi1/bz1K++hw3uvVgPAgX6tjiYiIXLMpaw/w9C9xACz/vw5EBPld5h7i7HQGRQpVZo6dbxbv4vP5O0jPsdGrcSQDb6xJebUmLjKzNx7m+d/Wkp5t46Wutbm3RWUMQwfhRUTEdXQbvYh1CcmUDfZj6Qs36HWumLvqMyiGYVQ0DGOeYRgbDcPYYBjGgMKJKMWZv48nfdtXZ8GQ9jzUugqT4w7Q/v35vDN9E8kZuVbHc2kZOTZenLSOR39YSdlgP6b0a8N9LaP0pC0iIi7np4ebA3AoJYtflu+1OI0UlsuuoBiGUQ4oZ5rmasMwgoBVQHfTNDde7D5aQZH9JzIYMXsrk+ISCPL1om/76jzQSq2JC9q6/ckMGBvHzqPpPNauKoNuqomvl/4fi4iI65q35QgPfrsCgCVDb9BujWLsqldQTNM8aJrm6pNfpwKbgAoFH1FcSWTJEozoHcu0/m1pXLkk70zfTPv35zNuxT7sDnX8ulZ2h8ln83fQ49PFZGTb+fmR5rzYpbaKExERcXntoyNoW6N03tfvz1cnURd0RWdQDMOIAhYAdU3TTDnne48BjwFUqlSp8Z49ewowphR3S3ccZ9iMzcTvS6JGRCBDOtfixtoR2oZ0FRKSMnl27Br+2ZVIl3plebtHPUJLqCe8iIi4j/RsG3VenQnAi11q8Vi7ahYnkqtxzYfkDcMIBP4G3jJNc+KlbqstXnIhpmkyY/0hhs/cws5j6TSpXJKhN9eiSVQpq6MVG3/GH+DFSetwOExeu7UOvRpHqsgTERG3tHxXIr2/WArAgsHtqRRWwuJEcqWuqUAxDMMbmALMNE1zxOVurwJFLiXX7mD8yv18OGcrR1Oz6RhThiGdoqmh1sQXlZqVy6u/b2BiXAKxFUMZdWcslcMCrI4lIiJiqad/Wc2UtQcB2Pl2Fzw89KFdcXLVBYqR9/Hs90CiaZoD8/PDVKBIfmTk2Ph28e7TrYnvaFyRgR1rUC5Eh93OtGpPIgPHriHhRCZP31CDfjdUx9tTM1ZFRESycu3UenkGAP1vqM6zN0VbnEiuxLUUKG2AhcA6wHHy6hdN05x2sfuoQJErkZiewyfztvPj0j0YBjzYugpPXleNkBLeVkezlM3u4KO52/l47jbKh/ozsk+stsOJiIicY31CMreMXgTAnGevo3pEoMWJJL80qFGc3r7EDD6cvZVJaxII9vOmb/tq3N/SPVsT7zmezoAxa1izL4nbG1Xg9VvrEOTn3gWbiIjIxbw0eR0/Lcubi7L9rZvx0k6DYuGq2wyLFJWKpUowok8sU/u1pWGlUN6etpkb3p/P+JXu05rYNE3Gr9xHl1EL2XE0jdF3NWRE71gVJyIiIpfwarc6p79+c+omC5NIQdAKijitJTuO8e70zcTvT6ZmmUCe71yLG2q5bmvipIwcXpy0jmnrDtG8SilG9ImlgoZPiYiI5Mv2I6ncOGIBANP6tyWmfLDFieRytIIixU6raqWZ3Lc1n97TiFy7ycPfr6TPF8tYteeE1dEK3JLtx+g8ciGzNhxmSOdofnm0hYoTERGRK1A9Ioi+7fPmoXT5aCE5Nsdl7iHOSgWKODXDMOhSrxyznmnHm93rsvNYOj0/W8LjP65k+5E0q+Nds2ybnXembeKe//1DCR9PJj3Vmqeur46n2iSKiIhcsUEd/+3iNXTiWguTyLXQFi8pVtKzbXyzaBdfLNhJRo6NPk0rMqBDTcqG+Fkd7YptP5JK/1/XsPFgCnc3r8RLXWtTwsfL6lgiIiLF2r7EDNq+Nw+ASU+1omGlkhYnkotRFy9xKcfTsvl43nZ+WrYHTw+Dh1pX4fHrqhHi7/yHyU3T5Kdle3hz6iYCfL0Ydns9bqpT1upYIiIiLuPLBTt4e9pmADa/0dktO4IWBypQxCXtS8zgg1lbmLzmAKElvHm6fXXubVHZaZ+IjqVlM2TCWuZuPkK7muG836s+EcHFb/VHRETEmZmmSY3/m47NYXJj7Qi+fqCp1ZHkAlSgiEtbn5DMezO3sGDrUSqE+vNsx5p0b1jBqc5yzNt8hMET4knJsvHCzbV4oGUUHk6UT0RExJUcTsmi+dt/AfDroy1oWS3M4kRyLnXxEpdWt0IIPzzUjJ8faU6pAB8GjY+n60cLmbf5CIVRhF+JrFw7r/y+nge/W0HpQF/+eLo1D7auouJERESkEJUJ9uPdnvUAuOurZaRn2yxOJPmlAkVcSuvqpfm9b2s+vrshmbl2HvxuBX2+XMbqvda0Jt5wIJluoxfxw9I9PNS6CpP7tqZWWfVlFxERKQp9mlYiPMgXgAe+WW5xGskvFSjicjw8DG6pX545z17HG7fVYefRNG7/dAlP/LiKHUeLpjWxw2Hy1YKd9PhkCUmZufzwUDNe6RbjtGdjREREXNXMge0AWLnnBHM3H7Y4jeSHzqCIy0vPtvH1wl18uWAHWTYHvZtUZOCNNShTSIfTDyVnMWj8GhZvP85NMWUY1rM+pQJ8CuVniYiIyOVNXXuQvr+sBmDtazcR7Of8XT/dgQ7Ji9s7lpbNx3O38/M/ea2JH26T15q4IJ+kpq87yNCJ68ixOXi1Wwx9mlbEMHTWRERExGqdPlzAlsOpVAsP4K9B11sdR9AheRFKB/ry2q11mPPsddwUU5ZP5u2g3Xvz+HrhTrJt9mt67PRsG0MmxPPkz6upHFaCqf3bcGezSipOREREnMSEJ1sCsONoOn/GH7A4jVyKVlDEba1PSObdGZtZuO0YFUL9GXRTTW6LvfLWxHF7TzBw7Br2Jmbw1PXVGHhjTbw9VfuLiIg4mwVbj3L/ycPycS93pKS2YFtKKygi56hbIYQfH27OTw83p2SAN8+OO9maeEv+WhPb7A4++msbvT5fis1uMubRFgzuVEvFiYiIiJNqVzOcllXz5qF0GPG3xWnkYvROStxemxql+aNvG0bfdbI18bcruOurZazZl3TR++xLzODOL5cxYvZWutYrx7QBbWleVQOgREREnN23D+ZNlU9Mz+HX5XstTiMXoi1eImfIsTkYs2IvH/21jWNpOXSpV5bnboqmanggAKZpMnlNAi9P3oABvNG9Lt0bVrA2tIiIiFyRVXsS6fnZUgCW/18HIoIKp7OnXJq6eIlcgbRsG18v3MlXC3aSZXNwZ9OKPNg6ilF/befP+AM0qVySD/vEUrFUCaujioiIyFV48qdVTF9/CIBd73RRYxsLqEARuQpHU7P5eO42vl+65/R1j7eryuBO0XjprImIiEixlWNzUPOl6QD8X5faPNquqsWJ3I8OyYtchRB/bwJ8vc66btzKfXy/dM81tyYWERER6/h4eTCtf1sA3pq2iQNJmRYnklNUoIhcxI6jafT8bAmfzt9BnyYV2fB6J/58ug11yofwxpSNdPjgbybF7cfhKPhVSBERESl8MeWDuatZJQBaDZubry6eUvhUoIicwzRNfl2+l1s+WsTexAw+u6cR7/aqT4CvF/UiQ/jpkeb8+HAzQvy9eWZsPF1HL2J+PlsTi4iIiHN5s3vd01+PmL3VwiRyis6giJwhMT2H539by+yNh2ldPYwP7oilbMiFO3s4HCZT1h3k/Zlb2JuYQcuqYQy9uRYNKoYWbWgRERG5JruOpdP+/fkA/D34eiqHBVgbyE3okLzIZSzYepRB4+NJzshlcKdoHm5TBY98TJXPsTn4dXlea+Lj6Tl0rVeO5zpFU6W0ntxERESKi3dnbOaz+TsA2Pl2l3y9B5Bro0PyIheRlWvnv39u5P5vlhPi782kvq14tF3VfD8x+Xh58ECrKP4e0p4BHWowb8sROo74m5cmr+NIalYhpxcREZGCMPim6NNfv/bnBguTiFZQxK1tPpTCwDFr2HwolQdaVuaFLrXx8/a8psc8mprN6Lnb+OWfvXh7evBo2yo82q4qQX7eBZRaRERECsOBpExaDZsLwKxn2lGzTJDFiVybtniJnMHhMPluyW6GzdhMsJ8Xw3s1oH2tiAL9GbuPpfP+rC1MWXuQUgE+9LuhOnc3r4Sv17UVQCIiIlJ4Pv97B8OmbwZg+1s3a+5ZIdIWL5GTjqRk8cC3y/nvlI20rV6aGQPbFXhxAhBVOoCP727EH0+3plbZIF7/cyM3jvib39ckqDWxiIiIk3r8jIGNg8bHW5jEfalAEbcya8MhOo1cwIrdibzRvS5fP9CE0oG+hfoz60eG8vMjzfnhoWYE+XozYMwabhm9iAVbj6o1sYiIiJMxDIOVL90IwO9rDrBuf7LFidyPChRxCxk5Nl6YuI7HflxF+VB/pvRrw30tKmMYRdOhwzAM2tUMZ0q/Noy6M5aUrFzu/2Y59/7vH9buTyqSDCIiIpI/pQN9GXZ7PQC6fbyIHJvD4kTuRQWKuLy1+5O45aNFjFmxl8evq8qkp1pTPcKaQ28eHga3xVbgr0HX8Wq3GDYdTOXWjxfz9C+r2X0s3ZJMIiIicr47m1UiyM8LgEd/0NnqoqRD8uKy7A6Tz//ewYezt1I60JcRfRrQqlppq2OdJTUrl68W7OSrhbvItTu4u3kl+t1Qg/Cgwt12JiIiIpeXnJlLg9dnATD2sRY0rxpmcSLXoi5e4lYSkjJ5Zuwalu9KpGu9crzVoy6hJXysjnVRR1Kz+Oivbfy6fB++Xh482rYqj7arSqCvl9XRRERE3NrUtQfp+8tqADa/0fmaxxHIv1SgiNv4I/4A/zdpHQ6Hyeu31aVnowpFdtbkWu08msYHs7Yydd1BwgJ86N+hBnc1q4SPl3ZjioiIWOX64fPYfTyD+pEh/PF0G6vjuAy1GRaXl5qVy7Nj19D/1ziqRwQybUBbejWOLDbFCUDV8EA+uacRk/u2pkaZQF79YwM3jvibP+IPqDWxiIiIRaYNaAvA2v3JzNt8xOI0rk8rKOISVu5OZODYNRxIyqTfDTXod0P1Yj9YyTRN/t56lGHTN7P5UCp1KwQztHNt2tRwrnM0IiIi7mDB1qPc/81yADa83okAbcO+ZlpBEZeUa3cwYtYWen+xFMOA8U+05JmONYt9cQJ5rYmvj45gWv+2fNinASfSc7n3f/9w3//+YX2CerKLiIgUpXY1w2lUKRSAzqMWWBvGxRX/d3HitnYfS+eOz5fy0dztdG9YgWn929K4cimrYxU4Dw+DHg0jmfvcdbx8SwzrE5K5ZfQi+v0ax57jak0sIiJSVH59rAUA+xIzmbL2gMVpXJe2eEmxY5om41ft57U/NuDlYfBWj3p0a1De6lhFJiUrly//3snXi3Zis5vc07wS/TrUoHSgWhOLiIgUtlV7Eun52VIA1r52E8F+3hYnKr7UxUtcQlJGDi9MXMf09YdoXqUUH/aJpXyov9WxLHEkJYtRf21jzIp9+Hl58Gi7qjzSVq2JRURECtvD363gr81HKOHjycb/drY6TrGlMyhS7C3ZfozOIxcye+Nhnu9ci18ebeG2xQlARLAfb/Wox6xn2nFddDgj52zj+uHz+GHpbnJsDqvjiYiIuKwv7msMQEaOnV+X77U4jevRCoo4vWybnQ9mbeXLBTupGh7AqD4NqRcZYnUspxO39wTDpm/mn12JVA4rwXM3RdO1Xjk8PIpPm2UREZHiYtPBFG4etRCA1S93pFSA8w6EdlZaQZFiadvhVHp8soQvF+zknuaVmNqvrYqTi2hYqSRjHmvBtw82xd/bk36/xnHbJ4tZvP2Y1dFERERcTu1ywdzROBKARm/MtjiNa1GBIk7JNE1+WLqbW0Yv4lBKFl/f34S3etTD38fT6mhOzTAM2kdHMLV/W0b0bkBieg73fK3WxCIiIoXh3Z71T3/9xd87LEziWrTFS5zO0dRshkyIZ96Wo1xXM5zhd9QnIsjP6ljFUlaunZ+W7eHjedtJysjlttjyDOoYTaWwElZHExERcQm7j6Vz/fvzAVj+YgcigvWeJb/UxUuKhbmbDzN4/FpSs228eHMtHmgVhWHoDMW1SsnK5Yu/d/C/RbuwO0zuaV6ZfjdUJ0ytiUVERK7ZW1M38tXCXQDseqeL3rvkk86giFPLzLHz8uT1PPTdSsKDfPnz6Tb8p3UV/QMvIMF+3gzuVIu/B7enV+OK/LhsD9cNn89Hf20jPdtmdTwREZFi7cUutU9/PXzmFguTuAatoIjlNhxIZsCYNWw/ksbDbaowuFM0ft46a1KYth9J4/2ZW5ix4RClA30Z0KE6dzarhLenPrMQERG5GoeSs2jxzl8ALBzSnoqltJ36crSCIk7H4TD5csEOun+ymJTMXH58uBkv3xKj4qQIVI8I5PP7GjPxqVZUDQ/g5d830HHE30xZe4DC+NBCRETE1ZUN8WNwp2gA2r43T6+n10AFiljiYHIm9/7vH96etpkbakUwY2A72tYItzqW22lUqSRjH2vBt/9piq+XJ0//kteaeIlaE4uIiFyxvu2rn/76/yavtzBJ8aYtXlLkpq07yAsT15Fjc/Bqtxj6NK2osyZOwO4wmRyXwIjZW0lIyqRdzXCe7xxNnfKaOyMiIpJfiek5p+eizHm2HdUjgixO5LzUxUssl5Zt4/U/NjB+1X7qR4Ywsk8sVcMDrY4l5zi3NXH32PIMuilae2lFRETy6ed/9vB/k/JWUHa+3QUPD30QeyEqUMRSq/ee4Jmxa9ibmEHf66sz4MYaOpDt5JIz81oTf7M4rzXxvS0q83R7tSYWERHJj+ovTsPmMOlSryyf3tPY6jhOSQWKWMJmd/DJvB18NHcbZYP9+LBPLM2qlLI6llyBQ8lZjPprK2NX7KOEjxePt6vKw22rUMLHy+poIiIiTis1K5d6r80C4M+n21AvUlumz6UCRYrcvsQMBo5dw6o9J7gttjz/va0uIf7eVseSq7T9SCrDZ25h5obDhAf5MqBDDfo0raiVMBERkYv4M/4A/X6NA2D7WzfjpdfMs1x1m2HDML4xDOOIYRhqRSD5YpomE1fv5+ZRC9l6KJWRfWIZdWdDFSfFXPWIIL64rwm/PdmKqLASvDR5PTd9uIBp6w6qlaKIiMgFdGtQnjLBeVuj7/vfcovTFB/5KeO+AzoXcg5xEcmZufQfs4Znx8VTu1wQ0wa0pXvDClbHkgLUuHJJxj3ekv890ARvT4Onfl5N90+XsHTHcaujiYiIOJ2/B7cHYOnO4/yzU6+V+XHZAsU0zQVAYhFkkWJu2c7j3DxyAdPXHeS5m2oy5rGW6vzkogzDoEPtMkwf0I7hvepzJCWLu75axn++Xc7GAylWxxMREXEaft6efPdgUwD6fLmMHJvD4kTOr8A2whmG8ZhhGCsNw1h59OjRgnpYKQZybA7enbGZu75ahq+3J7892Yqnb6iBp1rquTxPD4M7mlRk3nPX82KXWsTtTaLr6IU8O3YN+xIzrI4nIiLiFK6PjqB2uWAAuo1eZHEa55evQ/KGYUQBU0zTrJufB9Uhefex42gaA8bEsT4hhTubVuTlW2II8FV3J3eVnJHLZ3/v4NvFuzBNuK9lZfq2r06pAB+ro4mIiFgqx+ag5kvTAfjmP024oVYZixNZ76oPyYtciGma/PzPHrp+tJD9JzL5/N7GDOtZX8WJmwsp4c3Qm2sxf/D19GhYgW8X7+K69+bxybztZOTYrI4nIiJiGR8vDyY80RKAh75bSVau3eJEzksFilyx42nZPPrDKv5v0nqaVC7FzIHt6Fy3rNWxxImUC/Hn3V71mTmwHS2qhTF85hauHz6fX/7Zi82uvbciIuKemkSVok310gC0eXeexWmcV37aDP8KLAWiDcPYbxjGw4UfS5zV/C1H6DxqIQu2HuWlrrX54aFmlAn2szqWOKkaZYL46v4mTHiiJZVKleDFSeu46cMFzFiv1sQiIuKevn+oGQDH0rL5fU2CxWmckwY1Sr5k5doZNn0z3y3ZTc0ygYzs05CY8sFWx5JixDRN5mw6wnszNrPtSBqxFUMZenMtWlQNszqaiIhIkdp4IIUuHy0EYP3rnQh00y3yOoMiV23zoRRu+3gx3y3ZzX9aRfHH021UnMgVMwyDjjFlmD6gLe/1rM+h5Czu/HIZD367nE0H1ZpYRETcR0z5YG5tUB6Aeq/NtDiN81GBIhflcJj8b9Eubh29mOPpOXz7YFNeu7UOft6eVkeTYszL04PeTSsyf/D1DL25Fqv2nKDLRwt5dtwa9p9Qa2IREXEPo+6MBcA04adle6wN42S0xUsu6HBKFs+Nj2fhtmPcWDuCYT3rUzrQ1+pY4oKSM3L59O/tfLt4N5hw/8nWxCXVmlhERFzc7mPpXP/+fADWvNKR0BLu9dp3sS1eKlDkPDM3HGLob2vJzLXzUtcY7mleCcPQ0EUpXAeSMhk5ZysTVu0nwMeLJ66vxkOtq+DvoxU7ERFxXa/9sYHvluwGYPewrtaGKWI6gyKXlZFj44WJa3n8x1WUD/VnSr+23NuisooTKRLlQ/15r1cDZgxsR/OqJ1sTvz+PX5erNbGIiLiuV7vFnP76k3nbLUziPLSCIgCs3Z/EwDFr2HU8ncfaVWVQx2h8vFS/inVW7E5k2PTNrNpzgqrhAQzpVItOdcqoYBYREZdzKDmLFu/8BcDyFzsQ4SYjHLSCIhdkd5h8Mm87t3+6hMxcOz8/0pwXbq6t4kQs1zSqFBOeaMmX9zXGAJ74aRW3f7aE5bsSrY4mIiJSoMqG+PHMjTUBaPb2XxansZ7ehbqx/ScyuOurZQyfuYVOdcoyY0A7WlUrbXUskdMMw+CmOmWZObAd7/asx4GkTHp/sZSHv1vBlkOpVscTEREpMANurHH667enbbIwifW0xctN/b4mgZcmr8fhMHn9trr0bFRBW2fE6WXm2PluyW4+nb+dtGwbPRtF8kzHmlQI9bc6moiIyDU7kZ5DwzdmA7BwSHsqliphcaLCpS5eAkBKVi6v/r6BSXEJNKoUyod9YqkcFmB1LJErkpSRw6fzd5zuevKfVlE8dX01t2vPKCIiruf7Jbt59Y8NAOx6p4tLf4CsAkVYsTuRgWPWcCgli343VOfp9tXx8tQuPym+EpIy+XD2Vn5bvZ9AXy+eur46D7aO0jBREREp1qKGTgXgjsaRDL+jgcVpCo8KFDeWa3fw0V/b+GTediJLluDDPrE0rlzS6lgiBWbLoVSGz9zMnE1HKBvsxzMda9CzUaQKcBERKZbSsm3UfXUmALOfaUeNMkEWJyocKlDc1K5j6Qwcu4b4fUn0ahzJa7fWIdDXy+pYIoVi+a5Ehk3fxOq9SVSPCGRIp2g6xqg1sYiIFD+T4vbzzNh4wHW3eqnNsJsxTZOxK/bS9aOF7Dqaxid3N+L9OxqoOBGX1qxKKX57shVf3NcY0zR57MdV9Pp8KSt2qzWxiIgULz0aRhLkl/e+7dEf3OuDf62guKAT6Tm8MHEdMzYcokXVUozoHUt5dTkSN2OzO5iwaj8fztnK4ZRsbqxdhiGdo6nposvkIiLierJy7dR6eQYAv/dtTYOKodYGKmDa4uUmFm07xqDxa0hMz+G5m6J5tG1VPDxcb0lQJL8yc+x8u2QXn83fQXq2jV6NIxl4Y81CLdrtdjtNmjShQoUKTJkypdB+joiIuL45Gw/zyMkVlJ1vd3Gp93Xa4uXism123pq6kXv/9w8Bvl5Meqo1j19XzaV+iUWuhr+PJ09dX50Fg9vzcJsqTI47QPv35/PO9E0kZ+QWys8cNWoUtWvXLpTHFhER93JjTBmqlM4bCdHz8yUWpykaKlBcwNbDqXT/ZAlfLdzFvS0qMbVfW+pWCLE6lohTKRngw/91jWHuc9dxS/3yfLlgJ23fm8sXf+8gK9deYD9n//79TJ06lUceeaTAHlNERNzb7GfaARC3N4klO45ZnKbwqUApxkzT5Pslu+k2ehFHUrL4+v4mvNm9Hv4+mgEhcjGRJUvwQe8GTB/QliZRpXhn+mbavz+fcSv2YXdc+5bXgQMH8t577+HhoadXEREpGF6eHox5rAUAd3/1Dza7w+JEhUuvoMXU0dRsHvpuBa/+sYEWVcOYPrAtN8aUsTqWSLFRq2ww3/ynKWMea0GZYD+G/LaWziMXMHvjYa72bN6UKVOIiIigcePGBZxWRETcXYuqYafn2N3wwd8WpylcKlCKob82HabzyAUs3nGc12+tw3cPNiUiyM/qWCLFUouqYUx6qhWf39sIu8Pk0R9WcsfnS1l5Fa2JFy9ezB9//EFUVBR33nknc+fO5d577y2E1CIi4o7GP94SgL2JGczeeNjiNIVHXbyKkcwcO29N28hPy/ZSq2wQH93VUC1TRQqQze5g3Mr9jJyzlSOp2XSMKcOQTtFXNcF3/vz5vP/+++riJSIiBWrd/mS6fbwIgM1vdMbPu/hu7VcXr2JufUIyt4xeyE/L9vJImyr8/nRrFSciBczL04O7m1di/uDrGdwpmmU7jtNp5AKen7CWg8mZVscTERGhXmQIN53c1t/kzTkWpykcWkFxcg6HyVcLd/L+rC2ULOHDB70b0LZGuNWxRNxCYnoOn8zbzo9L92AY8GDrKjx5XTVCSnhbHU1ERNyYaZpUeWEaACN6N+D2RpEWJ7o6GtRYDB1MzmTQuHiW7DhOpzplGHZ7fUoG+FgdS8Tt7EvM4MPZW5m0JoFgP2/6tq/G/S2jivWyuoiIFG87jqbR4eRh+fWvdyLQ18viRFdOBUoxM3XtQV6ctI5cu4NXu8XQu0lFDENDF0WstPFACu/N3Mz8LUcpH+LHMx1rcnujSP6MP8DwmVs4kJRJ+VB/BneKpnvDClbHFRERFzf0t7WMWbEPgN3Dulqc5sqpQCkm0rJtvPbHBias2k+DiqGM7BN7enqoiDiHJTuO8e70zcTvT6ZssB+J6TnknNGT3t/bk3dur6ciRURECl3U0KkAvNothgdbV7E4zZXRIfliYNWeE3QZtZCJq/fT74bqTHiipYoTESfUqlppJj3Vmrd71ONwStZZxQlAZq6d4TO3WJRORETcyeKhNwDw+p8bOZGeY3GaglH8Nqu5IJvdwcfztjN67nbKBvsx9vGWNI0qZXUsEbdlmiaJ6TkcTM7iYHIWh5IzT/558nJKFgeTM8nKvfgk3wNJ6volIiKFr0KoP09eX43P5u+g4Ruz87XVKyoqiqCgIDw9PfHy8sLZdj6pQLHY3uMZDBwbx+q9SXSPLc9/u9cl2E8dgkQKi8Nhciw9+99iIzmLA8mZZ10+lJJFju3s4sPTw6BssB9lQ/yIKR9Mh1oRlA3x49N5O0jMOP8Tq/Kh/kX1VxIRETf3fOdafDZ/BwAj52xl4I01L3ufefPmUbp06cKOdlVUoFjENE0mrk7g1T82YACj7ozltljtVxe5FnaHydHUbA6eWXCk5P15MClvFeRIaha59rPP3nl7GpQN8aNcsD+xFUMpF5JXiOT96U/5ED/CAn3x9Di/UUXpQF9emLiOzFz76ev8vT0Z3Cm60P++IiIip6x66UYavzmHkXO2cVezSpQJ9rM60lXTIXkLJGfk8uLkdUxde5BmUaUY0acBkSVLWB1LxKnZ7A4Op2afv90qOW+7VV7xkY3dcfZzmo+XB+VOFhvlQvz/LTyC/70cFuCDxwWKj/yaHJegLl4iImK5Lxfs4O1pm4FLd/WqUqUKJUuWxDAMHn/8cR577LGiingWdfFyEkt3HOfZcWs4mprNMx1r8sR11S74qayIO8mxOTickrfacSDp7O1WB1PyzoAcTc3mnNoDP28Pyp8sMsqG+J3++t8VEH9KlvBWi24REXEbp7p6PdCyMq/fVveCt0lISKBChQocOXKEjh07Mnr0aNq1a1eUMYGLFyja4lVEcmwORszeyhcLdhAVFsBvT7aiQcVQq2OJFLqsXDuHUy5+3uNgchbH0rLPu1+AjyflQv0pF+JHzYjwvBWQ0H8LkHLB/gT7e6n4EBEROcPa126i/muz+H7pHh5qU4XKYed3hK1QIW+VPyIigh49erB8+XJLCpSLUYFSBLYfSWPg2DjWJ6RwV7OKvNQ1hoBiOO1T5FyZOfYLnPfI5GDSv5cTL9DyMNjP6/T2qjrlg88771E2xI8gNYsQERG5YsF+3rzbsx7P/7aO64bPP2+rV3p6Og6Hg6CgINLT05k1axavvPKKRWkvTO+SC5Fpmvz8z17enLoRf29PPr+3MZ3rlrU6lki+pGXbTp/3OPvMx7/XJWfmnne/0BLelAvJW/mIrRRKueB/t1udKkRUoIuIiBSePk0r8eKk9dgdJv1+jWP0XQ1Pf+/w4cP06NEDAJvNxt13303nzp2tinpBOoNSSI6nZfP8b2uZs+kIbWuU5v07GhTrbgriOkzTJDXbdnKV48LnPQ4mZ5GaZTvvvmEBPv9usbrAeY+ywX74+3ha8LcSERGRM2Xl2qn18gwAZgxsS62ywRYnOp8OyReh+VuO8Nz4taRk5vL8zbV4sFXUNXUIEskv0zRJzsy9xHmPvMvpOfaz7mcYee1y/+1u5Xf6/MepblcRwb74eav4EBERKS6mrzvIkz+vBmDXO12c7tymDskXgaxcO8Omb+a7JbupWSaQHx9uRu1yzletSvF05nTzs1Y7ki493dzDgIigvFWOmmWCaFcz/LzzHhFBfvh4eVj0NxMREZHCcHO9ckQE+XIkNZtaL88gx+YoFu3wVaAUkE0HUxgwJo6th9P4T6soht5cS582S75daLr5qfMeB65iuvmp7VflQ/0ID/TFy1PFh4iIiDt6vnMtBo2PJ/vke4iEpExemLgOwGmLFBUo18jhMPlm8S7em7GFYH9vvnuwKddHR1gdS5zIpaabnzrvcTjlwtPNywTnzfa40HTzciF+lL7IdHMRERERgBGzt553XWauneEzt6hAcUWHU7J4bnw8C7cd48baZXi3Zz3CAn2tjiVFyGZ3cCQ1+2RXqwuf9zh8ienmZYP9aFK55HnnPQpiurmIiIjIgaTMK7reGahAuUoz1h/ihYlrycy181aPutzdrJLTHTySa3PmdPPT262Srmy6eYtqYac7Xmm6uYiIiBS18qH+JFygGCkf6m9BmvxRgXKF0rNtvDFlI2NW7KNuhWBG9mlI9YhAq2PJFTp3uvm55z2uZLr5qe1W5UI13VxEREScy+BO0bwwcR2Zuf928PT39mRwp2gLU12aCpQrEL8viQFj4tiTmMGT11fjmRtrqvORE7rYdPNTlw8mX3i6eZCf1+mVj3Onm59a/QjWdHMREREpRk6dMxk+cwsHkjLVxctV2B0mn83fzsg524gI8uWXR1rQslqY1bHcUnq27SIzPjJPFyNJGReebl422I/yof40qHj+dPOyIX4Earq5iIiIuKDuDSs4dUFyLrd5RzZjxgwGDBiA3W7nkUceYejQofm63/4TGTw7Np7luxO5pX453upej5AS+hS9oJ2abn7WdqukK5tuHlnSnyZRJc8776Hp5iIiIiLFh1sUKHa7nb59+zJ79mwiIyNp2rQpt956KzExMZe83+9rEnhp0npMYETvBvRoWEFnC67CudPNzz/vcfnp5lFhAbSsGpY3XDBU081FREREXJVbFCjLly+nevXqVK1aFYA777yT33///aIFSkpWLi9PXs/vaw7QuHJJRvaJpWKpEkUZudi46HTzM4qRK51uXu7k2Q9NNxcRERFxP25RoCQkJFCxYsXTlyMjI/nnn38ueNvluxJ5ZuwaDqVk8cyNNenbvprbTuF2OEyOp+dw8JyC48zzHgeTLzzdvEyQL+VC/S843bxciB/hQb54u+n/VxERERG5OLcoUPIj1+5g1JxtfDp/O5ElSzD+iZY0qlTS6liFxu4wOZaWffZ5jyuYbl4uxI/6kaF0rqPp5iIiIiJScNyiQKlQoQL79u07fXn//v1UqPBvJ4Ndx9IZOCaO+P3J9GocyWu31inWHZ3OnG5+5hmPM6ed52e6+bnnPTTdXEREREQKW/F9F34FmjZtyrZt29i1axcVKlRgzJgx/PLLL5imybiV+3j9z414e3rwyd2N6Fq/nNVxL+lC083/bbt7ZdPNy4b4Uy745IBBTTcXERERESfgFgWKl5cXH3/8MZ06dcJut/PQQw9RPqoGT/y0ipkbDtOyahgj+jSgXIi/pTkvNt381HmPA0lXPt28bIgf5UM03VxEREREigfDNM3L3+oKNWnSxFy5cmWBP25BWbTtGIPGryExPYfnborm0bZVC33bUmaO/fRE84NJ5083P5ScxfGLTDcvd/KA+b+zPTTdXERERESKN8MwVpmm2eTc691iBeWUbJud4TO28PWiXVQLD+B/DzSlboWQa37cM6ebnyo6DiTnf7r5qQPn5UM03VxERERE3Fu+3v0ahtEZGAV4Al+bpjmsUFMVgq2HU+n/axybD6VyX4vKvNil9mWni19ouvm55z2uZLp52TPOe2i6uYiIiIjI+S5boBiG4Ql8AnQE9gMrDMP4wzTNjYUd7lpMjktg+MwtJCRlEuLvTUaOjWA/b/73QBM61C6TN908I5cDZ22zOnu+x8GkzPOmmwOEB50/3fzM8x6abi4iIiIicnXys4LSDNhumuZOAMMwxgC3AU5boEyOS+CFievIzM0rLpIz87ZXhQf58r9Fu3hr6iYOJmed/v4phgERQb6UC/GnRkQgbWuUPvu8R7AfZYI13VxEREREpLDkp0CpAOw74/J+oHnhxCkYw2duOa/4ANh2OI0GFUOoXS6YGzTdXERERETE6RTYCWzDMB4DHgOoVKlSQT3sVTmQlHnB6x2mycSnWhdxGhERERERya/8LBckABXPuBx58rqzmKb5pWmaTUzTbBIeHl5Q+a5K+dALzzO52PUiIiIiIuIc8lOgrABqGIZRxTAMH+BO4I/CjXVtBneKxv+cQ+r+3p4M7hRtUSIREREREcmPy27xMk3TZhjG08BM8toMf2Oa5oZCT3YNujesAOSdRTmQlEn5UH8Gd4o+fb2IiIiIiDgnt5wkLyIiIiIi1rrYJHm1rBIREREREaehAkVERERERJyGChQREREREXEaKlBERERERMRpqEARERERERGnoQJFRERERESchgoUERERERFxGipQRERERETEaahAERERERERp6ECRUREREREnIYKFBERERERcRoqUERERERExGkYpmkW/IMaxlFgT4E/8NUpDRyzOoTIGfQ7Kc5Gv5PibPQ7Kc5Gv5OFo7JpmuHnXlkoBYozMQxjpWmaTazOIXKKfifF2eh3UpyNfifF2eh3smhpi5eIiIiIiDgNFSgiIiIiIuI03KFA+dLqACLn0O+kOBv9Toqz0e+kOBv9ThYhlz+DIiIiIiIixYc7rKCIiIiIiEgxoQJFRERERESchksXKIZhdDYMY4thGNsNwxhqdR5xb4ZhfGMYxhHDMNZbnUUEwDCMioZhzDMMY6NhGBsMwxhgdSZxb4Zh+BmGsdwwjPiTv5OvW51JxDAMT8Mw4gzDmGJ1FnfhsgWKYRiewCfAzUAMcJdhGDHWphI39x3Q2eoQImewAYNM04wBWgB99TwpFssGbjBNswEQC3Q2DKOFtZFEGABssjqEO3HZAgVoBmw3TXOnaZo5wBjgNosziRszTXMBkGh1DpFTTNM8aJrm6pNfp5L3AlzB2lTizsw8aScvep/8T918xDKGYUQCXYGvrc7iTly5QKkA7Dvj8n70wisickGGYUQBDYF/LI4ibu7kdpo1wBFgtmma+p0UK40EhgAOi3O4FVcuUEREJB8MwwgEfgMGmqaZYnUecW+madpN04wFIoFmhmHUtTiSuCnDMG4BjpimucrqLO7GlQuUBKDiGZcjT14nIiInGYbhTV5x8rNpmhOtziNyimmaScA8dHZPrNMauNUwjN3kHRW4wTCMn6yN5B5cuUBZAdQwDKOKYRg+wJ3AHxZnEhFxGoZhGMD/gE2maY6wOo+IYRjhhmGEnvzaH+gIbLY0lLgt0zRfME0z0jTNKPLeR841TfNei2O5BZctUEzTtAFPAzPJO/g5zjTNDdamEndmGMavwFIg2jCM/YZhPGx1JnF7rYH7yPtUcM3J/7pYHUrcWjlgnmEYa8n7oHG2aZpq7SriZgzTVHMMERERERFxDi67giIiIiIiIsWPChQREREREXEaKlBERERERMRpqEARERERERGnoQJFRERERESchgoUERERERFxGipQRERERETEafw/jwmtT40x5gYAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "################################################\n", "# Plotting the optimal path\n", "################################################\n", "\n", "# Transforming the points to the xy plane approximately\n", "xy_cords = np.zeros((n,2))\n", "\n", "for i in range(0, n):\n", " xy_cords[i,0] = distance.distance((points[0][1],0), (points[i][1],0)).km\n", " xy_cords[i,1] = distance.distance((0,points[0][0]), (0,points[i][0])).km\n", "\n", "# Plotting the points\n", "fig, ax = plt.subplots(figsize=(14,7))\n", "\n", "for i in range(n):\n", " ax.annotate(str(i), xy=(xy_cords[i,0], xy_cords[i,1]+0.1))\n", " \n", "ax.scatter(xy_cords[:,0],xy_cords[:,1])\n", "ax.plot(xy_cords[orden,0], xy_cords[orden,1])" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The optimal distance is: 22.31 km\n" ] } ], "source": [ "# Showing the optimal distance\n", "distance = np.sum(np.multiply(C, X.value))\n", "print('The optimal distance is:', np.round(distance,2), 'km')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Example for three Traveling Salesmen\n", "\n", "Continuing with the previous example, now we are going to find the optimal paths (shortest distance) for three salesmen that start from the point of origin (O) and between all of them must go through points A to F and return to point O.\n", "\n", "| Point |\tCoordinates |\n", "| :----------: | :----------: |\n", "| Origin(O) | (-12.059296, -76.975893) |\n", "| A | (-12.079575, -77.009686) |\n", "| B | (-12.087303, -76.996620) |\n", "| C | (-12.084391, -76.975651) |\n", "| D | (-12.063603, -76.960483) |\n", "| E | (-12.056762, -77.014452) |\n", "| F | (-12.011531, -77.002383) |" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The path of Salesman_1 is:\n", "\n", "0 => 3 => 0\n", "\n", "The path of Salesman_2 is:\n", "\n", "0 => 4 => 0\n", "\n", "The path of Salesman_3 is:\n", "\n", "0 => 6 => 5 => 1 => 2 => 0\n", "\n" ] } ], "source": [ "################################################\n", "# Solving the integer programming problem\n", "################################################\n", "\n", "# Defining the variables\n", "X = cp.Variable(C.shape, boolean=True)\n", "u = cp.Variable(n, integer=True)\n", "m = 3\n", "ones = np.ones((n,1))\n", "\n", "# Defining the objective function\n", "objective = cp.Minimize(cp.sum(cp.multiply(C, X)))\n", "\n", "# Defining the constraints\n", "constraints = []\n", "constraints += [X[0,:] @ ones == m]\n", "constraints += [X[:,0] @ ones == m]\n", "constraints += [X[1:,:] @ ones == 1]\n", "constraints += [X[:,1:].T @ ones == 1]\n", "constraints += [cp.diag(X) == 0]\n", "constraints += [u[1:] >= 2]\n", "constraints += [u[1:] <= n]\n", "constraints += [u[0] == 1]\n", "\n", "for i in range(1, n):\n", " for j in range(1, n):\n", " if i != j:\n", " constraints += [ u[i] - u[j] + 1 <= (n - 1) * (1 - X[i, j]) ]\n", "\n", "# Solving the problem\n", "prob = cp.Problem(objective, constraints)\n", "prob.solve(verbose=False)\n", "\n", "# Transforming the solution to paths\n", "X_sol = np.argwhere(X.value==1)\n", "\n", "ruta = {}\n", "for i in range(0, m):\n", " ruta['Salesman_' + str(i+1)] = [0]\n", " j = i\n", " a = 10e10\n", " while a != 0:\n", " a = X_sol[j,1]\n", " ruta['Salesman_' + str(i+1)].append(a)\n", " j = np.where(X_sol[:,0] == a)\n", " j = j[0][0]\n", " a = j\n", "\n", "# Showing the paths\n", "for i in ruta.keys():\n", " print('The path of ' + i + ' is:\\n')\n", " print( ' => '.join(map(str, ruta[i])))\n", " print('')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "################################################\n", "# Plotting the optimal path\n", "################################################\n", "\n", "# Plotting the points\n", "fig, ax = plt.subplots(figsize=(14,7))\n", "\n", "for i in range(n):\n", " ax.annotate(str(i), xy=(xy_cords[i,0], xy_cords[i,1]+0.1))\n", "\n", "ax.scatter(xy_cords[:,0],xy_cords[:,1])\n", "for i in ruta.keys():\n", " ax.plot(xy_cords[ruta[i],0], xy_cords[ruta[i],1], label = i)\n", " ax.legend(loc='best')" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The optimal distance is: 28.3 km\n" ] } ], "source": [ "# Showing the optimal distance\n", "distance = np.sum(np.multiply(C, X.value))\n", "print('The optimal distance is:', np.round(distance,2), 'km')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It can be observed that depending on the location of the points that salesmen must travel, in terms of distance it may not be optimal to add more salesmen." ] } ], "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.9.5" } }, "nbformat": 4, "nbformat_minor": 4 }