{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"fashion-mnist.ipynb","provenance":[],"authorship_tag":"ABX9TyNc9rxn7RHIb1T1Zm0r0yCm"},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","metadata":{"id":"MDLLRVVZA9EW"},"source":["[](https://colab.research.google.com/github/leanhducprovn/cdn/blob/master/tlu/elearning/machine-learning/fashion-mnist/fashion-mnist.ipynb)"]},{"cell_type":"markdown","metadata":{"id":"dLMxBwZIUk5e"},"source":["# **Machine Learning Project**\n","\n","\n","\n"]},{"cell_type":"markdown","metadata":{"id":"tu82ej3SLoXp"},"source":["## Classify Fashion-MNIST (phân loại thời trang)"]},{"cell_type":"markdown","metadata":{"id":"wGHQ5AJDLYUW"},"source":["### Sinh viên thực hiện:"]},{"cell_type":"markdown","metadata":{"id":"zqtAFmv8L8zX"},"source":["* A36000 - Lê Anh Đức\n","* A35981 - Nguỵ Thị Ngọc Oanh\n","* A34684 - Phan Văn Hưng\n","* A37181 - Phạm Trung Tá"]},{"cell_type":"markdown","metadata":{"id":"OJTv6qaKLdEp"},"source":["### Giáo viên hướng dẫn:"]},{"cell_type":"markdown","metadata":{"id":"8eViz0FaMCWA"},"source":["* CTI023 - Nguyễn Công Điều\n","* CTI041 - Nguyễn Tú Anh"]},{"cell_type":"markdown","metadata":{"id":"Mg6s0mvmlMH7"},"source":["### Tổng quan"]},{"cell_type":"markdown","metadata":{"id":"QPg-uN7XMOve"},"source":["**Fashion MNIST** là tập dữ liệu được dùng để thay thế cho tập dữ liệu **MNIST kinh điển** thường dùng cho các chương trình \"Hello, World\" của machine learning trong lĩnh vực thị giác máy tính. Tập dữ liệu kinh điển vừa đề cập gồm ảnh của các con số (ví dụ 0, 1, 2) được viết tay. Các ảnh này có cùng định dạng tệp và độ phân giải với các ảnh về quần áo và giầy dép chúng ta sắp dùng.\n","\n","Với tập dữ liệu này, **60.000** ảnh sẽ được dùng để huấn luyện và **10.000** ảnh sẽ thường dùng để đánh giá khả năng phân loại nhận diện ảnh của mạng neuron.\n","\n","Mỗi ảnh là một mảng NumPy 2 chiều, 28x28, với mỗi pixel có giá trị từ 0 đến 255.\n","\n","
"]},{"cell_type":"markdown","metadata":{"id":"haODX3PNK8iy"},"source":["#### Mô tả nhãn\n","Nhãn là một mảng của các số nguyên từ 0 đến 9, tương ứng với mỗi lớp quần áo giày dép:\n","
\n","\t
STT
Tên
\n","\t
\n","\t\t
0
\n","\t\t
T-shirt/top
\n","\t
\n","\t
\n","\t\t
1
\n","\t\t
Trouser
\n","\t
\n","\t
\n","\t\t
2
\n","\t\t
Pullover
\n","\t
\n","\t
\n","\t\t
3
\n","\t\t
Dress
\n","\t
\n","\t
\n","\t\t
4
\n","\t\t
Coat
\n","\t
\n","\t
\n","\t\t
5
\n","\t\t
Sandal
\n","\t
\n","\t
\n","\t\t
6
\n","\t\t
Shirt
\n","\t
\n","\t
\n","\t\t
7
\n","\t\t
Sneaker
\n","\t
\n","\t
\n","\t\t
8
\n","\t\t
Bag
\n","\t
\n","\t
\n","\t\t
9
\n","\t\t
Ankle boot
\n","\t
\n","
"]},{"cell_type":"markdown","metadata":{"id":"SJqFEif2adfw"},"source":["### Import thư viện"]},{"cell_type":"code","metadata":{"id":"uk-sg_wJZB4M"},"source":["# Tensorflow: là thư viện mã nguồn mở được phát triển bởi Google, được sử dụng cho việc tính toán số học sử dụng đồ thị luồng dữ liệu.\n","# Numpy: là thư viện hỗ trợ cho việc tính toán các mảng nhiều chiều. Numpy cực kì hữu ích khi thực hiện các hàm liên quan đến Đại số tuyến tính.\n","import tensorflow as tf\n","import numpy as np\n","import matplotlib.pyplot as plt"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"i4V2UgwSbQuC"},"source":["### Trực quan hóa dữ liệu"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":566},"id":"YLGAKnx0bXpP","executionInfo":{"status":"ok","timestamp":1637284939098,"user_tz":-420,"elapsed":1612,"user":{"displayName":"Anh Đức Lê","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Ggl2R3s4-MP-Ma4tbGGDacR2dirRQjQHyn5v6zLpg=s64","userId":"12415970068997449260"}},"outputId":"99dc96eb-8be8-4686-8c42-31333ac20ea4"},"source":["# Trước hết, chúng ta sử dụng keras.datasets để load dữ liệu để hiển thị một số thông tin về dataset.\n","# Tải dữ liệu thời trang\n","(x_train, y_train), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()\n","\n","# In hình dạng tập huấn luyện\n","# Lưu ý: có 60.000 dữ liệu huấn luyện có kích thước hình ảnh 28x28, 60.000 nhãn tập huấn.\n","print(\"x_train shape:\", x_train.shape)\n","print(\"y_train shape:\", y_train.shape)\n","\n","# In số lượng tập dữ liệu đào tạo và kiểm tra\n","print('Train set:', x_train.shape[0])\n","print('Test set:', x_test.shape[0])\n","\n","# Xác định các nhãn\n","fashion_mnist_labels = [\n"," \"T-shirt/top\", # index 0\n"," \"Trouser\", # index 1\n"," \"Pullover\", # index 2 \n"," \"Dress\", # index 3 \n"," \"Coat\", # index 4\n"," \"Sandal\", # index 5\n"," \"Shirt\", # index 6 \n"," \"Sneaker\", # index 7 \n"," \"Bag\", # index 8 \n"," \"Ankle boot\" # index 9\n","]\n","\n","# Chọn bất kỳ 1 số trong khoảng từ 0 đến 59,999\n","img_index = 5\n","\n","# y_train chứa các nhãn, từ 0 đến 9 (index 0 -> 9 tương ứng với mỗi loại fashion)\n","label_index = y_train[img_index]\n","\n","# In nhãn, ví dụ nhãn thứ 2 là Pullover (áo phông)\n","print(\"y = \" + str(label_index) + \" \" +(fashion_mnist_labels[label_index]))\n","\n","# Hiển thị một trong những hình ảnh từ tập dữ liệu đào tạo\n","plt.imshow(x_train[img_index])"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gz\n","32768/29515 [=================================] - 0s 0us/step\n","40960/29515 [=========================================] - 0s 0us/step\n","Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-images-idx3-ubyte.gz\n","26427392/26421880 [==============================] - 0s 0us/step\n","26435584/26421880 [==============================] - 0s 0us/step\n","Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-labels-idx1-ubyte.gz\n","16384/5148 [===============================================================================================] - 0s 0us/step\n","Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-images-idx3-ubyte.gz\n","4423680/4422102 [==============================] - 0s 0us/step\n","4431872/4422102 [==============================] - 0s 0us/step\n","x_train shape: (60000, 28, 28)\n","y_train shape: (60000,)\n","Train set: 60000\n","Test set: 10000\n","y = 2 Pullover\n"]},{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":3},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":[""]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"867sJwDiDZq3"},"source":["### Chuẩn hoá dữ liệu"]},{"cell_type":"markdown","metadata":{"id":"UnlUe8ZFTp1s"},"source":["Chuẩn hóa các dữ liệu để chúng có cùng tỷ lệ. Ở đây, `x_train`, `x_test` mang các giá trị nguyên từ 0 đến 255."]},{"cell_type":"code","metadata":{"id":"IS6nkCpmDfE6"},"source":["x_train = x_train.astype('float32') / 255\n","x_test = x_test.astype('float32') / 255"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"FmjaqA5BD1to","executionInfo":{"status":"ok","timestamp":1637284947569,"user_tz":-420,"elapsed":5,"user":{"displayName":"Anh Đức Lê","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Ggl2R3s4-MP-Ma4tbGGDacR2dirRQjQHyn5v6zLpg=s64","userId":"12415970068997449260"}},"outputId":"584c8801-150f-41d2-de39-69402f8d6817"},"source":["print(\"Số lượng dữ liệu train: \" + str(len(x_train)))\n","print(\"Số lượng dữ liệu test: \" + str(len(x_test)))"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Số lượng dữ liệu train: 60000\n","Số lượng dữ liệu test: 10000\n"]}]},{"cell_type":"markdown","metadata":{"id":"H3qr2hcFFGcA"},"source":["### Chia dữ liệu thành các tập dữ liệu\n"]},{"cell_type":"markdown","metadata":{"id":"UW4JyludTgc0"},"source":["* **Training data**: được sử dụng để đào tạo mô hình\n","* **Validation data**: được sử dụng để điều chỉnh các siêu tham số và đánh giá các mô hình\n","* **Test data**: được sử dụng để kiểm tra mô hình sau khi mô hình đã trải qua quá trình kiểm duyệt ban đầu bởi bộ xác nhận."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"obRBJcMsUO38","executionInfo":{"status":"ok","timestamp":1637284952165,"user_tz":-420,"elapsed":325,"user":{"displayName":"Anh Đức Lê","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Ggl2R3s4-MP-Ma4tbGGDacR2dirRQjQHyn5v6zLpg=s64","userId":"12415970068997449260"}},"outputId":"92592f72-e5f1-4285-a6fd-fb090bb13f0d"},"source":["# Chia nhỏ dữ liệu thành các tập huấn luyện\n","# Trích từ tập training data ra một tập con nhỏ và thực hiện việc đánh giá mô hình trên tập con nhỏ này. Tập con nhỏ được trích ra từ training set này được gọi là validation set\n","# Đặt 5000 vào validation set và giữ 55.000 còn lại cho training set\n","(x_train, x_valid) = x_train[5000:], x_train[:5000]\n","(y_train, y_valid) = y_train[5000:], y_train[:5000]\n","\n","# Định hình lại dữ liệu đầu vào từ (28, 28) thành (28, 28, 1)\n","w, h = 28, 28\n","x_train = x_train.reshape(x_train.shape[0], w, h, 1)\n","x_valid = x_valid.reshape(x_valid.shape[0], w, h, 1)\n","x_test = x_test.reshape(x_test.shape[0], w, h, 1)\n","\n","# One-hot encode the labels\n","# One-hot encoding là một quá trình mà các biến phân loại (label) được chuyển đổi thành một mẫu có thể cung cấp cho các thuật toán để thực hiện công việc tốt hơn khi mà dự đoán.\n","y_train = tf.keras.utils.to_categorical(y_train, 10)\n","y_valid = tf.keras.utils.to_categorical(y_valid, 10)\n","y_test = tf.keras.utils.to_categorical(y_test, 10)\n","\n","# In tập huấn luyện\n","print(\"x_train shape:\", x_train.shape)\n","print(\"y_train shape:\", y_train.shape)\n","\n","# In số lượng tập dữ liệu of training, validation, and test datasets\n","print('Train set:', x_train.shape[0])\n","print('Validation set:', x_valid.shape[0],)\n","print('Test set:', x_test.shape[0],)"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["x_train shape: (55000, 28, 28, 1)\n","y_train shape: (55000, 10)\n","Train set: 55000\n","Validation set: 5000\n","Test set: 10000\n"]}]},{"cell_type":"markdown","metadata":{"id":"HUKGw7QF698K"},"source":["### Xây dựng mô hình"]},{"cell_type":"markdown","metadata":{"id":"LfO1WKWfYh1b"},"source":["Có 2 API để xác định 1 mô hình trong Keras\n","\n","* [Sequential model API](https://keras.io/models/sequential/)\n","* [Functional API](https://keras.io/models/model/)\n","\n","Ở bài này, bọn em sử dụng mô mình **Sequential model API** với một số API Keras sau:\n","\n","* [Conv2D()](https://www.tensorflow.org/api_docs/python/tf/keras/layers/Conv2D/): Là convolution layer dùng để lấy feature từ image.\n","* [Pooling()](https://keras.io/layers/pooling/): Chứa các layer dùng trong mạng\n","* [Dropout()](https://www.tensorflow.org/api_docs/python/tf/keras/layers/Dropout): Hạn chế overfiting\n","\n","\n","\n","\n"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"lJ_eCscHo8k8","executionInfo":{"status":"ok","timestamp":1637284958647,"user_tz":-420,"elapsed":1106,"user":{"displayName":"Anh Đức Lê","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Ggl2R3s4-MP-Ma4tbGGDacR2dirRQjQHyn5v6zLpg=s64","userId":"12415970068997449260"}},"outputId":"53deba30-c8ce-49e1-8aef-c844dfe7e9b7"},"source":["# Khởi tạo models Sequential()\n","model = tf.keras.Sequential()\n","\n","# Xác định hình dạng đầu vào trong lớp đầu tiên của neural network\n","# Tạo Convolutionnal Layers: Conv2D là convolution dùng để lấy feature từ ảnh với các tham số\n","# filters: số filter của convolution\n","# kernel_size: kích thước window search trên ảnh\n","# activation: chọn activation như linear, softmax, relu, tanh, sigmoid (relu là hàm trả về giá trị tích cực, nhưng không trả lại giá trị âm)\n","# padding: có thể là \"valid\" hoặc \"same\". Với same thì có nghĩa là padding =1.\n","model.add(tf.keras.layers.Conv2D(filters=64, kernel_size=2, padding='same', activation='relu', input_shape=(28,28,1)))\n","# Hàm MaxPooling2D hoặc AvergaPooling1D, 2D (lấy max , trung bình) với từng size.\n","# pool_size: kích thước ma trận để lấy max hay average\n","model.add(tf.keras.layers.MaxPooling2D(pool_size=2))\n","# Dropout: chống over-fitting\n","# Hiểu đơn giản là, trong mạng neural network, kỹ thuật dropout là việc chúng ta sẽ bỏ qua một vài unit trong suốt quá trình train trong mô hình, những unit bị bỏ qua được lựa chọn ngẫu nhiên.\n","model.add(tf.keras.layers.Dropout(0.3))\n","\n","model.add(tf.keras.layers.Conv2D(filters=32, kernel_size=2, padding='same', activation='relu'))\n","model.add(tf.keras.layers.MaxPooling2D(pool_size=2))\n","model.add(tf.keras.layers.Dropout(0.3))\n","\n","# Flatten dùng để lát phằng layer để fully connection (ví dụ: shape: 28x28 qua layer này sẽ là 784x1)\n","model.add(tf.keras.layers.Flatten())\n","model.add(tf.keras.layers.Dense(256, activation='relu'))\n","model.add(tf.keras.layers.Dropout(0.5))\n","model.add(tf.keras.layers.Dense(10, activation='softmax'))\n","\n","# Bảng tóm tắt mô hình\n","model.summary()"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Model: \"sequential\"\n","_________________________________________________________________\n"," Layer (type) Output Shape Param # \n","=================================================================\n"," conv2d (Conv2D) (None, 28, 28, 64) 320 \n"," \n"," max_pooling2d (MaxPooling2D (None, 14, 14, 64) 0 \n"," ) \n"," \n"," dropout (Dropout) (None, 14, 14, 64) 0 \n"," \n"," conv2d_1 (Conv2D) (None, 14, 14, 32) 8224 \n"," \n"," max_pooling2d_1 (MaxPooling (None, 7, 7, 32) 0 \n"," 2D) \n"," \n"," dropout_1 (Dropout) (None, 7, 7, 32) 0 \n"," \n"," flatten (Flatten) (None, 1568) 0 \n"," \n"," dense (Dense) (None, 256) 401664 \n"," \n"," dropout_2 (Dropout) (None, 256) 0 \n"," \n"," dense_1 (Dense) (None, 10) 2570 \n"," \n","=================================================================\n","Total params: 412,778\n","Trainable params: 412,778\n","Non-trainable params: 0\n","_________________________________________________________________\n"]}]},{"cell_type":"markdown","metadata":{"id":"HyCYfF8wf6GL"},"source":["### Biên dịch mô hình"]},{"cell_type":"markdown","metadata":{"id":"pV7glI6AgUTV"},"source":["Cấu hình quy trình huấn luyện với **compile() API** trước khi huấn luyện mô hình."]},{"cell_type":"code","metadata":{"id":"A55OGQaPg4DS"},"source":["# categorical_crossentropy: Dùng trong classifier nhiều class\n","# adam optimizer: Thuật toán tối ưu hoá\n","# metrics: Thước đo để ta đánh giá accuracy của model\n","model.compile(\n"," loss='categorical_crossentropy',\n"," optimizer='adam',\n"," metrics=['accuracy']\n",")"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"pqhOFnYSiYzS"},"source":["### Huấn luyện mô hô hình"]},{"cell_type":"markdown","metadata":{"id":"6zsyFA-1i3v0"},"source":["Huấn luyện mô hình với **fit() API**.\n","\n","Sử dụng [ModelCheckpoint API](https://keras.io/callbacks/#modelcheckpoint) để lưu mô hình sau mỗi epoch. Đặt `save_best_only = True` để chỉ lưu khi độ chính xác của validation set được cải thiện."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"pjM8wJWmkUya","executionInfo":{"status":"ok","timestamp":1637287597190,"user_tz":-420,"elapsed":1337850,"user":{"displayName":"Anh Đức Lê","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Ggl2R3s4-MP-Ma4tbGGDacR2dirRQjQHyn5v6zLpg=s64","userId":"12415970068997449260"}},"outputId":"c56f1bef-780e-4a46-a768-d1b0e7b961e6"},"source":["from keras.callbacks import ModelCheckpoint\n","\n","checkpointer = ModelCheckpoint(\n"," filepath='model.weights.best.hdf5',\n"," verbose = 1,\n"," save_best_only = True\n",")\n","\n","# Batch_size: số lượng mẫu mà Mini-batch GD sử dụng cho mỗi lần cập nhật trọng số.\n","# Ta có tập huấn luyện gồm 55.000 hình ảnh, chọn batch-size là 100 images có nghĩa là mỗi lần cập nhật trọng số, ta dùng 100 images. Lúc đó ta mất 55.000/100 = 550 iterations (số lần lặp) để duyệt qua hết tập huấn luyện (hoàn thành 1 epochs). Có nghĩa là khi dữ liệu quá lớn, chúng ta không thể đưa cả tập data vào train được, ta phải chia nhỏ data ra thành nhiều batch nhỏ hơn.\n","# batch_size (default = 1): Batch size ảnh hưởng đến chất lượng học của mô hình, batch size càng lớn thì mô hình sẽ càng học được tốt hơn.\n","# Epoch là số lần duyệt qua hết số lượng mẫu trong tập huấn luyện.\n","model.fit(\n"," x_train,\n"," y_train,\n"," batch_size = 100,\n"," epochs = 20,\n"," validation_data=(x_valid, y_valid),\n"," callbacks=[checkpointer]\n",")"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/20\n","550/550 [==============================] - ETA: 0s - loss: 0.2271 - accuracy: 0.9153\n","Epoch 00001: val_loss improved from inf to 0.21297, saving model to model.weights.best.hdf5\n","550/550 [==============================] - 72s 132ms/step - loss: 0.2271 - accuracy: 0.9153 - val_loss: 0.2130 - val_accuracy: 0.9234\n","Epoch 2/20\n","550/550 [==============================] - ETA: 0s - loss: 0.2235 - accuracy: 0.9174\n","Epoch 00002: val_loss improved from 0.21297 to 0.20920, saving model to model.weights.best.hdf5\n","550/550 [==============================] - 68s 123ms/step - loss: 0.2235 - accuracy: 0.9174 - val_loss: 0.2092 - val_accuracy: 0.9250\n","Epoch 3/20\n","550/550 [==============================] - ETA: 0s - loss: 0.2176 - accuracy: 0.9184\n","Epoch 00003: val_loss improved from 0.20920 to 0.20476, saving model to model.weights.best.hdf5\n","550/550 [==============================] - 67s 122ms/step - loss: 0.2176 - accuracy: 0.9184 - val_loss: 0.2048 - val_accuracy: 0.9240\n","Epoch 4/20\n","550/550 [==============================] - ETA: 0s - loss: 0.2198 - accuracy: 0.9192\n","Epoch 00004: val_loss improved from 0.20476 to 0.20111, saving model to model.weights.best.hdf5\n","550/550 [==============================] - 66s 121ms/step - loss: 0.2198 - accuracy: 0.9192 - val_loss: 0.2011 - val_accuracy: 0.9254\n","Epoch 5/20\n","550/550 [==============================] - ETA: 0s - loss: 0.2121 - accuracy: 0.9205\n","Epoch 00005: val_loss did not improve from 0.20111\n","550/550 [==============================] - 67s 121ms/step - loss: 0.2121 - accuracy: 0.9205 - val_loss: 0.2039 - val_accuracy: 0.9240\n","Epoch 6/20\n","550/550 [==============================] - ETA: 0s - loss: 0.2128 - accuracy: 0.9196\n","Epoch 00006: val_loss improved from 0.20111 to 0.19610, saving model to model.weights.best.hdf5\n","550/550 [==============================] - 66s 121ms/step - loss: 0.2128 - accuracy: 0.9196 - val_loss: 0.1961 - val_accuracy: 0.9278\n","Epoch 7/20\n","550/550 [==============================] - ETA: 0s - loss: 0.2096 - accuracy: 0.9213\n","Epoch 00007: val_loss did not improve from 0.19610\n","550/550 [==============================] - 67s 121ms/step - loss: 0.2096 - accuracy: 0.9213 - val_loss: 0.1985 - val_accuracy: 0.9242\n","Epoch 8/20\n","550/550 [==============================] - ETA: 0s - loss: 0.2052 - accuracy: 0.9230\n","Epoch 00008: val_loss did not improve from 0.19610\n","550/550 [==============================] - 66s 121ms/step - loss: 0.2052 - accuracy: 0.9230 - val_loss: 0.1984 - val_accuracy: 0.9258\n","Epoch 9/20\n","550/550 [==============================] - ETA: 0s - loss: 0.2044 - accuracy: 0.9223\n","Epoch 00009: val_loss did not improve from 0.19610\n","550/550 [==============================] - 67s 121ms/step - loss: 0.2044 - accuracy: 0.9223 - val_loss: 0.1978 - val_accuracy: 0.9286\n","Epoch 10/20\n","550/550 [==============================] - ETA: 0s - loss: 0.2002 - accuracy: 0.9237\n","Epoch 00010: val_loss improved from 0.19610 to 0.19193, saving model to model.weights.best.hdf5\n","550/550 [==============================] - 67s 121ms/step - loss: 0.2002 - accuracy: 0.9237 - val_loss: 0.1919 - val_accuracy: 0.9272\n","Epoch 11/20\n","550/550 [==============================] - ETA: 0s - loss: 0.1998 - accuracy: 0.9255\n","Epoch 00011: val_loss did not improve from 0.19193\n","550/550 [==============================] - 67s 122ms/step - loss: 0.1998 - accuracy: 0.9255 - val_loss: 0.2020 - val_accuracy: 0.9252\n","Epoch 12/20\n","550/550 [==============================] - ETA: 0s - loss: 0.1971 - accuracy: 0.9265\n","Epoch 00012: val_loss did not improve from 0.19193\n","550/550 [==============================] - 66s 121ms/step - loss: 0.1971 - accuracy: 0.9265 - val_loss: 0.2005 - val_accuracy: 0.9258\n","Epoch 13/20\n","550/550 [==============================] - ETA: 0s - loss: 0.1935 - accuracy: 0.9279\n","Epoch 00013: val_loss improved from 0.19193 to 0.19004, saving model to model.weights.best.hdf5\n","550/550 [==============================] - 66s 119ms/step - loss: 0.1935 - accuracy: 0.9279 - val_loss: 0.1900 - val_accuracy: 0.9286\n","Epoch 14/20\n","550/550 [==============================] - ETA: 0s - loss: 0.1945 - accuracy: 0.9276\n","Epoch 00014: val_loss did not improve from 0.19004\n","550/550 [==============================] - 66s 121ms/step - loss: 0.1945 - accuracy: 0.9276 - val_loss: 0.2021 - val_accuracy: 0.9270\n","Epoch 15/20\n","550/550 [==============================] - ETA: 0s - loss: 0.1957 - accuracy: 0.9261\n","Epoch 00015: val_loss did not improve from 0.19004\n","550/550 [==============================] - 67s 121ms/step - loss: 0.1957 - accuracy: 0.9261 - val_loss: 0.1926 - val_accuracy: 0.9306\n","Epoch 16/20\n","550/550 [==============================] - ETA: 0s - loss: 0.1885 - accuracy: 0.9290\n","Epoch 00016: val_loss did not improve from 0.19004\n","550/550 [==============================] - 67s 122ms/step - loss: 0.1885 - accuracy: 0.9290 - val_loss: 0.1968 - val_accuracy: 0.9248\n","Epoch 17/20\n","550/550 [==============================] - ETA: 0s - loss: 0.1902 - accuracy: 0.9287\n","Epoch 00017: val_loss did not improve from 0.19004\n","550/550 [==============================] - 67s 122ms/step - loss: 0.1902 - accuracy: 0.9287 - val_loss: 0.1949 - val_accuracy: 0.9252\n","Epoch 18/20\n","550/550 [==============================] - ETA: 0s - loss: 0.1893 - accuracy: 0.9295\n","Epoch 00018: val_loss did not improve from 0.19004\n","550/550 [==============================] - 67s 121ms/step - loss: 0.1893 - accuracy: 0.9295 - val_loss: 0.1938 - val_accuracy: 0.9322\n","Epoch 19/20\n","550/550 [==============================] - ETA: 0s - loss: 0.1856 - accuracy: 0.9300\n","Epoch 00019: val_loss did not improve from 0.19004\n","550/550 [==============================] - 66s 121ms/step - loss: 0.1856 - accuracy: 0.9300 - val_loss: 0.1924 - val_accuracy: 0.9292\n","Epoch 20/20\n","550/550 [==============================] - ETA: 0s - loss: 0.1835 - accuracy: 0.9309\n","Epoch 00020: val_loss did not improve from 0.19004\n","550/550 [==============================] - 66s 121ms/step - loss: 0.1835 - accuracy: 0.9309 - val_loss: 0.2035 - val_accuracy: 0.9272\n"]},{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":19}]},{"cell_type":"markdown","metadata":{"id":"Om6kdZwwn8nB"},"source":["### Tải mô hình với validation tốt nhất"]},{"cell_type":"code","metadata":{"id":"a_RSfZ0hoEBN"},"source":["model.load_weights('model.weights.best.hdf5')"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"2-I04n9pNh28"},"source":["### Dự đoán"]},{"cell_type":"markdown","metadata":{"id":"VdK-jne-Nl1d"},"source":["In ra 15 hình ảnh từ tập dữ liệu test set và đặt tiêu đề với dự đoán. Nếu dự đoán đúng (giống nhãn), thì tiêu đề sẽ có màu xanh và ngược lại là màu đỏ."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":594},"id":"MGj8YN14PEX5","executionInfo":{"status":"ok","timestamp":1637287769089,"user_tz":-420,"elapsed":4210,"user":{"displayName":"Anh Đức Lê","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Ggl2R3s4-MP-Ma4tbGGDacR2dirRQjQHyn5v6zLpg=s64","userId":"12415970068997449260"}},"outputId":"87c5a3d6-bd88-42bc-fd72-b78226794240"},"source":["# Kiểm tra mô hình bằng cách sử dụng model.predict dữ liệu thử nghiệm\n","y_check = model.predict(x_test)\n","\n","# Lấy ngẫu nhiên 15 hình ảnh từ tập test để dự đoán\n","figure = plt.figure(figsize=(20,10)) # Đặt kích thức hình ảnh\n","for i, index in enumerate(np.random.choice(x_test.shape[0], size=15, replace=False)): # ramdom 15 ảnh từ tập dữ liệu test\n"," ax = figure.add_subplot(3, 5, i + 1, xticks=[], yticks=[])\n"," \n"," # Hiển thị từng hình ảnh\n"," ax.imshow(np.squeeze(x_test[index]))\n"," predict_index = np.argmax(y_check[index])\n"," true_index = np.argmax(y_test[index])\n","\n"," # Đặt tiêu đề cho mỗi hình ảnh\n"," ax.set_title(\"{} ({})\".format(\n"," fashion_mnist_labels[predict_index],\n"," fashion_mnist_labels[true_index]),\n"," color=(\"green\" if predict_index == true_index else \"red\")\n"," )"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAABE0AAAJBCAYAAACzjUtgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeZwdVZ3///e5S++ddPaQEBJCEgJhV1YRwR0R0RlXUMRx31F/jjPqd67luIzjrjM6jqIww6IMX1wQ47gg/NxYZF/CTkL2vdP7du/5/lHVppPzOZ2+pJPuTl7Px4OH5tOnq869XadO1bl1Px/nvRcAAAAAAAB2lRvrDgAAAAAAAIxHLJoAAAAAAAAYWDQBAAAAAAAwsGgCAAAAAABgYNEEAAAAAADAwKIJAAAAAACA4YBaNHGJu8Ql7g9D/u1d4haNZZ8GucRd4xL3ylHYzkqXuBdm//9TLnFX7n3vqu7D+S5xP9rf+8XBZffxbPx8uUvcm0dhP+90ifvaCNte7hL3mWF+3uESt7DK/d/uEresmt8BDnQucS9xifvJftrXl13i3r0/9gVMdIxNHJSc83KRe8rhfjb8Ni+Ri1/n7nPOvURu/4zl3fa7IHvPCiNoe7acWzPk37fLjc018547OwZc4lZKmiWpLKlT0nJJ7/Ml3zGW/XqmXOKOk3S8pAuzf18i6TJJ3ZIqkp6U9Elf8j8fqz5Ww5f8DS5xn3eJO86X/H1j3R9MXC5xZ0r6V0nLlI73FZIu9SV/x55+15f8uXvY9iWS3uZL/sxh2tRI+qSk04bE3irpo5LmSuqSdKek1/mSbx9Bn5r20KfLJa3xJf/JIeEvSfq0pL/d0/aBsbLbvNwv6U+S3uVLfvU+2uVnJb1vyP690vHoJfVI+rWkd/uSbx2FfX1J0u0ucZf5ku8bhe0B+w1jE6iCczcrvSebLe97x7g3+4ZzZ0u6Ut4fuoeWu4xlOXeBpETSQkl9ku6T9FZ5/9S+6egzMmbXzOP5SZPzsxuQkyQ9W+mNzbjmkuiK2TslXeVL3g+J/Tl7fS1KF1CudYmbsq/7uLeGvMZrJL1jLPuCic0lbpKkn0v6pqSpShcpEkl7PYkNMxZ3d4Gkh33Jr81+73mSPifpDb7kmyUdJWlUnqpyictHfvQzSee4xM0ejf0A+9DgvHyIpI1Kx+6oc4k7WdJkX/K37vaj47P9L5Q0RdKnRmN/vuTXS3pY0itGY3vAGGBsAnvi3AJJz1W6wHdwH1MuHcvy2VhOn5T5L0kfkTRZ0uGS/l3pYux48jNJ58jt/2vmcfmkyVC+5Ne6xC2XdIxL3AJJT0kq+pIfkCSXuJslXelL/nvDbcclbrLSSeRcpSvi31V6c1RUOsGc6Uv+gaztDElPS5rvS36TS9zLJX1G0gJJDyldwb8va7tS0rclXSTpSJe4xsG+DXGupIsjr6/iEvd9Sd+QdIRL3Ps05JNol6Srhb60x9VCucS9QtLnld583qN0pX+FS9zHJJ3sS/7VQ9p+XZLzJf+B7L35iqSXKX3y5QeSSr7ky9mn9W+XdHv2Gr6tdAHrZklXaugKJVCdJZLkS/6a7N/dkn61eyOXuC9JequkVknv8SW/PIvfrGzsG8fpzZLOk1R0ieuQNOBLvsXow7mSbhny75OVLmjenfVtm6QrdvudKS5xN0o6S+n54EJf8k9kffKSFvuSfzx7qqRb0nxJz5P0IaXnCe8Sd6mk3/mSP9+XfI9L3J2SXmLsCxh3smP2Okl//VqbS9x5SufJIyTtkHSZL/lPDfn5xZL+WVJT9ntvVfok2G+MXew+Lnfff5tL3M8k/fUrry5xb5H095IOlbRZ0hd8yX9nyM//XukY9JL+Sek1wGJf8o9nTW5Wes64bkRvAjAOMTaBYV0s6VZJt0l6s6T/+etPnLtc6bcbFmjI9Z18en23C+fOVPrh8Zvk/c27/axW6RMcr5VUK+nHkj4k77sjfXJy7t8kvUnSeknvlfe/zbY1R9J/SDpT0jZJX5D33x2yny9k+5GkayV9TOm9/XJJtXJu8BsaS+T9ut32u/tYPkHSU3/dt9Qu6f8OeV2nSPq60g8Tu7OffVg+ewLMOS/p3UoXXWZIukrS++S9l3P5rK+XSGqT9OXd3rPgHCG/8xyxC+975Mbmmnk8P2kiSXKJm6f0Zv7uvdzUN5WunC1UegNzsaS3+JLvlXS9pDcMaftaSbdkCyYnSvq+0qdFpkn6jqSfucTVDmn/BqUn9JbdF0xc4hqVrtY9Enl9BUlvk9Qh6bFn+uJc4pYoHcCXKj1YfyHphuzrBz+U9DKXuOasbT57jVdnv365pAFJiySdKOnFWZ8Gnar0K0SzlJ4IpPRrFAuypwWAZ+JRSWWXuCtc4s6NPGl1qtKxM13p13guc4lzke0NPU7fKOldyp7oiiyYSNKx2nVs3ibpJS5xiUvcc3Yb54Ner/SJmCmSHtfOMWG5MPt5s9IV/Ksk/WvWp/OHtFuh9HFRYNxziWuQ9DqlF5+DOpXOqy1K58N3D+bxcok7WtK3lC4aHqJ0Lp47zC52H5e773+K0puyofvfJOnlkiZJeoukr7rEnZS1f6mkD0t6odJ57mxjs4xBTHiMTWBYFyu9DrtK0kvk3Kzdfr7n6zvnXqr0futvgwWT1L8o/VDwBKXH9Fyli4Exp0p6Qul1bknS9XJuavazH0paI2mOpFdL+pyce372s08o/Wr5CUrHxymSPinvO5UuiKyT903Zf7svmEjhWL5L0lI591U5d46c2/3r5mWli5vTJZ0u6QWS3rNbm5cr/fDxOKX3mS/J4m/Pfnai0m+PvHq33wvOEXLpOSJiTM4J43nR5Ccuca2S/qB0Jexzz3RD2SLB6yX9oy/5dl/yK5Wucr0pa3J19vNBF2rngsI7JH3Hl/xtvuTLvuSvUPr1gdOGtP+GL/nVvmSuIg7erO2eD+G07PVtULro8ipf8jue2SuUlE6SN/qS/7Uv+X6l3/mql3SGL/lVSgfDq7K2z5fU5Uv+Vpe4WUoXpS71Jd/pS36TpK9q1/djnS/5b/qSHxjyGgdfT+xmFBiWL/k2pavnXuknS5td4n6WHZODVvmS/64v+bLSFeVDlC6KWKzjdE9aNGRs+pL/vaS/Ufq1wBslbXWJ+8puX635sS/527MF0quUTlgxP/Ul/0df8hVf8j3DtGsXYwnj3+C8vEPSiyR9cfAHvuRv9iV/f3as36f0ovJ52Y9fLekGX/J/yPIS/JPScR+zy7gc4q5s/1skHab0Q4zB/d/oS/4JX/Lel/wtSp9ae27249dK+oEv+Qd9yXfJ/uoAYxATGWMTGE76dMh8SdfK+zuVLlRcuFurH8v72+Wj13evUXpsnyvvbzf24ZTeN35I3m+T9+1K719fH7TdaZOkr8n7fnn/I6ULGefJuXmSniPpY/K+R97fI+l72vnNhYskfVreb5L3m5Uu9rzJ2H7MrmPZ+yeVLlrOVfrUyhY5d/lfF0+8v1Pe3yrvB+T9yux9eN5u2/wXed8q75+W9DvtfP9em73G1fJ+m9JvRezk/Y3y/gl57+WDc4RlTM4J4/nrOa/c/dFAl8Q+YN6j6Uq/hrNqSGyVdq6m/05Sg0vcqUq/qnOC0seppHSAvdkl7v1DfrdG6arfoOGSbQ0mwmpWmiBr0K3DJah8BuZoyOvLvvazWjtf49VKF2f+S7suCs1X+t6sH/L+5rTra7JeX3P2v6OR6AsHKV/yK5Q+rieXuKVKv/L1Ne188mvDkLZd2TEaS7b6TJLebdfOY3lwP8slLXeJy0k6R+njm49o50XghiHNu4bpTzV9ahZjCePfK33J/yZbRLxA0i0ucUf7kt+QzZ//IukYpXNkrXY++jxHQ8ZCNpa3DrOfYFxmTsq++lZU+gnX77P997jEnav0U7olSuewBkn3D9n/X4ZsJzanMQYxUTE2geG9WdKv5P2W7N9XZ7GvDmmzp+u7SyX9l3yazsEwQ+nxfad2PhTtJMVy2knSWvldcl6uUjou5kgaXHgZ+rNnZ/9/l/u+Ib83UuFYTvObpF/3SXOe/EjpEy3/KOeWKE3l8Gylr7GgtFDCULH3b5fzzG79ltyw5wjLmJwTxvOTJpbO7H8bhsRGkghmi9KM4vOHxA6TtFaSsk+xr1V6o/YGST/3OytlrJb0WV/yLUP+axiSh0EaZlXel3yn0tXMJSPop5S+xmpfnySt05DXl32FYZ6y16h0gjzbJe5QpU+cDC6arFb65Mz0Ia9vki/5oeWcrNd3lKSV2dMCwF7zJf+w0q+KHfNMN7GHf1vuU2RsZp/K/VbSTfuhT0dJuvcZ7gPYr7KnLq9X+rju4OL/1UoTtM3zJT9Z6fewB68a1yv9rrIkySWuXunXXWOi4zLbf7/ST9wOV5rvrFbp96u/JGlW9nW8X8T2r3Ru3B1jEBMeYxMwOFevdDHgeXJug5zboPSrJsfLuWq+5vEaSa+Ucx+M/HyL0nwfy+R9S/bfZPlhKyvOzZ5QGXSY0nu6dZKmyrnm3X42eF+3y33fkN+T9vL6N92Cv0Np+orB699vK03KvFjeT5L0ce0cx3uyXruO7cP++v/crucI+eAcYRmTc8KEWjTxJb9Z6cHyRpe4vEvc3ylNbLWn3xtcFPmsS1yzS9x8pd+hvHJIs6uVfsXlIu1cUJDSrw28yyXuVJc45xLX6BJ33mB+kBH6hcJHmGLuUZp/ZGpWTePSEf7etZLOc4l7QbbS/xGliyF/kv763t2sNMnrU9kn/IOZyX8l6csucZNc4nIucUdkVUSG8zyliYaAZ8QlbqlL3EeyhbzB/EVv0K7fhd4bGyUdmuX1idllbLrEXeAS93qXuCnZeD8l+/lo9mnh0IBLXJ2kZykt0wiMe9nYuEDp975XZOFmSduyT5ZP0a6PPV8n6XyXuDOy8fgpDX9BNOycmX2a/halF6dPauen55slDWSfbL94yK9cK+ktLnFHZTkf/o+xWeY0THiMTcD0SqULiUcr/TbBCUpvvH+vSKGOiHVKc3l8UM69O/ip9xWl941flXMzJUnOzZVzLwna7jRT0gfkXFHOvSbr1y/k/Wql93Cfl3N1cu44pUmaB+9dr5H0STk3Q85NV/rVusGfbZQ0Tc5NHma/u45l586Uc28f0u+lSisMDV7/NitN4tqR/Sx8/XHXZq/xUDk3RdI/DPnZLueI7KmTFxvbGOznmF0zT6hFk8zbJX1U0lZJy5QtCozA+5U+xfGk0jwpVytN8CpJ8iV/W/bzORpycvYl/5dsn/+m9FGmx5V9naAK/ynpomESWA7130pXz1YqXcwYUblTX/KPKE1++U2lK53nKy1BN7Su/dVKk21dvduvX6z0oH1I6Wu8TmnuiOG8QUO+swo8A+1KE2Dd5hLXqfTE/IDSBb/RcJOkByVtcInbEmlzg6SlLnGDjzRuVzreH1M6OVwp6Yu+5K8apT5dJulol7hWl7ifZLHzJd3sS2aiLmA8ucGl1ajalCbIe7Mv+Qezn71H0qdd4tqVXrxdO/hLWZv3K01qt15p4vNNipQX9yV/l6Qd2dcKhro32/92pY9Vv8qX/LbsydAPZPvcrvSm8GdDtrdcaYW63ymdwwcvAnslySXuEKUX04NjEphoGJtA3Jsl/UDePy3vN/z1v/Te7iI5N/J0FWm+jhdI+gc59zajxcc0eCw71ybpN5KOHGaLt0larPTe7bOSXi3vB78i9wal1XzWKU0bUZL/a+qKzyj9att9Sr/KclcWk7x/WOmiypNyrjWrwrP767hL0g65v47lVqWLJPdnVXd+me3zX7Of/39Kx2+70oWhEd2fZr4r6X+V3t/epfQJlsF+DHuOMJwv6eZIctt9yu36NSrsKy5xV0u61pf8hD/xu8SdL+lNvuRfu8fGwDjnEvcOSUf7kh/pU12jvf/bJL3Vl6LfkQUOKC5xTUov0Bb7kn8q0ubFSkuMv9L6+V7u/yilC7S1vuQHXOK+LOkJX/LfGu19ARMJYxM4iLh0LMuP/ljeZ1x6zTxMXpl9t2sWTQAAwL6ULbb/Vumj/19W+pTZSb60fy5CXOJepfRx5Aallbgq++KmD5hoGJsAsGcT8es5AABgYrlAO5PbLZb0+v11U5Z5p9KvHTyh9Lvt1XwfGziQMTYBYA940gQAAAAAAMDAkyYAAAAAAAAGFk0AAAAAAAAMIy+xJKnG1fo6Ne6rvoxrrpA34762Jozl7crCrhz5KpTR3PWV7f3195lxHQTfsmrX9i3e+xlj3Y/x6OAem/ZprNxcG8Ty3QNVbjwcnL0t9rmgZn1ndds+QPSoU32+dyTl1A86B/O4tMaOJMn6SnBDndm0b4o91pwxPRY3HJzjbzjMmXEH9diMsObS3pnhPCopes3pi+EPardU7MZdPZGOVHHumKAYm3GMTYyl4cZmVYsmdWrUqe4Fo9OrCSbfMtWMDxw5L4w1Fc22xVaz7L0qteGfoWb1VqOlVF5jl6X2A1XeDE5Av/HXrRrrPoxX435s7sOLoPxU+7qj7ayFQWzSA/a4Ut5+6M7XhGNz5StazLaHffpPkR7uQ9b7up8vLG/zv92v+5tIxv243IdcMfxAQbIX/t2yY8y2T/5NsxkvtofH/aGfr3L85ewFGVXsDywmIubMuINibFY57+anzwxiT75rkb3pyDDpmRNeix75vS67G3+xK4ZWc+6IGucLL4zNuINibGLcGm5s8vUcAAAAAAAAA4smAAAAAAAABhZNAAAAAAAADCyaAAAAAAAAGKpKBHsw2Pyu08140c5jpZqOMCu4j+Sfal3YZMb7Joe/UKk51O7Hs+yM0nNK9j4r964Ig+M8QRYOQKNwbOUaI9nUZ0wxw+vPDI/zz/zr9Wbbs+vt7P539oaJ5y751qWRHtpcrV19wPfaiaGrwpjFWIskVI0lbcwvDhM0P/Uxe046/DV/trf9nBOC2LofH222nfOqh8x4NOHrOEiuDIyKyHEbS7T62EeOCGILP2aPwdi2C/PD4gjNV9uVrdpfPduMD6zfYMat6j7RIgiMWRxIYvdtZtvI8xDeuM6tcpzkGhrM+Jr3hHNy5+H2HDtvub3PSjF8jWf8021m2+t+d5oZX/ThW824df9Q6ay+4h5PmgAAAAAAABhYNAEAAAAAADCwaAIAAAAAAGBg0QQAAAAAAMBwYCWCrSLBqZWMTpLaFtsJaub83k4UWegIE90UuuzEVIVuO/lWTWuYMG/Vy+xkO92b7GSyM5v7zbi5KkaCLIwTVtK43sNnmG17mu3TVb7XHptLPnl/EHvvYW8w295yyn+a8b/7xkeD2Jyv/slsW5g9y4xXptuJaq2zVW7LdrPtwIaNZhwYa7maohmv9NhJ4B5/SzhOJi+vbp/uj/cEsc4LTzXb7nijnTBu8pWRhHFG4uZKT08VvQP2r1hyxkqXXcFg3QeebcYXXd0abiOW8PXw+WZ84KlVQWz7R44z2z76aTtJ+pK324lgzaSvFDbAeFbt8Tkax7OPJDkfBT989Ldm/N6+8Lr44d45ZtuZL24z47d3hPflr5h8t9l29an2dfVWMxpJ+hp9ryMbEU+aAAAAAAAAmFg0AQAAAAAAMLBoAgAAAAAAYGDRBAAAAAAAwMCiCQAAAAAAgOHAqp5ThU1n2ZUu6jbZ2XTPLNkVM3508xlBzBftt3Xmrfa2X/nFW8LtPv0ss23Lq9aa8bbzjzfjdq2dCLKQYy8V5h1qxjuPO8SM9/eHx1btRiPLtaTaVXYlAF9vZ+DX3NlBaN7n7KYX3fkcMz5b4bh3RnUNKZLZX/GKOMrng1Bl9jSzaf9xYZUhSaq766kgVt4Syx8O7IXI/FBtZZn84o4gNvXjYaWras37pT1PrX6x3X7ylZENGeMSGM9iVXJiVXX6IxeGlXseGvE+rSo5kuQK4fWvv/U+u+277Ovc/KRJZrzcZlfdAMYtF3k2IVbhZh/eb+UXHR7EnnqjfW2+7AWPmvEfd9hVs5pz4XVAV8WuGFt09rVyvw/n3ss2n2W2vX3lAjO+uNnedqW9PQzG/jbD4EkTAAAAAAAAA4smAAAAAAAABhZNAAAAAAAADCyaAAAAAAAAGFg0AQAAAAAAMBxY1XMiWYdzjY1BrPNQuxLApKfsbVz3S7u6xpJrwsoYm06bYrZt2NRvxi+7/GVG/ypm2/x508349qV2xv9mo9KH7+0121IlB9WwxlX7s+aYbZtWbDPjrsPI+p+LrOVW7DHhuu3qHb63L4jlO+vtbc+2q2n5crhP32lX9/GxfkTGlTPev9x2I8O3pJq8fb7qPP2IIFb/q7A6iTTMuAdGIBepGhWrnrP53aeb8b61VcwzuUglm0pYeaDuhtvNpoUL7cpyMZXI+AbGA7M6TaRyW+W4RWa8aE8RI97fcHw5UhXEUFhvV9foPGupGa/7eTjGXaFo92PAvt7mOhf7U67GPj4rPfY46T33ZDM+/eNhpcQ59TvMtkc3rDPjZzTcGsSWFe0x+MRAtxlf2d9ixmtc+Hqac/Y2Yu74xLODWO3yO8y2R+huM27fJVR33hwOT5oAAAAAAAAYWDQBAAAAAAAwsGgCAAAAAABgYNEEAAAAAADAwKIJAAAAAACA4YCqnpNfvNCMr3rN7CDW32Rn0N76Ujvbb8tNdtWNclNYUaB7hl3pYupDdqbeGfeGsUO/+YDZtv28SCWASMrgrReeFO7vdruSSfnBR+yNAIa+08IM98X2SOb8bXaWbzU1hLFIlRzfY2fDd5Hs5MqHa8LRCjJ9kUz7Vj+qqA4gSbkG4zXGtl20T8n5DWGVLkkqNofnn/4zjzHbFn5754j7gYOcC+ewSpXVlwZe0mrGF3xz5OMhxlVRFa48YH82VHneiWY8d0uYld/a33D7BMaDleeHFdokacEN1ZTPsceP7w+r00mSM6pxxNrWbrWvlTeeYlfNmv9zM2yjSg4moHVn2deAn5pzUxDr9HblmxfW21UYyz4cyz/smGG2vXzNGWZ8248ONeOHv+mxIPbk9mlm29kfta+hax+xK+VYYtfVlS6jIqeeWaUcc7+jshUAAAAAAIADDIsmAAAAAAAABhZNAAAAAAAADCyaAAAAAAAAGCZkIthco53c6rG3zjLjc/4YJoCp2W4nptp6rJ3wtabdTirlBsKkldMftBPO5Iy2ktQ2O0xk2fXqE8y2A3V24qzZd9ivp685TKi1/mw7Oc/Mh+xtk1ALI5XviiRbmjHFDPtNW4OYa26qbqe5yNpvJIGdKZZM1tiGiyWUMpJnDsc11IXBbjuxpLcS5koqtIfte2ZH2o68azjIuRojmWMk6WnveSeb8WLeTv5sJiTO2YkfVbETxrlCOHZi/Wu8257T155p73LeLcb+jPdjuH0Cey0yn1ST0NDI+5hu+i8P2e3N/Y08SXq17VuesMf3mheN/JozlmQW2O+sBOo9PVVtYv4pa8z4w72HBLGpBTuh88l3vMqMzy2Fscq9K8y2Oa0249Mj8fb/DGMztMVsGy2lELsOMMQSvu5rPGkCAAAAAABgYNEEAAAAAADAwKIJAAAAAACAgUUTAAAAAAAAA4smAAAAAAAAhglZUKH/5CPNeMMGO9t43eYwe/FAg10tY9r93WZ83Vl2RYpiV5iZv3ZrJHt4ZeQZweu32PmFc312BZ5YlvTG1WGG4UrBrj7knrXM3vZfHrA3joNauTY86Gq22JnsB6ZExo9VLWYgUjEjX+UarzfGSqSijqu3K2z4npFXx3D5SObvavpdsLcxMNUes/mu8P2uFKur4gPszhlVAGKz16q/sX8y7Wd2lbYqO2KGq6lac+jPN5rxFR+qon/91VUQwUEucty6QqRKm6GaKjRtF55mxgfmRKqxVVGBp+rqiVW0b1hvX28vO3qzGR+NUZirMypvVfN+PIP2ODhY14DVHisXzb3NjPf58Ha9p2KfTwYG7OvIyr2jcC8XqxJZxbh3xUg1uglQCYsnTQAAAAAAAAwsmgAAAAAAABhYNAEAAAAAADCwaAIAAAAAAGBg0QQAAAAAAMAwIavnbDk2zH4tSfVb7MoyvdNqR7xtF6lwM+0hOwNy4+Pbg1jHkVPMtrVb7X22LjH2d0er2bZSZ2cd7pthV//YsSSsutG8ys6oXqmxMy5TiwMWZwy3coN9fFaK9vpsZVJYVSe3cZu9w1h1moo97s1KObFM5jn7nOLqwnNHZXs45iXJNdhjMFaZR71hpnA/dbLZdKB55FUXnF18CAeaXGQ8WKxKUopXfKr0hBXnCvPnmW2fOvd7Zvwlbz1hhJ2TVKnuoK2mIkH50SfMeHLOLWb8h7NOCrexcZPZNlYFwGxbZfUv62+A/cCqDjFKFWT2VXWIjjn2seV77fGda7Cr2VW6wmqL+9JjF9lz40dm2lU+bjjxrCDm736wqn3u73HlCpHbLApyHXis+TQyV/nTjzfj6/rsilLTi+1BrBJ57uHPp33XjE9eF463I377FrPtojfdbcarPhdamxiN82Csik9Erja8lo9eRwwzNnnSBAAAAAAAwMCiCQAAAAAAgIFFEwAAAAAAAAOLJgAAAAAAAIbxnwj2lGODUMcCO6ld81o7Qc3Wo8MkijPutpOh5nvsxDCrXxx5qy6YFISO+hc7kaXrt7f9iVf/IYh9ofO1Ztv5P7OzydatDZMESVKlEPav7XA76WXDJrt/I091h4NJX3O45uoqdsLSXJ89ZluPDhOfTt1mH8vRhK8xkeSXJiMpqySp1jj6YwlpYwp2e18bvldbTplmtp36YIcZ758U9q+/wV4Lt0c9Jqwqk6daqkmo2j93qhk/8TPvMeMz9adn1Kf95TPXv8aML5puzN+RRLDVJLTzJH6cGKxEh7Gkg5GkiLFEq32nHxVuumxvo3eKPZf2TgrP77nIMHa99lzw8FeOMeM1W8K5qtBZXcJFb0x3NW2RtkW741/7+cvNuHtdGCu+9AyzbdMa+30t9IZxH3mJk1dECjLc97D9C4ZqzrGY2JxxnoilTd2+1D5H1OXsiaLOhXNNj7fvzj698TlmfGH95iD2n2f8l9n22NX2oH3hVz9qxg/5yv6d763ErlI80fNoJYDmSRMAAAAAAAADiyYAAAAAAAAGFk0AAAAAAAAMLJoAAAAAAFIycuYAACAASURBVAAYWDQBAAAAAAAwjPvqOe7eR4NY88nPMts2rLMrTDS/f0sQ27pxvtl2+q/XmvGp9xxuxredalToWG9n2u87/ggz/sNXnRPE/D/bmYuve+9/m/G/XXSWGd/+opOC2Jyb7Oo+249rMeNUzzm45SeFFZgkqXFNmI1629F2RvAZt20349ufH2bAbrm/yWyb22GP71h1GnV1h7Fp9jHuW+3xZiXVj2XtjvE1dhWESlO4nW3H2rnWp99uV/vacVz4XrU8YbeNVXSodHWZcYxv6z9sV42wKmnMuNsYC5IqNfbnJjVbwmNi62L7+Gl5wq4gs+mnS814V084o0SKkMhX7P45F/5CJVICI5ezq2hNm2zP0xtWzwxiMx60+1dYcJgZr2wNz3cDJy0y225fbNe1mva9P9s7xT6VnxZWiSpvta+ZohbZx8XG94ZzZveqZrNtrs8+nmtaw3jPLPsY//sX/NyMf/HOF5txvz2cS4udZlP5yEeuA/V23DLnJnsj215jz/VvOvL2IPb9X4fXz5I00Gi/f4XOcJ/lSGm5LSdMMeOH32e3N/c3d479gzUj3wYmBl8eecXGrSfYk96con2tbKlx9rxen7cr8HRVwrn3/p55ZtvNAzvM+I8+8CUz3vv+8NzxjuRSs+2Uy/d+bqu2Gs6Oi04LYlPvjpzXI/O9xJMmAAAAAAAAJhZNAAAAAAAADCyaAAAAAAAAGFg0AQAAAAAAMLBoAgAAAAAAYBj31XNULgehmnY763C+3a4acUh9WBlj7VQ7s3bPUXPN+PT/tLP9zv5VmCW977iFZtua1VvNeNfSWUHs8EvXmW1fk/9bM77jlXa/2080MgzfZDaViyR+ztWFqcWrzVyMCSxS/cUXwjVXHzmjtEYqM82+1Sj1YWxXkirT7Co+rsse99a5wzfaafJz/UY/JPmu8DiPVZvJN0yzu2FUyUl3Gr7O+TfaWc+3PtvetvV+FzrtbbjC+D/dY+Q+/I7rzPi2gbCi0o0bjjHbXrnkajP+mLGNN//qHWbbtz3vF2b8+vUnmvFJ00Y+dxQik1LFrGtli1XVmd9gZ85f/qLwHHHGu+wKQRe32O/fy//yzjC28G6z7U8fO9aMT/ueGcY+tuKzYZWjSQ/b587aVvtadMs59pxUf0d4bDXZBTDUN9mON2wM99m91D4+v/7g8814U7M9Bv2WsPRNrs9+jT4fqU5jhF04FUuSeqbY2+jrsd/vy+4NK4b56fZrb77dnuu9UWyvebV9ntlyghnW2o/ZlcvqtoXv1Ylvi5TaOcUOYwJw9nHr++1j0XLMCSvNeDEyWOpy4bbzssfmsxufMuO/b1sSxObVVVcZ7I4euzLYcbVh5dlrki+abd978evMuH++Xb3W0vHasBqOJLVfaFf9+fwxlwexf/iPv7M3TvUcAAAAAACA6rBoAgAAAAAAYGDRBAAAAAAAwMCiCQAAAAAAgIFFEwAAAAAAAMO4L6eQmxxWzMj32hmDKzX2y3m4dWYQK0cKWngr9bckf8bxZrxtdpihu26TnTm9/YTZZrxhVWcQG5gz1Wyb77SzM/vI8lfdo2H/Ohfa71PDBrvqRm56WLmjsmbkWY4xsbnGBjNeMKpV9TeF2fclydnFaVTsGnkVjKrVhoPcdUYqdxiVbKLyRvr9YeKuHKk+oDBjf/8kextlu4CRBhrC98/129nX3ZRIOYa2sLoYxr+fbLSr07xoxkNBrFyxj+8L7n+LGd+8KZx3Xb09iO/psLPpL5m0yYxPKoRjsN8qaaF4JQGrfaxtbyUy3+XtuXRqY1gd66qHTjbb/rTRrnxTWwzfq7qcPb82/SqsVIT9wDm5Yk0QrlsXHi9tS+xjP99lj6t80a7GUr8lnAs65tndy/VGrkWNoZLfaF/QNjxhx1ufa8+Ds9aE/W6fZ7/GXKQijqVsF7JRpRKpwLPK/oXa7WH7jgVVdERSxZhL+xvtfjQ9bcd3HG+fOwbWhht/8Cv2OQITl4tc6/mByIWu4bQpdoWb9op97M8utAaxcuS5h84Be9wvrt848m1U7G005+1yX2vL4fVlT394fpWkfz/iR2b8lw8dFcSuftqee99/uL2N1f32vfPKvhlBbPoD9pw8HJ40AQAAAAAAMLBoAgAAAAAAYGDRBAAAAAAAwMCiCQAAAAAAgGHcJ4JVLky4k++3EyuWm+ykMz3Xh0ntyofYu+uZar8ljV12gp/mFduCWPf8FrNtsc1OWNV5eJgILpZMdqDJThpX7LITj828J9xnf4O9VjYw0842WbeiukRbOLD4Rju5a27D1iBWKdjHftsie9sDjeF4a7673WxbmdJsxl2vnZRNeeM47wiTPEqS6u3kW64mkoHV4OvtxFk+byeTy28JE7C2PcdO1to90z7nFcIc0sptDhOGSZKfTMLJA8kDa+aY8UsP/XUQu2vSfLPt+u5wbpSkqfPDcbKt204IvbLDTrx21KQNZnxzX3gcPqt5ldl2We0aM761HG7jlralZtucs8fOVqMfkpTPGXNpZBvdvfY1x5mHPRnEGnL2eSqSHxb7Wn2ddMyRQfjw/9kcxNa+NEwiKEmyDwu1G0nIJalrVjgX+Jy9EWdf0qlnariNgUn29WnrUZHPRSP97poZtu+3p135QqTfA2H/8rH865Fjv2+qfc2Z7w6vFwodkUS1A5GCEUby2Vg/euxTm3Jt9n3CQEO4zyl32OdBTGBu5M8buGcfY8YX1d1gxrcN2PNSnVFNoS6S/Hx2rXFhKKm9uCWIbS7bA7y1bM/3dc4eLC258JrBvhKVvrXlLDNuJYn/4MLfmm0rkeonXZEqL3njpFfTat9nD4cnTQAAAAAAAAwsmgAAAAAAABhYNAEAAAAAADCwaAIAAAAAAGBg0QQAAAAAAMAw/qvnTA2rSZSLdjWKcn1YaUeSpt/TEcSeMirWSFIl8o7kBuxU5u1Hhem1a7fZ2YUrNfYaVd3mMKt+bH99U+xs/YVI9Zz+pvA96Z5u96PlCbvffpLxXq03m+IAVJ5kV5YptIfZsqc9ZGfxX/ZP95nx+z9//Ij74frsbfs6O1u2WVUnUiXHFyMD36rAE+HK9hh0vZHqUwNhvHG93fasi+8y4/d/8oSRdU5SpdF+nzAx5Vfax/LZ54TH4U+KdvmKQs4+3jYaVXWm1tuVp2bV29Wujm20K9+s6A6r/ty0za58c/VnzzPjT780HJcfesEvzbYx7WX7/fudUeprRkt4DSFJTUW7Is6s2rAy1lF1a8229duoTjcWeqc7PfLWsDLcnJsag1jPtEjFxjo77ouRyjLWn9q+nFXk8FT9JiO2xp6/6k8Nq2VIUv0VU8x4w/pwjHfOtTtSbLeP21w5fO0uUsmmZpNd5ePp8+2yNblTwnocU66xK4C5ir3PHc3hNfFAnf1HMIp5SJJ83t52vjc8L/l2+zVi4nKR60Jv3EJtPdauTjO3sN2Mt5ftapXNRomnrsgNa3+kskynt+8fLQ05u7LMshrjBCTpjp55Qex/t9uVg94y8/dmfHX/tCC2tGaj3XbArtSZj5Qde3nz/UHsV+XnmG2Hw5MmAAAAAAAABhZNAAAAAAAADCyaAAAAAAAAGFg0AQAAAAAAMLBoAgAAAAAAYBj31XMqDWHFh1hWbKtSjCTVPx5m969ptTMaD0QKTBQ2hdnwJanYVAxi+S67Ck3tyh1mfPupYTWBKbfamfZrc3ZW8b4WOytysS2sOFKeZ7/ISqQqUaU5ksYdB4VynX2ayDeEx0XTfXZZpbMmPWLG764Nq7/4TrtKhxrtrOK+LhyDkuQ6wvNBZVKD2TbXZu/T14Tbdnn7PKM+e9w7YxuSpHJYfcDn7DH4wskPmvEnHgnPHX6yXRnM5yNlGjAh1W2y/54P9nUHsUNq7LlnfV9YnU6SckYG+pbacLuS1Dlgzz2bB+w59pzmFUHsx/0nmW0fXGaPncKMsCLFnKJdjWBdv10p5L72uWZ8RnO47dhrP7QhrOYhSZML4fmkx9uvJddvX89g33Jlp2JreC6f9HB4HLXPs6+72pfaFd1yxtwjSRXjEMj12uPYF+zjovWkcJ4597gHzLbfmnurGX/qOLsa1KqBsBLN1rI9n8SqVLSWwzm2ztlzYznyuW3s3GFtZ97ntppt3/ebi834jD+H72vnnCqr50T+Ns44HMqbN9sbwfjijGPA23/nSk/kwDC02oXhdFtXWKVNkqYW7LFZ1Mjnia0V+zq3tRxWBmuMVMk5LFLd5+ZIv3+88cQg9vMly822z7/kbWZ87XPDE+Qjb/222faObrt6TtEsUSaVffj3db32eWk4PGkCAAAAAABgYNEEAAAAAADAwKIJAAAAAACAgUUTAAAAAAAAw7hPBJvrCBOwFXrCZDZSPKGa3xYmtPG5MIGiJFXsnHbqWjLDjNdsCxMC9bfYiVZdJUyyJUnFrjChVveRs8y2+S478Vhvi514bModYZIsf9xse9vddmKv/OYwiaDdCxyICp12siRfNE4fRnJTSXqg+1AzPuWuLUHM1dsJXytF+xh3/fY+zUSrhcg6cXcksVe+inXlyGs33ydJrjY82Ux+xE44vaLHTlrprf6V7XGMA0vzWvt4KxoJGhtyfWbbyQU7wWldPkzEWMiNfH+S9OdtC8347/3iILa4aZPZ9uI3/68Z3zEQJrq7Yv0ZZttCJDFcTd6OHzEpPCf1e/s8sKhhoxnv9+G5qsfKAiqpuMP+22Df8kWvgUPCJIiV+x4OYo3LTjO3UXuOnWC59aFp9j6NKSxyeEb9zQl3BbF5ddvMtocvtxMuNk6xx31PT3iMTm62k6R39djXuQP94YssFO0X2VRvJ6Hs6La3XSiE25nWaPcv32GP2f6mMCFkOVLrIB8Zmrk+e9u120m2Pu5ZCV8lO+lrNW0jzn3BX8z4jrJ9nTu9YF8DtvvwOrIzklw8lnS8JR8mOS9H5rYH++x75D/sCOdvyU76evS332O2nferP5nxwjuXBbF+X+UJMqLLeP9yO8L3Y0940gQAAAAAAMDAogkAAAAAAICBRRMAAAAAAAADiyYAAAAAAAAGFk0AAAAAAAAM4756jgphJu5K0c5o3DPFrq5R0xpmOO+bYmc/bnncrgTgBux4x/wwi3/9ZrvaSMd8u+pP/aYwRbeLVMAYaLD/ZPWb7H3a75/ddKDRfv8qLU1hcJW9DRx4XLd9bLn+sIZSZYpxrEhqG4ikp99kVHeaaVcecN17X2WiUmOPn9yAXQ/KGoc+klHdx6rWxCr2WP3YEL4fkvRk93R7n43G+1q2z225Dvv9o9bOxNT8mJ1lv6sSHuMNObtKRVPeHg9Ta8KKFBXZx31/JVK5rcau0GFVolnb02K2XdFmV3qbVBNWu2oo2Me39VqkeL9zRjWgXKRaglXFR5J6jb9BnbPPMYVHV5vx0akZgJhcvqLGSeFxlGswrum22n+76S32+fqOSfbxnDMqy8QqtwxMto+A6+89KYhNnWGfCybfa5eD7G2x4zXGLnsq9jEem9UiBShNPeWwSpck1USmequ65VbZ73XRLk6iPqOIZaQAmFntKI3b54N8pAgfxpEqKt/km+3js9xmj7cdF4VVtk5t/h+z7fKtx5rx8ybdY8atebPR2dfmnZHZI6/wtW+NjO//f8cSM/4f824y4wt//c4gtvif7So5MdOawrm6o2Jfu1TLqmjnu6ofsDxpAgAAAAAAYGDRBAAAAAAAwMCiCQAAAAAAgIFFEwAAAAAAAAOLJgAAAAAAAIZxXz2nf3pYjcNV7OzHjRvsTMK5ujA9eS6Snbt3kr2OlCvbb1Xz4x1BrNxol6epabczGg80htuOvcZ8t72N3mn2Pl1v+J6UI1nF8712CnFfjKQQx0HBqpIjSa4nzGrds2iK2XYgkobe9xqZsYv2WLP2J0nKR47PojEmcnYFEFew9+nz4fnA1UfKHUS4rki/c+G2y9tbzaa1OXtsds8Nz4+NKzaZbX3kfcUE9eQaM9xaCU/wdTl7bsxHKi21FO2KM5aOcq0Z7y7bc5JViaYpUvlmctGuwNOUD8dUOfIZUD5SH6qlYJ/Xci7sX+z9m15oN+Nr+qYa/bPPPeWt28w49q1KxamrMzx2c1PCaizFX99pbmPe5+2/6R1F+5gr14bHaKxCS1RfuI3TZ9vlDJcvDI9DSao0RGozVcLX48qRanGRCjLWcIttww1Etl2IVIDrNfpn9DmNR7pnXRb0R/phh+WLdv+a19rnFIwjOXvAOeP6KFYlJz9jhhk//oP3BrEfbTjZbHvBTLtKTlfFnk/7qjhRNEaq5XUa2/5t69Fm24X1W8z4D3YsMOOL33zXyDo3jAWTwmpk7d4eyFY1HMmufidJPT4c+L6H6jkAAAAAAACjgkUTAAAAAAAAA4smAAAAAAAABhZNAAAAAAAADCyaAAAAAAAAGCZkOYX+hurWemqXLAhisczatW32D4ptdlbstiObw2202pnJa1rtjMa9U8OMxnXrO822fdMazHi+x87m3XtYmD09bxckkCIVe8r1YdZhVtvg28LKUTvm2xUz6iPlqird4TGXj1XJMarNSJLKkUoAhnxHZNsxrUb29D67koZq7aznVYm+FjuN/46F4fvdcIdd+cQ12ecOTEyVdrtyy6ZyOCcVXXVVHaYXw23vGLCPn9qcve2iG/m4tCrWSFIlUr7Cypwfq5LTVLDHfKx/tUalnLwilUIi8sYFRsUza44r3qnSFx5H/YeFlTHc2nXmJgo5+7ioabLnu/J2q1Ki3b2mWeH8Kkn/fMzPgti/P32O2daqNiNJvrj3x6Lri1WtMeLVDR/lYtuOVOExxfZpbGKgwW4cq+7TcohdVaXpz2ElrJGfBTGqXORYqdh/Ed8bxguHzjXbtn7PvtbrbQsr1x3WtN1su7TWPqfURebq9srIqza2GxX0JOmurgVBrCVSoe5j0x4z4y87/kWRvW4OItGqlAP2azy8Iaye01mxz1VWNRwpPldb1et8X6SM7jCYxQEAAAAAAAwsmgAAAAAAABhYNAEAAAAAADCwaAIAAAAAAGAY94lgi9vCpIaFGTVm20KHneCnUmckS7Rz8KhcaycPKnbYyR+teH9TJEHNQyvtnZ55ZBCKJXytXbvDjPfOnWzGn7ogfK9qt9jdqNTaa2i1m8O/QSR3GQ4ivjdMsNh2up1U6uZ1i8z4dP/oyHdYsY86V44cjTljLMeSg+1LkX5bCWVjCbLu3LLQjLc+K/wbHPJfkWS3JII9KJxdH05ud/ROM9tWkwy1Px8mzRxuG73evrwoV5EQtbsSS/YWjqlYMtmxUGsk83uka1akdSwzO/Yl1+9U3BgeX21HhMft5D/b27jxqWVmfNkh6834PcZ53Oft47ZjY5MZ37o0jD+5frrZtjLDvm51HfZY9o3hWHZdkbaFyHizwlVmQzWTySr+XtkbGflcH9tu2c6nqf6y/Z5UtoaJYLGPxf7Ovrr5YNN7zghiiy98xGz79Gb7fivfEJ7LOwfs+9X/2X6KGT+j2U7AOi1vJ4a2PN1vz/eb+sMk8Sc1rjTbHr78bWZ8yea/jLgfsevZmCNqNwaxXiPpuxRPrG5du8RY9zB7wpMmAAAAAAAABhZNAAAAAAAADCyaAAAAAAAAGFg0AQAAAAAAMLBoAgAAAAAAYBj31XPKzbVBLN9rV6Oo1NhrQJ3zwqoRPm9nXM4N2BmXtx/ZaMZbHgsry/RNtt/W3El2BZGa1r5wG1PsjMuVhvD9kKSeafY+F14fZgfedJKdErwcqZ5TqbcrGOAgsc2u2OQawzFx8sJVZtv7frE0svGRV8+JVsmJ8MVwTMTGfVUiVUQUyRTu+iMZxGtGPq62/3G2GV/2gqeCWPRdilXxwQHlJx2Lg9iSmg1VbcOqTtOc6zHblnP2vNEbqXzTVbHnNrMfzj5mrQo8sSo+dZFs+rnItuuMyjexjPyNOTv7vrXPKx892Ww7Tw+YcexbuV5p0pNh/LQPhdUhVlxpb6P38Ulm/MwldrmdexRWz8k1RSrcbLSv9T7zu1cEsUVH2tV61u+w+9fVYVfmsfhipApJNdNJldNupGCGrCEeK8YVq4iTNyrz5AbsDpbr7W0MdNnnsGqrhSDCSa4QXr9ZMR+pkhOrjPL4f59oxr9x+veD2PtueaPdv377oFt2bDjPNubD+ztJ6qvY92yP9hxixo+rfzqI1UTmvCd6Zppxa16/oGm12faqt468So4U+dtUOR6W1obnsZ5IFb5qVVO1bzg8aQIAAAAAAGBg0QQAAAAAAMDAogkAAAAAAICBRRMAAAAAAAADiyYAAAAAAACGcV89p2dGXRDrb7TXeppXhpVsJKkrUvnGku+zMzHXtNlZijvnhv1rWG9nbe6eZWdDr2kPX0+h096fItU/Jj3aZsb7p4SVcvpa7E1X1kXihbB/rLYdRHwkTX5fmPX/mOZNZtOVq5aMeHeuwx7HKkaqzRTsVPuu2xiHU0ZeNUCSXG04Zn17R1Xb0IA9ln2TfT6wNK22z0vPmhJmVL8jb2dO952R9xUHlF9uXhbEnjVvpdm2P1Kmwqr+0l+OlLSIiFWzacrbVXgssf5Z8rLHSKzyTax/NUb1nFjbotFWkmbkw/m4Z/3Ir0Ow7xW2dGrad8MqN8d+OKyA8eiMY81tLP7BFjN+6qsfN+PfzL8wiPle+xjPzbSvI9UTXrav3T7ZbNrXZ1/i+5pIRZxyeH2Z77Sv9mLFKMyiVJHdRUWq7Tijf7GNx/pXKYTt7e1K5Ub72ie3ZeRzN54Bb1deGY3qRM9Z9IQZ/+RX/y6ILfn3P5ltH//KaWa8tTe835o5qd1se0zjWjM+Kddtxtsr4bZj82NvpDLP8yc9FMROueLDZtsFsiuAxYzG3+Z3HUcHseONqkFjiXtfAAAAAAAAA4smAAAAAAAABhZNAAAAAAAADCyaAAAAAAAAGMZ9IlhXHnkGqe7ZYVJWSeptCZM8TX3ETg4XE8tH17ChLww6O6lUsTOSULMSvsZynb3Dwg77/eg+1E5w6XNhX8xEXZIKPZGEWkYiWMAfPjeIHVrzsNm2blsksXE1KrHxY483bySqtZIaS1I+P/KEk75svxYX2YbVD0lSZDuWula77dya7UHs9rl20kL3dCTTMw4o9z59aBicZ7eNJZLLKzLWqmhrJZOtVjnyuU41/Ysla62JJHfNGRNkLMlsjPXa69dVl0gXY+P688Ikj49/5BCz7exb7WPoD51HmvFlS1cHse09YYJHSZpcaydMfnr7lCDW3Vljtq2ps4/9Sl1sDguP/UptJJF5OXJdOGDMx5E5OjqMY5ecRnvnq9y2cX3u8/b4dv2Ra4tctZltUZWmevkTTgjC244yEq3+1E667PL2QdTRbx8YXWeFCf5XzTzDbFs81E7u2lQMkzdPK3ba/Sjb96uxRLCdlTD58GPds8y2c2vD60JJWtU3I4gt+ER1CV9j97dyxvtdqe6630oSv2mguaptxK4N8taNb+y1DDO8uRsGAAAAAAAwsGgCAAAAAABgYNEEAAAAAADAwKIJAAAAAACAgUUTAAAAAAAAw7ivnlO7LcxG3Dmr0WzbsMHOFF47Ocxav+Nw+6W3PBHL+G9n2e2cG2Y0rkTe1eZV4WuRpJ4ZYebzQpedAbhSb2/cqpIjSfXru4LYwBl2NuL+BnsNrW7j3ldBwMTlu+0s/r4mPBZnFNrMtg0rd9jbaGgIY1129nDVFM2wK4/8NBarBBWtcDMQnlOiVXJiVXVindkRZmt3teH5RJKaVmwz47MLrUGs0mRXUqB2x8Gh5vGwwkD+OXY6+Fj1HEtDzp6/YlVyYtVpyn7kn9WYGe8jctVkzVe8Ik45PmLDtpHXUjHik58a+WvB2Bl4cmUQO/wfwpgkPXl1WOFDko6pD6vkSNL65slBbPIUe757+5TbzHijUaViQ6RIRSVyLF+1/VQz/mTX9CC2csdUs21nrz3PlI2qOlZsuLgvj3wMxqr4+FhVPWvYR/aXq7fvKXyb/doxOnzOqW9SeL1XeUV4HdR0iX1ebS7Y4+p10+1xNfew8No1d6o9RzzSP9OMVzO3tVfs6jmbByaZ8S0DYYXUQ2rs6+ptA/Y98k1vXGZE7YqXsWtR32tfB7hCeC3hq6yeMy0fXhO3VezqYj0V+34gNn9fvfn0MOjD/e0JT5oAAAAAAAAYWDQBAAAAAAAwsGgCAAAAAABgYNEEAAAAAADAwKIJAAAAAACAYdxXz7EUu+yMxrWPbzTjHc+dH8Qeeve3zLYvO/5FZrz1BUeY8Xxf2Jd8n9lUnXPsbMQ1HWGG4VgS5r4pdtbuStHOGDxgVNJoetreds9Uexst94XVU6rLiYyJzBkVbiRJ/SM/CsorHjPjuXojM3akOo3KkeoTsbOYH4VqFZGKOPb+7POSVYFHkpQPB3ku8l6XH3ncjFvZxnPdkUpAkepDOLDUbQpjOWcfm7EM9H1GVZ18ZBtWpRhJ6qmikkBMj7f7lzcq5eQiVXJqIrNVuYpqO7FKOz3ePvlYfanbQhW6A0253z7GY8fLPVsPDWKrVs0w2/72l2ea8aanw4qIHfPteWPLsfZc2jvPvkhdMn9DEFs2NYxJ0va+SFWLcjhmyxX7feqNVL7rj7S3rlAjs250n1Z8IFKBp7Zoz90b+1oiew25YqTSTuQ+AZJr61Lt8juC+IzlYdu2SJWX1mctNeOfm3KUGd/47PC4nX3mWrPt6+b+xYwfXRe2j82PC4pbzHgxMo+1V8Lj6DsbzzbbbvpAeM8rSf6B+8242TZSJWc05Brt6j7WvLmkxj7/LK1dV9U+Pzr1iSD2sinn2I3tYpWSeNIEAAAAAADAxKIJAAAAAACAgUUTAAAAAAAAA4smAAAAAAAABhZNAAAAAAAADBOyek651q7yEqsOccgfwyzAr3/p8822rtHOCN70dLcZH2gI38JI8uMoX4i8HkOhw87A741KHJJUs3Z7JSlrlQAAIABJREFUECufMGfE+5MkX4xUM8FBwdXZ2cndhq1BbF6h1Wybb7GzzZe3h8dnYdpUuyP9keoTVVTb6Z1mnyNqIuPHW9uOtHWRLO4x1vs6sMbO1p6fMsWM17kwu39uW7u9wyr7h4lp8lPhOGk2jhNJOr3Jrmo1O98WxI4sVjex1bq9r9bU6+0xnzM+78m7kc+jwykoHPO3RgoJzC+E5y9Jajeq/tQ/GZ4vJSlSWwtjJD9pUhArt4XjQZIOudGujPK+4hvM+EmHrQ5i1730KrNt/0vsujCrBsJr1FiVqZ+0nmTGF9TZlTt++PmXBrHcdXbb3IzIdYFRLa4Q+Xi2ME5KyPiesEKkJPk++/wzuSOsxBHf+ChU8TsY5cLzsDOux2JVXtyf7jXjsaugw24ccc/0Y9kVr35SnBvEcovsSjblyfa9pir2uM+vCqvDljcapfIkSSOvkjNafP/Ix3Kls9OMX/G808Ng5L6+b940M941p86Mu3L4vjZuvy3SwzieNAEAAAAAADCwaAIAAAAAAGBg0QQAAAAAAMDAogkAAAAAAIBh3CeCzW/vCmL1W+1UPr7WThhTuOnOILb9ptget5lRt/JpM773qe5GRywFnpVkrtB1iNk2H0l253pJVXcw8x120qbKwjCh8BVbzzDbWglfY8rrN5jxXEOD/QtVJDgttpVH3FaSfJ+R3MrbiboUSUTpauxkgeX1xnsS2XalKzwPStJlW84K205usvv3pH0Ow4GldvkdQeyCb/y92bZ9ceTcXgiTFxYa7LYDPZHLiJ7IZzJVfFST644kaLbCLjIufWRcRporFjcUOuxtz/pLeJ6pf/L2kW8Y+4dxzo4lfbU0XXtrJG6332HELl78JrNt/5zJZnzb0jDRYc9U+zhsXG8fzPeujyQ4/d/w9cTSmFZWr4n85CBmHE/eSIyLEaiE51BvxMYTKxlqeYWdbL1a4/uVj46ByLW/JbcqTKotSZGr31HDkyYAAAAAAAAGFk0AAAAAAAAMLJoAAAAAAAAYWDQBAAAAAAAwsGgCAAAAAABgcD5WCcJq7NxmSav2XXeAYc333s8Y606MR4xNjCHGZQTjEmOMsRnB2MQYY2xGMDYxxqJjs6pFEwAAAAAAgIMFX88BAAAAAAAwsGgCAAAAAABgYNEEAAAAAADAwKIJAAAAAACAgUUTAAAAAAAAA4smAAAAAAAABhZNAAAAAAAADCyaAAAAAAAAGFg0AQAAAAAAMLBoAgAAAAAAYGDRBAAAAAAAwMCiCQAAAAAAgIFFEwAAAAAAAAOLJgAAAAAAAAYWTTIucStd4l64D7d/jUvcK/fV9kfYh0tc4v4wSts63yXuR6OxLWAsucT90SXuxDHa95dd4t49FvsGxrvxMG8+U8yR2Fu7X7O5xHmXuEVj2adBozU2h157u8R9yiXuyr3vXdV9YKxiv+F+s+ptjZvxWRjrDuzOJe5MSf8qaZmksqQVki71JX/HmHZsL7jEHSfpeEkXZv+ukfR5Sa+T1CJpi6Sf+JK/dMw6WSVf8je4xH3eJe44X/L3jXV/MHG5xF0o6cOSlkpql3SPpM/6kt+rE65L3M2SrvQl/71h2pwvqd2X/N1DYkskfVbSOZKKklZJulzS133Jl/eiP5dIepsv+TOHhL8k6XaXuMt8yfc9020DQ7nEdQz5Z4OkXqXzqSS905f8Vfu/V9UZOm+6xH1c0sezHxWUjsvu7N+rfMkvG4MuDos5EoNc4lZKmqV0DHZKWi7pfb7kO4b7vfHKuKa9RNJlSsdkRdKTkj7pS/7nY9XHajBWD07cb04M42l8jqsnTVziJkn6uaRvSpoqaa6kROkF37jnEhdbhHqnpKt8yfvs3/8o6dmSTpHULOlsSXft8w6OkiGv8xpJ7xjLvmBic4n7sKSvSfqc0ovKwyR9S9IF+6kL75L030P6c4Sk2yStlnSsL/nJkl6jdLw2j/bOfcmvl/SwpFeM9rZx8PIl3zT4n6SnJZ0/JPbXBZNh5qz9ZiTzpi/5zw15Pe+S9Ochr2fZkG05l7gxv65hjoTh/Oz4PUnpfPLJMe7PHlVxTStlY1Lpjdllkq51iZuyr/u4txirByfuNyeG8TY+x/yCaTdLJMmX/DXZv7sl/Wrwh4Of1Eq6VdJbJbVKeo8v+eXZzydL+oqklyld7f6BpJIv+XJ2M/RdpStwXtL/SnqvL/nW3TvhEneUpF9I+rgv+Wtc4l4u6TOSFkh6SNK7Ble7sk8Qvi3pIklHusQ1+pIf2G2T50q6eMi/T5b0Y1/y67J/r8z+G9z/Skn/lv3OfEm/lPRmX/I92c+H688/SHq7pJlKb/w+4Uv+x7u/xqztFyWdLum8LBR77y7Jtnl71qdvK53wb5Z0paT3WdsHhpON109Leosv+euH/OiG7D+5xNVK+oKk12Y/u1bSx3zJ92YXZP8t6VSl57I/Kh0La1ziPivpuZJOc4n7mqTLfcnvcpxmK/DPVzrJDEok/cmX/IcHA77kH1G2ap/93iuUrtzPVfpUzLt9ya/IfmaOv+yc8h+SitlTAAO+5FuyTd6sdAxeV837B1TLJe5spefsb0r6kKRfu8S9TfExdol2ezrKJc5LWuxL/nGXuJcpfVpqnqQ2SV/1Jf+lrN1oz5ux13Sz0rF/ttIb0mNd4mZK+rrSa4pHJX3Ql/yfhuz7bb7kf5P9+1OSFvmSf6NLXJ2k72X7zkt6TNLLfclv3MP1xSVijsQI+JJf6xK3XNIxLnELJD0lqTh4/I/kCcms3WSl4/hcSV1Kr28/p/QprI2SzvQl/0DWdobSxdP5vuQ37cux6Uu+4hL3fUnfkHSES9z7JK3xJf/JbPtnZ6/v0D29V7G51iXuY5JO9iX/6iFtvy7J+ZL/AGMVI8D9prjfrNaYfyKzm0cllV3irnCJOzeySn2qpEckTVf6WNVlLnEu+9nlkgYkLZJ0oqQXKz3oJckpPfnOkXSU0ou8T+2+cZe4k5Qe4O/PDuATJX1f6Y3VNEnfkfSz7GZu0BuUHggtux/ALnGNkg7P+jzoVkkfdol7j0vcsUP6P9RrJb00+93jJF2SbW9P/XlC6c3iZKU3gFe6xB2yW59yLnHfzbb7Yl/yO/bw3knp+/6k0qcBPpvFVkhakK3YAtU6XVKdJPMkm/mEpNMknaB0AjpFOz+hyyk92c5X+oRKt9KTv3zJf0LS75U+At20+4JJZrGkii/5NUNiL9QwixfZV3eukXSppBlKJ7sbsgUYKTL+skWVoZ+QtwzZ7IrstQH7w2yln6zNV/rJzXBjbE8uU/p1n2ZJx0i6SRrRPCVVP28O503Za2lW+hW/G5XetE1TenF2o0vctBFs581Kx+687HffpZ1fA7pczJHYSy5x85TeLNy9p7Z78E2lx+pCSc9TeoPxFl/yvZKuVzq+Br1W0i3Zgsk+HZvZJ8Nvk9ShdNHxGdnDXPtDSS9ziWvO2uaz13h19uuXi7GK4XG/uRP3myM0rp408SXf5tLvmH1M6SrdbJe4X0h6uy/5jVmzVb7kvytJLnFXKH2Uf1b26dfLlB5I3ZI6XeK+qvRC6ju+5B+X9Hi2jc0ucV+RVNqtC89VuqL4Rl/yN2exwd+/Lfv3FS79fvVpkm7JYt/wJb868rIGb47ah8Q+L2m70tXCr0ra6hL3j77krxjS5huDK4MucTcovaDdY398yf/PkG38yCXuH5VeBP80ixWVTkQFpY+L9rnEzdIw7132e+t8yX8z+/+DA3XwNbUo/ZQRqMY0SVuMlfKhLlI6oWySJJe4ROkx+X98yW+V9H8HG2ZPl/yuiv23aNdxOdin9cP8zusk3ehL/tfZPr8k6YOSzpB08wjGn6VdO88TwL5WUfqpTq8kucRFx9gIttUv6WiXuHt9yW9XOq9J+2beHM7lvuQfzPr/YkmP+ZIf/NrdNS5xH5B0vtKLtT29nmlKnzy5T9Kd2TaZI7G3fuISNyBph9JFvcGvpFYtWyR4vaQTfMm3S2p3ifuy0sXDy5QuHnxH6YKolD4pOXic7quxeZpL/h97dx4nV1Xmf/x7qrp6705n30kICXsQkEUcGXBwQ+U3OijjijrqD53R0dGf6ziW5TI6OijuA+6KKIqOjorKAIKjLKLIToAAWSB70p303l1V5/fHqZ50+jynU5V0kk7yeb9evDRPn751qvqee+4999bzuC6FfX+lpBf7vN/uCtY1WlWSc63P+5tcwd0p6cWSvq3wxGifz/vbGKuoBtebXG/uiUm1aCJJlTuyr5UkV3DHKjyOc5l2rppvGNW2r3JAblW4c5aTtH7UQTqj8MjQyEnPZxV21LbKz0ZO8Ea8SWFHuGlUbJGk17iCe+uoWL3CCuKI1A4shUe6VHnNgUq/S5K+KOmLruCaJP2dpK+7gvvDyGP+o9+nwqOXI683bn9cwV2skFRzceVnrQqrpCOWqnI30e9MPLlI43x247zHkRwP0SNnQBW2SprhCq5unIWTeQqJWEes1s59vVlhEniepJG7BG2u4LK+uoStnYrzlGyVNNdoa/an8ijyWoXHh6sZf5Y2MYaw/2weefS2IjnGqnChwlMpn3AFd4+k9/q8v1X7YN7cjdHbGvt+VPn3/Cq28x2Fu4LfdwXXoXD+8c9ijsTee9HIV8JG7MWCwgztTFI+YvQ+/htJza7gzlT4qs7J2vlE574am7f5XZOc761x51qFhaGXKyyavEI7nzJhrKIqXG9yvVmrSbdoMprP+xWu4L6pXXMOpKxVSOAzI3EB9q8K3y1b7vN+mwvlmL4wps2bJL3HFdxnfN7/06jtfszn/ceU5pM/yPteV3CPKnx/brPx836Fnbkg6XiFR5DGk+yPK7hFCium5yl8DaDkCu4uhUfFRjyoMIB+6Qrur3zI17C7zy71Ho+TtMrnPavy2BO3Kux3L1L6KzHrFA6y91f+fUQlJknvlHSMpDN93m9wBXeywiPPI/t7clxWrJTkXMHN93n/ZCV2vcKF4DfG6c/ykX9UHnVcKOnJKsZfqj/HSbp7N30FJsrY/XC8MdarUH1HkuQKbs4uGwpVBv7aFVxO4bvGP1AYD/t03tzNtkbez2hHKHxXWxrznhS+rjTyusMKjxkXXMg3ca3Co87XijkSE6+38r/N2nn3dE6i7WhbFJ6KWqSQZ0AK+/iTUrhQcgX3A4WLv42Sfl55IkXa/2MzOd52IznXVkI/lHSpK7gFCk+cnFWJcz6LmnG9aeJ6c4xJtWhSWel7gaSrfUjmuFDhoH/b7n7X5/16V3DXKRxE/0Xh+5RHSlrg8/5mhVWq7ZK2u4KbL+ldxma6Fe5a3+AK7hM+79+rsFP8pyu46xUS0zQrJJz77ahJaHeuVfjO6e8r7/PtCkmtbleY+F5Z6V8133FN9kdSi8LOtrnyOq9T+J75LirfnauXdL0ruHN93j+6m88u5RyF0nlAzSqP7n5Q4SBeVEjCNayQV+SZPu/frfBo3wdcwd2hsG9/UOFugBTGTL+kLldw0xQ//rhR4fveqdcfqoyjc7TzLlVe0h0uJK26tLIYs1Th+6gjF4XvdQV3nsKYe5vCBHCLwqr6eONvo6QFruDq/a7lhc9RSD4JHAjjjbG7JZ1QWZBcoVHfy67MIS9VuCDb7gpuh8JXf6R9MG/W4FpJn3ehlPkPFBZBj1eolCCFufdlLiTjfIqkl6iyoOIK7pkKF6QPKFzEDivkPdrd+UUKcySSfN5vdgX3pKRXuYK7XCGnzlFV/N7IosjHKnd7pync8f33Uc2ukvQThacn/3lUfH+PzbskvdMV3EcV7lJXW+p0vLl25LO7SeEGx+Mjd80Zq6gG15tcb+6JyZYItlshAcztruB6FXbe+xTuKFfjYoWD8gMKj0Jdo52P2hcUMuuPfJ/0x9YGfMhu/GxJ57uC+4jP+z8qZPL9QmWbK1V5nKsGV0h6pduZgKdP0qUKj0RtkfQPki70ef/Y7jY0Xn983j9Q2e6tChdoy5WY1CrfZ/uwpBsrd9TG++xSXq6d30EDaubz/lKFk70PKBx81yosTvyk0uSjkv4o6R5J9yqUSvto5WeXSWpSGEO3aeed5BGflfQSV3CdruA+l+jC5QrfAx/pz6MKd6wWS7rfFdx2hbwpf5TUXVkpf5VCEr4tCnkSLvB5P1TF+LtR4W7+BldwWyTJhaRZx496v8D+lhxjPu8fVpgnrldI6vi7Mb/7akmrKgsmb1I4IRt3nqrB2HmzKj7kOnqhwnnDVknvVqiAs6XS5F8ULkw7Fc4Lrhr163MU5r4dCnfJbtbOkuTMkdgX3qhwUbVV0gmqLApU4a0KT3E8pjAur1JI2ihJquQh6FV4lP6Xo+L7e2x+R2HxdZXCjZGrq3mB8ebaUc2uUrjJctWYX2esYne43twNrjdjzvvkkz6YQK7grpL0A5/3h8TFkSu4CyS92uf9RbttDExiruB+r1BlZ2+rGezJa18q6VGf91/a368NTHYH87zJHIlD2cE8NsdirOJQciiNTWlyjU8WTQAAAAAAAAyT7es5AAAAAAAAkwKLJgAAAAAAAAYWTQAAAAAAAAwsmgAAAAAAABjqamlc7xp8o1r2VV+AcXWrc4v3fuaB7sdkxNiMDc2LPw+fWibOlc2wG4x/oX5d795065AzoF4N+cGaysIeLg6HcZk9JmvGG7NFMz4tG4+flV2z7W0P2K95xJxNUczL3gUHyzkz3leuN+MDDx46yfGZM9MOpbHpmhrNuF9YsuMb7DHhjF2/XGePq5I9fOSsl0zMDnV99rw7ZB8OpH5jPl5/cM7HjM20Q2ls4uAz3tisadGkUS060503Mb0CanS9v2b1ge7DZHVIjU2XOMOqsdLX6jefFcWGW+1tuDn21Vn2saYotvgDt9bUj4l6P5PV7f6GA92FSeuQGpcJU74+3Ywf3RovbEjSKztuj2Iv+NnbzLZT77NXOb/4ni9EsSHZizePDM4x43/uWWS3P33QjB+MmDPTDqWxmTnmODNe/HSPHf+UPSayA/GKx8B0e4Fl+xJ7vDV0xfNa6mbFjLvtBY/V70jM0/e1RbEjPnyLvfGU1Hxs2YdzNGMz7VAamzj4jDc2+XoOAAAAAACAgUUTAAAAAAAAA4smAAAAAAAAhppymgDAuFLfF3aJ9dmykTWuxu8Rr3/H0834ijd8KYr9NpFYcmHW/u73kee2RrGnrXiT2XbKlbfZG5+A70W7nJ11zw8P7fW2gWr0vPRMM/7BeV824z/uPM2Mf7cr3s5lz/uO2Xbbs+PxJ0l/Glgcxe7cYecouWXtkWb8fct/acYfPO+vo1jdDX8y2wKTQaklkZU1oXuhfeq/Y0kcP/7pj5lte7ummvHWpniS7R2y+9fVZ+dDWjR9rRlf6+OcJjU7RHKJAdj/eNIEAAAAAADAwKIJAAAAAACAgUUTAAAAAAAAA4smAAAAAAAABhLBApg4qSRr3kj4mpA56VgzvvK9jWb8a0+LE75K0jd3zIpin7r/2Wbbvq3NZvwdf3FdFHvZ+35ltv3S8eeb8aO+32nGy/esMOMWEr7iQBtqte+x/KbneDN+TPMGM35f7/wotrnYbrbNuaIZf3IwTkJ5Qus6s+3GmXbyyC2J19xwZkMUW3CD2RTY76z5cbg+a7bNnmcnVJ1Rt96Mz1oSJ1NeecwMs+0rlv7RjL9/xkNR7Jl/90azbeOG7Wa8/KwnzfjiKd1x8LhlZtvSg4+YcQDYUzxpAgAAAAAAYGDRBAAAAAAAwMCiCQAAAAAAgIFFEwAAAAAAAAOLJgAAAAAAAAaq5wDY5za+9elm/PRX3R3FPjz3q2bb2wfnmPHvbP4L+zUH4qoZ95/13VQXTZc8cVYU2zzQara9+IW/MeNHv8SuVPDfnSdGsevvtiuRHP8RexvFtU+YcWCibT2tbMbfN/0BM/7Dnulm/G+m/imKdWT6zbaPDs8042+cdksUu7l/idn24nlxW0l6aoNdoeMrueeZcWB/qlsQV5mSpOHWuLpTXU+iutpp8RwjSZneQbv9+k1RaP6FO8ymvz31NDP+uyfiCjz1m+8027qZ9jEis/wYM15qro9iQx3x5yFJTVvsY0dp82YzDgC7w5MmAAAAAAAABhZNAAAAAAAADCyaAAAAAAAAGFg0AQAAAAAAMLBoAgAAAAAAYKB6DoA9ku2YEsWW/2a72fa4pmvM+L29C6LY+9edb7btL+XM+JxGO7t/c12cVf8Dm5abbZ/ZZlcAeXj7rChWnymZba9bf5wZ/5W3K+K0NwxEsfNPuddsO+1nvWb8jpOzZhyYcHbxHK0p9pnxe/pONuMb6uPjxpL6uGqHJL3rtpeY8Zct/2MUW9y4xWz7eL9dRaM9E48/SRpu9WYc2CecM8O+Ma4UI0l1j8aV1PzcGWbbUrM9Z/q6JrsrrUdEsXKzfZnQtaTRjFv1cNwCewwW6xOXIPZHorquuMpW8yZ7/vdT2+2NUD0HwB7iSRMAAAAAAAADiyYAAAAAAAAGFk0AAAAAAAAMLJoAAAAAAAAYWDQBAAAAAAAwUD0HwB559PJFUewf2n5gtv1z32IzPr+hK4oN+9oqwmwaaDPjA8W4csDGQTuj/ie32hV7vI/T+JcTqf1b6wdTXTSVyvGa9X3b5pptl02xM/5vestJUWzWF26pqR9ANRo32uNydTFRpSJhWrYnipUT92+sKjmSNLc+rtJV74pm287hZjNeSozj7JAZBvYJl7XHlW+xq9O4Ldvi2BMbzbZ1Q8P2izbEleUkyXd3R7Fcmz2/NrcfafdvOK4u53P2e6zbGh8LJMk/ucGMq8n4TNrt/vlm+z064737wdrmbgCHJ540AQAAAAAAMLBoAgAAAAAAYGDRBAAAAAAAwMCiCQAAAAAAgIFEsAeZgQvOMOONP/vDfu4JDnf/espPolijsxPPbRicYsYzrhzFpud6zbatWTtZ2/rEtvuK9VGsIWMnizyqfYsZf6KvI4rVuTjRnSQ93jndjLc02JklZzXHSfea6uzPryPXZ8a7nx7HZ33BbArslbp+O75meJoZv2NbnChakp66cFUUOya3yWw7Z0qc8FWShhQnlry73369Nb12/7Id3ow3brYTxAL7gquzT8PLTXEic0nKDMTzoGuy73/Ovs7ex+9YN8uMnzQ7nh/vfHKO2XbeFfY8+EQh7sv0FntOHyja7/2iI9ab8RvOP96Mm7z93p2Lx7fdEgB2xZMmAAAAAAAABhZNAAAAAAAADCyaAAAAAAAAGFg0AQAAAAAAMLBoAgAAAAAAYKB6ziRVPvsUMz7091vNeKn+TDPe8qPbo1gqW7sv2pVFJoSRsTwpkfUck8tRuc1RrCT77/zu2TeY8X98/MIoVm6213KbsnYVmra6ATPePdwQxbYMtZhtM4n8+Y3ZuJrNjqFGs21dNq4EJEkdjXbZkW0DcV8WtHaZbdsT7/HpRz4WxTaaLYG9M21ForJT1q7stKXHHmsPDsyLYqc3rjPbXt+7xIyf2vR4FFs/ZFfR6i8mqpDIHq8z7rGrdAH7Quq8q9wQV4iSpGx9XBWu1GXPG1sHZ5vxk+c8acafM+2+KLaya4bZ9vGXNJnxDxx7YxT76C0vNNtmG+0KPI/NnGnGi2ufiLcxw65alxm0zxd8q3FcGrDnVwAYjSdNAAAAAAAADCyaAAAAAAAAGFg0AQAAAAAAMLBoAgAAAAAAYGDRBAAAAAAAwHD4Vs9JVXOZgMotLhdnN5ckP2xn8862t0exJ95utz2hzc6S/qcXxduQpKU/MvpRa5Uc67Oq9XOiIs4h5+SGuDrN97unmm2f2tZpxs+YuiqKdRabzbZT6uwqNCVvr/32l+Jx2JCx9/1FTVvM+IqeuVFsoGRX4yiV7WPKzMYeM245c0pcFUSS1gxOM+PHtsS1cjY6+/NjDGJvNN30gBkf9vZpxFDRrv6xvRhX3ZibtStxfO/D55vxt37mP6LY1dvi45Ek9Qzb8/EDg/PNeP3tK6KYXWcH2HuZ6faxvZTa6Yx5Vzt2mE3rnF2d5uFOuzrNvVdfFMXK9vCRW2xv+19/9aIoNucOext9M+2N/2naAjPerkfjYNY+zgwcE8/dkj2+gQmxL6uE7ucKpFvfeJYZn/6VW6vfSC19lmrrd2Lbrs4+P/dFo/rfHnxOPGkCAAAAAABgYNEEAAAAAADAwKIJAAAAAACAgUUTAAAAAAAAw+GbCHZfJkXM1Jb8pvMFx0ex5x95u9n2pnXLzPgRc7aZ8W0/PzqKzXzFBrNtKZFMjASSh7e6uXOqbjvg7SRMKUsb433xrt5FZtu5OTsJcuo1dxQbo1gpsU5cTiSTbakbjGJbB1vMtkdMsfvXVjdgxtcU46S5T29+xGy7auBpZnxaXZxkNntUfDyRpNJKO8ksUI1yb68Z/1XncjPet9keJzfk4jkpN+fPZtuh1urn0lW90834urV2/OHp9nEt9T6BfcHV28lQh9vs0/Ocrz4t8cAL4/lLkqbusOcZyYgnEi5mrIS0ksqDxms6e35tL9vJZPVZO5ztmBLFus5dYrZtW91nb6QUv6ZLvBdvvRcgZV9eK9Ww7dT+/PAnT4lic4/ZZLa9ffkXzfg5nW824y3XGNesB+DzSBVcmSg8aQIAAAAAAGBg0QQAAAAAAMDAogkAAAAAAICBRRMAAAAAAAADiyYAAAAAAACGw7d6zj5Ua8btqfd0RrEHd9iZ/U+fvcaMP9Bptz911too1nFzv9n2F1c/3YzP/8QtZrwWr1zxhBnP//bFUezo/3vHXr8eJk7fUxZW3XbI13ZImV8X7/urczPMtllnVw0ol+2137qM0T5ReKA5Y2fcXtM7LYpt6G0z254xa7W98YSyr63KluWOHUdGse2nzDLbtlI9B/vAjY/E1XAkKTfFnge7trXu9WtuL8dzWDFxHHD1doWOm1YvNeMLdd+edwyoVV22publRfG5nuvabrb1Q/a8Vjdntr3xXG3V7yzmKEwlbi/mAAAgAElEQVRVlCwnKmB0d5txN6U9ipXq7W1nVz5pv6ZVrSjxOVE3EpPZ5jedZcb/8e0/stsXt0SxlX32+eKFK8834/2vic/ZJanlGjO837mcXY1soqrq8KQJAAAAAACAgUUTAAAAAAAAA4smAAAAAAAABhZNAAAAAAAADCyaAAAAAAAAGKieMwnM/3pcWaYj12e2vX3zYjN+3NQNZnz7cJOxbbt6zqtf+d9mfNvftkSxH11vZ23WfHvbn19pV1iY/ds4c/zWNyS2/ZVJkp75MNO1tPqM+qsG7Mo3mrLODA8b1XZyzq52MVCuLbN/1iqVk1gm3l6Kx4kkzW7aEcXKsrP1F71dBaE+UzTjGRfn5u9IVPGx2kpSU3Y4iu1YbPdj72uWALGm++yxc+IFK8z4n286JoptKvWabRNDSvcNNUSxtV0dZluXscdOcaVdBQvYn0rT7f0w123PGzuWxe3b7rTnzOyM6faLZhMDyxtjJZe4TCjar2lKVMlR2S5nV9rRYzd/ypIo1nm8velpP7LPRV2zcbwq1fBecGjKxGPCJao++aI9NidCdmlcEVGSOr7VFcU+Mu9zZtuvbf5LM95fis+hc4mqlFMb7GvQVx9zqxn/yo1nR7Ft/c1m22OnbTTj7XVxxb2Z9XYlrYd67Apg5057yIx/+fMvimKzvlR7ZVieNAEAAAAAADCwaAIAAAAAAGBg0QQAAAAAAMDAogkAAAAAAICBRRMAAAAAAADD4Vs9x8iULEkq77ss2o9edbIZbxl8Mopdf+9xZtsZc+JqHpKdFVmSMoqzlhfL9lrZtmJcJUeSmo2KHhc96/dm2zs7F5rxh9famY4XvWZ9FBu+fI7ZFgfG0AQUmegr21Vhen17FMsa+6wklRJrvJlU9u9cXJGjp9Roth1OlOlY1Lgtik03titJO4p2FRGzik9Cs52sXQ2JCjw7ivH76T2CSgDYfxZcb89JJ77Crpj1h45lUeym/nlm26x92NCd/XGFgZ5N9vxV1xZXmJKkmXcmKnoA+1Gxtd6MO6uSjaSBjniSmNJsV6kod9tVaDJT7UpTsqqCZBP3VutS59DVz3e1nod3L4yrZjVssyfNcp9d/SM7zzgX7R+w+4FJxdXFl6w+WZmpxvMgo72vYVdO6fubM81456vssXnlKV834zf1xVXnPrf+2WbbnuF4nEhSe71dUcpyfKs9fz80MNeMv2nhzVFsWtZ+j/cO2NeJlraM3efGjD2vNzr7pME9b2sc/FLV3fhfPGkCAAAAAABgYNEEAAAAAADAwKIJAAAAAACAgUUTAAAAAAAAw+RJBOsSGRATybD22gQlfO26+Kwo1vl8O1Fkqd9OenXXKiMpTsn+PI6bvsGMF8v2tusy8fscLNtJY6fnusx4TylOKvTEgJ1IrLnOTsJz1ILNZrz+DfG6XfHx2822ODCG26ofg6mEpX3eTtpkJX1NJWVtTSR+SrG2PZDY99uydiK4dYPxft6Q6Mdg2T6c9pbsRH+DxeoPv1YyZske9y0LuqveLrC3/B/vM+MreuyE3j4bj8vbu4+q6TXNY4SxXUnKZO1sflPu3mLGSaOM/anYbM93LQ9uMuOdr5gVxeb+pNVsW95R41xgJNqcEKlknZnEeX9Cw/Z4LLetHkxsO5FkNpuIY9LzVqLifahuvp2g/MkLF5vx9hfEhS2+duynzbYrhmaa8Q+u+WszPlSK99vU9db0BvsatCMXJ0durbPHz5ZhuwJEKgHrdV0nRrE6Z8+mU41+SFLJx9eDq8ozzLatWbvfjw/Gx0dJ+sjxP41in9OxZtvx8KQJAAAAAACAgUUTAAAAAAAAA4smAAAAAAAABhZNAAAAAAAADCyaAAAAAAAAGPZ/9ZxERmuXyKLtrazbE1D5pu7IRWa888y5ZrzjkjVmfJtR6KVctN/jwnnbzPhRU+Is/sua7czpuUR1klSm4+5iYxRrytoZl1NZka1KBQsa7Uo7g/X2LrV5yM7u/rv8sii27LWrzbY4MIZn2PtcTzmuOJPeh+zs+cfXb41ia4anm22zsqtgpMyo2xHFthVbzLatieo5ZcXVc+Y0bDfb1mXs/lljUJKacvFnNS0bV6qSpCl1drZxy6KpnWa8ttpDwN655eFERRyjys09XfPNpi4x5B/rjysPuEF73h3y9pgqPXSPvXFgPyrnEue+9Xalt7k3xvu5H7DnL9fcVFtnssZ91Mz+v7fqElV8Bjri9956v32u7KdPs7c9FM+Efl9V6cSE2vC2p0exHcfZ56ftc+zKUXPb4/NCSTp2ysYodnzzXWbbzuIjZnz1QHzu+uZHXm5vo88em4s77OvE6c1xRZy2OnvcL26Mz6slaf3QFDNumVZnV+DpK9vVIBcZr5mqhNmXqChpVd/MJqrfpSpeps7xn9EYnxd/7mknmW116zV2XDxpAgAAAAAAYGLRBAAAAAAAwMCiCQAAAAAAgIFFEwAAAAAAAAOLJgAAAAAAAIbaq+cY1W9c1sjmPWxXaElVvvG1FcYwZadONeOPX7Egij1/yf1m2/96yN7Gltvsajutx8cZeRvr7ToVDXV2luc1PfFrdg42m23rs/Y2FjbZFTM6aqi6sb1kZ3MeLsd/31zG/jsOlu1dam6jnbH6nGMfjmLrUh3EAdE83d6H1pXifaA5Y4/7rrK9PttmVJypd/Y+vq1oV2BKVb4p+ThDd87Z++20bI8Zt/b94cQ+Pjtn7+NbBu1+N9XFx4lreuaYbRfXbzbjdyo+Lp09faXZ9kbZWcWBqji7yocSlSem/NGuWtPz9OrnpEzR3rY1z/hMogJGKdFvYD+zqsJkhuz9tm+JfS465X6jcmHOrkbhGux4TcqJk/NUVR2r4mWNUtVzcn1xX8rt9rmy67WPM96oEOQa7GOV+qo/VmECNTfKnXBiFH7Ba38XxXYU7euWruFEfMiOr+qJK99cv/oYs+3AgF3ZatGsuPJNxtnjYcEUuwpjqv2M+vgctTU7aLZ9cjCu+ihJTdn4nLPk7XGcimdk9y9VKceSun60KvOkrilS5/KpfqwzziU2nm6fm+tWOyzxpAkAAAAAAICJRRMAAAAAAAADiyYAAAAAAAAGFk0AAAAAAAAMtSeCNRK5+kRy15o6smihGd/47DiJa+e5duLHI2bHSXgkafDhOFHUtfc9zWxbmmm/l/qjEokiS3HSmUzRTpzV7+zkQVaC2K5BO1nRsil2QsiGjJ08c259nGxowNt/9u1FO6FWlxFvSiTnKSXW4UqJRKCDpdp3Qexf01vtZGjbSo1RbEq212x7c98yM76wfmsUO7Z+vdn2lqK9jVTi2CFjP886e2xmE8m3Mkb7Fb2zzbbndMRJjSWpIZG8eUFznNDvskfOM9tedvz3zXhZcZLLBfX2cVAkgsXecIl7LN6eM3Pd9piyotsH4mOJJOXsoaP+kjGX1tmvV7+JOQaTg5XgNNeXSHx+jD0mmu80ju/FxEBpTCQ4TSRvNpO4ZhKJlFMJYmtRsrfh2trMePt98flCsn8d7WbYN8R/A7dlAt4LJsxQR1aPvyjeB840Eoiu6p1mbmNag30uOrux24xbCVhb59iJVgcS1y1tubi9VUxAkjpy/Wa8vc6OW9dWzYlEsKl41ph9rXPcVNvx2g+W4zl5wIhJ6SSuuWwcTxV6yCXO+1Pbrjf6XUocHsfDkyYAAAAAAAAGFk0AAAAAAAAMLJoAAAAAAAAYWDQBAAAAAAAwsGgCAAAAAABgmJC08p2vPSuKDUy3M1oPTrUz8hZbE9m8jQy+vrPebLl661wz3rEi7kv3Ivv1GufYGZeLRXt9aUpznOk4l7GzCzfWDZvxaQ1xdZJkxY3GTjOeYlXKaU5Uvmmut+Nz6+MqH51FuxJHX8n+2/SV7fiDW+JKJLNU23vEvtVab2fiHlKcFXx6nV1l6vfb7Mo3je3xmHhK8xazbUPGHj8Z2eNtTl28324ZtrPyD/vqM5z3Fu2U2xuHp9jbqLOrD82q3xHFfrXqKWbbzcfYlQDa6uzM4pbszJlmvLTZrsgF7I26QXuOnTc9rujWlJgbB/rtsd1XjLPyZ5rsObPUYI9tYDKo67SrZfTPsisouly875e64jElSdn2VvtFS4nzbasSjVVRJ9W2VokqPq7BPl/0G6ufqwZPXWrGG56Izwv8cKL6EA6Ihi1DWnr52ih+3VOPjWKnz1xjbmNWvV0lZ8uwPSZSFUgtmwbt88jtQ3HFq8bEtZxV+VCSBsv2ZblVPadz2L4OS53PWttOVZuxqgmNx9pOahup17T63TlsV3VN/b1Sn9/Pek6MYnNvtc/NHzCjAU+aAAAAAAAAGFg0AQAAAAAAMLBoAgAAAAAAYGDRBAAAAAAAwMCiCQAAAAAAgKGm6jnFGS3acmFcKafxbzZGsb4+O/O3H7Rf0g/b2X4z2Tj7bnlHnD1ckpTI1Nv3zDg7+fwOO7NyqsKN93amYyvrf3NdogpNo53hfGHjtig2p85um/KyNrvizPpiXM1kbcmu/rGuONWMby3G2abv2r7AbFuXqBx0SnucCVuSLjzyrij2P4ozUOPA6ai3s/v3leP9aFluq9n2t6vtTPYzl8X756vbNphtUxm36xPxlkxc9SeXyLjd6Oxxb73m7Ia46o0kPdpnV6eZ0WBXFDq5Mc763rLaPg5eueFpZvz0jtVRrCNrVwDz8+3+ieo52AcyRXs+XjYl3t/qMvYYfnzbDDPeV4yra8ydYc+Z62VXtQL2u2x8fM/0VF8BTZLKM+L92T/xZKJxogKGS1S+KRnnb6m2mcQ917IxllOVdhLn1X7Yno9di1EtpM6eM7P99lzveo3zmXq7Wo967bkU+5YfGlZx7RNRvP38uO2jSxab2/jvV88z47P/Yp0ZP2f2I1Hs/7T/2Ww7L2tf41mzWHfZHif1zr5WKiWq6nSX4+vexsS5by6x7TbjGrk5kxg/iX7sb8Pefi/DRmVdSVpXtNcYTm6Ir1euPNZep9Dv0v3hSRMAAAAAAAADiyYAAAAAAAAGFk0AAAAAAAAMLJoAAAAAAAAYWDQBAAAAAAAw1FQ9p25Lr2ZccWscv35xFHOnxBVXJGnTU+11mroldpbqtpY4s/jseXY1ivZ6Owv5lFycLbvDiEnS7JxdGSNVuaMhE2f5rnd21u6uUrMZb87EmZi/9sQzzLbFT84249/cZL+fTHdfFPMbt5hty912RSGbvY2Mld1c0k3LTjfjrtf6mz1WQz+wr6Wq5wz5OOv20Tn779/2c/t4cPvFi6NYdta9Ztus7CzazUaVHEka9vHhrezt409qfPeX4ozly5riamGSdE95oRlf3TfNjC+dHh9rcj12RvAHN9nj/pxpccb3Fmdndh+cZR9/ErXIgL0y2GaPtVPbrYpP8TwlSWu7jjDj81u6otiiGXblrl/4E1JdBPYr12RUBvT2MT9rT2vqOq49irXfnapwU2MFDHuKTbStpfG+45vtaouZYqJ/9caM12ef42DyKz62yowfUbDjKbcZZ0J3tD/Lfs0TjzTjvfPjfbFvpl2dJvXIQjnR3CqIk6pQV99tx5s2x9emdb329WqKz9kd90aVrXLOPv6U6+1tZIbjfqf6l+2xz3NTslvi6nrT18brGbvDkyYAAAAAAAAGFk0AAAAAAAAMLJoAAAAAAAAYWDQBAAAAAAAw1JQI1jXUK7toSRT3uXgz7TevNLfR8iM7WVst/EnHmvFtLTPN+ObmuH8+ayeoKSUS1Bg5JSVJVs7XXCJxTf0mO9mt64oTsGbWrzPbNmTWm/Hs/Ll2BzPG+5ljf07Z2TPMuG9uiIOJHFtu2H7vbuM2+xeycdajTKOd2Evk6jog6jP233TAV59CdMYtdvLU/ldVv247bCSeHU9J8RhvzdrJonOJ5M0lY115eyKh88mta8z477qWmvEFdXFy3MZOO4FX/z1TzPhzT3sgij02bCee7ZtpH8TsLQN7JzVnntwYJ4JN6V1i751HNt0Vxf6qNR4LkvTdHjsJeZxOE9i3fH88/7g2O0l6OTF+mjfFxQdSyWRVSpyoGefs4UXthOj7mzOSSkqS746LQLg6+7yg75ipZrxtU5xEWn5yJLXF5FLaYRcGcbfcbcatkWyPbuytxBEvqbZ0t2k8aQIAAAAAAGBg0QQAAAAAAMDAogkAAAAAAICBRRMAAAAAAAADiyYAAAAAAACGmqrn+MEhlR55LIpn2+M89OVlC81tDD31SHvbGTtbduOGvijmBo3s4ZJy6zvNeJ2VsTyRnVupeEqdUZmnsd5sWp5iV90YXDAvivU/8wizbbHB7l/W/kiUGY5zDGeNmCRlinY82x9nFnclu205UX1I3s5kXtcfZ2uv3xFXE5JE9ZwDZEqd/cFna8hfbR03JGl95/Lqt5FY4+0rG9WdJLVl435nU2WfEpozQ1Fs7YBdnWZqq10dqyk1OA25Hrt/C24aNONHX9ISxb7debTZdnAqa+TYf+q77eODVXWrI2MfY7Yvtk9RckZFr8ZEBay6uslREQQwq9yU7WN+scUeP42PbYnb1nremmpvVaJJ9M+szCjZFXjKiXOFVNWfBLOayfGLzbb1XYl6GYPxnO5SFRu1vbqOATgscBYNAAAAAABgYNEEAAAAAADAwKIJAAAAAACAgUUTAAAAAAAAA4smAAAAAAAAhpqq56SYGa3/dL/Z1q4rMw6jOo1a44oRkuSttpJcU1PctjWOhcZ7n4Xc9duVLrJb7aowzVviz6/5njjDtyT5RCbzVDUgX2N2clPRyEJesisS+JLdPz9gfybe2E7Jyr6OA6anaFenacnYf9NaTPuxMZafYbc9tmGdGR/29rjvNarqNCf6bFX0kKTmbDwOh71RYUDSowOzzPicBuP4mNDy8FYz7nqrLx3VmLGr9fTNmYBjAVClKQ907fU2skP2PttXisd2SfYcWJeprWIWsD/5hkS1RXtKkorG+ZGr8f5n4vzN4nOJ8+rhRHUa6xy11mqVudSbj6Uqbz7+IvtzPfrrcSVHt8o+twCA0XjSBAAAAAAAwMCiCQAAAAAAgIFFEwAAAAAAAAOLJgAAAAAAAIYJSQS7L3kjCWmpa/sB6AlweOoabjbjbRkrOWlt67Bt378tDn460TYzYMbL3n5NKzFkb9lODrdxuMN+UcOUuuqTskpSzlWfdK/08KM1bfv+obgvzRk7iXSxhUSw2H/K9z1ixjcU47E2s6HXbNv2hJ1ssrMYH5MaE+Os68l2M26nbZadnHIiEqrjsOeHjGNzkz0nuUT+Yt8dFxRwiWStvs2eu92gnSzcd8fj0CUS1Sprz7u+xSiykEj46obsfqTaZxob49iT28y2DZsX2pveaLRPJJMFgNF40gQAAAAAAMDAogkAAAAAAICBRRMAAAAAAAADiyYAAAAAAAAGFk0AAAAAAAAMk756DoADqyPXZ8bbzCotcXb7iTInO1hT+0WKK8tszNqVt7rKRsZ/SV3luPpAKVGtZ2up1YxPz/akurjXNpdaotiShk1m2/IUuxIJUBWfKOeRUrar2XSX4mNER8beN5tWx5VCJKlYzkaxVPWcxo21neZkGhqiWHnArtwF1MLVxfuir7f3z/rtdkUXb1ScybTZc4/KdtUnXxePH0lyzcb8ndhGMm5UvklWyRlOzEmJyjyuPq7k4xOVg2bcZ2/b5XLxNkrVV7gDcPjiSRMAAAAAAAADiyYAAAAAAAAGFk0AAAAAAAAMLJoAAAAAAAAYWDQBAAAAAAAwUD0HwLim53rN+LBRReaLXQv3+vWef9J59g9mTjPDpSl25ZvBaXEVjOygXQHElexKAFbc19lVDXLb4mo9kuRzdqWCr6/fZkTXmW1T7ug/Moota9hotnV1NVY/AfaBAR9Xr0gMv+RtnS1DcdWokuxxmSiqk+RLjBPsG74YV3QZbo8rwkhSwzZ7UJT74mp22fp4TEmStnaaYauKjyTJqCyjjD2ulBgnrs+oNOVTAzyhmBi02XguLa183Gw68Iw5ZrzN+Kz8lq3V9w3AYYsnTQAAAAAAAAwsmgAAAAAAABhYNAEAAAAAADCwaAIAAAAAAGBg0QQAAAAAAMBA9RwA4zqt+TEz/tSGOOv/LX17vw5bSmWyrzHDfVw7Z9+qteZGXEehdq9qvzuKtWXsw/pLl99pxu+agH4A1Tq1aVUUW1BnV8DqX9hmxp/Wek8Uy8mu0JHrqb5vkuRLNZbbAapk7VvFZru6mlGcLqnUtX1Pu3TI6lloV/2Z3twYxcpDw/u6OwAOATxpAgAAAAAAYGDRBAAAAAAAwMCiCQAAAAAAgIFFEwAAAAAAAAOJYAGM67PP+Csz/s5XHxXFXCIb6lzdUvXrubqD87Dky3YiSpexE9KZ7cu1JaE87/J3R7H+I4fMtot+bPejQXfU9JrA3nj3ipdEsWfNe8hsW99p78vfvPOsKDZ8ip1Qs2PlRKRcBiaAj4/5zWu6zaZN6+x7mvYsg7Hm/7bfjLuNRkL5GuddAIcnnjQBAAAAAAAwsGgCAAAAAABgYNEEAAAAAADAwKIJAAAAAACAgUUTAAAAAAAAg/NGNu9kY+c2S1q977oDjGuR937mge7EZMTYxAHEuExgXOIAY2wmMDZxgDE2ExibOMCSY7OmRRMAAAAAAIDDBV/PAQAAAAAAMLBoAgAAAAAAYGDRBAAAAAAAwMCiCQAAAAAAgIFFEwAAAAAAAAOLJgAAAAAAAAYWTQAAAAAAAAwsmgAAAAAAABhYNAEAAAAAADCwaAIAAAAAAGBg0QQAAAAAAMDAogkAAAAAAICBRRMAAAAAAAADiyYAAAAAAAAGFk0AAAAAAAAMLJpUuIJb5QruWftw+99zBfeifbX9KvvwWldwv5ugbV3gCu7qidgWDl7jjRtXcGe7gntof/epVq7gnusK7icTvE3vCm5p4mevdAV33US+3t5yBXepK7g3H+h+AKO5gvu4K7i3H+h+jOYKbrYruAddwTUc6L4AtRhvXhrTbnGlbd04bQ7I2KzlPNYV3IdcwV1Z+f+MWxwWmDf3neQB8UBxBfcMSZ+UdIKkkqQHJb3d5/0dB7Rje8EV3EmSniLpFZV/10v6uKS/ldQhaYukn/i8n1Q7+Xh83v+sMjBP8nl/z4HuD2rjCq5n1D+bJQ0qjDdJusTn/Xf39jV83v+PpGN2049Vkt7g8/76MfGXS7pA0vslPS4p5/O+uLd9SviYpLe4gjtC0gOj4i2S+iT5yr/Pr7ynvVL5bMf9fF3BeUnLfN6vHBN/n6Q2SddJutLn/YK97U/Fv0v6gyu4r/m8H5qgbeIgUBmDsyUVFY4BD0j6tqQrfN6XD2C/Zkq6WNLSyr/PlXSjwpiUpC5Jt0j61P48P/B5v9EV3G8k/V9Jn99fr4tD08F4zjt2bFZi75f0RkkzFcbm733e/+2B6WGMcYuJxLxZm0Nl/E2qJ01cwbVL+rnCBzpN0nxJBYULuklvnFX5SyR91+f9yMXX+ySdJukMhQugcyXduc87OEFGvc/vKQwAHGR83reO/CdpjaQLRsX2esFkd8a7g1XxAknX7od+nC5pis/723zerxnzuUjSU0bF9nrBpIr+HJDPxef9ekkrJP2fid42DgoX+Lxvk7RI0ickvUfS11KNXcFl90OfXivpWp/3/aNi6ypjs03S0xT22f9xBXeetYEqxtOe+q7CvA7ssYP4nPe1GjU2XcG9RtKrJT2rMj5Pk3TDgeteEuMWE4l5szYH/fibbE+aHC1JPu+/V/l3v8IdVUnhsTxJb5B0m6TXK6yY/b3P+19Wfj5F0qclPV9SWdI3JOV93pdcwR0l6SsKT3x4Sb+W9A8+77vGdsIV3HEKFybv93n/PVdwL5T0UUmLFVYT3zTydEVltfHLkl4p6RhXcC3GHfHzFVb+Rpwu6T993q+r/HtV5b+R118l6QuV31kk6VeSXuPzfqDy8/H6816F1f5ZktZK+mef9/859j1W2n5K0lkKF2Ia57N7bWWbf6j06cuSPiDpJklXSnqLtX0cGlzBzZD0TUnPUNg37pd0zqjV9JNdwX1aY/bVygr3/z4NYYyVH0s6QtLPXMGVJH3Y5/0nXcFlJD1b0tu1czGxyxWcKvHbFZ5AeaOkpsprvtXn/XZXcIsVnky5RNKHJDlJl/q8//fE2ztf0s17+LksVZggT5Y0LOmGMXfWnuUK7pcKd96+K+ktPu/9yHHM5/0zKtvxCmPo7ZLqXMGtrfz+3ZWfvd7n/dWu4KYqHCP/rPB0WsOoJ4aOlrRV0r9JuqgS+4Gk9/i8Hxz5W0j6kqR3SOpRODaMXiC7SeFYcM2efB44+Pm83y7pv1zBbZB0myu4S33e3+cK7psK8/EiSedI+mtXcA8oXOz9pcL+9Bmf95+TJFdwZyjsa0dXfu+7Pu/f4QquUdJXFcZdVtIjkl7o836j0Z3zJX090U8v6QlJH3QFN01hvz+t8tq7jCdJR+5mznyPpH+U1C5pncI5xQ2p91Dpwu2SlriCW+TzfnXVHzCwq92d84573lrFueK7FI73XuGcTaO2/QKFMXGUpO2Svubz/kNV9nvs2Dxd0q993j9aeT8bJF0x6rVeJ+ndkhZI2izp33zeX1752bkKc9NnFC46Swrn3t+o/Hy6wvnouQoXe78e8z4+K+lvJE1ROJ68fZwbHIxbTDjmzcNn3pxUT5pIelhSyRXct1zBnV+5SBjrTEkPSZqh8Ejj11zBucrPvqnwqNRSSadIeo7CIosULp4+LmmepOMkLVS4qNqFK7hTFQ7Kb60smJyisANeImm6pMsVBsfo72W9XOFio2PsgokruBZJR1b6POI2Se9wBff3ruCWj+r/aBdJel7ld09SWD1UFf15VNLZChNIQdKVruDmjulTxhXcVyrbfU5lwI/32Unhc39M4XG0j1ViD0paXLlbgkPXOxUOtDMV/v7v186vrEiJfTVh9Fh5uXZ9yuWTlTZnSHrM5/0WhYlFlecOtXwAACAASURBVPatPu9vrWz/tZKeKWmJpFaFE8fRnilpmcJ+/B6Xzle0XLuOzVp8ROEEd6rCyeDYRw5fqHAyeZLCZ/Tccbb1IoUxdrzP+5H3PPKUy0juoOcqLMz0KkyM60Y9BbNO0j8r3EU4WeEk+wzteqI8R+G4OV/SayRd4Qpu9NenHqz8Hg5zPu//oDDmzx4VfoXCsb9N4fHen0m6W2F/Ok/S213Bjezjn5X0WZ/37QoXZT+oxF+jMDctVJi/3qRwYmWpdmz+WNKplbl2xP+Op/HmzMr+/xZJp1fuGD5XO29gpN6DKvP8SjFesHd2d85bzXlr6lzxeZL+n8KNhmWSxs6BvQqLLR0Kc/KbXfV598aOzdskXewK7l2u4E4z7qhvUpgP2yW9TtJnKufaI+YoHBfmK9wQ/eKoz+KLkgYkzZX0d5X/RrtDYc6bJukqST+sXGRGGLfYl5g3x30Ph8T4m1RPmvi831H5fud7FFbX57iCu1bSG0etqK32ef8VSXIF9y2FFa3ZlVWy5ytcXPVL6nUF9xmFr49cXskNMJIfYHPlznh+TBfOVjhgv8rn/U2V2Mjv317597dc+O7m07TzDvXnfN6vla2j8r/do2Ifl9SpcMf9M5K2uoJ7n8/7b41q87mRJ1Fcwf1MYVLYbX983v9w1DaudiEHwhmSflqJ5RS+VlOncLE65Aputsb57Cq/t87n/chF4cjC0Mh76pC0I/H+cfAbVjhhWVQZR2Pv4qT2Vct4Y2XE7r6C8kpJn/Z5/1jlNd8n6b7K3awRhcriwr2u4L6hsFhzfbwpdWjXsVmLYYU7CPN83j8haWxyuk9U7gh2ufBdzpMV7gRaPu7zfttuXq+az+WtPu83SZIruILC+P2XUW3+xef9oKSbXcH9QuGE+yOVn3Vr5/EKWKdwITLipz7vfy9JruCWS5rp8/7DlZ89VlmIf5nCTYdhSUtdwc2oLH7eVmk3rHACtrRyx+pP47x+tWNzncLFZYfChaA0ajy5ghtvznxSUoPCSeJmn/erRm039R5GMF6wV3Z3zlvleWtq/r1I0jd83t9X+dmHFObBkde+adQ27nEF9z2Fu+HVJEXfZWz6vL+ycg7+OoVFnQFXcJ/0ef9vlZ//YtTv3uxCIvSztfNJ0mGFJ02Lkq6tPEF5jCu4OyRdKGl5ZT6/r3LeP3JjQT7vrxy17UtdwX1AIZfa3Ym+M26xLzFvHsLz5qRaNJEkn/cPaudK+bEKj+1dpp0H+w2j2va58Mh+q8JOmpO0vhKTwpM0ayvbmq2wAna2wopfRmHhYrQ3KSw83DQqtkjSa1zBvXVUrF5h5X/EeBeBI1//aVNYLZfP+5LC6vkXXcE1Kaycf90V3B8q73+X96mQwGfk9cbtjyu4ixUex1xc+Vmrwt3lEUtVuQvtdyZ8XKRxPrtx3mPbmPeIg5wbkwzVh+9BfkrhROi6yv5xhc/7T4z6tdS+atndgokUFvDGy5UzT9LoR/tWKxzLZideZ7XC6rulUzv34yRXcGdL+uXI9nzen6DwuPFHFBKodip8DWj0Y5FjP5dWpY37ubidX1l6xzjNrM9l9N+is3Limfp5mxjL2Gm+pNELeaP30UWS5rmCG72/ZLVzQfX1kj4saYUruMcVFjF/Luk7CnfLvu8KrkNhfv9nn/fDxutXNTYr/fTadd8d21dzzvR5f7MLVQY+JOkEV3C/lvSOykVo6j2MYLxgr413zlvleWtq/p2nXS+udnkc3hXcmQp5GE5UGA8NkkbfdBtPNDYrX/X8riu4nMId6++6grvL5/2vXcGdr7DYc3TlPTRLunfUr28d85T2yHw5U2FuHzufj34f/09hrM5TOA60a9dz3rEYt9iXmDcP4Xlz0i2ajObzfoUL3wmrJnHMWoXkWTPGfkWm4l8VdpDlPu+3VR5DHPtI/5sUHuX/jM/7fxq13Y/5vP+Y0nzyB3nf6wruUYXJYrPx836FxZOCpOMVHpEfT7I/ruAWKdytOE/SrT7kI7lLYTVxxIMKCza/dAX3Vz7vH9LuP7vUezxO0iqf9zxlcojweb9GYy7ufd53K3xF552u4E6UdKMruDt83u9Jorex+9Eu/3YFN0fhqZY7E+2lsEK+aNS/j1B4+mmjwtdkpDDBrBj183Wy3aPK98rH7XT4jvTYz2WDQl6VkQoI17uC+60fU/GmSsljSMXpCos1I8eQ8T6X+yv/Hvu+p7qQc6l31M/vG/Xz45S+O4fDiAsJkudr16enRu9zayU97vN+mfX7Pu8fUbjoyyjkG7jGFdz0yr5XkFRwIf/QtQqPElvJ80bG5u4y/L9Y0p1jFgTH9jU5h/u8v0rSVS58zfRyhe95v3q89+BCorylYrxgAhnnvNWct6asV5gHRxwx5udXVbZ1vg85yC7T+IsNoyXHZuVC7ocu5Dw40RXcTZJ+pPBVoJ/6vB92BfcT7XpemrJZYW4fO59L+t+bGe9WOOe93+d9uXIDw9w24xb7EvPmoT9vTqpFk8oq+wskXe3z/glXcAsVnjAZ+3hPxOf9+sojf5e6gvsXhQQ7R0pa4PP+ZoXVre2StruCmy/pXcZmuhW+G3qDK7hP+Lx/r8IixH+6grteIRFqs0JCqt9WLiarca3CY48jj2i9XdJdCklxhhUeq29TSPC4O8n+KJRI9aoszlS+rnDi2A34kKulXuEi71yf94/u5rNLOUc7777jEOVCMqgVCvlytiskapuokmobFfKSjDhf0q/8zkpTmyuvtUTh+99S+HrZe1xIsrpZ4cTyap/3xVFPSv2LK7g3KuzHr5P0qsTrXyvp+3vScVdwL1VYnHxCYXXfa+I/l5EFmOdL+sWYn093BTfFh5xEUvhcPlB5pNlL+qDCHYnRCpVHLM9U+I756Ee9z1FINobDVOUE6C8V7m5f6fP+3kTTP0jqrlwYfU7SkMKiW5PP+ztcwb1KITHk5lF31cqu4J6pkMT4AYWvdA4rPWZG5s2ompcLecDmKeTdeoPGr/o03pw5T+Ek9/cKT4L2K9z5U+o9VP73DIUbBgdlMjtMDlWc81Zz3pryA0nfcAX3bYV8A2O/1tMmaVtlweQMhdwL16k6u4xNF5Kbb1YYU70KOQ5OUDjHHXmKZbOkYuWpk+do1wV7U+XG348lfcgV3N8pPEH9Gu3Mn9CmsKiyWSGJ+nsVnjRJYdxiwjFvHj7z5mRLBNutcDJ/uyu4XoWJ4z6Fu9zVuFjhAP2AwkXMNQp3raWwSneqwgT0C4UkOJFKDoJnSzrfFdxHfN7/UeFu8hcq21yp8RNdWq6Q9Eq3M+Frn6RLFR6r3CLpHyRd6Cs5GsYzXn983j9Q2e6tChdVy1VZqDG28y2FR6hurKxcjvfZpbxcO3Oe4NC1TCEfSI/CvvUln/e/maBtf1zhQr+r8pjtLnk7fN73KSTR+n2lzdMUklN9R+Hg/bjCQfutY7Z7s8LYuEHSv/u8N08Gfd7fqXBCeuYe9P10hWNVj6T/kvS2asZwlT6k8B3SLldwFyn+XFYoLJI8VmkzTyHL+R8V7jTcq/C0zkdHbXODwthepzChvqmyHbmQLPp4Vfd9dhx6fuYKrluVimsKldRel2pc+YrpCxXyJzyuMI99VSFZnRRuPtxfGRuflfSyylOVcxTmlh0KTz3erDCWLd+W9HwXvsI6Yl5lmz0Kd9KWSzo3Nb4rfR1vDm9Q+IrCFoXxMUvS+3bzHqRwo+M/Uq8JVGl357xVnbdafKgqeZmkGxX2+RvHNPl7SR+ujPsPalTCxiqMHZs7FBLEr1F49P6Tkt7s8/53lZuL/1jZfqfC4sx/1fBab1F4ynODQsGCb4z62a8V8oQ9rPC1nQGN/1VXxi0mEvPmYTZvOu9391Q4JoIruKsk/cDn/SFxUeIK7gKFR7Eu2m1joAqVR/c2SFqyp1/5cjtLDufG+arZ2N95jkK5tGorB+xXLnyv/c+S5o96AqfWbZyrUeWfjZ9fKulRn/df2uOOAhPMFdy/Strk8/6yA92XEa7gZimctJ7iK6VdgcPNZByb42Hc4nAxGcfmoTL+WDQBMClUDqoX+rz/8l5sY7FqXDSZ7FzBHS3pqT7vv7cX2zhX4yyaAAAAALBNqpwmAA5fPpTK3eMFk0OVz/uHtTOfCwAAAID9iCdNAAAAAAAADJMtESwAAAAAAMCkUNPXc+pdg29Uy77qCzCubnVu8d7PPND9mIwOh7E5NNd+f74+8bRc2cWxTKKt0TTE4/Yu1XbAXoOuX9eb+IVDw4B6NeQHU5/KYe1wGJdJbc1m2A0ORzE/FMcm7PWGS2bcDwza27H25IP0gVzmzLTDemzigGNspk36sZk627HmieYmIyi5YTvlnh+egLmwBi6beHaivt4M+/6DNodr1cYbmzUtmjSqRWe68yamV0CNrvfXHLS1vfe1w2Fsrrnk6WZ8YJ49ybiheDLwTfYFVOqZu0wubl9Xb2/DrWg144vyt9gbP0Tc7m840F2YtA6pcZnJ2vGyPR5Kp59qxhtWbopixbVP2NtOrVAaXytOvV79JnvRsnT/Q/ZL1sWnRb54cOaUZs5MO6TGJg46jM20yT42rTlCsucJd+Jys212/TYzXnziSftFrfk3MffWMm9mW9vtpkvsmgHlux6wt11L/ya58cYmX88BAAAAAAAwsGgCAAAAAABgYNEEAAAAAADAwKIJAAAAAACAoaZEsACwJ4p/9VQzvup15Sj23b/4qtn2roHNZvzZLXZCx89vOTeKXf+DM8y2Ux6P+yFJzZdsjGLfXvY9s+3PTjrajJ/wajvJ5VvufUUUy1w71Ww74/JbzTiwv7hcIvndoJ3sra7HTtD8xEuOiGJzPpNIBGskrktZ89wGM770E49WvQ1J8uWDtFQOAGCfc6nKMkYi2LXPbjPbTlthV3trTiSCteZfnyi0k6nPmfHyQFz5ZsdzjjPbbj7ZfqZi8V3Vv2Z54OBMBDsenjQBAAAAAAAwsGgCAAAAAABgYNEEAAAAAADAwKIJAAAAAACAgUSwAPaIe+oJUWzG5+0kVs+Z9tOqt3tjz/FmfOtwixnPOTvZVHNmKIr1HmVnzho6OW4rSWe3dEaxX/ctMduuGphhxvvKdtKw9x33yyjWeLzdvx+8xk5gu+2106NY6eHaEl8CkUw2CvnBwZo2seZ5dgK8r7zuC1Hsw585taZtZ2fE+/0nL/yO2fbL711a07ZrSbin8qGX6A4AMI6yXTjAMvUhe45Y9wxnxpf+2N5OLfNvLQlYNz3VfnZi1h+rf4+S5GtI2n4w40kTAAAAAAAAA4smAAAAAAAABhZNAAAAAAAADCyaAAAAAAAAGFg0AQAAAAAAMFA9B8AeWfIfcZWWk1rWmm1X9M8z4xkXZ9xOVcNprxsw448OzDLj57XfH8XyL/iT2bavbJfHuHMorgByw464apAk5TJ2v3tKjWb8/uKCuB8lu9LOi2fcacb//bPPjmLt55tNgerVUBWm56KnmfHvv/7TZnxeNt72ix/YbLb91K8uMOMffsEPo9g5jZvMth/52fPN+IwLHjbjtVQpcHX2KZQvFqveBgDg4OFL1VeWaX8wrsAoSR1v7Tbj93/9NDO++Oo41rCp32zbv8CuNPnky+Lz3NKQXTmy9ef3mfFkjZzS4VFJjidNAAAAAAAADCyaAAAAAAAAGFg0AQAAAAAAMLBoAgAAAAAAYGDRBAAAAAAAwED1HADj2vD2p5vx17V/L4r9qXex2XZGrseMD/tsFGvI2JVsyr62Nd7rdiyPYrf32tnGy3JmfKCci2KtWbu6RmobrVm76o/13pszdibze/oXmvFLjvyfKHbVWXb5HHfr3WYcqMbDXzrDjP/6BZfWtJ0HhuPM/mc3rzTbXnzR58z448U4U//tg1PNtredGh+nJOkvfvEyM1737elRrO3q28y2VMkBgMOLr6FSTLmlwYw3Z7eZ8bOOiatSSlJTIT4v7k1UW5yftc8jT8jG89Wft8w329ZSRU6SfDlZV+eQwpMmAAAAAAAABhZNAAAAAAAADCyaAAAAAAAAGFg0AQAAAAAAMLBoAgAAAAAAYKB6DoBxLb/oATM+ZFR/SVXJ6SvbWb6tajE9pUazbYOzK1XknJ3JfEo2rpRjVayRpKwrV92/VJWcVNWf1Gta1YAyiX6kNLr4NVe+2X69ZbfWtGkczm5YEIUeP+4Ks+n6op01/6XveKcZf/PHrolicxrXmG1/N9BuxpflOqPYD7ecbrb9p1+eZMYfvORLZnz45Ph48szXvdRs2/K8x8w4AAADM+3z2ROa7eo5q/ummXHrvDMje+5tytrnor9+5Lgo9pdL7Mp1f3qrXTVz9udvMeOHC540AQAAAAAAMLBoAgAAAAAAYGDRBAAAAAAAwMCiCQAAAAAAgIFEsADGddnCX5jxKzpPjWLz6uMEjZL0+OBMM24lSU0ldq01iWvJSLSa2nZqG9ZrppJvzct1mfF1wx1m3EqO25odMNumbC7GiTIvO+v7Ztsv6uiato1D38orTzHjdx/z5Sj28LA9di74zrvM+OJr7MzDMz+xI4o1OntMpcZlSyZOitddbDDbHlGwE9cdv/xVZvwnp18exX58wnfMti97ztvMeO66P5pxAMBBrmzPhZb1Z9mX2fMb7PPFwXLOjHcNN0Wxi2f93mz79z99vRmfaUxLJ39grdn2xqcca8Znm1FJvrYiBgcrnjQBAAAAAAAwsGgCAAAAAABgYNEEAAAAAADAwKIJAAAAAACAgUUTAAAAAAAAA9VzAEiSBs8/3Yz/tGeDGS8rrmAxLdtjtu3N2ZUt1gxOj2JtiQoyqUoaKbW0tyrtSHalHOt9S9LmYlvVr5fSlrHf+3DZPlR3lxqj2DlNW822ly8+wowXV62psnc41DTfE2fkl6TcM+OqUS/+j3eYbRd/3K5Ok/Kc5uEodv+QXRmr0cVtJanLGNqXzL3JbPtJLTfjC19ynxk//7J3RrEVL/2i3b/bHjbj1ddWAAAcqjIl+3wxVcmxIWPPeYub+6LYVzf8pdn26P/YZHfmivj8MueKZtOWaf32NlK8XQHvUMOTJgAAAAAAAAYWTQAAAAAAAAwsmgAAAAAAABhYNAEAAAAAADCwaAIAAAAAAGCges5Yzs50nDRJMga700404w+/ujWKLXvbbfu6O5FsxxQzXuravp97gpSBaXYFi7asnUV7/XBHFOsu29U4Fubsii6P9c+MYpmsPaZyGTvLd9aocCNJw95+P5ZU9Zxa2m4vNtfUj0GjIs7CFvtzakxkVF89OCOKXdN9pNl2w3Pnm/EZl1M953A1MMMeO9tKg1Fs0VcfMdumKsVsff1ZiZ/cFUU2l1rMlqlqUuuMSlXnNdk9uXRGXKFLkkpb7LG26Nr4OJO7yB7Day+x5915n6qtohBwqLDO9dyUdrNtcfXavX/BTPXzvCSpbBwnaj3vT5kk1wOYPBrsaUbT6uxKk9vq7LnQOl988KfHmG1LF9mv+ZoZ/x3Ftpfs89ZikWcqLHwqAAAAAAAABhZNAAAAAAAADCyaAAAAAAAAGFg0AQAAAAAAMBy+iWD/f3t3Fl3XVd9x/H/uoCvparBky7LlWZ4yODNxgiGBkEVJGFKygKQPaWkKDSRhXIsH5pXVgU6wKC3NIpSSprCYoS1lEUiaicQZIJPtJJ7iUZ5kS9Z8Ndx77ukDb/3/dtY9sRxL9vfz+Otm3yP57HO2dm7//+kq/DQNVBHX5OkX5NhdX7lc5nXLdFGhDV3bXHbkqovl2OxDz4YusXaXny/jgW5dbKj9icMuq+zZd+LXgdT63qGLLrYEijGqgqhj1YIcuzx/TM+d83Nno6ocWw0UYM0HiqRaikKwoc9UP2OoKGsmMEeI+nnygbKaod+rEircW/fuo/p/cFfNU+M0U1g1LPOFOV9APMqm+28sU+8alHmpOuWy2HQB6dj0e1rlQ1V93+/81BqZd3/6CZknmdr3BpOX6PcuMKOF9r+ikGmmqAtTjl95jsxHlvg/KwI13K392ykLwarrVoVd06KAK06SoXV6vxgneg1uGe6S+TPbl7usJbD13fC+52Telhtz2dGyLtK8an6fzAMfecbgmyYAAAAAAAAChyYAAAAAAAAChyYAAAAAAAAChyYAAAAAAAAChyYAAAAAAADCmdE9R1TcjrK6s0ZSCZT5TiFUbfzAbRfIvOua/S7reXCDHBsX9fUV8jov5iZdVppfJ8c2y1TLLVsi86HFuguC6pJjZmbVdB1HcPJU+3SHlh/3XSrzK+bscNnyvK64fe+wvvdXFHxXnaFYd1oqB7rhhLrqqM43+VAZ/2lQrurHaTXQAURZmR9Ile+ttLrs7t4r5NjSfZ0yb7FdNV4dTjfZR/39Y2b2ocWvd1nlSG+quT979q9k3ie659RHgbUTWNtZ890uJhP9Lrnsyq0y1/28zAoPbXbZmntulWOX/K//WYBpEepwE4k1Ebj30+5zMxf6jjj7r50jx3Zs0n00Gvv8tRy9UXe2mvdDvVeujvkuH2aWqstNbvlSmR++dpHLxnTDEiu36d/r6o88VfN14MyRndvusu6V+r15YGquzG9a8KTMtx71+7e4oP+We32L3tPlI99paiSul2M3tO+W+W/yes+QlMW7MEWXrtmCb5oAAAAAAAAIHJoAAAAAAAAIHJoAAAAAAAAIHJoAAAAAAAAIHJoAAAAAAAAIM797jqq+m7byrhiftkvOxLvWy7z/HP8rzE7oORZdu0/mCxuHXfaDD39Zjr1hx40yz2d8VWQzs2vbtrhsV+/Z+gJTSBp1xeWmfSWZD1+4QObZCV+dvLCv59VfGF611R/TFeEPBMb/aI3o0pLT1fr7L9GVwv/nS/4+/0rfG+TY9pyuqJ+JZkYHpubAwt88uljmf9yx0WXXPn67HLvia/qZN9nmOx4V7v2dHLvAHpc5zlwLvqrvib1fPfG5/6hZd3zaOuX/W43qhmP2CmtbDB+p6jlu7nxU5n9v5+mpJ33HuRWfeUJfB5BGmv1sMNd7PT209rFmJrsZtu7Ra7B/XV7mo91+b617fJjt/NfVMm//te7COLjWZ3MvOirHHjveIvN4SnTvatJdsJJ+fR2nY1cQnLjx13W77L1dv5Zjhyq6S+RlhSMyr7/P38/vvO0ROXZBbkjmR0S3xfFYr+OzGw7JPL5cd3bNPPqcD1WnL7NUz7CZhm+aAAAAAAAACByaAAAAAAAACByaAAAAAAAACByaAAAAAAAACByaAAAAAAAACNPTPScjOmZUU1bHVXO8mnnU1MWiy/Z//AI5tnhQV78+9gbdbeeCtbv85wUq/i8t6m4Clar/2d9z80fl2Nvv/LHMnxlbLvN7B3yHgJu+8Qs59nilSeb7J9tdtu2Duh76wNl6jqkmXW28WvA/+8IHfUcQMzMLdCXCqRHv8Pd+SHPnxTKfn/VrszU7LscWMmWZVxN99pvP+DUb6tIRkhefWYr1/Vmq6jURqk5+QZ3/OVse1BXV7UndvSOwUoCaZOp1FzSlOpHuAXxfSd/387P+mR96Z6buqiMUI90ZIw21hzALd+FTHXgwA01Hd8Y0UsydbWuTebx2iQ+f3KwnSdm9orp5m8uG7zhXjh0v6fddFPvfaRwH3tF5fR3dt2yX+UvHOl3WP6TXZrUS6nDj84k+3SVnza2/1XMAQqbs1/dorN+xnXnd4eYDu26Q+dBqP/f6ot6DD8Z6HxkH9spKe3ZU5qOL9a5T9aqKMnoNJjOj4eWrwjdNAAAAAAAABA5NAAAAAAAABA5NAAAAAAAABA5NAAAAAAAAhOkpBDsdxVrrdXGZaqnkslCBrJfvXCrzdYsOuayr3CPHNud1sbvPL9wo860Ti1x2eKpVjr2wuF/mP3rXG12W3/mMHHtWXa/My4kupLt1ostlI7EuehUqTPT1h9/qsuVzdQG8qWZd+Cc7GSiAJgqxZVpUSSGjEOypoorlmVmm4NdsqFhkEigI9YMRv5azKYtCWqgopCh6FVugOFyImCN0faFCtYsaBmX+zcF1LsuV0hUhVAUq1TPTzE5ugUPMSqH1GuWmZ2ugqDUYKuYcXNs1zjtdqmNjJ21unEKiUGqU83upKK/XQzKliwxnmptlPnHpSpcNL9UFk6PAtnqsy9/ni7MX6jk2Pq8nSWF8v/5Z6hbpNTE16X9X1bJe35MVnT+1tVtfTLb2d1iuoH+BSc7PcVb3QTm2nLJBhXpuJnHgH5LX8WlnZIkvjpwPLOS+il5Xf7viZzL/dov/O/HpMb1Ormp+SebHY9+oo29SN+/YN9Uh895r9DOv5fs+C977sxjfNAEAAAAAABA4NAEAAAAAABA4NAEAAAAAABA4NAEAAAAAABA4NAEAAAAAABCmp0T+5ee7KLttnxyaTEzKPGqol3lubrufI1CxfNUdupr3yJ1+7vGyrlj+gcWPyfzjD9wk88X3+Urmd/zDt+TYqxt0JeEfFvXPrhyLfbcMM7Oesv89mZktqhtw2cpAB54vfO7PZb5m+4jL+i/SHW7yo7okeKgJQkU08qms8R2JzMzsqI5xkgW6rlSndLcYpa5Pd3SZSPw6jEOdNAKCnTdSjA19Zn3WdxcJdaoajfU6DlVPVxr601UbT9S/AV1ycKJEV5HporpgxWk7ZqXQGOhqlUqggxhrbZYTXVASlZX1njMo0fdzbsx3Hez47gv60gKdreqvv8x/XE7fn8F+Uim6wqy+x+//zMzmfP2wzJ/atMqH+cA6KQeuMPT4UU0bQ3vLicDPKD6yd1R3Mmmv6p8xJKnorpI4M/Rd4m/GB/vWyrH9440y/5Nzn5P5kQn/N9fKOcfk2C0TS2T+9PBylx2b0N1zNg76Tl9mZt+5Qv99+xd2sQ9Pw/cj3zQBAAAAAAAQODQBAAAAAAAQODQBAAAAAAAQODQBAAAAAAAQODQBAAAAAAAQUnXPqbYXbeRtl7s8eb+v4Ns/uFzOUZnSFa2LLbpSxkUgKwAAEJpJREFUeMN/tbqs7Z4n5Nh9t+tqv+vqdrpsb+9cOXbB6iGZL3xYny81/uxJl/3dYd1p5+qf3iPz4TW+KnLT83KovTipO8ssq+uTeTHjuxXd8akPyrFzth+X+eG3zHNZEizLruXHAl11VLOQ07Di8mkp0CFAyfTqe2sk9u2TsoFOGqVqXc2fZ6Y74oTmzmd01ftYlNoPdcMJdeAJfabq5BNVU977Kf4NgNdS6L5Xa2o65AOddl4q+/dXaryTTjtRJmOZRt+NcOD681zWsmtczpF5dpvMq+N6P7vnOv++y1xzkZ5DN3i0Sqfv5NPxiO7c1vaInkN1yQnJ9uk98bM9i/X/oF6s+0ivn2wxcB2BDaZahkkl3X/7zTf4blodxVE5duud6/Ucw/rvmEhsI7q/tElfiG72iVnsnRueddn2oU459salz8i8PVuQeUPW37dded8d1czs5Un9mQsLfi3HgbXWM9om84MVnZ8p+KYJAAAAAACAwKEJAAAAAACAwKEJAAAAAACAwKEJAAAAAACAkKoQbLlodmSDr8R0zbyDLnvOdMHSTKAgVDnWhZUyN/oisweuO1eOPWvebplvO+aL4lSGdVHJz+98t8wf/cqdMr8yvtVlTT9+So5d+cMPy7ywxp9dNcmRZn3lZpmfV98j89u+eZvLlr50VI49eO18mReP+MJehQFdOLNw3BeeNTOLJn0RIzOzaqP/d8gO6aJrmFmirF+zSUXfF5UjvTIfiX0Bu8asvodU4VQzs0yg4OR0zFFO/M8YKgSrxr4SNU81e3KKZAKpnMQCw1lRsDVtcVi1jvOBKXYGiuLhDJckZrF/Bg/9oa/Q2dvnC7iamUUfWqfznF4/9S/5m7ThqN4TB2qTW7LD75mmmvXNv/ZpXU22EnhXNWR8kdm3z7lXjv38Dr1XPjIq9taZwOI8rAvYVgv6d5I0iHdvHJg7ULu5crzRZbu3LZdjo7mBd32H3s+2zx/2cyzTfwvZSzrG7PW2OVtc9lDPajn2W/e9Xea3fPQfZb6oftBljwyvlWN/e3SZzP/l7O+57O6+K+TYkAU5XRg62+n/fox79d+asxnfNAEAAAAAABA4NAEAAAAAABA4NAEAAAAAABA4NAEAAAAAABA4NAEAAAAAABBSdc+p74tt7bd85dzHlq6oeY7O5lGZNzeO6M/M+hLihXZdVrx/sijzha2+onV2jq9EbGZWruqq4p/uvUTmG792l8suXOg71piZrfrk4zK3y8/3WaQrgq9rOCDzjkxJ5pWL/e+173CHHDvZrsuNt+71leAbDuh/r3KbrjKfNOkq7nHB/74bD/TLsZi9opx+1ORDLQKEYIeNQEeckzVHqANPqOvPUMVX6zfT3XPKzfr5U6jx2oCZQnXJMQt00At0ukijLvDO3DOu33dmEyf+oZi98jnLdPp7Y+kNL9Q8RW6F7lIxdpa+5yba/V4qrtP3bXZKL4rRLv/+yQUaDj5696UyrxvRc+dL/vq2HDxPX98i3flmfoO/vkxFf95kq/7ZRaMQMzPLjYtOkzsG9OCy3ltU23xvympOv9Nzw/oZEY3q/bZl/DyVPfv0WJx2eqbmuuy93c/Lsd8v678p7y3Nk/ma+sMuu+OB98ix16zfJPN6sefsqNN/yw1P6GfbU6WVMi+f5btEZeieAwAAAAAAcGbg0AQAAAAAAEDg0AQAAAAAAEDg0AQAAAAAAEDg0AQAAAAAAEBI1T0nGZ+w6uZtLl/47trnyK7SnXaOndct89J8f64ztFpX4i6s0FWAGwtll1UD1fpXzDku85/v1BXEHzm8yl/fhVNybFfgZ7fjYy6Kli2RQ+96v+i0Y2bl1jqZLxDFyeuGdan1psP6dij0+uurNurPy47737WZWTTsqzabmeXyvltI5cBBORYzTFT7mWtS0ZXsVYeNUNcNfWfNHI0Zve77kmaZl6p+DZUbAt19gNNYaM2nkQ90xtrc3yXzou3WE6kuPMk0tPfBjJLkc1bpnOPyPbcudtmq7+h9YeXF7TIv7N6r89ovL9hxrkW9SwOdo0L3bXzVxTIvdYp3UmBvmZ3Qc1ezPg81p0ty+rqLB3XXmra/2e+ymzqfkGOfKy2Xuexal+iuddXAM2W0ov8lL27ynXK++Mv3ybH2iZ/oHDNetqVF5nOy/t//hTH/PDEz+8S6B2V+XVF3gzr30ZtdlqhOdGZ256InZX7Ntvf6rPNFOXZOg16D3XXHZF5u9M+r07HrI980AQAAAAAAEDg0AQAAAAAAEDg0AQAAAAAAEDg0AQAAAAAAEDg0AQAAAAAAEFJ1z5kO8ct7ZN4YykU2bxqv5//T/XfMlltfzXO0BfJQRxzZyierz7Oym3bquUslmWca/W8wamyQY/PNTYHrq7ooqcvr65gK9DjJBqqTN9W7LDOnVc+hi0rjFEkqtfezyS3olHljxlfiHorVqg93p0lD37Xh6vmpKu0HWgSoOczMYjG+btSvNWA2ykSv7b1ciPR25uBevWNYE+ieE+X8UyIpn/izBzPM2LjZb7e4eNW++S7be4vvkmhmlrxng8yLh3RXi4b+2tdEy7OH9Gc2+j1TeW5Rjq07oLv+9Gzwc5iZlZv9dRcP6rdmObBdzInmjBPzQt2ndD5Y0td3f/cDLrv6pevk2G+u/p7MO7P+OTFY1d39SonunrNlcqHMv77vKpd1/1R3IdkrU8wGlXN1J9RD5QMu65vSa3OoXu9zS4l+18xt9V1Mv7z+3wNXqPei23f6TnKHhnUnoNKYXoMd3cMy73mr3xevujdwebMY3zQBAAAAAAAQODQBAAAAAAAQODQBAAAAAAAQODQBAAAAAAAQXvNCsJbRRRStqoslphLpok0W+bOhbFug2GhojkAhU2v380SjohLWK84t8kQXyIoW6wJUgauzqOJ/r0lOj05EwdffTy7O1kJzZALncIHxmSFf3KgyOKTnwKxV7WyXeZpCq/lIF2srJyfvMZYVhepqL3/7e6FCsPUZP1O5kXNsnHqJKk6e0mCgoHNHxhctnwi8wepMv5NCzwKl4WC650NUX3AZhWBPQ1FkUb7OxXHvUZct+UufvZLk9RfIPG709+LIYn8NZmbJgN4HVRbPddnxc3Rx/4ZOvV9s3a3XlardnC3rsXFe72ezZf/saDqkx2Yq+jlTDWxo3/ixD7ms+JOn5NgPv/Ej+voman92ZIZ0g4V4py4iXWf7RKoyzGZxg36nqL1eMavfHZ15vb57Y73ePiOqqjYHmyPoIq751kmXjRxplmMvOVff4/WR3gGvvWi/y6bhr/oZhx06AAAAAACAwKEJAAAAAACAwKEJAAAAAACAwKEJAAAAAACAwKEJAAAAAACA8Np3z5mOLjkhgY4zlvjPjPuPT89nikrrwJkgEh2lkoquTD/ZoTtpFDO+mndGdKwxM4tPwRlvbIGOV0Ko609Io/jZJ9pr/zwzk53BgBOWBDqppdBT9l0+zMwuLPh3ZinWa34qsOZVl4LJRD97Gg+n7AQU6iKH00uSnLSuSNETm2SuNtxtgTlCO+Vo4/Mum7expss6o2Qe878nMwvsLrTTsfsHTtzAWt3xSu3pHv/l+XLsn/3pb2S+OJuX+f3ifboy3x+6ROkNy/e47IW71unruHRQ5sfjJpm/ad5Olz1oxRRXNzuw4wYAAAAAABA4NAEAAAAAABA4NAEAAAAAABA4NAEAAAAAABA4NAEAAAAAABBe++45AM44k+26Inh9pvwaX8mJywbq75equqJ6Nqq9G0dZFyYPSiqz7/eHM8PKOt1ZTj0JQl2qQmtNjT8e6HrTsj/lGonpmQEA0PJjOv/q1qtdtuSBkhz7yf23y/zhv/qazB/qX+uyW1r3yrGj1QmZv2nOdpf17F0tx/78Rd315+0bdGews+sPuuxBWyPHzmZ80wQAAAAAAEDg0AQAAAAAAEDg0AQAAAAAAEDg0AQAAAAAAECgECyAVyeq/cx1tEuPnUqyNc+Rj3SBxqrpApCZyBeRrCa64GSoEGWa62jMTMk8VCBWyV06UPNYMzNLdKFM4IRMw311/9C5Mr9s/mMuqyb6+VAXVWr+vJFqoNj073bJPFTuNYlrL9wMADizBF5X9o4VL7qs+s96b/nTx9bL/Eeji2X+/FOrfNj9azm2nOh3WH3ki6IfeHO9HrtDxvbCxUtk/rrG3T68XBeTtSc363wW4JsmAAAAAAAAAocmAAAAAAAAAocmAAAAAAAAAocmAAAAAAAAAocmAAAAAAAAAt1zALwqSVl3i1FGVuteFVnzXTqyka78nQ10yala7R144sA5cah7h+yqE+iekwlcd0b8jGZmfZVmlzXW+ermqUWBTkB02sFr6PGjK2Se6dzosqnAGs4Hetyo58beylw5Nh5I25GK7jkAAG3kHaMy/4OWLS771ZDuIPO5t/63zG9oOiDzb5zT57L/HGuXYxflan/nLXvjfpnv2LVQ5qFOk3XiXT2wtijHtj1Z48XNQHzTBAAAAAAAQODQBAAAAAAAQODQBAAAAAAAQODQBAAAAAAAQODQBAAAAAAAQKB7DoCTrjC/JPP+uMllcaCTzUi1XualuCBz1YUnNPdkoh+Fanw+0D0nlJcT3Rlksuo/s7u1X47VaUAUOAtP9PUBtcg0+25PZmbVkRGZT5b1mmrNNLgstLazGd3JpiM77rL7BtfJsWYTgVxLYtYJAEBrKOjOkZvGl7lssNwox+6K5st8X8Numd99zn+4rKfSKseWA/vZQ+U2l13R8bIcGxLab7dn/Xv22JW6G2TbPak+ckbhmyYAAAAAAAAChyYAAAAAAAAChyYAAAAAAAAChyYAAAAAAAAChyYAAAAAAAAC3XMAvLIo0nmS1DzFd1/3bzIfS+pcNpjT1cavqO+Tedn0dUyJ6ysHLrls+mfMi7mLmdBYnd8/vlDmE9W8y0YDlckHV3fLPN7pK61HgetLdCMSoDYpu8qMvtAu88lLfEX9ywpjcmwp8IxZmvNdt1Y0HJNjd5nu+pOp1x17qhPpuu0AAM4cf3vOz2S+PD/oshtaNsuxnVnfRc7MLB/p/a+yJj9Z81gzszcHOvMov2rcI/NN40tl/k9H3+KyBV0DNX/ebME3TQAAAAAAAAQOTQAAAAAAAAQOTQAAAAAAAAQOTQAAAAAAAAQKwQJ4ZSkKvoZ88YrrZT52QZfLBlb7AqlmZqUufR2Veb6w5O//D6IgalbPEeV0ldSk5B+RuZGsHFs4rguw1vfpzyz2+sKaTVuOyLHx3toLeCUpC3YCtaiOj6cav+KzT8j8ym0fc1np+iE5tqVBF2UdfGSBy5Z/rydwJTqvTgWeGwAABPz1J26WefJRX4y8p2eunqSiv7OQP673l0vWH3TZF1b8Qo59ZPQsmX/3xfUua3lYF6QdWqP3rfPO0Q0Z5t7qi9K27Nslx85mfNMEAAAAAABA4NAEAAAAAABA4NAEAAAAAABA4NAEAAAAAABA4NAEAAAAAABAiJIUnTGiKDpmZvtO3uUAr2hZkiQdp/oiZiLWJk4h1mUA6xKnGGszgLWJU4y1GcDaxCkWXJupDk0AAAAAAADOFPy/5wAAAAAAAAgcmgAAAAAAAAgcmgAAAAAAAAgcmgAAAAAAAAgcmgAAAAAAAAgcmgAAAAAAAAgcmgAAAAAAAAgcmgAAAAAAAAgcmgAAAAAAAAj/B+a407uBbI1pAAAAAElFTkSuQmCC\n","text/plain":[""]},"metadata":{}}]},{"cell_type":"markdown","metadata":{"id":"GWWght_IpC3o"},"source":["### Kiểm tra độ chính xác"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"qrvbG5QfpNHT","executionInfo":{"status":"ok","timestamp":1637287779921,"user_tz":-420,"elapsed":3439,"user":{"displayName":"Anh Đức Lê","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Ggl2R3s4-MP-Ma4tbGGDacR2dirRQjQHyn5v6zLpg=s64","userId":"12415970068997449260"}},"outputId":"4955c81d-95b1-4fa9-dbf0-6e46bba783de"},"source":["# Đánh giá mô hình trên test set\n","score = model.evaluate(x_test, y_test, verbose=0)\n","\n","# \bKiểm tra độ chính xác\n","print(\"Test loss:\", score[0])\n","print(\"Test accuracy:\", score[1])"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Test loss: 0.20774540305137634\n","Test accuracy: 0.9258999824523926\n"]}]},{"cell_type":"markdown","metadata":{"id":"WwIQCagqYp60"},"source":["Đến thời điểm này, chúng ta thấy rằng độ accuracy của mô hình, khi đánh giá bằng tập kiểm thử, hơi thấp hơn so với số liệu trong quá trình huấn luyện. Khoảng cách giữa hai độ accuracy khi huấn luyện và khi kiểm thử thể hiện sự overfitting. Overfitting xảy ra khi một mô hình ML hoạt động kém hơn khi được cung cấp các đầu vào mới, mà mô hình chưa từng thấy trước đây trong quá trình đào tạo."]},{"cell_type":"markdown","metadata":{"id":"3l46UW9KSa1y"},"source":["### Kết luận"]},{"cell_type":"markdown","metadata":{"id":"rqnbRU65SnAT"},"source":["Huấn luyện thành công Convolutional Neural Network (CNN) để phân loại Fashion-MNIST với độ chính xác khoảng 92% 🎉"]}]}