diff --git a/.gitignore b/.gitignore
index dde0062..07a7fb9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -139,4 +139,14 @@ lightning_logs
*results.json
# lightning_logs
-lightning_logs
\ No newline at end of file
+lightning_logs
+
+# npz
+*.npz
+
+*.pt
+*.gz
+*ubyte
+
+# model ipynb_checkpoints
+*.ckpt
diff --git a/LICENSE b/LICENSE
index e9a7ee7..d94b63f 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
BSD 3-Clause License
-Copyright (c) 2020, juglab
+Copyright (c) 2021, juglab
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/README.md b/README.md
index a1a496f..1e274a1 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,82 @@
-astra-toolbox requires cuda 10.2: conda install -c astra-toolbox/label/dev astra-toolbox
+# Fourier Image Transformer
-conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch
+Tim-Oliver Buchholz1 and Florian Jug2
+1tibuch@mpi-cbg.de, 2florian.jug@fht.org
-Build Python package:
-`python setup.py bdist_wheel`
+Transformer architectures show spectacular performance on NLP tasks and have recently also been used for tasks such as
+image completion or image classification. Here we propose to use a sequential image representation, where each prefix of
+the complete sequence describes the whole image at reduced resolution. Using such Fourier Domain Encodings (FDEs), an
+auto-regressive image completion task is equivalent to predicting a higher resolution output given a low-resolution
+input. Additionally, we show that an encoder-decoder setup can be used to query arbitrary Fourier coefficients given a
+set of Fourier domain observations. We demonstrate the practicality of this approach in the context of computed
+tomography (CT) image reconstruction. In summary, we show that Fourier Image Transformer (FIT) can be used to solve
+relevant image analysis tasks in Fourier space, a domain inherently inaccessible to convolutional architectures.
-Build singularity recipe:
-`neurodocker generate singularity -b nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04 -p apt --copy /home/tibuch/Gitrepos/FourierImageTransformer/dist/fourier_image_transformers-0.1.24_zero-py3-none-any.whl /fourier_image_transformers-0.1.24_zero-py3-none-any.whl --miniconda create_env=fit conda_install='python=3.7 astra-toolbox pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch -c astra-toolbox/label/dev' pip_install='/fourier_image_transformers-0.1.24_zero-py3-none-any.whl' activate=true --entrypoint "/neurodocker/startup.sh python" > v0.1.24_zero.Singularity`
+Preprint: [arXiv](arXiv)
-Build singularity container:
-`sudo singularity build fit_v0.1.24_zero.simg v0.1.24_zero.Singularity`
+## FIT for Super-Resolution
+
+![SRes](figs/SRes.png)
+
+__FIT for super-resolution.__ Low-resolution input images are first transformed into Fourier space and then unrolled
+into an FDE sequence, as described in Section 3.1 of the paper. This FDE sequence can now be fed to a FIT, that,
+conditioned on this input, extends the FDE sequence to represent a higher resolution image. This setup is trained using
+an FC-Loss that enforces consistency between predicted and ground truth Fourier coefficients. During inference, the FIT
+is conditioned on the first 39 entries of the FDE, corresponding to (a,d) 3x Fourier binned input images. Panels (b,e)
+show the inverse Fourier transform of the predicted output, and panels (c,f) depict the corresponding ground truth.
+
+## FIT for Tomography
+
+![TRec](figs/TRec.png)
+
+__FIT for computed tomography.__ We propose an encoder-decoder based Fourier Image Transformer setup for tomographic
+reconstruction. In 2D computed tomography, 1D projections of an imaged sample (i.e. the columns of a sinogram) are
+back-transformed into a 2D image. A common method for this transformationis the filtered backprojection (FBP). Since
+each projection maps to a line of coefficients in 2D Fourier space, a limited number of projections in a sinogram leads
+to visible streaking artefacts due to missing/unobserved Fourier coefficients. The idea of our FIT setup is to encode
+all information of a given sinogram and use the decoder to predict missing Fourier coefficients. The reconstructed image
+is then computed via an inverse Fourier transform (iFFT) of these predictions. In order to reduce high frequency
+fluctuations in this result, we introduce a shallow conv-block after the iFFT (shown in black). We train this setup
+combining the FC-Loss, see Section 3.2 in the paper, and a conventional MSE-loss between prediction and ground truth.
+
+## Installation
+
+We use [fast-transformers](https://github.com/idiap/fast-transformers) as underlying transformer implementation. In our super-resolution experiments we use their
+`causal-linear` implementation, which uses custom CUDA code (prediction works without this custom code). This code is
+compiled during the installation of fast-transformers and it is necessary that CUDA and NVIDIA driver versions match.
+For our experiments we used CUDA 10.2 and NVIDIA driver 440.118.02.
+
+We recommend to install Fast Image Transformer into a new [conda](https://docs.conda.io/en/latest/miniconda.html)
+environment:
+
+`conda create -n fit python=3.7`
+
+Next activate the new environment.:
+
+`conda activate fit`
+
+Then we install PyTorch for CUDA 10.2:
+
+`conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch`
+
+Followed by installing fast-transformers:
+
+`pip install --user pytorch-fast-transformers`
+
+Now we have to install the `astra-toolbox`:
+
+`conda install -c astra-toolbox/label/dev astra-toolbox`
+
+And finally we install Fourier Image Transformer:
+
+`pip install fourier-image-transformer`
+
+Start the jupyter server:
+
+`jupyter notebook`
+
+
+## Cite
+```
+@{}
+```
diff --git a/examples/CelebA - SRes Example.ipynb b/examples/CelebA - SRes Example.ipynb
deleted file mode 100644
index 5d62fb4..0000000
--- a/examples/CelebA - SRes Example.ipynb
+++ /dev/null
@@ -1,1665 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "from fit.datamodules.super_res.SRecDataModule import CelebASResFourierTargetDataModule\n",
- "from fit.utils import convert2FC\n",
- "from fit.utils.tomo_utils import get_img_coords_pol\n",
- "\n",
- "from fit.modules.SResTransformerModule import SResTransformerModule\n",
- "\n",
- "from matplotlib import pyplot as plt\n",
- "\n",
- "import torch\n",
- "\n",
- "import numpy as np\n",
- "\n",
- "from pytorch_lightning import Trainer, seed_everything\n",
- "from pytorch_lightning.callbacks import ModelCheckpoint"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "22122020"
- ]
- },
- "execution_count": 2,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "seed_everything(22122020)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [],
- "source": [
- "dm = CelebASResFourierTargetDataModule(root_dir='/data/celeb/', batch_size=32)\n",
- "dm.setup()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [],
- "source": [
- "r, phi, flatten_order, order = get_img_coords_pol(img_shape=dm.gt_shape, det_len=dm.gt_shape)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [],
- "source": [
- "n_heads = 8\n",
- "d_query = 32"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [],
- "source": [
- "model = SResTransformerModule(d_model=n_heads*d_query, \n",
- " img_shape=dm.gt_shape,\n",
- " y_coords_img=r,\n",
- " x_coords_img=phi,\n",
- " dst_flatten_order=flatten_order,\n",
- " dst_order=order,\n",
- " loss='prod',\n",
- " lr=0.0001, weight_decay=0.01, n_layers=8,\n",
- " n_heads=n_heads, d_query=d_query, dropout=0.1, attention_dropout=0.1)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {
- "scrolled": false
- },
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "GPU available: True, used: True\n",
- "TPU available: None, using: 0 TPU cores\n",
- "LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n"
- ]
- }
- ],
- "source": [
- "trainer = Trainer(max_epochs=100, \n",
- " gpus=1,\n",
- " checkpoint_callback=ModelCheckpoint(\n",
- " filepath=None,\n",
- " save_top_k=1,\n",
- " verbose=False,\n",
- " save_last=True,\n",
- " monitor='Train/avg_val_loss',\n",
- " mode='min',\n",
- " prefix='best_val_loss_'\n",
- " ), \n",
- " deterministic=True)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "scrolled": false
- },
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "\n",
- " | Name | Type | Params\n",
- "----------------------------------------------\n",
- "0 | sres | SResTransformerTrain | 6.3 M \n",
- "----------------------------------------------\n",
- "6.3 M Trainable params\n",
- "0 Non-trainable params\n",
- "6.3 M Total params\n",
- "/home/tbuchhol/Programs/miniconda3/envs/ft/lib/python3.7/site-packages/pytorch_lightning/utilities/distributed.py:49: UserWarning: The dataloader, val dataloader 0, does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` (try 56 which is the number of cpus on this machine) in the `DataLoader` init to improve performance.\n",
- " warnings.warn(*args, **kwargs)\n"
- ]
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validation sanity check'), FloatProgress(value=1.0, bar_style='info', layout=Layout…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/home/tbuchhol/.local/lib/python3.7/site-packages/torch/nn/functional.py:1628: UserWarning: nn.functional.tanh is deprecated. Use torch.tanh instead.\n",
- " warnings.warn(\"nn.functional.tanh is deprecated. Use torch.tanh instead.\")\n",
- "/home/tbuchhol/Programs/miniconda3/envs/ft/lib/python3.7/site-packages/pytorch_lightning/utilities/distributed.py:49: UserWarning: The dataloader, train dataloader, does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` (try 56 which is the number of cpus on this machine) in the `DataLoader` init to improve performance.\n",
- " warnings.warn(*args, **kwargs)\n"
- ]
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "1cdc38b079614f658c4348fa3e3c98ab",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Training'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), max…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/home/tbuchhol/Gitrepos/FourierImageTransformer/fit/utils/RAdam.py:119: UserWarning: This overload of addcmul_ is deprecated:\n",
- "\taddcmul_(Number value, Tensor tensor1, Tensor tensor2)\n",
- "Consider using one of the following signatures instead:\n",
- "\taddcmul_(Tensor tensor1, Tensor tensor2, *, Number value) (Triggered internally at /pytorch/torch/csrc/utils/python_arg_parser.cpp:882.)\n",
- " exp_avg_sq.mul_(beta2).addcmul_(1 - beta2, grad, grad)\n"
- ]
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Epoch 65: reducing learning rate of group 0 to 5.0000e-05.\n"
- ]
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Epoch 78: reducing learning rate of group 0 to 2.5000e-05.\n"
- ]
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Epoch 89: reducing learning rate of group 0 to 1.2500e-05.\n"
- ]
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(HTML(value='Validating'), FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), m…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "Saving latest checkpoint...\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Epoch 100: reducing learning rate of group 0 to 6.2500e-06.\n",
- "\n"
- ]
- }
- ],
- "source": [
- "trainer.fit(model, datamodule=dm);"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.7.9"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/examples/CelebA - SRes Figures.ipynb b/examples/CelebA - SRes Figures.ipynb
deleted file mode 100644
index 5a0f265..0000000
--- a/examples/CelebA - SRes Figures.ipynb
+++ /dev/null
@@ -1,1137 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "from fit.datamodules.super_res.SRecDataModule import CelebASResFourierTargetDataModule\n",
- "from fit.utils import convert2FC\n",
- "from fit.utils.tomo_utils import get_img_coords_pol\n",
- "\n",
- "from fit.modules.SResTransformerModule import SResTransformerModule\n",
- "\n",
- "from matplotlib import pyplot as plt\n",
- "\n",
- "import torch\n",
- "\n",
- "import numpy as np\n",
- "\n",
- "from pytorch_lightning import Trainer, seed_everything\n",
- "from pytorch_lightning.callbacks import ModelCheckpoint\n",
- "\n",
- "from matplotlib import rc\n",
- "from tqdm.notebook import tqdm\n",
- "\n",
- "from matplotlib import gridspec"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "22122020"
- ]
- },
- "execution_count": 2,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "seed_everything(22122020)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [],
- "source": [
- "dm = CelebASResFourierTargetDataModule(root_dir='/data/celeb/', batch_size=1)\n",
- "dm.setup()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [],
- "source": [
- "r, phi, flatten_order, order = get_img_coords_pol(img_shape=dm.gt_shape, det_len=dm.gt_shape)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [],
- "source": [
- "n_heads = 8\n",
- "d_query = 32"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [],
- "source": [
- "model = SResTransformerModule(d_model=n_heads*d_query, \n",
- " img_shape=dm.gt_shape,\n",
- " y_coords_img=r,\n",
- " x_coords_img=phi,\n",
- " dst_flatten_order=flatten_order,\n",
- " dst_order=order,\n",
- " loss='prod',\n",
- " lr=0.0001, weight_decay=0.01, n_layers=8,\n",
- " n_heads=n_heads, d_query=d_query, dropout=0.1, attention_dropout=0.1)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [],
- "source": [
- "model.load_test_model('/home/tbuchhol/HaarVAE/FIT_experiments/iccv_experiments/CelebA_SRes/version_8/checkpoints/best_val_loss_-epoch=66-step=41874.ckpt')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "5000"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "len(dm.test_dataloader())"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [],
- "source": [
- "dm.batch_size = 5000"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [],
- "source": [
- "for fc, (mag_min, mag_max) in dm.test_dataloader():\n",
- " break"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "16"
- ]
- },
- "execution_count": 11,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "dm.gt_shape // 4 + 1"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [],
- "source": [
- "x, y = np.meshgrid(range(model.dft_shape[1]), range(-model.dft_shape[0] // 2, model.dft_shape[0] // 2))\n",
- "radii = np.roll(np.sqrt(x ** 2 + y ** 2, dtype=np.float32), model.dft_shape[0] // 2, 0)\n",
- "num_shells = 16\n",
- "model.input_seq_length = np.sum(np.round(radii) < num_shells)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [],
- "source": [
- "model = model.cuda()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {
- "scrolled": true
- },
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/home/tbuchhol/.local/lib/python3.7/site-packages/torch/nn/functional.py:1628: UserWarning: nn.functional.tanh is deprecated. Use torch.tanh instead.\n",
- " warnings.warn(\"nn.functional.tanh is deprecated. Use torch.tanh instead.\")\n"
- ]
- }
- ],
- "source": [
- "x_fc = fc[:, model.dst_flatten_order][:, :model.input_seq_length]\n",
- "pred_fc = model.predict_with_recurrent(x_fc.cuda(), model.input_seq_length, fc.shape[1])\n",
- "# pred_img = model.convert2img(fc=pred_fc, mag_min=mag_min, mag_max=mag_max)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [],
- "source": [
- "lowres, pred_img, gt = model.get_lowres_pred_gt(fc.cuda(), mag_min.cuda(), mag_max.cuda())"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [],
- "source": [
- "pred_fc = pred_fc.detach().cpu()\n",
- "lowres = lowres.detach().cpu()\n",
- "pred_img = pred_img.detach().cpu()\n",
- "gt = gt.detach().cpu()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {},
- "outputs": [],
- "source": [
- "x, y = np.meshgrid(range(model.dft_shape[1]), range(-model.dft_shape[0] // 2, model.dft_shape[0] // 2))\n",
- "radii = np.roll(np.sqrt(x ** 2 + y ** 2, dtype=np.float32), model.dft_shape[0] // 2, 0)\n",
- "index = np.round(radii)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "metadata": {},
- "outputs": [],
- "source": [
- "def FSC(model, a, b, pixel_size=1, threshold=0.5):\n",
- " fft_a = torch.fft.rfftn(a)\n",
- " fft_b = torch.fft.rfftn(b)\n",
- " AB = torch.multiply(fft_a, torch.conj(fft_b))\n",
- " AA = torch.multiply(fft_a, torch.conj(fft_a))\n",
- " BB = torch.multiply(fft_b, torch.conj(fft_b))\n",
- "\n",
- " x, y = torch.meshgrid(torch.arange(-model.dft_shape[0] // 2, model.dft_shape[0] // 2, dtype=torch.float32), torch.arange(model.dft_shape[1], dtype=torch.float32))\n",
- " radii = torch.roll(torch.sqrt(x ** 2 + y ** 2), model.dft_shape[0] // 2, 0)\n",
- " index = torch.round(radii)\n",
- "\n",
- " AB_ = []\n",
- " AA_ = []\n",
- " BB_ = []\n",
- " for i in range(model.dft_shape[1]):\n",
- " indices = torch.where(index == i)\n",
- " AB_.append(sum(AB[indices])/len(indices[0]))\n",
- " AA_.append(sum(AA[indices])/len(indices[0]))\n",
- " BB_.append(sum(BB[indices])/len(indices[0]))\n",
- "\n",
- " AB_ = torch.tensor(AB_)\n",
- " AA_ = torch.tensor(AA_)\n",
- " BB_ = torch.tensor(BB_)\n",
- "\n",
- " fsc = abs(AB_)/torch.sqrt(abs(torch.multiply(AA_,BB_)))\n",
- " x = torch.arange(a.shape[0]/2 + 1)/(a.shape[0]/2) * (1/(pixel_size*2))\n",
- " \n",
- " def get_idx_above():\n",
- " idx = fsc.shape[0]\n",
- " for i in range(fsc.shape[0]):\n",
- " if fsc[i] < threshold:\n",
- " return i - 1\n",
- " \n",
- " def get_idx_below():\n",
- " idx = fsc.shape[0]\n",
- " for i in range(fsc.shape[0]):\n",
- " if fsc[i] < threshold:\n",
- " return i\n",
- " \n",
- " if torch.any(fsc <= threshold):\n",
- " idx_above = get_idx_above()\n",
- " idx_below = get_idx_below()\n",
- " above_threshold = fsc[idx_above]\n",
- " below_threshold = fsc[idx_below]\n",
- "\n",
- " frac = (above_threshold - 0.5)/(above_threshold-below_threshold)\n",
- "\n",
- " x_above = x[idx_above]\n",
- " x_below = x[idx_below]\n",
- " one_over_resolution_span = x_above - x_below\n",
- "\n",
- " res = ( x_above - one_over_resolution_span * frac)**(-1)\n",
- " else:\n",
- " res = torch.tensor(float('NaN'))\n",
- " \n",
- " return fsc, x, res"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 19,
- "metadata": {},
- "outputs": [],
- "source": [
- "#rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})\n",
- "rc('font',**{'family':'serif','serif':['Times'], 'size':14})\n",
- "rc('text', usetex=True)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "metadata": {},
- "outputs": [],
- "source": [
- "from fit.utils.utils import denormalize_amp\n",
- "from fit.utils.tomo_utils import pol2cart"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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ESeh1Z07d7b6prqRauCtW7di2xdeeCHGSWibRLI7XL58eRCjnKf1IWHS1Pebb74Z2544cSLGU52vyvN9/fr12Jbmm8RkkxAzicNSvCNoef/+/VbfnX1C4vx79uyJ8XSGkmgs1YIkUExrQPNEIsdJ+JSESalmktD25s2bB7Gu2CitTRo3jaNjTEBCnOluU8V3jdQ37Ws6b+l9SPR6NUm5me4U3XtQR4i4exfqjKUriNwZS+cOQgLj3/72t2P8f/2v/zVx3yRyTLmd7rqUq13DjDQntJc660hz3f29keJdIeKUO53fN1W92kV907onoelOPXtU+zRX3Xf/dfNxiBMrRCwiIiIiIiIi8luGH21EREREREREREaIH21EREREREREREaIH21EREREREREREaIH21EREREREREREZIyz1qZWVlYreVrntPRx2c+qA4qWx3xkHuQuk9ydGBnFNOnz49iJGq/Pe+970Yv3TpUoyncZMDEL17ineU1at4TtJYaHy0jqlvUoSfhqsU9U3jTurqXXc1UmLvqM2TYn1yX1lcXIxtyfmC3AeS88yzzz4b25IjQaLrSED5l+LUlui4IEzD+anrntflscceq6effnoQ379//yBG60AORbOzszGeXDHIjYegPdVxKCInnZTHn/nMZ2JbcgB64403YvyHP/zhIPbqq6/GtumsqOLak1yOaNwUJ+eTubm5QYzym/ZUcjTasGFDbNupr1W5Zm7ZsiW2JWcqep+0F+hsIXer5PjVdeejWpDOSjo/z5071+r785///MTje+6552L8ySefjPF0j6F8oPqQ1p3Wt+t+l+oavTudt5Svu3btao3lo0JusJ37XvcemOg6PHX66LpepWfSOGh/pBz50z/909g21f4qdhLrOKPRWZbykmoDzR+dFZM+r6qfU522Hecienda31S7unfuaeQ8ncu3b98exMhZk84mmr/klEdnFsXTXaCbC9O4R38crlKJ7jj8SxsRERERERERkRHiRxsRERERERERkRHiRxsRERERERERkRHiRxsRERERERERkRHiRxsRERERERERkRHSco+qymrYScmZ1KdJkZviqZ+OG0hVHnNX0ZzUqpNzAL17cvKoykrxp06dim3JPeTBgwcxntS+Sa2a5iSplD98+DC27bgc0TNprilHUt+kzk590/iSAn/HaaqKVdQTXbX5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T5qj1CfrbUREREREREREPiH40UZEREREREREZIT40UZEREREREREZIT40UZEREREREREZIT40UZEREREREREZIS0bUiSmjMpdXcgB4gUJ1eRjtI0qVUTyTmlqurkyZOD2He/+93YllxzkiJ3V82d3j0piZOaO5H67ijTUx9EVy29Q7fvjvMT7YOkFN9Rt6dx0Fi67mpPPfXUIEaq/OSgRM+8f//+IEYuOnNzczG+Z8+eQYycgkgln+a1495A657ilO9d96i07p299KuwsrISa0R6LuUlzTeNPTnb0JyQy0rHmYrcgs6ePRvj3/rWtwaxH/zgB7HtO++8E+O3b9+O8ZSzND56R6rpVKcTtLfp7EvOT+RuSKT9kBxcqvhdaE+l9pR/5H5H83316tVBLLncVeX6WpVdjqgtuYbduHEjxpNb15EjR2JbWrNdu3bFeJoTcnf58MMPYzy5sVXlnKJ1p7lKe4Ecpahvep90ltPadO/Fac3279/f6qNLGmOqu3Q/6rq7TIPO+dc9Q/7Vv/pXg9j3vve92Jbc9lIt6d4Z6R07LoudOzrdm+gcovGlsXSdNJPbHjne0jvS76T0PnR2Ul1M80fnB7lEkaNgIv0+rOq5b9Fc0z2f6naqufSOVOPTGvzxH/9xbNtxzSW6v1U7rGadI/xLGxERERERERGREeJHGxERERERERGREeJHGxERERERERGREeJHGxERERERERGREdIWIk6iPr9uMR56HokWkShVgkSLSMhuaWlpECOBMhKUSkJdHVHNqumIMJNgWOqjK37WEVzrirMl0SwaR1eIOPXTEcGivknAtSOgRu1pniiehNjoHUlArSO8m8SJq7IQY1XVtWvXBjESfqN5pflLuUO5TXF6ZodOvq62EPHMzEysEal+kZAzzTcJpyYR3DVr1sS2JJJHQrppLJRr58+fj/Hr169PFKuqunjxYownkdWqqrVr1w5iKeerWBSYRAk7ZzOdC7TGSaw1vcujxpGeuby8HNvS+U7vnsQrz507F9sSlMcJuiPQfk3joxpDdwfKqdnZ2UGM8pXmlWp9Eg0/fvx4bEvzt23bthhPdb0jFl+V6watzc2bN2P82WefjfFUp0nQkvogaB1Wk496vnwcQpzpTkFzRyKzJHae6i7tGzqHUr52BZsp3hFP7dzJaJ66xhgJ6pvOsvRMqiN0DySh6WnM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I0TZrV1dgcBp8Nhjj0Wx35QnN27ciH2QWHDK16pcN0hEksTzaK7SupG4JOVJEsylXKOcpzxJ7UkseNu2bTFO75PqdBI+rmIhYprXJLw7Pz/f6jvNCa07vSNBwsAJyleqpekcIQFqWstUM+l8Onz4cIwTac1IqJvqGq3lrVu3BjEyaiBTgdRHVT5fqA8SlX7ppZcGMRLLTILNj2qf7kh016Bx0/mSRKUPHjwY264mnTPx4yDtSarbdC/5u3/378b4xYsXB7GO6GlVzhFqSyLqHSMXenfqO9UYel5XZDvNFZ0fnTt31/ikk69d05yOsU03nn7j0Dx1BKjpXehMmJubi/GFhYWJn9l5dxLUp7Opw2rWrtU0PiH8SxsRERERERERkRHiRxsRERERERERkRHiRxsRERERERERkRHiRxsRERERERERkRHiRxsRERERERERkRHSdo9KaskdxfBuPPXdcSKqymrp1JYU15955pkY77jjdBy1yImo4xJCzyS16q6KdQfqO6mak9I5OXmk+eu67nSUzsnFilTeO21pnuh9puFqlvqm/CP3qE2bNsV4cvqhXCW3jeQedf/+/diW4lQzOs5jtDZpLadV/2gvrDYpr9Ic0lpS/lC+prWnPsiJg9a44x74/PPPx3jHMYJci8ipIb3P7OxsbHvgwIEY70DvSPNHTm2pPZ2HtKfS3t6yZUtsSy5M5IaVnMrIQY/GTa5S169fj/FO3ynedQ/csGFDjCd3Jnp3ilMOHjlyZBAjx6/unSLtnXPnzsW2L7/8coynuxqdt+SOQ2cRuaAlqHZTDUz5kPbYNN1QVuvO9+t2bCFXwq5rTmrfubtW5XNr7dq1sW3HUZbo/laY9DdcFdcGevd0llH967hHTctFM+337vomui5RtGYpH+j8pZxP0O9ayjNyQkz75sqVK7Et3dMSdJ52f+unZ3ZrXOc3aaePabSt8i9tRERERERERERGiR9tRERERERERERGiB9tRERERERERERGiB9tRERERERERERGiB9tRERERERERERGSNs9alIl5q4LAilNd5SVO65IXfcocpGg9omOkjipzZMiPLkdJDeGhw8fxrakRp7milTvu6R3J3cTcvBK7mA0Plp3cpFIbkSkqE+uEEkBnfogRX1SeU/7g8ZB754U4SnPaA3IwSW5TVHf5LqT5urevXuxLcVpfZOz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4526S/uPXA/JeSe9D7lAJNcJGh+tAZ3N5EiW9uvatWtjW3KgIje6VNNpfWlvpzqTzpsqrrsdV0Zy9iJ3JsqHTZs2DWILCwuxLa0NPfP06dOD2OHDh2PbPXv2xHjKtY5zW1XPZfLOnTuxLTkWUvtUA1MOT8s9ivrquJoRHVcVqkcU79zzqY9du3bF+KVLlwYxyoXPfe5zMZ7yj+4UNK/kapagvmncHXem7n2vkyfUd1ozutdRnnXuah2Xrare/qM16LhhUdvOudJxI3tUPJ3NdF7T/Si5UZIrJp2/HeesaUD9dr9nTAP/0kZEREREREREZIT40UZEREREREREZIT40UZEREREREREZIT40UZEREREREREZIS0hIirssDOpGJm3X6JrlhrR8yThP1IwDaJNJIQMYnvJVElesckLFzVE5mldySxvhTvjq8zbponEhdL4yMBRHrHzrgfPnwY29K8plyjfCdhKxp3EsgmkS56x7SWHZEz6qMqvyeJetP8JbFb6oOE3zqihl1xsfTMaQn7fRxCxI8//nht3LhxEKe5TVy9ejXGSZwzrT0JdiZB5CquD6lGkygr9ZHWh4QoqT68++67MZ5y4sqVK7EtrQGdOUnkmNpSfSAxwFSnL1y4ENumfKLxkWgx1aQtW7bE+Nzc3CB29+7d2Pbtt9+OcZrvlK+U89RHqmtUH+jdSfg57R2qG1TTb9y4MXGcamMSLa7iddixY8fEfdBeTfuPzguK0xmaRDepdtN+J/HjtM9S7ZqmyCWdi3+T7plDOZXGPukYHtVH16Bj27ZtMZ6EiElo9e///b8f4+fOnRvE9u/fH9vSuCm301x1hJmpj+4adO4xdJ/v3HXp91fnvK6aXOy7is9xGsukz+u2pz5oXtPeo7O9e96ks5kE6+mZadz0e43qM5Heneavm/PTYBrP9C9tRERERERERERGiB9tRERERERERERGiB9tRERERERERERGiB9tRERERERERERGiB9tRERERERERERGSNs9alK3la4DC8U7assdxfqOE0xV1RNPPBHjyQGC3E1++tOfxnhStyZlcFI076jNEx3HL3reT37ykxjvuEfRPNG7p7UhxXBad3pmcrmgdyRV+fSO3XynvEzvScr5lFNpbSgXunmZWLt2bYyTS83mzZsnbksuWx3HjW6NSk4jXZcoiqe+u858XT788MPoXpSU/MkViOLkxPHee+8NYpTz1Aft4TSHlD/JPaQq13lyOSJnKjoXUt1Iz6viOUkuTFV5P5B7FLlA0J5fWloaxMhBqVMbybmH1ob6Tg5PVKfu3bsX43RupbtG906RnkkuGslFqIpz/vz584MYuWxRrtEZmmoD5QjNCbnpJKeoVBse1XfKB1oDyh1yt0pzRXchcomitey6AK0W03AXorWZxtk1DQcW2mcp3nXrun379iBGdaTjalmV7wnUlupoousW2o0nyBko9UF7rJtnaU7otx09k9YyMQ2nN6rDnfHROUF1uxPft29fbJvu7dSe7u1UtynnU/vVvC93XJurplRbW61FREREREREROTXgh9tRERERERERERGiB9tRERERERERERGiB9tRERERERERERGiB9tRERERERERERGSMs9amVlBV1O/iZdB5bVJI25q9hMKtbJiWPDhg2xLamOJ2VvUmHvKJcTHWXrqvzu5MJBzi4d5x16xzt37sR4Wl/K0+68JlcWUlYnlfc03zS+rhNAeib1QS4caU4oR8gRg9w2Um6Tc8Ps7GyMJ0cRcuCgNSBSzndr1KQ1sYrXhvZeiq+2y8inPvWp6PCVXNMWFxdjHzt27IhxGnuKk8sYQa5uqSaRgxI5SaT43r17G6PjvZPcRsgpifKe9t+ePXsGsXfffXficVTxeZbeJzk2VbGjVjpHyOmCHLKoHh8+fHgQo/yj+k9rltzRKKc6Tis0Drp/0HwnNw6aP+q741RJa0B1gHIqvc+2bdtiW3L8Si5t9I7JCYvGUZXPLmp7/fr1ifuo4rvTavJRnVWm4czSdS5K53P3Tkv3hJTHL774YmxLd7KTJ09O1O+j+qD3SXeN7rt33C6pHpFzUVozmuvkcFeVXRlTLa9iByp6n3T2UZ2jGpXWgGpA976X2nd+N1IfHefYKr5LJXdIqs/bt2+P8eXl5UFsfn4+tqW7OI27c//v3POncW+vyntV9ygRERERERERkU8AfrQRERERERERERkhfrQRERERERERERkhfrQRERERERERERkhfrQRERERERERERkhLfeoqqyinBSbV9OBpeu8k+JdNWh6n+QYQS44pOCdXDvoHUm1PblFEKQ6Tn13HIqIJ598MsbTuMnliNyjknMK9UFxUiNPa0MK5eTskpTlu6rotDbpfch1gfIvjYXyLyn7V7HzTHomuQJRPO0xcl2gvOy4XNC7d1wauu55lFMfh9vepz71qTjnyUGJcoro1O6uEx2546T1IaefzZs3x3jaZ+R+QbWOnC5u3LgxiFEeU55Q32lOqP6TUxLVzNQ3nX00J6luJHeJKq7/VHvSHFLdOHPmTIyT00+aqy1btsS2165di/EE5R+5HJErV8p5uiPQfFO9S84i9I6Ul5///OdjPJ0BtFeTq2BVXhuqJTS+jqtUx9nxUaT9lMY3DcemadG9L6c9Se/T6aMLrc3u3bsHsYWFhdh23bp1Mb5+/fpBjJzOyNWM6PxO6rjS0JzS+Kh9unvS+fHf/tt/i/GlpaVB7E/+5E9iWzpv6L78F3/xF4MYvcs//If/MMbn5uYGMcrVjgMaQX3QO6bfEJQ39HsjuURV5bsDuWzRPSOdk3T37+ZlgupLp452HZ467m9d/EsbEREREREREZER4kcbEREREREREZER4kcbEREREREREZER4kcbEREREREREZER0hYiTiRRJRL6IiGejvgniQJ14l1hIRKbe/755wcxEk8i4aiHDx8OYiRclkQAq7JAHsU7gs1Vea5ICIriJIKY1p3enQQTUzyJe1axWCkJcqX2JIxIooZJmI7aUl52hK0oz2iPpWeSwCyJlXaE9kiwmcTIkhjoagr3dkXE0lhoHacx7mkIMT6Kn//851H09dlnnx3EaC1JsJryPs1LV0COhO9IrDBB+Z32MEHCuFQD07iTGGNVPm+qODdT37TPaC0pl+fn5wcxekc6n1LdvXjxYmx7/fr1GCeR43RWUo5Q/d+zZ0+MHz9+fBBL+6OK5zudUZTbNK8k8plqJtV0qidJ4L8qzyvl5Y4dO2KcRJvffffdQezChQuxLZ1zKR/oXkICxUlslPqZlshxemZXzHgsUB6TqOqvGxpHEiKmOzdx8ODBQez06dOxLdVcItVi2gcdU4aumDbFkygt7Y+jR4/GeKp1JEJPcbqjp3pOa5CMFyhO+U41l+Y7nePdvlOccoTu7SQsn9adzna6N6T7GOUT7dOOQDaNYzX3R+f7QldY3r+0EREREREREREZIX60EREREREREREZIX60EREREREREREZIX60EREREREREREZIX60EREREREREREZIW33qEmVjrvOH0RSYe46xHTcXWh89MykKk2K0qSifvXq1UGMnJLI3YRYs2bNINZ5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0rqTEwzVQHKm2r9//yDWdWukvtMepppx48aNGE97gdx7qE7RfeX8+fMxnkg5UsX5nc7ntL7TdGuZ9Ezr3uc79XIa7lHTcnfpnPEd5yJqe/DgwRinWpfqFN3rOs5U9JuA4lRzd+3aNYh1fw+lmkF3Rhof1bS07lSjaP5SPafaT+OgepkgZ8jOnZbuV+RW+OUvfznG05rR7w1am079moZTatdBrvM9o9v3NFyl/EsbEREREREREZER4kcbEREREREREZER4kcbEREREREREZER4kcbEREREREREZER4kcbEREREREREZER0nKPIjquPl33lE4fnb5JjbzrzNJRmqbxpbGQewg5FNG4k1MIqaKTCnhnTkiJvaMwTs4SNK/JcWJpaSm2pVylcaf5JicUWrOkFE8OLpQjHfeGBw8exLbkDpPGQsrv5ORBDjNpTmiv09p0FP8p3pnXjitEVVaQp3zv1r+096ahqP8oZmZmYk0id6YEua9QbiZnKtpP5OhDDjFp3SjXbt++HeMdxwMaH7l8pL5pn3XdeJLrHJ195KhFeZ8ciig36QxJ+4TOOOr729/+doy/9tprgxg5+tB8d+I0bnIQSY5QVEdp35DLzPr16wcxchijffbSSy/FeHIIIycTcj4h15KUm3Rude48NA7a1+TWlZxjaO+dPXs2xslpJt0rUt/Tqv8rKyt4Tn3UZ07D4arzm4DoOlOlvdodR+e+kpzYqqr+7M/+LMaTCxDVBqrz6RyivUTnJOVN+m1Bd136HfL+++8PYrRn6J5B+Udj6fTdqX80r3SmpjpFTrhE6pvuHpQjhw4dmvh59O70jtOg48JEudCpadNyg0r9dPvwL21EREREREREREaIH21EREREREREREaIH21EREREREREREaIH21EREREREREREZIS4h4ZWUFRfX+JiTyQ4I+HaGfScfwf0hiSyTA1BVJTYJcJCzUmRMSLiORyySQR5AgIQlKJREwepeuYF0S2usKWCWRrStXrsS2JOpFYoxpfElYuIrfPQnFJRHPR8VJSDEJUZKIIq17GncSsqxiIU9qn/YZ7aWOUGs3/6YhRNyJd4XLaO+l+DREHh/Fhx9+GPdP2gv0PlS/KE/eeOONQYz2JOU3iSOmOSTR3Y6AIb07iQ92hJXfeuut2HZ+fj7Gz507F+NpTpLQY1XV5cuXY5zWLO1jWhs6s1MtXbt2bWx79erVifuoyvXkxo0bsS3lK90TkiAoCXVTvUtjoZyi2k3zfezYsUGsK4pJ8TTfmzdvjm075gFVVTt27BjESOg3rUFVT+xxy5YtMU45lYS9KbdJyJQEWNMa031vWkwqgknn02o971Ft0xnfHV/3jP+o0Pgoz0gI9vjx44NY1/gk7etOTj4qns4b2r80vtOnTw9iVPsJql3p/nrw4MHYlkThU91ZXl5ujI5/h6Q8oZwkUeX0W4HOsT/5kz+Jcaqtae/R2Uk53/mN2BURTs+ktrRvUu5MQ4yc6PbtX9qIiIiIiIiIiIwQP9qIiIiIiIiIiIwQP9qIiIiIiIiIiIwQP9qIiIiIiIiIiIwQP9qIiIiIiIiIiIyQtntUUnNOastdFyFSiU5q0KTMTCrMaXykbE0OJKSunpwDSLmcntlRmiYHktnZ2RhPbgfXr1+PbclVJK0NKYZ31z05U5FjAsXTu5MTETlopHFUZZcZakvrmxyeyCWK3EBSH9QPtaU9ltxa5ubmYltyCXn22WdjPOU2rQ25rKQ+6F1o/5LDR+qH6gj10al/pOLfcb3q1Itfhccffzw6BiW3AnL6SY5pVbxuW7duHcRoP5FzBc1Lcq+gOrBmzZoY79Q1qv+dHKQ+KL+pHqf25BKV1qCKnTEuXLgwiB0+fDi2pZqUzrPbt2/HtlT/k+NQVdXS0tIgRrWHajqtezorqe/z58/HeMrjdF4/anw0rym+b9++2Hb37t0xTk5l6cyhfCVXS3I7SzWG9g250qQ8oT4WFxdjnOpaugeSEx25u9BYqCb9JrKaZ1TnzO46K03DParjBkv3gaNHj8b4O++8M4jRWUs1I9UdylWqf9euXYvxxLZt22Kc6ktnDegeTXeH5BZHTl3k/vbmm28OYuTuSnda+g2W+qEaSnUk5dT+/ftj2717907cB0E5QuPrOL11f0+m9t0+Us2gMf+6Xeiq/EsbEREREREREZFR4kcbEREREREREZER4kcbEREREREREZER4kcbEREREREREZER4kcbEREREREREZER0nKPmpmZiUrMSWl6WorSHaV4iqc+uu5RpEL/2c9+dhB78sknW+N77733BjFStycHje3bt0/cN70jKcInRXNSwydHB3KXSC4clCOkhp+cHsjRgdyZaG2Smwy9OynFd5xG0npVsUr+jRs3Jh4HOeNs2rRpECPF/w0bNsR42gdVPfcjypHUB+XINJzlqC05yKV8oBwhhxB6ZqpTVBumxQcffFAXL14cxGntqY8EOdQl9zFyb6Aa03GbunLlSmzbccGhXKN3J0eGW7duDWJ0hpBTEu3X733ve4MY5SA5YFDdTf2QmxHVu40bNw5i9O4dt6CqfC7Q2tD5SXNF+ZMgZ5Z0DlNdo3OLXEiS+xu5gyVHlSreC+lspXpH802uJSl/qGacOnUqxvfs2TOIUY6Q8w7dkdK80jvSHYTqQHrPM2fOTPy8LisrK6vuRPhR6Dg/TcMhZlqkvqkGUK2jM/7v/J2/M4j9l//yX2Jbql3pPKT5IKdGGneKd+/zL7/88iBGTlN016X5S3uSagPV3PRMqiPdexCdnwnKqeTI+LWvfW3ifqu4/tE5nuj8Tqf86zhNVeU60HWW69D9FpHiXacp/9JGRERERERERGSE+NFGRERERERERGSE+NFGRERERERERGSE+NFGRERERERERGSE+NFGRERERERERGSEtNyjqiZXOibFcFKlJrXvpAZNrgZEx8GGVOjJHScpj9P4SO07qZTfvXs3tqVxJxeOqqxeTkrnt2/fjvHkXETjICX2zpyQiwm5ySTF+uQcUpVdYKpYhT69Jzk8UTzNN7Wld08OM1U5d8g1gOYvOc9s3rw5tqX1pXxIdaDrDpNqBqnYU92h/ZviVOMoRyie6LpHfRzuHo8//nisJzT2BDmVkRtFclNIjlJVfIZ0nBe6biOpfpELDNU6qrtpb5Mbz9GjR2P89OnTMZ7cMijXaG2Wl5djPNVuekdy4kh5Qvvp4MGDMU55mdwQKadofLT/Ui29dOlSbEsuQq+++uogRg6OVNeolqb6vWvXrth29+7dMU71OI3l/PnzrfHROUJ7KkF3nnTfo7Pv0KFDMX7u3LkYT7lGOUL3KbrrJteX9Lzu/fdRrNb5QvU1PY8cYjpjoz5oHJ3xTQM6szqupcTv/u7vxvg3v/nNGE93467b782bN2M8jZvekRz4kssd3dupb7oLpHsGtU0OmlX5txmNg2oAPTOd+93f0l/96lcHseR6V8X36M5+6joopT3WcX5+1Pim4s4U3nFM7nT+pY2IiIiIiIiIyAjxo42IiIiIiIiIyAjxo42IiIiIiIiIyAjxo42IiIiIiIiIyAiZihBxEgUikSQSVSLhRRIQTXREjknMjcT3SCAv9U0is5cvX47xJOJHwogdQeSqqtnZ2UEsCc9WsQhiEsokwcmOQFRVXndqS30nAU0SnKS+KXeSkDMJZZKQZ1pLEigjweGOyCoJX+7cuTPGt2/fPnEfNH+U82l9SZzyqaeeivEkAtYVBe6IN1ItovxLcRJQ6woSpnrZFUXr8thjj8U6mPY81QFaB5rDTZs2DWJXr1591DAH0Lql+SJhUurjwoULg9jevXtj2x/96EcT90HPJOHAVI+qWFA1tb9x40Zsu7CwEOMkoJ/GTQL6dD6lON0RaA9v2LAhxlM/dK6SsCYJ2qczm+apcybSubBly5YYJ8HSJNpMdxgSnacaluaVxkH7icSj09lA89oR/qf17d4DU/skblrF94F0J6vK+ZDmY1r1f2ZmJr5PWl8S1uycW9Se+qZ4GnN3fJ2+u6LFr7/++iCWRMerqg4cOBDj9MwkyPvKK6/EtnSff+211wYx2qd0J+uIv1PNpd9DL7744iCWRLqruLbSfTnVBtqndP9I7061iN69c18mseDf+Z3fifGXXnppEOuK8XaEdDsmQtT3tGpaqjvdd+9A+4bmJNF9d//SRkRERERERERkhPjRRkRERERERERkhPjRRkRERERERERkhPjRRkRERERERERkhPjRRkRERERERERkhLTdoxJJwZvU4wlSI09q7uSgQSr+ST2aVNFJDZr6Tm4/y8vLse3FixdjPKmU0/yRUwa5SiW1+a1bt8a25FyR1NWXlpZiW1obUmhPSuKklk4uEkkpntxhaJ5IhT65/VAukJNOUpCfhqp8Vc6H/fv3x7bkdjM3NzeI0TzR2pBaf1ozUlYnlffkoEFOKOTORPG0ljS+juNE1wGt46DRccL6VfjlL38Z1znVTNoL5FRGdSC9U6pdVVxjaI2TOxpBeZxy4syZM7Et1f/Tp0/HeKoFO3bsiG3J+Y/2Q5rXr3zlK7Et1X/i3Llzgxi5ziW3pao83+ScRS4Li4uLMZ7m8M6dO7EtuV5duXIlxpMDFzn/0VmenFYo52l9ab6PHDkyiFHtpjnpOAXSO9JaUjy5ztE7Ui1N80o1k+ouuU92zvL5+fkYv379eoyn+krjmAZU5zsOSl1SP9Pom/qgs4JyJ+0zWt8//dM/jfG0vpTD3d9JnbmiOp9cDMlpiu6BdEdK9ZzOZXKYTOcn1VaaD7pnJLfCe/fuxba07ul96B3pXOncU8kd7Ktf/WqMpzmhfUD51/kdR26wlDvp/KDfN1SfO65NtNeJ9Ezqg/YBnTdpbTpOXVX+pY2IiIiIiIiIyCjxo42IiIiIiIiIyAjxo42IiIiIiIiIyAjxo42IiIiIiIiIyAjxo42IiIiIiIiIyAhpuUfNzMxE9eOkoEzOA+SCQPGOuxApXj/xxBMTP4/UtEnxPzmCXLp0KbYlBfSkok6K3F1XmtT+ueeei23J8SXNN40jOWFVsStSUm4nR5rOupPTVCfPun2Te1R6x06uVlVt3rw5xpNDCrlEzc7OxnjKNZoPWhtS4E+ONKTsT3OS3M6SC0AV5yXlToqTsj853KWcIlcDUpvvqNCvtnvUzMxMnMc0RspXgtY4zRetMTmqUO1J+5LyJDlrVGW3PKrnly9fjnFyo9i4ceMgRnuVagzl7KZNmwYx2qtUY6jepXXoOA5VZcccyhFyGyEnSFqHBI2P3Jxu3rw5iJHTFI0vOYHR/P3tv/23Y3zNmjUxnvYquRlRThEpf2gvkNsltU9Ob1QHqA6mmk7vSDlF94Q033Qu0BlKOZUcUVLN6DoOETMzM/GZlIMJOrem4QhFfadaR3NC4yA3p+9///uD2H/4D/8htj148ODEfZOTDuUf3f/Tu1OukoPq17/+9UHs9ddfj22TQ2AVjzvtBconOlfS7xOqoV33nlQHqPbTeU0Ok522VAOSU9SXv/zl2JbuXmltaP5of9B94t//+38/iL388sux7d/7e39v4mfSOnZc3qryunfdmRLd+zyR2useJSIiIiIiIiLyCcCPNiIiIiIiIiIiI8SPNiIiIiIiIiIiI8SPNiIiIiIiIiIiI6QlREwkoSkSCiLRNhKrSqJKJDpG4lNJhInakvgUiQwmsUPqg565fv36QawrwkkkUT4ST6K+kxBsVwzv2rVrMd4RBqNnJrEqEkqjNSDhrRQnoUwS6U19kIhYEiWtqtq9e3eMJ/FoEjGlZ6Z5JQEwitN8J9HKJE5cxWKR6Zkktkzie/TuSSiO3qVTd6YlRPxRhSJ/FX75y1/GukHieQkSm6Y9kt7zzp07sS0Jt5HYdKr/NL633norxlP9unv3bmyb3qWKhX479Z/qQ0fUkUQuKX7ixIkYT/uVRO5p3ZN4NAnmUt0gYeVUC2heSTCScir1Tec+1YLUx5YtW2JbOnOo3qWcIlFg6uPixYsxnsRJ0x2hquq1116L8SNHjsR4qjGUl7QXkpgn5Q6d+3TOdc5ygkSYU96n/UR36y4zMzMTC3dSzaX7FJ1RqZ+O4HBV3pNUcylHqKb9p//0nwYxEhwmcdcE/e7piGlX9YRPaU6SOP3nP//52Jb2HtWGdCZ2f68lMwC609J8UL6mOaFznOo51eIEmbt86UtfivEDBw4MYrQGtL7pvKG9RGcT9Z32dRLvrqp68803Y/yf/bN/NvH46J42DXHhadAVXE/zR3ONz2y1FhERERERERGRXwt+tBERERERERERGSF+tBERERERERERGSF+tBERERERERERGSF+tBERERERERERGSEt2eKVlZWo1p0UkUkZnOKkAp6UxzsuUVVVn/3sZwcxcttIblBVrJZOrgQJcmdK4yZHAlKrJoX2NK9dJfE1a9YMYqTeTc4G5Npx48aNQYxcY8jVJynt07tQnN4nxUntO81TVV7LdevWxbbbt2+P8R07dsR4cgmh3CFHh+SUQfNB80d9J6V9Wt+bN2/GeFpfyrPDhw/HOK1N6oecZMhRJNF1ieqw2sr5v/jFL6JzQnLA6O735eXlGE+uMdQHOQp0HEuWlpZafad3J1cHOp86LkJUz8+fPx/j5LyWnEKoPqS2VblGV+VzlZyc9u3bF+PHjh0bxDougVXsapZqD90RyK2Fzsq0j8n5af/+/TGe8jK5h1RVHTp0KMbpLFpcXBzEKC/pzKE6k5xcqC3l5cLCQownJxeaE3KgSnlM7j0UJ+eY5OZENYPendYh3SWT+8w03QNTXynWPfc7brBdp8XUN92tyYn03/ybfxPjyW2K6jzlfOf3UPeeleI0T1QvU87T/Yjq9tq1a2M8OT+Rc2zXJbbTtnP/otpPtTXVeXLPoxpFTpIpT2gvUY5QrnWgczzdHWh/0Lon96h/+k//aWxL80Q1t+OE23Ee69SibrzrQOVf2oiIiIiIiIiIjBA/2oiIiIiIiIiIjBA/2oiIiIiIiIiIjBA/2oiIiIiIiIiIjBA/2oiIiIiIiIiIjJCWexSR1I9JlZ+UkskZKKk2k6o3PTO5SJB7yIkTJ2KcXDtS3+R6Qk4USamb1LGpb1LPT+4uXfeB1HdyDqnKTihVVXNzczGenEmuXLkS25KjQ8oRygXKHVJcT/NHa0Dx5DhB6vvk4ELt6X06pD3ZUfCv6qmlk1o/re/7778/iJELTHJ/qOK8THF6lzQOYrUdnlaTJ554IrrVpBpNLgPE7t27YzztM6qXtJa0bsn5j+o/uQSmekeOEeQ0cObMmRi/devWIEYuaORQRI5naZ9QHpOj4rZt22I8Qe6LVP/TPiFXEaLjtJjciaq4dtM5ktae2n7uc5+b+Jl0PyIHDKozqW+aJ3LAJDe/1DfdV6g+dM6AF154IbalOUk5T+dF1wky1UByT6GcSnfGqr6LyEdlZmZm4vtD987YcUWi+aDfBGktae/91//6X2OcanS6Z9G7d5zlqC3lcMd9t+OCU5Xvo/Q8uucn19Kq/FuBzkmqDWnc1JbuxeQomKDfTnRmbdiwYeK+ySW24/BKa0BrlvY05RntMbr/p3sa1S1a9x//+MeD2H/+z/85tiVXKdqTHfco2pMp3nGOrerVchoH9t1qLSIiIiIiIiIivxb8aCMiIiIiIiIiMkL8aCMiIiIiIiIiMkL8aCMiIiIiIiIiMkL8aCMiIiIiIiIiMkJa1jMzMzNRFTkpSqfYr0JSiSbVbFJRf/DgwSB27dq12Pb69esxTo4WSdmblOxJgTq5dpD6NPVN8aSi3nUGSur+5DpASuyk5p6cYEgRnlwu0rxS/lGccirNK70juUUkdwlSj6d5ovlOSvu0D+gdO0rnlMPUR5oTch6gvEz5R7lA7jDkUNFZGyKtATk30Dt21qzr5DEtkusQuXURy8vLMb59+/aJ25J7Q8d1bmFhIbYlB6XkzkSuNrQX6GxJ9aTrPkbrkFx9unuY6nHaU+RuRQ47yTmhe77fuXMnxlM/9C7kFEL7NbUntyWq6SmPk5PYo8ZB5z7NYSI5OFaxa0laS3oevTutZcqHH/3oR7Ht7OzsxH1TbpMTHbG4uDiIUW4nl54qdklMDjmp7nSdTB7FpHnSrUd0RqX7FznYdFxiKYf/+3//7zE+Pz8f4x0nzc49mtzSOg5UVXlOKLc7rlKUB+SiRuub2lNdJEeolCM0f3RXozt62jvUBzk/dWor1QbK7fTu1HYabnOUI5TbKV+pztGapfZvv/32xM/rQrlA75jqEf1+oPmjeKK7jv6ljYiIiIiIiIjICPGjjYiIiIiIiIjICPGjjYiIiIiIiIjICPGjjYiIiIiIiIjICGkJEVdNLoxJwmUkYEViPEmYqdtHgsSnSJCwI7BL4nskqkQixwkSfaLxJUggigTyUjyJklbxupOYVqePjkBsV7yLxP2SWBW9O/WRhLBpHDRuEj9Lc0X7oyMG3R0H5V8SpiOxUsq/JAJGIpQk/NYRUuzmcEeYjkQXSRQt5Unneb8KH3zwQZ05c2YQ37FjxyBGgtAkNk3rk8RkSRS4Kwx56dKlQYyE5UjkOI3lwoULsS2J3ZJY5qZNmwYxqnVUe2gd0nlB+ZNEVquqDhw4MPFYaI9QTUpijzQ+EnqnXEv7mOoUie4SKV+3bt0a29K5n/qgvOyIslbls4hEjklslOakI2S6f//+GCdDgHQ3ofGR8Hg6z+jeRGc23clSHtNZTgKsRKon0xApX01oLNMYI9XAtGYkVk01o7vfO6R374ieVvXEpjsmGlW5HlGNojXoCOnSvbNjVkO/y7rvTvPdIfVN69Wt2x2TCWrbEcGlPmj/pvmmd6f1TTWN8o/uO5SXqR+aD6rbqTZ0fn896plpfF1jIP/SRkRERERERERkhPjRRkRERERERERkhPjRRkRERERERERkhPjRRkRERERERERkhPjRRkRERERERERkhMx0VN5nZmZuVtXQikNERD5udq6srGz8qJ1Y50VERot1XkTkk02s862PNiIiIiIiIiIi8uvB/z1KRERERERERGSE+NFGRERERERERGSE+NFGRERERERERGSE+NFGRERERERERGSE+NFGRERERERERGSE+NFGRERERERERGSE+NFGRERERERERGSE+NFGRERERERERGSE+NFGRERERERERGSE/G+ThttohPsUJQAAAABJRU5ErkJggg==\n",
- "text/plain": [
- "