From ddec59a839e6d47232aea0a3cb226658dec7ac83 Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Sun, 20 Aug 2023 19:58:59 -0700 Subject: [PATCH] v2.1 of Ch10 --- Ch10-deeplearning-lab.Rmd | 19 +- Ch10-deeplearning-lab.ipynb | 827 ++++++++++++++++++------------------ 2 files changed, 414 insertions(+), 432 deletions(-) diff --git a/Ch10-deeplearning-lab.Rmd b/Ch10-deeplearning-lab.Rmd index e6911cc..51674b6 100644 --- a/Ch10-deeplearning-lab.Rmd +++ b/Ch10-deeplearning-lab.Rmd @@ -1,19 +1,3 @@ ---- -jupyter: - jupytext: - cell_metadata_filter: -all - formats: ipynb,Rmd - text_representation: - extension: .Rmd - format_name: rmarkdown - format_version: '1.2' - jupytext_version: 1.14.7 - kernelspec: - display_name: Python 3 (ipykernel) - language: python - name: python3 ---- - # Chapter 10 @@ -872,7 +856,7 @@ for idx, (X_ ,Y_) in enumerate(cifar_dm.train_dataloader()): Before we start, we look at some of the training images; similar code produced -Figure 10.5 on page 164. The example below also illustrates +Figure 10.5 on page 447. The example below also illustrates that `TensorDataset` objects can be indexed with integers --- we are choosing random images from the training data by indexing `cifar_train`. In order to display correctly, we must reorder the dimensions by a call to `np.transpose()`. @@ -1705,7 +1689,6 @@ early stopping, since then the test performance would be biased. We form the training dataset similar to our `Hitters` example. - ```{python} datasets = [] diff --git a/Ch10-deeplearning-lab.ipynb b/Ch10-deeplearning-lab.ipynb index 835512f..2577eac 100644 --- a/Ch10-deeplearning-lab.ipynb +++ b/Ch10-deeplearning-lab.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "b672dcf6", + "id": "23016bca", "metadata": {}, "source": [ "\n", @@ -24,7 +24,7 @@ { "cell_type": "code", "execution_count": 1, - "id": "9b5b8319", + "id": "cf431f3f", "metadata": { "lines_to_next_cell": 2 }, @@ -48,7 +48,7 @@ }, { "cell_type": "markdown", - "id": "c0cb2c87", + "id": "667eff82", "metadata": {}, "source": [ "### Torch-Specific Imports\n", @@ -61,7 +61,7 @@ { "cell_type": "code", "execution_count": 2, - "id": "f66f362c", + "id": "1db00e03", "metadata": {}, "outputs": [], "source": [ @@ -73,7 +73,7 @@ }, { "cell_type": "markdown", - "id": "5ce27a8d", + "id": "b3407495", "metadata": {}, "source": [ "There are several other helper packages for `torch`. For instance,\n", @@ -87,7 +87,7 @@ { "cell_type": "code", "execution_count": 3, - "id": "17bce9cb", + "id": "3da0a445", "metadata": {}, "outputs": [], "source": [ @@ -98,7 +98,7 @@ }, { "cell_type": "markdown", - "id": "a14990c3", + "id": "e5c55b19", "metadata": {}, "source": [ "The package `pytorch_lightning` is a somewhat higher-level\n", @@ -111,7 +111,7 @@ { "cell_type": "code", "execution_count": 4, - "id": "4c3b6e43", + "id": "bbbf32fe", "metadata": {}, "outputs": [], "source": [ @@ -121,7 +121,7 @@ }, { "cell_type": "markdown", - "id": "e5bc78bd", + "id": "cf5ec401", "metadata": {}, "source": [ "In order to reproduce results we use `seed_everything()`. We will also instruct `torch` to use deterministic algorithms\n", @@ -131,7 +131,7 @@ { "cell_type": "code", "execution_count": 5, - "id": "6839d8ad", + "id": "3810caf4", "metadata": {}, "outputs": [ { @@ -150,7 +150,7 @@ }, { "cell_type": "markdown", - "id": "1f1490e7", + "id": "c3dea945", "metadata": {}, "source": [ "We will use several datasets shipped with `torchvision` for our\n", @@ -161,7 +161,7 @@ { "cell_type": "code", "execution_count": 6, - "id": "07dba2dd", + "id": "454dc419", "metadata": { "lines_to_next_cell": 0 }, @@ -179,7 +179,7 @@ }, { "cell_type": "markdown", - "id": "36ec305c", + "id": "f7f9578a", "metadata": {}, "source": [ "We have provided a few utilities in `ISLP` specifically for this lab.\n", @@ -197,7 +197,7 @@ { "cell_type": "code", "execution_count": 7, - "id": "89763447", + "id": "cd43a4c6", "metadata": {}, "outputs": [], "source": [ @@ -209,7 +209,7 @@ }, { "cell_type": "markdown", - "id": "dfc13283", + "id": "c5231b9d", "metadata": {}, "source": [ "In addition we have included some helper\n", @@ -226,7 +226,7 @@ { "cell_type": "code", "execution_count": 8, - "id": "ac5ab1b0", + "id": "eaf84e9c", "metadata": {}, "outputs": [], "source": [ @@ -238,7 +238,7 @@ }, { "cell_type": "markdown", - "id": "04f757bd", + "id": "c42bc542", "metadata": {}, "source": [ "Finally, we introduce some utility imports not directly related to\n", @@ -255,7 +255,7 @@ { "cell_type": "code", "execution_count": 9, - "id": "5a5468e6", + "id": "d007a49b", "metadata": { "lines_to_next_cell": 2 }, @@ -267,7 +267,7 @@ }, { "cell_type": "markdown", - "id": "690a5255", + "id": "d0fe1cff", "metadata": {}, "source": [ "## Single Layer Network on Hitters Data\n", @@ -277,7 +277,7 @@ { "cell_type": "code", "execution_count": 10, - "id": "d635398b", + "id": "9da64364", "metadata": { "lines_to_next_cell": 0 }, @@ -289,7 +289,7 @@ }, { "cell_type": "markdown", - "id": "a0fd86f3", + "id": "0e80a8c0", "metadata": {}, "source": [ " We will fit two linear models (least squares and lasso) and compare their performance\n", @@ -305,7 +305,7 @@ { "cell_type": "code", "execution_count": 11, - "id": "2c621749", + "id": "a2cfe999", "metadata": { "lines_to_next_cell": 0 }, @@ -318,7 +318,7 @@ }, { "cell_type": "markdown", - "id": "f32a66d7", + "id": "5f0851bc", "metadata": {}, "source": [ "The `to_numpy()` method above converts `pandas`\n", @@ -331,7 +331,7 @@ }, { "cell_type": "markdown", - "id": "b5565350", + "id": "afe4eb28", "metadata": {}, "source": [ "We now split the data into test and training, fixing the random\n", @@ -341,7 +341,7 @@ { "cell_type": "code", "execution_count": 12, - "id": "cd19596a", + "id": "5c600069", "metadata": {}, "outputs": [], "source": [ @@ -356,7 +356,7 @@ }, { "cell_type": "markdown", - "id": "b82951aa", + "id": "e27a6313", "metadata": {}, "source": [ "### Linear Models\n", @@ -366,7 +366,7 @@ { "cell_type": "code", "execution_count": 13, - "id": "e4bfcd5a", + "id": "6ea4f551", "metadata": {}, "outputs": [ { @@ -388,7 +388,7 @@ }, { "cell_type": "markdown", - "id": "bf3523a8", + "id": "e5fe8c6b", "metadata": {}, "source": [ "Next we fit the lasso using `sklearn`. We are using\n", @@ -402,7 +402,7 @@ { "cell_type": "code", "execution_count": 14, - "id": "36f8290b", + "id": "f1b8b3f5", "metadata": {}, "outputs": [], "source": [ @@ -414,7 +414,7 @@ }, { "cell_type": "markdown", - "id": "9f1bf0ad", + "id": "39a58ed0", "metadata": {}, "source": [ "We need to create a grid of values for $\\lambda$. As is common practice, \n", @@ -425,7 +425,7 @@ { "cell_type": "code", "execution_count": 15, - "id": "5015c394", + "id": "50ce4171", "metadata": { "lines_to_next_cell": 0 }, @@ -440,7 +440,7 @@ }, { "cell_type": "markdown", - "id": "89f6b4e4", + "id": "2cdc3810", "metadata": {}, "source": [ "Note that we had to transform the data first, since the scale of the variables impacts the choice of $\\lambda$.\n", @@ -450,7 +450,7 @@ { "cell_type": "code", "execution_count": 16, - "id": "b5dc7d68", + "id": "94c4ab75", "metadata": {}, "outputs": [], "source": [ @@ -466,7 +466,7 @@ }, { "cell_type": "markdown", - "id": "0b64a882", + "id": "e5262d51", "metadata": {}, "source": [ "We extract the lasso model with best cross-validated mean absolute error, and evaluate its\n", @@ -477,7 +477,7 @@ { "cell_type": "code", "execution_count": 17, - "id": "2c49196f", + "id": "86e45999", "metadata": { "lines_to_next_cell": 0 }, @@ -501,7 +501,7 @@ }, { "cell_type": "markdown", - "id": "61f016c9", + "id": "1f905d89", "metadata": {}, "source": [ "This is similar to the results we got for the linear model fit by least squares. However, these results can vary a lot for different train/test splits; we encourage the reader to try a different seed in code block 12 and rerun the subsequent code up to this point.\n", @@ -519,7 +519,7 @@ { "cell_type": "code", "execution_count": 18, - "id": "df5864e2", + "id": "00ac7606", "metadata": {}, "outputs": [], "source": [ @@ -541,7 +541,7 @@ }, { "cell_type": "markdown", - "id": "4b05cc28", + "id": "a25aab3b", "metadata": {}, "source": [ "The `class` statement identifies the code chunk as a\n", @@ -577,7 +577,7 @@ { "cell_type": "code", "execution_count": 19, - "id": "da601fe1", + "id": "bb7ff7e9", "metadata": {}, "outputs": [], "source": [ @@ -586,7 +586,7 @@ }, { "cell_type": "markdown", - "id": "326f3b54", + "id": "ac0c6bf7", "metadata": {}, "source": [ "The object `self.sequential` is a composition of four maps. The\n", @@ -601,7 +601,7 @@ }, { "cell_type": "markdown", - "id": "a246aedb", + "id": "9e8e69ac", "metadata": {}, "source": [ "The package `torchinfo` provides a `summary()` function that neatly summarizes\n", @@ -612,7 +612,7 @@ { "cell_type": "code", "execution_count": 20, - "id": "15dd23a9", + "id": "b60d34e1", "metadata": { "lines_to_next_cell": 0 }, @@ -658,7 +658,7 @@ }, { "cell_type": "markdown", - "id": "3cb4b8bc", + "id": "aa499e3f", "metadata": {}, "source": [ "We have truncated the end of the output slightly, here and in subsequent uses.\n", @@ -680,7 +680,7 @@ { "cell_type": "code", "execution_count": 21, - "id": "dae83bc5", + "id": "42f63682", "metadata": { "lines_to_next_cell": 0 }, @@ -693,7 +693,7 @@ }, { "cell_type": "markdown", - "id": "80475fa2", + "id": "6e184dcd", "metadata": {}, "source": [ "We do the same for the test data." @@ -702,7 +702,7 @@ { "cell_type": "code", "execution_count": 22, - "id": "81e217a8", + "id": "57fbf564", "metadata": {}, "outputs": [], "source": [ @@ -713,7 +713,7 @@ }, { "cell_type": "markdown", - "id": "7f49263d", + "id": "09cabaa8", "metadata": {}, "source": [ "Finally, this dataset is passed to a `DataLoader()` which ultimately\n", @@ -737,7 +737,7 @@ { "cell_type": "code", "execution_count": 23, - "id": "e5359e31", + "id": "570bdd73", "metadata": {}, "outputs": [], "source": [ @@ -746,7 +746,7 @@ }, { "cell_type": "markdown", - "id": "105b015f", + "id": "a7bc2151", "metadata": {}, "source": [ "The general training setup in `pytorch_lightning` involves\n", @@ -769,7 +769,7 @@ { "cell_type": "code", "execution_count": 24, - "id": "7a19d6d8", + "id": "c08a4d6d", "metadata": {}, "outputs": [], "source": [ @@ -782,7 +782,7 @@ }, { "cell_type": "markdown", - "id": "8d1f2a76", + "id": "db5447fa", "metadata": {}, "source": [ "Next we must provide a `pytorch_lightning` module that controls\n", @@ -797,7 +797,7 @@ { "cell_type": "code", "execution_count": 25, - "id": "07bc10ef", + "id": "aaa1e593", "metadata": {}, "outputs": [], "source": [ @@ -807,7 +807,7 @@ }, { "cell_type": "markdown", - "id": "1ebf9835", + "id": "8500a2ba", "metadata": {}, "source": [ " By using the `SimpleModule.regression()` method, we indicate that we will use squared-error loss as in\n", @@ -824,7 +824,7 @@ { "cell_type": "code", "execution_count": 26, - "id": "08c71fb4", + "id": "1a4e9b3c", "metadata": {}, "outputs": [], "source": [ @@ -833,7 +833,7 @@ }, { "cell_type": "markdown", - "id": "511617c3", + "id": "77e3c7a5", "metadata": {}, "source": [ "Finally we are ready to train our model and log the results. We\n", @@ -855,7 +855,7 @@ { "cell_type": "code", "execution_count": 27, - "id": "81a8c626", + "id": "2f839fde", "metadata": { "lines_to_next_cell": 0 }, @@ -897,7 +897,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4cb0d8941d43434883b4142c14e198f8", + "model_id": "3f81045e13e641428a7f37ab7ceb43be", "version_major": 2, "version_minor": 0 }, @@ -1569,7 +1569,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "840b55ce195b42edbe9f3fd394dec7e5", + "model_id": "553e586e7cd54ad3bb9e01d0fc37754e", "version_major": 2, "version_minor": 0 }, @@ -1583,7 +1583,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2e3d175f2c294fac992ff04733267452", + "model_id": "05c22b9bdd4c48098756a37b57fc963b", "version_major": 2, "version_minor": 0 }, @@ -1597,7 +1597,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2d0477c9d13945bb8a6cbd38620bc93f", + "model_id": "f073bf03d90b4e318352c5de82bb9953", "version_major": 2, "version_minor": 0 }, @@ -1627,7 +1627,7 @@ }, { "cell_type": "markdown", - "id": "abe1a22c", + "id": "4018f616", "metadata": {}, "source": [ "At each step of SGD, the algorithm randomly selects 32 training observations for\n", @@ -1643,7 +1643,7 @@ { "cell_type": "code", "execution_count": 28, - "id": "083670c6", + "id": "672b4410", "metadata": { "lines_to_next_cell": 2 }, @@ -1651,7 +1651,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ddc1a0eaac9e4fcda9e91e34abdcc67d", + "model_id": "f0857a2a00a847c084831c51d7fd8dfd", "version_major": 2, "version_minor": 0 }, @@ -1704,7 +1704,7 @@ }, { "cell_type": "markdown", - "id": "c6b3317b", + "id": "0f4e3b11", "metadata": {}, "source": [ "The results of the fit have been logged into a CSV file. We can find the\n", @@ -1720,7 +1720,7 @@ { "cell_type": "code", "execution_count": 29, - "id": "02ba9edf", + "id": "8cf6ef60", "metadata": {}, "outputs": [], "source": [ @@ -1729,7 +1729,7 @@ }, { "cell_type": "markdown", - "id": "daf8ed8d", + "id": "537efe03", "metadata": {}, "source": [ "Since we will produce similar plots in later examples, we write a\n", @@ -1739,7 +1739,7 @@ { "cell_type": "code", "execution_count": 30, - "id": "4184557c", + "id": "67ce1e26", "metadata": { "lines_to_next_cell": 0 }, @@ -1773,7 +1773,7 @@ }, { "cell_type": "markdown", - "id": "026c1c4d", + "id": "53309bb0", "metadata": {}, "source": [ "We now set up our axes, and use our function to produce the MAE plot." @@ -1782,7 +1782,7 @@ { "cell_type": "code", "execution_count": 31, - "id": "3244deeb", + "id": "deb684d2", "metadata": { "lines_to_next_cell": 2 }, @@ -1811,7 +1811,7 @@ }, { "cell_type": "markdown", - "id": "670a3e8f", + "id": "eab05619", "metadata": {}, "source": [ "We can predict directly from the final model, and\n", @@ -1829,7 +1829,7 @@ { "cell_type": "code", "execution_count": 32, - "id": "36bb545e", + "id": "454033dd", "metadata": { "lines_to_next_cell": 0 }, @@ -1853,7 +1853,7 @@ }, { "cell_type": "markdown", - "id": "ae4b9ca6", + "id": "b3625ff5", "metadata": {}, "source": [ " " @@ -1861,7 +1861,7 @@ }, { "cell_type": "markdown", - "id": "b8b7fd3c", + "id": "f46e3883", "metadata": {}, "source": [ "### Cleanup\n", @@ -1875,7 +1875,7 @@ { "cell_type": "code", "execution_count": 33, - "id": "00371f48", + "id": "71b3d0d0", "metadata": { "lines_to_next_cell": 2 }, @@ -1894,7 +1894,7 @@ }, { "cell_type": "markdown", - "id": "5707d61c", + "id": "28d1c832", "metadata": {}, "source": [ "## Multilayer Network on the MNIST Digit Data\n", @@ -1908,7 +1908,7 @@ { "cell_type": "code", "execution_count": 34, - "id": "3e28d6ba", + "id": "def8605c", "metadata": {}, "outputs": [ { @@ -1939,7 +1939,7 @@ }, { "cell_type": "markdown", - "id": "eb8b7e29", + "id": "95ffc346", "metadata": {}, "source": [ "There are 60,000 images in the training data and 10,000 in the test\n", @@ -1963,7 +1963,7 @@ { "cell_type": "code", "execution_count": 35, - "id": "cb04829e", + "id": "8b9e2b8c", "metadata": {}, "outputs": [], "source": [ @@ -1976,7 +1976,7 @@ }, { "cell_type": "markdown", - "id": "1119e22a", + "id": "91256a1b", "metadata": {}, "source": [ "Let’s take a look at the data that will get fed into our network. We loop through the first few\n", @@ -1986,7 +1986,7 @@ { "cell_type": "code", "execution_count": 36, - "id": "c4a265fc", + "id": "a4b95dc6", "metadata": { "lines_to_next_cell": 2 }, @@ -2012,7 +2012,7 @@ }, { "cell_type": "markdown", - "id": "f65ada90", + "id": "12e7eddb", "metadata": {}, "source": [ "We see that the $X$ for each batch consists of 256 images of size `1x28x28`.\n", @@ -2025,7 +2025,7 @@ { "cell_type": "code", "execution_count": 37, - "id": "60339a03", + "id": "17714c25", "metadata": {}, "outputs": [], "source": [ @@ -2051,7 +2051,7 @@ }, { "cell_type": "markdown", - "id": "5b8f87da", + "id": "9893ffb2", "metadata": {}, "source": [ "We see that in the first layer, each `1x28x28` image is flattened, then mapped to\n", @@ -2065,7 +2065,7 @@ { "cell_type": "code", "execution_count": 38, - "id": "1d0f24b2", + "id": "88a4bf46", "metadata": {}, "outputs": [], "source": [ @@ -2074,7 +2074,7 @@ }, { "cell_type": "markdown", - "id": "0ee4771e", + "id": "049febff", "metadata": {}, "source": [ "We can check that the model produces output of expected size based\n", @@ -2084,7 +2084,7 @@ { "cell_type": "code", "execution_count": 39, - "id": "42a4931b", + "id": "ea0d9387", "metadata": {}, "outputs": [ { @@ -2104,7 +2104,7 @@ }, { "cell_type": "markdown", - "id": "628d56f9", + "id": "638026d1", "metadata": {}, "source": [ "Let’s take a look at the summary of the model. Instead of an `input_size` we can pass\n", @@ -2115,7 +2115,7 @@ { "cell_type": "code", "execution_count": 40, - "id": "69e62d88", + "id": "17c34a29", "metadata": {}, "outputs": [ { @@ -2164,7 +2164,7 @@ }, { "cell_type": "markdown", - "id": "f8e77337", + "id": "73e3cd00", "metadata": {}, "source": [ "Having set up both the model and the data module, fitting this model is\n", @@ -2177,7 +2177,7 @@ { "cell_type": "code", "execution_count": 41, - "id": "2027a378", + "id": "a0608bd1", "metadata": {}, "outputs": [], "source": [ @@ -2188,7 +2188,7 @@ }, { "cell_type": "markdown", - "id": "9146b9b5", + "id": "6959c893", "metadata": {}, "source": [ "Now we are ready to go. The final step is to supply training data, and fit the model." @@ -2197,7 +2197,7 @@ { "cell_type": "code", "execution_count": 42, - "id": "4a5e941d", + "id": "cf8e3d9d", "metadata": { "lines_to_next_cell": 0 }, @@ -2239,7 +2239,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "23f1384f37824cc59404e8a856f4962d", + "model_id": "2c7fc7b3fc61455b88cf7020ce62d19e", "version_major": 2, "version_minor": 0 }, @@ -2689,7 +2689,7 @@ }, { "cell_type": "markdown", - "id": "8099bdc9", + "id": "cc8724fa", "metadata": {}, "source": [ "We have suppressed the output here, which is a progress report on the\n", @@ -2707,7 +2707,7 @@ }, { "cell_type": "markdown", - "id": "d6c3bbbc", + "id": "b9dc38ac", "metadata": {}, "source": [ "`SimpleModule.classification()` includes\n", @@ -2720,7 +2720,7 @@ { "cell_type": "code", "execution_count": 43, - "id": "603a278a", + "id": "45e03385", "metadata": { "lines_to_next_cell": 0 }, @@ -2750,7 +2750,7 @@ }, { "cell_type": "markdown", - "id": "654cec05", + "id": "1679f357", "metadata": {}, "source": [ "Once again we evaluate the accuracy using the `test()` method of our trainer. This model achieves\n", @@ -2760,13 +2760,13 @@ { "cell_type": "code", "execution_count": 44, - "id": "93dc968b", + "id": "3a875b78", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3eeaa8a87a31475bb36fe8dd24e694d9", + "model_id": "759de3284ee24f5c8191c1fc922f3e1d", "version_major": 2, "version_minor": 0 }, @@ -2820,7 +2820,7 @@ }, { "cell_type": "markdown", - "id": "5f7dc344", + "id": "12ef4787", "metadata": {}, "source": [ "Table 10.1 also reports the error rates resulting from LDA (Chapter 4) and multiclass logistic\n", @@ -2834,7 +2834,7 @@ { "cell_type": "code", "execution_count": 45, - "id": "e1975a3e", + "id": "2f035d83", "metadata": {}, "outputs": [], "source": [ @@ -2855,7 +2855,7 @@ { "cell_type": "code", "execution_count": 46, - "id": "14c79199", + "id": "2cd67ad8", "metadata": { "lines_to_next_cell": 0 }, @@ -2899,7 +2899,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9ecb4b2d1cba45a9b762950d7ad365e4", + "model_id": "c932821add0e4296a5ff2122a94b6090", "version_major": 2, "version_minor": 0 }, @@ -3347,7 +3347,7 @@ }, { "cell_type": "markdown", - "id": "f84cfa36", + "id": "20a316a1", "metadata": {}, "source": [ "We fit the model just as before and compute the test results." @@ -3356,7 +3356,7 @@ { "cell_type": "code", "execution_count": 47, - "id": "acb6f88d", + "id": "3900d16e", "metadata": { "lines_to_next_cell": 0 }, @@ -3364,7 +3364,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "96180813745947aa8b3705fa737d63a0", + "model_id": "63d666ec843544bf804c3fc6fc5fd6ab", "version_major": 2, "version_minor": 0 }, @@ -3418,7 +3418,7 @@ }, { "cell_type": "markdown", - "id": "05244a5e", + "id": "ca80aa75", "metadata": {}, "source": [ "The accuracy is above 90% even for this pretty simple model.\n", @@ -3430,7 +3430,7 @@ { "cell_type": "code", "execution_count": 48, - "id": "f5b3f811", + "id": "679f2ea5", "metadata": { "lines_to_next_cell": 2 }, @@ -3450,7 +3450,7 @@ }, { "cell_type": "markdown", - "id": "b5b395bb", + "id": "dd8ba586", "metadata": {}, "source": [ "## Convolutional Neural Networks\n", @@ -3461,7 +3461,7 @@ { "cell_type": "code", "execution_count": 49, - "id": "e1caa7ac", + "id": "e4af6604", "metadata": {}, "outputs": [ { @@ -3484,7 +3484,7 @@ { "cell_type": "code", "execution_count": 50, - "id": "9e94a7b4", + "id": "2b613ecc", "metadata": {}, "outputs": [], "source": [ @@ -3501,7 +3501,7 @@ }, { "cell_type": "markdown", - "id": "219ccc6f", + "id": "af1d3cdc", "metadata": {}, "source": [ "The `CIFAR100` dataset consists of 50,000 training images, each represented by a three-dimensional tensor:\n", @@ -3515,7 +3515,7 @@ { "cell_type": "code", "execution_count": 51, - "id": "32c78c06", + "id": "4b325cb4", "metadata": { "lines_to_next_cell": 0 }, @@ -3530,7 +3530,7 @@ }, { "cell_type": "markdown", - "id": "e4570164", + "id": "f361276e", "metadata": {}, "source": [ "We again look at the shape of typical batches in our data loaders." @@ -3539,7 +3539,7 @@ { "cell_type": "code", "execution_count": 52, - "id": "b3c27322", + "id": "cb3d00cb", "metadata": { "lines_to_next_cell": 2 }, @@ -3565,11 +3565,11 @@ }, { "cell_type": "markdown", - "id": "f6152280", + "id": "08771862", "metadata": {}, "source": [ "Before we start, we look at some of the training images; similar code produced\n", - "Figure 10.5 on page 164. The example below also illustrates\n", + "Figure 10.5 on page 447. The example below also illustrates\n", "that `TensorDataset` objects can be indexed with integers --- we are choosing\n", "random images from the training data by indexing `cifar_train`. In order to display correctly,\n", "we must reorder the dimensions by a call to `np.transpose()`." @@ -3578,7 +3578,7 @@ { "cell_type": "code", "execution_count": 53, - "id": "c626e0ff", + "id": "60d09656", "metadata": { "lines_to_next_cell": 0 }, @@ -3611,7 +3611,7 @@ }, { "cell_type": "markdown", - "id": "2a1c4832", + "id": "642140af", "metadata": {}, "source": [ "Here the `imshow()` method recognizes from the shape of its argument that it is a 3-dimensional array, with the last dimension indexing the three RGB color channels.\n", @@ -3628,7 +3628,7 @@ { "cell_type": "code", "execution_count": 54, - "id": "9d5bcdf3", + "id": "f823da11", "metadata": {}, "outputs": [], "source": [ @@ -3652,7 +3652,7 @@ }, { "cell_type": "markdown", - "id": "a7204121", + "id": "00927159", "metadata": {}, "source": [ "Notice that we used the `padding = \"same\"` argument to\n", @@ -3673,7 +3673,7 @@ { "cell_type": "code", "execution_count": 55, - "id": "3e13e9bc", + "id": "1a172f7e", "metadata": {}, "outputs": [], "source": [ @@ -3700,7 +3700,7 @@ }, { "cell_type": "markdown", - "id": "1b07fb1a", + "id": "8455079f", "metadata": {}, "source": [ "We build the model and look at the summary. (We had created examples of `X_` earlier.)" @@ -3709,7 +3709,7 @@ { "cell_type": "code", "execution_count": 56, - "id": "15c4a382", + "id": "651e62b4", "metadata": { "lines_to_next_cell": 2 }, @@ -3772,7 +3772,7 @@ }, { "cell_type": "markdown", - "id": "b168c198", + "id": "7dd67ce7", "metadata": {}, "source": [ "The total number of trainable parameters is 964,516.\n", @@ -3806,7 +3806,7 @@ { "cell_type": "code", "execution_count": 57, - "id": "4a40238a", + "id": "63f2650e", "metadata": {}, "outputs": [], "source": [ @@ -3820,7 +3820,7 @@ { "cell_type": "code", "execution_count": 58, - "id": "8aab2c62", + "id": "a3e4bc28", "metadata": {}, "outputs": [ { @@ -3860,7 +3860,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8473f6db1fdc40b7909b66fc6410277d", + "model_id": "40c811fa26da4690a95838e6ab0a8a98", "version_major": 2, "version_minor": 0 }, @@ -4310,7 +4310,7 @@ }, { "cell_type": "markdown", - "id": "090f6400", + "id": "c3fc9402", "metadata": {}, "source": [ "This model can take 10 minutes or more to run and achieves about 42% accuracy on the test\n", @@ -4326,7 +4326,7 @@ { "cell_type": "code", "execution_count": 59, - "id": "12474ef6", + "id": "6b161d93", "metadata": { "lines_to_next_cell": 0 }, @@ -4357,7 +4357,7 @@ }, { "cell_type": "markdown", - "id": "f3fe0cd4", + "id": "71dea0c8", "metadata": {}, "source": [ "Finally, we evaluate our model on our test data." @@ -4366,7 +4366,7 @@ { "cell_type": "code", "execution_count": 60, - "id": "9d632437", + "id": "ab8a91dc", "metadata": { "lines_to_next_cell": 2 }, @@ -4374,7 +4374,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fc46f12820ff4ca281d8a035a53fa610", + "model_id": "6dced9ab160c4c30b094a877f330efba", "version_major": 2, "version_minor": 0 }, @@ -4428,7 +4428,7 @@ }, { "cell_type": "markdown", - "id": "4b69e259", + "id": "11d0e8b3", "metadata": {}, "source": [ "### Hardware Acceleration\n", @@ -4449,7 +4449,7 @@ { "cell_type": "code", "execution_count": 61, - "id": "52a43158", + "id": "6d9962ae", "metadata": { "lines_to_next_cell": 0 }, @@ -4491,7 +4491,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "efb32ed16b3946ebbdb7c6a1714c7347", + "model_id": "6409051044c94ad9af785a42df78d36e", "version_major": 2, "version_minor": 0 }, @@ -4940,7 +4940,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ae6af1d96e5a4d1fa048bbbf0a3f5b7b", + "model_id": "4f37d3b614314b6fbf9dfb3df1775948", "version_major": 2, "version_minor": 0 }, @@ -4969,7 +4969,7 @@ }, { "cell_type": "markdown", - "id": "b72de871", + "id": "3faab186", "metadata": {}, "source": [ "This yields approximately two- or three-fold acceleration for each epoch.\n", @@ -4979,7 +4979,7 @@ }, { "cell_type": "markdown", - "id": "b86d6ef4", + "id": "31759785", "metadata": {}, "source": [ "## Using Pretrained CNN Models\n", @@ -5001,7 +5001,7 @@ { "cell_type": "code", "execution_count": 62, - "id": "db2febe9", + "id": "a71c9acb", "metadata": { "lines_to_next_cell": 2 }, @@ -5031,7 +5031,7 @@ }, { "cell_type": "markdown", - "id": "f6696ee2", + "id": "89071e87", "metadata": {}, "source": [ "We now set up the trained network with the weights we read in code block~6. The model has 50 layers, with a fair bit of complexity." @@ -5040,7 +5040,7 @@ { "cell_type": "code", "execution_count": 63, - "id": "2aabd724", + "id": "4f890244", "metadata": { "lines_to_next_cell": 0 }, @@ -5255,7 +5255,7 @@ }, { "cell_type": "markdown", - "id": "c4ee6ebe", + "id": "185bb4b5", "metadata": {}, "source": [ "We set the mode to `eval()` to ensure that the model is ready to predict on new data." @@ -5264,7 +5264,7 @@ { "cell_type": "code", "execution_count": 64, - "id": "6d27342d", + "id": "c4be9922", "metadata": { "lines_to_next_cell": 0 }, @@ -5461,7 +5461,7 @@ }, { "cell_type": "markdown", - "id": "3c1fbc71", + "id": "f0a3c519", "metadata": {}, "source": [ "Inspecting the output above, we see that when setting up the\n", @@ -5474,7 +5474,7 @@ { "cell_type": "code", "execution_count": 65, - "id": "efdbeda1", + "id": "2dc63d85", "metadata": {}, "outputs": [], "source": [ @@ -5483,7 +5483,7 @@ }, { "cell_type": "markdown", - "id": "38620865", + "id": "15ec1321", "metadata": {}, "source": [ "Let’s look at the predicted probabilities for each of the top 3 choices. First we compute\n", @@ -5495,7 +5495,7 @@ { "cell_type": "code", "execution_count": 66, - "id": "82ceab1c", + "id": "711d5ba7", "metadata": {}, "outputs": [], "source": [ @@ -5505,7 +5505,7 @@ }, { "cell_type": "markdown", - "id": "0e3ae755", + "id": "3b514c1e", "metadata": {}, "source": [ "In order to see the class labels, we must download the index file associated with `imagenet`. {This is avalable from the book website and [s3.amazonaws.com/deep-learning-models/image-models/imagenet_class_index.json](https://s3.amazonaws.com/deep-learning-models/image-models/imagenet_class_index.json).}" @@ -5514,7 +5514,7 @@ { "cell_type": "code", "execution_count": 67, - "id": "921ee168", + "id": "b22f70d8", "metadata": {}, "outputs": [], "source": [ @@ -5528,7 +5528,7 @@ }, { "cell_type": "markdown", - "id": "9fdd7587", + "id": "a5812782", "metadata": {}, "source": [ "We’ll now construct a data frame for each image file\n", @@ -5539,7 +5539,7 @@ { "cell_type": "code", "execution_count": 68, - "id": "e7770017", + "id": "b19c6bd1", "metadata": { "lines_to_next_cell": 2 }, @@ -5592,7 +5592,7 @@ }, { "cell_type": "markdown", - "id": "12862208", + "id": "cd6bd40b", "metadata": {}, "source": [ "We see that the model\n", @@ -5605,7 +5605,7 @@ { "cell_type": "code", "execution_count": 69, - "id": "af2f9856", + "id": "ba80b615", "metadata": { "lines_to_next_cell": 2 }, @@ -5622,7 +5622,7 @@ }, { "cell_type": "markdown", - "id": "d9e8d59c", + "id": "2e6eafaf", "metadata": {}, "source": [ "## IMDB Document Classification\n", @@ -5649,7 +5649,7 @@ { "cell_type": "code", "execution_count": 70, - "id": "afd98123", + "id": "ba6d2d2c", "metadata": { "lines_to_next_cell": 0 }, @@ -5676,7 +5676,7 @@ }, { "cell_type": "markdown", - "id": "28a01855", + "id": "ebeeb069", "metadata": {}, "source": [ "The datasets `imdb_seq_train` and `imdb_seq_test` are\n", @@ -5694,7 +5694,7 @@ { "cell_type": "code", "execution_count": 71, - "id": "5981eb05", + "id": "93bda908", "metadata": {}, "outputs": [ { @@ -5715,7 +5715,7 @@ }, { "cell_type": "markdown", - "id": "b579cb29", + "id": "6de86e76", "metadata": {}, "source": [ "For our first model, we have created a binary feature for each\n", @@ -5728,7 +5728,7 @@ { "cell_type": "code", "execution_count": 72, - "id": "f08024ba", + "id": "40943b7d", "metadata": { "lines_to_next_cell": 0 }, @@ -5746,7 +5746,7 @@ }, { "cell_type": "markdown", - "id": "c070a319", + "id": "9328d75c", "metadata": {}, "source": [ "We’ll use a two-layer model for our first model." @@ -5755,7 +5755,7 @@ { "cell_type": "code", "execution_count": 73, - "id": "7fd34906", + "id": "2117fd9f", "metadata": { "lines_to_next_cell": 0 }, @@ -5783,7 +5783,7 @@ }, { "cell_type": "markdown", - "id": "fcc2a8af", + "id": "845b4d8e", "metadata": {}, "source": [ "We now instantiate our model and look at a summary." @@ -5792,7 +5792,7 @@ { "cell_type": "code", "execution_count": 74, - "id": "56f74fdb", + "id": "66d0b710", "metadata": {}, "outputs": [ { @@ -5836,7 +5836,7 @@ }, { "cell_type": "markdown", - "id": "a32aca43", + "id": "c8bdad40", "metadata": {}, "source": [ "We’ll again use\n", @@ -5854,7 +5854,7 @@ { "cell_type": "code", "execution_count": 75, - "id": "3da7e0bc", + "id": "9df8b4cf", "metadata": {}, "outputs": [], "source": [ @@ -5866,7 +5866,7 @@ }, { "cell_type": "markdown", - "id": "940c8342", + "id": "95cc3b4f", "metadata": {}, "source": [ "Having loaded the datasets into a data module\n", @@ -5877,7 +5877,7 @@ { "cell_type": "code", "execution_count": 76, - "id": "3b6de185", + "id": "73684c66", "metadata": {}, "outputs": [ { @@ -5925,7 +5925,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "57e25e1e102745c18849507d8fe93fe3", + "model_id": "253cf3e077d845569cdc459ef74902b6", "version_major": 2, "version_minor": 0 }, @@ -6376,7 +6376,7 @@ }, { "cell_type": "markdown", - "id": "5985c44a", + "id": "f2e03c88", "metadata": {}, "source": [ "Evaluating the test error yields roughly 86% accuracy." @@ -6385,7 +6385,7 @@ { "cell_type": "code", "execution_count": 77, - "id": "97f86a32", + "id": "01c6e5ff", "metadata": { "lines_to_next_cell": 2 }, @@ -6393,7 +6393,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "57a8b619aaf049b4b06550a47d5e3611", + "model_id": "f2b40a42021f4a9183c3d7d2d545e83b", "version_major": 2, "version_minor": 0 }, @@ -6447,7 +6447,7 @@ }, { "cell_type": "markdown", - "id": "3d677b24", + "id": "c1976042", "metadata": {}, "source": [ "### Comparison to Lasso\n", @@ -6460,7 +6460,7 @@ { "cell_type": "code", "execution_count": 78, - "id": "e36e1542", + "id": "4d5b9d1d", "metadata": {}, "outputs": [], "source": [ @@ -6473,7 +6473,7 @@ }, { "cell_type": "markdown", - "id": "8216f2e7", + "id": "b78eb64e", "metadata": {}, "source": [ "Similar to what we did in\n", @@ -6484,7 +6484,7 @@ { "cell_type": "code", "execution_count": 79, - "id": "ee6d6859", + "id": "e2a88e57", "metadata": { "lines_to_next_cell": 0 }, @@ -6497,7 +6497,7 @@ }, { "cell_type": "markdown", - "id": "cf9b703f", + "id": "81380bee", "metadata": {}, "source": [ "With `LogisticRegression()` the regularization parameter\n", @@ -6509,7 +6509,7 @@ { "cell_type": "code", "execution_count": 80, - "id": "35a6e3c2", + "id": "9a3cf7a3", "metadata": { "lines_to_next_cell": 0 }, @@ -6524,7 +6524,7 @@ }, { "cell_type": "markdown", - "id": "49cec308", + "id": "9ee15d44", "metadata": {}, "source": [ "The path of 50 values takes approximately 40 seconds to run." @@ -6533,7 +6533,7 @@ { "cell_type": "code", "execution_count": 81, - "id": "a8943a6a", + "id": "b46f02c2", "metadata": {}, "outputs": [], "source": [ @@ -6549,7 +6549,7 @@ }, { "cell_type": "markdown", - "id": "4f20738d", + "id": "eb3e3871", "metadata": {}, "source": [ "The coefficient and intercepts have an extraneous dimension which can be removed\n", @@ -6559,7 +6559,7 @@ { "cell_type": "code", "execution_count": 82, - "id": "08268ae5", + "id": "e5fb6afa", "metadata": { "lines_to_next_cell": 0 }, @@ -6571,7 +6571,7 @@ }, { "cell_type": "markdown", - "id": "94991ca8", + "id": "f66fa37c", "metadata": {}, "source": [ "We’ll now make a plot to compare our neural network results with the\n", @@ -6581,7 +6581,7 @@ { "cell_type": "code", "execution_count": 83, - "id": "e98f4506", + "id": "cad28f1a", "metadata": { "lines_to_next_cell": 0 }, @@ -6613,7 +6613,7 @@ }, { "cell_type": "markdown", - "id": "aac5c38c", + "id": "c58ff7cb", "metadata": {}, "source": [ "Notice the use of `%%capture`, which suppresses the displaying of the partially completed figure. This is useful\n", @@ -6624,7 +6624,7 @@ { "cell_type": "code", "execution_count": 84, - "id": "6925d53a", + "id": "a66ecdd8", "metadata": { "lines_to_next_cell": 0 }, @@ -6660,7 +6660,7 @@ }, { "cell_type": "markdown", - "id": "2a8b7736", + "id": "fa1e2550", "metadata": {}, "source": [ "From the graphs we see that the accuracy of the lasso logistic regression peaks at about $0.88$, as it does for the neural network.\n", @@ -6671,7 +6671,7 @@ { "cell_type": "code", "execution_count": 85, - "id": "6d1f7885", + "id": "62440c1c", "metadata": { "lines_to_next_cell": 2 }, @@ -6687,7 +6687,7 @@ }, { "cell_type": "markdown", - "id": "4f79c23a", + "id": "fe67520f", "metadata": {}, "source": [ "## Recurrent Neural Networks\n", @@ -6697,7 +6697,7 @@ }, { "cell_type": "markdown", - "id": "3d376496", + "id": "a9bcdd2a", "metadata": {}, "source": [ "### Sequential Models for Document Classification\n", @@ -6717,7 +6717,7 @@ { "cell_type": "code", "execution_count": 86, - "id": "b5c2b72c", + "id": "c73d6e28", "metadata": {}, "outputs": [], "source": [ @@ -6731,7 +6731,7 @@ }, { "cell_type": "markdown", - "id": "4d1b3ef1", + "id": "1edd3143", "metadata": {}, "source": [ "The first layer of the RNN is an embedding layer of size 32, which will be\n", @@ -6748,7 +6748,7 @@ }, { "cell_type": "markdown", - "id": "fe55c7fa", + "id": "b73e08ab", "metadata": {}, "source": [ "The second layer is an LSTM with 32 units, and the output\n", @@ -6760,7 +6760,7 @@ { "cell_type": "code", "execution_count": 87, - "id": "8985cdb1", + "id": "cc9bbd00", "metadata": { "lines_to_next_cell": 0 }, @@ -6781,7 +6781,7 @@ }, { "cell_type": "markdown", - "id": "78fc988d", + "id": "5e9f28dd", "metadata": {}, "source": [ "We instantiate and take a look at the summary of the model, using the\n", @@ -6791,7 +6791,7 @@ { "cell_type": "code", "execution_count": 88, - "id": "79184187", + "id": "5c9ffb46", "metadata": {}, "outputs": [ { @@ -6833,7 +6833,7 @@ }, { "cell_type": "markdown", - "id": "d5b2c85e", + "id": "5087ff10", "metadata": {}, "source": [ "The 10,003 is suppressed in the summary, but we see it in the\n", @@ -6843,7 +6843,7 @@ { "cell_type": "code", "execution_count": 89, - "id": "29036a47", + "id": "a2d6ddfd", "metadata": {}, "outputs": [], "source": [ @@ -6854,7 +6854,7 @@ { "cell_type": "code", "execution_count": 90, - "id": "0a31576a", + "id": "1d76f970", "metadata": { "lines_to_next_cell": 0 }, @@ -6896,7 +6896,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4abe857cc251478b8855f53164fa5b45", + "model_id": "e24a4171456b412db47d6577cb336c37", "version_major": 2, "version_minor": 0 }, @@ -7206,7 +7206,7 @@ }, { "cell_type": "markdown", - "id": "a20a2113", + "id": "1cbf1b42", "metadata": {}, "source": [ "The rest is now similar to other networks we have fit. We\n", @@ -7216,13 +7216,13 @@ { "cell_type": "code", "execution_count": 91, - "id": "b2602a79", + "id": "d8a60d35", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1648bfd17bc04050b412c36afb32e092", + "model_id": "4e512ef8a7d348eea7f423a9ed96c86e", "version_major": 2, "version_minor": 0 }, @@ -7240,8 +7240,8 @@ "┃ Runningstage.testing ┃\n", "┃ metric DataLoader 0 ┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", - "│ test_accuracy 0.8388800024986267 │\n", - "│ test_loss 0.8145671486854553 │\n", + "│ test_accuracy 0.8480799794197083 │\n", + "│ test_loss 0.7677657604217529 │\n", "└───────────────────────────┴───────────────────────────┘\n", "\n" ], @@ -7250,8 +7250,8 @@ "┃\u001b[1m \u001b[0m\u001b[1m Runningstage.testing \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m┃\n", "┃\u001b[1m \u001b[0m\u001b[1m metric \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m DataLoader 0 \u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", - "│\u001b[36m \u001b[0m\u001b[36m test_accuracy \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.8388800024986267 \u001b[0m\u001b[35m \u001b[0m│\n", - "│\u001b[36m \u001b[0m\u001b[36m test_loss \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.8145671486854553 \u001b[0m\u001b[35m \u001b[0m│\n", + "│\u001b[36m \u001b[0m\u001b[36m test_accuracy \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.8480799794197083 \u001b[0m\u001b[35m \u001b[0m│\n", + "│\u001b[36m \u001b[0m\u001b[36m test_loss \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.7677657604217529 \u001b[0m\u001b[35m \u001b[0m│\n", "└───────────────────────────┴───────────────────────────┘\n" ] }, @@ -7261,7 +7261,7 @@ { "data": { "text/plain": [ - "[{'test_loss': 0.8145671486854553, 'test_accuracy': 0.8388800024986267}]" + "[{'test_loss': 0.7677657604217529, 'test_accuracy': 0.8480799794197083}]" ] }, "execution_count": 91, @@ -7275,7 +7275,7 @@ }, { "cell_type": "markdown", - "id": "54857d49", + "id": "deca21cd", "metadata": {}, "source": [ "We once again show the learning progress, followed by cleanup." @@ -7284,7 +7284,7 @@ { "cell_type": "code", "execution_count": 92, - "id": "32c3e3da", + "id": "65d7276c", "metadata": { "lines_to_next_cell": 2 }, @@ -7301,7 +7301,7 @@ }, { "data": { - "image/png": "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CxQREaFXXnlFN910k84//3yNGjXqnMevqalRamqqoqKi9P7776u8vNyj/0idLl26aO3aterdu7f27NmjOXPmqEuXLvr1r3+tqVOn6uOPP9aWLVv0+uuvS5IiG3gfKisrlZKSoqSkJH3wwQc6dOiQbrvtNs2bN88jZOXl5SkmJkZ5eXnav3+/pk6dqmHDhmnOnDnnfD3wrYKCggavytVxuVwqKipSQUEBw2yBNo4rIa3ELbfcoi+++EJvvvmme9uaNWs0ZcoU9e3bV/fcc4+GDRum/v37684779S4ceP04osvNunYr7/+uj799FM9++yzSkhI0JVXXqlly5bV22/RokW6/PLLFR8frwkTJuiee+5xP0fHjh3VuXNntWvXTtHR0YqOjlbHjh3rHWPdunU6ceKEnn32WV1yySW66qqr9NRTT+m5555TWVmZe79u3brpqaee0kUXXaSf/vSn+slPfqLc3Fxv3zb4gC9XuwXQunAl5FzCw2uvSDTFW29J48efe79XX5WuvLJpz91EF110kS6//HI988wzGj16tPbv36+CggItXbpUTqdTy5Yt04svvqji4mJVV1erqqqqyX0+9u7dq7i4OPXu3du9LSkpqd5+GzZs0BNPPKEvvvhCx44d0w8//OD1Akd79+5VQkKCOp12BeiKK65QTU2N9u3bp6ioKEnSxRdf7DFDZkxMjPbs2ePVc8E3fLnaLYDWhSsh52Kz1TaJNOV27bWSw1H7mMaOFRdXu19TjtfYcRpx66236qWXXtLRo0e1Zs0anX/++fqv//ovPfroo8rKytKCBQuUl5enXbt2KSUlRdXV1Ra8QbW2bdumGTNmaPz48fr73/+uDz/8UPfdd5+lz3G69u3be9y32WyqqanxyXPBO8nJyXI4HO5mwTPZbDbFxcUpOTnZz5UBCDSEECvZ7VJWVu3fz/wPuO5+Zmbtfj5w/fXXKyQkROvWrdOzzz6rW265RTabTe+8844mTpyoG2+8UQkJCerfv78+++yzJh930KBBKioq8rh8/t5773ns8+6776pv37667777NGLECA0YMEAHDhzw2Cc0NPScnREHDRqk3bt3q7Ky0r3tnXfeUUhIiAYOHNjkmmFO3Wq3kuoFEatWuwXQOhBCrJaaKmVnS7GxntsdjtrtFqzy2ZjOnTtr6tSpWrhwoUpKSnTzzTdLkgYMGKCtW7fq3Xff1d69e/WLX/zCo3/FuYwdO1YXXnihZs2apd27d6ugoED33Xefxz4DBgzQwYMH9cILL+iLL77QE088oU2bNnnsEx8fr8LCQu3atUuHDx9WVVVVveeaMWOGOnTooFmzZunjjz9WXl6e7rzzTt10003uphgEvrrVbmPP+B44HA5lZ2dbstotgOBHCPGF1FTpq6+kvDxp3braPwsLfRpA6tx66636z3/+o5SUFHcfjkWLFumyyy5TSkqKRo8erejoaE2aNKnJxwwJCdGmTZv0/fffa9SoUbrtttv08MMPe+zzs5/9THfffbfmzZunYcOG6d1339XixYs99pkyZYrGjRunMWPG6LzzzmtwmHB4eLhee+01fffddxo5cqTS0tJ09dVX66mnnvL+zYBRqamp+uqrr5SXl6d169YpLy9PhYWFBBAAbjZXQ4P5W7GKigpFRkaqvLy8XqfJEydOqLCwUP369VOHDh0MVQhf4LMFgJY72zm0ObgSAgAAjCCEAAAAIwghAADACEIIAAAwghlTG9DG+uq2Ca3lM3U6nSooKFBJSYliYmKUnJzMfBsAghYh5DR1s3AeP368wXVNELyOHz8uqf5Mq8EkJydH6enpHovDORwOZWVltXjYK+EGgAmEkNPY7XZ17dpVhw4dklQ7Z0VjU08jOLhcLh0/flyHDh1S165dg/bEmpOTo7S0tHpXdIqLi5WWltaiCcB8GW4A4GyYJ+QMLpdLpaWlOnLkiP+Lg8907dpV0dHRQRkqnU6n4uPjPULC6Ww2mxwOhwoLC70OWY2Fm7r3idlNAZzO6nlCCCGNcDqdOnnypB8rg6+0b98+aK+ASFJ+fr7GjBlzzv3y8vI0evToJh/Xl+EGQOtkdQihOaYRdrud/3gREE5fONCK/eoUFBQ0GkCk2quCRUVFKigo8CrcAEBTMUQXCHAxMTGW7lfHV+EGAJqKEAIEuOTkZDkcjkb7s9hsNsXFxSk5Odmr4/oq3ABAUxFCgABnt9uVlZUlSfWCSN39zMxMr5sPfRVuAKCpCCFAEEhNTVV2drZiY2M9tjscjmaPYPFVuAGApmJ0DBBEfDGpWEPzhMTFxSkzM5PhuQA8MES3hQghQH3MmAqgKRiiC8BydrudYbgA/I4+IQAAwAhCCAAAMIIQAgAAjCCEAAAAI+iYCvgAo00A4NwIIYDFGpp3w+FwKCsri3k3AOA0NMcAFsrJyVFaWlq91WmLi4uVlpamnJwcQ5UBQOAhhAAWcTqdSk9PV0Pz/9Vtmz9/vpxOp79LA4CARAgBLFJQUFDvCsjpXC6XioqKVFBQ4MeqACBwEUIAi5SUlFi6HwC0doQQwCIxMTGW7gcArR0hBLBIcnKyHA6HbDZbgz+32WyKi4tTcnKynysDgMBECAEsYrfblZWVJUn1gkjd/czMTOYLAYD/QwhBm+V0OpWfn6/169crPz/fklErqampys7OVmxsrMd2h8Oh7Oxs5gkBgNPYXA2NJ2zFKioqFBkZqfLyckVERJguB4b4ekIxZkwF0BpZfQ4lhKDNqZtQ7Mx/+nVNJlyxAICGWX0OpTkGbQoTigFA4CCEoE1hQjEACByEELQpTCgGAIGDEII2hQnFACBwEELQpjChGAAEDkII2hQmFAOAwEEIQcCzelIxJhQDgMDAPCEIaL6cVIwJxQDAO0xW1kKEkODBpGIAEFha3WRlK1euVHx8vDp06KDExERt37690X1PnjyppUuX6vzzz1eHDh2UkJCgLVu2+LFa+AuTigFA62c0hGzYsEEZGRlasmSJdu7cqYSEBKWkpOjQoUMN7r9o0SL98Y9/1JNPPqlPPvlEv/zlLzV58mR9+OGHfq4cvsakYgDQ+hkNIStWrNCcOXM0e/ZsDR48WKtWrVJ4eLieeeaZBvd/7rnndO+992r8+PHq37+/7rjjDo0fP16PP/64nyuHrzGpGAC0fsZCSHV1tXbs2KGxY8eeKiYkRGPHjtW2bdsafExVVZU6dOjgsa1jx456++23G32eqqoqVVRUeNwQ+JhUDABaP2Mh5PDhw3I6nYqKivLYHhUVpdLS0gYfk5KSohUrVujzzz9XTU2Ntm7dqpycnLP+Nrx8+XJFRka6b3FxcZa+DvgGk4oBQOtnvGOqN7KysjRgwABddNFFCg0N1bx58zR79myFhDT+MhYuXKjy8nL3raioyI8Vo7mYVAwAWj9jIaRnz56y2+0qKyvz2F5WVqbo6OgGH3Peeedp8+bNqqys1IEDB/Tpp5+qc+fO6t+/f6PPExYWpoiICI8bggOTigFA62YshISGhmr48OHKzc11b6upqVFubq6SkpLO+tgOHTooNjZWP/zwg1566SVNnDjR1+XCkNTUVH311VfKy8vTunXrlJeXp8LCQgIIALQC7Uw+eUZGhmbNmqURI0Zo1KhRyszMVGVlpWbPni1JmjlzpmJjY7V8+XJJ0vvvv6/i4mINGzZMxcXFeuCBB1RTU6Nf//rXJl8GfMxut2v06NGmywAAWMxoCJk6daq+/fZb3X///SotLdWwYcO0ZcsWd2fVgwcPevT3OHHihBYtWqQvv/xSnTt31vjx4/Xcc8+pa9euhl4BAABoLqZtBwAATdLqpm0HAABtEyEEAAAYYbRPCFoXp9OpgoIClZSUKCYmRsnJyczjAQBoFCEElsjJyVF6errHonMOh0NZWVkMpwUANIjmGLRYTk6O0tLS6q16W1xcrLS0NOXk5BiqDAAQyAghaBGn06n09HQ1NMiqbtv8+fPldDr9XRoAIMARQtAiBQUF9a6AnM7lcqmoqEgFBQV+rAoAEAwIIWiRs61g3Jz9AABtByEELRITE2PpfgCAtoMQghZJTk6Ww+GQzWZr8Oc2m01xcXFKTk72c2UAgEBHCEGL2O12ZWVlSVK9IFJ3PzMzk/lCAAD1EELQYqmpqcrOzlZsbKzHdofDoezsbOYJAQA0iAXsYBlmTAWA1s3qcygzpsIydrtdo0ePNl0GACBI0BwDAACMIIQAAAAjCCEAAMAIQggAADCCEAIAAIwghAAAACMIIQAAwAhCCAAAMIIQAgAAjCCEAAAAIwghAADACEIIAAAwghACAACMIIQAAAAjCCEAAMAIQggAADCCEAIAAIwghAAAACMIIQAAwIh2pguA/zmdThUUFKikpEQxMTFKTk6W3W43XRYAoI0hhLQxOTk5Sk9P19dff+3e5nA4lJWVpdTUVIOVAQDaGppj2pCcnBylpaV5BBBJKi4uVlpamnJycgxVBgBoi2wul8tlugh/qqioUGRkpMrLyxUREWG6HL9xOp2Kj4+vF0Dq2Gw2ORwOFRYW0jSDwOd0SgUFUkmJFBMjJSdL/LsFfM7qcyhXQtqIgoKCRgOIJLlcLhUVFamgoMCPVQHNkJMjxcdLY8ZI06fX/hkfX7s9kDmdUn6+tH597Z9Op+mKAOMIIW1ESUmJpfsBRuTkSGlp0pmBuri4dnugBpFgDU6AjxFC2oiYmBhL94Mhbfm3aadTSk+XGmpBrts2f37gvSfBGpwAP6BPSBtR1yekuLhYDX3k9AkJAjk5tSfh009mDoeUlSUF6sgmK/tu5OfXXkE4l7w8afTo5j2H1ZzO2isejTWF2my1n2FhIX1aYB0f9pmiTwiaxW63KysrS1Jt4Dhd3f3MzEwCSKAKxt+mrW6CaGpTYSA1KRYUNB5ApNorOEVFtfsBVgiypj9CSBuSmpqq7OxsxcbGemx3OBzKzs5mnpBAFYzNEL4ITU1tKgykJsVgDE6oL1iaQYPwlxWaY9ogZkwNMsHWDOGrJoi64xYXNxzIArFpI9g+O9QXLM2gfmr6s/ocyoypbZDdbtdo/sMLHsH227Q3TRDe/Du022v/409Lq/0P9fQgUtfEmJkZOAFEqm2LdzjOHZySk/1fmynBNMdL3ZWFMz+7uisL2dktCyJWvhe++t75GM0xQKALtmYIX4am1NTa//jPaFKUw9HyE4Iv1AUn6VRQqhOowcmXgqm/gq+bQekzJYkQAgS+ut+mzzyJ1bHZpLi4wPlt2tehKTVV+uqr2iaMdetq/ywsDLwAUifYgpOvBFt/BV92KqbPlBt9QoBgUPefltRwM0QgncyCse+GPwRTM4TVgnGo8vr1tVcozmXdOmnatKYfN8j7TDFEF21PsPRM9yVf/zZt5Xsc7E0Qvvr3ZrfXtsVPm1b7Z6C+fl8IxqHKvrqy4Kv3Iki/d4QQBLZgakP2NV81Q/jiPQ7WJgj+vflGMPZX8FUzKH2mPNAcg8DVWM/0QGyCCFa+fo+DqQmCf2++E6xDlX3RDOqP9yKIZkwlhCAwBWMbcrDhPT6F98K3grmfUEPzhMTF1TZtNCeUBvN7IfqEoK0IxjbkYMN7fArvhW8FaX8FSdY3gwbze+EDhBAEpmBsQw42vMen8F74XjB1rj6T1Z2Kg7Dvhq8wYyoCU5COeQ8qvMen8F74R2qqNHGi9f0VgmVq9dP56r0IMvQJQWAK8nbToMB7fArvRfCiQ7Ff0ScEbQPtpr7He3wK70VwCsYVpuGBEILARbup7/Een8J7EXzoUBz06BOCwEa7qe/xHp/CexFc6FAc9AghCHx1PdPhO7zHp/BeBA86FAc9mmMAAMEp2FaYRj2EEFiHheYA+BMdioMeIQTWYOEvwIy2Hv7pUBzUmCcELcc4/fqCaeE2BK9gnKTLV/jO+QUL2LUQIcRiLPxVHycG+APhHwYwWRlazsrLt4zT91R3YjjzPSkurt1O8xSswCRdaCUIIW2N1X03GKd/CicG+AvhH60EIaQt8cVv6YzTP4UTA/yF8I9WghDSVvjqt3TG6Z/CiQH+QvhHK0EIaSt89Vs64/RP4cQAfyH8o5UghLQVvvwtnXH6tTgxwF8I/2glCCFtha9/S09Nlb76SsrLk9atq/2zsLDtBBCJEwP8i/CPVoB5QtqKuvk8iosb7hfSFufz8JWG5gmJi6sNIJwYYDUm6YIfMVlZC7XZECKdGh0jeQYRJjeyHicGAK2Q1efQdhbUhGBRd/m2odk8+S3dWiwHDwDnRAhpa1JTpYkT+S0dAGAcIaQt4rd0AEAAYHQMAAAwgishaLvoPAoARhFC0DY1NIzW4aid54MOugDgFzTHoO3xxUJ+AACvEULQtvhqIT8AgNeMh5CVK1cqPj5eHTp0UGJiorZv337W/TMzMzVw4EB17NhRcXFxuvvuu3XixAk/VYug56uF/AAAXjMaQjZs2KCMjAwtWbJEO3fuVEJCglJSUnTo0KEG91+3bp1+85vfaMmSJdq7d69Wr16tDRs26N577/Vz5QhavlzIDwDgFaMhZMWKFZozZ45mz56twYMHa9WqVQoPD9czzzzT4P7vvvuurrjiCk2fPl3x8fG69tprNW3atHNePQHcfL2QHwCgyYyFkOrqau3YsUNjx449VUxIiMaOHatt27Y1+JjLL79cO3bscIeOL7/8Uq+++qrGjx/f6PNUVVWpoqLC44Y2LDm5dhTMmavc1rHZahebS072b10A0AYZCyGHDx+W0+lUVFSUx/aoqCiVlpY2+Jjp06dr6dKl+vGPf6z27dvr/PPP1+jRo8/aHLN8+XJFRka6b3FxcZa+DgQZu712GK5UP4jU3c/MZL4QAPAD4x1TvZGfn69ly5bpD3/4g3bu3KmcnBy98soreuihhxp9zMKFC1VeXu6+FRUV+bFiBKS6hfxiYz23OxysJAwAfmRssrKePXvKbrerrKzMY3tZWZmio6MbfMzixYt100036bbbbpMkDRkyRJWVlbr99tt13333KSSkfqYKCwtTWFiY9S8AwY2F/ADAOGNXQkJDQzV8+HDl5ua6t9XU1Cg3N1dJSUkNPub48eP1gob9/04arobmfQDOpm4hv2nTav8kgACAXxmdtj0jI0OzZs3SiBEjNGrUKGVmZqqyslKzZ8+WJM2cOVOxsbFavny5JGnChAlasWKFLr30UiUmJmr//v1avHixJkyY4A4jAAALsLYS/MBoCJk6daq+/fZb3X///SotLdWwYcO0ZcsWd2fVgwcPelz5WLRokWw2mxYtWqTi4mKdd955mjBhgh5++GFTLwEAWh/WVoKf2FxtrB2joqJCkZGRKi8vV0REhOlyACCw1K2tdOapoW70GJ232zSrz6FBNToGAOBDrK0EPyOEAABqsbYS/IwQAgCoxdpK8DNCCACgFmsrwc8IIQCAWqytBD8jhAAAarG2EvyMEAIAOIW1leBHRicrAwAEINZWgp8QQgAA9dWtrQT4EM0xAADACK9DSHx8vJYuXaqDBw/6oh6cxul0Kj8/X+vXr1d+fr6czFIIAGhFvA4h8+fPV05Ojvr3769rrrlGL7zwgqqqqnxRW5uWk5Oj+Ph4jRkzRtOnT9eYMWMUHx+vnJwc06UBAGCJZi9gt3PnTq1du1br16+X0+nU9OnTdcstt+iyyy6zukZLBcMCdjk5OUpLS9OZH43t/4bIZWdnK5Ue6gAAP7P6HNriVXRPnjypP/zhD1qwYIFOnjypIUOG6K677tLs2bPdJ81AEughxOl0Kj4+Xl83sn6DzWaTw+FQYWGh7PRUBwD4UcCsonvy5Em9+OKL+tnPfqb/9//+n0aMGKG//OUvmjJliu69917NmDGjxcW1RQUFBY0GEElyuVwqKipSAQtIAQCCnNdDdHfu3Kk1a9Zo/fr1CgkJ0cyZM/X73/9eF110kXufyZMna+TIkZYW2laUNHFhqKbuBwBAoPI6hIwcOVLXXHONnn76aU2aNEnt27evt0+/fv10ww03WFJgWxPTxIWhmrofAACByus+IQcOHFDfvn19VY/PBUufkOLi4nodUyX6hAAAzDHeJ+TQoUN6//33621///339c9//rPFBbV1drtdWf+3gNSZHXvr7mdmZhJAAABBz+sQMnfuXBUVFdXbXlxcrLlz51pSVFuXmpqq7OxsxZ6xgJTD4WB4LgCg1fC6OaZz58766KOP1L9/f4/thYWFGjp0qI4ePWppgVYL9OaY0zmdThUUFKikpEQxMTFKTk7mCggAwBirz6Fed0wNCwtTWVlZvRBSUlKidu1YD89Kdrtdo1lACgDQSnndHHPttddq4cKFKi8vd287cuSI7r33Xl1zzTWWFgcAAFovry9dPPbYY7ryyivVt29fXXrppZKkXbt2KSoqSs8995zlBQIAgNbJ6xASGxurjz76SM8//7x2796tjh07avbs2Zo2bVqDc4agBZxOqaBAKimRYmKk5GSJPiEAgFaiWZ04OnXqpNtvv93qWnC6nBwpPV06fQp3h0PKypIYHQMAaAWa3ZP0k08+0cGDB1VdXe2x/Wc/+1mLi2rzcnKktDTpzIFLxcW127OzCSIAgKDn9RDdL7/8UpMnT9aePXtks9ncs3rWTaTldDqtr9JCAT9E1+mU4uM9r4CczmarvSJSWEjTDADAr4zPmJqenq5+/frp0KFDCg8P17/+9S+99dZbGjFihPLz81tcUJtXUNB4AJFqr44UFdXuBwBAEPO6OWbbtm1644031LNnT4WEhCgkJEQ//vGPtXz5ct1111368MMPfVFn29HU1XFZRRcAEOS8vhLidDrVpUsXSVLPnj31zTffSJL69u2rffv2WVtdW9TU1XFZRRcAEOS8vhJyySWXaPfu3erXr58SExP1yCOPKDQ0VH/605/qzaKKZkhOru3zUVxcv2OqdKpPSHKy/2sDAMBCXl8JWbRokWpqaiRJS5cuVWFhoZKTk/Xqq6/qiSeesLzANsdurx2GK9UGjtPV3c/MpFMqACDoeT06piHfffedunXrVm/p+UAU8KNj6jQ0T0hcXG0AYXguAMAAq8+hXoWQkydPqmPHjtq1a5cuueSSFj+5CUETQiRmTAUABBSjq+i2b99effr0Cfi5QFoNu11iFV0AQCvldZ+Q++67T/fee6++++47X9QDAADaCK9Hxzz11FPav3+/evfurb59+6pTp04eP9+5c6dlxQEAgNbL6xAyadIkH5QBAADaGktGxwSToOqYCgBAADG+dgwAAIAVvG6OCQkJOet8IIycAQAATeF1CNm0aZPH/ZMnT+rDDz/UX//6Vz344IOWFQYAAFo3y/qErFu3Ths2bNDf/vY3Kw7nM5b3CWFCMQBAGxGwfUJ+9KMfKTc316rDBYecHCk+XhozRpo+vfbP+Pja7QAA4KwsCSHff/+9nnjiCcXGxlpxuOCQkyOlpXmu7SLVrn6blkYQAQDgHLzuE3LmQnUul0tHjx5VeHi4/vu//9vS4gKW01m7uFxDLVkuV+1qt/PnSxMn0jQDAEAjvA4hv//97z1CSEhIiM477zwlJiaqW7dulhYXsAoK6l8BOZ3LJRUV1e7H2i8AADTI6xBy8803+6CMIFNSYu1+AAC0QV73CVmzZo02btxYb/vGjRv117/+1ZKiAl5MjLX7AQDQBnkdQpYvX66ePXvW296rVy8tW7bMkqICXnKy5HDU9v1oiM0mxcXV7gcAABrkdQg5ePCg+vXrV2973759dfDgQUuKCnh2u5SVVfv3M4NI3f3MTDqlAgBwFl6HkF69eumjjz6qt3337t3q0aOHJUUFhdRUKTtbOnNYssNRuz011UxdAAAECa87pk6bNk133XWXunTpoiuvvFKS9Oabbyo9PV033HCD5QUGtNTU2mG4zJgKAIDXvA4hDz30kL766itdffXVateu9uE1NTWaOXNm2+kTcjq7nWG4AAA0Q7PXjvn888+1a9cudezYUUOGDFHfvn2trs0nLF87BgCANsLqc6jXV0LqDBgwQAMGDGhxAQAAoG3yumPqlClT9Lvf/a7e9kceeUQ///nPLSkKAAC0fl6HkLfeekvjx4+vt/26667TW2+9ZUlRAACg9fM6hBw7dkyhoaH1trdv314VFRWWFAUAAFo/r0PIkCFDtGHDhnrbX3jhBQ0ePNiSogAAQOvndcfUxYsXKzU1VV988YWuuuoqSVJubq7WrVun7OxsywsEAACtk9chZMKECdq8ebOWLVum7OxsdezYUQkJCXrjjTfUvXt3X9QIAABaoWbPE1KnoqJC69ev1+rVq7Vjxw45nU6ravMJ5gkBAKB5rD6Het0npM5bb72lWbNmqXfv3nr88cd11VVX6b333mtxQQAAoG3wqjmmtLRUa9eu1erVq1VRUaHrr79eVVVV2rx5M51SAQCAV5p8JWTChAkaOHCgPvroI2VmZuqbb77Rk08+6cvaAABAK9bkKyH/+Mc/dNddd+mOO+5gunYAANBiTb4S8vbbb+vo0aMaPny4EhMT9dRTT+nw4cO+rA0AALRiTQ4hP/rRj/TnP/9ZJSUl+sUvfqEXXnhBvXv3Vk1NjbZu3aqjR4/6sk4AANDKtGiI7r59+7R69Wo999xzOnLkiK655hq9/PLLVtZnOYboAgDQPAEzRFeSBg4cqEceeURff/211q9f3+JiAABA29HiycqCDVdCAABonoC6EgIAANBchBAAAGAEIQQAABhBCAEAAEYQQgAAgBGEEAAAYAQhBAAAGEEIAQAARgRECFm5cqXi4+PVoUMHJSYmavv27Y3uO3r0aNlstnq3n/zkJ36sGAAAtJTxELJhwwZlZGRoyZIl2rlzpxISEpSSkqJDhw41uH9OTo5KSkrct48//lh2u10///nP/Vw5AABoCeMhZMWKFZozZ45mz56twYMHa9WqVQoPD9czzzzT4P7du3dXdHS0+7Z161aFh4cTQgAACDJGQ0h1dbV27NihsWPHureFhIRo7Nix2rZtW5OOsXr1at1www3q1KlTgz+vqqpSRUWFxw0AAJhnNIQcPnxYTqdTUVFRHtujoqJUWlp6zsdv375dH3/8sW677bZG91m+fLkiIyPdt7i4uBbXDQAAWs54c0xLrF69WkOGDNGoUaMa3WfhwoUqLy9334qKivxYIQAAaEw7k0/es2dP2e12lZWVeWwvKytTdHT0WR9bWVmpF154QUuXLj3rfmFhYQoLC2txrQAAwFpGr4SEhoZq+PDhys3NdW+rqalRbm6ukpKSzvrYjRs3qqqqSjfeeKOvywQAAD5g9EqIJGVkZGjWrFkaMWKERo0apczMTFVWVmr27NmSpJkzZyo2NlbLly/3eNzq1as1adIk9ejRw0TZAACghYyHkKlTp+rbb7/V/fffr9LSUg0bNkxbtmxxd1Y9ePCgQkI8L9js27dPb7/9tv73f//XRMkAAMACNpfL5TJdhD9VVFQoMjJS5eXlioiIMF0OAABBw+pzaFCPjgEAAMGLEAIAAIwghAAAACMIIQAAwAhCCAAAMIIQAgAAjCCEAAAAIwghAADACEIIAAAwghACAACMIIQAAAAjCCEAAMAIQggAADCCEAIAAIxoZ7qAYOd0OlVQUKCSkhLFxMQoOTlZdrvddFkAAAQ8QkgL5OTkKD09XV9//bV7m8PhUFZWllJTUw1WBgBA4KM5pplycnKUlpbmEUAkqbi4WGlpacrJyTFUGQAAwYEQ0gxOp1Pp6elyuVz1fla3bf78+XI6nf4uDQCAoEEIaYaCgoJ6V0BO53K5VFRUpIKCAj9WBQBAcCGENENJSYml+wEA0BYRQpohJibG0v0AAGiLCCHNkJycLIfDIZvN1uDPbTab4uLilJyc7OfKAAAIHoSQZrDb7crKypKkekGk7n5mZibzhQAAcBaEkGZKTU1Vdna2YmNjPbY7HA5lZ2czTwgAAOdgczU0zrQVq6ioUGRkpMrLyxUREdHi4zFjKgCgrbD6HMqMqS1kt9s1evRo02UAABB0aI4BAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEYQQgAAgBGEEAAAYAQhBAAAGEEIAQAARhBCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEYQQgAAgBGEEAAAYAQhBAAAGEEIAQAARhBCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEYQQgAAgBGEEAAAYAQhBAAAGEEIAQAARhBCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEYQQgAAgBGEEAAAYAQhBAAAGEEIAQAARhBCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEYQQgAAgBGEEAAAYAQhBAAAGGE8hKxcuVLx8fHq0KGDEhMTtX379rPuf+TIEc2dO1cxMTEKCwvThRdeqFdffdVP1QIAAKu0M/nkGzZsUEZGhlatWqXExERlZmYqJSVF+/btU69evertX11drWuuuUa9evVSdna2YmNjdeDAAXXt2tX/xQMAgBaxuVwul6knT0xM1MiRI/XUU09JkmpqahQXF6c777xTv/nNb+rtv2rVKj366KP69NNP1b59+yY9R1VVlaqqqtz3KyoqFBcXp/LyckVERFjzQgAAaAMqKioUGRlp2TnUWHNMdXW1duzYobFjx54qJiREY8eO1bZt2xp8zMsvv6ykpCTNnTtXUVFRuuSSS7Rs2TI5nc5Gn2f58uWKjIx03+Li4ix/LQAAwHvGQsjhw4fldDoVFRXlsT0qKkqlpaUNPubLL79Udna2nE6nXn31VS1evFiPP/64fvvb3zb6PAsXLlR5ebn7VlRUZOnrAAAAzWO0T4i3ampq1KtXL/3pT3+S3W7X8OHDVVxcrEcffVRLlixp8DFhYWEKCwvzc6UAAOBcjIWQnj17ym63q6yszGN7WVmZoqOjG3xMTEyM2rdvL7vd7t42aNAglZaWqrq6WqGhoT6tGQAAWMdYc0xoaKiGDx+u3Nxc97aamhrl5uYqKSmpwcdcccUV2r9/v2pqatzbPvvsM8XExBBAAAAIMkbnCcnIyNCf//xn/fWvf9XevXt1xx13qLKyUrNnz5YkzZw5UwsXLnTvf8cdd+i7775Tenq6PvvsM73yyitatmyZ5s6da+olAACAZjLaJ2Tq1Kn69ttvdf/996u0tFTDhg3Tli1b3J1VDx48qJCQUzkpLi5Or732mu6++24NHTpUsbGxSk9P14IFC0y9BAAA0ExG5wkxweoxzgAAtBWtZp4QAADQthFCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEYQQgAAgBGEEAAAYAQhBAAAGEEIAQAARhBCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEYQQgAAgBGEEAAAYAQhBAAAGEEIAQAARhBCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEYQQgAAgBGEEAAAYAQhBAAAGEEIAQAARhBCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEYQQgAAgBGEEAAAYAQhBAAAGEEIAQAARhBCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEYQQgAAgBGEEAAAYAQhBAAAGEEIAQAARhBCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEYQQgAAgBGEEAAAYAQhBAAAGEEIAQAARhBCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEYERAhZuXKl4uPj1aFDByUmJmr79u2N7rt27VrZbDaPW4cOHfxYLQAAsILxELJhwwZlZGRoyZIl2rlzpxISEpSSkqJDhw41+piIiAiVlJS4bwcOHPBjxQAAwArGQ8iKFSs0Z84czZ49W4MHD9aqVasUHh6uZ555ptHH2Gw2RUdHu29RUVF+rBgAAFihncknr66u1o4dO7Rw4UL3tpCQEI0dO1bbtm1r9HHHjh1T3759VVNTo8suu0zLli3TxRdf3OC+VVVVqqqqct8vLy+XJFVUVFj0KgAAaBvqzp0ul8uS4xkNIYcPH5bT6ax3JSMqKkqffvppg48ZOHCgnnnmGQ0dOlTl5eV67LHHdPnll+tf//qXHA5Hvf2XL1+uBx98sN72uLg4a14EAABtzL///W9FRka2+DhGQ0hzJCUlKSkpyX3/8ssv16BBg/THP/5RDz30UL39Fy5cqIyMDPf9mpoafffdd+rRo4dsNpslNVVUVCguLk5FRUWKiIiw5JjwDz674MVnF7z47IJXeXm5+vTpo+7du1tyPKMhpGfPnrLb7SorK/PYXlZWpujo6CYdo3379rr00ku1f//+Bn8eFhamsLAwj21du3ZtVr3nEhERwRcqSPHZBS8+u+DFZxe8QkKs6VJqtGNqaGiohg8frtzcXPe2mpoa5ebmelztOBun06k9e/YoJibGV2UCAAAfMN4ck5GRoVmzZmnEiBEaNWqUMjMzVVlZqdmzZ0uSZs6cqdjYWC1fvlyStHTpUv3oRz/SBRdcoCNHjujRRx/VgQMHdNttt5l8GQAAwEvGQ8jUqVP17bff6v7771dpaamGDRumLVu2uDurHjx40OOyz3/+8x/NmTNHpaWl6tatm4YPH653331XgwcPNvUSFBYWpiVLltRr9kHg47MLXnx2wYvPLnhZ/dnZXFaNswEAAPCC8cnKAABA20QIAQAARhBCAACAEYQQAABgBCHEAitXrlR8fLw6dOigxMREbd++3XRJOIcHHnhANpvN43bRRReZLgsNeOuttzRhwgT17t1bNptNmzdv9vi5y+XS/fffr5iYGHXs2FFjx47V559/bqZYeDjXZ3fzzTfX+x6OGzfOTLHwsHz5co0cOVJdunRRr169NGnSJO3bt89jnxMnTmju3Lnq0aOHOnfurClTptSbfPRcCCEttGHDBmVkZGjJkiXauXOnEhISlJKSokOHDpkuDedw8cUXq6SkxH17++23TZeEBlRWViohIUErV65s8OePPPKInnjiCa1atUrvv/++OnXqpJSUFJ04ccLPleJM5/rsJGncuHEe38P169f7sUI05s0339TcuXP13nvvaevWrTp58qSuvfZaVVZWuve5++679T//8z/auHGj3nzzTX3zzTdKTU317olcaJFRo0a55s6d677vdDpdvXv3di1fvtxgVTiXJUuWuBISEkyXAS9Jcm3atMl9v6amxhUdHe169NFH3duOHDniCgsLc61fv95AhWjMmZ+dy+VyzZo1yzVx4kQj9cA7hw4dcklyvfnmmy6Xq/Z71r59e9fGjRvd++zdu9clybVt27YmH5crIS1QXV2tHTt2aOzYse5tISEhGjt2rLZt22awMjTF559/rt69e6t///6aMWOGDh48aLokeKmwsFClpaUe38HIyEglJibyHQwS+fn56tWrlwYO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", + "image/png": "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T6SFswghNmto3LP2V4QTE6VO/uCuWbNGDzzwgHbv3u1t69Spk/e/LcuSx+NRu3Znfut79uzpVx2hoaGKiYnx6z5Aa2L3D4iUlBTFx8efce5GSkpKk2u280gIf3os/HnMQJ1IC+cxHHMGlmWpoqKiUZeysjLdddddpx33zMzMVFlZWaP219g5wzExMd5LVFSUXC6X9/qnn36qzp0767XXXtOwYcMUFhamt99+W59//rkmTJig6OhoderUSSNGjNAbb7zhs99Th2NcLpf+93//V5MmTVJERIT69++vl19+2Xv7qcMxK1euVJcuXfT6669r4MCB6tSpk8aOHesTmk6cOKG77rpLXbp0Uffu3TV37lxlZGRo4sSJjXyHAHs4MQzh9NwNuznVY1EbxhrqtXW5XEpISGhWGENgIoScwdGjR9WpU6dGXaKiolRYWNjgvizL0oEDBxQVFdWo/dm5aut9992n//mf/9GuXbs0ePBglZeXa9y4ccrNzdWHH36osWPHavz48d6TBzZk8eLFuu666/TRRx9p3LhxuuGGG3T48OEGtz969Kgef/xxvfDCC9q0aZP27dune+65x3v7r371K/35z3/WihUr9M4776isrEzr16+362kjSNk958rJiZOBdAipUz0WgRbG0IJsOQNNADndyXeOHTtmffLJJ9axY8e8beXl5Y062ZATl/Lycr+f34oVK6yoqCjv9dqTJa1fv/6M973gggusp556ynu9T58+1pNPPum9LslasGBBndfmtdde83msf//7395aJFl79uzx3mfZsmVWdHS093p0dLT12GOPea+fOHHCOuuss6wJEyY09ik3Sn3vLQKTEydtc/JEaLVOnDhh5eXlWatWrbLy8vKafSIxJzh9ErT63ruEhIQ2c8K9YGD3CeyYE3IGERERKi8vb9S2mzZt0rhx48643auvvqof/vCHjXpsuwwfPtznenl5uR588EG98sorKioq0okTJ3Ts2LEz9oQMHjzY+98dO3ZUZGSkDh482OD2EREROvvss73XY2NjvduXlpaqpKREI0eO9N7udrs1bNgwVVdX+/X80DY4NeeqJSZOBsIqlk6vQOrkKqEITISQM3C5XI0+QuTqq69u1CS0q6++usU/dKc+h3vuuUcbN27U448/rnPOOUfh4eFKT09XVVXVaffTvn17n+sul+u0gaG+7et7bYAzcerIDYmJkyerHT6qb4KuHec1CYQwhpbDnBAbBdK45zvvvKObb75ZkyZN0qBBgxQTE6Mvv/yyRWuIiopSdHS0PvjgA2+bx+PRtm3bWrQOBAYn15pg4qSvtLQ0ffnll8rLy9OqVauUl5envXv3tqr5KwgOhBCbBcoktP79+ysnJ0fbt2/Xjh07NHXqVCNDILNmzdKSJUv017/+Vbt371ZmZqb+/e9/c/Zi1OHkkEkg/YBoKaxAipZACHFAIPyKeOKJJ9S1a1ddeumlGj9+vFJTU3XxxRe3eB1z587VlClTNG3aNCUnJ6tTp05KTU3l/C6ooyUW/gqEHxBAMOEEdifhJGfmVVdXa+DAgbruuuv08MMP27Zf3tvA1xInbat9HCZOAvWz+wR2TEyFUV999ZX+/ve/6/LLL1dlZaWefvpp7d27V1OnTjVdGloZp4/cOPlxmDgJtAyGY2BUSEiIVq5cqREjRuiyyy7Tzp079cYbb2jgwIGmS0MrxJAJEFzoCYFRCQkJeuedd0yXAYc4MbTBWhNA8CCEAHCEk2eTZsgECA4MxwCwnRMngwMQfAghAGzl5MngAAQXQggAWzm5simA4EIIAWCrljgZHIDgQAgBYCtOBgegsQghTvF4pPx8afXqmn9b+fj3qFGjNHv2bO/1xMREZWVlnfY+LpdL69evb/Zj27UfNJ3H41F+fr5Wr16t/Pz8Zs3X4GRwABqLEOKEnBwpMVEaPVqaOrXm38TEmnYHjB8/XmPHjq33toKCArlcLn300Ud+7fODDz7Q7bffbkd5Xg8++KCGDh1ap72oqEjXXHONrY+FxsvJyVFiYqJGjx6tqVOnavTo0UpMTGzyESycDA5AYxFC7JaTI6WnS6dOzCssrGl3IIjccsst2rhxY72TAVesWKHhw4dr8ODBfu2zZ8+eioiIsKvE04qJiVFYWFiLPBZ8OXUoLSubAmgMQsiZWJZUUdG4S1mZdNddNfepbz+SlJlZs11j9tfIcwv++Mc/Vs+ePbVy5Uqf9vLycq1du1YTJ07UlClTFBcXp4iICA0aNEirV68+7T5PHY757LPP9MMf/lAdOnTQ+eefr40bN9a5z9y5c3XuuecqIiJC/fr108KFC3X8+HFJ0sqVK7V48WLt2LFDLpdLLpfLW++pwzE7d+7UFVdcofDwcHXv3l233367ysvLvbfffPPNmjhxoh5//HHFxsaqe/fumjFjhvexgpmdwyZOH0obCGeTBmAWK6aeydGjUqdO9uzLsmp6SKKiGrd9ebnUseMZN2vXrp2mTZumlStXav78+d4u77Vr18rj8ejGG2/U2rVrNXfuXEVGRuqVV17RTTfdpLPPPlsjR4484/6rq6uVlpam6Ohovf/++yotLfWZP1Krc+fOWrlypXr37q2dO3fqtttuU+fOnXXvvfdq8uTJ+vjjj7Vhwwa98cYbkqSoel6HiooKpaamKjk5WR988IEOHjyoW2+9VTNnzvQJWXl5eYqNjVVeXp727NmjyZMna+jQobrtttvO+HwCld0rkPpzKG1TVydlZVMAp2W1MaWlpZYkq7S0tM5tx44dsz755BPr2LFj/2ksL7esmvjQ8pfy8kY/r127dlmSrLy8PG9bSkqKdeONN9a7/Y9+9CPrv//7v73XL7/8ciszM9N7vU+fPtaTTz5pWZZlvf7661a7du2swsJC7+2vvfaaJclat25dgzU99thj1rBhw7zXFy1aZA0ZMqTOdifv57nnnrO6du1qlZ/03F955RUrJCTEKi4utizLsjIyMqw+ffpYJ06c8G7z05/+1Jo8eXKDtdT73gaQl156yXK5XJYkn4vL5bJcLpf10ksv+b3PVatW1dlffZdVq1Y58IwABKLTfYc2BcMxZxIRUdMj0ZjLq682bp+vvtq4/fkxJ+O8887TpZdequeff16StGfPHhUUFOiWW26Rx+PRww8/rEGDBqlbt27q1KmTXn/9de3bt69R+961a5cSEhLUu3dvb1tycnKd7dasWaPLLrtMMTEx6tSpkxYsWNDoxzj5sYYMGaKOJ/UAXXbZZaqurtbu3bu9bRdccIHPxMbY2FgdPHjQr8cKFE4Nm3AoLQDTCCFn4nLVDIk05nL11VJ8fM19GtpXQkLNdo3ZX0P7acAtt9yil156Sd9++61WrFihs88+W5dffrkee+wxLV26VHPnzlVeXp62b9+u1NRUVVVV2fAC1di8ebNuuOEGjRs3Tn/729/04Ycfav78+bY+xsnat2/vc93lcqm6utqRxzLNqRVIOZQWgGmEEDu53dL3hybWCRC117OyarZzwHXXXaeQkBCtWrVKf/zjH/Vf//VfcrlceueddzRhwgTdeOONGjJkiPr166d//vOfjd7vwIEDtX//fp8VLt977z2fbd5991316dNH8+fP1/Dhw9W/f3999dVXPtuEhoae8df6wIEDtWPHDlVUVHjb3nnnHYWEhGjAgAGNrjmYOLUCKYfSAjCNEGK3tDQpO1s65dBExcfXtDt4ZECnTp00efJkzZs3T0VFRbr55pslSf3799fGjRv17rvvateuXfrZz36mkpKSRu93zJgxOvfcc5WRkaEdO3aooKBA8+fP99mmf//+2rdvn1588UV9/vnn+s1vfqN169b5bJOYmKi9e/dq+/btOnTokCorK+s81g033KAOHTooIyNDH3/8sfLy8jRr1izddNNNio6O9v9FCQJODptwKC0AkwghTkhLk778UsrLk1atqvl3715HA0itW265Rf/+97+VmprqncOxYMECXXzxxUpNTdWoUaMUExOjiRMnNnqfISEhWrdunY4dO6aRI0fq1ltv1S9/+UufbX7yk5/o7rvv1syZMzV06FC9++67Wrhwoc821157rcaOHavRo0erZ8+e9R4mHBERoddff12HDx/WiBEjlJ6eriuvvFJPP/20/y9GkHB62IRDaQGY4rLqm+0WxMrKyhQVFaXS0lJFRkb63Pbdd99p79696tu3rzp06GCoQjgh0N/b2kXFJPlMUK0NJvRaAGgJp/sObQp6QoAAwLAJgGDEYmVAgEhLS9OECRNUUFCgoqIixcbGKiUlhYmjAAIWIQQIIKxACiCYMBwDAACMIITUo43N1W0TeE8BoPVhOOYktatwHj16VOHh4YargZ2OHj0qqe5Kq07xeDzM3QCAMyCEnMTtdqtLly7ec5BEREQ0uDYDAoNlWTp69KgOHjyoLl26tEgQsPtstwAQrAghp4iJiZGkoD0ZWlvVpUsX73vrpNr1PE4d/iksLFR6ejqH0wLASVisrAEej0fHjx9vwcrglPbt27dID4jH41FiYmKDJ5tzuVyKj4/X3r17GZoBEJDsXqyMnpAGuN1uvijgF3/OdsthtgDA0TGAbZw62y0ABCtCCGATJ892CwDBiBAC2MTps90CQLAhhAA2cbvdWrp0qSTVCSK117OysphrBADfI4SgzfJ4PMrPz9fq1auVn58vj8fT7H1ytlsAaDwO0UWb5PSCYqyYCiAY2f0dSghBm9PQgmK1Qyb0WABA/ez+DmU4Bm2Kx+NRZmZmvSe0q22bPXu2LUMzAIDTI4SgTfFnQTEAgLMIIWhTWFAMAFoPQgjaFBYUA4DWgxCCNoUFxQCg9SCEoE1hQTEAaD0IIWhzWFAMAFoH1glBm8WCYgDgH7u/Q9vZUBPgKKfCgtvt1qhRo5pfIACgSQghaNWcXl4dAGAOc0LQatUur37q4mKFhYVKT09XTk6OocoAAHYghKBVYnl1AAh+hBC0SiyvDgDBjxCCVonl1QEg+BFC0CqxvDoABD9CCFolllcHgOBHCEGrxPLqABD8CCFotVheHQCCG8u2o9VjeXUAaB1Yth1tDsurA0BwYjgGAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhhPIQsW7ZMiYmJ6tChg5KSkrRly5YGtz1+/LgeeughnX322erQoYOGDBmiDRs2tGC1AADALkZDyJo1azRnzhwtWrRI27Zt05AhQ5SamqqDBw/Wu/2CBQv0u9/9Tk899ZQ++eQT3XHHHZo0aZI+/PDDFq4cAAA0l9HFypKSkjRixAg9/fTTkqTq6molJCRo1qxZuu++++ps37t3b82fP18zZszwtl177bUKDw/Xn/70p0Y9JouVOYdFxQAguNn9HWqsJ6Sqqkpbt27VmDFj/lNMSIjGjBmjzZs313ufyspKdejQwactPDxcb7/9doOPU1lZqbKyMp8L7JeTk6PExESNHj1aU6dO1ejRo5WYmKicnBzTpQEAWiljIeTQoUPyeDyKjo72aY+OjlZxcXG990lNTdUTTzyhzz77TNXV1dq4caNycnJUVFTU4OMsWbJEUVFR3ktCQoKtzwM1ASQ9PV0HDhzwaS8sLFR6ejpBBABQL+MTU/2xdOlS9e/fX+edd55CQ0M1c+ZMTZ8+XSEhDT+NefPmqbS01HvZv39/C1Yc/DwejzIzM1XfqF5t2+zZs+XxeFq6NABAK2cshPTo0UNut1slJSU+7SUlJYqJian3Pj179tT69etVUVGhr776Sp9++qk6deqkfv36Nfg4YWFhioyM9LnAPgUFBXV6QE5mWZb279+vgoKCFqwKABAIjIWQ0NBQDRs2TLm5ud626upq5ebmKjk5+bT37dChg+Li4nTixAm99NJLmjBhgtPlogGnGwprynYAgLbD6Fl058yZo4yMDA0fPlwjR45UVlaWKioqNH36dEnStGnTFBcXpyVLlkiS3n//fRUWFmro0KEqLCzUgw8+qOrqat17770mn0abFhsba+t2AIC2w2gImTx5sr755hs98MADKi4u1tChQ7VhwwbvZNV9+/b5zPf47rvvtGDBAn3xxRfq1KmTxo0bpxdeeEFdunQx9AyQkpKi+Ph4FRYW1jsvxOVyKT4+XikpKQaqAwC0ZkbXCTGBdULsV3t0jCSfIOJyuSRJ2dnZSktLM1IbAMA+QbNOCIJHWlqasrOzFRcX59MeHx9PAAEANIieENiGFVMBILjZ/R1qdE4Igovb7daoUaNMlwEACBAMxwAAACMIIQAAwAhCCAAAMIIQAgAAjCCEAAAAIwghAADACEIIAAAwghACAACMIIQAAAAjCCEAAMAIQggAADCCEAIAAIwghAAAACMIIQAAwIh2pgtAy/N4PCooKFBRUZFiY2OVkpIit9ttuiwAQBtDCGljcnJylJmZqQMHDnjb4uPjtXTpUqWlpRmsDADQ1jAc04bk5OQoPT3dJ4BIUmFhodLT05WTk2OoMgBAW0QIaSM8Ho8yMzNlWVad22rbZs+eLY/H09KlAQDaKIZj2oiCgoI6PSAnsyxL+/fvV0FBgUaNGtVyhTWGxyMVFEhFRVJsrJSSIjGHxV5Ovca8dwBOgxDSRhQVFdm6XYvJyZEyM6WTA1R8vLR0qcQcFns49Rrz3gE4A4Zj2ojY2Fhbt2sROTlSerrvl5gkFRbWtDOHpfmceo157wA0gsuqb5JAECsrK1NUVJRKS0sVGRlpupwW4/F4lJiYqMLCwnrnhbhcLsXHx2vv3r2t43Bdj0dKTKz7JVbL5ar5Vb13L937TeXUa8x7BwQtu79D6QlpI9xut5YuXSqpJnCcrPZ6VlZW6wggUs08gtPMYZFlSfv312zXVB6PlJ8vrV5d829bm5Tr1GvcEu8dgKBACGlD0tLSlJ2drbi4OJ/2+Ph4ZWdnt651Qho7N6Wpc1hycmp+rY8eLU2dWvNvYmLbGiZw6jV2+r2TCJBAkGBiahuTlpamCRMmtP4VUxs7N6Upc1hq5yucOixVO18hO7ttTJx06jV28r2TmPAKBBHmhKB1qp1XUFhYNyxIzFewg9Ovsd37lRoOkLVDjG0lQAKGMCcEbYPbXfPLVvrPF0yt2utZWf5/iTFf4T+ceo2d2q/HU9MDUl+wqW2bPZuhGSCAEELQeqWl1fyyPWUOi+Ljm/6LtyXmK0iBM2fBidfYqf0SIIGgw5wQtG5padKECfatuun0fAUp8OYs2P0aO7XflgqQAFoMc0LQtjg5X0FizoKT8vNrjmI6k7w8qbWdeiAQseQ+6sGcEKA5nJqvIDFnwWkpKTUB8dT3rZbLJSUk1GyH5nHyEPZAGapEiyCEoO1xah4Ecxac5WSADGR2f6k7ueQ+6/PgFIQQtE1padKXX9Z03a9aVfPv3r3NGyphzoLznAqQgcruL3Une/M4nxDqwZwQwC4tMWeBcfoavA7OzD9y6v9h1ucJGswJAVorp+cs0JX9H253zZfglCk1/7a1Ly6neiyc6s1jqBINIITAPm19wpmTcxboysbJnPpSd+oQ9kAfqmzrf9scRAiBPfiVXsOJOQscdYNTOfWl7lRvXkusz+NUUOBvm6MIIWg+fqX7snvSK13ZOJVTX+pO9eYF6lAlf9scRwhpi+z8xcCv9PrZOWch0LuyA00gdL07+aXuRG9eIA5V8retRRBC2hq7fzHwK915LdGVjRqB0vXu9JopThzCHmhDlfxtaxGEkLbEiV8M/Ep3HiuFtgynu97t7mFxes0UJ45ACqShSv62tQhOYNdWnOkXg8tV84thwgT//tjwK915tb9609Nr3qeT38O2vFKonZz6fNRy6qSGTp180Em14cYOTgaFQP7bFkDr6NAT0lY49YuBX+ktg5VCneXkL2qne1ja8popTgaFlvjb5sT8o0AZUvweIaStcOoXA+fzaDlOjNOjhlOfDyY3OsvJoOD03zYnwkIAHs1DCGkrnPzFwK/0ltOWf/U6yanPB5MbndUSE3Sd+NvmRFgI0MDLuWPaitpzNxQW1v8/qR3nbgigcUjAh1Ofj9Wra37lnsmqVTXBEk1T35ybhISaAGLHjyA7/7Y5dR6dljh3lez/DmVialvREpMb7ZxwBrQkpz4fgTy5MZA4PUHXzr9t/vSO+fOYAXo0D8MxbQnDJkDDnPh8MHG75QTKUKVTYSFAAy89IW1NIB7SB7QUuz8fHF6NUzkVFmoD75mGFFtZ4GVOCAA4zek5CwgcTs7Pq53wKtUfeG3o8bb7O5ThGABwGodXo5aTR/QE4JA7PSEAALQ0J3vHHDxS0e7vUEIIAAAmBOCyBhyiCwBAMGBZA+aEAAAAMwghAADACEIIAAAwghACAACMIIQAAAAjCCEAAMAIQggAADCCEAIAAIwghAAAACMIIQAAwAhCCAAAMIIQAgAAjCCEAAAAIwghAADAiHamC0DDPB6PCgoKVFRUpNjYWKWkpMjtdpsuCwAAWxBCWqmcnBxlZmbqwIED3rb4+HgtXbpUaWlpBisDAMAeDMe0Qjk5OUpPT/cJIJJUWFio9PR05eTkGKoMAAD7EEJaGY/Ho8zMTFmWpRBJl0u6/vt/XZYlSZo9e7Y8Ho/BKgEAaD5CSCtTUFCgAwcOaJKkLyXlS1r9/b9fSppoWdq/f78KCgpMlQgAgC2YE9LKFBUVaZKk7Hpui/u+Pf377QAACGT0hLQysb16aen3/33qm1N7Pev77QAACGT0hLQyKZJOdxBuiKSzVNMrAgBAIKMnpJVxHzxo63YAALRWhJDWJjbW3u0AAGilCCGtTUqKFB8vuVz13+5ySQkJNdsBABDAjIeQZcuWKTExUR06dFBSUpK2bNly2u2zsrI0YMAAhYeHKyEhQXfffbe+++67Fqq2Bbjd0tLvp6aeGkRqr2dl1WwHAEAAMxpC1qxZozlz5mjRokXatm2bhgwZotTUVB1sYL7DqlWrdN9992nRokXatWuXli9frjVr1uj+++9v4codlpYmZWdLcadMP42Pr2ln2XYAQBBwWdb3y3AakJSUpBEjRujpp5+WJFVXVyshIUGzZs3SfffdV2f7mTNnateuXcrNzfW2/fd//7fef/99vf322416zLKyMkVFRam0tFSRkZH2PBGneDxSQYFUVFQzByQlhR4QAIAxdn+HGusJqaqq0tatWzVmzJj/FBMSojFjxmjz5s313ufSSy/V1q1bvUM2X3zxhV599VWNGzeuwceprKxUWVmZzyVguN3SqFHSlCk1/xJAAABBxNg6IYcOHZLH41F0dLRPe3R0tD799NN67zN16lQdOnRIP/jBD2RZlk6cOKE77rjjtMMxS5Ys0eLFi22tHQAANJ/xian+yM/P1yOPPKLf/va32rZtm3JycvTKK6/o4YcfbvA+8+bNU2lpqfeyf//+FqwYAAA0xFhPSI8ePeR2u1VSUuLTXlJSopiYmHrvs3DhQt1000269dZbJUmDBg1SRUWFbr/9ds2fP18hIXUzVVhYmMLCwux/AgAAoFmM9YSEhoZq2LBhPpNMq6urlZubq+Tk5Hrvc/To0TpBw/39PAmD82sBAEATGD13zJw5c5SRkaHhw4dr5MiRysrKUkVFhaZPny5JmjZtmuLi4rRkyRJJ0vjx4/XEE0/ooosuUlJSkvbs2aOFCxdq/Pjx3jACAAACg9EQMnnyZH3zzTd64IEHVFxcrKFDh2rDhg3eyar79u3z6flYsGCBXC6XFixYoMLCQvXs2VPjx4/XL3/5S1NPAQAANJHRdUJMCKh1QgAAaEWCZp0QAADQthFCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEYQQgAAgBF+h5DExEQ99NBD2rdvnxP1AACANsLvEDJ79mzl5OSoX79+uuqqq/Tiiy+qsrLSidoAAEAQa1II2b59u7Zs2aKBAwdq1qxZio2N1cyZM7Vt2zYnagQAAEGo2WfRPX78uH77299q7ty5On78uAYNGqS77rpL06dPl8vlsqtO23AWXQAAmsbu79B2Tb3j8ePHtW7dOq1YsUIbN27UJZdcoltuuUUHDhzQ/fffrzfeeEOrVq1qdoEAACA4+R1Ctm3bphUrVmj16tUKCQnRtGnT9OSTT+q8887zbjNp0iSNGDHC1kIBAEBw8TuEjBgxQldddZWeeeYZTZw4Ue3bt6+zTd++fXX99dfbUiAAAAhOfoeQL774Qn369DntNh07dtSKFSuaXBQAAAh+fh8dc/DgQb3//vt12t9//339v//3/2wpCgAABD+/Q8iMGTO0f//+Ou2FhYWaMWOGLUUBAIDg53cI+eSTT3TxxRfXab/ooov0ySef2FIUAAAIfn6HkLCwMJWUlNRpLyoqUrt2TT7iFwAAtDF+h5Crr75a8+bNU2lpqbftyJEjuv/++3XVVVfZWhwAAAhefnddPP744/rhD3+oPn366KKLLpIkbd++XdHR0XrhhRdsLxAAAAQnv0NIXFycPvroI/35z3/Wjh07FB4erunTp2vKlCn1rhkCAABQnyZN4ujYsaNuv/12u2sBAABtSJNnkn7yySfat2+fqqqqfNp/8pOfNLsoAAAQ/Jq0YuqkSZO0c+dOuVwu1Z6Et/aMuR6Px94KAQBAUPL76JjMzEz17dtXBw8eVEREhP7xj39o06ZNGj58uPLz8x0oEQAABCO/e0I2b96sN998Uz169FBISIhCQkL0gx/8QEuWLNFdd92lDz/80Ik6AQBAkPG7J8Tj8ahz586SpB49eujrr7+WJPXp00e7d++2tzoAABC0/O4JufDCC7Vjxw717dtXSUlJevTRRxUaGqrnnntO/fr1c6JGAAAQhPwOIQsWLFBFRYUk6aGHHtKPf/xjpaSkqHv37lqzZo3tBbZ6Ho9UUCAVFUmxsVJKiuR2m64KAIBWz2XVHt7SDIcPH1bXrl29R8i0ZmVlZYqKilJpaakiIyObt7OcHCkzUzpw4D9t8fHS0qVSWlrz9g0AQCtj63eo/JwTcvz4cbVr104ff/yxT3u3bt0CIoDYKidHSk/3DSCSVFhY056TY6YuAAAChF8hpH379jrrrLNYC8TjqekBqa8TqbZt9uya7QAAQL38Pjpm/vz5uv/++3X48GEn6gkMBQV1e0BOZlnS/v012wEAgHr5PTH16aef1p49e9S7d2/16dNHHTt29Ll927ZtthXXahUV2bsdAABtkN8hZOLEiQ6UEWBiY+3dDgCANsiWo2MCiS0zez0eKTGxZhJqfS+fy1VzlMzevRyuCwAIGkaPjsH33O6aw3ClmsBxstrrWVkEEAAATsPvEBISEiK3293gpc1IS5Oys6W4ON/2+PiadtYJAQDgtPyeE7Ju3Tqf68ePH9eHH36oP/zhD1q8eLFthQWEtDRpwgRWTAUAoAlsmxOyatUqrVmzRn/961/t2J1j7B7PAgCgrWi1c0IuueQS5ebm2rU7AAAQ5GwJIceOHdNvfvMbxZ06PwIAAKABfs8JOfVEdZZl6dtvv1VERIT+9Kc/2VocAAAIXn6HkCeffNInhISEhKhnz55KSkpS165dbS0OAAAEL79DyM033+xAGQAAoK3xe07IihUrtHbt2jrta9eu1R/+8AdbigIAAMHP7xCyZMkS9ejRo057r1699Mgjj9hSFAAACH5+h5B9+/apb9++ddr79Omjffv22VIUAAAIfn6HkF69eumjjz6q075jxw51797dlqIAAEDw8zuETJkyRXfddZfy8vLk8Xjk8Xj05ptvKjMzU9dff70TNQIAgCDk99ExDz/8sL788ktdeeWVateu5u7V1dWaNm0ac0IAAECjNfncMZ999pm2b9+u8PBwDRo0SH369LG7Nkdw7hgAAJrG7u9Qv3tCavXv31/9+/dvdgEAAKBt8ntOyLXXXqtf/epXddofffRR/fSnP7WlKAAAEPz8DiGbNm3SuHHj6rRfc8012rRpky1FAQCA4Od3CCkvL1doaGid9vbt26usrMyWogAAQPDzO4QMGjRIa9asqdP+4osv6vzzz7elKAAAEPz8npi6cOFCpaWl6fPPP9cVV1whScrNzdWqVauUnZ1te4EAACA4+R1Cxo8fr/Xr1+uRRx5Rdna2wsPDNWTIEL355pvq1q2bEzUCAIAg1OR1QmqVlZVp9erVWr58ubZu3SqPx2NXbY5gnRAAAJrG7u9Qv+eE1Nq0aZMyMjLUu3dv/frXv9YVV1yh9957r9kFAQCAtsGv4Zji4mKtXLlSy5cvV1lZma677jpVVlZq/fr1TEoFAAB+aXRPyPjx4zVgwAB99NFHysrK0tdff62nnnrKydoAAEAQa3RPyGuvvaa77rpLd955J8u1AwCAZmt0T8jbb7+tb7/9VsOGDVNSUpKefvppHTp0yMnaAABAEGt0CLnkkkv0+9//XkVFRfrZz36mF198Ub1791Z1dbU2btyob7/91sk6AQBAkGnWIbq7d+/W8uXL9cILL+jIkSO66qqr9PLLL9tZn+04RBcAgKZpNYfoStKAAQP06KOP6sCBA1q9enWziwEAAG1HsxcrCzT0hAAA0DStqicEAACgqQghAADACEIIAAAwghACAACMIIQAAAAjCCEAAMAIQggAADCCEAIAAIxoFSFk2bJlSkxMVIcOHZSUlKQtW7Y0uO2oUaPkcrnqXH70ox+1YMUAAKC5jIeQNWvWaM6cOVq0aJG2bdumIUOGKDU1VQcPHqx3+5ycHBUVFXkvH3/8sdxut37605+2cOUAAKA5jIeQJ554QrfddpumT5+u888/X88++6wiIiL0/PPP17t9t27dFBMT471s3LhRERERhBAAAAKM0RBSVVWlrVu3asyYMd62kJAQjRkzRps3b27UPpYvX67rr79eHTt2rPf2yspKlZWV+VwAAIB5RkPIoUOH5PF4FB0d7dMeHR2t4uLiM95/y5Yt+vjjj3Xrrbc2uM2SJUsUFRXlvSQkJDS7bgAA0HzGh2OaY/ny5Ro0aJBGjhzZ4Dbz5s1TaWmp97J///4WrBAAADSknckH79Gjh9xut0pKSnzaS0pKFBMTc9r7VlRU6MUXX9RDDz102u3CwsIUFhbW7FoBAIC9jPaEhIaGatiwYcrNzfW2VVdXKzc3V8nJyae979q1a1VZWakbb7zR6TIBAIADjPaESNKcOXOUkZGh4cOHa+TIkcrKylJFRYWmT58uSZo2bZri4uK0ZMkSn/stX75cEydOVPfu3U2UDQAAmsl4CJk8ebK++eYbPfDAAyouLtbQoUO1YcMG72TVffv2KSTEt8Nm9+7devvtt/X3v//dRMkAAMAGLsuyLNNFtKSysjJFRUWptLRUkZGRpssBACBg2P0dGtBHxwAAgMBFCAEAAEYQQgAAgBGEEAAAYAQhBAAAGEEIAQAARhBCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEa0M11AoPN4PCooKFBRUZFiY2OVkpIit9ttuiwAAFo9Qkgz5OTkKDMzUwcOHPC2xcfHa+nSpUpLSzNYGQAArR/DMU2Uk5Oj9PR0nwAiSYWFhUpPT1dOTo6hygAACAyEkCbweDzKzMyUZVl1bqttmz17tjweT0uXBgBAwCCENEFBQUGdHpCTWZal/fv3q6CgoAWrAgAgsBBCmqCoqMjW7QAAaIsIIU0QGxtr63YAALRFhJAmSElJUXx8vFwuV723u1wuJSQkKCUlpYUrAwAgcBBCmsDtdmvp0qWSVCeI1F7PyspivRAAAE6DENJEaWlpys7OVlxcnE97fHy8srOzWScEAIAzcFn1HWcaxMrKyhQVFaXS0lJFRkY2e3+smAoAaCvs/g5lxdRmcrvdGjVqlOkyAAAIOAzHAAAAIwghAADACEIIAAAwghACAACMIIQAAAAjCCEAAMAIQggAADCCEAIAAIwghAAAACMIIQAAwAhCCAAAMIIQAgAAjCCEAAAAIwghAADACEIIAAAwghACAACMIIQAAAAjCCEAAMAIQggAADCCEAIAAIwghAAAACMIIQAAwAhCCAAAMIIQAgAAjCCEAAAAIwghAADACEIIAAAwghACAACMIIQAAAAjCCEAAMAIQggAADCCEAIAAIwghAAAACMIIQAAwAhCCAAAMIIQAgAAjCCEAAAAIwghAADACEIIAAAwghACAACMIIQAAAAjCCEAAMAIQggAADCCEAIAAIwghAAAACMIIQAAwAhCCAAAMIIQAgAAjCCEAAAAIwghAADACEIIAAAwghACAACMIIQAAAAjCCEAAMAIQggAADCCEAIAAIwwHkKWLVumxMREdejQQUlJSdqyZctptz9y5IhmzJih2NhYhYWF6dxzz9Wrr77aQtUCAAC7tDP54GvWrNGcOXP07LPPKikpSVlZWUpNTdXu3bvVq1evOttXVVXpqquuUq9evZSdna24uDh99dVX6tKlS8sXDwAAmsVlWZZl6sGTkpI0YsQIPf3005Kk6upqJSQkaNasWbrvvvvqbP/ss8/qscce06effqr27ds36jEqKytVWVnpvV5WVqaEhASVlpYqMjLSnicCAEAbUFZWpqioKNu+Q40Nx1RVVWnr1q0aM2bMf4oJCdGYMWO0efPmeu/z8ssvKzk5WTNmzFB0dLQuvPBCPfLII/J4PA0+zpIlSxQVFeW9JCQk2P5cAACA/4yFkEOHDsnj8Sg6OtqnPTo6WsXFxfXe54svvlB2drY8Ho9effVVLVy4UL/+9a/1i1/8osHHmTdvnkpLS72X/fv32/o8AABA0xidE+Kv6upq9erVS88995zcbreGDRumwsJCPfbYY1q0aFG99wkLC1NYWFgLVwoAAM7EWAjp0aOH3G63SkpKfNpLSkoUExNT731iY2PVvn17ud1ub9vAgQNVXFysqqoqhYaGOlozAACwj7HhmNDQUA0bNky5ubneturqauXm5io5Obne+1x22WXas2ePqqurvW3//Oc/FRsbSwABACDAGF0nZM6cOfr973+vP/zhD9q1a5fuvPNOVVRUaPr06ZKkadOmad68ed7t77zzTh0+fFiZmZn65z//qVdeeUWPPPKIZsyYYeopAACAJjI6J2Ty5Mn65ptv9MADD6i4uFhDhw7Vhg0bvJNV9+3bp5CQ/+SkhIQEvf7667r77rs1ePBgxcXFKTMzU3PnzjX1FAAAQBMZXSfEBLuPcQYAoK0ImnVCAABA20YIAQAARhBCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEYQQgAAgBGEEAAAYAQhBAAAGEEIAQAARhBCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEYQQgAAgBGEEAAAYAQhBAAAGEEIAQAARhBCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEYQQgAAgBGEEAAAYAQhBAAAGEEIAQAARhBCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEYQQgAAgBGEEAAAYAQhBAAAGEEIAQAARhBCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEYQQgAAgBGEEAAAYAQhBAAAGEEIAQAARhBCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABhBCAEAAEYQQgAAgBGEEAAAYAQhBAAAGEEIAQAARhBCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIARhBAAAGAEIQQAABjRKkLIsmXLlJiYqA4dOigpKUlbtmxpcNuVK1fK5XL5XDp06NCC1QIAADsYDyFr1qzRnDlztGjRIm3btk1DhgxRamqqDh482OB9IiMjVVRU5L189dVXLVgxAACwg/EQ8sQTT+i2227T9OnTdf755+vZZ59VRESEnn/++Qbv43K5FBMT471ER0e3YMUAAMAO7Uw+eFVVlbZu3ap58+Z520JCQjRmzBht3ry5wfuVl5erT58+qq6u1sUXX6xHHnlEF1xwQb3bVlZWqrKy0nu9tLRUklRWVmbTswAAoG2o/e60LMuW/RkNIYcOHZLH46nTkxEdHa1PP/203vsMGDBAzz//vAYPHqzS0lI9/vjjuvTSS/WPf/xD8fHxdbZfsmSJFi9eXKc9ISHBnicBAEAb869//UtRUVHN3o/RENIUycnJSk5O9l6/9NJLNXDgQP3ud7/Tww8/XGf7efPmac6cOd7r1dXVOnz4sLp37y6Xy2VLTWVlZUpISND+/fsVGRlpyz7RMnjvAhfvXeDivQtcpaWlOuuss9StWzdb9mc0hPTo0UNut1slJSU+7SUlJYqJiWnUPtq3b6+LLrpIe/bsqff2sLAwhYWF+bR16dKlSfWeSWRkJB+oAMV7F7h47wIX713gCgmxZ0qp0YmpoaGhGjZsmHJzc71t1dXVys3N9entOB2Px6OdO3cqNjbWqTIBAIADjA/HzJkzRxkZGRo+fLhGjhyprKwsVVRUaPr06ZKkadOmKS4uTkuWLJEkPfTQQ7rkkkt0zjnn6MiRI3rsscf01Vdf6dZbbzX5NAAAgJ+Mh5DJkyfrm2++0QMPPKDi4mINHTpUGzZs8E5W3bdvn0+3z7///W/ddtttKi4uVteuXTVs2DC9++67Ov/88009BYWFhWnRokV1hn3Q+vHeBS7eu8DFexe47H7vXJZdx9kAAAD4wfhiZQAAoG0ihAAAACMIIQAAwAhCCAAAMIIQYoNly5YpMTFRHTp0UFJSkrZs2WK6JJzBgw8+KJfL5XM577zzTJeFemzatEnjx49X79695XK5tH79ep/bLcvSAw88oNjYWIWHh2vMmDH67LPPzBQLH2d6726++eY6n8OxY8eaKRY+lixZohEjRqhz587q1auXJk6cqN27d/ts891332nGjBnq3r27OnXqpGuvvbbO4qNnQghppjVr1mjOnDlatGiRtm3bpiFDhig1NVUHDx40XRrO4IILLlBRUZH38vbbb5suCfWoqKjQkCFDtGzZsnpvf/TRR/Wb3/xGzz77rN5//3117NhRqamp+u6771q4UpzqTO+dJI0dO9bnc7h69eoWrBANeeuttzRjxgy999572rhxo44fP66rr75aFRUV3m3uvvtu/d///Z/Wrl2rt956S19//bXS0tL8eyALzTJy5EhrxowZ3usej8fq3bu3tWTJEoNV4UwWLVpkDRkyxHQZ8JMka926dd7r1dXVVkxMjPXYY495244cOWKFhYVZq1evNlAhGnLqe2dZlpWRkWFNmDDBSD3wz8GDBy1J1ltvvWVZVs3nrH379tbatWu92+zatcuSZG3evLnR+6UnpBmqqqq0detWjRkzxtsWEhKiMWPGaPPmzQYrQ2N89tln6t27t/r166cbbrhB+/btM10S/LR3714VFxf7fAajoqKUlJTEZzBA5Ofnq1evXhowYIDuvPNO/etf/zJdEupRWloqSd4T123dulXHjx/3+eydd955Ouuss/z67BFCmuHQoUPyeDze1V1rRUdHq7i42FBVaIykpCStXLlSGzZs0DPPPKO9e/cqJSVF3377renS4IfazxmfwcA0duxY/fGPf1Rubq5+9atf6a233tI111wjj8djujScpLq6WrNnz9Zll12mCy+8UFLNZy80NLTOCWH9/ewZX7YdMOGaa67x/vfgwYOVlJSkPn366C9/+YtuueUWg5UBbcf111/v/e9BgwZp8ODBOvvss5Wfn68rr7zSYGU42YwZM/Txxx87Mm+OnpBm6NGjh9xud53ZwCUlJYqJiTFUFZqiS5cuOvfcc7Vnzx7TpcAPtZ8zPoPBoV+/furRowefw1Zk5syZ+tvf/qa8vDzFx8d722NiYlRVVaUjR474bO/vZ48Q0gyhoaEaNmyYcnNzvW3V1dXKzc1VcnKywcrgr/Lycn3++eeKjY01XQr80LdvX8XExPh8BsvKyvT+++/zGQxABw4c0L/+9S8+h62AZVmaOXOm1q1bpzfffFN9+/b1uX3YsGFq3769z2dv9+7d2rdvn1+fPYZjmmnOnDnKyMjQ8OHDNXLkSGVlZamiokLTp083XRpO45577tH48ePVp08fff3111q0aJHcbremTJliujScory83OeX8d69e7V9+3Z169ZNZ511lmbPnq1f/OIX6t+/v/r27auFCxeqd+/emjhxormiIen07123bt20ePFiXXvttYqJidHnn3+ue++9V+ecc45SU1MNVg2pZghm1apV+utf/6rOnTt753lERUUpPDxcUVFRuuWWWzRnzhx169ZNkZGRmjVrlpKTk3XJJZc0/oHsPoynLXrqqaess846ywoNDbVGjhxpvffee6ZLwhlMnjzZio2NtUJDQ624uDhr8uTJ1p49e0yXhXrk5eVZkupcMjIyLMuqOUx34cKFVnR0tBUWFmZdeeWV1u7du80WDcuyTv/eHT161Lr66qutnj17Wu3bt7f69Olj3XbbbVZxcbHpsmFZ9b5vkqwVK1Z4tzl27Jj185//3OratasVERFhTZo0ySoqKvLrcVzfPxgAAECLYk4IAAAwghACAACMIIQAAAAjCCEAAMAIQggAADCCEAIAAIwghAAAACMIIQAAwAhCCICg4HK5tH79etNlAPADIQRAs918881yuVx1LmPHjjVdGoBWjBPYAbDF2LFjtWLFCp+2sLAwQ9UACAT0hACwRVhYmGJiYnwuXbt2lVQzVPLMM8/ommuuUXh4uPr166fs7Gyf++/cuVNXXHGFwsPD1b17d91+++0qLy/32eb555/XBRdcoLCwMMXGxmrmzJk+tx86dEiTJk1SRESE+vfvr5dfftnZJw2gWQghAFrEwoULde2112rHjh264YYbdP3112vXrl2SpIqKCqWmpqpr16764IMPtHbtWr3xxhs+IeOZZ57RjBkzdPvtt2vnzp16+eWXdc455/g8xuLFi3Xdddfpo48+0rhx43TDDTfo8OHDLfo8AfjB1nP/AmiTMjIyLLfbbXXs2NHn8stf/tKyrJrTgt9xxx0+90lKSrLuvPNOy7Is67nnnrO6du1qlZeXe29/5ZVXrJCQEO+p3Xv37m3Nnz+/wRokWQsWLPBeLy8vtyRZr732mm3PE4C9mBMCwBajR4/WM88849PWrVs3738nJyf73JacnKzt27dLknbt2qUhQ4aoY8eO3tsvu+wyVVdXa/fu3XK5XPr666915ZVXnraGwYMHe/+7Y8eOioyM1MGDB5v6lAA4jBACwBYdO3asMzxil/Dw8EZt1759e5/rLpdL1dXVTpQEwAbMCQHQIt5777061wcOHChJGjhwoHbs2KGKigrv7e+8845CQkI0YMAAde7cWYmJicrNzW3RmgE4i54QALaorKxUcXGxT1u7du3Uo0cPSdLatWs1fPhw/eAHP9Cf//xnbdmyRcuXL5ck3XDDDVq0aJEyMjL04IMP6ptvvtGsWbN00003KTo6WpL04IMP6o477lCvXr10zTXX6Ntvv9U777yjWbNmtewTBWAbQggAW2zYsEGxsbE+bQMGDNCnn34qqebIlRdffFE///nPFRsbq9WrV+v888+XJEVEROj1119XZmamRowYoYiICF177bV64oknvPvKyMjQd999pyeffFL33HOPevToofT09JZ7ggBs57IsyzJdBIDg5nK5tG7dOk2cONF0KQBaEeaEAAAAIwghAADACOaEAHAco74A6kNPCAAAMIIQAgAAjCCEAAAAIwghAADACEIIAAAwghACAACMIIQAAAAjCCEAAMCI/w+qg7/ja0Jp/AAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -7325,7 +7325,7 @@ { "cell_type": "code", "execution_count": 93, - "id": "be5a979e", + "id": "c6f2d6c4", "metadata": { "lines_to_next_cell": 2 }, @@ -7341,7 +7341,7 @@ }, { "cell_type": "markdown", - "id": "240618c9", + "id": "f920c659", "metadata": {}, "source": [ "### Time Series Prediction\n", @@ -7353,7 +7353,7 @@ { "cell_type": "code", "execution_count": 94, - "id": "cf219016", + "id": "f3e17682", "metadata": {}, "outputs": [], "source": [ @@ -7368,7 +7368,7 @@ }, { "cell_type": "markdown", - "id": "2ebf00d3", + "id": "e621c2eb", "metadata": {}, "source": [ "Next we set up the lagged versions of the data, dropping\n", @@ -7378,7 +7378,7 @@ { "cell_type": "code", "execution_count": 95, - "id": "c0d6bb22", + "id": "78707eda", "metadata": {}, "outputs": [], "source": [ @@ -7393,7 +7393,7 @@ }, { "cell_type": "markdown", - "id": "53d15ddf", + "id": "bb83e654", "metadata": {}, "source": [ "Finally, we extract the response, training indicator, and drop the current day’s `DJ_return` and\n", @@ -7403,7 +7403,7 @@ { "cell_type": "code", "execution_count": 96, - "id": "9de511d5", + "id": "4d894824", "metadata": { "lines_to_next_cell": 2 }, @@ -7431,7 +7431,7 @@ }, { "cell_type": "markdown", - "id": "9c61eaa2", + "id": "f1889769", "metadata": {}, "source": [ "We first fit a simple linear model and compute the $R^2$ on the test data using\n", @@ -7441,7 +7441,7 @@ { "cell_type": "code", "execution_count": 97, - "id": "89666a56", + "id": "4d7f5ce0", "metadata": {}, "outputs": [ { @@ -7463,7 +7463,7 @@ }, { "cell_type": "markdown", - "id": "c3997039", + "id": "02c7294f", "metadata": {}, "source": [ "We refit this model, including the factor variable `day_of_week`.\n", @@ -7474,7 +7474,7 @@ { "cell_type": "code", "execution_count": 98, - "id": "23ebf124", + "id": "a6b371bb", "metadata": { "lines_to_next_cell": 0 }, @@ -7487,7 +7487,7 @@ }, { "cell_type": "markdown", - "id": "8df4e475", + "id": "92fda2e1", "metadata": {}, "source": [ " Note that we do not have\n", @@ -7498,7 +7498,7 @@ { "cell_type": "code", "execution_count": 99, - "id": "4190a4dc", + "id": "a2a8cc85", "metadata": { "lines_to_next_cell": 0 }, @@ -7521,7 +7521,7 @@ }, { "cell_type": "markdown", - "id": "d98cc235", + "id": "68a22c64", "metadata": {}, "source": [ "This model achieves an $R^2$ of about 46%." @@ -7529,7 +7529,7 @@ }, { "cell_type": "markdown", - "id": "131bfc1c", + "id": "1cca42e4", "metadata": {}, "source": [ "To fit the RNN, we must reshape the data, as it will expect 5 lagged\n", @@ -7550,7 +7550,7 @@ { "cell_type": "code", "execution_count": 100, - "id": "a2b41f92", + "id": "8ee6e6a3", "metadata": { "lines_to_next_cell": 0 }, @@ -7581,7 +7581,7 @@ }, { "cell_type": "markdown", - "id": "7b301214", + "id": "a1f41334", "metadata": {}, "source": [ "We now reshape the data." @@ -7590,7 +7590,7 @@ { "cell_type": "code", "execution_count": 101, - "id": "dde73c9e", + "id": "d35ceb54", "metadata": { "lines_to_next_cell": 0 }, @@ -7613,7 +7613,7 @@ }, { "cell_type": "markdown", - "id": "4fa6cd7a", + "id": "11137e1d", "metadata": {}, "source": [ "By specifying the first size as -1, `numpy.reshape()` deduces its size based on the remaining arguments.\n", @@ -7628,7 +7628,7 @@ { "cell_type": "code", "execution_count": 102, - "id": "6f9d6357", + "id": "9e3dc6d5", "metadata": {}, "outputs": [], "source": [ @@ -7649,7 +7649,7 @@ }, { "cell_type": "markdown", - "id": "a5d720e7", + "id": "1fd566f7", "metadata": {}, "source": [ "We fit the model in a similar fashion to previous networks. We\n", @@ -7659,14 +7659,13 @@ "early stopping, since then the test performance would be biased.\n", "\n", "We form the training dataset similar to\n", - "our `Hitters` example.\n", - " " + "our `Hitters` example." ] }, { "cell_type": "code", "execution_count": 103, - "id": "a21ca47e", + "id": "df5e5ab6", "metadata": {}, "outputs": [], "source": [ @@ -7680,7 +7679,7 @@ }, { "cell_type": "markdown", - "id": "0d627892", + "id": "16565d83", "metadata": {}, "source": [ "Following our usual pattern, we inspect the summary." @@ -7689,7 +7688,7 @@ { "cell_type": "code", "execution_count": 104, - "id": "8fa26b87", + "id": "d7f49bec", "metadata": { "lines_to_next_cell": 0 }, @@ -7732,7 +7731,7 @@ }, { "cell_type": "markdown", - "id": "065db586", + "id": "ad57780a", "metadata": {}, "source": [ "We again put the two datasets into a data module, with a\n", @@ -7742,7 +7741,7 @@ { "cell_type": "code", "execution_count": 105, - "id": "9b871361", + "id": "ea7ce0f4", "metadata": { "lines_to_next_cell": 0 }, @@ -7757,7 +7756,7 @@ }, { "cell_type": "markdown", - "id": "8e6d61d8", + "id": "d0d60c8b", "metadata": {}, "source": [ "We run some data through our model to be sure the sizes match up correctly." @@ -7766,7 +7765,7 @@ { "cell_type": "code", "execution_count": 106, - "id": "b63d1f85", + "id": "ccd77738", "metadata": {}, "outputs": [ { @@ -7789,7 +7788,7 @@ }, { "cell_type": "markdown", - "id": "7fc69ade", + "id": "c9397b7f", "metadata": {}, "source": [ "We follow our previous example for setting up a trainer for a\n", @@ -7800,7 +7799,7 @@ { "cell_type": "code", "execution_count": 107, - "id": "c5f32a4f", + "id": "96e04e3f", "metadata": {}, "outputs": [], "source": [ @@ -7813,7 +7812,7 @@ }, { "cell_type": "markdown", - "id": "ed00be6a", + "id": "9d7ef6fc", "metadata": {}, "source": [ "Fitting the model should by now be familiar.\n", @@ -7823,7 +7822,7 @@ { "cell_type": "code", "execution_count": 108, - "id": "6bd98eb9", + "id": "fc6ba2ca", "metadata": { "lines_to_next_cell": 2 }, @@ -7865,7 +7864,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f50cb3862a6e4ddcbcb7131a9c3e6c07", + "model_id": "cd881313814b4b319883de36a456b21e", "version_major": 2, "version_minor": 0 }, @@ -8537,7 +8536,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0e613a523fb24350a02e4af53fc31c0b", + "model_id": "c0851768dd544162913f87e0e0cb118e", "version_major": 2, "version_minor": 0 }, @@ -8551,7 +8550,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c4db1eab382549f1b1beddfad3368138", + "model_id": "6cb1dc51cbad4e1f829a074e29d3a47e", "version_major": 2, "version_minor": 0 }, @@ -8565,7 +8564,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fe986a9354124fab8835d0b2d93529dd", + "model_id": "608984e04fc847d7860dfb48bbcdda9f", "version_major": 2, "version_minor": 0 }, @@ -8579,7 +8578,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b8cb7c8dcfc8407e9bcb453d75fec4fb", + "model_id": "bef4bc23212c41c497e518473db55672", "version_major": 2, "version_minor": 0 }, @@ -8593,7 +8592,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b3bb249322a440fea649e953c6f8e6f9", + "model_id": "890d82c78d59444ea97f6000b0d17fec", "version_major": 2, "version_minor": 0 }, @@ -8607,7 +8606,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fa670100f02b47cf9ec4c3e6bad634e7", + "model_id": "84f285e1262e448186175b5f6ea8a100", "version_major": 2, "version_minor": 0 }, @@ -8621,7 +8620,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1a89941f764245c2ada50a90a13c2de5", + "model_id": "6bcddf29e018487ab3cbd65b9360a31c", "version_major": 2, "version_minor": 0 }, @@ -8635,7 +8634,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f1620d945db8415eb67ca9c7c9204437", + "model_id": "0f5f0bf0e3094d359222a40cfb883e67", "version_major": 2, "version_minor": 0 }, @@ -8649,7 +8648,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ccaab29c24594688aab4e276f0602911", + "model_id": "436f0a6e3a7a4457b6b54fb1c19a9fc1", "version_major": 2, "version_minor": 0 }, @@ -8663,7 +8662,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "985770bbcdc54a978e25689ec98b9ec8", + "model_id": "153517df5e244608a4df90e6d5b3f2fb", "version_major": 2, "version_minor": 0 }, @@ -8677,7 +8676,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "649a7264f6e84529ab9292bab0b77432", + "model_id": "966bf641ff264d9ba465a989337d24c8", "version_major": 2, "version_minor": 0 }, @@ -8691,7 +8690,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bbd262d3471646e38208a319c863cb75", + "model_id": "232ec0a0183e462f92422b1991162466", "version_major": 2, "version_minor": 0 }, @@ -8705,7 +8704,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "58ad0974b15546609feec97cc94b6a7a", + "model_id": "94eebdb823b9416abdb1454fa8b713a1", "version_major": 2, "version_minor": 0 }, @@ -8719,7 +8718,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d6114f44e51d4586b911578aa52ed8e5", + "model_id": "63e68c7095d74639a33c6b422dde8e6b", "version_major": 2, "version_minor": 0 }, @@ -8733,7 +8732,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d42389c558874de3932eb5bc0c4165cb", + "model_id": "858b9ede991d4db5a65f3738145661b0", "version_major": 2, "version_minor": 0 }, @@ -8747,7 +8746,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "892652c223b4426b8e809a0cc36985a2", + "model_id": "1320a563fa1141f48ec1121a4da566dd", "version_major": 2, "version_minor": 0 }, @@ -8761,7 +8760,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cc6a9c7712ac47e7be436a5e53c1d203", + "model_id": "c258eee32312493f820b0be1001b702d", "version_major": 2, "version_minor": 0 }, @@ -8775,7 +8774,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "71474f43feee42a78f5b2dd1441ebea8", + "model_id": "cfe59e5c336b483595b2c2f3e5002fe5", "version_major": 2, "version_minor": 0 }, @@ -8789,7 +8788,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d35c015e070a4066a00638dfea294e20", + "model_id": "da49b9baca8d43deb73852ac22411b59", "version_major": 2, "version_minor": 0 }, @@ -8803,7 +8802,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bbe8d6a738a2452eb96907cfd94a865e", + "model_id": "2edefd368841420799756fdeb9eb350e", "version_major": 2, "version_minor": 0 }, @@ -8817,7 +8816,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c4e37d0e56cf4433bae37ba25dd6addc", + "model_id": "fb1ab9dd650c4327b9e08083ea6f855e", "version_major": 2, "version_minor": 0 }, @@ -8831,7 +8830,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "508e2b4b875b4f3eb89460503b82a44b", + "model_id": "337548c8b3a649b3bbb2aa022d0bc33c", "version_major": 2, "version_minor": 0 }, @@ -8845,7 +8844,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fe84b5d4fff64e4e84eb3baf63f49ebb", + "model_id": "469f0f8eaf84468689dc81a6866590c6", "version_major": 2, "version_minor": 0 }, @@ -8859,7 +8858,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "234a8305cd0e4671bafd6347a508006a", + "model_id": "5a3d2d6c73104569b2431592878a0680", "version_major": 2, "version_minor": 0 }, @@ -8873,7 +8872,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9314bb524e4c4c988e0637f0b426dea3", + "model_id": "0a4f360d5a1c4e688c806475aa15e2aa", "version_major": 2, "version_minor": 0 }, @@ -8887,7 +8886,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "73bb408fb3b14067bc5a00c51f2b46ab", + "model_id": "32861129effb47cdb392fa0a20b636c3", "version_major": 2, "version_minor": 0 }, @@ -8901,7 +8900,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "80e55275d2694434ba664645a53cfdfb", + "model_id": "0713f563c1fc4d6292be6340e83f6417", "version_major": 2, "version_minor": 0 }, @@ -8915,7 +8914,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "af57619b39e141b0a849207567f12685", + "model_id": "1364d3ae21274234a26921be5a610c57", "version_major": 2, "version_minor": 0 }, @@ -8929,7 +8928,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1e9d1664e7094f3a80c4c29a64c69850", + "model_id": "c5e4630ea30945fd862bce8a68c9eaff", "version_major": 2, "version_minor": 0 }, @@ -8943,7 +8942,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cbadff921ed84c079d2920fa8f108d79", + "model_id": "fb014ea654fa49c6b29fda1c42a4239b", "version_major": 2, "version_minor": 0 }, @@ -8957,7 +8956,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1a4f763710f54a64a164ed4e8ade0cd4", + "model_id": "fc9065e42c5946f88aa84da055bf968e", "version_major": 2, "version_minor": 0 }, @@ -8971,7 +8970,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7ae34405e0904941bde7ac34156ef5d9", + "model_id": "b33c56819c07474596c522b66e69d8e0", "version_major": 2, "version_minor": 0 }, @@ -8985,7 +8984,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "758b295e2ebc4f818bf7634dc9e6511b", + "model_id": "e227733b97fd411fa91be941aa0826f3", "version_major": 2, "version_minor": 0 }, @@ -8999,7 +8998,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "70ed4e60b2724c27bba5e161f5d6c0e9", + "model_id": "b0de6788585a43d387ee192d3e919582", "version_major": 2, "version_minor": 0 }, @@ -9013,7 +9012,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1838ceec52264c5b9ef4bbf089932af4", + "model_id": "95f701a89b174f96a7121b1741fcb9fe", "version_major": 2, "version_minor": 0 }, @@ -9027,7 +9026,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c8ab1adbbefd432f84ccff998e3382de", + "model_id": "d138f67a0d8d44b69b94c79290ab60fa", "version_major": 2, "version_minor": 0 }, @@ -9041,7 +9040,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6e5346be07274ca9b3124ad9db4e0a6d", + "model_id": "472095f2f7de47dca63bb953593f60a9", "version_major": 2, "version_minor": 0 }, @@ -9055,7 +9054,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "626e911567f949d5bb8aa78b6b60f934", + "model_id": "d696f828b464421c95874bae379a6fa0", "version_major": 2, "version_minor": 0 }, @@ -9069,7 +9068,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f6d5ce4338784c1cbdaf100334b1407b", + "model_id": "a92efff5798b4681b9d9de929e5f6336", "version_major": 2, "version_minor": 0 }, @@ -9083,7 +9082,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c810e6fd3ceb4568ae78b53fa213914e", + "model_id": "289e5bce5f284ce99e064521ce0e05a9", "version_major": 2, "version_minor": 0 }, @@ -9097,7 +9096,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "afc2246d6e184b538ecfe056dc38f16d", + "model_id": "fdd3f827c9c34a3190aba38b1b13c21f", "version_major": 2, "version_minor": 0 }, @@ -9111,7 +9110,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "61255356db634ba984e8844968f4a5e9", + "model_id": "d99ecb21f9e54c9fb262b29adde16bd0", "version_major": 2, "version_minor": 0 }, @@ -9125,7 +9124,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "02f1a079b35a44d89dfce052a355c17a", + "model_id": "725a40f03b734c21b8b8e67b3212718f", "version_major": 2, "version_minor": 0 }, @@ -9139,7 +9138,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cb0fb5da2654482ebe196bf0f1751b7f", + "model_id": "640019ee89d047fd8725565835db0eaf", "version_major": 2, "version_minor": 0 }, @@ -9153,7 +9152,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bc33b4976a164058bceeb2cfb77eff20", + "model_id": "1580c64b5a874e6aad7a89abacd5cb60", "version_major": 2, "version_minor": 0 }, @@ -9167,7 +9166,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cba3bae12a654da39ea22a391431f2ff", + "model_id": "75eddb18a4c546b1a364977b91a38001", "version_major": 2, "version_minor": 0 }, @@ -9181,7 +9180,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "69f0c0bde038485e8c49934eb6ea819d", + "model_id": "96302a61558d40549b7802f4c44263eb", "version_major": 2, "version_minor": 0 }, @@ -9195,7 +9194,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ac8fff761b724c6cb58569db5feeeaa5", + "model_id": "fb7dd989673a4223b66345ef77406828", "version_major": 2, "version_minor": 0 }, @@ -9209,7 +9208,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d0cdf39392d24750901d79aa4bef1a76", + "model_id": "6e74c6d1b7c64e4596a655a0fbaf1bfb", "version_major": 2, "version_minor": 0 }, @@ -9223,7 +9222,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1a0d550efbba47d88357781f7b68e073", + "model_id": "d716d0b7820d475ca7653959b52d5450", "version_major": 2, "version_minor": 0 }, @@ -9237,7 +9236,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "286d953141b24199a4253f9fc85b6f82", + "model_id": "137da5f57ba84efdb51aff612b72db01", "version_major": 2, "version_minor": 0 }, @@ -9251,7 +9250,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "67cf98d2686948a6b3bd39efb55b3ef4", + "model_id": "bd227089abe34ebda36b2d18df87a86a", "version_major": 2, "version_minor": 0 }, @@ -9265,7 +9264,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "608086150668499e85ab742d06ea4ebd", + "model_id": "044b5721d12d4dadbc68f2e1ef6db71a", "version_major": 2, "version_minor": 0 }, @@ -9279,7 +9278,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "021bf402711e428b97a3e2e96dfcb49e", + "model_id": "cc86818b06a740479b3157b29a1cb18e", "version_major": 2, "version_minor": 0 }, @@ -9293,7 +9292,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e0a7bb5628c944b4b570907e91ee7248", + "model_id": "dd634e6fc883498cadcb00911c514371", "version_major": 2, "version_minor": 0 }, @@ -9307,7 +9306,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "46c080135dd7438ea38e749bbe0cc747", + "model_id": "3a52574849754ad5b349a2ef52a33722", "version_major": 2, "version_minor": 0 }, @@ -9321,7 +9320,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4ca53ff274f84b3a9c88ace97834f8c5", + "model_id": "35f1a57c0f6147ce81b036c866a17275", "version_major": 2, "version_minor": 0 }, @@ -9335,7 +9334,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "373a0410ec8444ad957a468cefb21b42", + "model_id": "3cb251ea1f6a4ae7a87fb959e362d392", "version_major": 2, "version_minor": 0 }, @@ -9349,7 +9348,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b67298bbb00b47d290167050e011d20c", + "model_id": "4e12dfd333064cf5a1fffa8ab56f67a6", "version_major": 2, "version_minor": 0 }, @@ -9363,7 +9362,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1dcdd15fe16d401cacf14f9a6f151a17", + "model_id": "73e3283065a94da9b0de1b38f87eb801", "version_major": 2, "version_minor": 0 }, @@ -9377,7 +9376,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "43883ea84b364edea1d9fe08e2db75d8", + "model_id": "d2755e57697a4a01b6514fdba5578bec", "version_major": 2, "version_minor": 0 }, @@ -9391,7 +9390,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0e6e2306c5e043cd98d2c5f41d6fba33", + "model_id": "f8f3787f489f46959322dac484b7ed93", "version_major": 2, "version_minor": 0 }, @@ -9405,7 +9404,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "31ac9e15ce594f32b36c8898e6500bc9", + "model_id": "f24824825bf644ae831c0e922e16a6c7", "version_major": 2, "version_minor": 0 }, @@ -9419,7 +9418,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6f20edbc41064e44a166abb5c43d4304", + "model_id": "9abde42fb6564285aef92cdc78ac08a4", "version_major": 2, "version_minor": 0 }, @@ -9433,7 +9432,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e6965e8c00a3426ba8206bd8ddbe62b3", + "model_id": "18ab584d1482478b9b7d34e90db79dd1", "version_major": 2, "version_minor": 0 }, @@ -9447,7 +9446,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6b0624ec65fc4ce1abc177b512766854", + "model_id": "7b030704b1b545fcad5ee48c27c6b90c", "version_major": 2, "version_minor": 0 }, @@ -9461,7 +9460,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c63fe05c857b4052a9aeaca8f092d047", + "model_id": "c47f07fcd58847b1b24f383546eb653c", "version_major": 2, "version_minor": 0 }, @@ -9475,7 +9474,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e949d28f416d47b59fd403bfea38687b", + "model_id": "f99c0e8c4b65436dafa5c2a9a5452e06", "version_major": 2, "version_minor": 0 }, @@ -9489,7 +9488,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "11797220658a4b4fbf505ffa9118a10a", + "model_id": "24f347e1c972488ab6d64bcb07757238", "version_major": 2, "version_minor": 0 }, @@ -9503,7 +9502,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7813aa85a7314b2e8df4b6db5580e21f", + "model_id": "cc6b7ff2a86c41cca3a9b423c0297b69", "version_major": 2, "version_minor": 0 }, @@ -9517,7 +9516,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2c6ad5889d0b4c69a5847eaab80d1a8e", + "model_id": "eeff56e6de874ca3bbacdf08fbcead78", "version_major": 2, "version_minor": 0 }, @@ -9531,7 +9530,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f7f8f3aceca14e2b9d6f172a3be239b3", + "model_id": "2253d5fd390a4ba1b32e8fd8639187bc", "version_major": 2, "version_minor": 0 }, @@ -9545,7 +9544,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d6910bf855634072b7b5e451ae13e1d5", + "model_id": "dc58353b22e14f9bb332e8a38b77a717", "version_major": 2, "version_minor": 0 }, @@ -9559,7 +9558,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2cb6739f919e40e4ab59d37b2eb4f4e3", + "model_id": "caac960a2e374b8fb4bfd726a3b20235", "version_major": 2, "version_minor": 0 }, @@ -9573,7 +9572,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2f828a85bd9846be86f63bfe87807643", + "model_id": "debee1aed4cc40d5b303d02eedbdfc41", "version_major": 2, "version_minor": 0 }, @@ -9587,7 +9586,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "91acc5ec90d542fd91e2fa1a60c2b472", + "model_id": "49af03e929d149319965f79777b874d7", "version_major": 2, "version_minor": 0 }, @@ -9601,7 +9600,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cc002d7048f34829bf0e153de53ec761", + "model_id": "518f016e8418473fa5c367ba4782ea70", "version_major": 2, "version_minor": 0 }, @@ -9615,7 +9614,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c18ba9a746364e29b913561d638c3657", + "model_id": "d5d84c78937e4e86809c6752d2ab9b34", "version_major": 2, "version_minor": 0 }, @@ -9629,7 +9628,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "592ebdfedc0c4e8fadfd0d8070088221", + "model_id": "d0e7561ad6254c608e8ccbe9419bf13d", "version_major": 2, "version_minor": 0 }, @@ -9643,7 +9642,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8660bae7cde74d19be0473f0e5ee22e3", + "model_id": "62bf8c5f5e884276b3423cb35af947cc", "version_major": 2, "version_minor": 0 }, @@ -9657,7 +9656,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0aa4a50bce0748dbbf9fb78d3caf595d", + "model_id": "09fbe3b2afb844e087c8b8131940f52f", "version_major": 2, "version_minor": 0 }, @@ -9671,7 +9670,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "78cc5764f0b44b9fb718eb88b75e175d", + "model_id": "248d1480e07844f5aae809b8d75f6f05", "version_major": 2, "version_minor": 0 }, @@ -9685,7 +9684,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "65233da35c0b4a20a9745a8f0a5da902", + "model_id": "b16a871746b7454fa6dbf640904fba60", "version_major": 2, "version_minor": 0 }, @@ -9699,7 +9698,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "64c05f6c181a44d29a51ac96098f7bf8", + "model_id": "3080997668ed41d9ab15a00e2e56022a", "version_major": 2, "version_minor": 0 }, @@ -9713,7 +9712,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8adea85b3c844d31befda6c9b8873c41", + "model_id": "4788ab535ba14e80a1f6847da6310b78", "version_major": 2, "version_minor": 0 }, @@ -9727,7 +9726,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3bdb272e874045f3ac0edcb0a987724b", + "model_id": "f8c7af5af17445b7a9af29dcf422e74f", "version_major": 2, "version_minor": 0 }, @@ -9741,7 +9740,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4bf7256b41f14f37b97415cef52309da", + "model_id": "c5e43276790a42fda94871a6b05d611a", "version_major": 2, "version_minor": 0 }, @@ -9755,7 +9754,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "74d54ca9ec124a879e927167eb24682f", + "model_id": "801b75b2e42742d6bd8680b776df8e35", "version_major": 2, "version_minor": 0 }, @@ -9769,7 +9768,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a523ab0c7c864663840a42f03089040b", + "model_id": "a00c72e3f166473a876f02fec7326ff9", "version_major": 2, "version_minor": 0 }, @@ -9783,7 +9782,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6fa0919d758b43ff9156627fab054600", + "model_id": "66c4ce98f5ba4957b673c1969ac1ec6b", "version_major": 2, "version_minor": 0 }, @@ -9797,7 +9796,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "80ecf1da2dd340a7aa6136aa43e7655d", + "model_id": "65829521a0704628ad14ef78741bbfc8", "version_major": 2, "version_minor": 0 }, @@ -9811,7 +9810,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4cc8c92b9e224ebeab44e4a14df7179b", + "model_id": "fab5d683ba714ad58a9aab8de4df7b4f", "version_major": 2, "version_minor": 0 }, @@ -9825,7 +9824,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c9fc2259c77a467fb5abc0f4422e8dc9", + "model_id": "e042dbbd1baa44fa9f73d06426c862ef", "version_major": 2, "version_minor": 0 }, @@ -9839,7 +9838,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9c0623c653894e629bb4bbab64c0fe0b", + "model_id": "9b23da050f7e4d928362df6059d09c58", "version_major": 2, "version_minor": 0 }, @@ -9853,7 +9852,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f30c449b45314a988d24ef7b456e4422", + "model_id": "b1f1ad4e73bf410497c46c1e3d4ef017", "version_major": 2, "version_minor": 0 }, @@ -9867,7 +9866,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "77ad20ffc8a240acb93bafb56edfa9da", + "model_id": "95951bcd163a48a083e71524e3c8c80f", "version_major": 2, "version_minor": 0 }, @@ -9881,7 +9880,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f26b8c97f5b74aeb837cf5550934dad2", + "model_id": "bfd23af6b76b4c66bb24b6c0af0151db", "version_major": 2, "version_minor": 0 }, @@ -9895,7 +9894,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1b14fe9c7b2640e4a732181e4891d04d", + "model_id": "a620323d378841ffa3fb4e8af6b7b677", "version_major": 2, "version_minor": 0 }, @@ -9909,7 +9908,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ebd93c6972e24dcc87f97210c9226ec5", + "model_id": "5c140c009d62482faf2bb955304ddfb5", "version_major": 2, "version_minor": 0 }, @@ -9923,7 +9922,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d2b14ad1b9704bd0bc3b958aa8d3122f", + "model_id": "eec96bca2672471fa10edafc612715f9", "version_major": 2, "version_minor": 0 }, @@ -9937,7 +9936,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "11760a605a8c4595a561f565072d3912", + "model_id": "13d227699d96405e9672968a117dd835", "version_major": 2, "version_minor": 0 }, @@ -9951,7 +9950,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "efc5f8437a284a4dbfbc1eababe72f5c", + "model_id": "bdf0d51cecf64b6b88b2189e61e2697d", "version_major": 2, "version_minor": 0 }, @@ -9965,7 +9964,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fca92dc2b3314004b806de3f0476982d", + "model_id": "3663a9cc5dd6492c838b8856ee3db172", "version_major": 2, "version_minor": 0 }, @@ -9979,7 +9978,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0c57faff8c244782b4c634632c79fd6d", + "model_id": "5b8a90932c5c43449baddb012d3f8d2f", "version_major": 2, "version_minor": 0 }, @@ -9993,7 +9992,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8b1608716da04764a9e79b15ff3b9cd0", + "model_id": "acfe2fcbcbeb40b689a942d4a384e81e", "version_major": 2, "version_minor": 0 }, @@ -10007,7 +10006,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "34b6076acc7c46cd85e0580ed62051f7", + "model_id": "a41e9df7b5be41f680c2486bb036eac0", "version_major": 2, "version_minor": 0 }, @@ -10021,7 +10020,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "be9d5f1a1fc1411bac32b804ab4a55c6", + "model_id": "70cfd7e68ad546fca7b8b4fcb5fe112a", "version_major": 2, "version_minor": 0 }, @@ -10035,7 +10034,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "15ba55fa813d429d8c096aeab77dac6d", + "model_id": "cc6d28f7b6674cc78526f2a04a232f87", "version_major": 2, "version_minor": 0 }, @@ -10049,7 +10048,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "82981797edd24e66a9c7f595777993b3", + "model_id": "ae26f55dfe5d44cd9fae433fb8a3ed46", "version_major": 2, "version_minor": 0 }, @@ -10063,7 +10062,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f497013dca4544cf9027f8c57b9d3862", + "model_id": "b61738f2417244b6b7df1ebb3b3f24d7", "version_major": 2, "version_minor": 0 }, @@ -10077,7 +10076,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "18ae423604124c14ad1c546040258830", + "model_id": "fdbf1b51bbd54898b58a2de9f695d5ba", "version_major": 2, "version_minor": 0 }, @@ -10091,7 +10090,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bbcf1925befb44f68ae7c057b87d47fc", + "model_id": "d438be1b459e4f0f90e1a26704baa0f1", "version_major": 2, "version_minor": 0 }, @@ -10105,7 +10104,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3390fcad4b5a4ed7b0962a3c40c08c6c", + "model_id": "164a559d88cd48c58bb43f99cf5819fb", "version_major": 2, "version_minor": 0 }, @@ -10119,7 +10118,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8b2672dda8714e74b34df403f44958fb", + "model_id": "e142ec45c48e400bbf4cf7dbc8b94e39", "version_major": 2, "version_minor": 0 }, @@ -10133,7 +10132,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8f19a36be4da4760be75497c7125b8f0", + "model_id": "b98239d615c44f9280cd53bf430b38ef", "version_major": 2, "version_minor": 0 }, @@ -10147,7 +10146,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4a2a1c7d9d20421e9e92870a6a2e9660", + "model_id": "ee3012ec548c4468ab19394fcc61dfe1", "version_major": 2, "version_minor": 0 }, @@ -10161,7 +10160,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f0286c8429b84e2ab0c163e1b4eef1d0", + "model_id": "59abff92475945148512c124b31620ae", "version_major": 2, "version_minor": 0 }, @@ -10175,7 +10174,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "dd58ef8e610842f2b301171926de7182", + "model_id": "10742df4535742c8acdcdbea8d8d6a02", "version_major": 2, "version_minor": 0 }, @@ -10189,7 +10188,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "539ca6d6148543548ecd3dcf70ed7c11", + "model_id": "7e3d33d2a59f4e2c8413b43cfaee41d1", "version_major": 2, "version_minor": 0 }, @@ -10203,7 +10202,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "06e7f0d966004f43b3be4b20ccedee56", + "model_id": "1fd03ae4594b4574a55f06d248d8b61a", "version_major": 2, "version_minor": 0 }, @@ -10217,7 +10216,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fda62ae60c6c4677a6ea5636f934dc92", + "model_id": "976c6fee189c41b4b5445895fb180c8d", "version_major": 2, "version_minor": 0 }, @@ -10231,7 +10230,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3baf1bb80b444609bbfdea5378d88b16", + "model_id": "198e1fa4f5124895bc0ee188984ea726", "version_major": 2, "version_minor": 0 }, @@ -10245,7 +10244,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f668c7e605ea48fb8c8ccc3ce9942537", + "model_id": "c78ca1847595417aa71358a1c1b1a4b0", "version_major": 2, "version_minor": 0 }, @@ -10259,7 +10258,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8ab646cb72bc4395ab928bd90d12876f", + "model_id": "af7a5a5a341348f2a0be2f3e77656549", "version_major": 2, "version_minor": 0 }, @@ -10273,7 +10272,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "81a2b942d66144f394a057e50cf01f7c", + "model_id": "b5ab2cc2a47b42828c7a6780a6db2e00", "version_major": 2, "version_minor": 0 }, @@ -10287,7 +10286,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a2c733eb3a2f40e0b80254de8610baa9", + "model_id": "f972c01912c545948b56ea640af2c5b0", "version_major": 2, "version_minor": 0 }, @@ -10301,7 +10300,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d3cee07e2b804c9f84e6d1c6985f6eb6", + "model_id": "213b3d4ee66d42e1b57a82d35b720112", "version_major": 2, "version_minor": 0 }, @@ -10315,7 +10314,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e7a1d5c5a3d2447b99b09d54782e92e4", + "model_id": "ddfc7dcdd1c94636929318d51a61e048", "version_major": 2, "version_minor": 0 }, @@ -10329,7 +10328,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2d6dff1e8e8d492c8020df32915020f6", + "model_id": "3fdce7be7f074ec589421caa0319862f", "version_major": 2, "version_minor": 0 }, @@ -10343,7 +10342,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1c58bb14675c42759eb18385d3f2c364", + "model_id": "180334cb0f4c4cc6a5f2eeedc55a986b", "version_major": 2, "version_minor": 0 }, @@ -10357,7 +10356,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6e846537940449eba9b3df06d6908d2c", + "model_id": "d2e9e0572d4c48bd9dcf25960be64cde", "version_major": 2, "version_minor": 0 }, @@ -10371,7 +10370,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "eaabc8c0805b4ce38620516da7b5dd2f", + "model_id": "0e26b9ff0a7642e0b8400f0a937eeb30", "version_major": 2, "version_minor": 0 }, @@ -10385,7 +10384,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0b54cea4ca634312ac62cef9554c2abd", + "model_id": "bf9537d5986b4aacad134c66a4242b0e", "version_major": 2, "version_minor": 0 }, @@ -10399,7 +10398,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7d538586b87440b89506a951ea660c85", + "model_id": "e4ab38c6e45d4628b56bbe5dac9458d7", "version_major": 2, "version_minor": 0 }, @@ -10413,7 +10412,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "06ff3bed3b2c44368623e1fe4d16c42d", + "model_id": "18e800771f6f439bb9f15de7edaf8274", "version_major": 2, "version_minor": 0 }, @@ -10427,7 +10426,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6034c4e13c63492399314dd1d0e86900", + "model_id": "ee30326da017481f94e780628f0ec74d", "version_major": 2, "version_minor": 0 }, @@ -10441,7 +10440,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1d2a3ec474f84d7dbd2b1d0811b5679a", + "model_id": "ebaaaf47fecb406facb8804280ed88e2", "version_major": 2, "version_minor": 0 }, @@ -10455,7 +10454,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "eedba0809dc948c6b8338bde323e79a5", + "model_id": "ac274611a2704a2ab1468b205859dfc1", "version_major": 2, "version_minor": 0 }, @@ -10469,7 +10468,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b476ab3908ea4301a13f5cc23ff44fa2", + "model_id": "41be5520b1964125872189d604272dc4", "version_major": 2, "version_minor": 0 }, @@ -10483,7 +10482,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "aff3135a532a4ee88010da77f492cf4d", + "model_id": "666d79b38fcd49c79cac956f8b2f7677", "version_major": 2, "version_minor": 0 }, @@ -10497,7 +10496,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ffe38591306e4351a4228d7f17d91a24", + "model_id": "2253e50224c642a7a56858b1c135213e", "version_major": 2, "version_minor": 0 }, @@ -10511,7 +10510,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2a1a7c1af8fa4e98b60723cbc3766c0b", + "model_id": "f01094a315c4420e9aba161bd526a1e0", "version_major": 2, "version_minor": 0 }, @@ -10525,7 +10524,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fb73984ee683427195a75edb8a65dfd1", + "model_id": "652fb20eb89245a8ac16173eeb553633", "version_major": 2, "version_minor": 0 }, @@ -10539,7 +10538,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7fed65b24c3e4cccb75b5e190e192e99", + "model_id": "92757d397a9944e9bf89a627d34d670a", "version_major": 2, "version_minor": 0 }, @@ -10553,7 +10552,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "40c7a7a509f94bbdb99ff06868239a58", + "model_id": "d4b73d5c186347d9a05f2486c5baafee", "version_major": 2, "version_minor": 0 }, @@ -10567,7 +10566,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "043b17d4db7c4a8c92529fac3371ae87", + "model_id": "4daeb823d61246a0aa572689807c117d", "version_major": 2, "version_minor": 0 }, @@ -10581,7 +10580,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9340de6a00d54d7e8efb980fb7a63b88", + "model_id": "4da85fb13a6241efa01e2e144209cd5f", "version_major": 2, "version_minor": 0 }, @@ -10595,7 +10594,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "69596ddf1da94aed9d62d104734a11ad", + "model_id": "6f4c663a0b6449828fcacf1d77b0fad1", "version_major": 2, "version_minor": 0 }, @@ -10609,7 +10608,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "83228734f253473ab9b36daa64130a36", + "model_id": "ada51e9d1ee84f7c8d7cda87a9fed382", "version_major": 2, "version_minor": 0 }, @@ -10623,7 +10622,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9fce07d5848d49b9acbd80959f48d055", + "model_id": "035517fa34c84edb8520548a6a6f5f2f", "version_major": 2, "version_minor": 0 }, @@ -10637,7 +10636,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "23ac188be0de4418997c43a01c865381", + "model_id": "ddc0d23180304537a5d5a408daed4159", "version_major": 2, "version_minor": 0 }, @@ -10651,7 +10650,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "81a145df7fda42b08319ec1963375f71", + "model_id": "c4c0bccb88c34e5da862f7bf33948498", "version_major": 2, "version_minor": 0 }, @@ -10665,7 +10664,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a006b6be707d4cf49143c0588abefcae", + "model_id": "27c5c425ce414190aae3c840ca8df1e0", "version_major": 2, "version_minor": 0 }, @@ -10686,7 +10685,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3a233b74289744058b15d52d3362d9ef", + "model_id": "23414392e3a74a4b8dff5fe1a30f6eec", "version_major": 2, "version_minor": 0 }, @@ -10745,7 +10744,7 @@ }, { "cell_type": "markdown", - "id": "3c78b138", + "id": "fc55d4f9", "metadata": {}, "source": [ "We could also fit a model without the `nn.RNN()` layer by just\n", @@ -10762,7 +10761,7 @@ { "cell_type": "code", "execution_count": 109, - "id": "5586a609", + "id": "c60876d7", "metadata": {}, "outputs": [], "source": [ @@ -10777,7 +10776,7 @@ }, { "cell_type": "markdown", - "id": "c1c361b4", + "id": "c7fc165f", "metadata": {}, "source": [ "Creating a data module follows a familiar pattern." @@ -10786,7 +10785,7 @@ { "cell_type": "code", "execution_count": 110, - "id": "b72ecb13", + "id": "282f7e1c", "metadata": {}, "outputs": [], "source": [ @@ -10799,7 +10798,7 @@ }, { "cell_type": "markdown", - "id": "32016e95", + "id": "310271e1", "metadata": {}, "source": [ "We build a `NonLinearARModel()` that takes as input the 20 features and a hidden layer with 32 units. The remaining steps are familiar." @@ -10808,7 +10807,7 @@ { "cell_type": "code", "execution_count": 111, - "id": "595df68b", + "id": "038fea74", "metadata": {}, "outputs": [], "source": [ @@ -10827,7 +10826,7 @@ { "cell_type": "code", "execution_count": 112, - "id": "e8142533", + "id": "68d309b2", "metadata": {}, "outputs": [], "source": [ @@ -10841,7 +10840,7 @@ }, { "cell_type": "markdown", - "id": "86d4e139", + "id": "998d317c", "metadata": {}, "source": [ "We continue with the usual training steps, fit the model,\n", @@ -10851,7 +10850,7 @@ { "cell_type": "code", "execution_count": 113, - "id": "47bdb236", + "id": "9fc113a1", "metadata": { "lines_to_next_cell": 0 }, @@ -10893,7 +10892,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f7abedb50db348d49e14abb6ac8ee82a", + "model_id": "6327380ca56a49628cb311d7382fe96d", "version_major": 2, "version_minor": 0 }, @@ -11194,7 +11193,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0ae34f21f0364f47ae24e5b0a0758062", + "model_id": "e9c0c0840a4e4fe3bd9aa771a035ec2a", "version_major": 2, "version_minor": 0 }, @@ -11251,7 +11250,7 @@ }, { "cell_type": "markdown", - "id": "51f435d5", + "id": "66cd716d", "metadata": {}, "source": [ " \n", @@ -11263,8 +11262,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "formats": "ipynb,Rmd", - "main_language": "python" + "main_language": "python", + "notebook_metadata_filter": "-all" }, "kernelspec": { "display_name": "Python 3 (ipykernel)",