From 04c937c0832c10e622f0b39d18e9aa7b2a03201a Mon Sep 17 00:00:00 2001 From: Stefano Date: Thu, 15 Dec 2022 09:42:51 +0100 Subject: [PATCH 1/3] predictions histogram distribution added --- docs/examples/basic_ranking.ipynb | 358 ++++++++++++++++++++++++++---- 1 file changed, 318 insertions(+), 40 deletions(-) diff --git a/docs/examples/basic_ranking.ipynb b/docs/examples/basic_ranking.ipynb index f37750dd..c22a8da2 100644 --- a/docs/examples/basic_ranking.ipynb +++ b/docs/examples/basic_ranking.ipynb @@ -39,20 +39,20 @@ "source": [ "# Recommending movies: ranking\n", "\n", - "\u003ctable class=\"tfo-notebook-buttons\" align=\"left\"\u003e\n", - " \u003ctd\u003e\n", - " \u003ca target=\"_blank\" href=\"https://www.tensorflow.org/recommenders/examples/basic_ranking\"\u003e\u003cimg src=\"https://www.tensorflow.org/images/tf_logo_32px.png\" /\u003eView on TensorFlow.org\u003c/a\u003e\n", - " \u003c/td\u003e\n", - " \u003ctd\u003e\n", - " \u003ca target=\"_blank\" href=\"https://colab.research.google.com/github/tensorflow/recommenders/blob/main/docs/examples/basic_ranking.ipynb\"\u003e\u003cimg src=\"https://www.tensorflow.org/images/colab_logo_32px.png\" /\u003eRun in Google Colab\u003c/a\u003e\n", - " \u003c/td\u003e\n", - " \u003ctd\u003e\n", - " \u003ca target=\"_blank\" href=\"https://github.com/tensorflow/recommenders/blob/main/docs/examples/basic_ranking.ipynb\"\u003e\u003cimg src=\"https://www.tensorflow.org/images/GitHub-Mark-32px.png\" /\u003eView source on GitHub\u003c/a\u003e\n", - " \u003c/td\u003e\n", - " \u003ctd\u003e\n", - " \u003ca href=\"https://storage.googleapis.com/tensorflow_docs/recommenders/docs/examples/basic_ranking.ipynb\"\u003e\u003cimg src=\"https://www.tensorflow.org/images/download_logo_32px.png\" /\u003eDownload notebook\u003c/a\u003e\n", - " \u003c/td\u003e\n", - "\u003c/table\u003e\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " View on TensorFlow.org\n", + " \n", + " Run in Google Colab\n", + " \n", + " View source on GitHub\n", + " \n", + " Download notebook\n", + "
\n", "\n" ] }, @@ -84,7 +84,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "id": "9gG3jLOGbaUv" }, @@ -96,7 +96,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "id": "SZGYDaF-m5wZ" }, @@ -115,7 +115,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "id": "BxQ_hy7xPH3N" }, @@ -137,11 +137,110 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": { "id": "aaQhqcLGP0jL" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1mDownloading and preparing dataset Unknown size (download: Unknown size, generated: Unknown size, total: Unknown size) to C:\\Users\\stefa\\tensorflow_datasets\\movielens\\100k-ratings\\0.1.1...\u001b[0m\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1a945cb266aa4929b781a8cfc6a40d28", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Dl Completed...: 0 url [00:00, ? url/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "878c4b495db24dd696ce8a304aea8f02", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Dl Size...: 0 MiB [00:00, ? MiB/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ea6fff4a5a9f42b4b1f6a4983fa82556", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Extraction completed...: 0 file [00:00, ? file/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ed689fdfd1994b268ddc776cabca2bc7", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Generating splits...: 0%| | 0/1 [00:00" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "RankingModel()(([\"42\"], [\"One Flew Over the Cuckoo's Nest (1975)\"]))" ] @@ -308,7 +446,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": { "id": "tJ61Iz2QTBw3" }, @@ -344,7 +482,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": { "id": "8n7c5CHFp0ow" }, @@ -360,11 +498,11 @@ " metrics=[tf.keras.metrics.RootMeanSquaredError()]\n", " )\n", "\n", - " def call(self, features: Dict[str, tf.Tensor]) -\u003e tf.Tensor:\n", + " def call(self, features: Dict[str, tf.Tensor]) -> tf.Tensor:\n", " return self.ranking_model(\n", " (features[\"user_id\"], features[\"movie_title\"]))\n", "\n", - " def compute_loss(self, features: Dict[Text, tf.Tensor], training=False) -\u003e tf.Tensor:\n", + " def compute_loss(self, features: Dict[Text, tf.Tensor], training=False) -> tf.Tensor:\n", " labels = features.pop(\"user_rating\")\n", " \n", " rating_predictions = self(features)\n", @@ -388,14 +526,14 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": { "id": "aW63YaqP2wCf" }, "outputs": [], "source": [ "model = MovielensModel()\n", - "model.compile(optimizer=tf.keras.optimizers.Adagrad(learning_rate=0.1))" + "callback = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=5)" ] }, { @@ -409,7 +547,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": { "id": "53QJwY1gUnfv" }, @@ -430,13 +568,67 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": { "id": "ZxPntlT8EFOZ" }, - "outputs": [], - "source": [ - "model.fit(cached_train, epochs=3)" + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/100\n", + "10/10 [==============================] - 2s 109ms/step - root_mean_squared_error: 3.5821 - loss: 12.7274 - regularization_loss: 0.0000e+00 - total_loss: 12.7274 - val_root_mean_squared_error: 3.3961 - val_loss: 11.5346 - val_regularization_loss: 0.0000e+00 - val_total_loss: 11.5346\n", + "Epoch 2/100\n", + "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 3.1310 - loss: 9.5656 - regularization_loss: 0.0000e+00 - total_loss: 9.5656 - val_root_mean_squared_error: 2.6487 - val_loss: 7.0169 - val_regularization_loss: 0.0000e+00 - val_total_loss: 7.0169\n", + "Epoch 3/100\n", + "10/10 [==============================] - 0s 26ms/step - root_mean_squared_error: 2.0491 - loss: 3.9119 - regularization_loss: 0.0000e+00 - total_loss: 3.9119 - val_root_mean_squared_error: 1.1686 - val_loss: 1.3422 - val_regularization_loss: 0.0000e+00 - val_total_loss: 1.3422\n", + "Epoch 4/100\n", + "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 1.2928 - loss: 1.6691 - regularization_loss: 0.0000e+00 - total_loss: 1.6691 - val_root_mean_squared_error: 1.2106 - val_loss: 1.4309 - val_regularization_loss: 0.0000e+00 - val_total_loss: 1.4309\n", + "Epoch 5/100\n", + "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 1.0486 - loss: 1.0975 - regularization_loss: 0.0000e+00 - total_loss: 1.0975 - val_root_mean_squared_error: 1.0435 - val_loss: 1.0820 - val_regularization_loss: 0.0000e+00 - val_total_loss: 1.0820\n", + "Epoch 6/100\n", + "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 0.9995 - loss: 0.9892 - regularization_loss: 0.0000e+00 - total_loss: 0.9892 - val_root_mean_squared_error: 0.9495 - val_loss: 0.8974 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8974\n", + "Epoch 7/100\n", + "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 0.9360 - loss: 0.8789 - regularization_loss: 0.0000e+00 - total_loss: 0.8789 - val_root_mean_squared_error: 0.9537 - val_loss: 0.9078 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.9078\n", + "Epoch 8/100\n", + "10/10 [==============================] - 0s 26ms/step - root_mean_squared_error: 0.9226 - loss: 0.8535 - regularization_loss: 0.0000e+00 - total_loss: 0.8535 - val_root_mean_squared_error: 0.9423 - val_loss: 0.8913 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8913\n", + "Epoch 9/100\n", + "10/10 [==============================] - 0s 28ms/step - root_mean_squared_error: 0.9183 - loss: 0.8451 - regularization_loss: 0.0000e+00 - total_loss: 0.8451 - val_root_mean_squared_error: 0.9381 - val_loss: 0.8833 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8833\n", + "Epoch 10/100\n", + "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 0.9147 - loss: 0.8390 - regularization_loss: 0.0000e+00 - total_loss: 0.8390 - val_root_mean_squared_error: 0.9379 - val_loss: 0.8830 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8830\n", + "Epoch 11/100\n", + "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 0.9133 - loss: 0.8366 - regularization_loss: 0.0000e+00 - total_loss: 0.8366 - val_root_mean_squared_error: 0.9373 - val_loss: 0.8825 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8825\n", + "Epoch 12/100\n", + "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 0.9129 - loss: 0.8356 - regularization_loss: 0.0000e+00 - total_loss: 0.8356 - val_root_mean_squared_error: 0.9370 - val_loss: 0.8819 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8819\n", + "Epoch 13/100\n", + "10/10 [==============================] - 0s 28ms/step - root_mean_squared_error: 0.9125 - loss: 0.8350 - regularization_loss: 0.0000e+00 - total_loss: 0.8350 - val_root_mean_squared_error: 0.9369 - val_loss: 0.8817 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8817\n", + "Epoch 14/100\n", + "10/10 [==============================] - 0s 27ms/step - root_mean_squared_error: 0.9124 - loss: 0.8347 - regularization_loss: 0.0000e+00 - total_loss: 0.8347 - val_root_mean_squared_error: 0.9369 - val_loss: 0.8818 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8818\n", + "Epoch 15/100\n", + "10/10 [==============================] - 0s 24ms/step - root_mean_squared_error: 0.9123 - loss: 0.8344 - regularization_loss: 0.0000e+00 - total_loss: 0.8344 - val_root_mean_squared_error: 0.9370 - val_loss: 0.8819 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8819\n", + "Epoch 16/100\n", + "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 0.9121 - loss: 0.8343 - regularization_loss: 0.0000e+00 - total_loss: 0.8343 - val_root_mean_squared_error: 0.9370 - val_loss: 0.8819 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8819\n", + "Epoch 17/100\n", + "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 0.9121 - loss: 0.8341 - regularization_loss: 0.0000e+00 - total_loss: 0.8341 - val_root_mean_squared_error: 0.9371 - val_loss: 0.8820 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8820\n", + "Epoch 18/100\n", + "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 0.9120 - loss: 0.8340 - regularization_loss: 0.0000e+00 - total_loss: 0.8340 - val_root_mean_squared_error: 0.9372 - val_loss: 0.8820 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8820\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001))\n", + "model.fit(cached_train, epochs=100, validation_data=cached_test, callbacks=[callback])" ] }, { @@ -459,11 +651,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": { "id": "W-zu6HLODNeI" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5/5 [==============================] - 0s 5ms/step - root_mean_squared_error: 0.9372 - loss: 0.8790 - regularization_loss: 0.0000e+00 - total_loss: 0.8790\n" + ] + }, + { + "data": { + "text/plain": [ + "{'root_mean_squared_error': 0.9371620416641235,\n", + " 'loss': 0.8820379376411438,\n", + " 'regularization_loss': 0,\n", + " 'total_loss': 0.8820379376411438}" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "model.evaluate(cached_test, return_dict=True)" ] @@ -477,6 +690,67 @@ "The lower the RMSE metric, the more accurate our model is at predicting ratings." ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "x0p5KVl-3w1w" + }, + "source": [ + "### Test predictions distribution" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "id": "e_GB-NMw3syS" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5/5 [==============================] - 0s 6ms/step\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1UAAAILCAYAAAAADLb1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABoA0lEQVR4nO3deVzU1eL/8fewCYgCiuGS5i1Ec0vUVNSrpaF13XG75bXs5pJZt7ppWVpahmumeUs0zazEr7mkpZlb19wXVNLq5kLllimyCiiyzPz+8MfkyIwyfJABfT0fDx/FOZ/PZ85n5gzMe875nI/JYrFYBAAAAAAoEjdXNwAAAAAAyjJCFQAAAAAYQKgCAAAAAAMIVQAAAABgAKEKAAAAAAwgVAEAAACAAYQqAAAAADCAUAUAAAAABhCqAOA2k5eX5+omoAjMZrOrm2CDfgQAfyJUAShTOnTooLp16zr817BhQ7Vo0UI9evTQW2+9pZ9++snVTb6u0aNHq27duho4cKBN+RdffGE9pxMnThTLY5nNZi1evFiTJk1y2I527doVy2Oh+Jw6dUr//Oc/debMGVc3xep///uf+vXr5/R+N6ufDRw4UHXr1tWjjz5arMctjPz36YwZM0r8sQGUHh6ubgAAFKecnBylpaUpLS1Nhw8f1uLFizVs2DC9+OKLrm6ay73yyiv66quv1KtXL1c3BYV05MgR9evXT1lZWa5uitW2bds0bNgwRqoA4CqEKgBlUrNmzTRv3rwC5WazWenp6dq3b5/effdd/fHHH5ozZ45q1aql3r17u6ClRePn56datWpJkjw9PYvlmGfPnnVYV7lyZdWqVUtVqlQplsdC8UhNTS1VgUqSzp8/T6ACgGsQqgCUSe7u7ipfvrzdugoVKqh79+5q1KiRevToocuXL+u9995Tr1695OZWNmY9d+rUSZ06dSqxxxs1apRGjRpVYo8HAMCtpGx8ugCAIvjLX/6iLl26SJLOnTunH3/80cUtAgAAtyJGqgDc0urXr68vvvhCkvT777+rcePGkq5cML9y5Up169ZNL774osaPH6/Y2Fh5enrqnnvu0X/+8x+bqXBbtmzR8uXLFRcXp9TUVPn5+alBgwbq1auXunTpIpPJ5LANcXFxWrhwoX744QclJiaqWrVq6tq1qwYPHuxwny+++EKvvvqqJGnDhg266667Cmxz8OBBLVmyRAcOHNAff/whT09PhYaGqlu3burXr588PDxszjXfypUrrT8fOXLEZpvg4GBt3bq1wGNdvnxZK1as0DfffKOjR48qMzNTgYGBCgsLU+/evdW+fXu751G3bl1J0scff6xGjRpp/vz52rhxo37//Xd5eXnp3nvvVf/+/a3h91ppaWn67LPP9N///le//fabcnNzVblyZd13333q1auXHnjgAYfP4bUOHTqkvn37SpKmTZum7t27O9w2IiJCJ0+eVK9evTR58mRr+Y4dO/T5558rLi5OKSkp8vX1Vc2aNdWuXTsNHDhQlSpVKnR7ruf06dPq2LGjTVn+z88++6yee+45m7q4uDjFxMRo3759SkpKko+Pj0JDQ9WlSxf16dPH4RTSX375RZ9++ql2796tM2fOyMPDQ8HBwWrRooUGDBhgff0kac+ePXr88cdt9s+vnzRpkiIjIw2fd0ZGhpYvX66tW7fq6NGjSk1Nlaenp6pUqaJmzZppwIABatiw4XWPkZOTo08++USrVq3SyZMn5efnZ923VatW193XyPvcnnPnzmnhwoXatm2bTp06JUkKCgpS8+bN1a9fPzVr1syp4wEovQhVAG5pV38Icnd3L1CflpamgQMH6vfff5ckXbp0SampqdZAlZ2drdGjR+vrr7+22S8lJUXbt2/X9u3b9cUXX2jWrFny8/MrcPzZs2frvffesyk7fvy43n//fa1fv1533nmn0+dkNps1Y8YMffjhhzblly9f1oEDB3TgwAGtXr1a8+bNs9smZx0/flwjRoxQfHy8TXlCQoLWr1+v9evX629/+5smT56scuXK2T3G77//rjFjxtisYJeVlaU9e/Zoz5492rFjhyZOnGizz6lTp/T4448XWPXujz/+0B9//KF169apW7dumjZtWqE+7DZu3Fh/+ctf9Ntvv2nt2rUOQ9XBgwd18uRJSVKPHj2s5e+9955mz55ts23+oig//vijFi1apI8++sga3EuC2WzW1KlT9fHHH9uUZ2dnKzY2VrGxsVq6dKnmzJmj4OBgm222bNmi5557TpcvX7bZ77ffftNvv/2mpUuXaty4cSW2ot4PP/ygp59+WomJiTblOTk5OnHihE6cOKFVq1bprbfesobja12+fFmDBw/W7t27bco2bNigDRs2aNCgQdYvK65m9H3u6HyeeuoppaWl2ZSfPn1ap0+f1qpVqzRs2DD9+9//LtTxAJRuTP8DcEu7esrfPffcU6B+69atSkhI0Pjx47Vjxw4tXbrU5kPXmDFjrB+0+vXrpy+++EJ79+7V2rVrNWLECHl6emrHjh3697//LYvFYnPsL774whqo7r//fsXExGj37t1atWqVevXqpWPHjmnz5s1On9O8efOsgaply5b65JNPtGvXLq1du9a6NPuBAwf05ptvSpLeeustHThwwPqteLdu3azh60ZSUlL01FNPKT4+Xp6ennr66ae1du1a7dmzR0uWLFHnzp0lSWvXrrX7YTVfVFSUkpKS9Pzzz2vDhg3atWuXoqOjraFyxYoVNh+EJWn8+PE6c+aMgoKCNHXqVG3atEm7du3S559/bh0ZW716dYEPwteTH5K2b99e4MNuvtWrV0uSgoOD1bJlS0lXRoLyA1W3bt20fPly7dq1S5s2bdKbb74pPz8/XbhwQa+88kqx3E+qRo0aOnDggE1w/vrrr3XgwAENGzbMWjZr1ixroOrUqZMWL16sPXv2aNOmTXr11VdVoUIF/e9//9OwYcNswtPFixf18ssv6/Lly2rcuLEWLFigrVu3atu2bYqOjtbdd98ti8WiqKgo6xcOzZs3t+lXkqz96HqjfoWRkZGh4cOHKzExUUFBQXr77be1YcMG7d69W19++aWee+45+fj4yGw2a+LEicrIyLB7nJ9++km7d+/WAw88oGXLlmn37t1atGiRwsLCJEkLFy5UTExMgf2MvM/tsVgsevnll5WWlqbatWvrgw8+0ObNm7Vz50598sknatKkiSRp7ty5iouLK+KzBqBUsQBAGfLggw9aQkNDLf/4xz9uuO2RI0csjRo1soSGhlq6dOliU/fKK69YQkNDLaGhoZYZM2bY3X/Xrl3WbRYsWGB3m40bN1q32bBhg7X80qVLltatW1tCQ0Mtf//73y2XL18usG9UVJR132vPZ8WKFda648ePW8vPnj1rPadhw4ZZcnNzCxz37bfftoSGhlrq1atnOXnypLX8H//4hyU0NNTyyiuvFNgn//n461//alM+efJkazs2btxo9zl46623rNt89913NnX55aGhoZZvv/22wL5Hjhyx1r/11lvW8vT0dEvdunUtoaGhllWrVhXYLzs729K5c2fr81BYp0+fth536dKlBerz8vIsbdq0sYSGhlqmTp1a4HmIiIiwmM3mAvutXLnSeh4//vhjodtzI7t377Ye99SpUzZ1x48ft9SrV88SGhpqmTBhgt39f/jhB8u9995rCQ0NtXz88cfW8s2bN1uP+8cffxTY79SpU9ZjX9v3r+6bznLUzxYtWmQ95r59++zuu3DhQof9LL9vh4aGWp577jlLXl6eTX1WVpald+/eltDQUEuLFi0sWVlZ1joj73OL5c8+/u6771rLjh49ai2PjY0tcLwLFy5Y7r///uu+dgDKFkaqAJRJeXl5yszMLPAvJSVFP//8sz788EMNGDBAly9flslkuu7Kdg8//LDd8v/7v/+TdGXU4IknnrC7zUMPPWQdAfr888+t5bt377ZOY3rppZfk5eVVYN9///vf8vf3L9wJ/3+bNm2yntNrr71md0rj4MGDVbt2bbVr107JyclOHf9qZrNZK1askHTlPB966CG7273yyivWa4nyn7Nr1alTRx06dChQHhoaqurVq0u6Mi0qX05OjnVEICkpqcB+np6emjp1qmJiYvTWW28V+pxq1Kih+++/X9KV0bVr7d69W+fPn5dkO/UvOztb0pURnosXLxbYr3Pnzpo9e7ZWr16tOnXqFLo9Rnz++ecym83y8fFxeB+2hg0bWq9Xu7p/Xj1qde10O0m688479eGHH2rZsmXq06dPMbe8oGrVqmnAgAF69NFHHV5nlD9qKF0ZQbXHw8NDr7/+eoFVPsuVK6eRI0dKurJM/dUjxEbe545c/fza678VKlTQBx98oCVLluiZZ5654fEAlH5cUwWgTNq/f7+aNm16w+08PT01ZswYhwspeHh4OPwQHBsbK+nKYheXLl1y+Bj33Xef9u/fr7i4OFksFplMJutUNl9fX4cfEr29vdW2bVunpq/t2rVLknT33Xdb72N1reDgYK1fv77Qx3TkyJEj1ily11ve3cvLSx06dNDy5csVGxtrfQ6udr3rjCpVqqQzZ87YPMeBgYEKCQlRfHy83nnnHR09elSdOnVSq1at5Ovre8NjXk/37t21d+9e7dmzR0lJSapcubK1Ln/q37333qvQ0FBrefPmzbVo0SKdP39ekZGR6t+/v9q3b2+dUurj41NgYYmbbe/evZKu9AVJyszMtLtd48aN9dVXX+nXX39VSkqKAgMD1aRJE3l4eCg3N1dPPvmk+vfvrwcffFBNmjSxBvW//vWvJXMikjp06GA3dOdLTEy0mSaXk5Njd7uwsDCH91pr0aKFfH19dfHiRe3bt8/6ZYqR97kjderUUUBAgFJTUzVq1Cjt2bNHDz30kJo3b279giU/3AO4NRCqANxSypUrpwoVKugvf/mLmjVrpr59+153MQg/Pz+7oz0ZGRnWb5g3btyojRs33vCxMzIylJ6erooVK+qPP/6QJNWsWfO6H77yPxAX1rlz5yTJ7mqAxS3/HCT716NdLb/+6ufgaoGBgQ73zf+QabnmWpXx48dr8ODBysrKsq5Y6OnpqaZNm6p9+/bq1KmTatas6dQ5SdIjjzyit99+W1lZWVq3bp0GDBgg6cpoVP7rfPUolXQlVD744IPavHmzjh8/rilTpmjKlCmqXr262rZtqwcffFBt27a1OyJ5s+SvJvfTTz8V6gsG6coNoAMDAxUcHKwXX3xR06ZN04ULFzRv3jzNmzdPFStWVHh4uNq3b6+OHTsqICDgJp5BQRaLRXv27NGPP/6oEydO6OTJk/r111+VkJBQqP2v935yc3PTnXfeqaNHj1oXPzH6PnekXLlyeuONNzRq1ChdvnxZMTExiomJka+vr+6//361b99eERERuuOOOwp1XgBKP0IVgDKpRYsW+uyzzwwfx9FqdY6+9b+RjIwMVaxYUenp6ZKujGBcj7Or8+WPHN3ouMXh6sUA8keHHLm6PRcvXizwgTN/eXdn3H///frqq680Z84cbdy4Uenp6crJybGuGDh16lQ9+OCDmjBhgsPRCXv8/PzUoUMHrV27VmvXrrWGqi1btig9PV3u7u4Flnh3d3fX7NmztXz5ci1ZskQ//fSTJOnMmTNaunSpli5dqkqVKunll19Wr169nD7XonC0WENh9xk8eLAaNGigBQsWaNeuXcrJydGFCxesKzp6enpq4MCBeumll4r0+jlr06ZNmj59un799VebcpPJpLvvvlv33Xefza0B7LnR+yK/H2dlZUky/j6/ni5duqh27dr68MMP9d133ykrK0sXL17Uli1btGXLFkVFRal79+56/fXXHd7IHEDZQagCADu8vb2t/z906FC99NJLTu2ff62UvetvrpZ/rY6z7breNKXicnWQutF5XP1hvTgD31133aVJkyZZVzDcuXOnduzYoR9//FEWi0WbN2/WkCFD9MUXXxS4juZ6evToobVr12r//v06e/asqlat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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "\n", + "sns.set_style('darkgrid')\n", + "\n", + "res_data = pd.DataFrame()\n", + "\n", + "# get predictions from cached test \n", + "res_data['predictions'] = model.predict(cached_test)[:, 0]\n", + "\n", + "# get user rating from test dataset\n", + "test_labels = []\n", + "for r in cached_test:\n", + " test_labels.append((r['user_rating']).numpy())\n", + "\n", + "res_data['test_labels'] = np.concatenate(test_labels)\n", + "\n", + "# plot everythin as kde\n", + "plt.figure(figsize=(10,6), dpi=100)\n", + "#sns.kdeplot(data=res_data, fill=True, bw_adjust=0.9, alpha=0.6, linewidth=0, legend=False)\n", + "sns.histplot(data=res_data, legend=False, alpha=0.8, bins=120)\n", + "plt.legend([\"Predictions\", \"Test Labels\"][::-1], title=\"Legend\", fontsize=12, title_fontsize=16)\n", + "plt.title('Predictions vs. test labels', fontsize=20);" + ] + }, { "cell_type": "markdown", "metadata": { @@ -635,14 +909,13 @@ ], "metadata": { "colab": { - "collapsed_sections": [], "name": "basic_ranking.ipynb", "private_outputs": true, "provenance": [], "toc_visible": true }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3.9.12 ('base')", "language": "python", "name": "python3" }, @@ -656,7 +929,12 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.12" + }, + "vscode": { + "interpreter": { + "hash": "4f523f7c76dd18e7ed336217f32f6f704c23c323644912475b9d3570cf04b060" + } } }, "nbformat": 4, From ef6c8cb59db5e636005dc11731da6cf6399c6062 Mon Sep 17 00:00:00 2001 From: Stefano Date: Thu, 15 Dec 2022 09:44:56 +0100 Subject: [PATCH 2/3] removed cells output --- docs/examples/basic_ranking.ipynb | 270 +++--------------------------- 1 file changed, 20 insertions(+), 250 deletions(-) diff --git a/docs/examples/basic_ranking.ipynb b/docs/examples/basic_ranking.ipynb index c22a8da2..68f966ea 100644 --- a/docs/examples/basic_ranking.ipynb +++ b/docs/examples/basic_ranking.ipynb @@ -84,7 +84,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": { "id": "9gG3jLOGbaUv" }, @@ -96,7 +96,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": { "id": "SZGYDaF-m5wZ" }, @@ -115,7 +115,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": { "id": "BxQ_hy7xPH3N" }, @@ -137,110 +137,11 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": { "id": "aaQhqcLGP0jL" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[1mDownloading and preparing dataset Unknown size (download: Unknown size, generated: Unknown size, total: Unknown size) to C:\\Users\\stefa\\tensorflow_datasets\\movielens\\100k-ratings\\0.1.1...\u001b[0m\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "1a945cb266aa4929b781a8cfc6a40d28", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Dl Completed...: 0 url [00:00, ? url/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "878c4b495db24dd696ce8a304aea8f02", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Dl Size...: 0 MiB [00:00, ? MiB/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "ea6fff4a5a9f42b4b1f6a4983fa82556", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Extraction completed...: 0 file [00:00, ? file/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "ed689fdfd1994b268ddc776cabca2bc7", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Generating splits...: 0%| | 0/1 [00:00" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "RankingModel()(([\"42\"], [\"One Flew Over the Cuckoo's Nest (1975)\"]))" ] @@ -446,7 +308,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": { "id": "tJ61Iz2QTBw3" }, @@ -482,7 +344,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": { "id": "8n7c5CHFp0ow" }, @@ -526,7 +388,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": { "id": "aW63YaqP2wCf" }, @@ -547,7 +409,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": { "id": "53QJwY1gUnfv" }, @@ -568,64 +430,11 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": { "id": "ZxPntlT8EFOZ" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/100\n", - "10/10 [==============================] - 2s 109ms/step - root_mean_squared_error: 3.5821 - loss: 12.7274 - regularization_loss: 0.0000e+00 - total_loss: 12.7274 - val_root_mean_squared_error: 3.3961 - val_loss: 11.5346 - val_regularization_loss: 0.0000e+00 - val_total_loss: 11.5346\n", - "Epoch 2/100\n", - "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 3.1310 - loss: 9.5656 - regularization_loss: 0.0000e+00 - total_loss: 9.5656 - val_root_mean_squared_error: 2.6487 - val_loss: 7.0169 - val_regularization_loss: 0.0000e+00 - val_total_loss: 7.0169\n", - "Epoch 3/100\n", - "10/10 [==============================] - 0s 26ms/step - root_mean_squared_error: 2.0491 - loss: 3.9119 - regularization_loss: 0.0000e+00 - total_loss: 3.9119 - val_root_mean_squared_error: 1.1686 - val_loss: 1.3422 - val_regularization_loss: 0.0000e+00 - val_total_loss: 1.3422\n", - "Epoch 4/100\n", - "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 1.2928 - loss: 1.6691 - regularization_loss: 0.0000e+00 - total_loss: 1.6691 - val_root_mean_squared_error: 1.2106 - val_loss: 1.4309 - val_regularization_loss: 0.0000e+00 - val_total_loss: 1.4309\n", - "Epoch 5/100\n", - "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 1.0486 - loss: 1.0975 - regularization_loss: 0.0000e+00 - total_loss: 1.0975 - val_root_mean_squared_error: 1.0435 - val_loss: 1.0820 - val_regularization_loss: 0.0000e+00 - val_total_loss: 1.0820\n", - "Epoch 6/100\n", - "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 0.9995 - loss: 0.9892 - regularization_loss: 0.0000e+00 - total_loss: 0.9892 - val_root_mean_squared_error: 0.9495 - val_loss: 0.8974 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8974\n", - "Epoch 7/100\n", - "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 0.9360 - loss: 0.8789 - regularization_loss: 0.0000e+00 - total_loss: 0.8789 - val_root_mean_squared_error: 0.9537 - val_loss: 0.9078 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.9078\n", - "Epoch 8/100\n", - "10/10 [==============================] - 0s 26ms/step - root_mean_squared_error: 0.9226 - loss: 0.8535 - regularization_loss: 0.0000e+00 - total_loss: 0.8535 - val_root_mean_squared_error: 0.9423 - val_loss: 0.8913 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8913\n", - "Epoch 9/100\n", - "10/10 [==============================] - 0s 28ms/step - root_mean_squared_error: 0.9183 - loss: 0.8451 - regularization_loss: 0.0000e+00 - total_loss: 0.8451 - val_root_mean_squared_error: 0.9381 - val_loss: 0.8833 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8833\n", - "Epoch 10/100\n", - "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 0.9147 - loss: 0.8390 - regularization_loss: 0.0000e+00 - total_loss: 0.8390 - val_root_mean_squared_error: 0.9379 - val_loss: 0.8830 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8830\n", - "Epoch 11/100\n", - "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 0.9133 - loss: 0.8366 - regularization_loss: 0.0000e+00 - total_loss: 0.8366 - val_root_mean_squared_error: 0.9373 - val_loss: 0.8825 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8825\n", - "Epoch 12/100\n", - "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 0.9129 - loss: 0.8356 - regularization_loss: 0.0000e+00 - total_loss: 0.8356 - val_root_mean_squared_error: 0.9370 - val_loss: 0.8819 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8819\n", - "Epoch 13/100\n", - "10/10 [==============================] - 0s 28ms/step - root_mean_squared_error: 0.9125 - loss: 0.8350 - regularization_loss: 0.0000e+00 - total_loss: 0.8350 - val_root_mean_squared_error: 0.9369 - val_loss: 0.8817 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8817\n", - "Epoch 14/100\n", - "10/10 [==============================] - 0s 27ms/step - root_mean_squared_error: 0.9124 - loss: 0.8347 - regularization_loss: 0.0000e+00 - total_loss: 0.8347 - val_root_mean_squared_error: 0.9369 - val_loss: 0.8818 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8818\n", - "Epoch 15/100\n", - "10/10 [==============================] - 0s 24ms/step - root_mean_squared_error: 0.9123 - loss: 0.8344 - regularization_loss: 0.0000e+00 - total_loss: 0.8344 - val_root_mean_squared_error: 0.9370 - val_loss: 0.8819 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8819\n", - "Epoch 16/100\n", - "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 0.9121 - loss: 0.8343 - regularization_loss: 0.0000e+00 - total_loss: 0.8343 - val_root_mean_squared_error: 0.9370 - val_loss: 0.8819 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8819\n", - "Epoch 17/100\n", - "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 0.9121 - loss: 0.8341 - regularization_loss: 0.0000e+00 - total_loss: 0.8341 - val_root_mean_squared_error: 0.9371 - val_loss: 0.8820 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8820\n", - "Epoch 18/100\n", - "10/10 [==============================] - 0s 25ms/step - root_mean_squared_error: 0.9120 - loss: 0.8340 - regularization_loss: 0.0000e+00 - total_loss: 0.8340 - val_root_mean_squared_error: 0.9372 - val_loss: 0.8820 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.8820\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001))\n", "model.fit(cached_train, epochs=100, validation_data=cached_test, callbacks=[callback])" @@ -651,32 +460,11 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": { "id": "W-zu6HLODNeI" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "5/5 [==============================] - 0s 5ms/step - root_mean_squared_error: 0.9372 - loss: 0.8790 - regularization_loss: 0.0000e+00 - total_loss: 0.8790\n" - ] - }, - { - "data": { - "text/plain": [ - "{'root_mean_squared_error': 0.9371620416641235,\n", - " 'loss': 0.8820379376411438,\n", - " 'regularization_loss': 0,\n", - " 'total_loss': 0.8820379376411438}" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "model.evaluate(cached_test, return_dict=True)" ] @@ -701,29 +489,11 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": { "id": "e_GB-NMw3syS" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "5/5 [==============================] - 0s 6ms/step\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1UAAAILCAYAAAAADLb1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABoA0lEQVR4nO3deVzU1eL/8fewCYgCiuGS5i1Ec0vUVNSrpaF13XG75bXs5pJZt7ppWVpahmumeUs0zazEr7mkpZlb19wXVNLq5kLllimyCiiyzPz+8MfkyIwyfJABfT0fDx/FOZ/PZ85n5gzMe875nI/JYrFYBAAAAAAoEjdXNwAAAAAAyjJCFQAAAAAYQKgCAAAAAAMIVQAAAABgAKEKAAAAAAwgVAEAAACAAYQqAAAAADCAUAUAAAAABhCqAOA2k5eX5+omoAjMZrOrm2CDfgQAfyJUAShTOnTooLp16zr817BhQ7Vo0UI9evTQW2+9pZ9++snVTb6u0aNHq27duho4cKBN+RdffGE9pxMnThTLY5nNZi1evFiTJk1y2I527doVy2Oh+Jw6dUr//Oc/debMGVc3xep///uf+vXr5/R+N6ufDRw4UHXr1tWjjz5arMctjPz36YwZM0r8sQGUHh6ubgAAFKecnBylpaUpLS1Nhw8f1uLFizVs2DC9+OKLrm6ay73yyiv66quv1KtXL1c3BYV05MgR9evXT1lZWa5uitW2bds0bNgwRqoA4CqEKgBlUrNmzTRv3rwC5WazWenp6dq3b5/effdd/fHHH5ozZ45q1aql3r17u6ClRePn56datWpJkjw9PYvlmGfPnnVYV7lyZdWqVUtVqlQplsdC8UhNTS1VgUqSzp8/T6ACgGsQqgCUSe7u7ipfvrzdugoVKqh79+5q1KiRevToocuXL+u9995Tr1695OZWNmY9d+rUSZ06dSqxxxs1apRGjRpVYo8HAMCtpGx8ugCAIvjLX/6iLl26SJLOnTunH3/80cUtAgAAtyJGqgDc0urXr68vvvhCkvT777+rcePGkq5cML9y5Up169ZNL774osaPH6/Y2Fh5enrqnnvu0X/+8x+bqXBbtmzR8uXLFRcXp9TUVPn5+alBgwbq1auXunTpIpPJ5LANcXFxWrhwoX744QclJiaqWrVq6tq1qwYPHuxwny+++EKvvvqqJGnDhg266667Cmxz8OBBLVmyRAcOHNAff/whT09PhYaGqlu3burXr588PDxszjXfypUrrT8fOXLEZpvg4GBt3bq1wGNdvnxZK1as0DfffKOjR48qMzNTgYGBCgsLU+/evdW+fXu751G3bl1J0scff6xGjRpp/vz52rhxo37//Xd5eXnp3nvvVf/+/a3h91ppaWn67LPP9N///le//fabcnNzVblyZd13333q1auXHnjgAYfP4bUOHTqkvn37SpKmTZum7t27O9w2IiJCJ0+eVK9evTR58mRr+Y4dO/T5558rLi5OKSkp8vX1Vc2aNdWuXTsNHDhQlSpVKnR7ruf06dPq2LGjTVn+z88++6yee+45m7q4uDjFxMRo3759SkpKko+Pj0JDQ9WlSxf16dPH4RTSX375RZ9++ql2796tM2fOyMPDQ8HBwWrRooUGDBhgff0kac+ePXr88cdt9s+vnzRpkiIjIw2fd0ZGhpYvX66tW7fq6NGjSk1Nlaenp6pUqaJmzZppwIABatiw4XWPkZOTo08++USrVq3SyZMn5efnZ923VatW193XyPvcnnPnzmnhwoXatm2bTp06JUkKCgpS8+bN1a9fPzVr1syp4wEovQhVAG5pV38Icnd3L1CflpamgQMH6vfff5ckXbp0SampqdZAlZ2drdGjR+vrr7+22S8lJUXbt2/X9u3b9cUXX2jWrFny8/MrcPzZs2frvffesyk7fvy43n//fa1fv1533nmn0+dkNps1Y8YMffjhhzblly9f1oEDB3TgwAGtXr1a8+bNs9smZx0/flwjRoxQfHy8TXlCQoLWr1+v9evX629/+5smT56scuXK2T3G77//rjFjxtisYJeVlaU9e/Zoz5492rFjhyZOnGizz6lTp/T4448XWPXujz/+0B9//KF169apW7dumjZtWqE+7DZu3Fh/+ctf9Ntvv2nt2rUOQ9XBgwd18uRJSVKPHj2s5e+9955mz55ts23+oig//vijFi1apI8++sga3EuC2WzW1KlT9fHHH9uUZ2dnKzY2VrGxsVq6dKnmzJmj4OBgm222bNmi5557TpcvX7bZ77ffftNvv/2mpUuXaty4cSW2ot4PP/ygp59+WomJiTblOTk5OnHihE6cOKFVq1bprbfesobja12+fFmDBw/W7t27bco2bNigDRs2aNCgQdYvK65m9H3u6HyeeuoppaWl2ZSfPn1ap0+f1qpVqzRs2DD9+9//LtTxAJRuTP8DcEu7esrfPffcU6B+69atSkhI0Pjx47Vjxw4tXbrU5kPXmDFjrB+0+vXrpy+++EJ79+7V2rVrNWLECHl6emrHjh3697//LYvFYnPsL774whqo7r//fsXExGj37t1atWqVevXqpWPHjmnz5s1On9O8efOsgaply5b65JNPtGvXLq1du9a6NPuBAwf05ptvSpLeeustHThwwPqteLdu3azh60ZSUlL01FNPKT4+Xp6ennr66ae1du1a7dmzR0uWLFHnzp0lSWvXrrX7YTVfVFSUkpKS9Pzzz2vDhg3atWuXoqOjraFyxYoVNh+EJWn8+PE6c+aMgoKCNHXqVG3atEm7du3S559/bh0ZW716dYEPwteTH5K2b99e4MNuvtWrV0uSgoOD1bJlS0lXRoLyA1W3bt20fPly7dq1S5s2bdKbb74pPz8/XbhwQa+88kqx3E+qRo0aOnDggE1w/vrrr3XgwAENGzbMWjZr1ixroOrUqZMWL16sPXv2aNOmTXr11VdVoUIF/e9//9OwYcNswtPFixf18ssv6/Lly2rcuLEWLFigrVu3atu2bYqOjtbdd98ti8WiqKgo6xcOzZs3t+lXkqz96HqjfoWRkZGh4cOHKzExUUFBQXr77be1YcMG7d69W19++aWee+45+fj4yGw2a+LEicrIyLB7nJ9++km7d+/WAw88oGXLlmn37t1atGiRwsLCJEkLFy5UTExMgf2MvM/tsVgsevnll5WWlqbatWvrgw8+0ObNm7Vz50598sknatKkiSRp7ty5iouLK+KzBqBUsQBAGfLggw9aQkNDLf/4xz9uuO2RI0csjRo1soSGhlq6dOliU/fKK69YQkNDLaGhoZYZM2bY3X/Xrl3WbRYsWGB3m40bN1q32bBhg7X80qVLltatW1tCQ0Mtf//73y2XL18usG9UVJR132vPZ8WKFda648ePW8vPnj1rPadhw4ZZcnNzCxz37bfftoSGhlrq1atnOXnypLX8H//4hyU0NNTyyiuvFNgn//n461//alM+efJkazs2btxo9zl46623rNt89913NnX55aGhoZZvv/22wL5Hjhyx1r/11lvW8vT0dEvdunUtoaGhllWrVhXYLzs729K5c2fr81BYp0+fth536dKlBerz8vIsbdq0sYSGhlqmTp1a4HmIiIiwmM3mAvutXLnSeh4//vhjodtzI7t377Ye99SpUzZ1x48ft9SrV88SGhpqmTBhgt39f/jhB8u9995rCQ0NtXz88cfW8s2bN1uP+8cffxTY79SpU9ZjX9v3r+6bznLUzxYtWmQ95r59++zuu3DhQof9LL9vh4aGWp577jlLXl6eTX1WVpald+/eltDQUEuLFi0sWVlZ1joj73OL5c8+/u6771rLjh49ai2PjY0tcLwLFy5Y7r///uu+dgDKFkaqAJRJeXl5yszMLPAvJSVFP//8sz788EMNGDBAly9flslkuu7Kdg8//LDd8v/7v/+TdGXU4IknnrC7zUMPPWQdAfr888+t5bt377ZOY3rppZfk5eVVYN9///vf8vf3L9wJ/3+bNm2yntNrr71md0rj4MGDVbt2bbVr107JyclOHf9qZrNZK1askHTlPB966CG7273yyivWa4nyn7Nr1alTRx06dChQHhoaqurVq0u6Mi0qX05OjnVEICkpqcB+np6emjp1qmJiYvTWW28V+pxq1Kih+++/X9KV0bVr7d69W+fPn5dkO/UvOztb0pURnosXLxbYr3Pnzpo9e7ZWr16tOnXqFLo9Rnz++ecym83y8fFxeB+2hg0bWq9Xu7p/Xj1qde10O0m688479eGHH2rZsmXq06dPMbe8oGrVqmnAgAF69NFHHV5nlD9qKF0ZQbXHw8NDr7/+eoFVPsuVK6eRI0dKurJM/dUjxEbe545c/fza678VKlTQBx98oCVLluiZZ5654fEAlH5cUwWgTNq/f7+aNm16w+08PT01ZswYhwspeHh4OPwQHBsbK+nKYheXLl1y+Bj33Xef9u/fr7i4OFksFplMJutUNl9fX4cfEr29vdW2bVunpq/t2rVLknT33Xdb72N1reDgYK1fv77Qx3TkyJEj1ily11ve3cvLSx06dNDy5csVGxtrfQ6udr3rjCpVqqQzZ87YPMeBgYEKCQlRfHy83nnnHR09elSdOnVSq1at5Ovre8NjXk/37t21d+9e7dmzR0lJSapcubK1Ln/q37333qvQ0FBrefPmzbVo0SKdP39ekZGR6t+/v9q3b2+dUurj41NgYYmbbe/evZKu9AVJyszMtLtd48aN9dVXX+nXX39VSkqKAgMD1aRJE3l4eCg3N1dPPvmk+vfvrwcffFBNmjSxBvW//vWvJXMikjp06GA3dOdLTEy0mSaXk5Njd7uwsDCH91pr0aKFfH19dfHiRe3bt8/6ZYqR97kjderUUUBAgFJTUzVq1Cjt2bNHDz30kJo3b279giU/3AO4NRCqANxSypUrpwoVKugvf/mLmjVrpr59+153MQg/Pz+7oz0ZGRnWb5g3btyojRs33vCxMzIylJ6erooVK+qPP/6QJNWsWfO6H77yPxAX1rlz5yTJ7mqAxS3/HCT716NdLb/+6ufgaoGBgQ73zf+QabnmWpXx48dr8ODBysrKsq5Y6OnpqaZNm6p9+/bq1KmTatas6dQ5SdIjjzyit99+W1lZWVq3bp0GDBgg6cpoVP7rfPUolXQlVD744IPavHmzjh8/rilTpmjKlCmqXr262rZtqwcffFBt27a1OyJ5s+SvJvfTTz8V6gsG6coNoAMDAxUcHKwXX3xR06ZN04ULFzRv3jzNmzdPFStWVHh4uNq3b6+OHTsqICDgJp5BQRaLRXv27NGPP/6oEydO6OTJk/r111+VkJBQqP2v935yc3PTnXfeqaNHj1oXPzH6PnekXLlyeuONNzRq1ChdvnxZMTExiomJka+vr+6//361b99eERERuuOOOwp1XgBKP0IVgDKpRYsW+uyzzwwfx9FqdY6+9b+RjIwMVaxYUenp6ZKujGBcj7Or8+WPHN3ouMXh6sUA8keHHLm6PRcvXizwgTN/eXdn3H///frqq680Z84cbdy4Uenp6crJybGuGDh16lQ9+OCDmjBhgsPRCXv8/PzUoUMHrV27VmvXrrWGqi1btig9PV3u7u4Flnh3d3fX7NmztXz5ci1ZskQ//fSTJOnMmTNaunSpli5dqkqVKunll19Wr169nD7XonC0WENh9xk8eLAaNGigBQsWaNeuXcrJydGFCxesKzp6enpq4MCBeumll4r0+jlr06ZNmj59un799VebcpPJpLvvvlv33Xefza0B7LnR+yK/H2dlZUky/j6/ni5duqh27dr68MMP9d133ykrK0sXL17Uli1btGXLFkVFRal79+56/fXXHd7IHEDZQagCADu8vb2t/z906FC99NJLTu2ff62UvetvrpZ/rY6z7breNKXicnWQutF5XP1hvTgD31133aVJkyZZVzDcuXOnduzYoR9//FEWi0WbN2/WkCFD9MUXXxS4juZ6evToobVr12r//v06e/asqlatap36Fx4ebncEwc3NTf369VO/fv109uxZbdu2Tbt27dKOHTuUmpqq5ORkjR49Wn5+foqIiCi258ARb29vZWRkqEuXLnr33XeLdIzw8HCFh4crIyNDO3fu1K5du7R9+3adPHlSOTk5WrBggXJycjR27Nhibr2tTZs26dlnn5XFYlFAQIA6deqkhg0b6p577lFoaKgqVqyoEydO3DBU5YclR/JDVIUKFSQZf5/fSIMGDfTee+9Zbx+Q31+OHj2qvLw8rVy5UmlpaYqOji7WxwVQ8lioAgDsqFixovXb46sXULDn2mlr0pUL7yXp5MmTysvLc7jvjY59rfxFHfKnfjkyd+5cffTRR/r++++dOv7VatSoYf3/X3755brb5o8ulC9f3unFNwrD09NTLVu21Isvvqjly5dr8+bNatu2rSTp559/1r59+5w6Xtu2bVW5cmVZLBZt3LhRmZmZ2rJli6SCU//sqVq1qvr27at3331XO3fu1PTp061T/z799FMnz65o7C3wYY+9/nktPz8/derUSePGjdPGjRu1bNky6+v/+eefOx3+nTVt2jRZLBbVqFFD33zzjSZMmKD+/furefPm1hEhR4tTXC1/+Xd7cnNzrfcfy78e0ej7vLC8vb3Vvn17jR49WqtXr9batWvVoEEDSdJ///vf67YbQNlAqAIAO0wmk3WBiZ07d153ZGjw4MFq3bq1Bg0aZP3glX+Rf1ZWlrZv3253P7PZ7LDOkfxrZ+Lj4wvcFDdfRkaGZs2apalTp2rnzp1OHf9q+SMEkq678EV2drZ1NbX8+wEZ9d1336lv375q2bKldSrl1apVq2YzqpB/rVlheXh4WKf4ffvtt9q8ebOysrLk6+trd5Tp+eefV8eOHTVt2rQCde7u7uratas15BX2+p/CuN71ePn986efftLZs2cdbvfGG2+oZcuW6t27t3VEce7cueratavDG/s2btxYjz/+uKQrr+/VgaYwN1p2RkpKio4fPy7pyiqK+StJXit/kRZJDu8FFhcX5/C9unXrVuuqfM2bN5dk/H3uyPLly9WzZ0916NDB7rb33HOPhg8fbv3Z2f4LoPQhVAGAA/369ZN0ZQlmex+mpSsXt2/fvl1JSUmqVauW9QNnixYtrIsoTJ061e71LwsXLnT6G+oePXrIw8NDFotFU6ZMsfuBLTo6Wrm5uTKZTPrb3/5mLc+/LsbRymnXcnd3V+/evSVdCR6bNm2yu920adOsH7r79u3r1Pk4UrlyZR06dEipqalavHix3W1+/vln6/8XZeGO/BGp2NhY67SyTp062Z2+mJWVpdOnT+urr76yu0x9dna2dTTP0aqMRXH1IirXvm75/TM3N1dvvvmm3RHRgwcPauXKlUpNTVVAQID1Gj4PDw8dO3ZMcXFxDm8Cnf/8+vr62lyzdnWbimME6+rjORoRPXz4sM2NkB314YyMDOsNt6+Wnp5ufQ/XqFHDGoAlY+9zR/z8/PTzzz/r999/d7i6Z/7zazKZirTgCoDShVAFAA489NBDeuCBByRJMTExeuaZZ7Rv3z6lpKTo119/1ezZs62jJYGBgRoxYoR1X3d3d+v9k+Lj4/Xoo49qy5YtSklJ0S+//KJJkyZp6tSpdlcevJ7g4GANGzZMkrRu3ToNHz5ccXFxSklJ0eHDhzVhwgQtWLBAktS/f3/Vrl3bum/+Sm779u1TfHx8oe5hNXz4cOs0sBdeeEEzZszQL7/8orS0NB08eFAvvPCCdbpb586dHd7zy1mNGjVSixYtJEnvvfeepkyZop9//lnJycn67bfftHDhQkVFRUm6MqpSlOXVGzZsqJCQEOXm5lpHDB1N/XvqqackXRmFeuKJJ7Rhwwb9/vvvSkxM1N69e/X000/rxIkTkqR//OMfNvsuWrRIDz/8sB5++GEdOnTIqTZevfre6tWrlZycbA3o9evXt440/fe//9Xjjz+u7du3Kzk5WSdPntSiRYs0ZMgQ5eTkqFy5cjb3auvdu7cCAgJksVj0zDPPaNGiRfr111+VnJxs7UerVq2SJD322GM216td3ab8wFbUBR+kK1PwGjVqJOnKYiFvv/22fvnlF2ufnjlzpv7+97/bXNfn6Bo/d3d3ffzxxxozZoyOHj2qlJQUbd26VY899ph+/fVXmUwmjR8/3uZ9Z+R97kjHjh2t772xY8dq9uzZOnbsmFJSUhQfH6///Oc/mjt3rqQr98lzZqEVAKUTC1UAgAMmk0nTp0/XSy+9pO+++07ffvutvv322wLbBQUFKTo6WsHBwTblrVu31pQpUzR27FgdPXpUQ4cOtamvUaOGHnroIX3yySdOtevZZ59VamqqYmJitHnzZpsbmeaLiIjQmDFjbMpatmyptWvX6uzZszZT36635Ly/v78WLFigp59+Wr/99pvmzJmjOXPmFNiue/fuevPNN506jxuZNm2annjiCR0/flwLFiywhsWr1a5dW7NmzSryY/To0UPTp0+XdCWwtmrVyu52LVq00EsvvaR3331XR48e1XPPPVdgGzc3Nz3//PMF7omWkpKi3377TZLzC4zcddddqlatmv744w998MEH+uCDD9SrVy9NnjxZkjRmzBjl5ORo+fLl2rdvnzX8Xa18+fJ69913Va9ePWtZQECAZs6cqWeeeUYpKSmaMGGC3cd/8MEH9fzzz9uUNWzY0Hq/pzfeeENvvPGGnn32WbvPSWGNGzdOjz/+uC5evKjPPvvM7sqekZGR2rt3r06fPm2dLnit7t2768iRI1q+fLmWL19uU+fh4aHx48erXbt2NuVG3+f2eHp6atasWfrnP/+pxMREvffee3ZH0O677z6Hzz2AsoVQBQDX4efnp7lz52rTpk1atWqVDh48qJSUFHl6euovf/mLOnTooIEDBzpcnKFnz55q1KiRPvroI+3du1fnzp1TUFCQOnbsqGeffVZLly51uk1ubm5644039PDDD2vx4sXav3+/UlJS5OPjowYNGqhv374FlgSXrkxzSkxM1IoVK3T+/HkFBATo7Nmz1w1V0pXg8tVXX2np0qVat26djh07posXLyo4OFiNGzdW3759FR4e7vR53EjVqlW1cuVKxcTE6Ntvv9Uvv/yiixcvqkKFCrrnnnsUERGhRx991OGy+IXRrVs3zZgxQ2azWV27dr3uCoJDhw7V/fffr8WLF+vAgQNKSEiQyWTSHXfcoRYtWuixxx5Tw4YNi9wWezw8PDRnzhxNnDhRP/zwgyTbZcA9PT0VFRWlnj17asmSJYqLi9P58+fl5uammjVr6q9//aueeOIJVa1atcCxw8PD9fXXX+uTTz7Rzp07dfr0aeXk5CgwMFANGzZUz5491blz5wL7VapUSXPmzNH06dN15MgReXh4WJf6L6pGjRpp5cqVmjt3rnbt2qXz58/Lw8NDVapUUePGjdW/f3+1bNlSr7/+upYuXaotW7YoOzu7wH3BfH19tXjxYs2ZM0dff/21zp49q4CAALVq1UpDhw61uaHz1Yy+z+2pW7eu1qxZo08//VRbtmzR8ePHdfnyZfn7+6tevXp65JFHFBkZ6fRoNYDSyWQxspwNAAAAANzmuKYKAAAAAAwgVAEAAACAAYQqAAAAADCAUAUAAAAABhCqAAAAAMAAQhUAAAAAGFDioeqrr75SWFiYzb+GDRta7+1x8OBB9e3bV2FhYerQoYOWLVtms//KlSsVERGhJk2aKDIyUnFxcda6vLw8TZkyRa1bt1ZYWJiGDx+uhISEEj0/AAAAALeXEg9V3bt3V1xcnPXfunXrFBAQoKioKKWlpWno0KHq2bOnYmNjFRUVpUmTJunQoUOSpD179mjChAmaPHmyYmNj1b17dw0fPtx6h/ro6Gjt2LFDK1as0LZt2+Tt7a2xY8eW9CkCAAAAuI249Oa/FotFTzzxhGrVqqW3335by5Yt0/z587V+/XrrNuPGjVNWVpamTJmikSNHysfHRxMmTLDWP/LIIxo8eLB69+6t9u3ba+TIkerWrZskKTExUW3bttXGjRtVs2bNQrcrKSld3BK59DGZpMqVK/D6oNDoMygK+g2Kgn6DoqDflG75r09huPSaqi+//FLx8fEaPXq0JOnYsWMKDQ212SYkJESHDx+WJMXHxzusT09P19mzZ23qg4KC5O/vryNHjtzkMwEAAABwu/Jw1QObzWZFR0fr6aeflp+fnyQpMzNTPj4+Ntt5e3vr4sWLN6zPzMyUJPn6+haoz68rrMImUrgGrw+cRZ9BUdBvUBT0GxQF/absc1mo2rNnjxISEtSnTx9rmY+Pj9LT0222y8rKUvny5a31WVlZBeoDAwOtYSv/+ip7+xcWQ7ClE0PkcBZ9BkVBv0FR0G9QFPSb0s2Z6X8uC1Xr169XRESEzchSaGioduzYYbNdfHy86tSpI0mqU6eOjh07VqC+Xbt28vf3V3BwsM0UwfPnzys1NbXAlMEbsVhExy7FeH3gLPoMioJ+g6Kg36Ao6Ddln8uuqdq/f7/uv/9+m7KIiAglJiZq4cKFysnJ0e7du7V69Wr17t1bktSnTx+tXr1au3fvVk5OjhYuXKikpCRFRERIkiIjIxUdHa1Tp04pIyNDEydOVIsWLVSrVq0SPz8AAAAAtweXjVSdPn1ad9xxh01ZYGCgFixYoKioKM2aNUuVKlXS2LFj1apVK0lSeHi4xo0bp/Hjx+vcuXMKCQnRvHnzFBAQIEkaMWKEcnNzNWDAAGVmZqply5aaOXNmCZ8ZAAAAgNuJS5dUL60SE5nXWhqZTFJQUAVeHxQafQZFQb9BUdBvXM9sNisvL9fVzXCKySQFBpZXSkom/aaEubt7yM3t+pP28t/XheGykSoAAADAKIvFogsXknXpUoarm1IkycluMpvNrm7GbcnHx08VK1aSyWQyfCxCFQAAAMqs/EDl5xcoL69yxfIBuSS5u5uUl8cwVUmyWCzKzr6sjIwUSZK/f2XDxyRUAQAAoEwym/OsgcrPr6Krm1MkHh5uys1lpKqkeXmVkyRlZKSoQoXAG04FvBGXrf4HAAAAGJGXlyfpzw/IgDPy+01xXItHqAIAAECZVtam/KF0KM5+Q6gCAAAAAAMIVQAAAEAxWbt2tdq2ba5nnx3q6qaUCvnPx1tvve7qptxUhCoAAAAAMIBQBQAAAAAGEKoAAAAAwADuUwUAAAC4UGLieX366QLt2rVDiYnn5edXQU2bNtMTTzylu+8OKbB9amqqPvvsY23d+p2Sks6revUa6tWrj0JCQjVixBA98khXjRkz3mafn3/+STExn+j77+OUmZmhoKA71K5dew0c+E8FBATYbNu2bXOFhITq/fc/1EcfzdWWLf9VSkqy7rgjWA891FkDBz4pb29vm30yMjIUE/OJ/vvfjTp//ryqV6+uvn0flaenZ3E/XaUSoQoAAABwkaNHj+hf/3pGqakpqlHjToWHt9X58wn69tuN2rZtq6Kipio8vI11++TkJI0YMUSnTp1U1arV1Lr1X3Xq1EnNmDFN9es3tPsY33yzRpMnT5DZbFZoaD1Vq1ZNx44d1eefL9aWLZv1n//MVbVq1W32ycq6pBEjBuv06VNq2PA+3X33Pdq/P1affPKRjh07qqlTZ1i3vXDhgp57bph++eWYgoKqqHXrtvrjjzOaNm2iate+++Y8caUMoQoAAABwgdzcXL322iilpqbomWee16OP/sN676Tt27fq9ddf0Vtvva7Fi1coMDBQkvTBBzN16tRJde78N7366hvy8Ljycf7zz2P0n//MKPAYx4//pqlTo+TlVU6TJ09Xs2b3S5LMZrPmz5+jTz9doLfeel3R0R/Z7Hf69CnVrv0XffbZUlWvXkOSdPjwz3r66Se1c+c2/fprvHUU7aOP5uiXX46pTZu/6q23JqlcuSujWGvWrNLkyW/fhGeu9OGaKgAAgOKQcU4VL5+Qf7btvwqmC65uGUqpLVv+q9OnT6t167Z67LGBNjejbdu2nbp166n09Atas+ZLSVem/W3cuF7+/v56+eXXrIFKkvr3H6D7729Z4DGWL1+inJwcPfnkEGugkiQ3NzcNGTJc99wToh9+OKgff/yhwL7Dho2wBipJqlfvXjVu3ESS9Ouvv0iSsrOztXbtanl4eGj06NetgUqSunbtqb/+tX0Rn52yhVAFAABQHC4my7RqeIF/bpdTXN0ylFL798dKkk3YuVr+tL+4uP2SpAMH9slsNqt585Y24SXfAw90dPgYzZsXfAyTyaSWLcNtHuNqDRs2LlAWFFRFkpSVlSVJOnz4f7p06ZLq1auvwMBKBbZv1+5Bu+d2q2H6HwAAAOACCQnnJEn/+c8Mu1P3rt3u3LmzkqTg4Kp2t6tatZrDff/5z38Uqi1Xq1ChYoEyd3d3SZLFYpEkJSYmSpKqVLnD7nGvHum6lRGqAAAAABcwm82SpKZNm1tHgOzJX50vNzdX0p+B5lr2yvMfo2PHTtZAZE9ISJ1CtflaV81YtOt6j3krIVQBAAAALlC5cpAkKSLiYXXr1vOG299xx5XRoISEs3brz59PsPsYZ8/+oSFDhuvOO2sWvbEOVKkSLEk6e/aM3frExPPF/pilEddUAQAAAC7QpElTSdKuXTvs1q9YsVSDBj2mhQvnW7d3c3PT/v2xunz5coHtt2/f4vRjTJjwhoYOHaTt27cW6Rzq1btXFSpU1NGjR3T2bMGwt3Pn9iIdt6whVAEAAAAu0LFjJ1WpUkVbt27WkiWLbKbv/e9/P2revGjFxx/VPfdcWbo8OLiq2rV7QKmpqZoxY6p1OqAkrVnzpXbs2CZJNqsI9unzd7m7u2v+/Gjt27fX5vFXrVqh9evXKj7+qOrXb1Ckc/Dw8FBkZF/l5eXp7bffUGZmhrVuy5bNWrfu6yIdt6xh+h8AAABQzH788ZC6d+/ssL57914aPPhpRUVN1b///Zzef3+mVqxYppCQEKWlpemHHw7KYrGob99H9de/PmDd7/nnR+p///tJa9Z8qf37Y1WvXn398ccZHT78P9Wocad+//203N3//Ihfr969+te//q2ZM9/RCy88o9DQuqpWrbpOnjyh3377Ve7u7nr99bdUqVLlIp/rE088pR9+OKgDB/apf/+euu++MCUnJ+uHHw6qYcPG+vHHQ0U+dlnBSBUAAABQzHJzc5WcnOTwX2ZmpiSpceP79PHHi9WzZ29JFu3evVO//35KTZs218SJ7+j551+yOW6VKndo3rxP1K1bL2VnZ2v79i3KyrqkkSNfVe/e/SVJfn5+Nvv07t1fH3wwT+3aPaiEhATt3LldWVlZ6tAhQvPmfaIHH3zI0Ll6eXnpnXdmadiwZ+XvH6Bdu3YqMTFRw4Y9q6efftbQscsKk8XR8iG3scTEdPGslD4mkxQUVIHXB4VGn0FR0G9QFCaTFGQ+rZxlQwvUWXpGK83rLhe06taXk5OtpKQ/VLlyNXl6erm6OUXi4eGm3FxzobbNzs7W8eO/qmrV6qpYseBy5zNnvqPly5do5MjR6tmzT3E39ZZzo/6T//egMBipAgAAAMoAs9msoUMHqX//ngVW+jty5LC++Wa1vLy81KpVWxe18PbFNVUAAABAGeDt7a3IyL5auvT/1L9/LzVufJ8qVKio8+cT9L///ShJ+ve/X1HVqvZvDoybh1AFAAAAlBHPPfdvNWjQSF99tUq//farLlxIk79/gNq1e1D9+j2qxo2buLqJtyVCFQAAAFBGmEwmdezYSR07dnJ1U3AVrqkCAAAAAAMIVQAAAABgAKEKAAAAAAwgVAEAAACAAYQqAAAAADCAUAUAAAAABhCqAAAAAMAAQhUAAABwG7NYLK5uQpnHzX8BAABwy6lguiC3yymubobM5QKVbqno1D5RUeP1zTdrrrtN1arVtHz5aiNNkyStWbNKv/32m5577sXrticubr/hxztwYJ/+9a+nNWvWHDVt2tzQsZ59dqgk6f33PzR0nOJCqAIAAMAtx+1yikyrhru6GXLrGS15OReqBg0arB49elt//uST+Tp69LCiot6xlnl5eRZL+xYu/EhhYc2K5Vi3M0IVAAAAUIrUqHGnatS40/pzQECgPD291LBhIxe2CtdDqAIAAADKoF9/jdecOe/r++/jJEnNmt2vZ599wSaQLV++RF98sUxnz/6hihX91bZtez3zzHPy9S2vPn266ezZP/TNN2v0zTdrtGzZV6pWrXqR27N163dasmSRjh07qtzcHFWrVl29e/dT7979bbY7fvw3zZ8/R4cP/09Vqtyhvn3/rj59/m6tN5vNion5VGvWrFJCwjkFB1dTnz79bLa5VmzsHs2fP0e//hovd3cPhYU11fDhz6lWrdpFPh9nsFAFAAAAUMacPHlCTz/9lFJSkjVmzDiNHv26zpz5Xc88c6VMkjZtWq8PPnhPkZF9NX36fzRo0GCtX79WM2ZMkyRNnDhNlStXVnh4G82Z87EqVw4qcnt27tyu114bqbp179XkydP19ttTVbVqdc2YMU0//HDQZttZs6arQYNGmjRpulq2DNfMme/oq69WWuvfeWeSPvpojjp1ekRTpszQgw921KxZ72rhwvl2H/v3309r9Oh/q27depoyZYZGjx6rEyeOa+TI52U2m4t8Ts5gpAoAAAAoYz7+eJ7KlSunmTNnq3x5P0lS8+b3q1+/Hlq8+DONGPG84uL2q2rVaoqM7Cc3NzeFhTWTr6+vUlNTJUmhofXk6emlgIBAw1MLjx//VQ8/3EXPP/+StaxRo8b629866vvvD6hRo/us5V26dNeIEc9Lklq2DNf58+e1cOF8de3aQ6dPn9Lq1as0bNgI/eMfgyRJLVq0kpubmz799GP16tVH/v4BNo/9888/6fLlyxo48ElVqXKHJOmOO4K1bdsWXbp00fr83EyEKgAAAKCM2b8/Vk2bNlO5ct7Kzc2VJPn6llfjxmGKjd0jSWratLm+/PILPfXUP9S+fQe1bt1WEREPy2QyFXt7HnvscUnSpUuXdPr0KZ06dVKHD/8kScrJybHZtmPHTjY/t2//oLZt+04nThzXwYMHZLFY1KZNO+t5SVLbtu30yScf6eDB79Wu3QM2+zdo0EheXuU0ZMgT6tgxQq1atVGTJk1Vv37DYj9PRwhVAAAAQBmTlpaqb7/dqG+/3VigLiAgUNKV8GI2m7Vy5XJ9/PE8zZ8/R9WqVdewYSP00EOdi7U9qampmjYtStu2bZHJZNKdd9ZU48ZNJBW8D1alSpVtfg4MrCRJSk+/oLS0NEnSwIH97D5OYuL5AmXVqlXX++/P1aJFn+irr1bq888Xy8+vgnr16qMhQ4bLze3mX/FEqAIAAADKmAoVKqhZsxZ69NF/FKhzd3e3/n9ExMOKiHhYGRkZ2rt3t2JiPtGECW+oSZOmCgqqUmztefPNMTpx4rhmzpythg0by8vLS1lZWVq9elWBbdPTL9j8nJycJOlKuPLzqyBJmjVrjnx9fQvsGxxc1e7j16/fUBMnTlNOTo4OHfpeX375hT777GOFhNQpMDJ2M7BQBQAAAFDGNGnSVMeP/6aQkFDVq1df9erVV9269+rzzxdr69bvJElvvPGqXnttlCTJz89PHTo8pEGDnlJeXp51xKe4RnEOHfpeDzzQQU2bNpeXl5ckaffuHZIKjlTt2bPL5udNmzbojjuCdeedNRUW1lTSlZGv/POqV6++0tLS9OGH0daRrKstXbpYffp0U3Z2tjw9PdWs2f16+eUxkqRz584Vy/ndCCNVAAAAQBkzaNAQPf30k3r55RfVq1dveXmV05dffqFt277T229PkXTlmqp33pmk99+fqfDwNkpPv6AFCz7UnXfWUkhIqCTJz6+Cjh49ori4/apfv4HKlfO2+3iZmZlaunRxgfIqVe7Qgw8+pHvvbaANG9apbt17VaXKHfrxx0P67LOPZTKZdOnSJZt9li9fIl9fX9WpU1fffrtBe/bs1OuvvyWTyaS77w5R586PaOrUt3X27BnVq1dfJ08e19y5s1WtWnXVrFmrQBuaNr1f0dH/0WuvjVTv3v3k7u6hVatWyMvLS23b/tXYE11IhCoAAACgjAkJqaMPPpivDz+crQkTxslisejuu+/RpEnvqG3b9pKknj17Kzc3R6tWfaGVK5epXDlvNW/eQs888y95eFyJAY8++g/NmvWuXnrpOc2YMVv33dfE7uOlp1/QrFnvFihv0qSpHnzwIY0d+6befXeqZsyYKkmqWbOWRo16TevXf6NDh+Js9hk16jUtWbJI8+ZFq3r1Gho/PsrmGq9XXx2nRYsWatWqFUpImK1KlSqrY8dOGjp0uM3UxqufiylTZujjj+dp/PgxysvLU7169fXuu++X2H2qTJZrx+OgxMR08ayUPiaTFBRUgdcHhUafQVHQb1AUJpMUZD6tnGVDC9RZekYrzesuF7Tq1peTk62kpD9UuXI1eXp62dRVMF2Q2+UUF7XsT+ZygUq3VHRY7+HhptzckrmXEmxdr/9If/49KAxGqgAAAHDLSbdUlLwch5kSw5cztwUWqgAAAAAAAwhVAAAAAGAAoQoAAAAADCBUAQAAAIABhCoAAAAAMMAloSo1NVUvv/yyWrZsqfvvv1/PPPOMEhISJEkHDx5U3759FRYWpg4dOmjZsmU2+65cuVIRERFq0qSJIiMjFRf357r3eXl5mjJlilq3bq2wsDANHz7celwAAAAAuBlcEqqee+45Xbx4URs3btTmzZvl7u6u119/XWlpaRo6dKh69uyp2NhYRUVFadKkSTp06JAkac+ePZowYYImT56s2NhYde/eXcOHD7fepTk6Olo7duzQihUrtG3bNnl7e2vs2LGuOEUAAAAAt4kSD1U//vijDh48qMmTJ6tixYry8/PThAkTNHLkSG3YsEEBAQEaMGCAPDw8FB4erm7duikmJkaStGzZMnXp0kXNmjWTp6enBg0apMDAQK1du9ZaP2TIEFWrVk1+fn4aM2aMtm7dqlOnTpX0aQIAAAC4TZR4qDp06JBCQkK0dOlSRUREqG3btpoyZYqqVKmiY8eOKTQ01Gb7kJAQHT58WJIUHx/vsD49PV1nz561qQ8KCpK/v7+OHDly808MAAAAgCTJYrm97nrsUdIPmJaWpiNHjqhhw4ZauXKlsrKy9PLLL+uVV15RUFCQfHx8bLb39vbWxYsXJUmZmZkO6zMzMyVJvr6+Berz6wrLZHL2rFAS8l8XXh8UFn0GRUG/QVFc3W/sfZakP90c13tes0wmXcjKLbnGOFDR20PeRQgYzz47VN9/f8CmzMPDQ5UqVVabNu00ZMhwVaxYsbiaabV27WpNnPimli37StWqVddHH83Vxx/P0/bt+wq1f0LCOb3zziS9+OLLqlatuiSpT59uCgtrpjFjxhd7e4uDyWS/Lznzvi3xUOXl5SVJGjNmjMqVKyc/Pz+98MIL6tevnyIjI5WVlWWzfVZWlsqXLy9J8vHxsVsfGBhoDVv511fZ27+wKleu4NT2KFm8PnAWfQZFQb+B0xIkD3c7k4A83RUURH+6GbKyspSc7CZ3d5M8PGyf+/SLORq5/KCLWvan6X3vk5+v53W3ubbtkmQymRQaWk8vvzzaWpaTk6PDh3/WnDkfKD7+iD788GOZijmxu7ldOZ67u5s8PNzUq1ek2rRpY7eN9hw4EKudO7dr5MjR1n2mTJmu8uXLF/oYJcVsNsnNzU2BgeXl7e1t6FglHqpCQkJkNpuVk5OjcuXKSZLMZrMk6d5779XixYttto+Pj1edOnUkSXXq1NGxY8cK1Ldr107+/v4KDg62mSJ4/vx5paamFpgyeCNJSel2v2WCa5lMVz7k8PqgsOgzKAr6DYrCZJIqS8rNMxfoN5acPF1ITHdJu251OTnZMpvNysuzKDfXbFNnsUgqBe9hi0UF2nY1Dw83u/UWi0W+vr6qV6+hTXmjRmHKzLyo+fPn6ODBQ2rYsFGxttdsvvKk5eWZlZtrVqVKVVSpUpXrnsP19peke+658lm8sMcoKXl5FpnNZqWkZMrTM6dAff7fg8Io8VDVunVr1axZU6+99pomTZqky5cva8aMGXrooYfUtWtXzZo1SwsXLtSAAQO0f/9+rV69WrNnz5Yk9enTRyNGjNAjjzyiZs2aKSYmRklJSYqIiJAkRUZGKjo6Wo0aNVJgYKAmTpyoFi1aqFatWk610WKxP3SP0oHXB86iz6Ao6DcoCkd9hr50c9yuz2vduvdKks6d+0Nz5vxHd9wRrOzsy9q7d4/uu6+Jpk17T5cvX9ZHH83Rpk0blJKSrFq17tLjj/9THTt2sh7HbDbr008X6KuvViotLVUtWrTSffeF2TyWvel/mzat1//93yIdP/6r/P0D9NBDnTV48NPatGm9Jk58U5LUt293PfJIV40ZM77A9L+MjAx9/PGH2rZtixITz6tGjTvVv/8Ade3aw/oYffp00yOPdFVWVpbWrftamZmZatIkTC+8MEq1at0l6cptmmbNmq59+/YqIyNdtWrV1t//PkAPP9zFqeezOH7fl3io8vT01GeffabJkyerc+fOunz5sjp06KAxY8aoYsWKWrBggaKiojRr1ixVqlRJY8eOVatWrSRJ4eHhGjdunMaPH69z584pJCRE8+bNU0BAgCRpxIgRys3N1YABA5SZmamWLVtq5syZJX2KAAAAwE1z6tQJSVKNGndKkr79doMefPAhTZr0jvLy8mSxWPTaa6P0ww8H9dRTQ1W79t3aunWzxo17TdnZ2Xrkka6SpNmzZ2nZsv/T44//Uw0bNtbmzZs0Z877133sVatW6J13Jqlr1x4aOvQZ/fHH7/rgg1lKS0vV008/pyeeeEqffPKRoqKmKSSkToH9L1/O0jPPPKXk5GQ99dQwVa9eQ9u2fafJkycoOTlJjz/+T+u2y5b9nxo3bqLXXhun9PQLeu+9dxQVNV5z534sSXrrrbFKSUnWyJGvqnz58lq/fq3efnuc7rgjWE2bNi+GZ7rwSjxUSVJwcLBmzJhht65Ro0ZasmSJw3179OihHj162K3z9PTUyJEjNXLkyGJpJwAAAOBKubl/LraRnn5BcXEH9MknH6lBg0bWESt3d3e98spY6xoDsbG7tWfPTr355kTryFTLluHKyrqkOXPeV0TEw7p06ZKWL1+ifv0e01NPDbNuc/78ee3Zs9NuW8xmsxYs+FDt2j2o0aNft5ZnZ2dr7do1Kl++vDXohYbWtS5UcbW1a9fo119/0ezZ89W4cRPr4+bm5mrhwo/Us2dvVazoL0mqUKGiJk2aLnd3d0nS77+f1kcfzVVaWqr8/QP0/fcH9MQTT6lduwckSWFhzVSxor/c3Us+4rgkVAEAAAC4vu+/P6AHHmhlU+bm5qZmze7XK6+MtS5SUa1adZsVsvfti5XJZFJ4eFubUNamTXutX/+NfvvtFyUlJSk3N1dt27a3OX6HDg85DFWnTp1UcnKSNcTk69fvMfXr91ihzikubr+qVq1mDVT5OnV6RGvWfKmffvpB4eFtJUn16tW3BipJqlLlDknSpUtZ8veXwsKaa8GCDxUff0zh4W3UqlVrPfvsC4VqR3EjVAEAAACl0JXV/177/z+Z5OXlpapVq8rX13Zl68DASjY/X7iQJovFok6d2tk9bmLieaWnZ/z/fQNs6ipXDnLYnrS0VLuP54wLF9JUqVLlAuX5j5vfLkkFVuRzc7uyeqDFcmXBizffnKhPP12g//53ozZv3iQ3Nzc1b95SI0eOVvXqNYrcxqIgVAEAAACl0JXV/+o7vZ+fXwX5+PjqP/+ZY7e+Ro2a+vnnnyRJycnJqlWrtrXuwoW06x5XklJTU2zKL1xI05EjP6tBg8Y3bFvFiv46ffpUgfKkpERJsq6VUBh+fn565pl/6Zln/qWTJ49r27YtWrhwvqZPn6Lp02cV+jjFoXQtFg8AAADAkCZNmurSpYuyWCyqV6++9d+vv/6iBQvmKS8vTw0bNla5cuW0efMmm3137Njq8Lh33VVbAQEB2rbtO5vyDRu+0ciRzys7O9s6mnS9tp09+4cOHfrepnz9+rXy8PDQvfc2KNQ5nj37hyIju1jbX6tWbQ0Y8ISaN2+phISzhTpGcWKkCgAAALiFhIe3UZMmTTV69EsaNGiw7rqrtn7++Sd99NGHatmylXU0aNCgwZo3L1re3j5q1ux+7dq1Qzt2bHN4XHd3d/3zn8P07rtT9M47k9W+/QM6deqU5s2LVs+evRUQEGAdzdqy5b8KD2+ru+6qbXOMv/2tm774Yplee22UBg8epurV79T27Vv09ddf6cknh6hChcLdF6pq1WqqUuUOzZz5jjIzM1Wjxp06fPhn7d69Q//4x6CiPG2GEKoAAACAW4ibm5umTXtP8+dH67PPPlZKSrKCgu5Q//6PadCgwdbtBg58Uj4+Plq69P+0bNn/qWHDxnr22Rf0zjuTHR47MrKvfHx8tHjxp/r66y8VFHSHHn10oDXING3aXM2bt9DcuR9o//5YTZv2ns3+3t7eev/9DzVnzn80f/5cXbyYqVq1amv06Ndt7lNVGBMnTtPcuR9o/vw5SktL1R13BOvJJ4e4JFSZLJbb9bZpjiUmpt+2N5MrzUwmKSioAq8PCo0+g6Kg36AoTCYpyHxaOcuGFqiz9IxWmtddLmjVrS8nJ1tJSX+ocuVq8vT0sqnLMpl0ISvXwZ4lp6K3h7yv88vEw8NNubnmEmwR8l2v/0h//j0oDEaqAAAAcMvxtljkXc79xhvebHw7c1tgoQoAAAAAMIBQBQAAAAAGEKoAAAAAwABCFQAAAAAYQKgCAABAmcZi1iiK4uw3hCoAAACUSW5uV1b3M5vzXNwSlEX5/Sa/HxlBqAIAAECZ5ObmJjc3d2VlXXR1U1AGZWVdlJubu9zcjEci7lMFAACAMslkMsnPL0AXLiQpI8NTXl7eMplMrm6WU8xmk/LymL5YkiwWi7Kzs5SVlamKFSsXS58hVAEAAKDM8vEpr5ycy8rISJOU6urmOM3NzU1ms9nVzbgNmeTj4ycfn/LFcjRCFQAAAMosk8kkf//KqlAhQHl5ZevaKpNJCgwsr5SUTLHWRslyd3cvlmup8hGqAAAAUOZduTam+D4klwSTSfL29panZw6hqoxjoQoAAAAAMIBQBQAAAAAGEKoAAAAAwABCFQAAAAAYQKgCAAAAAAMIVQAAAABgAKEKAAAAAAzgPlUAgNtaBdMFuV1OsS1McJefe0WlWyq6plEAgDKFUAUAuK25XU6RadVw20IPN7l1/UDyIlQBAG6M6X8AAAAAYAChCgAAAAAMIFQBAAAAgAGEKgAAAAAwgFAFAAAAAAYQqgAAAADAAEIVAAAAABhAqAIAAAAAAwhVAAAAAGAAoQoAAAAADCBUAQAAAIABhCoAAAAAMIBQBQAAAAAGEKoAAAAAwABCFQAAAAAYQKgCAAAAAAMIVQAAAABgAKEKAAAAAAwgVAEAAACAAYQqAAAAADCAUAUAAAAABhCqAAAAAMAAQhUAAAAAGECoAgAAAAADCFUAAAAAYAChCgAAAAAMIFQBAAAAgAEuCVVr165V/fr1FRYWZv03atQoSdLBgwfVt29fhYWFqUOHDlq2bJnNvitXrlRERISaNGmiyMhIxcXFWevy8vI0ZcoUtW7dWmFhYRo+fLgSEhJK9NwAAAAA3F5cEqp++OEH9ejRQ3FxcdZ/06ZNU1pamoYOHaqePXsqNjZWUVFRmjRpkg4dOiRJ2rNnjyZMmKDJkycrNjZW3bt31/Dhw3Xp0iVJUnR0tHbs2KEVK1Zo27Zt8vb21tixY11xigAAAABuEy4LVQ0bNixQvmHDBgUEBGjAgAHy8PBQeHi4unXrppiYGEnSsmXL1KVLFzVr1kyenp4aNGiQAgMDtXbtWmv9kCFDVK1aNfn5+WnMmDHaunWrTp06VaLnBwAAAOD24VHSD2g2m/XTTz/Jx8dH8+fPV15entq3b6+RI0fq2LFjCg0Ntdk+JCREy5cvlyTFx8erd+/eBeoPHz6s9PR0nT171mb/oKAg+fv768iRI6pZs2ah22gyGThB3DT5rwuvDwqLPoOisPYb0XdQeFf/vrFYHNcDV+PvVOnmzOtS4qEqOTlZ9evXV+fOnTVr1iylpKTolVde0ahRo1SlShX5+PjYbO/t7a2LFy9KkjIzMx3WZ2ZmSpJ8fX0L1OfXFVblyhWcPS2UIF4fOIs+g+tKcJc8Ck7c8PR0V1AQfQdOSJA83O1MAqIv4Qb4O1X2lXioCgoKsk7nkyQfHx+NGjVK/fr1U2RkpLKysmy2z8rKUvny5a3b2qsPDAy0hq3866vs7V9YSUnpdr9lgmuZTFd+6fD6oLDoMyiMijl5MuWarT+bTFc+GOfk5CktMd2FLUNZYjJJlSXl5pkL/L6x5OTpAn0JdvB3qnTLf30Ko8RD1eHDh7VmzRq99NJLMv3/MbXs7Gy5ubmpcePG+uSTT2y2j4+PV506dSRJderU0bFjxwrUt2vXTv7+/goODlZ8fLx1CuD58+eVmppaYErhjVgs9ofuUTrw+sBZ9Bk4I7+vWES/gfMc9Rn6Eq6Hv1NlX4kvVBEQEKCYmBjNnz9fubm5OnPmjKZNm6ZevXqpc+fOSkxM1MKFC5WTk6Pdu3dr9erV1uuo+vTpo9WrV2v37t3KycnRwoULlZSUpIiICElSZGSkoqOjderUKWVkZGjixIlq0aKFatWqVdKnCQAAAOA2UeIjVVWrVtXcuXP17rvvKjo6WuXKlVOXLl00atQolStXTgsWLFBUVJRmzZqlSpUqaezYsWrVqpUkKTw8XOPGjdP48eN17tw5hYSEaN68eQoICJAkjRgxQrm5uRowYIAyMzPVsmVLzZw5s6RPEQAAAMBtxGSxMNh4rcRE5rWWRiaTFBRUgdcHhUafQWH4Z5+QadVwmzJPDzdld/1AaV53uahVKGtMJinIfFo5y4YWqLP0jKYvwS7+TpVu+a9PYbjkPlUAAAAAcKsgVAEAAACAAYQqAAAAADCAUAUAAAAABhCqAAAAAMAAQhUAAAAAGECoAgAAAAADCFUAAAAAYAChCgAAAAAMIFQBAAAAgAGEKgAAAAAwgFAFAAAAAAYQqgAAAADAAEIVAAAAABhAqAIAAAAAAwhVAAAAAGAAoQoAAAAADCBUAQAAAIABhCoAAAAAMIBQBQAAAAAGEKoAAAAAwABCFQAAAAAYQKgCAAAAAAMIVQAAAABgAKEKAAAAAAwgVAEAAACAAYQqAAAAADCAUAUAAAAABhCqAAAAAMAAQhUAAAAAGECoAgAAAAADCFUAAAAAYAChCgAAAAAMIFQBAAAAgAGEKgAAAAAwgFAFAAAAAAYQqgAAAADAAEIVAAAAABhAqAIAAAAAAzxc3QAAAADgduRnuiAlnFbFnDxrmblcoNItFV3YKhQFoQoAAABwAbesFGnNCJlyzX+W9YyWvAhVZQ3T/wAAAADAAEIVAAAAABhAqAIAAAAAAwhVAAAAAGAAoQoAAAAADCBUAQAAAIABhCoAAAAAMIBQBQAAAAAGEKoAAAAAwABCFQAAAAAYQKgCAAAAAAMIVQAAAABgAKEKAAAAAAxwaajKy8vTwIEDNXr0aGvZwYMH1bdvX4WFhalDhw5atmyZzT4rV65URESEmjRposjISMXFxdkcb8qUKWrdurXCwsI0fPhwJSQklNj5AAAAALj9uDRUvf/++9q3b5/157S0NA0dOlQ9e/ZUbGysoqKiNGnSJB06dEiStGfPHk2YMEGTJ09WbGysunfvruHDh+vSpUuSpOjoaO3YsUMrVqzQtm3b5O3trbFjx7rk3AAAAADcHlwWqnbt2qUNGzaoU6dO1rINGzYoICBAAwYMkIeHh8LDw9WtWzfFxMRIkpYtW6YuXbqoWbNm8vT01KBBgxQYGKi1a9da64cMGaJq1arJz89PY8aM0datW3Xq1CmXnCMAAACAW5+HKx40KSlJY8aM0ezZs7Vw4UJr+bFjxxQaGmqzbUhIiJYvXy5Jio+PV+/evQvUHz58WOnp6Tp79qzN/kFBQfL399eRI0dUs2bNQrfPZCrCSeGmy39deH1QWPQZFIW134i+g8K7+veNxeK4Hrhafre4tt/QX0oHZ16HEg9VZrNZo0aN0pNPPql69erZ1GVmZsrHx8emzNvbWxcvXrxhfWZmpiTJ19e3QH1+XWFVrlzBqe1Rsnh94Cz6DK4rwV3yKDhxw9PTXUFB9B04IUHycLczCYi+BEcS3CVd02/oL2VSiYequXPnysvLSwMHDixQ5+Pjo/T0dJuyrKwslS9f3lqflZVVoD4wMNAatvKvr7K3f2ElJaXb/ZYJrmUyXflwzOuDwqLPoDAq5uTJlGu2/mwyXfmAk5OTp7TE9OvsCfzJZJIqS8rNMxf4fWPJydMF+hLs8M/Jk6ds+w39pfTI/xxRGCUeqr788kslJCSoefPmkmQNSZs2bdLLL7+sHTt22GwfHx+vOnXqSJLq1KmjY8eOFahv166d/P39FRwcrPj4eOsUwPPnzys1NbXAlMIbsVjsD92jdOD1gbPoM3CG9YON6DdwnqM+Q1+CPfndokAQp7+UOSW+UMW6det04MAB7du3T/v27VPXrl3VtWtX7du3TxEREUpMTNTChQuVk5Oj3bt3a/Xq1dbrqPr06aPVq1dr9+7dysnJ0cKFC5WUlKSIiAhJUmRkpKKjo3Xq1CllZGRo4sSJatGihWrVqlXSpwkAAADgNuGShSocCQwM1IIFCxQVFaVZs2apUqVKGjt2rFq1aiVJCg8P17hx4zR+/HidO3dOISEhmjdvngICAiRJI0aMUG5urgYMGKDMzEy1bNlSM2fOdN0JAQAAALjlmSwWBhivlZjI9RelkckkBQVV4PVBodFnUBj+2SdkWjXcpszTw03ZXT9QmtddLmoVyhqTSQoyn1bOsqEF6iw9o+lLsMs/+4S81oxQzlXXddJfSo/8zxGF4dKb/wIAAABAWUeoAgAAAAADCFUAAAAAYAChCgAAAAAMIFQBAAAAgAGEKgAAAAAwgFAFAAAAAAYUW6jKyMgorkMBAAAAQJnhdKhq0aKF3fIHHnjAaFsAAAAAoMzxKMxGJ06c0BtvvCGLxaKMjAw9/vjjNvUZGRmqWLHiTWkgAAAAAJRmhQpVd911lzp16qSUlBQdOHCgwGiVl5eXOnTocFMaCAAAAAClWaFClSQNGDBAknTnnXeqZ8+eN6s9AAAAAFCmFDpU5evZs6cOHTqk3377TRaLpUAdAAAAANxOnA5V7777rubNm6cqVarIw+PP3U0mE6EKAAAAwG3H6VD15Zdfas6cOWrfvv3NaA8AAAAAlClOL6l+8eJFtWvX7ma0BQAAAADKHKdD1QMPPKDVq1ffjLYAAAAAQJnj9PS/y5cva/To0ZozZ46CgoJs6j799NNiaxgAAAAAlAVOh6rQ0FCFhobejLYAAAAAQJnjdKh69tlnb0Y7AAAAAKBMcjpUvfrqqw7rJk2aZKgxAAAAAFDWOL1QxbVSUlL0zTffyNfXtzjaAwAAAABlitMjVfZGo3bu3KnFixcXS4MAAAAAoCwxPFIlSa1bt9bu3buL41AAAAAAUKY4PVJ1rdzcXK1Zs0aVKlUqjvYAAAAAQJnidKiqV6+eTCaTTZm7u7vGjBlTbI0CAAAAgLLC6VB17Q1+3dzcdNddd6lKlSrF1igAAAAAKCucvqaqRYsWat68uby9vZWYmChJqly5crE3DAAAAADKAqdHqs6fP6+nn35ahw8fVkBAgFJSUlS7dm0tWLBAVatWvRltBAAAAIBSy+mRqilTpqh27drau3evduzYoT179ujee+/lxr8AAAAAbktOj1Tt3r1b69atU/ny5SVJFSpU0Pjx49WxY8dibxwAAAAAlHZOj1SZzeYCq/+ZTCZ5enoWW6MAAAAAoKxwOlS1bNlS48eP18WLFyVJmZmZGj9+vFq0aFHsjQMAAACA0s7p6X+jRo3Sk08+qRYtWiggIECpqam655579OGHH96M9gEAAABAqeZUqLJYLMrNzdXXX3+tffv2KSkpSb///rueeuopubu736w2AgAAAECpVejpfxcvXtSjjz6qqVOnysPDQ61atVKrVq30/vvva+DAgdbpgAAAAABwOyl0qIqOjpanp6fefPNNa1nlypW1efNm5ebmau7cuTelgQAAAABQmhU6VK1fv15vv/22KleubFNeuXJlvfnmm1q3bl2xNw4AAAAASrtCh6qkpCTdddddduvuvfdenT9/vtgaBQAAAABlRaFDlZ+fn1JSUuzWpaamysfHp9gaBQAAAABlRaFDVXh4uGJiYuzWLV68WE2aNCmuNgEAAABAmVHoJdWHDRumyMhIpaSk6G9/+5uqVKmihIQEffPNN1qxYoUWLVp0M9sJAAAAAKVSoUPVX/7yF3300UcaN26cYmJiZDKZZLFYFBoaqnnz5qlhw4Y3s50AAAAAUCo5dfPfpk2bavXq1Tp16pSSk5NVpUoVVa9e/Wa1DQAAAABKPadCVb6aNWuqZs2axd0WAAAAAChzCr1QBQAAAACgIEIVAAAAABhAqAIAAAAAAwhVAAAAAGAAoQoAAAAADCBUAQAAAIABhCoAAAAAMIBQBQAAAAAGEKoAAAAAwACXhKpdu3apb9++atq0qdq0aaMJEyYoKytLknTw4EH17dtXYWFh6tChg5YtW2az78qVKxUREaEmTZooMjJScXFx1rq8vDxNmTJFrVu3VlhYmIYPH66EhIQSPTcAAAAAt5cSD1XJyckaNmyYHn30Ue3bt08rV67U3r179eGHHyotLU1Dhw5Vz549FRsbq6ioKE2aNEmHDh2SJO3Zs0cTJkzQ5MmTFRsbq+7du2v48OG6dOmSJCk6Olo7duzQihUrtG3bNnl7e2vs2LElfYoAAAAAbiMlHqoqVaqknTt3KjIyUiaTSampqbp8+bIqVaqkDRs2KCAgQAMGDJCHh4fCw8PVrVs3xcTESJKWLVumLl26qFmzZvL09NSgQYMUGBiotWvXWuuHDBmiatWqyc/PT2PGjNHWrVt16tSpkj5NAAAAALcJl0z/8/PzkyS1b99e3bp1U5UqVRQZGaljx44pNDTUZtuQkBAdPnxYkhQfH++wPj09XWfPnrWpDwoKkr+/v44cOXKTzwgAAADA7crDlQ++YcMGpaWlaeTIkfrXv/6l4OBg+fj42Gzj7e2tixcvSpIyMzMd1mdmZkqSfH19C9Tn1xWWyeTsmaAk5L8uvD4oLPoMisLab0TfQeFd/fvGYnFcD1wtv1tc22/oL6WDM6+DS0OVt7e3vL29NWrUKPXt21cDBw5Uenq6zTZZWVkqX768JMnHx8e6oMXV9YGBgdawlX99lb39C6ty5QrOngpKEK8PnEWfwXUluEseBSdueHq6KyiIvgMnJEge7nYmAdGX4EiCu6Rr+g39pUwq8VB14MABvfbaa/rqq6/k5eUlScrOzpanp6dCQkK0Y8cOm+3j4+NVp04dSVKdOnV07NixAvXt2rWTv7+/goODbaYInj9/XqmpqQWmDN5IUlK63W+Z4Fom05UPx7w+KCz6DAqjYk6eTLlm688m05UPODk5eUpLTL/OnsCfTCapsqTcPHOB3zeWnDxdoC/BDv+cPHnKtt/QX0qP/M8RhVHioapu3brKysrS9OnT9dJLL+n8+fOaMmWK+vTpo86dO2v69OlauHChBgwYoP3792v16tWaPXu2JKlPnz4aMWKEHnnkETVr1kwxMTFKSkpSRESEJCkyMlLR0dFq1KiRAgMDNXHiRLVo0UK1atVyqo0Wi/2he5QOvD5wFn0GzrB+sBH9Bs5z1GfoS7Anv1sUCOL0lzKnxENV+fLlNX/+fE2cOFFt2rRRhQoV1K1bN40YMUJeXl5asGCBoqKiNGvWLFWqVEljx45Vq1atJEnh4eEaN26cxo8fr3PnzikkJETz5s1TQECAJGnEiBHKzc3VgAEDlJmZqZYtW2rmzJklfYoAAAAAbiMmi4UsfK3ERKYKlUYmkxQUVIHXB4VGn0Fh+GefkGnVcJsyTw83ZXf9QGled7moVShrTCYpyHxaOcuGFqiz9IymL8Eu/+wT8lozQjlXTUGmv5Qe+Z8jCsMlS6oDAAAAwK2CUAUAAAAABhCqAAAAAMAAQhUAAAAAGECoAgAAAAADCFUAAAAAYAChCgAAAAAMIFQBAAAAgAGEKgAAAAAwgFAFAAAAAAYQqgAAAADAAEIVAAAAABhAqAIAAAAAAwhVAAAAAGAAoQoAAAAADCBUAQAAAIABhCoAAAAAMIBQBQAAAAAGEKoAAAAAwABCFQAAAAAYQKgCAAAAAAMIVQAAAABgAKEKAAAAAAwgVAEAAACAAYQqAAAAADCAUAUAAAAABhCqAAAAAMAAQhUAAAAAGECoAgAAAAADCFUAAAAAYAChCgAAAAAMIFQBAAAAgAGEKgAAAAAwgFAFAAAAAAYQqgAAAADAAEIVAAAAABhAqAIAAAAAAwhVAAAAAGAAoQoAAAAADCBUAQAAAIABhCoAAAAAMMDD1Q0AgOJUwXRBbpdT/ixIcFfFnDyZywUq3VLRdQ0DAAC3LEIVgFuK2+UUmVYN/7PAw02mXLPcekZLXoQqAABQ/Jj+BwAAAAAGEKoAAAAAwABCFQAAAAAYQKgCAAAAAAMIVQAAAABgAKEKAAAAAAwgVAEAAACAAYQqAAAAADCAUAUAAAAABhCqAAAAAMAAQhUAAAAAGOCSUHX48GE9+eSTatGihdq0aaOXX35ZycnJkqSDBw+qb9++CgsLU4cOHbRs2TKbfVeuXKmIiAg1adJEkZGRiouLs9bl5eVpypQpat26tcLCwjR8+HAlJCSU6LkBAAAAuL2UeKjKysrS4MGDFRYWpu3bt2vNmjVKTU3Va6+9prS0NA0dOlQ9e/ZUbGysoqKiNGnSJB06dEiStGfPHk2YMEGTJ09WbGysunfvruHDh+vSpUuSpOjoaO3YsUMrVqzQtm3b5O3trbFjx5b0KQIAAAC4jZR4qDpz5ozq1aunESNGyMvLS4GBgerfv79iY2O1YcMGBQQEaMCAAfLw8FB4eLi6deummJgYSdKyZcvUpUsXNWvWTJ6enho0aJACAwO1du1aa/2QIUNUrVo1+fn5acyYMdq6datOnTpV0qcJAAAA4DZR4qHq7rvv1vz58+Xu7m4tW79+vRo0aKBjx44pNDTUZvuQkBAdPnxYkhQfH++wPj09XWfPnrWpDwoKkr+/v44cOXITzwgAAADA7czDlQ9usVg0c+ZMbd68WYsWLdKnn34qHx8fm228vb118eJFSVJmZqbD+szMTEmSr69vgfr8usIymZw9E5SE/NeF1weFdXWfsYi+g8Kx9hvRZ1B4Nr9vLI7rgavld4tr+w39pXRw5nVwWajKyMjQq6++qp9++kmLFi1S3bp15ePjo/T0dJvtsrKyVL58eUmSj4+PsrKyCtQHBgZaw1b+9VX29i+sypUrOHs6KEG8PriuBHfJw3YQ3sPdTfJ0V1AQfQd22OkzkuRJn4GzEv7/75tr0ZfgSMKVmVs2/Yb+Uia5JFSdPHlSQ4YMUfXq1bV8+XJVqlRJkhQaGqodO3bYbBsfH686depIkurUqaNjx44VqG/Xrp38/f0VHBxsM0Xw/PnzSk1NLTBl8EaSktLtfssE1zKZrgQqXh9cT8WcPJlyzZKu9BkPdzfl5pllzsnThcT0G+yN29HVfUb6s9/k5OQpjT6DQjKZpMqScvPMBf5GWfj9Awf8c/LkKdt+Q38pPfI/exZGiYeqtLQ0PfHEE2rVqpWioqLk5vZnMo+IiNC0adO0cOFCDRgwQPv379fq1as1e/ZsSVKfPn00YsQIPfLII2rWrJliYmKUlJSkiIgISVJkZKSio6PVqFEjBQYGauLEiWrRooVq1arlVBstFvtD9ygdeH1QWNY/UNf8F7gea38RfQbOc9Rn6EuwJ79bFAji9Jcyp8RD1RdffKEzZ87om2++0bp162zq4uLitGDBAkVFRWnWrFmqVKmSxo4dq1atWkmSwsPDNW7cOI0fP17nzp1TSEiI5s2bp4CAAEnSiBEjlJubqwEDBigzM1MtW7bUzJkzS/gMAQAAANxOSjxUPfnkk3ryyScd1jdq1EhLlixxWN+jRw/16NHDbp2np6dGjhypkSNHGm4nAAAAABRGiS+pDgAAAAC3EkIVAAAAABhAqAIAAAAAAwhVAAAAAGAAoQoAAAAADCBUAQAAAIABhCoAAAAAMIBQBQAAAAAGEKoAAAAAwABCFQAAAAAYQKgCAAAAAAMIVQAAAABgAKEKAAAAAAwgVAEAAACAAYQqAAAAADCAUAUAAAAABhCqAAAAAMAAQhUAAAAAGECoAgAAAAADCFUAAAAAYAChCgAAAAAMIFQBAAAAgAGEKgAAAAAwgFAFAAAAAAYQqgAAAADAAEIVAAAAABhAqAIAAAAAAwhVAAAAAGAAoQoAAAAADCBUAQAAAIABhCoAAAAAMIBQBQAAAAAGEKoAAAAAwABCFQAAAAAYQKgCAAAAAAMIVQAAAABgAKEKAAAAAAwgVAEAAACAAYQqAAAAADCAUAUAAAAABhCqAAAAAMAAQhUAAAAAGECoAgAAAAADCFUAAAAAYAChCgAAAAAMIFQBAAAAgAEerm4AcD0VTBfkdjnlz4IEd1XMyZO5XKDSLRVd1zAAAADg/yNUoVRzu5wi06rhfxZ4uMmUa5Zbz2jJi1AFAAAA12P6HwAAAAAYQKgCAAAAAAMIVQAAAABgAKEKAAAAAAwgVAEAAACAAYQqAAAAADCAUAUAAAAABrg0VCUnJysiIkJ79uyxlh08eFB9+/ZVWFiYOnTooGXLltnss3LlSkVERKhJkyaKjIxUXFyctS4vL09TpkxR69atFRYWpuHDhyshIaHEzgcAAADA7cdloWr//v3q37+/Tp48aS1LS0vT0KFD1bNnT8XGxioqKkqTJk3SoUOHJEl79uzRhAkTNHnyZMXGxqp79+4aPny4Ll26JEmKjo7Wjh07tGLFCm3btk3e3t4aO3asS84PAAAAwO3BJaFq5cqVGjlypF588UWb8g0bNiggIEADBgyQh4eHwsPD1a1bN8XExEiSli1bpi5duqhZs2by9PTUoEGDFBgYqLVr11rrhwwZomrVqsnPz09jxozR1q1bderUqRI/RwAAAAC3Bw9XPGjbtm3VrVs3eXh42ASrY8eOKTQ01GbbkJAQLV++XJIUHx+v3r17F6g/fPiw0tPTdfbsWZv9g4KC5O/vryNHjqhmzZqFbp/JVJSzws2W/7qYTJJFvE64MfoMisLab0SfQeHZ/L6xOK4HrpbfLa7tN/SX0sGZ18EloapKlSp2yzMzM+Xj42NT5u3trYsXL96wPjMzU5Lk6+tboD6/rrAqV67g1Pa4iRLcJQ/bAVUPdzfJ011BQbxOsIM+A2fZ6TOS5EmfgbMS/v/vm2vRl+BIgruka/oN/aVMckmocsTHx0fp6ek2ZVlZWSpfvry1Pisrq0B9YGCgNWzlX19lb//CSkpKt/stE0pexZw8mXLNkq58W+Dh7qbcPLPMOXm6kJh+g71xO6LPwFlX9xnpz36Tk5OnNPoMCslkkipLys0zF/gMYeH3Dxzwz8mTp2z7Df2l9DCZCj/YUqpCVWhoqHbs2GFTFh8frzp16kiS6tSpo2PHjhWob9eunfz9/RUcHKz4+HjrFMDz588rNTW1wJTCG7FY7A/dw7Wsv2yu+S/gCH0GRWHtL6LPwHmO+gx9Cfbkd4sCQZz+UuaUqvtURUREKDExUQsXLlROTo52796t1atXW6+j6tOnj1avXq3du3crJydHCxcuVFJSkiIiIiRJkZGRio6O1qlTp5SRkaGJEyeqRYsWqlWrlitPCwAAAMAtrFSNVAUGBmrBggWKiorSrFmzVKlSJY0dO1atWrWSJIWHh2vcuHEaP368zp07p5CQEM2bN08BAQGSpBEjRig3N1cDBgxQZmamWrZsqZkzZ7ruhAAAAADc8lweqo4cOWLzc6NGjbRkyRKH2/fo0UM9evSwW+fp6amRI0dq5MiRxdpGAAAAAHCkVE3/AwAAAICyhlAFAAAAAAYQqgAAAADAAEIVAAAAABhAqAIAAAAAAwhVAAAAAGAAoQoAAAAADCBUAQAAAIABhCoAAAAAMIBQBQAAAAAGEKoAAAAAwABCFQAAAAAYQKgCAAAAAAMIVQAAAABgAKEKAAAAAAwgVAEAAACAAYQqAAAAADCAUAUAAAAABhCqAAAAAMAAQhUAAAAAGECoAgAAAAADCFUAAAAAYAChCgAAAAAMIFQBAAAAgAEerm4AAAC4dWWZTLqQlVug3M/bQxl2yit6e8jbYjF0bGeOAQDFgVAFAAAKzdkgcyErVyOXHSxQPql3Y7264lCB8nf63ifvcu6FaoujY896rKku5OQVKC+OIAcA9hCqAABAAY7Ck1nSy04EGbOTj+vl6a6EywWP40zwybycazewOQpyjtpO2AJQWIQqAABQwPVGmOy5XpBxhqPjODOC5SxHj0nYAlBYhCoAAG5j1xuRKk3sjWDd7DY6G7Ys5SorwM5xUjyClHhN2wlmwK2FUAUAwG3CXoByNJ3P2RGmm81ewHFVGx2FrfcfvU/J4VEFynOzPTVyue1zfDNH3gCUPEIVAABllLMr69kLUKUtPJVlGdl5GrPyaIHyqMENXNAaACWJUAUAQBnl7Mp6BKjSozgW5ABQehCqAAAo5crKdU8oPFcsyAHg5iFUAQBQyjm7Eh8AoGQRqgAAKAb2RpMcTeVy9ga6uH04mhbIjYuB0o1QBQCAE5y5Ka6jqVyORp6K6wa6KLucvXEx0wWB0oFQBQCAE5yZiudo1MFRSCquG+gCAEoWoQoAgJuEkARXcXa5faYRAsYQqgAAAMqo642GOrqpM9MIgeJHqAIAACijGA0FSgdCFQDgtuBoOlRWuTt1MTzKpsxkMsnH605dcOJ6KADA7YtQBQAok5y9ZsTRdKjJkQ01ZuVRmzKTyaS3n6qv0V/8WGB7RgBwK3I0jZBrrYDCIVQBAMqk663Cx3QowDmOphHau9aK+6wBBRGqAAAAUGiOvtBgsQvczghVAIBSw9434Hz7DbiOvWmBXFcIFESoAgCUGva+Aefbb8B17E0LdDSVluuycDsjVAEAbpqiLCZxrevdhwdA6eHMdVnArYZQBQAwzFF4cvYGpPa+Aec+PACA0o5QBQAotKKEJwC3N6YF4nZAqAKA21hx3euJ8ATAEaYF4nZAqAKA2xj3egLgKo5GsBx9qcPIFkozQhUAlBI384aa15u2BwCucL3rJRnZQllDqAKAUsLRqNGsx5rqQk7hv821V860PQBlHddmoTQjVAFAKefst7n2yglPAMo6R78L7X3xRNBCSbvlQlVSUpJef/117d27V+7u7urevbteeeUVeXjccqcKoIQ5u6iDs+VMxQMA59kLW45G+AlbuFluuaTxwgsvKDg4WNu2bVNiYqKGDx+uhQsXavDgwa5uGoAicPY6oxSPIKWGR1l/NplMslgs8vW6UxecuCDa2Sl0RkeS8ssBAMY5M6olsTgGjLulQtWJEye0d+9ebd26VT4+PqpZs6aeeeYZTZs2jVAF3ETOBh972zu7hLejP4yyeOqVlUetP+aHqqjBDTT6ix8LbM4UOgC4fTg7nZoQhsK6pULVsWPHFBAQoODgYGvZPffcozNnzujChQuqWLFioY7j5ibxfiglTG6Sp++V/zVJcneTyc0si8lNbm4FN8/SdT7cq2y+qI7Oqby3hzKvKbdXVhLlZklvfFkwsEzte58y7Pwxsrf9uO4N9OZXPxXYdlz3BvL1Krja06XsXLvbj+9WXz7lPK/8YJJMMskii9xMJrvHcTOp0OXObFvayktTW0pf201/9hnJ2m9ulz5TmtpS9ttuko+3p679c2OvL5W+tpfl5/3mtdHR3xpHf7Mc/d1z9Pfzcrk7ldVqkiyyWPuNv2cVudv5jIOSZzI5sa3FcuvEhy+//FIzZszQd999Zy07efKkIiIitGXLFlWtWtV1jQMAAABwS7qlcrCvr68uXbpkU5b/c/ny5V3RJAAAAAC3uFsqVNWpU0epqalKTEy0lv3yyy+qWrWqKlSo4MKWAQAAALhV3VKhqnbt2mrWrJkmTpyojIwMnTp1SrNnz1afPn1c3TQAAAAAt6hb6poqSUpMTNRbb72lPXv2yM3NTT179tTIkSPl7l7w4kMAAAAAMOqWC1UAAAAAUJJuqel/AAAAAFDSCFUAAAAAYAChCgAAAAAMIFQBAAAAgAGEKpQZycnJioiI0J49e1zdFJQBhw8f1pNPPqkWLVqoTZs2evnll5WcnOzqZqGU27Vrl/r27aumTZuqTZs2mjBhgrKyslzdLJQReXl5GjhwoEaPHu3qpqAMWLt2rerXr6+wsDDrv1GjRrm6WSgiQhXKhP3796t///46efKkq5uCMiArK0uDBw9WWFiYtm/frjVr1ig1NVWvvfaaq5uGUiw5OVnDhg3To48+qn379mnlypXau3evPvzwQ1c3DWXE+++/r3379rm6GSgjfvjhB/Xo0UNxcXHWf9OmTXN1s1BEhCqUeitXrtTIkSP14osvuropKCPOnDmjevXqacSIEfLy8lJgYKD69++v2NhYVzcNpVilSpW0c+dORUZGymQyKTU1VZcvX1alSpVc3TSUAbt27dKGDRvUqVMnVzcFZcQPP/yghg0buroZKCaEKpR6bdu21caNG/W3v/3N1U1BGXH33Xdr/vz5Njf9Xr9+vRo0aODCVqEs8PPzkyS1b99e3bp1U5UqVRQZGeniVqG0S0pK0pgxYzR9+nT5+Pi4ujkoA8xms3766Sd99913evDBB9WuXTu9/vrrSktLc3XTUESEKpR6VapUkYeHh6ubgTLKYrFoxowZ2rx5s8aMGePq5qCM2LBhg7Zu3So3Nzf961//cnVzUIqZzWaNGjVKTz75pOrVq+fq5qCMSE5OVv369dW5c2etXbtWS5Ys0fHjx7mmqgzjkyqAW1ZGRoZeffVV/fTTT1q0aJHq1q3r6iahjPD29pa3t7dGjRqlvn37Ki0tTf7+/q5uFkqhuXPnysvLSwMHDnR1U1CGBAUFKSYmxvqzj4+PRo0apX79+ikjI8M6ao6yg5EqALekkydPqnfv3srIyNDy5csJVLihAwcO6OGHH1Z2dra1LDs7W56enkzpgkNffvml9u7dq+bNm6t58+Zas2aN1qxZo+bNm7u6aSjFDh8+rHfeeUcWi8Valp2dLTc3N3l5ebmwZSgqQhWAW05aWpqeeOIJNW3aVB999BELDaBQ6tatq6ysLE2fPl3Z2dn6/fffNWXKFPXp04cPOXBo3bp1OnDggPbt26d9+/apa9eu6tq1K6sA4roCAgIUExOj+fPnKzc3V2fOnNG0adPUq1cvft+UUUz/A3DL+eKLL3TmzBl98803WrdunU1dXFyci1qF0q58+fKaP3++Jk6cqDZt2qhChQrq1q2bRowY4eqmAbjFVK1aVXPnztW7776r6OholStXTl26dOGaqjLMZLl63BEAAAAA4BSm/wEAAACAAYQqAAAAADCAUAUAAAAABhCqAAAAAMAAQhUAAAAAGECoAgAAAAADCFUAAAAAYAChCgAAAAAMIFQBAAAAgAGEKgAAAAAwgFAFAAAAAAYQqgAAAADAgP8HUQcfbl1vW0cAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "import pandas as pd\n", "import matplotlib.pyplot as plt\n", From 99cfb9c254efbaf46d49be450839a8957feda77a Mon Sep 17 00:00:00 2001 From: Stefano Date: Thu, 15 Dec 2022 18:22:48 +0100 Subject: [PATCH 3/3] Update docs/examples/basic_ranking.ipynb reduced number of histogram bins Co-authored-by: Mark Daoust --- docs/examples/basic_ranking.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/examples/basic_ranking.ipynb b/docs/examples/basic_ranking.ipynb index 68f966ea..c43df29a 100644 --- a/docs/examples/basic_ranking.ipynb +++ b/docs/examples/basic_ranking.ipynb @@ -516,7 +516,7 @@ "# plot everythin as kde\n", "plt.figure(figsize=(10,6), dpi=100)\n", "#sns.kdeplot(data=res_data, fill=True, bw_adjust=0.9, alpha=0.6, linewidth=0, legend=False)\n", - "sns.histplot(data=res_data, legend=False, alpha=0.8, bins=120)\n", + "sns.histplot(data=res_data, legend=False, alpha=0.8, bins=20)\n", "plt.legend([\"Predictions\", \"Test Labels\"][::-1], title=\"Legend\", fontsize=12, title_fontsize=16)\n", "plt.title('Predictions vs. test labels', fontsize=20);" ]