{ "cells": [ { "cell_type": "markdown", "id": "0911cd61", "metadata": {}, "source": [ "# LQR tracking: following a reference trajectory\n", "\n", "This notebook uses the double integrator from the\n", "[previous example](lqr_integrator.ipynb), but now the state should follow a time-varying target\n", "$x^\\star_t$ rather than return to the origin:\n", "\n", "$$\n", "J = \\tfrac12 (x_T - x^\\star_T)^\\top Q_f (x_T - x^\\star_T)\n", " + \\sum_{t=0}^{T-1} \\tfrac12 (x_t - x^\\star_t)^\\top Q (x_t - x^\\star_t) + \\tfrac12 u_t^\\top R u_t .\n", "$$\n", "\n", "**From tracking to standard LQR.** Expanding the square gives\n", "$\\tfrac12 x^\\top Q x - (Q x^\\star)^\\top x + \\text{const}$. Tracking is therefore a standard LQR\n", "with linear cost terms\n", "\n", "$$\n", "q_t = -Q x^\\star_t, \\qquad q_f = -Q_f x^\\star_T .\n", "$$\n", "\n", "The constant does not change the optimal trajectory." ] }, { "cell_type": "code", "execution_count": 1, "id": "6d303f55", "metadata": { "execution": { "iopub.execute_input": "2026-10-14T22:41:20.312700Z", "iopub.status.busy": "2026-10-14T22:41:20.312151Z", "iopub.status.idle": "2026-10-14T22:41:20.972891Z", "shell.execute_reply": "2026-10-14T22:41:20.972002Z" } }, "outputs": [], "source": [ "from functools import partial\n", "\n", "import jax\n", "import jax.numpy as jnp\n", "import matplotlib.pyplot as plt\n", "\n", "from diffilqrax.lqr import solve_lqr, kkt\n", "from diffilqrax.typs import LQR, LQRParams, ModelDims\n", "\n", "jax.config.update(\"jax_enable_x64\", True)" ] }, { "cell_type": "markdown", "id": "41aa7b63", "metadata": {}, "source": [ "## Target trajectory\n", "\n", "The position should follow a sine wave, and the velocity should follow the matching cosine (the\n", "time derivative of the position target). With these targets the reference is dynamically\n", "consistent, so the controller can track it closely." ] }, { "cell_type": "code", "execution_count": 2, "id": "4f48e2bd", "metadata": { "execution": { "iopub.execute_input": "2026-10-14T22:41:20.976649Z", "iopub.status.busy": "2026-10-14T22:41:20.976335Z", "iopub.status.idle": "2026-10-14T22:41:21.216951Z", "shell.execute_reply": "2026-10-14T22:41:21.216356Z" } }, "outputs": [], "source": [ "dims = ModelDims(n=2, m=1, horizon=200, dt=0.05)\n", "T, n, m = dims.horizon, dims.n, dims.m\n", "time = jnp.arange(T + 1) * dims.dt\n", "\n", "omega = 2 * jnp.pi / 5.0 # period of 5 time units\n", "x_target = jnp.stack([jnp.sin(omega * time), omega * jnp.cos(omega * time)], axis=-1) # (T+1, n)" ] }, { "cell_type": "markdown", "id": "fcfa74c5", "metadata": {}, "source": [ "## Setting up the LQR\n", "\n", "Only the linear terms differ from the regulation problem. The position error is weighted more than\n", "the velocity error, and the terminal weight $Q_f$ is set equal to $Q$." ] }, { "cell_type": "code", "execution_count": 3, "id": "e76aefbc", "metadata": { "execution": { "iopub.execute_input": "2026-10-14T22:41:21.220299Z", "iopub.status.busy": "2026-10-14T22:41:21.220108Z", "iopub.status.idle": "2026-10-14T22:41:22.316402Z", "shell.execute_reply": "2026-10-14T22:41:22.315805Z" } }, "outputs": [], "source": [ "A = jnp.array([[1.0, dims.dt], [0.0, 1.0]])\n", "B = jnp.array([[0.5 * dims.dt**2], [dims.dt]])\n", "Q = jnp.diag(jnp.array([100.0, 1.0]))\n", "R = 0.1 * jnp.eye(m)\n", "Qf = Q\n", "\n", "span_mat = partial(jnp.tile, reps=(T, 1, 1))\n", "span_vec = partial(jnp.tile, reps=(T, 1))\n", "\n", "lqr = LQR(\n", " A=span_mat(A),\n", " B=span_mat(B),\n", " a=span_vec(jnp.zeros(n)),\n", " Q=span_mat(Q),\n", " q=-(x_target[:-1] @ Q.T), # q_t = -Q x*_t\n", " R=span_mat(R),\n", " r=span_vec(jnp.zeros(m)),\n", " S=span_mat(jnp.zeros((n, m))),\n", " Qf=Qf,\n", " qf=-Qf @ x_target[-1], # q_f = -Q_f x*_T\n", ")\n", "params = LQRParams(x0=jnp.array([-1.0, 0.0]), lqr=lqr) # start away from the target" ] }, { "cell_type": "code", "execution_count": 4, "id": "966e36f0", "metadata": { "execution": { "iopub.execute_input": "2026-10-14T22:41:22.319998Z", "iopub.status.busy": "2026-10-14T22:41:22.319781Z", "iopub.status.idle": "2026-10-14T22:41:23.528662Z", "shell.execute_reply": "2026-10-14T22:41:23.527987Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "KKT residuals: 8.03e-13\n" ] } ], "source": [ "Xs, Us, lambdas = solve_lqr(params)\n", "dLdX, dLdU, dLdLambda = kkt(params, Xs, Us, lambdas)\n", "print(f\"KKT residuals: {max(jnp.abs(r).max() for r in (dLdX, dLdU, dLdLambda)):.2e}\")" ] }, { "cell_type": "code", "execution_count": 5, "id": "cf887e1b", "metadata": { "execution": { "iopub.execute_input": "2026-10-14T22:41:23.532017Z", "iopub.status.busy": "2026-10-14T22:41:23.531732Z", "iopub.status.idle": "2026-10-14T22:41:24.979931Z", "shell.execute_reply": "2026-10-14T22:41:24.979271Z" }, "tags": [ "thumbnail" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAscAAAIxCAYAAAChPRUqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC1HUlEQVR4nOzdd3gU5dfG8e/sJpveQxJKgFBDD116kSYIIiqICIIU9UUREFT8CYiI2AUFQTooqIAgiNKb0nvvvaRDet0y7x8LUaSHJLO7OZ/r2iubyezsnQSyZ5955jyKqqoqQgghhBBCCHRaBxBCCCGEEMJWSHEshBBCCCHEDVIcCyGEEEIIcYMUx0IIIYQQQtwgxbEQQgghhBA3SHEshBBCCCHEDVIcCyGEEEIIcYOT1gFsncViITIyEi8vLxRF0TqOEEIIIYTIBVVVSUlJoVixYuh0dx8fluL4PiIjIwkNDdU6hhBCCCGEyAOXL1+mRIkSd/26FMf34eXlBVh/kN7e3hqnEUIIIYQQuZGcnExoaGhObXc3Uhzfx82pFN7e3lIcCyGEEELYuftNk5UL8oQQQgghhLjBrorjv/76i44dO1KsWDEUReG3336772M2bdpErVq1cHFxoVy5csyZMyffcwohhBBCCPtkV8VxWloaNWrUYPLkyQ+0//nz5+nQoQMtWrTgwIEDDB48mH79+rF69ep8TiqEEEIIIeyRXc05fuKJJ3jiiSceeP+pU6cSFhbGl19+CUClSpXYsmULX3/9NW3bts2vmOIRJaRlczo2lcvX00lIzyYhPZssowW9XsFJp2BQLAR5uVAy0JuyQV4Ee7tImz0hRJ4zmUxYLBYMBgNgbQMF95+vKMSdmM1mjEaj1jEcmrOzM3q9/pGPY1fF8cPavn07rVq1umVb27ZtGTx48F0fk5WVRVZWVs7nycnJ+RVPYH2xORefxtYz8Ww9E8/ei4nEp2bd/4H/EuBhoHIxb1ySLvFMw0q0qVsZvd6uTooIITRkNBo5eOwUKS5FOB6dzPm4NFZv28e11Cx8A0PQubhh0Otwc9Zx7uQxXEyp9Hy6HVVCA6hV0o+wADecnBz65VQ8AlVViY6OJjExUesohYKvry8hISGP9CbWof83R0dHExwcfMu24OBgkpOTycjIwM3N7bbHjB8/njFjxhRUxEIrKimDZQciWbrvKidjUm77enFfN4p66dm8egVqZipDBr0OioLRrLJizXoux6dSrGwlkiwGrqVl8/fpeMCddb9dJHBtFB2qF6VLrRJUL+EjozxCiNuoqsrxqBTmbDjE/A37cQosjaK78M8OLkE4u0CaCmSacjYbgsugAvN2RcKuSOuuZGO6epxnHyvL6P7P4G5w6JdW8ZBuFsZBQUG4u7vLa1I+UVWV9PR0YmNjAShatGiujyX/g/9jxIgRDB06NOfzmz3xRN44GpnE1M3n+ONQJBbrGUoMeh0+xnhO/f07raqVZN63n+Dh4oSqqvzsH0mFChWIiAjPOVUyumNlMjIyrKvb6J05EZ3C79sOMX/dPrJ8SxGfBnO3X2Tu9ot4WVKp7nadz157luIhRTT8zoUQtuDvnXtZcew6e647czYuDQDnoDIAFPNypl7ZIpQp4kmQu0KAm55AX2+83F0wWSykZGRz/koMJ67EY/EI5GR0CvsvJ5BpNEDxGvxyGZaPXUfrysG8WD+UqiHuuLu7a/ntCo2ZzeacwjggIEDrOA7v5qBnbGwsQUFBuZ5i4dDFcUhICDExMbdsi4mJwdvb+46jxgAuLi64uLgURLxC5UxsCh//eYINJ2JztlUv6k73BmVpX60oZ48fZlb6Tnr16oqHi/WfpaIodO/e/bZjKYpyywtORKgvEd2aMrJbU7KMZrafu8bS/VdZfSSaFJMnW7M8eeK73fRrVp6XG4fh6eLQ/+yFEHdw+Xo6w2auYnuUis7gCmRjcNLRomIRGoS60TYijKK+9y9k64YF3vJ5tsnC1uOXmbt2D2ezfbmcmMnyg5EsPxiJOe4cbUs5Me39V9HpZLSwMLo5x1jeJBWcmz9ro9EoxfGdNGjQgD///POWbWvXrqVBgwYaJSp8UrNMfLP+NLO2nMdkUdEp4Bp7jDO/T+HZXl3o/uYXANSqVYtatWo98vO5OOtpXjGI5hWDuJ6SwchZK1h/RSU524Ov1p5i7rYLdCrrTL8W4RQvGvLIzyeEsG1RCalM/esCC3Zdwmh2QWcA9+wE3n26Pk/XLY2Xq/MjHd/gpKNFtVK0qFYKVVU5dCWJBTsvsXD3BfRFyrAuHdp/8zdvt6tIi4pBckq9kJLfe8HJi5+1XRXHqampnDlzJufz8+fPc+DAAfz9/SlZsiQjRozg6tWrzJs3D4BXX32VSZMm8fbbb/Pyyy+zYcMGFi5cyB9//KHVt1CobD97jSG/HCA6OROAVpWC+V+HSlw+5sWklN307t07X5/f38uNyW8+h8ls4Y/DUUxcd5pz8WnMPpTNjL9WMPKJcgx4qnm+ZhBCaCMqOoYXPpzFRc/KWHTWl7om5QPpU784LaoUz5diRVEUaoT6UiPUl7falOf9OavZFu/KiegUXp6zh1rFPekQkkrf5zrk+XMLIfKOot7sTWMHNm3aRIsWLW7b/tJLLzFnzhx69+7NhQsX2LRp0y2PGTJkCMeOHaNEiRKMHDnyoYqy5ORkfHx8SEpKkuWjH5DJbOGb9af5duMZVBVIjaN7BSfGD3pR01xGs4XvVh1gwrrTqC6eADxTqwT/61AJfw+DptmEEHlnz4XrDFmwi8vJZgAqBbkxslN1GpYLvM8j815CWjZTN59lzrYLZJksqGYj1Q2xLPqgL67Oj95ySti2zMxMzp8/T1hYGK6urlrHKRTu9TN/0JrOropjLUhx/HCS0o288uMedpy7DkAFp2us+2wAVSqW5+DBg9aL6DSWmJbJB0v2sexYAqoKgZ4GupcxM+T5NjaRTwiRO5lGE1+uOcX0v88D4KqYeLmmL8Ofa6r5ae1L11Lp9tkSohTrRVlli3gw8fmaVC3uo2kukb/suThu3rw5ERERTJgwQesowIPnyYvi2K6mVQjbFpmYwUuzdnE6NhUPg56Pu1TjyWohfO0bS//+/W2m8PT1cGVCz4b0upTAu78e4lRMKt8egnlrx7F18nA83e3rD5gQAmYt/pNxGyIxe1vbNz1XuwTvta+En42cFSoZ4Mm2T3qycNtJvth0hbNxaTz93Va6hrvxTuc6eHt5aR1RiDyXnZ2ds4iOPbGNakXYvZPRKXT5bhunY1NxNqWz8JXHeCqiOHq9nmHDhuHjY3ujI7VK+rH89cY0DLQuOpIUXIuu03dz+Xq6xsmEEA/j1z0X+XBHFmbvohjUbKb1rM3nz9WwmcL4JkVR6NYonNWDm9KmcjBGs8r8o+nUfHMax89e1DqeEDl69+7N5s2bmThxIoqioCgKZ8+epW/fvoSFheHm5kbFihWZOHHibY/r3Lkz48aNo1ixYlSsWBGAbdu2ERERgaurK3Xq1OG3335DURQOHDiQ89gjR47wxBNP4OnpSXBwMD179iQ+Pv6ueS5cuJBv378Ux+KRnY1Lpfv0HUQnZ2K6dpnz0wayd/1yrWM9EFdnPQuGdWFc2+L4uTtzLCqZTpO2sPlENDLjSAjbZjJbGLviGG8tPgJOBoIs11j7VgvaVLHtTjT+Hga+71mbV2t7oZqyMAeFM2DxWU5Ey4qshUlaWhppaWm3vNZkZ2eTlpZ2y0q9/97XYrHkbDMajaSlpZGZmflA+z6MiRMn0qBBA/r3709UVBRRUVGUKFGCEiVKsGjRIo4dO8aoUaN47733WLhw4S2PXb9+PSdPnmTt2rWsWLGC5ORkOnbsSLVq1di3bx9jx47lnXfeueUxiYmJtGzZkpo1a7Jnzx5WrVpFTEwMXbt2vWue/FyDQopj8UgiEzPoOWMn19OyqVrcm/cec+Pt1/vRo0cPraM9lB4tIlgxqAnVivuQkG7kpdm7aTPw44f+gyKEKBgHj5+m01drmLnFOr94YIuybP+kJ6WCfLUN9oAUReHd55oyr1cNinobuJyQwdOTt7HqSLTW0UQB8fT0xNPTM2d0FODzzz/H09OT119//ZZ9g4KC8PT05NKlSznbJk+ejKenJ3379r1l39KlS+Pp6cnx48dzts2ZM+ehsvn4+GAwGHB3dyckJISQkBBcXFwYM2YMderUISwsjB49etCnT5/bimMPDw9mzJhBlSpVqFKlCgsWLEBRFKZPn07lypV54oknGD58+C2PmTRpEjVr1uTjjz8mPDycmjVrMmvWLDZu3MipU6fumCe3PYwfhMw5Frl2PS2b7t9vJTIpizJFPJjbpx4Bnk20jpVrxX3dWPRqA16duZlNFzI47R3BoNmbmdzvcWngL4QN2bznMD2nb0fnVxw3J4Wvn69Ju6q5XypWS82ql+XPsqG88dN+tpyJ59Uf91A1+wTLPh+Sry/+QuTG5MmTmTVrFpcuXSIjI4Ps7GwiIiJu2adatWq3zDM+efIk1atXv+XiuHr16t3ymIMHD7Jx40Y8PT1ve86zZ89SoUKFvP1G7kNGjkWuGM0Wen7/FxcTstBlJPL981UJ8LT/lQVdnfXMfqUFncOsn688l8XABfvINJq1DSaEAKxL0A9bFY3OrzhKZjJTn6tgt4XxTX4eBub0qctTVfwBhSOGSvT6aikWi0ztcmSpqamkpqYSGPhPi8Hhw4eTmprKpEmTbtk3NjaW1NRUSpYsmbNt4MCBpKamMnPmzFv2vXDhAqmpqVSqVClnW16sK/Dzzz8zbNgw+vbty5o1azhw4AB9+vQhOzv7lv08PDwe+tipqal07NiRAwcO3HI7ffo0TZs2feTsD0tGjkWufLryBEdjs1Cz03Ha+j2uloL/x5tfFEVhwisdaHHgKsMWHWTlkWjiU7Yztk1xwsuGaR1PiEJrz4Xr9Jm9m5QsE+UC3ZjSvR7lixfROlaecNLrmPDiY2R9s5RVUS5svebG278e4tNnqqOXM1cO6U5FpMFguGN3hzvt6+zsjLPz7Ss83m3fh2UwGDCb/xkY2rp1Kw0bNuT//u//cradPXv2vsepWLEiP/74I1lZWbi4WAfRdu/efcs+tWrV4tdff6V06dI4Od25NP1vnvwkI8fioa08HMWMG/P83m9diu2rl+brxHitPBVRnLkv18PdoGf3xSTafvw7B46d1DqWEIXSB1MW0P37baRkmagX5s+S15s4TGF8k6IoTH2zC191rYFep7B47xXe/Hk/SSmpWkcThVDp0qXZuXMnFy5cID4+nvLly7Nnzx5Wr17NqVOnGDly5G1F7p288MILWCwWBgwYwPHjx1m9ejVffPEF8M9SzwMHDuT69et0796d3bt3c/bsWVavXk2fPn1yCuL/5vn3BYd5TYpj8VAWrdrE0IX7ARjQtAz9n6hHQECAxqnyT8OygXzzdDnITkcpUpa3fr9IYnr2/R8ohMgz3yxax+yzbhhVhRpBzsztUw9v14cfCbMXXWqVYPILtXDWK6w4FEXdwd8TE3dN61iikBk2bBh6vZ7KlStTpEgR2rZtS5cuXejWrRv169fn2rVrt4wi3423tze///47Bw4cICIigv/973+MGjUKIGcecrFixdi6dStms5k2bdpQrVo1Bg8ejK+vb84aCf/N8++LE/OarJB3H7JC3j927t5Nl0lbcC5agepF3VnyejOc9IXj/dXfh88zcPEJkrMsVCvuw/z+9R36xVkIW7HldDwvz91NtslCiCmGjR/3xM1QOP7vLdl+giG/HkdxMlDZ28iydzrhXEj+5joKe14hLz/Nnz+fPn36kJSUhJubW54eOy9WyJP/ZeKB7b7uinPRCijmLCZ0iyg0hTFAk2ph/Pp/jfH3MHD4ahLdp/zNiTPntY4lhEPbee4a/eZZC+M2lYP565OXCk1hDNClQTgftSmBXlE5luzM4F8OYDLn36lkIfLLvHnz2LJlC+fPn+e3337jnXfeoWvXrnleGOeVwlPdiEdyJSGd77ZeBeB/T1alTIifxokKXvlgL37sWx8vFx1HYzJoN345Fy5Hah1LCIc0cf5yekzbSqbRQouKRfj2hZoYnApfa7Oebeoy/aW6OOsV/jgUxfBFB8nIyLz/A4WwIdHR0bz44otUqlSJIUOG8NxzzzFt2jStY92VFMfini5fvszmzZv539IjpGebqVvaj5eblNc6lmYqF/Pm605lITsDipRjxIozMpIjRB77++BpvtyVjgk9ZT1NTHmxNi6FsDC+qWV4MN92r4VeUVh6IJIWQ78tsKv2hcgLb7/9NhcuXMiZ8vD111/j7u6uday7kuJY3NX169dp27YtnV7/gM2n4jDodYzvUr3QL4jRqnYFvnmuEi5OCtsvpjBiyWFZalqIPBKVlME7f15C5+aFe0YsS4e2xdW58BbGN7WrGsIrNa3FRLRPZT5ctF3jREI4LimOxV25u7tTsVIVfJu+BMBrzctSLuj21WsKo04NqjDphdroFFi09wrvLtiWr21lhCgMktKNvDRrF5FJmZQp4sHf417A210uYrrp7a7N6VDc2i1n7oEkft17ReNEQjgmKY7FXbm6utJpyKcoXkUI9HRhQNMyWkeyKa0rBzO+SzUAfjmcSLf3vtU4kRD263piEm3GLuJUTCrB3i7Me7meQ6y6mdcmv/E0/ZtYFyN659dDbDsTr3EiIRyPFMfiNgcPHgQgJdPIpI3W1W8GtyqPh4ssqPhf3eqWpGVQBgC71TJsOB6lcSIh7I+qqrQaMZMY1QedOZs5fepRws925yNqbcQTlehYoxgmi0qPKZtYsnar1pGEcChSHItbzJ07l4iICEaNGsX0v85xLS2bMoEedKvreCvg5ZWZQ56hThELKDre/PkQp2JStI4khF2Zsvks130qolosvNMkkEpFC3dP+fvR6RQ+f7Y6PsZrqM5uvLX8DPEp0sFCiLwixbG4xalTpwBINelyloge3raiNJ6/B0VRmP9me+qV9icly8TLc3YTl5yudSwh7MKqI9F8tsq6LPuoJ8N5pVMTjRPZB1dnPb+//SQuphRUj0D+b8F+jNI5R4g8IRWPuMW4cePYuHEjIU2fJz3bTI0SPrSrGqJ1LJvn4qTn+561KeXvzpWEDBq+NYOU1DStYwlh037buIshv1iXo+/dsDR9mxbeNpG5UTLYnxXDO+Dp4sSu89f5+M/jWkcSwiFIcSwwGo23tCKr26Ax83da1yx/rXk5FKVwt257UH4eBj7tWBbVmIUxoCwDvv1d60hC2KxjZy4waNFRMowWahZz5/0OlbSOZJfKB3vxVdcaAMzeeoEhExdonEgI+yfFcSGnqioDBgzghRdeID3dOhXgl92XScowEhboQevKwRontC+PVSrJ/9WxzpfcnuTFn4flAj0h/stsUfnfH+fQeQehpF9nUveahWo5+rzWpkoI3atbVy399ZIr8//YrHEi4Qh69+5N586d7/r1bdu20b59e/z8/HB1daVatWp89dVXty1QoyhKzs3b25u6deuybNmyfE7/aOSvUSF35MgRfvjhBxYuXMjevXsxmi3MvDHXuF+TMPSFfMGP3Hine6ucVkvDFh2UC/SE+I8J606xPyoDV2cds3rXo3gRX60j2b2x3R7DLzMSnbML3x0ykpierXUk4cCWLl1Ks2bNKFGiBBs3buTEiRO8+eabfPTRRzz//PO3LYw1e/ZsoqKi2LNnD40aNeLZZ5/l8OHDGqW/PymOC7lq1aqxefNmJk+eTJMmTfjzcBRXEzMI8DDwTK0SWsezW++0C6dBmQDSs8088/VqTp6/pHUkIWzC+mNRfLvhDACfPlOdFrUqapzIMTjpdawc9Twl/d24mpTFoJ8PYLbIyp22SFVV0rNNmtzyYjXXtLQ0+vfvT6dOnZg2bRoRERGULl2afv36MXfuXBYvXszChQtveYyvry8hISFUqFCBsWPHYjKZ2Lhx4yNnyS/SuFbQqFEjGjVqhKqqfL/5HGC9OEaWbM09J72OSS/UpNGHy0nRufPU+CUc+e4NnJzkZyoKr7/3HqHvj0fBxZMXHyvJUxHFtY7kUEL8vZj6Yh26TNnKX6fiGLFgC5+9KN0/bE2G0UzlUas1ee5jH7bF3fBopd+aNWu4du0aw4YNu+1rHTt2pEKFCvz0009069bttq+bTCZmzpwJgMFgeKQc+cnuRo4nT55M6dKlcXV1pX79+uzateuu+86ZM+eWuS6KouDqKkuRqqrKJ598QnR09C3b915M4FhUMm7Oel58rJRG6RxHgKcLXz5dCcxGMv3L892NNx5CFEZGs4WB8/eCiyeGtBjeby8X4OWHysW8+fSZ6gAsPJLMiEk/aZxIOJqbLV8rVbrz/+Hw8PCcfW7q3r07np6euLi4MGTIEEqXLk3Xrl3zPWtu2dXI8S+//MLQoUOZOnUq9evXZ8KECbRt25aTJ08SFBR0x8d4e3tz8uTJnM+l8wJ8//33jBgxgu+++46TJ0/i5uYGwM+7LwPwZPWi+HnY7js6e9KhQVWSFQ9G/HaMCetOUT/Mn/plArSOJUSB+3z1SZINgThjYsHAlrg+4uiVuLunIoozbfEajpqCWHzZjTcSMyjm66Z1LHGDm7OeYx+21ey588q9pmj8d1T466+/plWrVpw7d44hQ4bwzTff4O/vn2dZ8ppdjRx/9dVX9O/fnz59+lC5cmWmTp2Ku7s7s2bNuutjFEUhJCQk5xYcLN0XmjdvTpUqVRg8eHBOYZySaeSPQ9bOCs/Xk9Xw8lL3x8LoUrM4FhXe/Hk/py5c1TqSEAVqzdFopv1lPXPy7Yv1qRNeWttAhcDikS9SykvBqDgz+OcDmGSBEJuhKAruBidNbnkxQFi+vLUf+fHjd+6rffz4cSpUqHDLtpCQEMqVK0ebNm2YPXs23bp1IzY29pGz5Be7KY6zs7PZu3cvrVq1ytmm0+lo1aoV27dvv+vjUlNTKVWqFKGhoTz11FMcPXr0ns+TlZVFcnLyLTdHEx4ezu7duxkyZEjOtt8PRpFhNFMuyJNaJf00TOeYPuxclaJeTkQnZ/HUx4swmUxaRxKiQKzfcYBB83cD0LdxmCwqVEDcXJyZ+0ozPAx6dl24nnMRpBCPqm3btvj7+/Pll1/e9rXly5dz+vRpevfufdfH16tXj9q1azNu3Lh8TPlo7KY4jo+Px2w23zbyGxwcfNvc2ZsqVqzIrFmzWLZsGT/++CMWi4WGDRty5cqVuz7P+PHj8fHxybmFhjrGKKqqqsTExOR87ubmdss7yF92W7spdKsTKlNP8oGnixMjWxZDNZvI8C/PNysPaB1JiHyXnJpG/9nbybToCHHK4J124VpHKlRKB3ow7ulqAExcd4qv56/QOJGwN0lJSRw4cOCW2/Xr1/n+++9ZtmwZAwYM4NChQ1y4cIGZM2fSu3dv+vfvT/v27e953MGDB/P9999z9aptnkm1m+I4Nxo0aECvXr2IiIigWbNmLFmyhCJFivD999/f9TEjRowgKSkp53b58uUCTJx/5s6dS/ny5Zk/f/5tXzsWmczBK0k46xWeriVXj+eX9g2q0b2ydRrL1J1xHIt0vLMSQvzb1C2XsPiVRM1KY1rv+hicHPolxyZ1rlmcCs7XQVGYsCOBq3GJWkcSdmTTpk3UrFnzltuYMWN49tln2bhxI5cuXaJJkyaEhYXRr18/3n33XaZNm3bf47Zr146wsDCbHT22m79UgYGB6PX6W0Y/AWJiYggJebDTdM7OztSsWZMzZ+5+esnFxQVvb+9bbvZOVVUWLlxISkrKHYv9hXus21pXDibQ06Wg4xUq43u3pmV4ENkmC2/8tI/0bJleIRzT7gvXmXqjQ8uEHvWpXs4xzsLZo5+Hd8GQlYDi4c/oP8/kSa9b4fjmzJmDqqq33WbMmAFAkyZNWLVqFUlJSWRkZNCmTRvmzJlDXFzcLcdRVfW2lfYUReH48eN89913BfXtPBS7KY4NBgO1a9dm/fr1OdssFgvr16+nQYMGD3QMs9nM4cOHKVq0aH7FtEmKorB8+XJmzZrF8OHDb/latsnC0v3W0xrd6pbUIl6hoigKnz9bnSAvF87GpdH23RnyQiUcTlR8IoN/PoBFhWdqleDpOtIaUkv+3h4sGdYRg17HuuMx/LDjotaRhINxdXVl2bJl9OrVi7/++kvrOI/MbopjgKFDhzJ9+nTmzp3L8ePHee2110hLS6NPnz4A9OrVixEjRuTs/+GHH7JmzRrOnTvHvn37ePHFF7l48SL9+vXT6lvQjJOTE3369EGvv7WNy9Yz8SRlGCni5ULjcoEapStcAjxdGN2mFKpq4bIhlBHfLbz/g4SwE6qq0n7kHK4mZlDM28AHnSprHUkAVYv78O4T1jnfH604xuodhzROJByNq6sr7777Ls8884zWUR6ZXRXH3bp144svvmDUqFFERERw4MABVq1alXOR3qVLl4iKisrZPyEhgf79+1OpUiXat29PcnIy27Zto3LlwvHHeufOnXzzzTf3HJlccaN9W/uqIeh1ciFeQelQtzx1Pa4DsDLel9jkTI0TCZE3pv65hwSf8qgWM4Pq+eDl6qx1JHFDn0alqVPMhWyzyqtzdpCYkqp1JCFskqLKOd17Sk5OxsfHh6SkJLuaf5yWlkaNGjU4e/Ysn376KW+//fZt+2SZzNT5aB0pmSYWvtKAemG225DbEWUZzTwzdRtHribTvGIRZveuK51ChF27kpDOExP/JiXTRMugTGYNtf8RJEdz6lI0rb/ajOLqSfcafozv3lDrSA4tMzOT8+fPExYWJiv0FpB7/cwftKazq5Fj8eDc3d0ZMmQIFStWZMCAAXfcZ8vpeFIyTQR5uVCnlPQ2Lmguznq+7hqBwUnHppNxTFq5X+tIQuSa2aIydOFBUjJN1Czpy7Q3n9Y6kriDCiVDGNHKOgf8l0MJ7L2YoHGiwsFikUVYCkpe/Kxl/U4HpSgKAwcOZMCAATg73/m05s0V8dpXK4pOplRoonywF289Xpbxq0/z+bpzhPsptG5QU+tYQjy0V75ayK54TzwMeiZ0i8BJL2MvturVJx/jZNoBlu6/ylsLD/Dnm01wl+W884XBYECn0xEZGUmRIkUwGAxyhjCfqKpKdnY2cXFx6HS625awfhjyv8HBpKam4ubmlnPh3d0K40yjmbXHrG3xnqxeuLp32Jp+Tcsxcckm0j2K88HKc7SsHyHzv4VdWbphB2ujXVCcYGDDEEoFeGgdSdzHB52qsOPcNS5cS+fJ/81kw+evaB3JIel0OsLCwoiKiiIyMlLrOIWCu7s7JUuWRKfL/Rt0KY4dTP/+/bl48WLOoh938/fpeFKyTIR4u8py0RrT63XMf6Mt3ecd4Wq2K9P+OsdrzctqHUuIB2I0W5iyPw3FyRnf9Mu81vbeK2MJ2+Dj5szghoG8s/IK5/Ql+HL+n7zVQ353+cFgMFCyZElMJhNms1nrOA5Nr9fj5OT0yKPzUhw7kEuXLvHHH3+Qnp5OUlLSPff945D1HaxMqbANNSuUYmxnHcMXH+KrtSdpXrEIlYrazwWgovCauuksp+Iy8XFzZungrnLK2I50a1aDWat2c1Ityi8XDPRLN+LjLt1F8oOiKDg7O9/1bK6wLbkac05LS2PkyJE0bNiQcuXKUaZMmVtuQhslS5bkyJEjzJ49mzp16tx1P6PZwvoTsQC0r/ZgqwuK/Pds7RK0rhyM0azS7es/SUyWNkvCth25ksA3G04DMKZTFcJCpOONvVn6QW/KFPEgNiWLkcuOaB1HCJuQq5Hjfv36sXnzZnr27EnRokVlpMCGlCxZkp49e95zn70XE0jJNOHvYaCmTKmwGYqi8PHTVVl34BzJBi9e+Gguf342UOtYQtxRcmo6T338K2bvorSuFMRTEcW0jiRywd3Fia+7RtBlyjaWH4ykQXED3ZtW0TqWEJrKVXG8cuVK/vjjDxo1apTXeUQurFmzhmLFilG1atUH2n/jjVHjZhWKyIVfNqaIlyt9qrsz6wSc1JfmWGQylYvJ9Aphe17/7nfM3kVRM1N4u2VtGSSxYzVCfXmpfnFmbb/CO4sPUC/Mn7KhcqG2KLxyNa3Cz88Pf385fWYLYmJieOGFF6hVq9YDr2e+4UZx3CI8KD+jiVwa+VIH2lYOwqzC8MUHMZqlP6awLUeuJrEt0QuAvjU8KR8q07Ps3ZBWFdClxqJz9+Wdn3dpHUcITeWqOB47diyjRo0iPT09r/OIh6QoCo0aNaJy5co89thj993/8vV0TsemotcpNCtfpAASioelKApjn66Gr7szRyOTmbLhlNaRhMiRZTLz1sKDmCwqHaoVZVSfJ7WOJPKAl4cbnzxdFQXYc82JTSdjtY4khGZytXx0zZo1OXv2LKqqUrp06duuvty3b1+eBdSaPSwfraoqCQkJDzSaP2/7BUYtO0q90v4sfLVBAaQTubVk3xWGLjyIajYyuWMJnmx694sshSgog6atZvk5EwEeBtYMaUqAp4vWkUQeGrviGDO3nKeYjyurhzTFy1W6KwjH8aA1Xa7mHHfu3Dm3uUQeUVU1Z46foigPPM1FplTYj6drFmfM7N9J8ijJiN+O8kTj2jJHXGhq6YadLDudiaJ3YkTbslIYO6BhbSqy7ngMF6+l8+Lni1k2srvWkYQocLkqjkePHp3XOcRDeuWVVwgODub999/HxeXBXqAyss1sP3sNgJZSHNs8RVH4YVAHnp15gBRDILO3nqdfE2mVKLRhtqhM2BaHonfCL+0Sz9SVBSMckZtBz/ttwuj/01EOpnnzzc8rGfT8E1rHEqJA5X5tPWDv3r38+OOP/Pjjj+zfvz+vMon72LdvH9OnT2fcuHEcOnTogR+37Ww8WSYLxX3dqBDsmY8JRV6pXr4kH3aJAOCLNSe5EJ+mbSBRaM3eep6LqQoeBj0/Dukk3SkcWOsapSltugzAgjM60rNNGicSomDlqjiOjY2lZcuW1K1bl0GDBjFo0CBq167N448/TlxcXF5nFP9Rs2ZNFi1axAcffEDdunUf+HE3p1S0DA+SFzY70q1uKI3KBZBptNBv2kaMRnmhEgXr8vV0vlxjvTD0fx0qU6VMcY0Tify2eOSLFPNxJTrVxOerT2odR4gClavi+I033iAlJYWjR49y/fp1rl+/zpEjR0hOTmbQoEF5nVH8h6IoPPvss4waNeqhHrflTDxg7W8s7IeiKHzSpTo6i5EzyQqvfP6D1pFEIWKxWOj88UIyjGbqh/nzfN1QrSOJAhDo48n4Z6oDMGfbBXadv6ZxIiEKTq6K41WrVvHdd99RqVKlnG2VK1dm8uTJrFy5Ms/CiVudP3+ezMzMXD32SkI6F6+lo9cp1C8jPartTai/O48XsS4n/XdKIFcSpI2iKBiDJ/7MNaciqKZs/tcmDJ1cFFpoNKtQhGdrF0dV4fmvVnA9KUXrSEIUiFwVxxaL5bb2bQDOzs5YLLJgQX7Izs6mY8eO1KhRgyNHjjz047fduBCvRgkfac1jp6YM6U61EDeMqo4RSw6Tiy6MQjyUuJQsNiVZ30w38kmiepgs9lHYDG5WEjU9EYtHIAO+WaZ1HCEKRK6K45YtW/Lmm28SGRmZs+3q1asMGTKExx9/PM/CiX+cOXOGa9eukZCQQNGiD7+s57YbUyoalg3M62iigDg56ZnYox4uTjr+Ph3Poj1XtI4kHNwHy4+SnGmmSjFv5o7oqXUcoYESQf68VtcPgH3pfhy8nKhtICEKQK6K40mTJpGcnEzp0qUpW7YsZcuWJSwsjOTkZL799tu8ziiwTls5fvw4y5cvJyAg4KEeq6oqW2+MHDcs93CPFbalTBFP3mpTAYARC3dz8NQFbQMJh7V87wX+OByFXqfw6TPVcXbSax1JaOTdnu3pVKMYFhXe+fWQLGkvHF6uVsgDa8G1bt06Tpw4AUClSpVo1apVnoazBfawQt79nI5JofXXf+HipOPg6Da4OsuLnD0zmS1UGTybLI8Q/NIusv/b/9M6knAwl6LjaPLxahR3P/o1LMn7nappHUlo7FpqFq2+2kxCupHuVTwY37O51pGEeGgPWtPlus+xoii0bt2aN954gzfeeMMhC2NbMH/+fDZv3vxIx7g537huaX8pjB2Ak17HF11rgmomwaMUq45EaR1JOJjBszehuPuhpMbxegtZeEZAgKcLb7ey/ltYcDCR1dsPaBtIiHz0wCvkffPNNwwYMABXV1e++eabe+4r7dzyxoULF3jllVdIS0tj48aNNG/ePFfH2XpjvnGDsjKlwlF0bFKLk+keTNp4hpHLjtKgTCA+7nKhpXh0O85dY1+SOwAj25bB18tD40TCVnR7rAzj5q8h1asUn6y/TOv6NaR7iXBIDzytIiwsjD179hAQEEBYWNjdD6gonDt3Ls8Cak3LaRVJSUm88847HD9+nI0bN6LTPfxAv9miUvPDNSRnmvhtYCMiQn3zPqjQRKbRTPtv/uZcXBpPVSvCxB71tI4k7Fym0Uy7CX9x4Vo6L9QvycdPy3QKcau9J87z4vwTZBgtjH2qCj0blNY6khAPLM+nVZw/fz7nQrDz58/f9ZbfhfHkyZMpXbo0rq6u1K9fn127dt1z/0WLFhEeHo6rqyvVqlXjzz//zNd8ecnHx4epU6eydu3aXBXGAEeuJpGcacLL1YlqxX3yOKHQkquznk9vNOlfdjiObxeu0TiRsHevT13JhWvpBHu78O4T4VrHETaodngY7z5hXePgk5UniEzM0DiREHkvVxXXhx9+SHr67YsQZGRk8OGHHz5yqLv55ZdfGDp0KKNHj2bfvn3UqFGDtm3bEhsbe8f9t23bRvfu3enbty/79++nc+fOdO7cOVd9gguS2Wy+5XODwZDrY92cb/xYmQD0cvrL4dQt7U+p7IsATN6dQEa2+T6PEOLOFq3fydrL1i4E7zxeCm/phy7uoudjpahdyo+0bDPPfrJY1jcQDidXxfGYMWNITU29bXt6ejpjxox55FB389VXX9G/f3/69OlD5cqVmTp1Ku7u7syaNeuO+0+cOJF27doxfPhwKlWqxNixY6lVqxaTJk3Kt4x5oWfPnvTr14/ExMRHPtaeC9cBqB8mq+I5qp/f6463k5lMvSdfrzuldRxhh0xmC5N2XkfR6fFPu0CX+uW1jiRsmE6n8L/WpVHNRiLxZ8SUX7WOJESeylVxrKoqinL7KOTBgwfx98+fIiw7O5u9e/fe0hVDp9PRqlUrtm/ffsfHbN++/bYuGm3btr3r/gBZWVkkJyffcitIR44c4aeffmL27NmcPXv2kY6lqir7LiUAUKe0FMeOqmigHxNerA/AjL/PcehKoraBhN2Z/vd5LiZb8HZ14pe3n9E6jrADtcoVo7ZrHACr4ry4npatcSJhT1RVZePe48SnZmkd5Y4eqjj28/PD398fRVGoUKEC/v7+OTcfHx9at25N165d8yVofHw8ZrOZ4ODgW7YHBwcTHR19x8dER0c/1P4A48ePx8fHJ+cWGhr66OEfQtWqVfn777/58ssvqV279iMd63x8GgnpRlycdFQuap89msWDaRkenNOkv9+0TaRn2uYfHGF7zsenMeHGGYdRHatQPlSWiBYPZv77vakY7ElSppmxK45pHUfYkZ9+WcSLUzbR6KOV7L14Xes4t3ngVm4AEyZMQFVVXn75ZcaMGYOPzz8XeBkMBkqXLk2DBg3yPGRBGjFiBEOHDs35PDk5ucAL5MaNG9O4ceNHPs6+S4kAVCvug8Ep1y2thZ0Y3bEyf+w9SyxuvDT+BxaN6ad1JGHjTCYzncctJMsliCblA3mmVnGtIwk74ubizKfP1qDLd1tZuv8qHaoG0apKMa1jCTuw4GACzoElUTBSJtBT6zi3eaji+KWXXgKsbd0aNmyIs3PBXbARGBiIXq8nJibmlu0xMTGEhNx5pCMkJOSh9gdwcXHBxcXl0QPbgL0XrVMqapfy0ziJKAgBni48XdrC4iuwLzuEM7GplAuyvT86wnYMnfwrSS5BqMZMhjUrfsfpckLcS0SoL70eK8mc7Zfo9/16do7uSHCAr9axhA07cjWJ40ooqCqfdauFn0fumw7klwceTvz33NuaNWuSkZFx29zc/JyjazAYqF27NuvXr8/ZZrFYWL9+/V1Hqxs0aHDL/gBr1661+9HtB7X/xnzjmiWlOC4sPvu/Z2kU5otZVRix5BAWS65WhxeFQHRSJhuuW6dbtQhIpUa5EhonEvZqYNNSkBoP7v4M/H611nGEDcs2WRi26CBmi0qHakXpVLOk1pHu6IGLYz8/v5yWab6+vvj5+d12u7k9vwwdOpTp06czd+5cjh8/zmuvvUZaWhp9+vQBoFevXowYMSJn/zfffJNVq1bx5ZdfcuLECT744AP27NnD66+/nm8ZbUVyppGTMSkA1Crlq20YUWB0Oh2fdq2Ju0HP7gsJzN95UetIwgapqsr7vx0hNctMRKgvM9/tpXUkYceK+HnzVjPrdIq9KZ42OYdUaC8jI4Mu70/lRHQK/h4GxjxVRetId/XA0yo2bNiQ04li48aN+RboXrp160ZcXByjRo0iOjqaiIgIVq1alXPR3aVLl25ZLKNhw4YsWLCA999/n/fee4/y5cvz22+/UbVqVU3yF6SDlxNRVQj1dyPIy1XrOKIAlfBz5+22Ffng92OMWrKfKn4qtcLvvqqlKHwWbDnJuuMxOOsVPn2muvRAF4/sjedac5GDLN57hXd+Pcwfgxrj4qTXOpawIUPGfM5hcw0UPXzQsTKBnrY7hfWBl48urLRcPvpRTFh3ignrTtM5ohgTnq+pdRxRwExmC5XfmE62dwn8M6+y9+v+Mp9UAHA+Mpbmn65HcfNmQKNQ3utYXetIwkEkpmfT6qu/iE/NolNZZ77p30brSMJGGM0WWn+2mgtJFqr7qywb3kGT16Q8Xz7631atWsWWLVtyPp88eTIRERG88MILJCQk5OaQIo/d7FRRSy7GK5Sc9Dom9qiHopq57lqc5QcjtY4kbMTw+TtQ3LxRkqN5vUU5reMIB+LrbmBYS+sc0mWnMvhj6wFtAwmbMe2vc1xIsuDj5sSM11rZ/GBNrorj4cOH51x4d/jwYYYOHUr79u05f/78LW3QhDYsFjXnYrxacjFeofVEo5oMbl0JgDG/H5Mm/YK/TsWx55oeBRjbqRLenu5aRxIOputj5fBOPo+id+KLzZGY5aLgQu/Y1UQmrjsNwOiOVexiqmeuiuPz589TuXJlAH799Vc6duzIxx9/zOTJk1m5cmWeBhQP70xcKimZJtwNesJDvLSOIzT0WvOyVAy2rl71zs+7tI4jNJSaZWLEksMAvNSwNC+2a6hxIuGIdDodPw7thKdBz/lkldlbz2sdSWjoxMlTtP9gPtlmCy3Dg3i6pn30Us9VcWwwGEhPTwdg3bp1tGljnVfk7+9f4Msti9vtu9HfuHoJH5z0svhHYWZw0vHJM9VQVJW1p5OY8PMarSMJjbw8YRlXEzMo4efG8LYVtY4jHFj1ciV5r4N1AO3LNae4fD1d40RCKwMn/QYBpdGZshjXuarNT6e4KVeVU+PGjRk6dChjx45l165ddOjQAYBTp05RooT0ytSaLP4h/q1mST/CTNaWbtP2p5CaZdI4kShoM3/fzK4E66nMd1uG4uHyUOs/CfHQnq8bSv0wfzKMZp4evwiLxaJ1JFHATkancMnb2h3sndZlKOrrpnGiB5er4njSpEk4OTmxePFipkyZQvHi1mHylStX0q5duzwNKB7ePplvLP7jp/d6EOgK6YorX6w+qXUcUYAyss3MOJQJQNH0czxZt7zGiURhoNMpDG9eHNWURbw+kHemLtU6kihARrN1sQ+jWaVVpSAGtKmhdaSHkqvhg5IlS7JixYrbtn/99dePHEg8msT0bM7GpQGyMp74R3CALxN61OfFmTuZu/0CHWsUkzMLhcRXa08SlWIi2NuFJcN6ah1HFCJ1KpaknvsqdmcXZ3WsJ2+nZFHEy3Z724q8oaoqw2au4fBVMz5uznz8dDW7mU5xU64npJrNZn799Vc++ugjPvroI5YuXYrZbM7LbCIX9t9o4VYm0AN/G1yvXGincflAnq1dAlWFft9vIDUjS+tIIp/tu3idmVusF0SN71KNooG+2gYShc6CUX2pUsyb5EwTHyw/qnUcUQA+mfojv522nq0a06kyQd62353iv3JVHJ85c4ZKlSrRq1cvlixZwpIlS3jxxRepUqUKZ8+ezeuM4iHcnG8s/Y3FnfyvfTi6rFQSLK70Gv+j1nFEPkpNz6Tbl79jUeHpmsVpGR6sdSRRCDk76XNWYfzjcBTL9kj3CkeWbbKw5Ko7it6ZMoZknoqwj+4U/5Wr4njQoEGULVuWy5cvs2/fPvbt28elS5cICwtj0KBBeZ1RPASZbyzuxc/Dha7lrae3DhhDOBEt3WUc1YCJSzG6B2JJT2RQ46JaxxGFWNXiPrxU33qx/pvzthEZJ4uFOarJG88QZ3LF20XHgqGd7G46xU25Ko43b97MZ599hr+/f862gIAAPvnkEzZv3pxn4cTDMZktHLicCECtUr6aZhG26+NXn6VlxUAsKryz+BAms1xF7miOXE1iZ4oPAC9VcSWsuIwaC20NbFYaUmLB3Zchc//SOo7IB0euJjF54xkAxnWpQYivh8aJci9XxbGLiwspKSm3bU9NTcVgkHmuWjkZk0J6thkvFyfKB8niH+LOdDodH3epgZerEwevJDF1s0yFciRGs4Xhiw9htqh0qFaUsa88o3UkIQjw9WZEq1IA7Ix3YvOpOI0Tibx0NSqGrl/+jsmi0r5aCE9Wt++zVbkqjp988kkGDBjAzp07UVUVVVXZsWMHr776Kp06dcrrjOIB7btxMV5ESV/0Ovs8lSEKRoiPKx90rALAF6uOsXrHYY0TibzywS9bOR6VjJ+7Mx90qqJ1HCFyvPJ0S3o3LA1Yz1olZRi1DSTyTPeP5pFu8EOXncbYp+xnsY+7yVVx/M0331C2bFkaNGiAq6srrq6uNGzYkHLlyjFx4sS8zige0M2V8WS+sXgQT9cshkfSOdA5MXThfowyvcLurdl5mB/3XwPg7VZh0jZL2Jy321WkdIA70cmZ9Jn4u9ZxRB44eDmRK97WFRGHNi1GgKf9/93JVXHs6+vLsmXLOHXqFIsWLWLRokWcOnWKpUuX4uPjk9cZxQPKuRhPOlWIB6DT6fhhUHucVSNphgC+2yjTK+yZyWxh7JoLKHpnPBLP0u2xslpHEuI27gYnRj9RFlW1sC/Rha9kSXu7lmk0M2zRQSwqdKxelNc7N9Y6Up7IdZ/jmTNn0rlzZ5577jmee+45OnfuzIwZM/Iym3gI8alZXLyWjqJARKiv1nGEnahVqSxfdK8LwLcbTnM0MknjRCK3pmw6y+U0HR4GHfMGdUCny/WfdyHyVYuqJSmTfQGAH06YSUzP1jaQyLUxS/dxOjaVQE8XPnyqqtZx8kyu/nqOGjWKN998k44dO+aMHHfs2JEhQ4YwatSovM4oHsDNKRXlgzzxcXPWOI2wJ51qFKNdlRBMFpVXZm0lPVNeqOzNkatJTFx/GoCPnq5G7coyaixs2+LRLxEW4E5CpoUxvx/TOo7IhfEzf+WnfbEAfPpMNfwcaOGxXBXHU6ZMYfr06YwfP55OnTrRqVMnxo8fz7Rp0/juu+/yOqN4AHtvTKmQJYHFw1IUhY+eropBzeZKqkrPT+ZrHUk8hNT0TLp9/Scmi8oTVUPobKdN90XhEuDrzZfdItApsHT/VVYfidI6kngISRlGZh+3ropcTonh8UqO1S4yV8Wx0WikTp06t22vXbs2JpPpkUOJh7f/YiIANeViPJELgZ4uPFU8A4B9mUU4dCVR20DigT3/8QLSnLxRM5IY3aGi3V8lLgqPWiX9GNDUepbj1Zl/cSEqXuNE4kGNWnaEbCcP/A1mFr33vNZx8lyuiuOePXsyZcqU27ZPmzaNHj16PHIo8XCyTRYO3ihmpFOFyK3P3uhO01LuqCgM/uUAGdlmrSOJ+9hx7hpHTdYRmz5VXQjx89Q4kRAPZ2DTUpAUheriSa9vVqKqqtaRxH0sPxjJsgOR6HUKM/s1wc/LXetIee6RLsirWrUq/fr1o1+/flSrVo3p06ej0+kYOnRozk3kv+NRyWSZLPi6O1Mm0H5XpBHaUhSFib0aEeztwrm4NMb9KfMAbVlKppFhiw6iAt3qhvJBf1nsQ9gfLw83Pu5UAR0WLqn+LNxzWetI4h52Hj7F8J/3APB6i3IOe7baKTcPOnLkCLVq1QLg7Flr+6fAwEACAwM5cuRIzn5yeq9g3GzhVjPUF50s/iEegZ+HgS+eq0HPmbv4ccclArJiGNKtldaxxB28t2gvVxIyKOHnxsgnK2sdR4hce+GJpiS7n+WTlScY8/sx6oUFECYDPTbHZDLz0nfryPIpha8liddbltM6Ur7JVXG8cePGvM4hHsHei3Ixnsg7TcoXobzlMqd1oUzcHk/3tmmE+MoLlS356ue1/H40G1D54rkaeLrk6k+5EDajf5MybDoZy45z1+k9dSNr3mmHi7P8u7Ylc7dfJNOnFKopi4kv1MRZ77jtIh33OytE9t9YNlrmG4u88vN7L+CaeQ1cvRix9KjMA7QhscmZTN2fCkDpzLM8ViZA40RCPDq9TuGrrhE4WbK5mKrQ4+MftY4k/uVoZBKfrjoJwJjONWhWq5LGifKXFMd2Ljopk6uJGegUqCGLf4g8EuDrzbJ3n8bgpGPjyTh+3HFR60gCsFhUhiw8QLZioKiriV8/6KN1JCHyTDFfNzoWTQNgb0Ygey5c1ziRAIhLTGbg/H1kmy20qhTMS43KaB0p39lNcXz9+nV69OiBt7c3vr6+9O3bl9TU1Hs+pnnz5iiKcsvt1VdfLaDEBePmfOPwEG885NSqyEMVQ7x4t104AGNXHOOvA6c0TiSmbD7L1jPXcDfo+XHg4wT4emsdSYg89dXgHrQq55XTNScl06h1pEKv4+gfuXAtnUB3PZ8/W71QXE9mN8Vxjx49OHr0KGvXrmXFihX89ddfDBgw4L6P69+/P1FRUTm3zz77rADSFpyb841rlfLVNohwSL0blqayv0K2WaXvjC2kZ8kLlVYWrt/NF6tPADCmUxXKFpG2bcLxKIrC1y82oISfG1cSMhi17KjWkQq1WRuOEu1WCtViZkA1g0OtgncvdlEcHz9+nFWrVjFjxgzq169P48aN+fbbb/n555+JjIy852Pd3d0JCQnJuXl7O9ZIyz5ZGU/kI51OYUz7slgyUjB6BvPhskNaRyqUriWn886yE6golLTE8GztElpHEiLfeLk6M+Ffq+f9b/pyrSMVSmfjUvlik7W1XquQLAY83VLjRAXHLorj7du34+vre8uqfK1atUKn07Fz5857Pnb+/PkEBgZStWpVRowYQXp6+j33z8rKIjk5+Zabrco0mjlyNQmQi/FE/qlbtSLvPR4KwM/7ovnzsCzzWpBUVWXU7ydQ3f1R0uKZO6h9oTitKQq3OqX9qa6zFmY/njRz5LLMPy5ImUYzry/YT3q2mYZlA5g2+FmtIxUouyiOo6OjCQoKumWbk5MT/v7+REdH3/VxL7zwAj/++CMbN25kxIgR/PDDD7z44ov3fK7x48fj4+OTcwsNDc2T7yE/HI1MwmhWCfQ0UNLf8VaoEbbj1U6NeLWZdZnXtxcf4lzcvef7i7zz8+7L/HE4CiedwpLhHQkrEaJ1JCEKxC+jXsY/OwbFycCbCw+RlmXSOlKh0W38zxyPSibAw8CEbhHoC9kaCpoWx+++++5tF8z993bixIlcH3/AgAG0bduWatWq0aNHD+bNm8fSpUtzFi65kxEjRpCUlJRzu3zZdlfruTnfuGZJPxlJEvluWJsK1C3tR2qWiSfGLiY1I0vrSA5vy+GzjFlunXP5druK1Czpr3EiIQqOi4uBtR/2IMTblbNxaby39LC0lSwAX/6ynoPpvgC81bgIQd6u2gbSgKbF8VtvvcXx48fveStTpgwhISHExsbe8liTycT169cJCXnwUZT69esDcObMmbvu4+Ligre39y03W7XvYiIg841FwXDS63j/8eJY0pPIci/CSxNXaB3JocUmpNBr2hYyTRZqFXWlX2PHb58kxH8FeLrw7Qs10esUlh2I5H+zV2odyaGdiU1l1lHrhddhmWd4oUWEtoE0omnvryJFilCkSJH77tegQQMSExPZu3cvtWvXBmDDhg1YLJacgvdBHDhwAICiRYvmKq8tUVWVvTcuxpP5xqKg1Chfildr7GXaaZW9ia4s2XeFLrXk4rC8ZrGovPnTXiwegVhS4/mgXRNZGl4UWnVL+9OjqifzDqUw/3g2TXYc4YnHqmody+GkZBp55Yc9pGWbqRfmz+xer2gdSTN2Mee4UqVKtGvXjv79+7Nr1y62bt3K66+/zvPPP0+xYsUAuHr1KuHh4ezatQuAs2fPMnbsWPbu3cuFCxdYvnw5vXr1omnTplSvXl3LbydPXEnIIC4lCyedQvUSPlrHEYXIe3278ObjFQD439IjnI5J0TiR45m08QzbL6Vh0Ct82rEc1SvKqLEo3N5/tgFu10+j6J35aGM0ydL/OE9ZLCp9p23mbFwaId6uTH6hFh5uhW86xU12URyDtetEeHg4jz/+OO3bt6dx48ZMmzYt5+tGo5GTJ0/mdKMwGAysW7eONm3aEB4ezltvvcUzzzzD77//rtW3kKdutnCrUswbV2e9xmlEYTPo8fI0LhdIhtHM85PWcy05TetIDmP98Wi+XmddcOWjp6vRvW0jjRMJoT2DwZmVH7xAcV9XriZlMWzhQSwWmX+cV/p88TO7IrPQYWFqz9oU8XLROpKmFFVmt99TcnIyPj4+JCUl2dT849HLjjB3+0V6NyzNB52qaB1HFELxqVk0+GAZRicPimRHsfOLvnLq/xHtPnGBrtP3oDq70aN+ScY9XU3rSELYlIOXE3lu6nayzRb6PVaU9zvX0jqS3dt4MpY+s3cBCs3crjB3tONOp3jQms5uRo7FrfZdSgTkYjyhnUBPF96q541qNhJnKMrE9ae1jmTX0rNNvDxzO6qzG/qES7zfPlzrSELYnBqhvoztbB0QmrEjigmLNmicyL5diE/jzZ/2AwotQp2ZM+r+Kw8XBlIc26H0bBPHoqyLk9SS4lho6NWu7RjzpLWIm7j+NKuOyAIhuaGqKu/+epgUvTcGSyY/vNoUNxdnrWMJYZO61gklONna5nXSnhROyXUPuZKcnsUrP+4lOdNEzZK+TH3lcWkLe4MUx3bo0JUkzBaVEG9XivkU3gnzwjb0bhZO74alARj8ywHW7j2pbSA79N2msyw/GImTTuHH11rQsKZMlRLibhRFYfUnAwhzN2JSnOg7dzfXUqXv+sMwmS20Hjmfk9EpBHg4M/XF2rg4yfVLN0lxbIduLv5Rq5SvvMsTNuH9DpWoU8KTTKOF/vP2cvJyjNaR7MYnC9by+WrrG4rRnapQL0wW+hDifny9vfj1rfaU9Hfn8vUMBvywl4ws6WDxoN6ev40Y52BUUzZ9K1oILoQLfdyLFMd2aL/0NxY2xkmvY1yHMNTESHDz4f9+kqVeH8Sq3SeZss+6FHfjItn0fKyUxomEsB/+HgZm9a6Ll6sTey8m0HrkD7KC3gP4ccdFlhxLAqBjcBL/17WdxolsjxTHdkZV1ZyL8WS+sbAlFcNKMuOlOvi66Tl7PZs3ftqP0WzROpbNuhCfxv9WXUJxMuB67RTfvyYvUEI8rHJBnrxSRUE1m7iiC+ad+Vu1jmTTNpyIYfSNJenfal2BScN7axvIRklxbGdOx6ZyPS0bV2cdVYrZTms5IQBaN6jJrD71cXXWseFELG/9vEdGcu4gNiWTnrN2ci0tm6rFvdn+1St4uLtpHUsIu/T6c21o6W2dyrXwSBJztp7XOJFtWr7tCH1nbcdsUXm2dgleb1lO60g2S4pjO7P97DUA6pTyl8nzwibVKunHpO610Cmw/HAc3cf/pHUkm3I9OZ0nP/uTy9czKBXgzuze9fDzctc6lhB2bfbIAbzV2rpy55gVx/j9YKTGiWzL6ZgU3vz1OKrOGe/Uy4zvUk2uWboHKY7tzM3iuEHZAI2TCHF3rSoH08T1MgA7kn34fvMZjRPZhkyjmRajfybW6IKzOZN5L9cr9CtRCZFXXm9Zjl4NSqGqMGjBHmb9uV3rSDbhSkI6L83ahersjmtaFMve6YizXsq/e5Gfjh2xWFR2nLcWx4+VkeJY2LY5o16hiY/14tHxK0/yw46LGifSVpbJzIAf9pLkEowlO523H/OkVICH1rGEcBiKojC6YxWCs6+iKno+3BjNllOxWsfSVHRSJi9M30lkUiZli3iw7ZNehIUW1zqWzZPi2I6ciE4hMd2Iu0FP9RI+WscR4p4URWHeuz14rXlZAEb+doRZm05onEobRrOFgfP389epONyc9czoWYv+z7TVOpYQDkevU/jj/efwTL4AegMDftzH3ovXtY6liYuxCTQbs4RL19Mp6e/O/H6P4e9h0DqWXZDi2I5sP3djvnFpfzklIuyCoii83bYiLzcKA2DMytOMmbda41QFK8topv3Yxaw7HoOLk46ZL9WhTc2yWscSwmEF+vuxZ+KrNC4XSHq2md6zdrPnQuEqkGNTMun01VqyDD6oadeY27sWIbJo2AOTCsuO5Mw3likVwo4oisL7HcIJTDiGouiYfcxUaKZYZBrNtBi5gNOZHmAxMbl7DRqWC9Q6lhAOz9VZz/Redagf5k9KlolnJ21iwfq9WscqEJGJGXT7fgdJeKDPTuWrJ0sRFiRnmx+GFMd2wmxR2XleLsYT9kmn07Fl4hvUdE8ErFMspv91TttQ+Swty8TLc3YTiT+qKYseoSm0qlJM61hCFBpuBj2z+9TFM/UyOLnwv9VX2HjCsecgn4tN4bmp2zkfn0ZxXzfWv9eBZ9o20zqW3ZHi2E4ci0wmJdOEp4sTVaW/sbBDrq6uLBn5AgNbWKcUjPvzOAOnrcVicbw+yHEpWbwwfQfbzl7Dw6BnVq/ajHvjRa1jCVHouBucWDPyGfzSr6DqnOg/bw+/7r2idax8seHAGR4f/wdXEzMIC/Rg0asNKB3oqXUsuyTFsZ3Yfi4egHph/jjJfGNhpxRFYXjbcN5uVxGAP85l8/j7P5BlMmucLO/sOXWZhqOXcPBKEn7uzszv/xiPV5dloYXQSrHgIuz6uj+dahTDZFF5a9FBPlq616EWKNp4IpYBPx9DdfFCTbjCnF41KOYrCwvlllRZdkLmGwtH8n/Ny9HE+Ryq2cR5SwA9Z+7iWmqW1rEe2Y5z13h++m6MBm906ddZ/GoDIkJ9tY4lRKHnrNcxoVsErzaznrmasTOaJ0b/SKbRpHGyR6OqKj9sv0C/eXswoSfIcp0/hj5OqSA/raPZNSmO7UBKppGtN4rjRnIxj3AQP4x9g1HNAvBycWLX+et0mrSVw1eStI6VK6qqMnvreXrM2IlJ74JLahQ/vhRB2SAvraMJIW7Q6RTefSKcurpzqBYzJ7L96T5tJzHJmVpHy5XMbBPPf7WCkcuOYraoPFOrBFvH96BqRVkW+lFJcWwH1hyNIdtkoUwRDyoVlRdb4Tj6PtmYJf/XkLBAD64mZtDpm02MW7Derk53pmZm89KU9Yz5/Rhmi8pTEcU48FUfGtaupnU0IcQdLPr4DXqXycDb1Yn9lxPp8M0Wdp23r1ZvVxMzqDfiJ3bG6VBQefeJcL54rrq0ec0j8lO0A8tvrBHfqUYxWQtdOJzywV4se70RofokVJ0T0w9lMnD+HpIyjFpHu6/dZ2Op+e5C/rqUhU6BkU9WZkK3CNwMeq2jCSHuYcyr3fj9jcaEh3gRn5pFt6nb6P3lrxjNFq2j3dfvByNpN+Evkp39sWSk8LR/FK82Kyv1QR6S4tjGXUvNYssZ68V4nWpIGyjhmLxdnflzRCdKJR9Gh8qfR2JpP/Fvtp2N1zraHZnMFiZvPEP3mXswuvphTr3Gy2Gp9G0cJi9QQtiJUgEeLPm/hjQspkdVFDbFudLhq/Wci0vVOtodJaRmMnDeDt74aT8pmSYiQn35oWc1vnq7v9bRHI6i2tP5Sw0kJyfj4+NDUlIS3t4F30Lthx0XGfnbEaoW92bFG00K/PmFKGj7LyUw+JcDXLyWDkC4SyJzh3Qm2NdD42RWa/ed5otNVzkZmwZA6/BABtTyom71yhonE0Lkhslkot+HU9iaVRKj4oRBr+P/WpTlteZlcXHS/iyQqqrMWHuA8atOYTF4olPg9RbleOPx8jKN4iE9aE0nxfF9aF0cd526nV0XrvNe+3AGNJUlZ0XhkJpl4qPfj/DznqsAuGBiZOcIutUN1ezFIDYlk0HTVrM9Voei6PB1d+b9DpV5plZxGS0WwgFcTczg3V8P8fdp6xkrV2MyI9pVpFermpr9Hz8elczHfx7PyWROuMpHnSrzUofGmuSxd1Ic5xEti+PIxAwafrIBgG3vtpSehaJQUVWVsVN+ZM6RLCzeRQEoHeDO4Fbl6VSjODpdwbxYJWUYmfbXWWZtuUCG0dqP2S3mEBu/eoMQP2mwL4QjUVWVFYeieGv+drJ1rgDULuXH220rUr8AW6mevHqN//20jb3XdKgqGJx0tC+lY3DbKpQuWaLAcjgaKY7ziJbF8febzzJ+5Qnqhfmz8JUGBfrcQtiKLKOJn3ZdZtLGM8SnZgNgyEqkT+MyvPFkXTxdnPLleY9dimPkD+s5nOZBtsU6Wl2zpC/NfBN5o1s79HrtT7cKIfLH3kPHePWbpSQGRWC8cY1eRAlv2pRypn/7evlyBktVVfZeTGD6X2dYdSQGRWd9jg7VizK8TUVKB9rG1DJ75nDF8bhx4/jjjz84cOAABoOBxMTE+z5GVVVGjx7N9OnTSUxMpFGjRkyZMoXy5cs/8PNqVRzvv5TAC9N3kmE08/HT1XihfskCe24hbFFalomv/jjA9L/OonO1jth6ujjRtkoIT1YPoXH5Io/8gnU9LZtVR6JZcSiS7WfjUbGOTlcM9uStNhVpXTlYplAIUYjEJGcycf1pFu+5QvaNThYulkx6NKlExxpFiQj1feS/CWdjkpi5Zj/7ruk4EZ3yzxeijvH+UzXo16XNIx1f/MPhiuPRo0fj6+vLlStXmDlz5gMVx59++injx49n7ty5hIWFMXLkSA4fPsyxY8dwdXV9oOfVojg+HZPCc99vJzHdSNMKRZjRqw4GJ5l0LwTAwSPH+XbFLs45l+JcXFrOdsWYQfWi7nSsH07Nkn6UCfTAz8Nw1+NYLCqRSRmcjkll8V8H2HIyhhSDHxb1nxc6l2un6VDenXFv9MTNTaY1CVFYxaZk0uejWRxK90Hv4ZuzPdjLBa/MGJpXLkbnpjUJC/TE4x5ns7JNFi4npHM8Kpmd566z/WwcZ+LSc75ucNLxdERxOlf2oU75Yjg7O+fnt1XoOFxxfNOcOXMYPHjwfYtjVVUpVqwYb731FsOGDQMgKSmJ4OBg5syZw/PPP/9Az1fQxfHVxAyenbKNqKRMIkJ9WdC/Pu6G/DltLIQ9s1hUdl+4zu8HI/lh0xEUt9v/f+qMGfgYICy0KB4uTpgtKsfPnCfdqKK6+ZJtvv3PX+Wi3jxZoygdqxcj1N+9IL4VIYSdOH3uPIdiTWw+n8q64zGkZ5tv2yfIywVTWgJqdiZhocVwdnUnLdtE1LVkrqWbQfefKVmqBUvUCV5pX4eBnRrh6373N/Xi0TxoTeewVdf58+eJjo6mVatWOdt8fHyoX78+27dvv2txnJWVRVZWVs7nycnJ+Z7134YtPEhUUiblgjyZ3buuFMZC3IVOp1C/TAD1ywTQv44fc5dvwLd8HQ5EpnE8KpmopEwszm4kqJBwKfGfByreYADMKs56hVIBHpT2gsRTu+n0WCV6PSMtE4UQd1a+TBjly8Azj0Gm0cwPq7Yxc/kmjL6lwLso19KyiU3JAtzByZ2EqEzgX8tT6/RgyqJaqSBql/LjsTL+BCnJ1AhvL9cx2BCHrbyio6MBCA4OvmV7cHBwztfuZPz48YwZMyZfs93LZ89W551fD/HFczXueUpYCPGPUqElGDWw1y3bTpw+x++bdoKrF9Vq1iE924Rep7Bt80YsxgyebtOMelXK4ZQzT7lZwQcXQtgtV2c9/Ts2oX/Hf95QJ6UbuXAtjZ+XLCcq7jqPNWlO8ZAg64XDxgzizh+nbrWahIWF/etIRQs+vLgnTYvjd999l08//fSe+xw/fpzw8PACSgQjRoxg6NChOZ8nJycTGhpaYM8f6u/Ogv6PFdjzCeGowsuXIbx8mdu2PxXxogZphBCFgY+7MzXcfanxZq8771CtVMEGErmiaXH81ltv0bt373vuU6bM7S9uDyIkJASAmJgYihb9511ZTEwMERERd32ci4sLLi4uuXpOIYQQQghh3zQtjosUKUKRIkXy5dhhYWGEhISwfv36nGI4OTmZnTt38tprr+XLcwohhBBCCPtmN/3BLl26xIEDB7h06RJms5kDBw5w4MABUlNTc/YJDw9n6dKlACiKwuDBg/noo49Yvnw5hw8fplevXhQrVozOnTtr9F0IIYQQQghbZjcX5I0aNYq5c+fmfF6zZk0ANm7cSPPmzQE4efIkSUlJOfu8/fbbpKWlMWDAABITE2ncuDGrVq164B7HQgghhBCicLG7PscFLSkpCV9fXy5fvlzgy0cLIYQQQoi8cbPJQmJiIj4+Pnfdz25GjrWSkmJdyrEgO1YIIYQQQoj8kZKScs/iWEaO78NisRAZGYmXl9cjr5/+IG6+q5GRavsnv0vHIL9HxyC/R8chv0vHoMXvUVVVUlJSKFasGDrd3S+7k5Hj+9DpdJQoUaLAn9fb21v+0zsI+V06Bvk9Ogb5PToO+V06hoL+Pd5rxPgmu+lWIYQQQgghRH6T4lgIIYQQQogbpDi2MS4uLowePVpW6XMA8rt0DPJ7dAzye3Qc8rt0DLb8e5QL8oQQQgghhLhBRo6FEEIIIYS4QYpjIYQQQgghbpDiWAghhBBCiBukOBZCCCGEEOIGKY6FEEIIIYS4QVbIu4+CXj5aCCGEEELkPVk+Oo9ERkYSGhqqdQwhhBBCCJEHLl++TIkSJe76dSmO78PLywuw/iBlDXchhBBCCPuUnJxMaGhoTm13N1Ic38fNqRTe3t5SHAshhBBC2Ln7TZOVC/KEEEIIIYS4QYpjIYQQQgghbpDi2N6pqvUmhBBCCCEemcw5tmdZKTC9JVw/D57B4BUMdfpCzR5aJxNCCCGEsEtSHNuzQwsh/pT1fvIV6y36CIQ1BV9pPyeEEEII8bBkWoW9UlXYM9t6v/kI6L8BSjYAcxZsGKttNiGEEEIIOyXFsb26uhdiDoPeBeoNgOK1od1469cO/QKR+7XNJ4QQQghhh6Q4tlc3R42rPA3u/tb7xWpC9W7W+6vflwv1hBBCCCEekhTH9igjEY78ar1fp8+tX2s5Epxc4eIWOPlngUcTQgghhLBnUhzbo0MLwZQBRSpBaP1bv+YbCo+9Zr2/7duCzyaEEEIIYcekOLZHe+dYP9Z5Ge60BGLd/oACl7ZD4qWCTCaEEEIIYdekOLY36dch9qj1frVn77yPT3Eo3dh6/+b0CyGEEEIIcV9SHNubm32NvUv8cyHenVR7zvrx8OL8zySEEEII4SCkOLY3cSetH4tUuPd+lTuB3gAxRyDmWP7nEkIIIYRwAFIc25uc4jj83vu5+UH5Ntb7hxflbyYhhBBCCAchxbG9iTth/Vik4v33vTkn+fBisFjyL5MQQgghhIOQ4tje3JxzHPgAxXGFdmDwgqRLcGVX/uYSQgghhHAAUhzbk6wUSLpsvf8gI8fOblCpo/X+0aX5l0sIIYQQwkFIcWxPbo4aexS5d6eKf6v0pPXjyZWynLQQQgghxH1IcWxP4m4Ux/e7GO/fyjQHvQskXvznYj4hhBBCCHFHUhzbk4e5GO8mgweENbXeP7Uq7zMJIYQQQjgQKY7tycNcjPdvFdpaP55anbd5hBBCCCEcjBTH9iQ3I8fwT3F8eYd1+WkhhBBCCHFHUhzbC2MmJFyw3n+YOccAviUhqAqoFjizLs+jCSGEEEI4CimO7cW1M9bi1tUHPIMe/vE5Uytk3rEQQgghxN1IcWwvcqZUhIOiPPzjKz5h/XhmHZiNeZdLCCGEEMKBSHFsL262YQuskLvHF68N7gGQmQSXduRdLiGEEEIIByLFsb2Iv1EcP+x845t0eijX2nr/9Jq8ySSEEEII4WCkOLYX8aetHx+2U8W/lb9ZHK999DxCCCGEEA5IimN7kRJl/ehdPPfHKNsSFB3EHYfEy3mTSwghhBDCgUhxbA/MRshIsN7PTaeKm9z9oURd6/0zMnoshBBCCPFfUhzbg7Q460dFD27+j3asnHnH0u9YCCGEEOK/pDi2B6mx1o8egaB7xF/ZzXnH5zeDKevRjiWEEEII4WCkOLYHN0eOPR5hSsVNIdWtx8lOhUvbH/14QgghhBAORIpje3Bz5NizyKMfS6eTrhVCCCGEEHchxbE9SLs5rSIPRo4ByrWyfpTiWAghhBDiFlIc24PUG9Mq8mLkGKBsC+vFffEnIeFi3hxTCCGEEMIBSHFsD/J65NjND0LrWe9LSzchhBBCiBxSHNuDnDnHeVQcw7/mHUtLNyGEEEKIm6Q4tgc53SryaFoF/NPv+PxmMGbm3XGFEEIIIeyYFMf2ID9GjkOqgWcIGNPh0ra8O64QQgghhB2T4tjWmU2Qfs16P6/mHAMoCpSXrhVCCCGEEP8mxbGtS78GqIAC7gF5e+zybawfpTgWQgghhACkOLZ9NztVuAeA3ilvj12mOeic4NppuH4+b48thBBCCGGHpDi2dTnzjYPz/tiuPhD6mPX+GelaIYQQQgghxbGtS8vjBUD+K2fe8Zr8Ob4QQgghhB2R4tjWpebxAiD/dXPe8fm/wZiRP88hhBBCCGEnpDi2dWn50Mbt34Iqg3cJMGXAuc358xxCCCGEEHZCimNbl5oPC4D8m6JAeHvr/RMr8uc5hBBCCCHshEMXx+PHj6du3bp4eXkRFBRE586dOXnypNaxHk5+jxwDVLxRHJ9aBRZz/j2PEEIIIYSNc+jiePPmzQwcOJAdO3awdu1ajEYjbdq0IS0tTetoDy5n5Dgfi+PSjcHFx3rx35Xd+fc8QgghhBA2ziaL42bNmjFv3jwyMh7tArFVq1bRu3dvqlSpQo0aNZgzZw6XLl1i7969eZS0AOSMHOfTtAoAvTNUuHFh3ok/8u95hBBCCCFsnE0WxzVr1mTYsGGEhITQv39/duzYkSfHTUpKAsDf3/+u+2RlZZGcnHzLTTMWC6TFW+/n58gxQHgH68cTf4Cq5u9zCSGEEELYKJssjidMmEBkZCSzZ88mNjaWpk2bUrlyZb744gtiYmJydUyLxcLgwYNp1KgRVatWvet+48ePx8fHJ+cWGhqa22/j0WVcB/XGHGCPwPx9rnKtQG+A62ch/lT+PpcQQgghhI2yyeIYwMnJiS5durBs2TKuXLnCCy+8wMiRIwkNDaVz585s2LDhoY43cOBAjhw5ws8//3zP/UaMGEFSUlLO7fLly4/ybTyamz2O3fytUx/yk4sXhDWz3peuFUIIIYQopGy2OL5p165djB49mi+//JKgoCBGjBhBYGAgTz75JMOGDXugY7z++uusWLGCjRs3UqJEiXvu6+Ligre39y03zRREp4p/y2npJvOOhRBCCFE42WRxHBsby5dffknVqlVp0qQJcXFx/PTTT1y4cIExY8YwY8YM1qxZw9SpU+95HFVVef3111m6dCkbNmwgLCysgL6DPJLfPY7/q2J7QIGreyFRwxFzIYQQQgiNOGkd4E5KlChB2bJlefnll+nduzdFitxeHFavXp26deve8zgDBw5kwYIFLFu2DC8vL6KjowHw8fHBzc0tX7LnqYIeOfYKgVKN4OIWOLoEGr1ZMM8rhBBCCGEjbLI4Xr9+PU2aNLnnPt7e3mzcuPGe+0yZMgWA5s2b37J99uzZ9O7d+1EiFoybc47zu1PFv1V7xlocH/lVimMhhBBCFDo2Oa1i9OjRJCYm3rY9OTmZli1bPvBxVFW9480uCmOwLsoB+dvj+L8qPQWKHqIOQvyZgnteIYQQQggbYJPF8ebNm8nOzr5te2ZmJn///bcGiTSSVsBzjgE8AqBsC+v9o0sK7nmFEEIIIWyATU2rOHToEGAd8T127FjOHGEAs9nMqlWrKF68uFbxCl7mjQVIXH0K9nmrPgNn1sHhxdB0OChKwT6/EEIIIYRGbKo4joiIQFEUFEW54/QJNzc3vv32Ww2SaSQrxfrRpYDbyYV3sC4IEn8SYo5CyN0XTRFCCCGEcCQ2VRyfP38eVVUpU6YMu3btuqVLhcFgICgoCL1er2HCApZ1Y+S4oItjVx8o38a6GMiRX6U4FkIIIUShYVPFcalSpQDrUs+Cf4pjVw0WIqnaxVocH14ELUeCzianpwshhBBC5CmbKY6XL1/OE088gbOzM8uXL7/nvp06dSqgVBpS1X9Nq/Aq+Oev2N46gpx0Gc5vgrIP3iVECCGEEMJe2Uxx3LlzZ6KjowkKCqJz58533U9RFMxmc8EF00p2Gqg3RtALeloFgLMbVOsKu6fDvnlSHAshhBCiULCZc+UWi4WgoKCc+3e7FYrCGP6ZUqHorYWqFmr1sn48vgLSrmmTQQghhBCiANlMcSz+4+aUCldv7VqpFa0ORSPAYoRDP2uTQQghhBCiANlkcTxo0CC++eab27ZPmjSJwYMHF3wgLdzscazFfON/uzl6vG+edR60EEIIIYQDs8ni+Ndff6VRo0a3bW/YsCGLFy/WIJEGspKsH10KeAGQ/6r2LDi5QdwJuLJb2yxCCCGEEPnMJovja9eu4eNze1Ho7e1NfHy8Bok0oGWnin9z9YEqT1vv75mtbRYhhBBCiHxmk8VxuXLlWLVq1W3bV65cSZkyZTRIpIFMDXsc/1edl60fjyyGlOh77yuEEEIIYcdsppXbvw0dOpTXX3+duLi4nGWk169fz5dffsmECRO0DVcADh8+jHnXFiLglpHjjIwM3Nw06FwRWhdC68PlnbBrGjw+quAzCCEemaqqJCUmkBp/lRL+7pCZCKZsDh/cS1xMNOXDqxBauiw4u2F28SEqMYug4qUwGAxaRxdC2ClVVUlLS8PT0zNn2/r164mLi6NLly42+ffFJovjl19+maysLMaNG8fYsWMBKF26NFOmTKFXr14ap8t/v/zyC85bfyCimUtOj2NVVfHz88PLy4s9e/bkrCYYGRmJyWQiNDQUJT+7WjR43Voc754JTd4Cg0f+PZcQ4pGdObCNy3tWUi3YiUBLLCRcJCv6FJ7p0fjqbv1bUe3mnav/bNMDJYCkTBXnklVR/EpBQFnOprgQqwRSsXFn/IOKFtB3I4SwddnZ2Rw8eJDw8HC8vKwDewsXLuSll16iceNGrP3zd8hMgqxUJn/wBmdPn6RttXUYKjYCJ9sqkBVVte0WBHFxcbi5ud3yjqMgJScn4+PjQ1JSEt7eBTPFYfr06fjs+JSuoXHQaDC0HkNqamrOP7aMjAxcXV0B+OCDDxgzZgyvvvoqU6ZMyb9QFjN8WxsSzkP7L6Be//x7LiHEQzEZjVzcv5GyXIRL2+Hybki6dO8HGTzB1RecXYm9lkhyahrBgX54ublAdhpq+jUU9e595U3ocSpRC0rUw1yqETGu5SkWViFvvzEhhM1SVfWfQbnMJLq1rIF3ViTvvfYCYT4KJF0h7dpVUuIu4++mw6C/y4EGHwbfkgWS+UFrOpscOb4pLi6OkydPAhAeHk5gYKDGiQpG//79ocgBOPBjzpxjT09PEhMTuXz5ck5hDJCSkoJer6dKlSo525KTk4mIiKBNmzZ8/fXXeTMVQ6eHBgPhz2GwfZJ1HrLubv/ShRD5zpQNF/4iaecCkvf+Stn//J1XgUtpBgiuQqnabSGgHBbv4mS5BeMWUAKcXHL2Dbpx+zdFVVEzk0iNOoOXORESL0DcKc5sW06AORo/F7O1g82V3eh3TKaIWeVAkjs1uo5AqfQkBJTN3+9fCKGJo0cO8+37r1LB9RpDn21k/TuQeJFf2gC4wZWlcMW6rwfg4fmvy9sUnfWNud4ZdE7Wmw2yyZHjtLQ03njjDebNm4fFYl1CWa/X06tXL7799lvc3d0LLIsWI8cA/NITji9/oFHa9PR0zGZzzsjy8uXLeeqppyhbtiynT5/OeWd3+fJlihcvjk6Xy+sws9Pgq8rWeYpd50Hlp3J3HCFErmSkpbLzly8ok7KLkumH/1lJE8gygzGkFp5Vn4ASdaF47fy7oFdVrWeRLu+GS9tJPrgcb9N/VtEMqsze7DK4P9abSo+1zp8cQoh8d+3aNTIS4yiRfgROr8F8ej36jNs7h1k8g1GCq6IElLWOBPuEgnsAuPlaO1+5+loL49zWIHngQWs6myyOX3nlFdatW8ekSZNy+h1v2bKFQYMG0bp16/ydPvAfmhXH856Cc5vg6WlQo9tDPTQjI4PNmzeTnp5Oly5dAOvpj/DwcDIyMliyZAl16tTJXa4NH8Ffn0NQFXh1i6b/yIUoNBIuwN65pG2bgYfln4IYz2Co2J5Y/7oE1OqI3k277jZJFw5hOrGSgNhtcGELWEw5X0sPqo17k/+DSh1vGbEWQtgwYwarv3mT7L0LaFfeGWfF8s+XFANZwbXwCG+BElrPupquu792WR+QXRfHgYGBLF68mObNm9+yfePGjXTt2pW4uLgCy6JZcTy9JVzdC8//BOHtH/lwly5donr16phMJiIjI3O+l4fugJGRABNqWBcp6TIDqj/3yNmEELczm0xsmTeW6ulb8Ivfi3WiBCRkKZxyqkLtPp/iVLqhbb5BzUgg7q/ZRK/9hioeCeRc/+cewHm/Jqj1X6VM9QaaRhRC3C4tLQ1dzGHcjv4MR5b8syAZoAaUQwnvAOVaWTtY2eEbXbuec5yenk5wcPBt24OCgkhPT9cgkQbyuM9xyZIliY6O5tChQ7f8g3jxxReJjY1l4sSJ1KpV6/4HcvODRoNgw1jYOA6qdLbOHRJC5A2zCY4vI3rh2zTT/evUZdmWULs3vhXaUd/WX5Tc/CjSdihF2g7FknAJDi6wLkGffJWw9N/IWriUq9taU/zZTyGwnNZphRBmI+u/HYTX8Z+oV/SfMVPVJ5T4Yo9TpPkrKEGVID+7YtkQmxw5fvzxxwkICGDevHk5F59lZGTw0ksvcf36ddatW1dgWTQbOf6iIqRGwyt/QdEa+fIUcXFxlCxZkszMTI4ePUrlypUf7IHZaTCxBqTFwZNf/7NIiBAi15KuxeB05Bc8Dsy0TqMA0oxw1KU29V6fAf52vgCS2cT1nT8RveQ9KnvenBqiQKWOJFfvi1d4s/xtRymEuF12Guz7wXqhfdJlAIwWBefqz0Dtl6BUY9s8O5VLdj2t4siRI7Rt25asrCxq1LAWhgcPHsTV1ZXVq1ff0pkhv2lWHI8rCsZ0GHQA/MPy7WkiIyNZvXo1ffr0ydk2c+ZMPD09ee655+5+8d7O72Hl2+BVFAbtB2cNFicRwhGYjez47jXCLi0i+Gb7cDd/qP8q2REvYfAN0TRefkg9tg7PAzPg1MqcbdvjPSnSfTLlGnXWLpgQhURs5GW2fv0SHXxPYzBa36yqHkU45tGQii+Mx8m3uMYJ84ddF8dgnVoxf/58Tpw4AUClSpXo0aNHga8Qp0lxbDbB2ADr/eHnwCOgYJ4X61WpZcuWJSkpiWXLltGpU6c772jKgm/rWHupNn8Pmr9TYBmFcAiqau1Is/5DuHYGgKgMZ0Ke/gilVs/CsdBOzDFS147H5eQynPUKKgpK9W7Q8n8F1vdUiELFbIKDC0j47V38dGkAqH6lURq9CTVeAGfX+xzAvtl9cWwrNCmO06/DZzdGi9+PK9CVY9LS0vjyyy9Zt24dmzZtyhk5zsrKwsXlP/McDy+GX/uC3gX+b7v0NRXiAaiqyo6FX1Pp8gJ8U09bt7kHcjSwA5V7fobOwV+c7iTmxA6yV44kNGmXdYPehVN+zfHuMIaQsEqaZhPCEZiMRrIPLcF9+xcQfwqAmExnrld/hUrdxoDeJi9By3N2VxwvX778gfe962hmPtCkOE64CBOrg5MrvB9TMM/5H/9e+cZisVC3bl3q1q3L+PHj8fPzu7kT/PA0nNtovVjoxSWFZrK+ELmSeIlzU56nTNZRAFRnd5QGr0PDN/KvJ7E9uboX1o6GC38DkJCpktVwOCFPvieLDgmRS4dWzUP94y1qBGRbN7j5Q9NhUKevw48U/5fdFccPujCFoiiYzXdf0jSvaVIcRx+GqY3BIwiGny6Y57yHTZs20aJFC7y9vTl58iQhIf+aA3ntLHzXAMxZ8OxsqNpFu6BC2CpTNuyYDJs/A2M6JgvsMVei+qAFuAfb+YV2eU1Vubh+JsaV71HOK8u6rWgN68W/xWtrm00Ie5KRAOvHou6ZhYJKmhGcmw7B0GxooX0zbnet3G6uhCeArBTrRxcvbXPc0Lx5czZv3kxUVNQthXF8fDyBgWWhyVDYNB5WvWsdQXbz1S6sEDZmx89fUPrYJEJ0CdYNJRuitv2Ux4pX1zaYrVIUSrXqh9qiNxlbp+K29TOIOog6/XF2mCpTdsAcgkpW0DqlEDbLbDISv/5bgg9OhvR4FOCcZx38n/8OjxIVtY5nF2y+P0dmZqbWEQpeHvc4zgtNmzalW7d/Vuo7dOgQoaGhvPPOO5geex38y0JqDKwYYp1uIURhlxZPyrwePHZiLCG6BLKdvaHzVOjzJ85SGN+XonfCrenr8MYeqP48CioNnI6i+64+lgML5O+MEHdwdf9aDg8NJXj7GEiPhyLh8NIKygxbj68Uxg/MJotjs9nM2LFjKV68OJ6enpw7dw6AkSNHMnPmTI3TFQAbGzm+k0WLFpGZmcmpU6fQu3jA09+DooejS+DAAq3jCaGto0thcj28zq3AosJ2YyWyB2yDiO4yL/9heQZBl+858dgXnEsxEOhqQffba7CgKyRHap1OCNtgNsLmzyj2e3ci/DNIzYZzZfvAq1sgrInW6eyOTRbH48aNY86cOXz22WcYDP90aqhatSozZszQMFkBublco4vtjBz/19ixY1m+fDlTp061XrgXWhdT0xvt3P4cDvFntA0ohAaizx1l57BKsKg3pF+DoCoo/dbRYNwOPIuEah3ProW360+p8ZdQW46ydsg5vQbTt3XZ8FU/LAV4HYoQtubq/rUw43HYOA7FYiS5aGPS+mykTM8JsoJtLtlkcTxv3jymTZtGjx490Ov/uUK5Ro0aOX2PHVrOyLHtFscAHTt2vGWZ7w/WJbIzxgDGNGuLN2MhnBIjCq9jy3CZ0ZT6npGYVQWavg0DNqGE1tU6mcPQG9xQmr4Fr/yFpWhNnIyptExexNmP6kJylNbxhChYZhObxj5JkSXPQNRBcPWFLtPxHrCC4PK1tE5n12yyOL569SrlypW7bbvFYsFoNGqQqIDZ4Jzj+0lLS2PuvB/pMv8a2XoPiDoAy1+XeYHC8WUkwOK+sLAXfgYTZ1NcuNB6pnUhiwLsUV6oBIVD3zVsdWtNlhnKq2fhu/pwaKHWyYQoGHEnYcbjNDf/jUGvcCCzOAzcCdW7ytStPGCTxXHlypX5+++/b9u+ePFiatasqUGiAmYHc47/y8PDg4MHD/L+p5Mx9PgJdE5weBGWzZ9rHU2IfLNr4ddkfFULjiy2zrlvMowyn1yibONntI7m8HROBhq9sxjdq39D0QjITIIl/bnwVRsSoi5oHU+IfKFaLGRv/x6+bwZRB1Bdfdlb6hVqfHwEvBxvqXmt2Ewrt38bNWoUL730ElevXsVisbBkyRJOnjzJvHnzWLFihdbx8l/WjZFjG59W8V/+/v689tpr1k/afw4rhqDbNI4NR67QYuDEnEVFhLB7ZiNnZvajztWl6BQFo3cpnLvNhuK1kX/lBcu5eHXotx7+/hJ10yeUTt7Jxc8j0L28CJ+qrbWOJ0SeuXb5FKe/bMdjvtesG8q2RHnqO2p7F9U2mAOyyZHjp556it9//51169bh4eHBqFGjOH78OL///jutWxeCP3Z2OHJ8mzovs89QH4CG0XNJO/KnxoGEyCPXz8GsdpSL/A2dorAtsyymvhtkgQot6Z2g+TucavwNl1N1lPJW8fm1m3XRFYtcrCccwLlNeM1/gsd8r5FlUomq/gb0+BWkMM4XNlkc9+vXD7PZzNq1a4mNjSU9PZ0tW7bQpk0braMVDDucc3wnNYav4JSuAq5O4Lm8H1zaoXUkIXJNVVUOz38fdWoTuLoHXH3I7jydhp/sw80nUOt4AqjYqid+I45iqvQ0qGbYOA7zrCe4dHib1tGEyB2z0bqk+rzOGDLjSXQO5mLrmRTt8hE84MrC4uHZ5E82Li6Odu3aERoayttvv83Bgwe1jlSw7HRaxX/pnQ1UeG8LlH0cjOnw47Mc/HM2n3/+OTayarkQD0Q1ZvLX27WodvpblOxUKNkQXt2KIaKr1tHEf3gGFMOp2xx4ehoYvNBf2Ynnj0+wa/44raMJ8VBizx3m2LvlYOsEQIXaffAdfoAKzZ7TOprDs8nieNmyZURFRTFy5Eh27dpFrVq1qFKlCh9//DEXLlzQOl7+c5DiGAAnF+j2I5RqDNkphG0ZzPJJI5gwYYLWyYR4MImXUWY/QTOPc1hUle0uzaH3CvCVvsU2rUY3svqs43iSG/5uUO/0Z7D+QzCbtE4mxP1d3I5+RgsqeySSZtJD13nQcQIY3LVOVigoqh0M4V25coWffvqJWbNmcfr0aUymgvvjlpycjI+PD0lJSXh7F1Cx+mkYZFyH17ZDcOWCec78lpWCuqArysVtZJoVLM/Owb1GZ61TCXFP5tPr0S/tD+nXUF19OVfzPcq2fUXrWOIhGDNSiZrTh5Ixa6wbSjdBfWYGilzZL2yRqsLOqbDmfbCYOJfqgvL8fMLqFILrrQrAg9Z0Njly/G9Go5E9e/awc+dOLly4cMuiEw5JVf+5IM/O5xzfwsUL5cUlUKEdrnoV999ezllmetu2bTLNQtgUi9nE+g/aw49drCvdFa2B8spfUhjbIWc3T0q+tgiemQnOHnDhb66Nq8zexRO0jibELdISYomd2glWvQsWE1R9lrBx56Qw1oDNFscbN26kf//+BAcH07t3b7y9vVmxYgVXrlzROlr+MmWC5cZCJ/bcreJOnN2sUyyqd7NeLPPba5z4rgeNGzWiZ8+eWCwWrRMKARmJZMzuwuNsRa/ABf+m8PIa8CuldTLxKKo9CwM2EWX2I9DVTMSh0Zg3fQ7yd0fYgPiTO4j8sDJBMX+hKnpo9yk8MwPFxVPraIWSTRbHxYsXp3379sTHxzNt2jRiYmKYNWsWjz/+uOP3yr05agxgcLDiGKzrvHeeCk3eAiA8dgULn3MnNCQQnVx5K7QWcxSmt8DjymbMihPbAp+n9KDfwdlV62QiLxSpgO/wvWzPKINeB/pNH8FP3SD9utbJRGF2/HcCfn2G8j5GYtLgaN1P4bFXZaU7DdnknOPp06fz3HPP4evrq3WUgp9zHH8GJtW2FsbvOfgo+YGfYPkbYDGiBlVB6fYDBJTFbDaj1+u1TicKmS3fDaLhtZ/RmbPApyR0nQvFa2kdS+QHVYX9P8Cfw8GUSYZLIGdqjaJa25e0TiYKEbMxC92m8ShbvwbAWKwu11t+SXC5Ghonc1wPWtPZZHFsSwq8OL66D6a3AO/iMPRY/j+f1i5ug4W9IC0OXLxRn5pE9w9/IiQkhM8//xxnZ2etEwpHZ8rmwOdPEpG1EwBzWHP0z80Gd39tc4n8F30Y4/wXcE65RJZJ5UKV16n4/DgZsRP5Lv7SCS591Zpavje6Uz02EFqPsZ5dFfnGYS7IK3Ry2rg54JSKOynVEF75G0o2gKxklIW9qHP9N76fMpnDhw9rnU44uqSrMKdDTmH8F4+h9FgshXFhEVKNjF4r2ZVcBBcnhYonJ8Oy18GYoXUy4ciu7MVtbltq+SaTmg3Jbb+Bdh9LYWxDpDi2NTlLRztQp4r78S4KL/0ODV4HYFhDF86NrkKtcrIspsg/1/f+BtOawZVd4OpDeufZNP1gNToneYEqTLyLlKDuFyfJbPQOKDo48CPMbMO1s/u0jiYcjarC7pkwux0e5kTi8SO643y8G8h0HltTKIrjyZMnU7p0aVxdXalfvz67du3SOtLdZRaykeOb9M7Qdpy10bnBi6LZ5+H7JnBmHVFRUUyZMkXavYk8oVosbBr3ND7LbkznCa4GAzbhHtFF62hCI4pOj2vr96DnUnAPgOhD6Ka3kFX1RJ7JSL7OwQ8bwx9DwZwNlToS+O4hyjV4Uuto4g4cvjj+5ZdfGDp0KKNHj2bfvn3UqFGDtm3bEhsbq3W0O3PEHscPo/JTMGATBFWxFi4/PsNf/2vC4Df+j/fff1/rdMLeZSbDol40N25Ar1PYa6oAfdeAfxmtkwlbUKY5lv6bOJ7sjp8r1D39GWwcL+3exCNRr5/n6odVqKEewaIq0PpD6PpD4X2dtwMOXxx/9dVX9O/fnz59+lC5cmWmTp2Ku7s7s2bN0jranRW2Ocd3ElgO+q+Huv0B6FYyjt2veNOvczONgwm7FnscprdAOf47qs6ZXUHdqfXhTlmOVdxC51eSMmNPctS9AQrA5k9gQVdp9yZy59QalGnNKOeZTnwGHKj+ATR6Uy76tHEOXRxnZ2ezd+9eWrVqlbNNp9PRqlUrtm/ffsfHZGVlkZycfMutQOUUx4X8HaWzG3T4Ap7/Cdz8qV4Ewta8BHvngqoSHR2tdUJhR7ZNH0bW5CZw7Qx4F0d5eRX1/m8qivTWFnfg4uFNlbdXWXuyO7nCmbXEf1yV4xt+1jqasBMWk5GU5SNgwXOQmQQl6uI+ZA+1nhmsdTTxABz6lSE+Ph6z2XzbktPBwcF3La7Gjx+Pj49Pzi00NLQgov5D7wIeRazz3gSEt4fXtkFYMzCmw++DSJ75NPWqleedd97BZDJpnVDYMrORuB/70fDqdFwUI9d9q8Erf0GJOlonE/Ygojv0XUui4kegUxphG14hY/sMrVMJG5cYdZ59w8vjte8764a6/aH3n7iHlNc2mHhgDl0c58aIESNISkrKuV2+fLlgAzw+EoafgSZDC/Z5bZl3Uej5m3Wels4J7ysb2foiZJ/eqHUyYctSomFuR4qcWQTAJnMtfAauB49AjYMJu1K0OgzYxK5Ef1ydwG31W7B8EBgztU4mbFHkAbx+epI6PgmkG1WOlH/DehbUyaB1MvEQHLo4DgwMRK/XExMTc8v2mJgYQkJC7vgYFxcXvL29b7kJG6DTWedp9V0L/mUJ9dHxVfVTOG0eD2aj1umEjTn653QsU5vApe3WxWW6zaf52I3onV20jibskG/R0tT96gy0eB9QYN9csqa24OqxHVpHE7Zkv7UNoD75ClnuxbjUeiZVe3ykdSqRCw5dHBsMBmrXrs369etztlksFtavX0+DBg00TCZyrXgt62nxmi+ioMLfX8Csdsz6chRTp06Vdm+Fnaqyc0IvKu54C11aLGpQZRiwCaWStEsSj0bR6aHZcHhxMaqrHy7XjuE2ry3Hfp+kdTShsay0JLa8UxuWDQRzFlRoh8sb2whv/pzW0UQuOXRxDDB06FCmT5/O3LlzOX78OK+99hppaWn06dNH62git1w84anJ8OxscPGBq3t4Nn4CW6cMYv26dVqnE1rJSoXFfaifuAwnncKW5GJk9/wDAspqnUw4knKtiOuymKOJLvi7QqW978Pmz6XdW2GVeInrX9SjsdsZLCpkNRp+40JyP62TiUegqIVgqG3SpEl8/vnnREdHExERwTfffEP9+vUf6LEPug630EjiJdQlA1AuWbuPqFWeRnnya/nDVMiYoo/htLg3xJ8EnRNXqg6keOcPpBuFyDeZqYmk//oG/ueXWzdUaIel81R07vK3p9A4uwEW94WM6yQbnThRZRj1XhihdSpxDw9a0xWK4vhRSHFsB8wm2PI16qbxKKoZvItjfHIS26OdaNq0qdbpRD7bMWM4Vc9Px9NZBa+i8NxcKPlgb36FeGT7foA/3gJzFpdSncjuPINyjZ/WOpXIRxaTkdMzB1AxaimgQtEI1K5zUfxKax1N3IcUx3lEimM7cmUvLOkH189hUeHL7dnoW41i6NvyTt4hmbKwrHwH3d7ZAJwxFaXcu3+BZ5DGwURho0buJ2pia4q5Gcmy6HHpMtnaBk44HEtKLAdH16Omd4J1Q61e8MTn4OyqbTDxQB60ppNzjsJxlKgNr/yNWusldAoMb2igr/oTxJ7QOpnIawkXYGabnMJ4k6UOpUcdkMJYaEIpVhOX17dzJLMoLjoz/PYqrBgKpiyto4m8dHE7umnNqOmdQFq2yt+BL0Knb6UwdkAycnwfMnJsp46vwLT0/3DKTrKucNV6LObaL6N3ctI6mXhEexeMpdqZ7zBY0q1zy7tMh/KttY4lBFjMsPkz2PwpoBJrKInl2TmEVKitdTLxCFSLBeNfX2PYPA5UM2pgBS7VH0upuu20jiYekkyryCNSHNuxlGj47f/grLWV39/RrkTW+R/d+g3SOJjIFbORC7P6UvrqMgAyAqrh1vMn8C3gVSyFuJ9Ta8j+5SUM5nSuZYBT9x/wieikdSqRC8mxlzj5yePU9Y61bqj6LHScaO2aJOyOTKsQwisEeiyGJz7DhJ4mIZm0OjOKjINLtE4mHlZyJMztmFMYb0gPR9d3pRTGwjZVaMPVDgs4nuhMgBv4LHsJtnwNMhZlXyL34zq3LXW9Y8kyqZyvMgiemSGFcSEgI8f3ISPHjsESfZS4qU8RTJx1Q+0+0HYcGDy0DSbu69Sfkyl/5CuU9Hhw8cbY/mucazyrdSwh7istMR63De+jO/QTAMayrUlv9Rk+RctonEzck6rCrumw5n9gzibVOZDzdT6gWtueWicTj0imVeQRKY4diCkLNoyFbd8CkOZalM2BPWnf738aBxN3ZMxkx7h2PMZ+6+fB1aDrXFnUQ9gXVYW9c1BXvo1iziY6TeF680+o3OFVrZOJO0i4coqLE58kwiPGuqFiB+g8WXrnOwiZViHEfzm5QJuPoNdyzB7BeGRG0frip+z/poe1V7KwHbEnYMbjOYXxpoxw6LdOCmNhfxQF6vQh6blfOZukJ8RDpdLud2HtaDBla51O/NuZdShTGxPhEUOWWUFt9yk8P18K40JIimNR+JRpBq9t45hSEWe9Qs3rK2Bma2n5ZgNUi4XMvyfDtGYQcwTVPZBjNcfQ/NOd0i5J2DXf8KYUef8YFwJboKDC1gkwqw2m2JNaRxOmLFj9P/jxGXydsjib4sKZltNRHnvV+uZGFDoyreI+ZFqFA1NVTPsX4LRmBGQmgd6Fw0U6Ed5nEs4uUogVtITLJzk74UnqeN24Krzs49B5CngFaxtMiLx2bDksfwMyE0kzKhwu1p36r02W5c41cGHXn/isfxu/rMvWDXX7o7b+EMXgrm0wkS9kznEekeK4EEiOhOWD4MxaAA4luFH5vY04BVfSOFghoapw5FcsK4aiy0oiy6RyqWJfyvf4EqRYEI4q6Spnv2hFWX0kAJYyLdE99S34lNA4WCFhNhG37H/47J+CQa9gNPjg/Mz3UPEJrZOJfCRzjoV4UN7FoMci9hTvTXIWVPfLwGl6c9j6jcxFzmfGhKuwsCf82hddVhJJbqU43WI65Xt+LYWxcGw+xSk18gBrdS2w6Azozm2A7xqg7p2LarFonc6xxR6Hma0ocmgqBr3Ctmu+xHRZKoWxyCEjx/chI8eFS+zpfQRuG4Pu/CYAsgMqcaXmcMo0fkbbYA5o77z3CTs2CX9XFXRO0PRtaDIU9M5aRxOiYMWfht9egyu7AdifEkDowKUElqmhcTDHYjFls39yH2olr0ExZ4OrD5ktx+JSp6dMaSkkZFpFHpHiuBBSVdj/I+qa91EyEzFbVE4HPE74qz9I8/e8kHgZVr0LJ1YAcD7Dk7DBK6FodY2DCaEhi5nsvyZgWfchrk6QiQuu7cdBnZdBp9c6nf2L3M/ZiU9R1i3J+nmFdvDkBPAuqmksUbBkWoUQuaUoUKsn6S//xcZrRdDrFMITNsDk+nBypdbp7JY5OxPj5i9hcj04sQJV58RGtT4hI49JYSyETo+h+VucazOXs1n+uJIFfw6DGY9jubJX63T2KyMR/hgG01pQ1i2JxEyVjT5dofvPUhiLu5KR4/uQkePCTVVVLq6fRekjEyHxIgAxPhEo7T4mqFIjjdPZj9Pr5qJbOYyyXjf6upZsAB2+guDK2gYTwhZZzLBnFqwfC1lJWFTYYa5KjSGL8AgopnU6+6Cq7J37LtUif8aQnWjdVO05Ymu8QXA5ma5SWMm0ijwixbEAIDsdNn+Cum0yimrCaIaUyt3x7/wJuPlqnc52pcTAug/g4AIA4jPA/akvcW/QV/qHCnE/KTFEzu1Lsfi/ATC7BaBv9zFU6yoXrN5L7HGuzuhB8eyzAKj+5VCe/Mra414UalIc5xEpjsW/ndu1msg5fWgclGbd4B4ALf4HtXvLvMB/yUyKJ2nVRwSfWQhG68/qiEsdAp//lpAwGS0W4mFsnf8JVc7PxNd0owd4SHViqg8kuOHz2gazNUlXYdPHcGABqBYyTbCZ+jR9ZyFuXr5apxM2QIrjPCLFsfgvi8VCyv7f8Nn+CcRbV7e6nOVFat03qNR5eOEe0TFlE/XHeJy3fU2g240/LcXrQLtPILSuttmEsGembNg+Cf6/vXuPj6q+8z/+PnPPdXKBJAQSQUUQuYiAgFjbKi31Z91S0ULXVqT+fvurBRXRtrJd63ar0tp1S/GC1bVga/lpfazYVSvVRUVrATGKoCiIoKCQG7lMMsncz++PyQyJgARI5swMr+fjcR4zc2Zy5hMOOec93/me7/dvv5aCPknS2+0lGnX9E3JWT7S4OGt1Ntdq871Xa0LkdbmMaHzlmZcqcMG/yDNopLXFIa0QjvsI4RhHFA1Lb/xOgTW3yWN2SpJiZaNlu/CfpRH/6+TqNhCLStueiveRbN4tSdrVasj2lZ9p6MXXn1z/FkB/8h/Q2/d+R2e2vyaXvevvasy3pC8vlkpOtba2VAt3SpseVuSlX8oRjn9gaC8dq/yZd0tV51pcHNIR4biPEI5xNLUfva+ae+bpK4U75TK7LjgbdLY+HvaPOuUr/5TVwTAa7NBbj9yiIXueVIWjLb4yb6D2nTFXRRder9wCr7UFAllq+4a/qvL9h1Xw0V8lSaZh05uBapVdtkRVk/6XxdX1r46mfWr8yxJV7/uL1NEoSaqLFeu9wd/SBf97iWx2urjh8AjHfYRwjF7raJL+fo+08bfJfrYf+nM1bM4vZRt7heTMsbjAPhTwSTUrFH3tXtk74v0gw448Oc+/Xpo6X3IXWFwgcJLY95b04u3Szv9JrjJPu1DG+TdKQ7+QXR/OWz9Vy5o75Xj7UeW7utZ5q6ULbpbOvlKyOywtD+mPcNxHCMc4Zv5GvXnvPI1oXac8V9eJKadEOucqhcdfLeeAYdbWdwIad2xS0wt36wzf36VgfDD9VjNP681zNOn796q0cqi1BQInqbf/+qian/lXXVDaKJvip3Wzcry25Jyn0d/6iezuPIsrPE6mqY6dryr3nf8nbX1CioUlSe832+W+6McadgmzaqL3CMd9hHCM4/XpzneUt+NJFW1/QmrdI0mKxqR3o6do9FV3yXb6RZlxUA91SDueU2D9f8rz6d8Prh9whjRtoTTmCsnhOuKPA0gds2m3jPX3Sm89KkUCkqSWkE3eC74v4+x/lMpHZ0ZrckeTml79Tx144T80PL/z4PpTzlfd8G+rdPJsOZwZcPxEWiEc9xHCMU5YLCrtWKOPn/iJTonuPrg+d4A0epZaBn9RRWO+llZDwcVCndrx/H8q58M1OsX/thSK9yeOmdKGxnxVfP2fdeqMa0/ukTmAdNbeoJqHrlPZ3udU1f3UVTZKWzRSlRf9Xw0YMcWy8g4n5GtU21v/pdJ9L0sfPC/FIpKkQMRUx9AZKpnxI0a9wQkhHPcRwjH6SiwW09///Dud0vCiqlo2Ji8kkaQDAZs8476pvDFfl079kpRbkvoCffukXS9LO/9Hkff+Ike0W2uNt1oae4X8Iy5X3hDGKQYyRaDDr8j2Ncr/4M/S9jVSNJh8LlZ6hmxnXiKd+mWpeorkcKe2ONOUGndIH76k+r//UUXNW+Tq3kYwaJy2Gmep6EvXquoMppjHiSMc9xHCMfpFNCx9+KIaXn5Qjg9fUHFO9685DTU4KvVRtEyDp3xTlRMukUqG9W3LciQkHfhA+uQN7Xr1T7J9uklD84I9XlLXYWhLcIgmzvulisdeTCsxkOk6W7Tjz7/SgVd/p0mlnXLYDp7+gzG7dnR6VT7hUpWdc4k0aJyUX963XTBCfqlum977nz/Iv/1ljfG2yx080OMlO5ptOvWS6+U4+9tSGWMUo28RjvsI4Rj9rbmxXnWvP6mRto+lD1+SGt479EWOHAUKh+rd2oAcA07TuAsukfLKpNwStUUcMly5ysn3yu70SNGQQgG/Whv2SR1NGphvj0/j3LpHm9c9LW+oVkPzIzLMSI+3iJqSfciEeMv1GRcrVjleNq7+BrJSsLVe7o/XSTv/R+aHL8rw1x/ympA9Xx+0OuQoP0MjJk2Xiqqk3AHa1xpQTvEgeUsGyubMkQybwsEOdba1yB7tVJ4RkDqaFG7aozdfXC1PoF5jB7lkNH8s6TORw+6WTpkqnfplvRsbqjPP/wfZ+CCOfkI47iOEY6Scb7+ef/jfFP3o77rwjAK5mz9IXljTp9yFUsVYtRSeoTdqbRp+0VU6ZeS4vn8fAGktGonoref/nxrfelZfHVUk26c10oGdkhnr+zfLG6gGV5Ve3y+Vn/N1TfzmD7JrmEukNcJxHyEcw3KxqNT8kXb87Sl98Przqi6UxlQVSf5GqbNJzft2yWkzlet2yGZGJZtTYdnV0tapTiNH1SPGSXkDpaJqvf5BndqcAzTmojkqO318Zly1DiD1wgFtf+1p7X79OQ0f4NJppQ6p9RPF/Ae0d8fb8rolb55HRjQkyVREdnUGI4rYPSoedGr8uon8Mr389kfqcJZq8iXfUemZX5DyBlj9m+EkRjjuI4RjpLtoNKpQKCSXyyW7zSYZhmKxeIsPX08C6A+RSER2u12GYUimqVA4LNM05XK54uuANNTbTEeHQiDD2e125eT0/FqSUAygPzkc3eKDYcjlYqxzZA/OoAAAAEAXwjEAAADQhXAMAAAAdKHP8VEkrlf0+XwWVwIAAIDjlchyRxuLgnB8FG1tbZKkqqoqiysBAADAiWpra5PX6z3i8wzldhSxWEz79u1TQUFBSoan8fl8qqqq0t69exk6LsOxL7MD+zE7sB+zB/syO1ixH03TVFtbmyorKz93VCdajo/CZrNpyJAhKX/fwsJC/uizBPsyO7AfswP7MXuwL7NDqvfj57UYJ3BBHgAAANCFcAwAAAB0IRynGbfbrdtuu01ut9vqUnCC2JfZgf2YHdiP2YN9mR3SeT9yQR4AAADQhZZjAAAAoAvhGAAAAOhCOAYAAAC6EI4BAACALoRjAAAAoAsz5B1FqqePBgAAQN9j+ug+sm/fPlVVVVldBgAAAPrA3r17NWTIkCM+Tzg+ioKCAknxf0jmcAcAAMhMPp9PVVVVyWx3JITjo0h0pSgsLCQcAwAAZLijdZPlgjwAAACgC+EYAAAA6EI4BgAAALrQ5zjNvPbpa3qr/i1NrJioKYOmWF0OAADASYVwnGZe/fRV/fG9PypqRgnHAAAAKUa3ijRT4IoPL9IWarO4EgAAgJMP4TjNFLriw8X5gj6LKwEAADj5EI7TTDIchwnHAAAAqUY4TjPJbhVBulUAAACkGuE4zSRbjkO0HAMAAKQa4TjNJFqOCccAAACpRzhOM163V1I8HJumaXE1AAAAJxfCcZpJdKuIxCLqjHRaXA0AAMDJhXCcZnIcObIbdkmMdQwAAJBqhOM0YxgGF+UBAABYhHCchgrdhGMAAAArEI7TUIGTKaQBAACsQDhOQ7QcAwAAWCOjw/Hy5cs1duxYFRYWqrCwUFOnTtVzzz2XfD4QCGj+/PkqLS1Vfn6+Zs2apbq6Ogsr7p3kLHm0HAMAAKRURofjIUOG6Be/+IVqamr0xhtv6MILL9Q3vvENvfvuu5KkG2+8UU8//bSeeOIJrVu3Tvv27dNll11mcdVHl7wgL0jLMQAAQCo5rC7gRFx66aU9Ht9xxx1avny5NmzYoCFDhujhhx/WqlWrdOGFF0qSVqxYoTPPPFMbNmzQlClTrCi5VxitAgAAwBoZ3XLcXTQa1WOPPSa/36+pU6eqpqZG4XBY06dPT75m5MiRqq6u1vr164+4nWAwKJ/P12NJNaaQBgAAsEbGh+OtW7cqPz9fbrdb3//+97V69WqNGjVKtbW1crlcKioq6vH68vJy1dbWHnF7S5YskdfrTS5VVVX9/BscigvyAAAArJHx4XjEiBHavHmzNm7cqGuvvVZz587Vtm3bjnt7ixcvVmtra3LZu3dvH1bbO/Q5BgAAsEZG9zmWJJfLpdNPP12SNGHCBG3atEm/+c1vNHv2bIVCIbW0tPRoPa6rq1NFRcURt+d2u+V2u/u77M+VHK0izGgVAAAAqZTxLcefFYvFFAwGNWHCBDmdTq1duzb53Pbt27Vnzx5NnTrVwgqPzuvySqLlGAAAINUyuuV48eLFuvjii1VdXa22tjatWrVKL7/8sv7617/K6/Xqmmuu0aJFi1RSUqLCwkJdd911mjp1alqPVCFxQR4AAIBVMjoc19fX66qrrtL+/fvl9Xo1duxY/fWvf9VXvvIVSdKvf/1r2Ww2zZo1S8FgUDNmzND9999vcdVHl+hz3BnpVDgWltPmtLgiAACAk4NhmqZpdRHpzOfzyev1qrW1VYWFhSl5z0gsovF/GC9JWjd7nUo8JSl5XwAAgGzV20yXdX2Os4HD5lCeM08SU0gDAACkEuE4TTGcGwAAQOoRjtMUU0gDAACkHuE4TSXHOqZbBQAAQMoQjtMULccAAACpRzhOU4x1DAAAkHqE4zRV6KblGAAAINUIx2mK0SoAAABSj3CcprggDwAAIPUIx2mKC/IAAABSj3CcprxuryTCMQAAQCoRjtMU3SoAAABSj3CcpuhWAQAAkHqE4zTVveU4ZsYsrgYAAODkQDhOU4mW45gZU0e4w+JqAAAATg6E4zTlcXjksrkk0bUCAAAgVQjHaYwppAEAAFKLcJzGElNIM2IFAABAahCO0xhTSAMAAKQW4TiNJcJxa6jV4koAAABODoTjNFbsKZYkNQeaLa4EAADg5EA4TmMlnhJJUlOgyeJKAAAATg6E4zRGOAYAAEitjA7HS5Ys0aRJk1RQUKCysjLNnDlT27dv7/GaQCCg+fPnq7S0VPn5+Zo1a5bq6uosqvjYJMIx3SoAAABSI6PD8bp16zR//nxt2LBBL7zwgsLhsL761a/K7/cnX3PjjTfq6aef1hNPPKF169Zp3759uuyyyyysuvdoOQYAAEgth9UFnIg1a9b0eLxy5UqVlZWppqZGF1xwgVpbW/Xwww9r1apVuvDCCyVJK1as0JlnnqkNGzZoypQpVpTda4lwfCBwwOJKAAAATg4Z3XL8Wa2t8SHPSkriobKmpkbhcFjTp09PvmbkyJGqrq7W+vXrD7uNYDAon8/XY7FK95Zj0zQtqwMAAOBkkTXhOBaLaeHChZo2bZpGjx4tSaqtrZXL5VJRUVGP15aXl6u2tvaw21myZIm8Xm9yqaqq6u/SjygxlFskFlF7uN2yOgAAAE4WWROO58+fr3feeUePPfbYCW1n8eLFam1tTS579+7towqPncfhUZ4zTxL9jgEAAFIho/scJyxYsEDPPPOMXnnlFQ0ZMiS5vqKiQqFQSC0tLT1aj+vq6lRRUXHYbbndbrnd7v4uudeK3cXyh/1qCjTplMJTrC4HAAAgq2V0y7FpmlqwYIFWr16tF198UcOGDevx/IQJE+R0OrV27drkuu3bt2vPnj2aOnVqqss9LiU5Xf2OO2k5BgAA6G8Z3XI8f/58rVq1Sn/+859VUFCQ7Efs9XqVk5Mjr9era665RosWLVJJSYkKCwt13XXXaerUqWk/UkVC8qK8IOEYAACgv2V0OF6+fLkk6Utf+lKP9StWrNDVV18tSfr1r38tm82mWbNmKRgMasaMGbr//vtTXOnxK/WUSqLlGAAAIBUs6Vbx+9//XsFg8JD1oVBIv//973u9HdM0D7skgrEkeTwe3XfffWpqapLf79eTTz55xP7G6SgxYgUX5AEAAPQ/S8LxvHnzkmMSd9fW1qZ58+ZZUFH6YpY8AACA1LEkHJumKcMwDln/ySefyOv1WlBR+kqE4+ZAs8WVAAAAZL+U9jkeP368DMOQYRi66KKL5HAcfPtoNKrdu3fra1/7WipLSntMIQ0AAJA6KQ3HM2fOlCRt3rxZM2bMUH5+fvI5l8uloUOHatasWaksKe3RrQIAACB1UhqOb7vtNknS0KFDNXv2bHk8nlS+fUZKhOOWYItiZkw2I6OHpgYAAEhrliStuXPnEox7qchTJEmKmTG1Bg+9iBEAAAB9x5JwbLPZZLfbj7jgIKfNKa87fpEiXSsAAAD6lyWTgDz55JM9RqsIh8N666239Mgjj+hnP/uZFSWltRJPiVqDrWoKNOk0nWZ1OQAAAFnLknCcuDCvu8svv1xnnXWWHn/8cV1zzTWpLyqNFbuLtVu7aTkGAADoZ2l1ddeUKVO0du1aq8tIO6U5XVNIE44BAAD6VdqE487OTi1btkyDBw+2upS0w3BuAAAAqWFJt4ri4uIefY5N01RbW5tyc3P16KOPWlFSWkuG407CMQAAQH+yJBwvXbq0x2ObzaaBAwdq8uTJKi4utqKktFbsif+bNAeZQhoAAKA/WRKO586da8XbZqzkFNKdTCENAADQnywJx5LU3Nyshx9+WO+9954kadSoUZo3b55KSkqsKilt0ecYAAAgNSy5IO+VV17R0KFDtWzZMjU3N6u5uVnLli3TsGHD9Morr1hRUlor9TBaBQAAQCpY0nI8f/58zZ49W8uXL0/OiBeNRvWDH/xA8+fP19atW60oK20l+hz7Qj6FY2E5bU6LKwIAAMhOlrQc79y5UzfddFOPqaLtdrsWLVqknTt3WlFSWvO6vbIZ8V3VEmixthgAAIAsZkk4Puecc5J9jbt77733NG7cOAsqSm82w6Zid7z1mK4VAAAA/ceSbhXXX3+9brjhBu3cuVNTpkyRJG3YsEH33XeffvGLX2jLli3J144dO9aKEtNOaU6pDgQOqKGzQSM0wupyAAAAspIl4fjb3/62JOlHP/rRYZ8zDEOmacowDEWj0VSXl5YG5Q3SjuYdqvXXWl0KAABA1rIkHO/evduKt81oFXkVkqT9/v0WVwIAAJC9LAnHp5xyihVvm9ES4ZiWYwAAgP5j2SQgH3zwgV566SXV19crFov1eO6nP/1pr7bxyiuv6Fe/+pVqamq0f/9+rV69WjNnzkw+b5qmbrvtNj300ENqaWnRtGnTtHz5cg0fPrwvf5WUIBwDAAD0P0vC8UMPPaRrr71WAwYMUEVFhQzDSD5nGEavw7Hf79e4ceP0ve99T5dddtkhz991111atmyZHnnkEQ0bNky33nqrZsyYoW3btsnj8fTZ75MKg/IGSSIcAwAA9CdLwvHtt9+uO+64Qz/+8Y9PaDsXX3yxLr744sM+Z5qmli5dqn/5l3/RN77xDUnS73//e5WXl+upp57SnDlzTui9U617y3HMjCXHPQYAAEDfsSRhNTc364orrujX99i9e7dqa2s1ffr05Dqv16vJkydr/fr1R/y5YDAon8/XY0kHZbllMmQoFAsx1jEAAEA/sSQcX3HFFXr++ef79T1qa+PdD8rLy3usLy8vTz53OEuWLJHX600uVVVV/VpnbzltTg3MGShJqvPXWVwNAABAdrKkW8Xpp5+uW2+9VRs2bNCYMWPkdDp7PH/99ddbUZYkafHixVq0aFHysc/nS5uAXJFfofrOeu3379dZA86yuhwAAICsY0k4fvDBB5Wfn69169Zp3bp1PZ4zDKNPwnFFRbyPbl1dnQYNGpRcX1dXp7PPPvuIP+d2u+V2u0/4/ftDRW6FtmgLF+UBAAD0k6ydBGTYsGGqqKjQ2rVrk2HY5/Np48aNuvbaa/v9/ftDYsQKJgIBAADoHykLx4sWLdLPf/5z5eXl9ei28FmGYejuu+/u1Tbb29u1c+fO5OPdu3dr8+bNKikpUXV1tRYuXKjbb79dw4cPTw7lVllZ2WMs5EzCWMcAAAD9K2Xh+K233lI4HE7eP5LuYx4fzRtvvKEvf/nLyceJ0D137lytXLlSP/rRj+T3+/VP//RPamlp0fnnn681a9Zk3BjHCYx1DAAA0L8M0zRNq4tIZz6fT16vV62trSosLLS0lncb39WcZ+eoLKdMa7+11tJaAAAAMklvMx0zSWSQRLeKhs4GhaNhi6sBAADIPoTjDFLiKZHL5pIpU3UdjHUMAADQ1wjHGcQwDC7KAwAA6EeE4wyTCMcM5wYAAND3CMcZJhGO6VYBAADQ9wjHGSbZctxOyzEAAEBfIxxnmORYxx30OQYAAOhrhOMMQ59jAACA/kM4zjDMkgcAANB/CMcZJtFy3BZqU3uo3eJqAAAAsgvhOMPkOfNU4imRJH3c9rHF1QAAAGQXwnEGOtV7qiRpV8suiysBAADILoTjDHRa0WmSpA9bPrS4EgAAgOxCOM5AiZbjD1sJxwAAAH2JcJyBEi3HdKsAAADoW4TjDJQIx5+0f6JAJGBxNQAAANmDcJyBSj2lKnQVKmbG9LGPESsAAAD6CuE4AxmGwUV5AAAA/YBwnKG4KA8AAKDvEY4zFBflAQAA9D2H1QXg+Jzm7epWQcsxsoRpmgpGg/KH/eqIdKgj3CF/2J98HIwGFYwGFYqGFI6G4/djIYWi8SUcCytmxmTKjN+aZvJ+4rFhGHLYHLIZNtkN+yH37YZdbodbHrtHHodHHrtHbrv74H2HW7mOXBW4ClTgKlCeM08OG4dRIFOZpqnOSKc6IgePN/6wXx3hjuRxJ3GMCcVCCkaDyeNPMBpU1IzKNLsdZz5zzIkpljzGHOmY47A55Ha4lWPP6XH86X7syXPmKd+Vr3xnfLHb7Fb/02U1juoZ6tSieLeKPb49CkfDctqdFlcExMXMmHxBn1qCLWoJtsgXit9vDbYmbxPPt4Za449DPnWEOxQ1o1aXf8xyHbnKd+Wr0FUYP3G58uPh2RkP0MWeYpV4SpK3iftuu9vq0oGsEY1F1RxsVmuwtcexpjXYqtbQ4Y897aF2dUQ6FDNjVpd/zPKcecp3xo81idtiT7GK3cUq8hTFjzPu4vg6T7GK3EUqdBXKMAyrS88IhOMMVZ5brjxnnvxhvz72fazTi0+3uiRkOX/Yr8bOxh7Lgc4DOhA40GNdU2eTImbkhN4rx5GjPGeech258Vtnrjx2j1x2V3yxuZL33Xa3nDannHan7IZdNiPeW8xm2GSTTYZhyGbYZMiQKVPRWFQRM6KYGUvej8aiipkxhWPxFqFAJKBANNDzfiSoQDQgf9iv9lC7AtH4MIodkXgLU31H/TH9jnnOPBW7ewbnATkDNDB3oMpyy1SWU6ay3DKV5pTSOo2Tkmma8oV8PY43jZ2Nagx0u9+1vjnYfEIh15ChXGeu8hzx403iuOO2u+WydR1n7E657e4e9xMtwonjTPdjTuJYZJqmomY0vnzmmBMxI8mW6MSxJhAJHPK4Pdyu9lC7QrGQJCVbuOs66nr9OzptzvixpWsZmDNQ5bnl8fu58fsDcwcqx5Fz3P+O2eKkOOLed999+tWvfqXa2lqNGzdO99xzj84991yryzohhmHoNO9p2tK4RR+2fkg4xgkJRAKq9deqtqNWtf5a7ffvV52/Lr6ua70/7D+mbeY78+V1e+OLyxtvuXAXqshdJK/bm7z1ur3xLgqOPOU585TjyMmIrwzD0bDawm1qD7WrLdymtlDX/VDX/XC7fCGfmgJNag40J5emQPzDQ+Lk9kn7J5/7PoYMleaUJgNzMjx3ndzKcstUnlsur9tLqxAySluoLXmM2e/fr1p/reo6Dh536jrqFIwGe709Q4YK3YU9jjfJY43LmzzeJI49ia5RuY5c5ThyMuLvJxQNJY8viWNPeyh+rEkeZ4LNh9zviHQoHAvr0/ZP9Wn7p5/7HgWuApXnlqs8t1wVeRUqzytXRe7B24q8CuU6c1P0G1sj68Px448/rkWLFumBBx7Q5MmTtXTpUs2YMUPbt29XWVmZ1eWdkFOLTtWWxi1clIfPFY6F1dDRkDz5dA+8ifstwZZebSvPmadST6kG5AxQaU7XbdfjxFKaU6oST4lcdlf//mIWc9qdKrHHu0kcC9M01RZuSwblRHhuCjSpsbNR9R31auhoUH1nvRo7GhUxI8kWsm3adsTtuu3u+Amt24nssye4YndxRgQAZL6+/MBd6CrscXw53DFnQM4AFbmLsv5bFpfdFf83yCk9pp8LRAI6EDig+o76wy4NnQ2q76hXZ6Qz+QF/Z8vOI24vEaAr8ioOve06BmVygDZM0zStLqI/TZ48WZMmTdK9994rSYrFYqqqqtJ1112nW2655ag/7/P55PV61draqsLCwv4u95isfGel7q65WzOGztC/f/HfrS4HFoiZMR3oPHBI2O1+ImrobJCpo/+Z5zpyVZFX0XPJPXi/PLc8ow92mShmxtQUaIqH5Y561XfWH7zf7YTWFGjq1fZcNpfKcsuSJ7DuJ7XE4xJPSfLrYOBwwrGw6jvqe3zYTh5zOo7tA7fX7e1xnPnssacstyzrP2inC9M01R5uV31Hveo66pL7s8etv1bt4fZeba/QVZgMymW5ZT2+SZw2eJoq8ir6+Tc6VG8zXVZ/xAqFQqqpqdHixYuT62w2m6ZPn67169cf9meCwaCCwYNf4/h8vn6v83glLspjIpDslOhv99mvHbuH4LqOOkViR+/f67Q5VZ5brkH5gw45ESXWFzgLaFVMMzbDlmwdO7P0zCO+LhQNJcNKXUfdwRNbt8eNnY0KxUL6pP2Tz+3KkeiXmGyFTrQIJb5WzasgQGexaCyqA4EDR/yWqdZfq8bOxuP7wH2YYw8fuNOHYRjJkXgSw8UeTnuovUd4/mx3mFp/rToiHfKFfPKFfPqg+YNDtvHA9AcsCce9ldXhuLGxUdFoVOXl5T3Wl5eX6/333z/szyxZskQ/+9nPUlHeCRteNFyS9FHrR+qMdNKJPoPEzJiaA83JA0z3QNP9fuKir89jM2wamDPwkBPQoLxByRZCwkx2c9ldGlIwREMKhhzxNeFoWPWd9cn/Y8ng3O1xY2djr/olOgzHwRbobq3O3R+Xekozou/4ySQcC6uxozG+v7taAj973GnoaOjVqDFOm/OIoTex8IE7O+W74qPyfF6Abgu19QjPDR0NybDcGmxN62AsZXk4Ph6LFy/WokWLko99Pp+qqqosrOjIEieiuo46vd3wtqYMmmJ1SSe9xHBCiVEcDnQeSPYl7X4Squ+oVzgW7tU2SzwlyeDRPfQmTkoDcwdmfT87nDin3anB+YM1OH/wEV+TCE/dg1P3EF3bEQ/QETOiff592uffd8RtOQxH8gr4Q/pBdz0ekDOAAN0HwrGwmjqbeozicKDzQLLbTWJf9rbF12bY4h9+Pht6uz0u8ZQQfHFEiRboTB0sIKvPqAMGDJDdblddXc+hTurq6lRRcfhPLW63W253Zow/ahiGJlZM1LO7ntUbtW8QjvtYNBZVW6gt+WnXF/QdvB/yqSXQkgzAieHMWoItvR5OKDEKQeKiqe5fYScel+WWMR4uUsZpc2pQ/iANyh90xNdEYvELBLt/lfrZFuiGzgZFzIj2+/drv3+/1HD4bdkNuwbkDEi2NCfGY02M1VrsLpbX7U2uL3AVnBTfgAQigeRYvZ8dJ7w50BwPv13HnsRxp7cO6TbT7UNLYj3DB+Jkl9X/+10ulyZMmKC1a9dq5syZkuIX5K1du1YLFiywtrg+Mql8kp7d9aw21W6yupQTkjgZJCeFCPrkj/gViUV6Ll3j0352BqLkfTOmmA7eN2UedvaicCyszkinApHAwdtopzrDnQpE4+uOdeiyBEOGitxFySuKSz2lh4Tg8txyDcwZyOQtyDgOmyPZengkkVhEBzoPHDE8J749iZrR5Nf5vWE37AeH/3MW9Jw1rNvsYfmufOU4cg6Z3TAxA5nbHp+FzG6zy2E4kmPSHmtLqGmaCsfCCkW7Zk7rGie7+4xqneGes68dbia2xHGvJdgiX9DXq+5Un+UwHCrJKTlkJIdk6O067hR7ik+KDxjAicjqcCxJixYt0ty5czVx4kSde+65Wrp0qfx+v+bNm2d1aX1iYsVESdLWxq0KRALyODwWV3Rk4VhYu1p2aduBbdrevF17fHv0Sfsn2t++/7hOBqmS48hRoatQhe7C+G3X4nV7ewwtlLgt9hTT6oKTmsPmiIexvHKNHTj2sK9JXPiVCM1NgaZky2hLsCU+21mgVc3B+GN/2K+oGU0Of9cvdXcF5URolpT8sH24aYH7c2a17h8Euo/RW+wu7jF8WWLxur2EXqCPZP0ZfPbs2WpoaNBPf/pT1dbW6uyzz9aaNWsOuUgvU1UXVKssp0z1nfXa0rBF5w5Kr8lNdrfu1qufvKr1+9erpq5GnZHOI742cTJIBM88Z56cNqccNkePOegdNocMHZyByJDRYxa07q1ANnW73232IofNoRxHjnIcOfLYPfFbh+fgOodH+c74lMC07gJ9z26zJyczGaMxR319KBpKhmdfyKf2UHt8IoRukyH4Q/74bdgfn12s20yHnZFOBaPB5EyHhxMxI5Ip6Tgzr9MWnzWt+0yOHocnOdFEYua17rM/5jnzDgZgz8EgnO/Mp08vYJGsD8eStGDBgqzpRvFZhmFoQsUEPbf7Ob1R90ZahOPGzkY9u+tZPbvrWb3X9F6P5wqcBRpZOlIjS0ZqmHeYhuQP0ZD8ISr2FCvPmcfJAMBhueyuZJg+UaZpKhQLKRo7OKXv4ab3NQyjx4fvz04NbMhIBmGnzUnLLZAlTopwnO0mVUzSc7ufs7zf8c7mnXpk2yN6ZtczybF3HYZD5w46V+dVnqeplVM1vGg4ARiApQzDiF/oykAZAA6DcJwFJpbH+x1vadiiYDSY8tENPvZ9rF/X/Fpr96xNrhs7cKz+4dR/0FeHflXFnuKU1gMAAHC8CMdZYGjhUJV6SnUgcEBbG7YmL9Lrb63BVj3w9gN67P3HFDEjMmRo+inTNfesuRo3cFxKagAAAOhLhOMsYBiGJlVM0pqP1mhT3aaUhOO1e9bq9g23q7GzUZL0hcFf0E0Tb/rcGXMAAADSHVcPZIlE14qN+zf26/u0Blv1o1d+pIUvLVRjZ6OGeYfpt1/5re6ffj/BGAAAZDxajrPE+UPOl7HRUE1djfb49qi6sLrP3+Pthrf1w3U/1H7/ftkMm64+62r94OwfMIMbAADIGrQcZ4nB+YM1bfA0SdKftv+pT7dtmqYeefcRXf3c1drv36/qgmo9evGjunHCjQRjAACQVQjHWWT2iNmSpKc+fEqBSN/MONcR7tDN627Wv7/x74qYEc0YOkOPf/1xjRl49EH7AQAAMg3hOIt8YfAXNChvkFqDrXr+4+dPeHuftn+q7z73XT3/8fNy2Bz6yeSf6FcX/Er5rvw+qBYAACD9EI6ziN1m1+VnXC5Jenz74ye0rU21mzTnmTna0bxDJZ4S/W7G7zRn5Bwm8AAAAFmNcJxlLht+mRyGQ1satuj9pveP+edN09Sq91bp/zz/f9QSbNGo0lF6/OuPa3zZ+H6oFgAAIL0QjrPMgJwBmn7KdEnSA28/INM0e/2zgUhA/7r+X7Xk9SWKmlFdcuoleuRrj6gir6K/ygUAAEgrhOMsdPXoq+UwHFq7Z61WvruyVz+zq2WX/vEv/6gnP3hSNsOmmybcpCXnL5HH4enfYgEAANII4TgLnVV6ln587o8lSUvfXKrXPn3tiK+NxqL60/Y/ac6zc/RB8wcq8ZRo+fTlunr01fQvBgAAJx3CcZaaPWK2Lht+mWJmTD985Yd69ZNXFY1Fk8+bpqmX976sy5++XD/f8HN1Rjo1ddBU/dc//JfOqzzPusIBAAAsZJjH0in1JOTz+eT1etXa2qrCwkKryzkmoWhI89bM05bGLZKkyrxKXTDkAu3z79P2pu2q66iTJBW6CvX9cd/XlWdeKZvB5yUAAJB9epvpCMdHkcnhWJKaA8164O0H9PSup9UWauvxnNvu1pVnXqlrxlyjQlfm/W4AAAC9RTjuI5kejhMCkYBe+PgFbTuwTdWF1RpRPEIjSkYoz5lndWkAAAD9jnDcR7IlHAMAAJzMepvp6GAKAAAAdCEcAwAAAF0IxwAAAEAXwjEAAADQxWF1Aekucb2iz+ezuBIAAAAcr0SWO9pYFITjo2hri48NXFVVZXElAAAAOFFtbW3yer1HfJ6h3I4iFotp3759KigokGEY/f5+Pp9PVVVV2rt3L0PHZTj2ZXZgP2YH9mP2YF9mByv2o2maamtrU2VlpWy2I/cspuX4KGw2m4YMGZLy9y0sLOSPPkuwL7MD+zE7sB+zB/syO6R6P35ei3ECF+QBAAAAXQjHAAAAQBfCcZpxu9267bbb5Ha7rS4FJ4h9mR3Yj9mB/Zg92JfZIZ33IxfkAQAAAF1oOQYAAAC6EI4BAACALoRjAAAAoAvhGAAAAOhCOE4z9913n4YOHSqPx6PJkyfr9ddft7okHIMlS5Zo0qRJKigoUFlZmWbOnKnt27dbXRZO0C9+8QsZhqGFCxdaXQqOw6effqrvfOc7Ki0tVU5OjsaMGaM33njD6rJwDKLRqG699VYNGzZMOTk5Ou200/Tzn/9cjCmQ/l555RVdeumlqqyslGEYeuqpp3o8b5qmfvrTn2rQoEHKycnR9OnT9cEHH1hTbBfCcRp5/PHHtWjRIt1222168803NW7cOM2YMUP19fVWl4ZeWrdunebPn68NGzbohRdeUDgc1le/+lX5/X6rS8Nx2rRpk377299q7NixVpeC49Dc3Kxp06bJ6XTqueee07Zt23T33XeruLjY6tJwDH75y19q+fLluvfee/Xee+/pl7/8pe666y7dc889VpeGo/D7/Ro3bpzuu+++wz5/1113admyZXrggQe0ceNG5eXlacaMGQoEAimu9CCGcksjkydP1qRJk3TvvfdKkmKxmKqqqnTdddfplltusbg6HI+GhgaVlZVp3bp1uuCCC6wuB8eovb1d55xzju6//37dfvvtOvvss7V06VKry8IxuOWWW/Taa6/p1VdftboUnICvf/3rKi8v18MPP5xcN2vWLOXk5OjRRx+1sDIcC8MwtHr1as2cOVNSvNW4srJSN910k26++WZJUmtrq8rLy7Vy5UrNmTPHkjppOU4ToVBINTU1mj59enKdzWbT9OnTtX79egsrw4lobW2VJJWUlFhcCY7H/Pnzdckll/T4u0Rm+e///m9NnDhRV1xxhcrKyjR+/Hg99NBDVpeFY3Teeedp7dq12rFjhyTp7bff1t/+9jddfPHFFleGE7F7927V1tb2OMZ6vV5NnjzZ0uzjsOyd0UNjY6Oi0ajKy8t7rC8vL9f7779vUVU4EbFYTAsXLtS0adM0evRoq8vBMXrsscf05ptvatOmTVaXghOwa9cuLV++XIsWLdI///M/a9OmTbr++uvlcrk0d+5cq8tDL91yyy3y+XwaOXKk7Ha7otGo7rjjDl155ZVWl4YTUFtbK0mHzT6J56xAOAb6yfz58/XOO+/ob3/7m9Wl4Bjt3btXN9xwg1544QV5PB6ry8EJiMVimjhxou68805J0vjx4/XOO+/ogQceIBxnkD/96U/64x//qFWrVumss87S5s2btXDhQlVWVrIf0efoVpEmBgwYILvdrrq6uh7r6+rqVFFRYVFVOF4LFizQM888o5deeklDhgyxuhwco5qaGtXX1+ucc86Rw+GQw+HQunXrtGzZMjkcDkWjUatLRC8NGjRIo0aN6rHuzDPP1J49eyyqCMfjhz/8oW655RbNmTNHY8aM0Xe/+13deOONWrJkidWl4QQk8k26ZR/CcZpwuVyaMGGC1q5dm1wXi8W0du1aTZ061cLKcCxM09SCBQu0evVqvfjiixo2bJjVJeE4XHTRRdq6das2b96cXCZOnKgrr7xSmzdvlt1ut7pE9NK0adMOGU5xx44dOuWUUyyqCMejo6NDNlvPyGK32xWLxSyqCH1h2LBhqqio6JF9fD6fNm7caGn2oVtFGlm0aJHmzp2riRMn6txzz9XSpUvl9/s1b948q0tDL82fP1+rVq3Sn//8ZxUUFCT7THm9XuXk5FhcHXqroKDgkH7ieXl5Ki0tpf94hrnxxht13nnn6c4779S3vvUtvf7663rwwQf14IMPWl0ajsGll16qO+64Q9XV1TrrrLP01ltv6T/+4z/0ve99z+rScBTt7e3auXNn8vHu3bu1efNmlZSUqLq6WgsXLtTtt9+u4cOHa9iwYbr11ltVWVmZHNHCEibSyj333GNWV1ebLpfLPPfcc80NGzZYXRKOgaTDLitWrLC6NJygL37xi+YNN9xgdRk4Dk8//bQ5evRo0+12myNHjjQffPBBq0vCMfL5fOYNN9xgVldXmx6Pxzz11FPNn/zkJ2YwGLS6NBzFSy+9dNjz4ty5c03TNM1YLGbeeuutZnl5uel2u82LLrrI3L59u6U1M84xAAAA0IU+xwAAAEAXwjEAAADQhXAMAAAAdCEcAwAAAF0IxwAAAEAXwjEAAADQhXAMAAAAdCEcAwAAAF0IxwCQxV5++WUZhqGWlharSwGAjMAMeQCQRb70pS/p7LPP1tKlSyVJoVBITU1NKi8vl2EY1hYHABnAYXUBAID+43K5VFFRYXUZAJAx6FYBAFni6quv1rp16/Sb3/xGhmHIMAytXLmyR7eKlStXqqioSM8884xGjBih3NxcXX755ero6NAjjzyioUOHqri4WNdff72i0Why28FgUDfffLMGDx6svLw8TZ48WS+//LI1vygA9CNajgEgS/zmN7/Rjh07NHr0aP3bv/2bJOndd9895HUdHR1atmyZHnvsMbW1temyyy7TN7/5TRUVFekvf/mLdu3apVmzZmnatGmaPXu2JGnBggXatm2bHnvsMVVWVmr16tX62te+pq1bt2r48OEp/T0BoD8RjgEgS3i9XrlcLuXm5ia7Urz//vuHvC4cDmv58uU67bTTJEmXX365/vCHP6iurk75+fkaNWqUvvzlL+ull17S7NmztWfPHq1YsUJ79uxRZWWlJOnmm2/WmjVrtGLFCt15552p+yUBoJ8RjgHgJJObm5sMxpJUXl6uoUOHKj8/v8e6+vp6SdLWrVsVjUZ1xhln9NhOMBhUaWlpaooGgBQhHAPAScbpdPZ4bBjGYdfFYjFJUnt7u+x2u2pqamS323u8rnugBoBsQDgGgCzicrl6XEjXF8aPH69oNKr6+np94Qtf6NNtA0C6YbQKAMgiQ4cO1caNG/XRRx+psbEx2fp7Is444wxdeeWVuuqqq/Tkk09q9+7dev3117VkyRI9++yzfVA1AKQPwjEAZJGbb75Zdrtdo0aN0sCBA7Vnz54+2e6KFSt01VVX6aabbtKIESM0c+ZMbdq0SdXV1X2yfQBIF8yQBwAAAHSh5RgAAADoQjgGAAAAuhCOAQAAgC6EYwAAAKAL4RgAAADoQjgGAAAAuhCOAQAAgC6EYwAAAKAL4RgAAADoQjgGAAAAuhCOAQAAgC7/H0Xmf0svYUSvAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(3, 1, figsize=(7, 5.5), sharex=True, layout=\"constrained\")\n", "for i, label in enumerate([\"position\", \"velocity\"]):\n", " axes[i].plot(time, x_target[:, i], \"k:\", label=\"target\")\n", " axes[i].plot(time, Xs[:, i], c=f\"C{i}\", label=\"LQR\")\n", " axes[i].set_ylabel(label)\n", "axes[0].legend(loc=\"upper right\")\n", "axes[2].plot(time[:-1], Us, c=\"C2\")\n", "axes[2].set(ylabel=\"input\", xlabel=\"time\");" ] }, { "cell_type": "markdown", "id": "ecf302f3", "metadata": {}, "source": [ "The controller first closes the gap from $x_0 = (-1, 0)$ to the target. After that, the input is\n", "the acceleration the reference needs, $-\\omega^2 \\sin(\\omega t)$.\n", "\n", "## How to adapt\n", "\n", "- **Any reference:** set `x_target` to any array of shape `(T+1, n)`. If the reference is not\n", " dynamically feasible, the controller trades tracking error against effort through `Q` and `R`.\n", "- **Tracking only part of the state:** put zeros in the diagonal of `Q` for components you do not\n", " care about. Their entries in `q` then vanish automatically.\n", "- **Input references:** to track a nominal input $u^\\star_t$, set `r = -(u_target @ R.T)` in the\n", " same way.\n", "- **Time-varying weights:** build `Q` with shape `(T, n, n)`. For example, weight later times more\n", " heavily to allow a transient at the start." ] } ], "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.11.11" } }, "nbformat": 4, "nbformat_minor": 5 }