From 7dec569dc6420fcf0b727b286ee7c30b6a890248 Mon Sep 17 00:00:00 2001 From: Dipak Nidhi Date: Fri, 13 Oct 2023 16:21:15 +0300 Subject: [PATCH 01/17] I added MLP probability --- notebooks/Final_MLP_Probability.ipynb | 28059 ++++++++++++++++++++++++ 1 file changed, 28059 insertions(+) create mode 100644 notebooks/Final_MLP_Probability.ipynb diff --git a/notebooks/Final_MLP_Probability.ipynb b/notebooks/Final_MLP_Probability.ipynb new file mode 100644 index 00000000..30d636ad --- /dev/null +++ b/notebooks/Final_MLP_Probability.ipynb @@ -0,0 +1,28059 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn.neural_network import MLPClassifier\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.neural_network import MLPClassifier\n", + "from sklearn.model_selection import StratifiedKFold\n", + "from osgeo import gdal" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.neural_network import MLPClassifier\n", + "from sklearn.model_selection import StratifiedKFold\n", + "\n", + "def prepare_data(X_res, y_res):\n", + " \"\"\"\n", + " Scales the input data X_res and returns it along with y_res.\n", + " \n", + " Parameters:\n", + " X_res : DataFrame\n", + " Feature data.\n", + " y_res : DataFrame\n", + " Target data.\n", + " \"\"\"\n", + " y = y_res['class']\n", + " X_scaled = StandardScaler().fit_transform(X_res)\n", + " return X_scaled, y\n", + "\n", + "def prepare_data_f(file_name):\n", + " \"\"\"\n", + " Reads a CSV file, extracts features and target variable, scales the feature data and returns the scaled data and target.\n", + " \n", + " Parameters:\n", + " file_name : str\n", + " Path to the input CSV file.\n", + " \"\"\"\n", + " df = pd.read_csv(file_name)\n", + " y = df['class']\n", + " X = df.drop(['E', 'N', 'class'], axis=1)\n", + " X_scaled = StandardScaler().fit_transform(X)\n", + " return X_scaled, y\n", + "\n", + "def train_model(X, y):\n", + " \"\"\"\n", + " Trains a MLP classifier using StratifiedKFold for cross-validation.\n", + " \n", + " Parameters:\n", + " X : array-like of shape (n_samples, n_features)\n", + " Sample data.\n", + " y : array-like of shape (n_samples,)\n", + " Target values.\n", + " \n", + " Returns:\n", + " clf : MLPClassifier\n", + " Trained model.\n", + " \"\"\"\n", + " skf = StratifiedKFold(n_splits=5)\n", + " clf = MLPClassifier(solver='adam', alpha=.001, hidden_layer_sizes=(16, 2), random_state=1)\n", + "\n", + " for train_index, test_index in skf.split(X, y):\n", + " X_train, X_test = X[train_index], X[test_index]\n", + " y_train, y_test = y[train_index], y[test_index]\n", + " clf.fit(X_train, y_train)\n", + " print(f\"Accuracy: {clf.score(X_test, y_test)}\")\n", + " \n", + " return clf\n", + "\n", + "def process_data(file_name, clf, threshold):\n", + " \"\"\"\n", + " Function to process data, generate probabilities, and save to CSV.\n", + "\n", + " :param file_name: string, name of the input CSV file.\n", + " :param clf: classifier object, to predict probabilities.\n", + " :param threshold: float, threshold value for class assignment.\n", + " \"\"\"\n", + " \n", + " # Load data\n", + " df0 = pd.read_csv(file_name)\n", + " y0 = df0['class']\n", + " df0 = df0.drop(['E', 'N', 'class'], axis=1)\n", + " \n", + " # Standardize data\n", + " df0 = StandardScaler().fit_transform(df0)\n", + "\n", + " df0_numpy = df0.copy()\n", + "\n", + " # Ensure data is in NumPy array format\n", + " if not isinstance(df0, np.ndarray):\n", + " df0_numpy = df0.to_numpy()\n", + "\n", + " df0 = df0_numpy.copy()\n", + " \n", + " # Calculate the probability of each point\n", + " probs1 = clf.predict_proba(df0)[:, 0]\n", + " probs2 = clf.predict_proba(df0)[:, 1]\n", + "\n", + " print(len(probs2))\n", + " count = np.count_nonzero(probs2>threshold)\n", + " print(count)\n", + "\n", + "\n", + " for i in range(len(probs2)):\n", + " if probs2[i] > threshold:\n", + " probs2[i] = 1\n", + " else:\n", + " probs2[i] = 0\n", + "\n", + " # Apply threshold and convert probabilities to class labels\n", + " # probs2 = np.where(probs2 > threshold, 1, 0).astype(int)\n", + " \n", + " # Reload original data\n", + " df0_original = pd.read_csv(file_name)\n", + " \n", + " # Create new dataframe with original E, N columns and new probability columns\n", + " new_df = df0_original.loc[:, ['E', 'N']].assign(Probability1=probs2, Probability2=probs1)\n", + " \n", + " # Save new data to CSV\n", + " new_df.to_csv(\"probability1.csv\")\n", + "\n", + " # Output for user\n", + " print(f\"Processed data saved to 'probability.csv'\")\n", + " print(f\"Data shape: {new_df.shape}\")\n", + " print(new_df.head())\n", + " return new_df" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 0.9999864393540793\n", + "Accuracy: 0.9999769469019348\n", + "Accuracy: 0.9998603251576088\n", + "Accuracy: 0.9992419588650809\n", + "Accuracy: 0.9999742347378113\n" + ] + } + ], + "source": [ + "# Example usage:\n", + "\n", + "# Load the CSV file\n", + "\n", + "# Load the independent variables (features) from a CSV file into a DataFrame.\n", + "# Assuming 'X_res.csv' contains the feature variables used for training the model.\n", + "X_train = pd.read_csv('/home/dipak/Desktop/codes/Probability MLP/X_res.csv')\n", + "\n", + "# Load the dependent variable (target) from a CSV file into a DataFrame.\n", + "# Assuming 'y_res.csv' contains the target variable corresponding to X_train.\n", + "y_train = pd.read_csv('/home/dipak/Desktop/codes/Probability MLP/y_res.csv')\n", + "\n", + "\n", + "# Define the path to the input data file.\n", + "# Assuming '2M_raster_points.csv' contains columns 'E', 'N', and some class label.\n", + "filename_input_csv = '/home/dipak/Desktop/codes/Probability MLP/2M_raster_points.csv'\n", + "\n", + "\n", + "# Prepare data and train model\n", + "X_train, y_train = prepare_data(X_train,y_train)\n", + "\n", + "# Train the model using the prepared data.\n", + "clf = train_model(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1843564\n", + "27449\n", + "Processed data saved to 'probability.csv'\n", + "Data shape: (1843564, 4)\n", + " E N Probability1 Probability2\n", + "0 360300.0 7540050.0 0.0 1.0\n", + "1 360350.0 7540050.0 0.0 1.0\n", + "2 360400.0 7540050.0 0.0 1.0\n", + "3 360450.0 7540050.0 0.0 1.0\n", + "4 360500.0 7540050.0 0.0 1.0\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ENProbability1Probability2
0360300.07540050.00.01.0
1360350.07540050.00.01.0
2360400.07540050.00.01.0
3360450.07540050.00.01.0
4360500.07540050.00.01.0
\n", + "
" + ], + "text/plain": [ + " E N Probability1 Probability2\n", + "0 360300.0 7540050.0 0.0 1.0\n", + "1 360350.0 7540050.0 0.0 1.0\n", + "2 360400.0 7540050.0 0.0 1.0\n", + "3 360450.0 7540050.0 0.0 1.0\n", + "4 360500.0 7540050.0 0.0 1.0" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Define a threshold for class probability. \n", + "# Any predicted probability above this value might be classified as class 1, otherwise class 0.\n", + "# It's commonly used to determine the decision boundary in probabilistic classifiers.\n", + "threshold = 0.9\n", + "\n", + "# Prepare Data for Probability Calculation\n", + "X_prob, y_prob = prepare_data_f(filename_input_csv)\n", + "\n", + "# Process Data and Save Probabilities\n", + "new_df = process_data(filename_input_csv, clf, threshold)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def create_target_raster_with_csv_file(file_path, pixelwise_classification_options):\n", + " \n", + " \"\"\"\n", + " This function generates a dictionary containing information about the spatial extent\n", + " and resolution of a target raster, based on point data extracted from a CSV file.\n", + " \n", + " Parameters:\n", + " - file_path (str): Path to the CSV file containing point data with 'N' and 'E' columns, representing\n", + " spatial coordinates.\n", + " - pixelwise_classification_options (dict): A dictionary containing options for raster generation,\n", + " including \"OVERRIDE_RASTER_SIZE\" which represents the\n", + " desired spatial resolution of the raster.\n", + " \n", + " Returns:\n", + " - main_target (dict): A dictionary containing information about the target raster, including\n", + " its spatial extent, resolution, and dimension in pixels.\n", + " \"\"\"\n", + "\n", + "\n", + " # Using pandas to load data from the CSV file at the given file_path. \n", + " # Assumes that the file contains columns 'N' and 'E' to represent spatial coordinates.\n", + " ds = pd.read_csv(f'{file_path}')\n", + "\n", + " # Extract Spatial Coordinates from the CSV file\n", + " # Extracting 'N' and 'E' coordinates as NumPy arrays from the DataFrame.\n", + " list_of_all_N = ds['N'].values\n", + " list_of_all_E = ds['E'].values\n", + "\n", + " # Compute Target Raster Attributes\n", + " # --------------------------------\n", + " # Calculating attributes of the target raster based on the spatial extent of the input points and the desired raster resolution defined in \n", + " # pixelwise_classification_options.\n", + " # The 'main_target' dictionary will contain several attributes related to the spatial and \n", + " # pixel dimensions of the resultant raster, like min/max coordinates, raster width/height,\n", + " # number of pixels in both dimensions, and spatial resolution in meters.\n", + "\n", + " main_target = {\n", + " 'target_raster_max_y': np.max(list_of_all_N),\n", + " 'target_raster_min_y': np.min(list_of_all_N),\n", + " 'target_raster_min_x': np.min(list_of_all_E),\n", + " 'target_raster_max_x': np.max(list_of_all_E),\n", + " 'number_of_x_pixels': int(round(np.max(list_of_all_E) - np.min(list_of_all_E)) / float(pixelwise_classification_options[\"OVERRIDE_RASTER_SIZE\"])),\n", + " 'number_of_y_pixels': int(round(np.max(list_of_all_N) - np.min(list_of_all_N)) / float(pixelwise_classification_options[\"OVERRIDE_RASTER_SIZE\"])),\n", + " 'raster_height': np.max(list_of_all_N) - np.min(list_of_all_N),\n", + " 'raster_width': np.max(list_of_all_E) - np.min(list_of_all_E),\n", + " 'target_raster_spatial_x_pixel_size_meters': pixelwise_classification_options[\"OVERRIDE_RASTER_SIZE\"],\n", + " 'target_raster_spatial_y_pixel_size_meters': pixelwise_classification_options[\"OVERRIDE_RASTER_SIZE\"],\n", + " }\n", + "\n", + " return main_target\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'target_raster_max_y': 7540050.0, 'target_raster_min_y': 7458100.0, 'target_raster_min_x': 346050.0, 'target_raster_max_x': 414000.0, 'number_of_x_pixels': 1359, 'number_of_y_pixels': 1639, 'raster_height': 81950.0, 'raster_width': 67950.0, 'target_raster_spatial_x_pixel_size_meters': 50, 'target_raster_spatial_y_pixel_size_meters': 50}\n", + "346050.0 7540050.0\n" + ] + } + ], + "source": [ + "# This file is assumed to contain the calculated probability data from the previous step for subsequent spatial processing.\n", + "file_path = '/home/dipak/Desktop/Final_File/MLP_Probability/probability1.csv'\n", + "new_df = pd.read_csv(file_path)\n", + "\n", + "# Here, \"OVERRIDE_RASTER_SIZE\" is set to 50, which will be used to determine the spatial resolution of the generated raster.\n", + "pixelwise_classification_options = {\"OVERRIDE_RASTER_SIZE\": 50}\n", + "\n", + "# Generating Target Raster Attributes\n", + "# -----------------------------------\n", + "# Calling the previously defined function to calculate the attributes of the target raster based on point data from 'probability1.csv'.\n", + "# The returned 'mine_target' dictionary contains detailed information about the spatial extent and resolution of the desired raster.\n", + "mine_target = create_target_raster_with_csv_file('probability1.csv', pixelwise_classification_options)\n", + "print(mine_target)\n", + "\n", + "# Raster Dimensions and Initialization\n", + "# -----------------------------------\n", + "# Extracting the desired number of pixels in each dimension (height and width) from the 'mine_target' dictionary, and defining a nodata_value which will \n", + "# be used to initialize the raster array.\n", + "height_size_in_pixel = mine_target['number_of_y_pixels']\n", + "width_size_in_pixel = mine_target['number_of_x_pixels']\n", + "nodata_value = 255\n", + "\n", + "# Creating an empty raster array, initializing all pixels to the nodata_value.\n", + "# The dtype 'uint8' signifies that the array will store unsigned 8-bit integer values.\n", + "array = np.full((height_size_in_pixel, width_size_in_pixel), nodata_value, dtype='uint8')\n", + "\n", + "# Extracting Raster Origin and Resolution\n", + "# ---------------------------------------\n", + "# Extracting and printing the coordinates of the top-left corner (origin) of the raster ('current_east' and 'current_north'), and the spatial resolution \n", + "# ('spatial_pixel_resolution') from the 'mine_target' dictionary.\n", + "# These values will be crucial for subsequent geospatial processing and analysis.\n", + "current_east = mine_target['target_raster_min_x']\n", + "current_north = mine_target['target_raster_max_y']\n", + "spatial_pixel_resolution = mine_target['target_raster_spatial_x_pixel_size_meters']\n", + "print(current_east, current_north)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "def analyze_and_assign_values(height_size_in_pixel, width_size_in_pixel, current_north, current_east, spatial_pixel_resolution, threshold, df, array):\n", + " \"\"\"\n", + " Analyze given DataFrame to find specific values and assign updates to the array based on the conditions met.\n", + "\n", + " Parameters:\n", + " - height_size_in_pixel (int): Total number of pixels in height to be analyzed.\n", + " - width_size_in_pixel (int): Total number of pixels in width to be analyzed.\n", + " - current_north (float): Current northern value to begin analysis.\n", + " - current_east (float): Current eastern value to begin analysis.\n", + " - spatial_pixel_resolution (float): The spatial resolution of a pixel.\n", + " - threshold (float): Threshold value to decide whether to update the array or not.\n", + " - df (DataFrame): A DataFrame containing data to be analyzed. Expecting columns ['E', 'N'].\n", + " - array (ndarray): A NumPy array to be updated based on the analysis.\n", + "\n", + " Returns:\n", + " - ndarray: Updated array based on the analysis.\n", + " \"\"\"\n", + "\n", + " # Loop through each pixel in height and width.\n", + " for R in range(height_size_in_pixel):\n", + " # Calculate the point in the North to be analyzed by decrementing the spatial resolution for each step.\n", + " point_N_to_analyse = current_north - (R * spatial_pixel_resolution)\n", + " for C in range(width_size_in_pixel):\n", + " # Calculate the point in the East to be analyzed by incrementing the spatial resolution for each step.\n", + " point_E_to_analyse = current_east + (C * spatial_pixel_resolution)\n", + " \n", + " # Fetch the needed values from the DataFrame where the East and North match the points being analyzed.\n", + " value_I_need = df.loc[(df['E'] == point_E_to_analyse) & (df['N'] == point_N_to_analyse)].values\n", + " \n", + " # If the fetched values are non-empty and meet the threshold, update the array and print the value.\n", + " if len(value_I_need) != 0 and value_I_need[0][3] * 100 >= threshold * 100:\n", + " print(value_I_need[0][3] * 100)\n", + " array[R, C] = 1\n", + "\n", + " return array\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n", + "100.0\n" + ] + } + ], + "source": [ + "# Value Analysis and Array Update\n", + "# Calling the 'analyze_and_assign_values' function to analyze spatial data and assign appropriate values to the raster array based on certain conditions.\n", + "updated_array = analyze_and_assign_values(height_size_in_pixel, width_size_in_pixel, current_north, current_east, spatial_pixel_resolution, threshold, new_df, array)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# save the Updated array csv\n", + "np.savetxt(\"updated_array\", updated_array, delimiter=\",\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def openTiffFileAsRaster(filename):\n", + " \"\"\"\n", + " Open a TIFF file and return its data and dataset object.\n", + " \n", + " Parameters:\n", + " filename (str): Path to the TIFF file.\n", + " \n", + " Returns:\n", + " arr (ndarray): Array containing raster data.\n", + " ds (Dataset): GDAL dataset object.\n", + " \"\"\"\n", + " ds = gdal.Open(filename)\n", + " band = ds.GetRasterBand(1)\n", + " arr = band.ReadAsArray()\n", + " return arr, ds\n", + "\n", + "def saveRasterToTiffFile(arr, ds, filename, geotrans, raster_output_type, nodata_value):\n", + " \"\"\"\n", + " Save raster data to a TIFF file with specified properties.\n", + " \n", + " Parameters:\n", + " arr (ndarray): Raster data to save.\n", + " ds (Dataset): Reference GDAL dataset object.\n", + " filename (str): Path to save the output TIFF file.\n", + " geotrans (tuple): GeoTransform parameters.\n", + " raster_output_type (str): Type of raster output (\"classification\" or other).\n", + " nodata_value (int/float): No-data value for the output raster.\n", + " \"\"\"\n", + " [cols, rows] = arr.shape\n", + " driver = gdal.GetDriverByName(\"GTiff\")\n", + " \n", + " outdata = None\n", + " if raster_output_type == \"classification\":\n", + " outdata = driver.Create(filename, rows, cols, 1, gdal.GDT_Byte)\n", + " else: # Regression on default.\n", + " outdata = driver.Create(filename, rows, cols, 1, gdal.GDT_Float32)\n", + " # outdata.SetGeoTransform(ds.GetGeoTransform())##sets same geotransform as input\n", + " outdata.SetGeoTransform(geotrans)\n", + " # sets same geotransform as input\n", + " outdata.SetProjection(ds.GetProjection())\n", + " # sets same projection as input\n", + " outdata.GetRasterBand(1).WriteArray(arr)\n", + " outdata.GetRasterBand(1).SetNoDataValue(nodata_value)\n", + " # if you want these values transparent\n", + " outdata.FlushCache()\n", + " # saves to disk!!\n", + " outdata = None\n", + " band=None\n", + " ds=None\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "from osgeo import gdal\n", + "\n", + "# Extracting and assigning specific properties from the 'mine_target' dictionary, which contains properties related to a target raster, such as \n", + "# its extents and spatial resolution.\n", + "target_raster_min_E = mine_target['target_raster_min_x']\n", + "target_raster_max_N = mine_target['target_raster_max_y']\n", + "target_raster_spatial_x_pixel_size_meters = mine_target['target_raster_spatial_x_pixel_size_meters']\n", + "\n", + "# Assigning the spatial resolution of a pixel to a more concise variable for use in further operations.\n", + "# The spatial resolution denotes the size of a pixel in real-world units (here, meters).\n", + "pixel_spatial_resolution = target_raster_spatial_x_pixel_size_meters\n", + "\n", + "\n", + "# Defining the path to a reference data file and specifying the type of raster output desired.\n", + "# reference_data_path: Path to a TIFF file that presumably contains reference raster data.\n", + "# raster_output_type: Desired output type for a raster file, here set to \"classification\".\n", + "reference_data_path = \"/home/dipak/Desktop/codes/Probability MLP/AEM/IOCG_AEM_Inph_.tif\"\n", + "raster_output_type = \"classification\"\n", + "\n", + "# Geo-Transform Information\n", + "# Defining geotransform information for positioning the raster in the coordinate space.\n", + "# Geotransform contains:\n", + "# [0] top-left x-coordinate (min E)\n", + "# [1] width of a pixel (spatial resolution in the x-direction, in meters)\n", + "# [2] rotation term (0 if image is oriented north up)\n", + "# [3] top-left y-coordinate (max N)\n", + "# [4] rotation term (0 if image is oriented north up)\n", + "# [5] height of a pixel (negative spatial resolution in the y-direction, in meters)\n", + "geotrans_info = (target_raster_min_E, pixel_spatial_resolution, 0.0, target_raster_max_N, 0.0, -pixel_spatial_resolution)\n", + "projection_arr, projection_reference_info_ds = openTiffFileAsRaster(reference_data_path)\n", + "\n", + "# Saving the Updated Raster to a TIFF File\n", + "saveRasterToTiffFile(arr=updated_array.astype('uint8'), \n", + " ds=projection_reference_info_ds,\n", + " filename=\"dipak_321.tif\", \n", + " geotrans=geotrans_info, \n", + " raster_output_type=\"classification\",\n", + " nodata_value=255\n", + " )\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "bayesian", + "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.8.13" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 66665765ab638833bfd21f78ed3ebd239776f0b1 Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 25 Oct 2023 11:29:42 +0300 Subject: [PATCH 02/17] added the mlp before testing --- .gitignore | 1 + .idea/misc.xml | 5 +- eis_toolkit/deep_learning/__init__.py | 0 eis_toolkit/deep_learning/mlp_probability.py | 91 +++++++++++++++++++ eis_toolkit/exceptions.py | 12 +++ .../model_performance_estimation/__init__.py | 0 .../model_performance_estimation.py | 35 +++++++ 7 files changed, 143 insertions(+), 1 deletion(-) mode change 100755 => 100644 .idea/misc.xml create mode 100644 eis_toolkit/deep_learning/__init__.py create mode 100644 eis_toolkit/deep_learning/mlp_probability.py create mode 100644 eis_toolkit/model_performance_estimation/__init__.py create mode 100644 eis_toolkit/model_performance_estimation/model_performance_estimation.py diff --git a/.gitignore b/.gitignore index 09789967..8126d822 100755 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # Byte-compiled / optimized / DLL files __pycache__/ +.idea/ *.py[cod] *$py.class diff --git a/.idea/misc.xml b/.idea/misc.xml old mode 100755 new mode 100644 index 2c5c8843..047aa8c1 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,7 @@ - + + + \ No newline at end of file diff --git a/eis_toolkit/deep_learning/__init__.py b/eis_toolkit/deep_learning/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/eis_toolkit/deep_learning/mlp_probability.py b/eis_toolkit/deep_learning/mlp_probability.py new file mode 100644 index 00000000..f3ae199c --- /dev/null +++ b/eis_toolkit/deep_learning/mlp_probability.py @@ -0,0 +1,91 @@ +import numpy as np +from sklearn.neural_network import MLPClassifier + +from eis_toolkit.exceptions import InvalidDatasetException +from eis_toolkit.model_performance_estimation.model_performance_estimation import performance_model_estimation + + +def train_evaluate_predict_with_mlp( + dataset: np.ndarray, + labels: np.ndarray, + cross_validation_type: str, + number_of_split: int, + is_class_probability: bool = False, + threshold_probability: float = None, + is_predict_full_map: bool = False, + solver: str = "adam", + alpha: float = 0.001, + hidden_layer_sizes: tuple[int, int] = (16, 2), + random_state=0, +) -> np.ndarray: + """ + Do the training - evaluation - predictions steps with MLP. + + Parameters: + dataset: Features data. + labels: Labels data. + cross_validation_type: selected cross validation method. + number_of_split: number of split to divide the dataset. + is_class_probability: if True the code return probability, otherwise it return class. + is_predict_full_map: if True the function will predict the full dataset otherwise predict only the te4st fold. + threshold_probability: works only if is_class_probability is True, is thresholds of probability. + solver: this is what in keras is called optimizer. + alpha: floating point represent regularization. + hidden_layer_sizes: It represents the number of neurons in the ith hidden layer. + random_state: random state for repeatability of results. + Return: + a numpy array with prediction (class if is_class_probability is set to false otherwise it return probability). + Raises: + InvalidDatasetException: When the dataset is None.. + """ + + # I need two local vars + best_score = 0 + best_handler_list = list() + + if dataset is None or labels is None: + raise InvalidDatasetException + + # select the cross validation method you need + selected_cross_validation = performance_model_estimation( + cross_validation_type=cross_validation_type, number_of_split=number_of_split + ) + # start the training process + for fold_number, (train_index, test_index) in enumerate(selected_cross_validation.split(dataset, labels)): + + # let's make an instance of classifier + classifier = MLPClassifier( + solver=solver, alpha=alpha, hidden_layer_sizes=hidden_layer_sizes, random_state=random_state + ) + + # train the classifier + classifier.fit(dataset[train_index], labels[train_index]) + # score + fold_score = classifier.score(dataset[test_index], labels[test_index]) + + if fold_number == 0: + best_score = fold_score + best_handler_list = [classifier, dataset[test_index]] + else: + if best_score < fold_score: + best_score = fold_score + best_handler_list = [classifier, dataset[test_index]] + + # assign to classifier and data a vars I do not like see to much indexing + classifier = best_handler_list[0] + + if not is_predict_full_map: + data = best_handler_list[1] + else: + data = dataset + + if not is_class_probability: + # predict class + prediction = classifier.predict(data) + else: + # predict proba + prediction = classifier.predict_proba(data) + # assign proba to threshold + prediction[prediction >= threshold_probability] = 1 + + return prediction diff --git a/eis_toolkit/exceptions.py b/eis_toolkit/exceptions.py index b3fb4248..f888e277 100644 --- a/eis_toolkit/exceptions.py +++ b/eis_toolkit/exceptions.py @@ -72,3 +72,15 @@ class NonSquarePixelSizeException(Exception): class NumericValueSignException(Exception): """Exception error class for numeric value sign exception.""" + + +class InvalidCrossValidationSelected(Exception): + """Exception thrown when a not valid cv is selected.""" + + +class InvalidNumberOfSplit(Exception): + """Exception throws when number of split is incompatible.""" + + +class InvalidDatasetException(Exception): + """Exception throws when the dataset is null.""" diff --git a/eis_toolkit/model_performance_estimation/__init__.py b/eis_toolkit/model_performance_estimation/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/eis_toolkit/model_performance_estimation/model_performance_estimation.py b/eis_toolkit/model_performance_estimation/model_performance_estimation.py new file mode 100644 index 00000000..171e98dc --- /dev/null +++ b/eis_toolkit/model_performance_estimation/model_performance_estimation.py @@ -0,0 +1,35 @@ +import sklearn +from sklearn.model_selection import KFold, LeaveOneOut, StratifiedKFold + +from eis_toolkit.exceptions import InvalidCrossValidationSelected, InvalidNumberOfSplit + + +def performance_model_estimation( + cross_validation_type: str = "LOOCV", number_of_split: int = 5 +) -> sklearn.model_selection: + """ + Evaluate the feature importance of a sklearn classifier or linear model. + + Parameters: + cross_validation_type: Select cross validation (LOOCV, SKFOLD, KFOLD). + number_of_split: number used to split the dataset. + Return: + Selected cross validation method + Raises: + InvalidCrossValidationSelected: When the cross validation method selected is not implemented. + InvalidNumberOfSplit: When the number of split is incompatible with the selected cross validation + """ + + if cross_validation_type is None: + raise InvalidCrossValidationSelected + + if cross_validation_type != "LOOCV" and number_of_split <= 1: + raise InvalidNumberOfSplit + if cross_validation_type == "LOOCV": + return LeaveOneOut() + elif cross_validation_type == "KFOLD": + return KFold(n_splits=number_of_split, shuffle=True) + elif cross_validation_type == "SKFOLD": + return StratifiedKFold(n_splits=number_of_split, shuffle=True) + else: + raise InvalidCrossValidationSelected From 2a00a8947134e60ad95b3e5cc314ad1bd8dae316 Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 25 Oct 2023 11:44:13 +0300 Subject: [PATCH 03/17] changed name of the function --- eis_toolkit/deep_learning/{mlp_probability.py => mlp_function.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename eis_toolkit/deep_learning/{mlp_probability.py => mlp_function.py} (100%) diff --git a/eis_toolkit/deep_learning/mlp_probability.py b/eis_toolkit/deep_learning/mlp_function.py similarity index 100% rename from eis_toolkit/deep_learning/mlp_probability.py rename to eis_toolkit/deep_learning/mlp_function.py From 9fcf9844bf106a1c5fd5f20929d982682ac0a753 Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 25 Oct 2023 12:26:26 +0300 Subject: [PATCH 04/17] added some test for mlp --- eis_toolkit/deep_learning/mlp_function.py | 8 +++-- tests/data/remote/fake_smote_data.csv | 14 ++++++++ tests/deep_learning/mlp_function.py | 39 +++++++++++++++++++++++ 3 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 tests/data/remote/fake_smote_data.csv create mode 100644 tests/deep_learning/mlp_function.py diff --git a/eis_toolkit/deep_learning/mlp_function.py b/eis_toolkit/deep_learning/mlp_function.py index f3ae199c..b7380ad1 100644 --- a/eis_toolkit/deep_learning/mlp_function.py +++ b/eis_toolkit/deep_learning/mlp_function.py @@ -1,7 +1,7 @@ import numpy as np from sklearn.neural_network import MLPClassifier -from eis_toolkit.exceptions import InvalidDatasetException +from eis_toolkit.exceptions import InvalidArgumentTypeException, InvalidDatasetException from eis_toolkit.model_performance_estimation.model_performance_estimation import performance_model_estimation @@ -36,13 +36,17 @@ def train_evaluate_predict_with_mlp( Return: a numpy array with prediction (class if is_class_probability is set to false otherwise it return probability). Raises: - InvalidDatasetException: When the dataset is None.. + InvalidDatasetException: When the dataset is None. + InvalidArgumentTypeException when the function try to make probability and the threshold is None. """ # I need two local vars best_score = 0 best_handler_list = list() + if is_class_probability is not False and threshold_probability is None: + raise InvalidArgumentTypeException + if dataset is None or labels is None: raise InvalidDatasetException diff --git a/tests/data/remote/fake_smote_data.csv b/tests/data/remote/fake_smote_data.csv new file mode 100644 index 00000000..ffe0d647 --- /dev/null +++ b/tests/data/remote/fake_smote_data.csv @@ -0,0 +1,14 @@ +Mag_TMI,Mag_AS,DRC135,DRC180,DRC45,DRC90,Mag_TD,HDTDR,Mag_Xdrv,mag_Ydrv,Mag_Zdrv,Pseu_Grv,Rd_U,Rd_TC,Rd_Th,Rd_K,EM_ratio,EM_Ap_rs,Em_Qd,EM_Inph +2268.84814453125,17.1581611633301,399.452026367188,1241.9189453125,1659.96069335938,817.493774414062,0.967140376567841,0.0098344394937157,8.95765781402588,-5.39546966552734,14.1259899139404,0.044494666159153,1.36135137081146,7.25668382644653,4.11134386062622,2.20917630195618,-1.059485912323,1279.77514648438,369.960021972656,-408.969512939453 +1567.13342285156,12.0736398696899,811.22119140625,1152.73815917969,537.753356933594,196.236389160156,0.606229603290558,0.0123586133122444,-10.8760499954224,-1.94181001186371,6.8795018196106,-0.0331512354314327,1.04619634151459,6.36194658279419,4.43068933486939,2.08675241470337,0.196825549006462,1056.36669921875,631.4521484375,-116.82160949707 +752.222534179688,4.47251701354981,271.164947509766,559.020263671875,373.250396728516,85.3951187133789,1.30995166301727,0.0037727216258645,-0.226398706436157,-1.26553952693939,4.32153034210205,-0.0775383934378624,2.87373232841492,7.81854200363159,7.44287252426147,1.76298654079437,0.542226076126099,457.481231689453,199.063827514648,154.597793579102 +3966.7255859375,35.6609268188477,2224.91333007813,2638.12963867187,1460.65026855469,1047.43383789063,1.08289444446564,0.0065176533535122,-15.9418029785156,9.72955703735352,31.5002365112305,0.154558017849922,2.10953116416931,8.33069896697998,7.69790363311768,1.9403156042099,0.0567405931651592,1132.15661621094,509.947967529297,33.1680755615234 +2532.2646484375,12.3407173156738,253.413879394531,470.416320800781,1989.0751953125,1772.07275390625,1.05213391780853,0.0067763337865471,5.67160940170288,-1.89656174182892,10.71799659729,0.275396704673767,1.84024429321289,7.37833023071289,5.19302272796631,2.05725955963135,-0.0119054801762104,1292.49072265625,275.666687011719,20.4180183410645 +2813.12182617188,21.5452003479004,1136.21240234375,1873.73400878906,1445.11267089844,707.591064453125,0.991267740726471,0.005079002585262,-9.52781772613525,7.6626443862915,18.0275955200195,-0.100035227835178,0.832645416259766,4.18386888504028,4.09081697463989,0.887853622436523,1.81776928901672,7.00053930282593,2384.80615234375,3889.74560546875 +1172.77294921875,14.112286567688,-36.2159004211426,707.865661621094,1097.87829589844,353.796691894531,-0.946002185344696,0.0085421474650502,-3.67168092727661,-6.71633720397949,-11.4459791183472,0.492181122303009,0.865936696529388,5.97837972640991,3.67838358879089,1.84192705154419,-1.73027968406677,1246.56469726563,187.980026245117,-339.839050292969 +5973.16259765625,43.5236587524414,1292.53625488281,2182.93334960937,4396.3701171875,3505.97338867188,1.25045239925385,0.0062727779150009,6.33378648757935,16.2754173278809,41.3097801208496,0.383449107408524,2.06770277023315,7.28308010101318,6.4926643371582,1.68284714221954,1.90347361564636,86.5994567871094,324.102142333984,537.748718261719 +7332.3662109375,72.4895172119141,2944.97290039062,3353.13940429688,3952.130859375,3543.96435546875,1.07203555107117,0.0069159930571913,33.6926956176758,17.2737140655518,63.6528778076172,0.273843765258789,0.198836326599121,0.281035333871841,0.0837716013193131,0.730827987194061,0.0259798355400562,1382.57995605469,625.734375,-6.51192855834961 +208.21891784668,31.4084300994873,-140.453231811523,-1035.22045898438,7.26274633407593,902.029968261719,-1.01898038387299,0.00888960249722,11.9041175842285,-5.15384244918823,-26.7465591430664,-0.139832615852356,3.15581631660461,5.73435640335083,4.09613656997681,0.940561711788178,-0.309453308582306,913.758728027344,1754.66491699219,-210.937698364258 +865.38427734375,12.6630964279175,-448.706329345703,585.158203125,1313.00732421875,279.142791748047,0.139166861772537,0.0094734020531177,-13.1934499740601,0.725071728229523,1.75687551498413,0.108912363648415,1.32490766048431,4.88739442825317,4.45820903778076,1.73567128181458,-1.19233155250549,1576.76513671875,440.641845703125,-373.599243164062 +847.251037597656,8.68022537231445,59.2043762207031,208.997268676758,548.390258789063,398.597351074219,1.43842053413391,0.000703387777321,2.27086758613586,0.637199103832245,8.60457801818848,-0.100587777793407,1.50502908229828,6.87311744689941,6.72358798980713,1.85208606719971,-2.27402424812317,1820.29699707031,675.116271972656,-885.269836425781 +53.3237190246582,5.49066829681397,-33.4032173156738,-125.077171325684,-91.4255523681641,0.248422488570213,-0.385570347309113,0.0140572218224406,-3.85784578323364,3.85554623603821,-2.06470394134521,-0.042528185993433,0.92294454574585,6.87442302703857,5.1852331161499,2.22421145439148,-0.123563386499882,1182.95971679688,577.757690429688,27.0863418579102 diff --git a/tests/deep_learning/mlp_function.py b/tests/deep_learning/mlp_function.py new file mode 100644 index 00000000..fa5b73fe --- /dev/null +++ b/tests/deep_learning/mlp_function.py @@ -0,0 +1,39 @@ +import numpy as np +import pandas as pd +import pytest +from sklearn.preprocessing import StandardScaler + +from eis_toolkit.deep_learning.mlp_function import train_evaluate_predict_with_mlp +from eis_toolkit.exceptions import InvalidArgumentTypeException + + +def test_the_invalid_argument_exception(): + """This check test if the exception is throws correctly.""" + X = pd.read_csv("../data/remote/fake_smote_data.csv").to_numpy() + X = StandardScaler().fit_transform(X) + labels = np.random.randint(2, size=X.shape[0]) + with pytest.raises(InvalidArgumentTypeException): + train_evaluate_predict_with_mlp( + dataset=X, + labels=labels, + cross_validation_type="SKFOLD", + number_of_split=5, + is_class_probability=True, + is_predict_full_map=False, + ) + + +def test_check_prediction_is_not_empty(): + """Check if the final prediction are not empty.""" + X = pd.read_csv("../data/remote/fake_smote_data.csv").to_numpy() + X = StandardScaler().fit_transform(X) + labels = np.random.randint(2, size=X.shape[0]) + prediction = train_evaluate_predict_with_mlp( + dataset=X, + labels=labels, + cross_validation_type="SKFOLD", + number_of_split=5, + is_class_probability=False, + is_predict_full_map=False, + ) + assert len(prediction) > 0 From e4c7bc52d5174e3e9f88311151d3816da8d22d2b Mon Sep 17 00:00:00 2001 From: Luca Date: Thu, 26 Oct 2023 12:38:06 +0300 Subject: [PATCH 05/17] before splitting the three functions --- eis_toolkit/deep_learning/__init__.py | 0 eis_toolkit/model_performance_estimation/__init__.py | 0 .../mlp_function.py => prediction/mlp.py} | 12 ++++++++---- .../model_performance_estimation.py | 6 +++++- tests/deep_learning/mlp_function.py | 2 +- 5 files changed, 14 insertions(+), 6 deletions(-) delete mode 100644 eis_toolkit/deep_learning/__init__.py delete mode 100644 eis_toolkit/model_performance_estimation/__init__.py rename eis_toolkit/{deep_learning/mlp_function.py => prediction/mlp.py} (90%) rename eis_toolkit/{model_performance_estimation => prediction}/model_performance_estimation.py (89%) diff --git a/eis_toolkit/deep_learning/__init__.py b/eis_toolkit/deep_learning/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/eis_toolkit/model_performance_estimation/__init__.py b/eis_toolkit/model_performance_estimation/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/eis_toolkit/deep_learning/mlp_function.py b/eis_toolkit/prediction/mlp.py similarity index 90% rename from eis_toolkit/deep_learning/mlp_function.py rename to eis_toolkit/prediction/mlp.py index b7380ad1..8ce580f7 100644 --- a/eis_toolkit/deep_learning/mlp_function.py +++ b/eis_toolkit/prediction/mlp.py @@ -1,14 +1,18 @@ +from typing import Literal + import numpy as np +from beartype import beartype from sklearn.neural_network import MLPClassifier from eis_toolkit.exceptions import InvalidArgumentTypeException, InvalidDatasetException -from eis_toolkit.model_performance_estimation.model_performance_estimation import performance_model_estimation +from eis_toolkit.prediction.model_performance_estimation import performance_model_estimation +@beartype def train_evaluate_predict_with_mlp( dataset: np.ndarray, labels: np.ndarray, - cross_validation_type: str, + cross_validation_type: Literal["LOOCV", "KFOLD", "SKFOLD"], number_of_split: int, is_class_probability: bool = False, threshold_probability: float = None, @@ -16,7 +20,7 @@ def train_evaluate_predict_with_mlp( solver: str = "adam", alpha: float = 0.001, hidden_layer_sizes: tuple[int, int] = (16, 2), - random_state=0, + random_state: int = 0, ) -> np.ndarray: """ Do the training - evaluation - predictions steps with MLP. @@ -34,7 +38,7 @@ def train_evaluate_predict_with_mlp( hidden_layer_sizes: It represents the number of neurons in the ith hidden layer. random_state: random state for repeatability of results. Return: - a numpy array with prediction (class if is_class_probability is set to false otherwise it return probability). + A Numpy array with prediction (class if is_class_probability is set to false otherwise it return probability). Raises: InvalidDatasetException: When the dataset is None. InvalidArgumentTypeException when the function try to make probability and the threshold is None. diff --git a/eis_toolkit/model_performance_estimation/model_performance_estimation.py b/eis_toolkit/prediction/model_performance_estimation.py similarity index 89% rename from eis_toolkit/model_performance_estimation/model_performance_estimation.py rename to eis_toolkit/prediction/model_performance_estimation.py index 171e98dc..3f3d42e6 100644 --- a/eis_toolkit/model_performance_estimation/model_performance_estimation.py +++ b/eis_toolkit/prediction/model_performance_estimation.py @@ -1,11 +1,15 @@ +from typing import Literal + import sklearn +from beartype import beartype from sklearn.model_selection import KFold, LeaveOneOut, StratifiedKFold from eis_toolkit.exceptions import InvalidCrossValidationSelected, InvalidNumberOfSplit +@beartype def performance_model_estimation( - cross_validation_type: str = "LOOCV", number_of_split: int = 5 + cross_validation_type: Literal["LOOCV", "KFOLD", "SKFOLD"], number_of_split: int = 5 ) -> sklearn.model_selection: """ Evaluate the feature importance of a sklearn classifier or linear model. diff --git a/tests/deep_learning/mlp_function.py b/tests/deep_learning/mlp_function.py index fa5b73fe..ec67cd4d 100644 --- a/tests/deep_learning/mlp_function.py +++ b/tests/deep_learning/mlp_function.py @@ -3,8 +3,8 @@ import pytest from sklearn.preprocessing import StandardScaler -from eis_toolkit.deep_learning.mlp_function import train_evaluate_predict_with_mlp from eis_toolkit.exceptions import InvalidArgumentTypeException +from eis_toolkit.prediction.mlp import train_evaluate_predict_with_mlp def test_the_invalid_argument_exception(): From a823e88ec18063ab342ecbcef055b3d31c1c6588 Mon Sep 17 00:00:00 2001 From: Luca Date: Thu, 26 Oct 2023 13:02:14 +0300 Subject: [PATCH 06/17] moved tests --- eis_toolkit/prediction/mlp.py | 8 +++++--- tests/prediction/__init__.py | 0 .../{deep_learning/mlp_function.py => prediction/mlp.py} | 0 3 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 tests/prediction/__init__.py rename tests/{deep_learning/mlp_function.py => prediction/mlp.py} (100%) diff --git a/eis_toolkit/prediction/mlp.py b/eis_toolkit/prediction/mlp.py index 8ce580f7..9fab6fd6 100644 --- a/eis_toolkit/prediction/mlp.py +++ b/eis_toolkit/prediction/mlp.py @@ -30,15 +30,17 @@ def train_evaluate_predict_with_mlp( labels: Labels data. cross_validation_type: selected cross validation method. number_of_split: number of split to divide the dataset. - is_class_probability: if True the code return probability, otherwise it return class. - is_predict_full_map: if True the function will predict the full dataset otherwise predict only the te4st fold. + is_class_probability: if True the code return probability, otherwise it returns class. + is_predict_full_map: if True the function will predict the full dataset otherwise predict only the test fold. threshold_probability: works only if is_class_probability is True, is thresholds of probability. solver: this is what in keras is called optimizer. alpha: floating point represent regularization. hidden_layer_sizes: It represents the number of neurons in the ith hidden layer. random_state: random state for repeatability of results. + Return: - A Numpy array with prediction (class if is_class_probability is set to false otherwise it return probability). + A Numpy array with prediction (class if is_class_probability is set to false otherwise it returns probability). + Raises: InvalidDatasetException: When the dataset is None. InvalidArgumentTypeException when the function try to make probability and the threshold is None. diff --git a/tests/prediction/__init__.py b/tests/prediction/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/deep_learning/mlp_function.py b/tests/prediction/mlp.py similarity index 100% rename from tests/deep_learning/mlp_function.py rename to tests/prediction/mlp.py From b6252aabff8264c9bc6a4bac54a77d1687cd9069 Mon Sep 17 00:00:00 2001 From: Luca Date: Thu, 26 Oct 2023 13:44:46 +0300 Subject: [PATCH 07/17] de coupled functions --- eis_toolkit/prediction/mlp.py | 128 +++++++++++++++++++++++++++++++++- tests/prediction/mlp.py | 6 +- 2 files changed, 130 insertions(+), 4 deletions(-) diff --git a/eis_toolkit/prediction/mlp.py b/eis_toolkit/prediction/mlp.py index 9fab6fd6..da7d9360 100644 --- a/eis_toolkit/prediction/mlp.py +++ b/eis_toolkit/prediction/mlp.py @@ -1,6 +1,8 @@ from typing import Literal +import numpy import numpy as np +import sklearn.base from beartype import beartype from sklearn.neural_network import MLPClassifier @@ -9,7 +11,131 @@ @beartype -def train_evaluate_predict_with_mlp( +def crete_the_model( + solver: str = "adam", alpha: float = 0.001, hidden_layer_sizes: tuple[int, int] = (16, 2), random_state: int = 0 +) -> sklearn.base.BaseEstimator: + """ + Do the model instantiation. + + Parameters: + solver: this is what in keras is called optimizer. + alpha: floating point represent regularization. + hidden_layer_sizes: It represents the number of neurons in the ith hidden layer. + random_state: random state for repeatability of results. + + Return: + The instance of the compiled model. + + Raises: + InvalidDatasetException: When the dataset is None. + """ + + # let's make an instance of classifier + classifier = MLPClassifier( + solver=solver, alpha=alpha, hidden_layer_sizes=hidden_layer_sizes, random_state=random_state + ) + + return classifier + + +@beartype +def train_the_model( + classifier: sklearn.base.BaseEstimator, train_dataset: numpy.ndarray, train_labels: numpy.ndarray +) -> sklearn.base.BaseEstimator: + """ + Do the train the model. + + Parameters: + classifier: An instance of sklearn BaseEstimator. + train_dataset: Train features data. + train_labels: Train labels data. + + + Return: + The instance of the compiled and fitted model. + + Raises: + InvalidDatasetException: When the dataset is None. + """ + + if train_dataset is None or train_labels is None: + raise InvalidDatasetException + + classifier.fit(train_dataset, train_labels) + return classifier + + +@beartype +def evaluate_the_model( + classifier: sklearn.base.BaseEstimator, test_dataset: numpy.ndarray, test_labels: numpy.ndarray +) -> float: + """ + Do the evaluation of the model. + + Parameters: + classifier: An instance of sklearn base estimator. + test_dataset: Test data. + test_labels: the test labels. + Return: + A float point number that shows the accuracy. + + Raises: + InvalidDatasetException: When the dataset is None. + + """ + + if test_dataset is None or test_labels is None: + raise InvalidDatasetException + + # score + score = classifier.score(test_dataset, test_labels) + return score + + +@beartype +def predict_the_model( + classifier: sklearn.base.BaseEstimator, + test_dataset: numpy.ndarray, + is_class_probability: bool = False, + threshold_probability: float = None, +) -> numpy.ndarray: + """ + Do the predictions of the model. + + Parameters: + classifier: An instance of sklearn base estimator. + test_dataset: the dataset to test. + is_class_probability: if True the code return probability, otherwise it returns class. + threshold_probability: works only if is_class_probability is True, is thresholds of probability. + + Return: + A Numpy array with prediction (class if is_class_probability is set to false otherwise it returns probability). + + Raises: + InvalidDatasetException: When the dataset is None. + InvalidArgumentTypeException when the function try to make probability and the threshold is None. + """ + + if is_class_probability is not False and threshold_probability is None: + raise InvalidArgumentTypeException + + if test_dataset is None: + raise InvalidDatasetException + + # assign to classifier and data a vars I do not like see to much indexing + if not is_class_probability: + # predict class + prediction = classifier.predict(test_dataset) + else: + # predict proba + prediction = classifier.predict_proba(test_dataset) + # assign proba to threshold + prediction[prediction >= threshold_probability] = 1 + return prediction + + +@beartype +def mlp_train_evaluate_and_predict( dataset: np.ndarray, labels: np.ndarray, cross_validation_type: Literal["LOOCV", "KFOLD", "SKFOLD"], diff --git a/tests/prediction/mlp.py b/tests/prediction/mlp.py index ec67cd4d..2162941b 100644 --- a/tests/prediction/mlp.py +++ b/tests/prediction/mlp.py @@ -4,7 +4,7 @@ from sklearn.preprocessing import StandardScaler from eis_toolkit.exceptions import InvalidArgumentTypeException -from eis_toolkit.prediction.mlp import train_evaluate_predict_with_mlp +from eis_toolkit.prediction.mlp import mlp_train_evaluate_and_predict def test_the_invalid_argument_exception(): @@ -13,7 +13,7 @@ def test_the_invalid_argument_exception(): X = StandardScaler().fit_transform(X) labels = np.random.randint(2, size=X.shape[0]) with pytest.raises(InvalidArgumentTypeException): - train_evaluate_predict_with_mlp( + mlp_train_evaluate_and_predict( dataset=X, labels=labels, cross_validation_type="SKFOLD", @@ -28,7 +28,7 @@ def test_check_prediction_is_not_empty(): X = pd.read_csv("../data/remote/fake_smote_data.csv").to_numpy() X = StandardScaler().fit_transform(X) labels = np.random.randint(2, size=X.shape[0]) - prediction = train_evaluate_predict_with_mlp( + prediction = mlp_train_evaluate_and_predict( dataset=X, labels=labels, cross_validation_type="SKFOLD", From 2dff92587ba4069386a44db06646d5f1039039e6 Mon Sep 17 00:00:00 2001 From: Luca Date: Mon, 30 Oct 2023 06:35:27 +0200 Subject: [PATCH 08/17] added two more functions --- eis_toolkit/prediction/mlp.py | 80 ++++++++++++++++++++++++++++++++++- 1 file changed, 78 insertions(+), 2 deletions(-) diff --git a/eis_toolkit/prediction/mlp.py b/eis_toolkit/prediction/mlp.py index da7d9360..449947bb 100644 --- a/eis_toolkit/prediction/mlp.py +++ b/eis_toolkit/prediction/mlp.py @@ -92,8 +92,84 @@ def evaluate_the_model( return score +def predict_the_model_with_cross_validation( + classifier: sklearn.base.BaseEstimator, + test_dataset: np.ndarray, + test_labels: np.ndarray, + cross_validation_type: Literal["LOOCV", "KFOLD", "SKFOLD"], + number_of_split: int, + is_class_probability: bool = False, + threshold_probability: float = None, + is_predict_full_map: bool = False, +) -> numpy.ndarray: + + """ + Do the model prediction with cross validation. + + Parameters: + classifier: An instance of sklearn base estimator. + test_dataset: Test data. + test_labels: the test labels. + cross_validation_type: selected cross validation method. + number_of_split: number of split to divide the dataset. + is_class_probability: if True the code return probability, otherwise it returns class. + is_predict_full_map: if True the code will predict the full map. + threshold_probability: works only if is_class_probability is True, is thresholds of probability. + Return: + A float point number that shows the accuracy. + + Raises: + InvalidDatasetException: When the dataset is None. + """ + + # I need two local vars + best_score = 0 + best_handler_list = list() + + # select the cross validation method you need + selected_cross_validation = performance_model_estimation( + cross_validation_type=cross_validation_type, number_of_split=number_of_split + ) + + # start the training process + for fold_number, (train_index, test_index) in enumerate(selected_cross_validation.split(dataset, labels)): + + # train the classifier + classifier.fit(test_dataset[train_index], test_labels[train_index]) + # score + fold_score = classifier.score(test_dataset[test_index], test_labels[test_index]) + + if fold_number == 0: + best_score = fold_score + best_handler_list = [classifier, test_dataset[test_index]] + else: + if best_score < fold_score: + best_score = fold_score + best_handler_list = [classifier, test_dataset[test_index]] + + # assign to classifier and data a vars I do not like see to much indexing + classifier = best_handler_list[0] + + if not is_predict_full_map: + data = best_handler_list[1] + else: + data = dataset + + if not is_class_probability: + # predict class + prediction = classifier.predict(data) + else: + # predict proba + prediction = classifier.predict_proba(data) + # assign proba to threshold + prediction[prediction >= threshold_probability] = 1 + + return prediction + + + @beartype -def predict_the_model( +def predict_the_model_without_cross_validation( classifier: sklearn.base.BaseEstimator, test_dataset: numpy.ndarray, is_class_probability: bool = False, @@ -157,7 +233,7 @@ def mlp_train_evaluate_and_predict( cross_validation_type: selected cross validation method. number_of_split: number of split to divide the dataset. is_class_probability: if True the code return probability, otherwise it returns class. - is_predict_full_map: if True the function will predict the full dataset otherwise predict only the test fold. + is_predict_full_map: if True the function will predict the full dataset otherwise predict only the test fold. threshold_probability: works only if is_class_probability is True, is thresholds of probability. solver: this is what in keras is called optimizer. alpha: floating point represent regularization. From efb0dbb8115b413e0007cdfd6227040a8a03c7aa Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 31 Oct 2023 13:08:20 +0200 Subject: [PATCH 09/17] I added the bnew cnn / mlp code --- eis_toolkit/prediction/cnn_mlp_tensorflow.py | 434 +++++++++++++++++++ eis_toolkit/prediction/mlp.py | 6 +- 2 files changed, 436 insertions(+), 4 deletions(-) create mode 100644 eis_toolkit/prediction/cnn_mlp_tensorflow.py diff --git a/eis_toolkit/prediction/cnn_mlp_tensorflow.py b/eis_toolkit/prediction/cnn_mlp_tensorflow.py new file mode 100644 index 00000000..c361ec02 --- /dev/null +++ b/eis_toolkit/prediction/cnn_mlp_tensorflow.py @@ -0,0 +1,434 @@ +import os +from typing import Any, Literal, Union + +import joblib +import numpy +import numpy as np +import tensorflow as tf +from beartype import beartype +from numpy import dtype, ndarray +from sklearn.preprocessing import StandardScaler + + +@beartype +def return_windows_as_sequence( + input_path: str = None, +) -> tuple[dict[str, ndarray[Any, dtype[Any]]], ndarray[Any, dtype[Any]]]: + """ + Load sets of windows from its folder. + + Parameters: + input_path: this is what in keras is called optimizer. + + Return: + It returns dataset and labels + + Raises: + TODO + """ + labels = list() + data_dictionary = dict() + for folder in os.listdir(f"{input_path}"): + concatenated = None + for satellites_folder in os.listdir(f"{input_path}/{folder}"): + full_path = f"{input_path}/{folder}/{satellites_folder}" + # loop in all the folders and get all wins + print(f"[WALK] Walking into {full_path}") + # rest the win list + windows_holder = list() + for windows in os.listdir(full_path): + # get the class + labels.append(windows.split(".")[0].split("_")[-1]) + windows_holder.append(np.load(f"{full_path}/{windows}")) + # make concatenation + if concatenated is None: + concatenated = np.array(windows_holder) + else: + concatenated = np.concatenate((concatenated, np.array(windows_holder)), axis=-1) + + # add the data dict + data_dictionary[f"{folder}"] = concatenated.astype("float32") + # prepare the labels + labels = np.array(labels).astype("uint8") + + return data_dictionary, labels + + +@beartype +def create_the_scaler(data_dictionary: dict, dump: bool = False): + """ + Create scaler for data normalization. + + Parameters: + data_dictionary: dictionary containing type of data and data. + dump: if you want to dump file in a folders. + + Return: + normalized data dictionary + + Raises: + TODO + """ + if dump and os.path.exists("scaler"): + os.makedirs("scaler") + + # normalize the data + dictionary_of_scaler = dict() + for data in data_dictionary.keys(): + scaler = StandardScaler() + scaler.fit(data_dictionary[data].reshape(-1, data_dictionary[data].shape[-1])) + dictionary_of_scaler[data] = scaler + + if dump: + joblib.dump(value=scaler, filename=f"scaler/scaler_{data}.bin") + + return dictionary_of_scaler + + +@beartype +def normalize_the_data(data_to_normalize, normalizator) -> np.ndarray: + """ + Normalize the data. + + Parameters: + data_to_normalize: dictionary containing data that need to be normalized. + normalizator: scaler needed for data normalization. + + Return: + normalized dataset + + Raises: + TODO + """ + try: + number_of_samples, h, w, c = data_to_normalize.shape + temp = data_to_normalize.reshape(-1, data_to_normalize.shape[-1]) + normalized_input = normalizator.transform(temp) + return normalized_input.reshape(number_of_samples, h, w, c) + except Exception as ex: + print(f"[EXCEPTION] Main throws exception {ex}") + + +@beartype +def convolutional_body_of_the_cnn( + input_layer: tf.keras.Input, + neuron_list: Union[int], + kernel_size: tuple[int, int], + kernel_regularizes: tf.keras.regularizers, + pool_size: int, + dropout: float = None, +) -> tf.keras.layers: + """ + Do create hidden layer (cov + dropout batch norm and max pooling). + + Parameters: + input_layer: The input layer of the network. + neuron_list: The list of neurons to assign to each layer. + kernel_size: The size of the kernel, + kernel_regularizes: The type of kernel regularize. + pool_size: how big you want the pool size, + dropout: add the dropout layer to the body. + + Return: + return the block of hidden layer + + Raises: + TODO + """ + # we do dynamically the conv2d + for layer_number, neuron in enumerate(neuron_list): + if layer_number == 0: + x = tf.keras.layers.Conv2D( + filters=neuron, + activation="relu", + padding="same", + kernel_regularizer=kernel_regularizes, + kernel_size=kernel_size, + )(input_layer) + else: + x = tf.keras.layers.Conv2D( + filters=neuron, + activation="relu", + padding="same", + kernel_regularizer=kernel_regularizes, + kernel_size=kernel_size, + )(x) + + if dropout is not None: + x = tf.keras.layers.Dropout(dropout)(x) + + x = tf.keras.layers.BatchNormalization()(x) + x = tf.keras.layers.MaxPool2D(pool_size=pool_size)(x) + + # we flatten + x = tf.keras.layers.Flatten()(x) + return x + + +def dense_nodes(input_layer: tf.keras.Input, neuron_list: Union[int], dropout: float = None) -> tf.keras.layers: + """ + Do the creation of dense layer for MLP. + + Parameters: + input_layer: The input layer of the network. + neuron_list: The list of neurons to assign to each layer. + dropout: add the dropout layer to the body. + + Return: + return the block of dense layer + + Raises: + TODO + """ + + for layer_number, neuron in enumerate(neuron_list): + if layer_number == 0: + x = tf.keras.layers.Dense(neuron, activation="relu")(input_layer) + else: + x = tf.keras.layers.Dense(neuron, activation="relu")(x) + + if dropout is not None: + x = tf.keras.layers.Dropout(dropout)(x) + + # we flatten + x = tf.keras.layers.Flatten()(x) + return x + + +@beartype +def create_multi_modal_cnn( + input_aem: tuple[int, int, int] or tuple[int, int] = None, + kernel_aem: tuple[int, int] = None, + input_gravity: tuple[int, int, int] or tuple[int, int] = None, + kernel_gravity: tuple[int, int] = None, + input_magnetic: tuple[int, int, int] or tuple[int, int] = None, + kernel_magnetic: tuple[int, int] = None, + input_radiometric: tuple[int, int, int] or tuple[int, int] = None, + kernel_radiometric: tuple[int, int] = None, + regularization: Union[tf.keras.regularizers.L1, tf.keras.regularizers.L2, tf.keras.regularizers.L1L2] = None, + data_augmentation: bool = False, + optimizer: str = "Adam", + loss=Union[tf.keras.losses.BinaryCrossentropy, tf.keras.losses.CategoricalCrossentropy], + inputs: int = 1, + neuron_list: Union[int] = [16], + pool_size: int = 2, + dropout_rate: Literal[None, float] = None, + is_a_cnn: bool = True, + output: int = 2, + last_activation: Literal["softmax", "sigmoid"] = "softmax", +): + """ + Do an instance of CNN or MLP. + + Parameters: + input_aem: if exist, shape of the input aem. + kernel_aem: if exist channel size of the input (usually is last shape value). + input_gravity: if exist, shape of the input gravity. + kernel_gravity: if exist channel size of the input (usually is last shape value). + input_magnetic: if exist, shape of the input magnetic. + kernel_magnetic: if exist channel size of the input (usually is last shape value). + input_radiometric: if exist, shape of the input radiometric. + kernel_radiometric: if exist channel size of the input (usually is last shape value). + regularization: Type of regularization to insert into the CNN or MLP. + data_augmentation: if you want data augmentation or not (Random rotation is implemented). + optimizer: select one optimizer for the CNN or MLP. + loss: the loss function used to calculate accuracy. + inputs: number of inout to assign to the CNN or MLP (1 uni-modal > 1 fusion). + neuron_list: List of unit or neuron used to build the network. + pool_size: the pool size used by the CNN (Max-pooling). + dropout_rate: if you want to use dropout add a number as floating point. + is_a_cnn: true if you want to build a CNN false if you want to build a MLP. + output: number of output classes. + last_activation: usually you should use softmax or sigmoid. + + Return: + return the compiled model. + + Raises: + TODO + """ + if input_aem is not None: + input_layer = tf.keras.Input(shape=input_aem, name="AEM") + kernel = kernel_aem + elif input_gravity is not None: + input_layer = tf.keras.Input(shape=input_gravity, name="Gravity") + kernel = kernel_gravity + elif input_magnetic is not None: + input_layer = tf.keras.Input(shape=input_magnetic, name="Magnetic") + kernel = kernel_magnetic + else: + input_layer = tf.keras.Input(shape=input_radiometric, name="Radiometric") + kernel = kernel_radiometric + + if inputs == 1: + if data_augmentation: + input_layer = tf.keras.layers.RandomRotation((-0.2, 0.5))(input_layer) + + if is_a_cnn: + body = convolutional_body_of_the_cnn( + input_layer=input_layer, + neuron_list=neuron_list, + kernel_size=kernel, + dropout=dropout_rate, + kernel_regularizes=regularization, + pool_size=pool_size, + ) + else: + body = dense_nodes(input_layer=input_layer, neuron_list=neuron_list, dropout=dropout_rate) + + # create the classy + classifier = tf.keras.layers.Dense(output, activation=last_activation, name="classifier")(body) + model = tf.keras.Model(inputs=input_layer, outputs=classifier, name="model_with_1_input") + + return model + else: + print("[NN FACTORY] Multiples input") + model_input, model_output = list(), list() + + if input_aem is not None: + aem = tf.keras.Input(shape=input_aem, name="AEM") + + if data_augmentation: + aem = tf.keras.layers.RandomRotation((-0.2, 0.5))(input_layer) + + if is_a_cnn: + body_aem = convolutional_body_of_the_cnn( + input_layer=aem, + neuron_list=neuron_list, + kernel_size=kernel_aem, + dropout=dropout_rate, + kernel_regularizes=regularization, + pool_size=pool_size, + ) + else: + body_aem = dense_nodes(input_layer=aem, neuron_list=neuron_list, dropout=dropout_rate) + + model_aem = tf.keras.Model(inputs=aem, outputs=body_aem, name="model_aem") + model_input.append(model_aem.input) + model_output.append(model_aem.output) + + if input_gravity is not None: + gravity = tf.keras.Input(shape=input_gravity, name="Gravity") + + if data_augmentation: + gravity = tf.keras.layers.RandomRotation((-0.2, 0.5))(input_layer) + + if is_a_cnn: + body_gravity = convolutional_body_of_the_cnn( + input_layer=gravity, + neuron_list=neuron_list, + kernel_size=kernel_gravity, + dropout=dropout_rate, + kernel_regularizes=regularization, + pool_size=pool_size, + ) + else: + body_gravity = dense_nodes(input_layer=gravity, neuron_list=neuron_list, dropout=dropout_rate) + + model_gravity = tf.keras.Model(inputs=gravity, outputs=body_gravity, name="model_gravity") + model_input.append(model_gravity.input) + model_output.append(model_gravity.output) + + if input_magnetic is not None: + magnetic = tf.keras.Input(shape=input_magnetic, name="Magnetic") + + if data_augmentation: + magnetic = tf.keras.layers.RandomRotation((-0.2, 0.5))(input_layer) + + if is_a_cnn: + body_magnetic = convolutional_body_of_the_cnn( + input_layer=magnetic, + neuron_list=neuron_list, + kernel_size=kernel_magnetic, + dropout=dropout_rate, + kernel_regularizes=regularization, + pool_size=pool_size, + ) + else: + body_magnetic = dense_nodes(input_layer=magnetic, neuron_list=neuron_list, dropout=dropout_rate) + + model_magnetic = tf.keras.Model(inputs=magnetic, outputs=body_magnetic, name="model_magnetic") + model_input.append(model_magnetic.input) + model_output.append(model_magnetic.output) + + if input_radiometric is not None: + radiometric = tf.keras.Input(shape=input_radiometric, name="Radiometric") + + if data_augmentation: + radiometric = tf.keras.layers.RandomRotation((-0.2, 0.5))(input_layer) + + if is_a_cnn: + body_radiometric = convolutional_body_of_the_cnn( + input_layer=radiometric, + neuron_list=neuron_list, + kernel_size=kernel_radiometric, + dropout=dropout_rate, + kernel_regularizes=regularization, + pool_size=pool_size, + ) + else: + body_radiometric = dense_nodes(input_layer=radiometric, neuron_list=neuron_list, dropout=dropout_rate) + + model_magnetic = tf.keras.Model(inputs=radiometric, outputs=body_radiometric, name="model_radiopmetric") + model_input.append(model_magnetic.input) + model_output.append(model_magnetic.output) + + # combined + combined = tf.keras.layers.Concatenate(axis=-1)(model_output) + + classifier = tf.keras.layers.Dense( + output, + activation=last_activation, + kernel_regularizer=regularization, + bias_regularizer=None, + name="final_classifier", + )(combined) + + model = tf.keras.Model(inputs=model_input, outputs=classifier, name="eis_multimodal") + + model.compile(optimizer=optimizer, loss=loss, metrics=["accuracy"]) + + return model + + +@beartype +def make_prediction( + compiled_model: tf.keras.Model, + dictionary_of_training: dict, + dictionary_of_validation: dict, + training_labels: numpy.ndarray, + validation_labels: numpy.ndarray, + epochs: int, + batch_size: int, +) -> Union[tf.keras.Model, dict, float, int or float, int]: + """ + Do predictions of the model. + + Parameters: + compiled_model: an instance of the model. + dictionary_of_training: a dictionary with training data, + dictionary_of_validation: a dictionary with training or validation data, + training_labels: label of training data, + validation_labels: label of validation or test data. + epochs: number of epochs for running the model. + batch_size: batch size to feed the model. + + Return: + return the compiled model, the score, predictions validation + + Raises: + TODO + """ + + history = compiled_model.fit( + dictionary_of_training, + training_labels, + validation_data=(dictionary_of_validation, validation_labels), + batch_size=batch_size, + epochs=epochs, + ) + + score = compiled_model.evaluate(dictionary_of_validation, validation_labels) + prediction = compiled_model.predict(dictionary_of_validation) + + return compiled_model, history, score[0], prediction, validation_labels[0] diff --git a/eis_toolkit/prediction/mlp.py b/eis_toolkit/prediction/mlp.py index 449947bb..b0499030 100644 --- a/eis_toolkit/prediction/mlp.py +++ b/eis_toolkit/prediction/mlp.py @@ -102,7 +102,6 @@ def predict_the_model_with_cross_validation( threshold_probability: float = None, is_predict_full_map: bool = False, ) -> numpy.ndarray: - """ Do the model prediction with cross validation. @@ -132,7 +131,7 @@ def predict_the_model_with_cross_validation( ) # start the training process - for fold_number, (train_index, test_index) in enumerate(selected_cross_validation.split(dataset, labels)): + for fold_number, (train_index, test_index) in enumerate(selected_cross_validation.split(test_dataset, test_labels)): # train the classifier classifier.fit(test_dataset[train_index], test_labels[train_index]) @@ -153,7 +152,7 @@ def predict_the_model_with_cross_validation( if not is_predict_full_map: data = best_handler_list[1] else: - data = dataset + data = test_dataset if not is_class_probability: # predict class @@ -167,7 +166,6 @@ def predict_the_model_with_cross_validation( return prediction - @beartype def predict_the_model_without_cross_validation( classifier: sklearn.base.BaseEstimator, From 80e83bd5ecc20d031d3c6daba2d0661a96b7bb34 Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 31 Oct 2023 15:14:51 +0200 Subject: [PATCH 10/17] I added the utility file' --- eis_toolkit/exceptions.py | 8 + eis_toolkit/prediction/cnn_mlp_tensorflow.py | 100 ++++++++---- eis_toolkit/prediction/masterfile_eis.csv | 37 +++++ eis_toolkit/prediction/utilities.py | 161 +++++++++++++++++++ 4 files changed, 273 insertions(+), 33 deletions(-) create mode 100644 eis_toolkit/prediction/masterfile_eis.csv create mode 100644 eis_toolkit/prediction/utilities.py diff --git a/eis_toolkit/exceptions.py b/eis_toolkit/exceptions.py index f888e277..34ff78d4 100644 --- a/eis_toolkit/exceptions.py +++ b/eis_toolkit/exceptions.py @@ -84,3 +84,11 @@ class InvalidNumberOfSplit(Exception): class InvalidDatasetException(Exception): """Exception throws when the dataset is null.""" + + +class CanNotMakeCategoricalLabelException(Exception): + """Exception throws when it is not possible to do the one hot encoding.""" + + +class NoSuchPathOrDirectory(Exception): + """Exception throws when no correct path is found.""" diff --git a/eis_toolkit/prediction/cnn_mlp_tensorflow.py b/eis_toolkit/prediction/cnn_mlp_tensorflow.py index c361ec02..4b0cd90a 100644 --- a/eis_toolkit/prediction/cnn_mlp_tensorflow.py +++ b/eis_toolkit/prediction/cnn_mlp_tensorflow.py @@ -1,57 +1,89 @@ import os -from typing import Any, Literal, Union +import random +from typing import Literal, Union import joblib import numpy import numpy as np import tensorflow as tf from beartype import beartype -from numpy import dtype, ndarray +from osgeo import gdal from sklearn.preprocessing import StandardScaler +from sklearn.utils.class_weight import compute_sample_weight +from utilities import create_windows_based_of_geo_coords, parse_the_master_file, return_list_of_N_and_E @beartype -def return_windows_as_sequence( - input_path: str = None, -) -> tuple[dict[str, ndarray[Any, dtype[Any]]], ndarray[Any, dtype[Any]]]: +def dataset_loader( + deposit_path: str, unlabelled_data_path: str, desired_windows_dimension: int, path_of_features: str +) -> tuple[dict, list]: """ - Load sets of windows from its folder. + Do the load of the data. Parameters: - input_path: this is what in keras is called optimizer. + deposit_path: the path to the deposit csv file. + unlabelled_data_path the path from the 2M csv file. + desired_windows_dimension: the desired windows dimension. + path_of_features: nasterfile path. Return: - It returns dataset and labels + dataset holder and labels holder. Raises: TODO """ - labels = list() - data_dictionary = dict() - for folder in os.listdir(f"{input_path}"): - concatenated = None - for satellites_folder in os.listdir(f"{input_path}/{folder}"): - full_path = f"{input_path}/{folder}/{satellites_folder}" - # loop in all the folders and get all wins - print(f"[WALK] Walking into {full_path}") - # rest the win list - windows_holder = list() - for windows in os.listdir(full_path): - # get the class - labels.append(windows.split(".")[0].split("_")[-1]) - windows_holder.append(np.load(f"{full_path}/{windows}")) - # make concatenation - if concatenated is None: - concatenated = np.array(windows_holder) - else: - concatenated = np.concatenate((concatenated, np.array(windows_holder)), axis=-1) + dataset_holder = {} + labels_holder = list() + already_done = list() + same_point = True + + # load the csv file with the deposit annotation + coordinates_of_deposit = return_list_of_N_and_E(path_to_data=f"{deposit_path}") + coordinates_of_unlabelled_data = return_list_of_N_and_E(path_to_data=f"{unlabelled_data_path}") + + # parse the master + current_dataset = parse_the_master_file(master_file_path=path_of_features) + + for key, val in current_dataset.items(): + # create a list that hold the windows + dataset_holder[key] = list() + for tif_obj in current_dataset[key]: + # do the same for class 0 + current_raster = gdal.Open(tif_obj.puhti_path) + for windows_counter, (N, E) in enumerate(coordinates_of_deposit): + windows = create_windows_based_of_geo_coords( + current_raster_object=tif_obj, + current_E=float(E), + current_N=float(N), + desired_windows_dimension=desired_windows_dimension, + current_loaded_raster=current_raster, + ) + dataset_holder[key].append(windows) + labels_holder.append(1) + + # generate 17 random windows + rn = 0 + for i in range(0, len(coordinates_of_deposit)): + if not same_point: + # loop until you find a free number + while rn in already_done: + rn = random.randint(0, len(coordinates_of_unlabelled_data)) + # add here rn so we do not pick the same windows two time + already_done.append(rn) + + # get the actual windows + windows = create_windows_based_of_geo_coords( + current_raster_object=tif_obj, + current_E=float(coordinates_of_unlabelled_data[rn][0]), + current_N=float(coordinates_of_unlabelled_data[rn][1]), + desired_windows_dimension=desired_windows_dimension, + current_loaded_raster=current_raster, + ) - # add the data dict - data_dictionary[f"{folder}"] = concatenated.astype("float32") - # prepare the labels - labels = np.array(labels).astype("uint8") + dataset_holder[key].append(windows) + labels_holder.append(0) - return data_dictionary, labels + return dataset_holder, labels_holder @beartype @@ -400,6 +432,7 @@ def make_prediction( validation_labels: numpy.ndarray, epochs: int, batch_size: int, + sample_weights: bool = True, ) -> Union[tf.keras.Model, dict, float, int or float, int]: """ Do predictions of the model. @@ -412,7 +445,7 @@ def make_prediction( validation_labels: label of validation or test data. epochs: number of epochs for running the model. batch_size: batch size to feed the model. - + sample_weights: if you want to sample the weights Return: return the compiled model, the score, predictions validation @@ -426,6 +459,7 @@ def make_prediction( validation_data=(dictionary_of_validation, validation_labels), batch_size=batch_size, epochs=epochs, + sample_weight=compute_sample_weight("balanced", training_labels) if sample_weights is not False else None, ) score = compiled_model.evaluate(dictionary_of_validation, validation_labels) diff --git a/eis_toolkit/prediction/masterfile_eis.csv b/eis_toolkit/prediction/masterfile_eis.csv new file mode 100644 index 00000000..83c4a308 --- /dev/null +++ b/eis_toolkit/prediction/masterfile_eis.csv @@ -0,0 +1,37 @@ +../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_HDTDR_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,1.886579980237e-06,0.039180044084787,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_Z_drv_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-37.869369506836,163.15078735352,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_Drc_Cosine180_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-1935.9857177734,8751.16796875,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_AS_FFT_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,0.0031329630874097,164.6780090332,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_X_drv_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-66.994483947754,82.232086181641,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_Drc_Cosine90_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-3374.3571777344,7146.3422851562,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_Drc_Cosine45_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-2224.6638183594,11328.96484375,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_Y_drv_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-92.155395507812,72.532081604004,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Magnetic/pseudo_grav_20000530_PCS_clip.tif,Magnetic,1,-999999.0,0,-0.6089716553688,0.87987959384918,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_TD_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-1.570324420929,1.5695773363113,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Magnetic/IOCG_Mag_grysc_DGRF65_anom_.tif,Magnetic,1,-1.0000000331813535e+32,0,-2995.5629882813,16060.888671875,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_Drc_Cosine135_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-2244.9111328125,5534.2333984375,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt1500m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,18261.708984375,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt15000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,72681.8046875,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt10000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,70017.03125,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt1000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,17787.98828125,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt50m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,13902.248046875,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt2000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,18416.568359375,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt250m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,15586.211914062,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt500m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,15616.017578125,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt3000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,20220.0390625,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt150m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,14030.858398438,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt400m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,15610.012695312,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt100m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,13993.301757812,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt30000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,79317.2109375,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt200m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,14231.127929688,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt5000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,35889.06640625,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt20000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,75411.0390625,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt4000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,32759.6171875,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/AEM/IOCG_AEM_Inph_.tif,AEM,1,-1.0000000331813535e+32,0,-4321.1791992188,22495.068359375,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/AEM/IOCG_App_res.tif,AEM,1,-1.0000000331813535e+32,0,-299.9455871582,2346.1049804688,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/AEM/IOCG_EM_ratio.tif,AEM,1,-999999.0,0,-10.0,10.0,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/AEM/IOCG_AEM_Quad.tif,AEM,1,-1.0000000331813535e+32,0,-4375.3046875,5220.4658203125,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Radiometric/IOCG_Gm_Rd_K_.tif,Radiometric,1,-999999.0,0,-1.5939166545868,5.0812859535217,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Radiometric/IOCG_Gm_Rd_U_eq_.tif,Radiometric,1,-999999.0,0,-3.2844696044922,16.743774414063,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Radiometric/IOCG_Gm_Rd_Th_eq_.tif,Radiometric,1,-999999.0,0,-6.6340522766113,54.235275268555,NO_JAMAMASKI:0 +../../Annotations/Geophysical_Data/Radiometric/IOCG_Gm_Rd_Total_Count_.tif,Radiometric,1,-999999.0,0,-5.516149520874,33.499954223633,NO_JAMAMASKI:0 diff --git a/eis_toolkit/prediction/utilities.py b/eis_toolkit/prediction/utilities.py new file mode 100644 index 00000000..bb993962 --- /dev/null +++ b/eis_toolkit/prediction/utilities.py @@ -0,0 +1,161 @@ +from typing import Any + +import numpy as np +from beartype import beartype +from osgeo import gdal + + +@beartype +def parse_the_master_file(master_file_path) -> dict: + """ + Load sets of windows from its folder. + + Parameters: + master_file_path: path of the masterfile. + + Return: + Dictionary that contains the following information: + current_path: this the path of the feature. + no_data: no data value. + no_data_value: which value to substitute to the no data. + min_range_value: min range of the raster. + max_range_value: max range of the. + channel: band. + windows_dimension: the window dimension. + valid_bands: valid band to use. + loaded_dataset_as_array: current raster array. + current_geo_transform: current set of N and E. + model_type: this is not used here. + Raises: + TODO + """ + current_dataset = dict() + # open the handler + handler = open(master_file_path) + + # loop inside each rows + for line in handler.readlines(): + line_to_split = line.strip() + + # get band list and convert to int + bands = line_to_split.split(":")[1].split(",") + + # parse features to int + bands = [int(x) for x in bands] + + # get other values + others_values = line_to_split.split(":")[0].split(",") + + # che sub raster from raster + loaded_raster = gdal.Open(f"{others_values[0]}", gdal.GA_ReadOnly) + geo = loaded_raster.GetGeoTransform() + + # create a key holder for the dict of feat + if others_values[1] not in current_dataset.keys(): + current_dataset[others_values[1]] = list() + + current_dataset[others_values[1]].append( + { + "current_path": f"{others_values[0].split('/')[-2]}/{others_values[0].split('/')[-1]}", + "no_data": float(others_values[3]) if others_values[3] != "" else "", + "no_data_value": float(others_values[4]) if others_values[4] != "" else 255, + "min_range_value": float(others_values[5]) if others_values[5] != "" else "", + "max_range_value": float(others_values[6]) if others_values[6] != "" else "", + "channel": others_values[1], + "windows_dimension": int(others_values[2]), + "valid_bands": bands, + "loaded_dataset_as_array": loaded_raster.ReadAsArray()[bands, :, :] + if loaded_raster.ReadAsArray().ndim > 2 + else loaded_raster.ReadAsArray(), + "current_geo_transform": geo, + "model_type": others_values[7], + } + ) + handler.close() + return current_dataset + + +@beartype +def return_list_of_N_and_E(path_to_data: str) -> list[list[Any]]: + """ + Load the list of N and E coordinates. + + Parameters: + input_path: this is what in keras is called optimizer. + + Return: + a list that contain all N end E + + Raises: + TODO + """ + # load the csv file with the deposit annotation + handler = open(path_to_data, "r") + coords = list() + for row_counter, row in enumerate(handler.readlines()): + if row_counter != 0: + coords.append([row.strip().split(",")[-2], row.strip().split(",")[-3]]) + return coords + + +@beartype +def create_windows_based_of_geo_coords( + current_raster_object: dict, + current_E: float, + current_N: float, + desired_windows_dimension: int, + current_loaded_raster: gdal.Dataset, +) -> np.ndarray: + """ + Create windows from geo coordinates. + + Parameters: + current_raster_object: raster iformation from the masterfile. + current_E: float point showing the E. + current_N: float point showing the N. + desired_windows_dimension: int dimension of the window. + current_loaded_raster: load tif with gdal + + Return: + numpy array with the windows inside. + + Raises: + TODO + """ + + if current_loaded_raster is not None: + # get the loaded raster and the pix + current_raster = gdal.Open(current_raster_object["current_path"]) + else: + current_raster = current_loaded_raster + + spatial_pixel_resolution = current_raster_object["current_geo_transform"][1] + + # get the coords + start_N = current_N + (desired_windows_dimension / 2) * spatial_pixel_resolution + end_N = start_N + desired_windows_dimension * spatial_pixel_resolution + + start_E = current_E - (desired_windows_dimension / 2) * spatial_pixel_resolution + end_E = start_E + desired_windows_dimension * spatial_pixel_resolution + + raster = gdal.Warp( + "", + current_raster, + outputBounds=[start_E, end_N, end_E, start_N], + format="MEM", + xRes=spatial_pixel_resolution, + yRes=-spatial_pixel_resolution, + ) + + values_with_need = raster.ReadAsArray() + + # create the window I m testing with float + window = ( + np.array(values_with_need).astype("float32").reshape((desired_windows_dimension, desired_windows_dimension, -1)) + ) + + # remove no data value: + if current_raster_object["no_data"] != "": + window[window == current_raster_object["no_data"]] = current_raster_object["no_data_value"] + + return window From 44909d8d5c5c26b510cd02f4cde4a41f004add1d Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 31 Oct 2023 17:06:42 +0200 Subject: [PATCH 11/17] added the prediction function --- eis_toolkit/prediction/cnn_mlp_tensorflow.py | 163 ++++++++++++++++++- 1 file changed, 155 insertions(+), 8 deletions(-) diff --git a/eis_toolkit/prediction/cnn_mlp_tensorflow.py b/eis_toolkit/prediction/cnn_mlp_tensorflow.py index 4b0cd90a..3d5fd77d 100644 --- a/eis_toolkit/prediction/cnn_mlp_tensorflow.py +++ b/eis_toolkit/prediction/cnn_mlp_tensorflow.py @@ -5,26 +5,30 @@ import joblib import numpy import numpy as np +import pandas as pd import tensorflow as tf from beartype import beartype from osgeo import gdal +from sklearn.metrics import confusion_matrix from sklearn.preprocessing import StandardScaler from sklearn.utils.class_weight import compute_sample_weight from utilities import create_windows_based_of_geo_coords, parse_the_master_file, return_list_of_N_and_E +from eis_toolkit.prediction.model_performance_estimation import performance_model_estimation + @beartype def dataset_loader( deposit_path: str, unlabelled_data_path: str, desired_windows_dimension: int, path_of_features: str -) -> tuple[dict, list]: +) -> tuple[dict[str, np.ndarray], np.ndarray]: """ Do the load of the data. Parameters: deposit_path: the path to the deposit csv file. - unlabelled_data_path the path from the 2M csv file. - desired_windows_dimension: the desired windows dimension. - path_of_features: nasterfile path. + unlabelled_data_path: the path from the 2M csv file. + desired_windows_dimension: the desired windows dimension. + path_of_features: masterfile path. Return: dataset holder and labels holder. @@ -46,9 +50,9 @@ def dataset_loader( for key, val in current_dataset.items(): # create a list that hold the windows - dataset_holder[key] = list() + temp_holder = list() + concatenated = None for tif_obj in current_dataset[key]: - # do the same for class 0 current_raster = gdal.Open(tif_obj.puhti_path) for windows_counter, (N, E) in enumerate(coordinates_of_deposit): windows = create_windows_based_of_geo_coords( @@ -58,7 +62,7 @@ def dataset_loader( desired_windows_dimension=desired_windows_dimension, current_loaded_raster=current_raster, ) - dataset_holder[key].append(windows) + temp_holder.append(windows) labels_holder.append(1) # generate 17 random windows @@ -80,9 +84,16 @@ def dataset_loader( current_loaded_raster=current_raster, ) - dataset_holder[key].append(windows) + temp_holder.append(windows) labels_holder.append(0) + # concatenate the data + if concatenated is None: + concatenated = np.array(temp_holder).astype("float32") + else: + concatenated = np.concatenate((concatenated, np.array(temp_holder)), axis=-1) + dataset_holder[f"{key}"] = concatenated.astype("float32") + labels_holder = np.array(labels_holder).astype("int") return dataset_holder, labels_holder @@ -466,3 +477,139 @@ def make_prediction( prediction = compiled_model.predict(dictionary_of_validation) return compiled_model, history, score[0], prediction, validation_labels[0] + + +@beartype +def do_training_and_prediction_of_the_model( + deposit_path: str, + unlabelled_data_path: str, + path_to_features: str, + desired_windows_dimension: int = 5, + cnn_configuration: dict = None, + threshold: float = 0, + dump: bool = False, + epoches: int = 32, +) -> tuple[pd.DataFrame, tf.keras.Model]: + """ + Do training and evaluation of the model with cross validation. + + Parameters: + deposit_path: the poath to the csv with 17 points. + unlabelled_data_path: path to the csv file with 2M points. + path_to_features: this is a path to a masterfile that contain how to manipulate raster. + desired_windows_dimension: dimension of the windows., + cnn_configuration: all parameters needed for the CNN oe MLP, + threshold: if you use sigmoid this should be > than 0 + dump: if you want to save the confusion matrix, + epoches: number of epochs + Return: + return pd dataframe that contains the confusion matrix and instance of the best model. + + Raises: + TODO + """ + stacked_true, stacked_prediction = list(), list() + best_score = 0 + model_to_return = None + + # initial cnn config + if cnn_configuration is None: + cnn_configuration = { + "input_aem": None, + "kernel_aem": None, + "input_gravity": None, + "kernel_gravity": None, + "input_magnetic": None, + "kernel_magnetic": None, + "input_radiometric": None, + "kernel_radiometric": None, + "regularization": tf.keras.regularizers.L2(0.06), + "data_augmentation": None, + "optimizer": "Adam", + "loss": "sparse_categorical_crossentropy", + "inputs": 4, + "neuron_list": [8, 16], + "pool_size": 1, + "stride": 1, + "dropout_rate": 0.6, + "output": 2, + "is_a_cnn": True, + "last_activation": "softmax", + } + + windows_holder, labels_holder = dataset_loader( + deposit_path=deposit_path, + unlabelled_data_path=unlabelled_data_path, + desired_windows_dimension=desired_windows_dimension, + path_of_features=path_to_features, + ) + + # prepare the scaler + scaler_dictionary = create_the_scaler(data_dictionary=windows_holder, dump=False) + + # get cross validation methods + selected_cs = performance_model_estimation(cross_validation_type="LOOCV", number_of_split=1) + + for i, (train_index, test_index) in enumerate(selected_cs.cross_validation_method.split(windows_holder)): + dictionary_of_training = {} + dictionary_of_validation = {} + for key in windows_holder.keys(): + + cnn_configuration[f"input_{key.lower()}"] = ( + windows_holder[key][train_index].shape[1], + windows_holder[key][train_index].shape[2], + windows_holder[key][train_index].shape[3], + ) + + cnn_configuration[f"kernel_{key.lower()}"] = ( + windows_holder[key][train_index].shape[3], + windows_holder[key][train_index].shape[3], + ) + + dictionary_of_training[f"{key}"] = normalize_the_data( + data_to_normalize=windows_holder[f"{key}"][train_index], normalizator=scaler_dictionary[key] + ) + + dictionary_of_validation[f"{key}"] = normalize_the_data( + data_to_normalize=windows_holder[f"{key}"][test_index], normalizator=scaler_dictionary[key] + ) + + # create multimodal cnn + cnn = create_multi_modal_cnn(**cnn_configuration) + model, _, score, prediction, true_label = make_prediction( + compiled_model=cnn, + dictionary_of_training=dictionary_of_training, + dictionary_of_validation=dictionary_of_validation, + training_labels=labels_holder[train_index], + validation_labels=labels_holder[test_index], + epochs=epoches, + batch_size=int(len(windows_holder) / epoches), + sample_weights=True, + ) + + score = model.evaluate(dictionary_of_validation, labels_holder[test_index]) + + if score > best_score: + best_score = score + model_to_return = model + + stacked_true.append(true_label) + + if cnn_configuration["last_activation"] != "sofmax": + stacked_prediction.append(np.argmax(prediction)) + else: + if prediction[0] <= threshold: + stacked_prediction.append(0) + else: + stacked_prediction.append(1) + + # create a cm + cm = confusion_matrix(np.array(stacked_true), np.array(stacked_prediction), normalize="all") + df = pd.DataFrame(cm, columns=["Non deposit", "deposit"], index=["Non deposit", "deposit"]) + # save the ds + if dump: + if not os.path.exists("cm"): + os.makedirs("cm") + df.to_csv("cm/cm.csv") + + return df, model_to_return From 2d6716744827bcc0a73b190b69aaed4bac2ba9c7 Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 1 Nov 2023 14:12:47 +0200 Subject: [PATCH 12/17] added the last exception --- .idea/eis_toolkit.iml | 2 +- eis_toolkit/exceptions.py | 10 + eis_toolkit/prediction/cnn_mlp_tensorflow.py | 267 ++++++++++++++++-- eis_toolkit/prediction/masterfile_eis.csv | 37 --- .../model_performance_estimation.py | 2 +- eis_toolkit/prediction/utilities.py | 161 ----------- tests/prediction/masterfile_eis.csv | 37 +++ tests/prediction/mlp_with_tensorflow.py | 7 + 8 files changed, 297 insertions(+), 226 deletions(-) mode change 100755 => 100644 .idea/eis_toolkit.iml delete mode 100644 eis_toolkit/prediction/masterfile_eis.csv delete mode 100644 eis_toolkit/prediction/utilities.py create mode 100644 tests/prediction/masterfile_eis.csv create mode 100644 tests/prediction/mlp_with_tensorflow.py diff --git a/.idea/eis_toolkit.iml b/.idea/eis_toolkit.iml old mode 100755 new mode 100644 index d0876a78..370213af --- a/.idea/eis_toolkit.iml +++ b/.idea/eis_toolkit.iml @@ -2,7 +2,7 @@ - + \ No newline at end of file diff --git a/eis_toolkit/exceptions.py b/eis_toolkit/exceptions.py index 34ff78d4..e397dc5c 100644 --- a/eis_toolkit/exceptions.py +++ b/eis_toolkit/exceptions.py @@ -92,3 +92,13 @@ class CanNotMakeCategoricalLabelException(Exception): class NoSuchPathOrDirectory(Exception): """Exception throws when no correct path is found.""" + + +class WrongWindowSize(Exception): + """Exception throws when wrong windows size occurs.""" + +class CNNException(Exception): + """Exception throws when something is invalid in the cnn.""" + +class CNNRunningParameterException(Exception): + """Exception throws when running parameters are wrong.""" diff --git a/eis_toolkit/prediction/cnn_mlp_tensorflow.py b/eis_toolkit/prediction/cnn_mlp_tensorflow.py index 3d5fd77d..53e4b930 100644 --- a/eis_toolkit/prediction/cnn_mlp_tensorflow.py +++ b/eis_toolkit/prediction/cnn_mlp_tensorflow.py @@ -1,6 +1,6 @@ import os import random -from typing import Literal, Union +from typing import Literal, Union, Any import joblib import numpy @@ -12,11 +12,174 @@ from sklearn.metrics import confusion_matrix from sklearn.preprocessing import StandardScaler from sklearn.utils.class_weight import compute_sample_weight -from utilities import create_windows_based_of_geo_coords, parse_the_master_file, return_list_of_N_and_E +from eis_toolkit.exceptions import (NoSuchPathOrDirectory, WrongWindowSize, InvalidDatasetException, CNNException, + InvalidArgumentTypeException, CNNRunningParameterException) from eis_toolkit.prediction.model_performance_estimation import performance_model_estimation +@beartype +def parse_the_master_file(master_file_path) -> dict: + """ + Load sets of windows from its folder. + + Parameters: + master_file_path: path of the masterfile. + + Return: + Dictionary that contains the following information: + current_path: this the path of the feature. + no_data: no data value. + no_data_value: which value to substitute to the no data. + min_range_value: min range of the raster. + max_range_value: max range of the. + channel: band. + windows_dimension: the window dimension. + valid_bands: valid band to use. + loaded_dataset_as_array: current raster array. + current_geo_transform: current set of N and E. + model_type: this is not used here. + Raises: + NoSuchPathOrDirectory when some path point to a not such file or directory. + """ + + if not os.path.isfile(master_file_path): + raise NoSuchPathOrDirectory + + current_dataset = dict() + # open the handler + handler = open(master_file_path) + + # loop inside each rows + for line in handler.readlines(): + line_to_split = line.strip() + + # get band list and convert to int + bands = line_to_split.split(":")[1].split(",") + + # parse features to int + bands = [int(x) for x in bands] + + # get other values + others_values = line_to_split.split(":")[0].split(",") + + # che sub raster from raster + loaded_raster = gdal.Open(f"{others_values[0]}", gdal.GA_ReadOnly) + geo = loaded_raster.GetGeoTransform() + + # create a key holder for the dict of feat + if others_values[1] not in current_dataset.keys(): + current_dataset[others_values[1]] = list() + + current_dataset[others_values[1]].append( + { + "full_path":f"{others_values[0]}", + "current_path": f"{others_values[0].split('/')[-2]}/{others_values[0].split('/')[-1]}", + "no_data": float(others_values[3]) if others_values[3] != "" else "", + "no_data_value": float(others_values[4]) if others_values[4] != "" else 255, + "min_range_value": float(others_values[5]) if others_values[5] != "" else "", + "max_range_value": float(others_values[6]) if others_values[6] != "" else "", + "channel": others_values[1], + "windows_dimension": int(others_values[2]), + "valid_bands": bands, + "loaded_dataset_as_array": loaded_raster.ReadAsArray()[bands, :, :] + if loaded_raster.ReadAsArray().ndim > 2 + else loaded_raster.ReadAsArray(), + "current_geo_transform": geo, + "model_type": others_values[7], + } + ) + handler.close() + return current_dataset + + +@beartype +def return_list_of_N_and_E(path_to_data: str) -> list[list[Any]]: + """ + Load the list of N and E coordinates. + + Parameters: + input_path: this is what in keras is called optimizer. + + Return: + a list that contain all N end E + + Raises: + NoSuchPathOrDirectory when some path point to a not such file or directory. + """ + + if not os.path.isfile(path_to_data): + raise NoSuchPathOrDirectory + + # load the csv file with the deposit annotation + handler = open(path_to_data, "r") + coords = list() + for row_counter, row in enumerate(handler.readlines()): + if row_counter != 0: + coords.append([row.strip().split(",")[-2], row.strip().split(",")[-3]]) + return coords + + +@beartype +def create_windows_based_of_geo_coords( + current_raster_object: dict, + current_E: float, + current_N: float, + desired_windows_dimension: int, + current_loaded_raster: gdal.Dataset or None, +) -> np.ndarray: + """ + Create windows from geo coordinates. + + Parameters: + current_raster_object: raster iformation from the masterfile. + current_E: float point showing the E. + current_N: float point showing the N. + desired_windows_dimension: int dimension of the window. + current_loaded_raster: load tif with gdal + + Return: + numpy array with the windows inside. + + """ + + if current_loaded_raster is None: + # get the loaded raster and the pix + current_raster = gdal.Open(current_raster_object["current_path"]) + else: + current_raster = current_loaded_raster + + spatial_pixel_resolution = current_raster_object["current_geo_transform"][1] + + # get the coords + start_N = current_N + (desired_windows_dimension / 2) * spatial_pixel_resolution + end_N = start_N + desired_windows_dimension * spatial_pixel_resolution + + start_E = current_E - (desired_windows_dimension / 2) * spatial_pixel_resolution + end_E = start_E + desired_windows_dimension * spatial_pixel_resolution + + raster = gdal.Warp( + "", + current_raster, + outputBounds=[start_E, end_N, end_E, start_N], + format="MEM", + xRes=spatial_pixel_resolution, + yRes=-spatial_pixel_resolution, + ) + + values_with_need = raster.ReadAsArray() + + # create the window I m testing with float + window = ( + np.array(values_with_need).astype("float32").reshape((desired_windows_dimension, desired_windows_dimension, -1)) + ) + + # remove no data value: + if current_raster_object["no_data"] != "": + window[window == current_raster_object["no_data"]] = current_raster_object["no_data_value"] + + return window + @beartype def dataset_loader( deposit_path: str, unlabelled_data_path: str, desired_windows_dimension: int, path_of_features: str @@ -34,8 +197,16 @@ def dataset_loader( dataset holder and labels holder. Raises: - TODO + NoSuchPathOrDirectory: when some path point to a not such file or directory. + WrongWindowSize:When the size of the windows is <= 1. """ + + if not os.path.isfile(deposit_path) or not os.path.isfile(unlabelled_data_path): + raise NoSuchPathOrDirectory + + if desired_windows_dimension <= 1: + raise WrongWindowSize + dataset_holder = {} labels_holder = list() already_done = list() @@ -53,7 +224,7 @@ def dataset_loader( temp_holder = list() concatenated = None for tif_obj in current_dataset[key]: - current_raster = gdal.Open(tif_obj.puhti_path) + current_raster = gdal.Open(tif_obj['full_path']) for windows_counter, (N, E) in enumerate(coordinates_of_deposit): windows = create_windows_based_of_geo_coords( current_raster_object=tif_obj, @@ -110,8 +281,12 @@ def create_the_scaler(data_dictionary: dict, dump: bool = False): normalized data dictionary Raises: - TODO + InvalidDatasetException: when the dataset is null. """ + + if len(data_dictionary.keys()) <= 0: + raise InvalidDatasetException + if dump and os.path.exists("scaler"): os.makedirs("scaler") @@ -141,18 +316,20 @@ def normalize_the_data(data_to_normalize, normalizator) -> np.ndarray: normalized dataset Raises: - TODO + InvalidDatasetException: when the dataset is null. """ - try: - number_of_samples, h, w, c = data_to_normalize.shape - temp = data_to_normalize.reshape(-1, data_to_normalize.shape[-1]) - normalized_input = normalizator.transform(temp) - return normalized_input.reshape(number_of_samples, h, w, c) - except Exception as ex: - print(f"[EXCEPTION] Main throws exception {ex}") + + if data_to_normalize.shape[0] <= 0: + raise InvalidDatasetException + + number_of_samples, h, w, c = data_to_normalize.shape + temp = data_to_normalize.reshape(-1, data_to_normalize.shape[-1]) + normalized_input = normalizator.transform(temp) + return normalized_input.reshape(number_of_samples, h, w, c) + + -@beartype def convolutional_body_of_the_cnn( input_layer: tf.keras.Input, neuron_list: Union[int], @@ -176,8 +353,16 @@ def convolutional_body_of_the_cnn( return the block of hidden layer Raises: - TODO + CNNException: this exception is raised if the input is null. + InvalidArgumentTypeException: when a parameters i wrong or <= 0. """ + + if input_layer is None: + raise CNNException + + if len(neuron_list) <= 0 or kernel_size[0] == 0 or pool_size <= 0 or dropout <= 0: + raise InvalidArgumentTypeException + # we do dynamically the conv2d for layer_number, neuron in enumerate(neuron_list): if layer_number == 0: @@ -221,9 +406,16 @@ def dense_nodes(input_layer: tf.keras.Input, neuron_list: Union[int], dropout: f return the block of dense layer Raises: - TODO + CNNException: this exception is raised if the input is null. + InvalidArgumentTypeException: when a parameters i wrong or <= 0. """ + if input_layer is None: + raise CNNException + + if len(neuron_list) <= 0 or dropout <= 0: + raise InvalidArgumentTypeException + for layer_number, neuron in enumerate(neuron_list): if layer_number == 0: x = tf.keras.layers.Dense(neuron, activation="relu")(input_layer) @@ -238,7 +430,7 @@ def dense_nodes(input_layer: tf.keras.Input, neuron_list: Union[int], dropout: f return x -@beartype + def create_multi_modal_cnn( input_aem: tuple[int, int, int] or tuple[int, int] = None, kernel_aem: tuple[int, int] = None, @@ -255,7 +447,7 @@ def create_multi_modal_cnn( inputs: int = 1, neuron_list: Union[int] = [16], pool_size: int = 2, - dropout_rate: Literal[None, float] = None, + dropout_rate: Union[None, float] = None, is_a_cnn: bool = True, output: int = 2, last_activation: Literal["softmax", "sigmoid"] = "softmax", @@ -288,8 +480,12 @@ def create_multi_modal_cnn( return the compiled model. Raises: - TODO + InvalidArgumentTypeException: one of the arguments is invalid. """ + + if len(neuron_list) <= 0 or inputs <= 0 or pool_size <= 0: + raise InvalidArgumentTypeException + if input_aem is not None: input_layer = tf.keras.Input(shape=input_aem, name="AEM") kernel = kernel_aem @@ -434,7 +630,6 @@ def create_multi_modal_cnn( return model -@beartype def make_prediction( compiled_model: tf.keras.Model, dictionary_of_training: dict, @@ -461,9 +656,23 @@ def make_prediction( return the compiled model, the score, predictions validation Raises: - TODO + CNNException: if the compiled model is null. + InvalidDatasetException: if the dataset is null. + CNNRunningParameterException: parameters like epochs and batch ize can be <= 0 """ + if compiled_model is None: + raise CNNException + + if epochs <= 0: + raise CNNRunningParameterException + + if len(dictionary_of_training.keys()) <= 0 or len(dictionary_of_validation.keys()) <= 0: + raise InvalidDatasetException + + if training_labels.shape[0] <= 0 or validation_labels.shape[0] <= 0: + raise InvalidDatasetException + history = compiled_model.fit( dictionary_of_training, training_labels, @@ -479,7 +688,7 @@ def make_prediction( return compiled_model, history, score[0], prediction, validation_labels[0] -@beartype + def do_training_and_prediction_of_the_model( deposit_path: str, unlabelled_data_path: str, @@ -506,8 +715,13 @@ def do_training_and_prediction_of_the_model( return pd dataframe that contains the confusion matrix and instance of the best model. Raises: - TODO + NoSuchPathOrDirectory when some path point to a not such file or directory. """ + + if not os.path.isfile(deposit_path) or not os.path.isfile(unlabelled_data_path): + raise NoSuchPathOrDirectory + + stacked_true, stacked_prediction = list(), list() best_score = 0 model_to_return = None @@ -530,7 +744,6 @@ def do_training_and_prediction_of_the_model( "inputs": 4, "neuron_list": [8, 16], "pool_size": 1, - "stride": 1, "dropout_rate": 0.6, "output": 2, "is_a_cnn": True, @@ -550,7 +763,7 @@ def do_training_and_prediction_of_the_model( # get cross validation methods selected_cs = performance_model_estimation(cross_validation_type="LOOCV", number_of_split=1) - for i, (train_index, test_index) in enumerate(selected_cs.cross_validation_method.split(windows_holder)): + for i, (train_index, test_index) in enumerate(selected_cs.split(windows_holder)): dictionary_of_training = {} dictionary_of_validation = {} for key in windows_holder.keys(): @@ -587,7 +800,7 @@ def do_training_and_prediction_of_the_model( sample_weights=True, ) - score = model.evaluate(dictionary_of_validation, labels_holder[test_index]) + score = model.evaluate(dictionary_of_validation, labels_holder[test_index])[0] if score > best_score: best_score = score @@ -613,3 +826,5 @@ def do_training_and_prediction_of_the_model( df.to_csv("cm/cm.csv") return df, model_to_return + + diff --git a/eis_toolkit/prediction/masterfile_eis.csv b/eis_toolkit/prediction/masterfile_eis.csv deleted file mode 100644 index 83c4a308..00000000 --- a/eis_toolkit/prediction/masterfile_eis.csv +++ /dev/null @@ -1,37 +0,0 @@ -../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_HDTDR_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,1.886579980237e-06,0.039180044084787,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_Z_drv_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-37.869369506836,163.15078735352,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_Drc_Cosine180_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-1935.9857177734,8751.16796875,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_AS_FFT_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,0.0031329630874097,164.6780090332,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_X_drv_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-66.994483947754,82.232086181641,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_Drc_Cosine90_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-3374.3571777344,7146.3422851562,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_Drc_Cosine45_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-2224.6638183594,11328.96484375,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_Y_drv_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-92.155395507812,72.532081604004,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Magnetic/pseudo_grav_20000530_PCS_clip.tif,Magnetic,1,-999999.0,0,-0.6089716553688,0.87987959384918,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_TD_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-1.570324420929,1.5695773363113,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Magnetic/IOCG_Mag_grysc_DGRF65_anom_.tif,Magnetic,1,-1.0000000331813535e+32,0,-2995.5629882813,16060.888671875,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Magnetic/Mag_DGRF_Drc_Cosine135_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-2244.9111328125,5534.2333984375,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt1500m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,18261.708984375,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt15000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,72681.8046875,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt10000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,70017.03125,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt1000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,17787.98828125,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt50m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,13902.248046875,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt2000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,18416.568359375,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt250m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,15586.211914062,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt500m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,15616.017578125,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt3000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,20220.0390625,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt150m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,14030.858398438,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt400m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,15610.012695312,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt100m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,13993.301757812,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt30000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,79317.2109375,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt200m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,14231.127929688,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt5000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,35889.06640625,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt20000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,75411.0390625,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt4000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,32759.6171875,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/AEM/IOCG_AEM_Inph_.tif,AEM,1,-1.0000000331813535e+32,0,-4321.1791992188,22495.068359375,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/AEM/IOCG_App_res.tif,AEM,1,-1.0000000331813535e+32,0,-299.9455871582,2346.1049804688,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/AEM/IOCG_EM_ratio.tif,AEM,1,-999999.0,0,-10.0,10.0,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/AEM/IOCG_AEM_Quad.tif,AEM,1,-1.0000000331813535e+32,0,-4375.3046875,5220.4658203125,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Radiometric/IOCG_Gm_Rd_K_.tif,Radiometric,1,-999999.0,0,-1.5939166545868,5.0812859535217,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Radiometric/IOCG_Gm_Rd_U_eq_.tif,Radiometric,1,-999999.0,0,-3.2844696044922,16.743774414063,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Radiometric/IOCG_Gm_Rd_Th_eq_.tif,Radiometric,1,-999999.0,0,-6.6340522766113,54.235275268555,NO_JAMAMASKI:0 -../../Annotations/Geophysical_Data/Radiometric/IOCG_Gm_Rd_Total_Count_.tif,Radiometric,1,-999999.0,0,-5.516149520874,33.499954223633,NO_JAMAMASKI:0 diff --git a/eis_toolkit/prediction/model_performance_estimation.py b/eis_toolkit/prediction/model_performance_estimation.py index 3f3d42e6..fdec8a13 100644 --- a/eis_toolkit/prediction/model_performance_estimation.py +++ b/eis_toolkit/prediction/model_performance_estimation.py @@ -10,7 +10,7 @@ @beartype def performance_model_estimation( cross_validation_type: Literal["LOOCV", "KFOLD", "SKFOLD"], number_of_split: int = 5 -) -> sklearn.model_selection: +) -> sklearn.model_selection.BaseCrossValidator: """ Evaluate the feature importance of a sklearn classifier or linear model. diff --git a/eis_toolkit/prediction/utilities.py b/eis_toolkit/prediction/utilities.py deleted file mode 100644 index bb993962..00000000 --- a/eis_toolkit/prediction/utilities.py +++ /dev/null @@ -1,161 +0,0 @@ -from typing import Any - -import numpy as np -from beartype import beartype -from osgeo import gdal - - -@beartype -def parse_the_master_file(master_file_path) -> dict: - """ - Load sets of windows from its folder. - - Parameters: - master_file_path: path of the masterfile. - - Return: - Dictionary that contains the following information: - current_path: this the path of the feature. - no_data: no data value. - no_data_value: which value to substitute to the no data. - min_range_value: min range of the raster. - max_range_value: max range of the. - channel: band. - windows_dimension: the window dimension. - valid_bands: valid band to use. - loaded_dataset_as_array: current raster array. - current_geo_transform: current set of N and E. - model_type: this is not used here. - Raises: - TODO - """ - current_dataset = dict() - # open the handler - handler = open(master_file_path) - - # loop inside each rows - for line in handler.readlines(): - line_to_split = line.strip() - - # get band list and convert to int - bands = line_to_split.split(":")[1].split(",") - - # parse features to int - bands = [int(x) for x in bands] - - # get other values - others_values = line_to_split.split(":")[0].split(",") - - # che sub raster from raster - loaded_raster = gdal.Open(f"{others_values[0]}", gdal.GA_ReadOnly) - geo = loaded_raster.GetGeoTransform() - - # create a key holder for the dict of feat - if others_values[1] not in current_dataset.keys(): - current_dataset[others_values[1]] = list() - - current_dataset[others_values[1]].append( - { - "current_path": f"{others_values[0].split('/')[-2]}/{others_values[0].split('/')[-1]}", - "no_data": float(others_values[3]) if others_values[3] != "" else "", - "no_data_value": float(others_values[4]) if others_values[4] != "" else 255, - "min_range_value": float(others_values[5]) if others_values[5] != "" else "", - "max_range_value": float(others_values[6]) if others_values[6] != "" else "", - "channel": others_values[1], - "windows_dimension": int(others_values[2]), - "valid_bands": bands, - "loaded_dataset_as_array": loaded_raster.ReadAsArray()[bands, :, :] - if loaded_raster.ReadAsArray().ndim > 2 - else loaded_raster.ReadAsArray(), - "current_geo_transform": geo, - "model_type": others_values[7], - } - ) - handler.close() - return current_dataset - - -@beartype -def return_list_of_N_and_E(path_to_data: str) -> list[list[Any]]: - """ - Load the list of N and E coordinates. - - Parameters: - input_path: this is what in keras is called optimizer. - - Return: - a list that contain all N end E - - Raises: - TODO - """ - # load the csv file with the deposit annotation - handler = open(path_to_data, "r") - coords = list() - for row_counter, row in enumerate(handler.readlines()): - if row_counter != 0: - coords.append([row.strip().split(",")[-2], row.strip().split(",")[-3]]) - return coords - - -@beartype -def create_windows_based_of_geo_coords( - current_raster_object: dict, - current_E: float, - current_N: float, - desired_windows_dimension: int, - current_loaded_raster: gdal.Dataset, -) -> np.ndarray: - """ - Create windows from geo coordinates. - - Parameters: - current_raster_object: raster iformation from the masterfile. - current_E: float point showing the E. - current_N: float point showing the N. - desired_windows_dimension: int dimension of the window. - current_loaded_raster: load tif with gdal - - Return: - numpy array with the windows inside. - - Raises: - TODO - """ - - if current_loaded_raster is not None: - # get the loaded raster and the pix - current_raster = gdal.Open(current_raster_object["current_path"]) - else: - current_raster = current_loaded_raster - - spatial_pixel_resolution = current_raster_object["current_geo_transform"][1] - - # get the coords - start_N = current_N + (desired_windows_dimension / 2) * spatial_pixel_resolution - end_N = start_N + desired_windows_dimension * spatial_pixel_resolution - - start_E = current_E - (desired_windows_dimension / 2) * spatial_pixel_resolution - end_E = start_E + desired_windows_dimension * spatial_pixel_resolution - - raster = gdal.Warp( - "", - current_raster, - outputBounds=[start_E, end_N, end_E, start_N], - format="MEM", - xRes=spatial_pixel_resolution, - yRes=-spatial_pixel_resolution, - ) - - values_with_need = raster.ReadAsArray() - - # create the window I m testing with float - window = ( - np.array(values_with_need).astype("float32").reshape((desired_windows_dimension, desired_windows_dimension, -1)) - ) - - # remove no data value: - if current_raster_object["no_data"] != "": - window[window == current_raster_object["no_data"]] = current_raster_object["no_data_value"] - - return window diff --git a/tests/prediction/masterfile_eis.csv b/tests/prediction/masterfile_eis.csv new file mode 100644 index 00000000..15978161 --- /dev/null +++ b/tests/prediction/masterfile_eis.csv @@ -0,0 +1,37 @@ +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Magnetic/Mag_DGRF_HDTDR_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,1.886579980237e-06,0.039180044084787,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Magnetic/Mag_DGRF_Z_drv_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-37.869369506836,163.15078735352,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Magnetic/Mag_DGRF_Drc_Cosine180_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-1935.9857177734,8751.16796875,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Magnetic/Mag_DGRF_AS_FFT_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,0.0031329630874097,164.6780090332,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Magnetic/Mag_DGRF_X_drv_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-66.994483947754,82.232086181641,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Magnetic/Mag_DGRF_Drc_Cosine90_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-3374.3571777344,7146.3422851562,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Magnetic/Mag_DGRF_Drc_Cosine45_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-2224.6638183594,11328.96484375,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Magnetic/Mag_DGRF_Y_drv_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-92.155395507812,72.532081604004,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Magnetic/pseudo_grav_20000530_PCS_clip.tif,Magnetic,1,-999999.0,0,-0.6089716553688,0.87987959384918,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Magnetic/Mag_DGRF_TD_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-1.570324420929,1.5695773363113,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Magnetic/IOCG_Mag_grysc_DGRF65_anom_.tif,Magnetic,1,-1.0000000331813535e+32,0,-2995.5629882813,16060.888671875,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Magnetic/Mag_DGRF_Drc_Cosine135_ers_PCS_tif_clip.tif,Magnetic,1,-999999.0,0,-2244.9111328125,5534.2333984375,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt1500m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,18261.708984375,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt15000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,72681.8046875,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt10000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,70017.03125,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt1000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,17787.98828125,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt50m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,13902.248046875,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt2000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,18416.568359375,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt250m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,15586.211914062,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt500m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,15616.017578125,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt3000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,20220.0390625,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt150m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,14030.858398438,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt400m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,15610.012695312,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt100m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,13993.301757812,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt30000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,79317.2109375,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt200m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,14231.127929688,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt5000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,35889.06640625,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt20000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,75411.0390625,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Gravity/dist_gw_ct_Hgt4000m.tif,Gravity,1,-3.4028234663852886e+38,0,0.0,32759.6171875,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/AEM/IOCG_AEM_Inph_.tif,AEM,1,-1.0000000331813535e+32,0,-4321.1791992188,22495.068359375,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/AEM/IOCG_App_res.tif,AEM,1,-1.0000000331813535e+32,0,-299.9455871582,2346.1049804688,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/AEM/IOCG_EM_ratio.tif,AEM,1,-999999.0,0,-10.0,10.0,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/AEM/IOCG_AEM_Quad.tif,AEM,1,-1.0000000331813535e+32,0,-4375.3046875,5220.4658203125,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Radiometric/IOCG_Gm_Rd_K_.tif,Radiometric,1,-999999.0,0,-1.5939166545868,5.0812859535217,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Radiometric/IOCG_Gm_Rd_U_eq_.tif,Radiometric,1,-999999.0,0,-3.2844696044922,16.743774414063,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Radiometric/IOCG_Gm_Rd_Th_eq_.tif,Radiometric,1,-999999.0,0,-6.6340522766113,54.235275268555,NO_JAMAMASKI:0 +/media/luca/T7 Shield/Eis_data/Annotations/Geophysical_Data/Radiometric/IOCG_Gm_Rd_Total_Count_.tif,Radiometric,1,-999999.0,0,-5.516149520874,33.499954223633,NO_JAMAMASKI:0 diff --git a/tests/prediction/mlp_with_tensorflow.py b/tests/prediction/mlp_with_tensorflow.py new file mode 100644 index 00000000..14b51e68 --- /dev/null +++ b/tests/prediction/mlp_with_tensorflow.py @@ -0,0 +1,7 @@ +from eis_toolkit.prediction.cnn_mlp_tensorflow import do_training_and_prediction_of_the_model + +if __name__ == '__main__': + df, model_to_return = do_training_and_prediction_of_the_model(deposit_path="/media/luca/T7 Shield/Eis_data/Annotations/17_annoted_points.csv", + unlabelled_data_path="/media/luca/T7 Shield/Eis_data/Annotations/2M_raster_points.csv", + path_to_features="masterfile_eis.csv", + desired_windows_dimension=5) \ No newline at end of file From faa8c8d29d9eaaaa3cb21d179bb091aa3a376896 Mon Sep 17 00:00:00 2001 From: Niko Aarnio Date: Tue, 7 Nov 2023 11:28:39 +0200 Subject: [PATCH 13/17] Created train_and_validate and predict functions for both MLP and CNN --- eis_toolkit/prediction/cnn_mlp_new.py | 363 ++++++++++++++++++++++++++ 1 file changed, 363 insertions(+) create mode 100644 eis_toolkit/prediction/cnn_mlp_new.py diff --git a/eis_toolkit/prediction/cnn_mlp_new.py b/eis_toolkit/prediction/cnn_mlp_new.py new file mode 100644 index 00000000..dfd31dae --- /dev/null +++ b/eis_toolkit/prediction/cnn_mlp_new.py @@ -0,0 +1,363 @@ +from functools import wraps +from typing import Literal, Optional, Sequence, Tuple, Union + +import numpy as np +from beartype import beartype +from sklearn.model_selection import train_test_split +from tensorflow import keras + +from eis_toolkit import exceptions + +# TODO +# 1. Multimodal not implemented yet +# 2. Probabilistic MLP ? +# 3. Hyperparameter optimization: +# - Keras tuner +# - Wrapping model as KerasClassifier and use Sklearn searches +# - Other libraries? +# 4. Cross-validation: +# - +# 5. Visualization +# - Tensorboard? +# - Plot set of graphs at the end + +# NOTES: +# 1. Which optimizers are relevant? +# 2. Defaults values ok? +# 3. Sensible set of parameters exposed for the user? Do we want to try add **kwargs for extra inputs? +# 4. Train-validation-test data splitting ok, do we need option to give separate datasets as input? +# 5. + + +OPTIMIZERS = { + "adam": keras.optimizers.Adam, +} + + +# --- Inner functions, utils etc. --- + + +def check_keras_training_arguments(func): + """Check inputs to _train_and_validate_MLP and _train_and_validate_CNN.""" + + @wraps(func) + def decorated_func(*args, **kwargs): + # Check certain inputs + neurons = kwargs.get("neurons") + if len(neurons) == 0: + raise exceptions.InvalidParameterValueException("Neurons parameter must be a non-empty list.") + + test_split = kwargs.get("test_split") + if not (0 < test_split < 1): + raise exceptions.InvalidParameterValueException("Test split must be a value between 0 and 1, exclusive.") + + learning_rate = kwargs.get("learning_rate") + if learning_rate <= 0: + raise exceptions.InvalidParameterValueException("Learning rate must be greater than 0.") + + dropout_rate = kwargs.get("dropout_rate") + if not (0 <= dropout_rate <= 1): + raise exceptions.InvalidParameterValueException("Dropout rate must be between 0 and 1, inclusive.") + + es_patience = kwargs.get("es_patience") + if es_patience <= 0: + raise exceptions.InvalidParameterValueException("Early stopping patience must be greater than 0.") + + batch_size = kwargs.get("batch_size") + if batch_size <= 0: + raise exceptions.InvalidParameterValueException("Batch size must be greater than 0.") + + epochs = kwargs.get("epochs") + if epochs <= 0: + raise exceptions.InvalidParameterValueException("Number of epochs must be greater than 0.") + + # Continue with the function + result = func(*args, **kwargs) + return result + + return decorated_func + + +@beartype +def _train_and_validate( + X: np.ndarray, + y: np.ndarray, + model: keras.Sequential, + validation_split: float, + test_split: float, + output_neurons: int, + last_activation: str, + kernel_regularizer: keras.regularizers, + epochs: int, + batch_size: int, + optimizer: str, + learning_rate: float, + loss_function: str, + early_stopping: bool, + es_patience: int, + metrics: Optional[Sequence[str]], + random_state: Optional[int] = None, +) -> Tuple[keras.Sequential, dict, list]: + + model.add(keras.layers.Flatten()) + + model.add( + keras.layers.Dense( + units=output_neurons, + activation=last_activation, + kernel_regularizer=kernel_regularizer, + bias_regularizer=None, + ) + ) + + # Compile the model + model.compile(optimizer=OPTIMIZERS[optimizer](learning_rate=learning_rate), loss=loss_function, metrics=metrics) + + # Early stopping callback + callbacks = [keras.callbacks.EarlyStopping(monitor="val_loss", patience=es_patience)] if early_stopping else [] + + # Split the data + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_split, random_state=random_state) + + # Validation split should be the defined fraction of the whole dataset before test split + validation_split = validation_split / (1 - test_split) + + # Train the model + history = model.fit( + X_train, y_train, epochs=epochs, validation_split=validation_split, batch_size=batch_size, callbacks=callbacks + ) + + # Evaluate the model + evaluation = model.evaluate(X_test, y_test) + + return model, history.history, evaluation + + +# --- Public functions --- + + +@check_keras_training_arguments +@beartype +def train_and_validate_MLP( + X: np.ndarray, + y: np.ndarray, + neurons: Sequence[int] = [16], + validation_split: float = 0.15, + test_split: float = 0.15, + activation: Literal["relu"] = "relu", + output_neurons: int = 1, + last_activation: Literal["softmax", "sigmoid"] = "softmax", + kernel_regularizer: Optional[Literal["l1", "l2", "l1_l2"]] = None, + epochs: int = 50, + batch_size: int = 32, + optimizer: Literal["adam"] = "adam", + learning_rate: float = 0.001, + loss_function: Literal["categorical_crossentropy", "binary_crossentropy", "mse"] = "categorical_crossentropy", + dropout_rate: Optional[float] = None, + early_stopping: bool = True, + es_patience: int = 5, + metrics: Optional[Sequence[Literal["accuracy", "precision", "recall"]]] = [ + "accuracy" + ], # NOTE: Is this a useful parameter? Should there be more options? +) -> Tuple[keras.Sequential, dict, list]: + """ + Train and validate MLP (Multilayer Perceptron) using Keras. + + Args: + X: Input data. + y: Target labels. + neurons: Number of neurons in each hidden layer. Defaults to one layer with 16 neurons. + validation_split: Fraction of data used to validation during training. Defaults to 0.15. + test_split: Fraction of data used to testing. Defaults to 0.15. + activation: Activation function used in each hidden layer. Defaults to 'relu'. + output_neurons: Number of neurons in the output layer. + last_activation: Activation function used in the output layer. Defaults to 'softmax'. + kernel_regularizer: Kernel regularizer to be used. 'l1', 'l2' or 'l1_l2'. Optional parameter. + epochs: Number of epochs to train the model. Defaults to 50. + batch_size: Number of samples per gradient update. Defaults to 32. + optimizer: Optimizer to be used. Defaults to 'adam'. + learning_rate: Learning rate to be used in training. Defalts to 0.001. + loss_function: Loss function to be used. Defaults to 'categorical_crossentropy'. + dropout_rate: Float between 0 and 1. Fraction of the input units to drop. Optional parameter. + early_stopping: Whether or not to use early stopping in training. Defaults to True. + es_patience: Number of epochs with no improvement after which training will be stopped. Defaults to 5. + metrics: Metrics to be evaluated by the model during training and testing. Defaults to ['accuracy']. + + Returns: + Trained MLP, training history and scalar test loss or list of scalars. + """ + + # 1 Create model and add layers + model = keras.Sequential() + + regularizer = keras.regularizers.get(kernel_regularizer) + + for neuron in neurons: + model.add(keras.layers.Dense(units=neuron, activation=activation, kernel_regularizer=regularizer)) + + if dropout_rate is not None: + model.add(keras.layers.Dropout(dropout_rate)) + + # 2 Train model and validate + model, history, evaluation = _train_and_validate( + X=X, + y=y, + model=model, + validation_split=validation_split, + test_split=test_split, + output_neurons=output_neurons, + kernel_regularizer=regularizer, + last_activation=last_activation, + optimizer=optimizer, + learning_rate=learning_rate, + loss_function=loss_function, + metrics=metrics, + early_stopping=early_stopping, + es_patience=es_patience, + epochs=epochs, + batch_size=batch_size, + ) + + return model, history, evaluation + + +@beartype +def predict_MLP( + model: keras.Sequential, + data: np.ndarray, +) -> np.ndarray: + """ + Use trained MLP (Multilayer Perceptron) to make predictions for data using Keras. + + Args: + model: Trained MLP model. + data: Data to make predictions for. + + Returns: + Predictions for the input samples. + """ + + predictions = model.predict(data) + return predictions + + +@check_keras_training_arguments +@beartype +def train_and_validate_CNN( + X: np.ndarray, + y: np.ndarray, + kernel_size: Union[int, Sequence[Tuple[int, int]]], + neurons: Sequence[int] = [16], + validation_split: float = 0.15, + test_split: float = 0.15, + activation: Literal["relu"] = "relu", + output_neurons: int = 1, + last_activation: Literal["softmax", "sigmoid"] = "softmax", + optimizer: Literal["adam"] = "adam", + learning_rate: float = 0.001, + pool_size: int = 2, + loss_function: Literal["categorical_crossentropy", "binary_crossentropy", "mse"] = "categorical_crossentropy", + kernel_regularizer: Optional[Literal["l1", "l2", "l1_l2"]] = None, + dropout_rate: Optional[None] = None, + early_stopping: bool = True, + es_patience: int = 5, + batch_size: int = 32, + epochs: int = 50, + metrics: Optional[Sequence[Literal["accuracy", "precision", "recall"]]] = [ + "accuracy" + ], # NOTE: Is this a useful parameter? Should there be more options? +) -> Tuple[keras.Sequential, dict, list]: + """ + Train and validate CNN (Convolutional Neural Network) using Keras. + + Args: + X: Input data. + y: Target labels. + kernel_size: Height and width of the 2D convolution window. + neurons: Number of neurons in each hidden layer. Defaults to one layer with 16 neurons. + validation_split: Fraction of data used to validation during training. Defaults to 0.15. + test_split: Fraction of data used to testing. Defaults to 0.15. + activation: Activation function used in each hidden layer. Defaults to 'relu'. + output_neurons: Number of neurons in the output layer. + last_activation: Activation function used in the output layer. Defaults to 'softmax'. + optimizer: Optimizer to be used. Defaults to 'adam'. + learning_rate: Learning rate to be used in training. Defalts to 0.001. + pool size: Window size over which to take the maximum. + loss_function: Loss function to be used. Defaults to 'categorical_crossentropy'. + kernel_regularizer: Kernel regularizer to be used. 'l1', 'l2' or 'l1_l2'. Optional parameter. + dropout_rate: Float between 0 and 1. Fraction of the input units to drop. Optional parameter. + early_stopping: Whether or not to use early stopping in training. Defaults to True. + es_patience: Number of epochs with no improvement after which training will be stopped. Defaults to 5. + batch_size: Number of samples per gradient update. Defaults to 32. + epochs: Number of epochs to train the model. Defaults to 50. + metrics: Metrics to be evaluated by the model during training and testing. Defaults to ['accuracy']. + + Returns: + Trained CNN, training history and scalar test loss or list of scalars. + """ + + if pool_size == 0: + raise exceptions.InvalidParameterValueException("Pool size should be greater than 0.") + + # Step 1 Create model and add layers + model = keras.Sequential() + + regularizer = keras.regularizers.get(kernel_regularizer) + + for neuron in neurons: + model.add( + keras.layers.Conv2D( + filters=neuron, + kernel_size=kernel_size, + activation=activation, + padding="same", + kernel_regularizer=regularizer, + ) + ) + + if dropout_rate is not None: + model.add(keras.layers.Dropout(dropout_rate)) + + model.add(keras.layers.BatchNormalization()) + model.add(keras.layers.MaxPool2D(pool_size=pool_size)) + + # Step 2 Train model and validate + model, history, evaluation = _train_and_validate( + X=X, + y=y, + model=model, + validation_split=validation_split, + test_split=test_split, + output_neurons=output_neurons, + kernel_regularizer=regularizer, + last_activation=last_activation, + optimizer=optimizer, + learning_rate=learning_rate, + loss_function=loss_function, + metrics=metrics, + early_stopping=early_stopping, + es_patience=es_patience, + epochs=epochs, + batch_size=batch_size, + ) + + return model, history, evaluation + + +@beartype +def predict_CNN( + model: keras.Sequential, + data: np.ndarray, +) -> np.ndarray: + """ + Use trained CNN (Convolutional Neural Network) to make predictions for data using Keras. + + Args: + model: Trained CNN model. + data: Data to make predictions for. + + Returns: + Predictions for the input samples. + """ + predictions = model.predict(data) + return predictions From 868a140b027b2a7979cb73074a9a6c9de31ad089 Mon Sep 17 00:00:00 2001 From: Niko Aarnio Date: Tue, 7 Nov 2023 11:48:24 +0200 Subject: [PATCH 14/17] Minor modifications to the new MLP and CNN functions --- eis_toolkit/prediction/cnn_mlp_new.py | 30 ++++++++++----------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/eis_toolkit/prediction/cnn_mlp_new.py b/eis_toolkit/prediction/cnn_mlp_new.py index dfd31dae..043e056a 100644 --- a/eis_toolkit/prediction/cnn_mlp_new.py +++ b/eis_toolkit/prediction/cnn_mlp_new.py @@ -25,13 +25,7 @@ # 1. Which optimizers are relevant? # 2. Defaults values ok? # 3. Sensible set of parameters exposed for the user? Do we want to try add **kwargs for extra inputs? -# 4. Train-validation-test data splitting ok, do we need option to give separate datasets as input? -# 5. - - -OPTIMIZERS = { - "adam": keras.optimizers.Adam, -} +# 4. Train-validation-test data splitting ok? Do we need option to give separate datasets as input? # --- Inner functions, utils etc. --- @@ -42,7 +36,7 @@ def check_keras_training_arguments(func): @wraps(func) def decorated_func(*args, **kwargs): - # Check certain inputs + neurons = kwargs.get("neurons") if len(neurons) == 0: raise exceptions.InvalidParameterValueException("Neurons parameter must be a non-empty list.") @@ -110,13 +104,15 @@ def _train_and_validate( ) ) + optimizer = keras.optimizers.get(optimizer) + # Compile the model - model.compile(optimizer=OPTIMIZERS[optimizer](learning_rate=learning_rate), loss=loss_function, metrics=metrics) + model.compile(optimizer=optimizer(learning_rate=learning_rate), loss=loss_function, metrics=metrics) # Early stopping callback callbacks = [keras.callbacks.EarlyStopping(monitor="val_loss", patience=es_patience)] if early_stopping else [] - # Split the data + # Separate test data X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_split, random_state=random_state) # Validation split should be the defined fraction of the whole dataset before test split @@ -127,7 +123,7 @@ def _train_and_validate( X_train, y_train, epochs=epochs, validation_split=validation_split, batch_size=batch_size, callbacks=callbacks ) - # Evaluate the model + # Evaluate the model using test data evaluation = model.evaluate(X_test, y_test) return model, history.history, evaluation @@ -156,9 +152,7 @@ def train_and_validate_MLP( dropout_rate: Optional[float] = None, early_stopping: bool = True, es_patience: int = 5, - metrics: Optional[Sequence[Literal["accuracy", "precision", "recall"]]] = [ - "accuracy" - ], # NOTE: Is this a useful parameter? Should there be more options? + metrics: Optional[Sequence[Literal["accuracy", "precision", "recall"]]] = ["accuracy"], ) -> Tuple[keras.Sequential, dict, list]: """ Train and validate MLP (Multilayer Perceptron) using Keras. @@ -187,7 +181,7 @@ def train_and_validate_MLP( Trained MLP, training history and scalar test loss or list of scalars. """ - # 1 Create model and add layers + # Step 1 Create model and add layers model = keras.Sequential() regularizer = keras.regularizers.get(kernel_regularizer) @@ -198,7 +192,7 @@ def train_and_validate_MLP( if dropout_rate is not None: model.add(keras.layers.Dropout(dropout_rate)) - # 2 Train model and validate + # Step 2 Train model and validate model, history, evaluation = _train_and_validate( X=X, y=y, @@ -263,9 +257,7 @@ def train_and_validate_CNN( es_patience: int = 5, batch_size: int = 32, epochs: int = 50, - metrics: Optional[Sequence[Literal["accuracy", "precision", "recall"]]] = [ - "accuracy" - ], # NOTE: Is this a useful parameter? Should there be more options? + metrics: Optional[Sequence[Literal["accuracy", "precision", "recall"]]] = ["accuracy"], ) -> Tuple[keras.Sequential, dict, list]: """ Train and validate CNN (Convolutional Neural Network) using Keras. From 0f71557f1be6eed9fda814b99ab487cf3c4d85c4 Mon Sep 17 00:00:00 2001 From: Luca Date: Sun, 26 Nov 2023 16:05:07 +0200 Subject: [PATCH 15/17] finally two mega function are in --- eis_toolkit/exceptions.py | 2 + eis_toolkit/prediction/cnn_mlp_tensorflow.py | 26 +- .../mlp_classification_and_regression.py | 344 ++++++++++++++++++ eis_toolkit/prediction/utilities.py | 161 ++++++++ tests/prediction/mlp_with_tensorflow.py | 12 +- 5 files changed, 527 insertions(+), 18 deletions(-) create mode 100644 eis_toolkit/prediction/mlp_classification_and_regression.py create mode 100644 eis_toolkit/prediction/utilities.py diff --git a/eis_toolkit/exceptions.py b/eis_toolkit/exceptions.py index e397dc5c..f0844197 100644 --- a/eis_toolkit/exceptions.py +++ b/eis_toolkit/exceptions.py @@ -97,8 +97,10 @@ class NoSuchPathOrDirectory(Exception): class WrongWindowSize(Exception): """Exception throws when wrong windows size occurs.""" + class CNNException(Exception): """Exception throws when something is invalid in the cnn.""" + class CNNRunningParameterException(Exception): """Exception throws when running parameters are wrong.""" diff --git a/eis_toolkit/prediction/cnn_mlp_tensorflow.py b/eis_toolkit/prediction/cnn_mlp_tensorflow.py index 53e4b930..cdf25631 100644 --- a/eis_toolkit/prediction/cnn_mlp_tensorflow.py +++ b/eis_toolkit/prediction/cnn_mlp_tensorflow.py @@ -1,6 +1,6 @@ import os import random -from typing import Literal, Union, Any +from typing import Any, Literal, Union import joblib import numpy @@ -13,8 +13,14 @@ from sklearn.preprocessing import StandardScaler from sklearn.utils.class_weight import compute_sample_weight -from eis_toolkit.exceptions import (NoSuchPathOrDirectory, WrongWindowSize, InvalidDatasetException, CNNException, - InvalidArgumentTypeException, CNNRunningParameterException) +from eis_toolkit.exceptions import ( + CNNException, + CNNRunningParameterException, + InvalidArgumentTypeException, + InvalidDatasetException, + NoSuchPathOrDirectory, + WrongWindowSize, +) from eis_toolkit.prediction.model_performance_estimation import performance_model_estimation @@ -73,7 +79,7 @@ def parse_the_master_file(master_file_path) -> dict: current_dataset[others_values[1]].append( { - "full_path":f"{others_values[0]}", + "full_path": f"{others_values[0]}", "current_path": f"{others_values[0].split('/')[-2]}/{others_values[0].split('/')[-1]}", "no_data": float(others_values[3]) if others_values[3] != "" else "", "no_data_value": float(others_values[4]) if others_values[4] != "" else 255, @@ -180,6 +186,7 @@ def create_windows_based_of_geo_coords( return window + @beartype def dataset_loader( deposit_path: str, unlabelled_data_path: str, desired_windows_dimension: int, path_of_features: str @@ -224,7 +231,7 @@ def dataset_loader( temp_holder = list() concatenated = None for tif_obj in current_dataset[key]: - current_raster = gdal.Open(tif_obj['full_path']) + current_raster = gdal.Open(tif_obj["full_path"]) for windows_counter, (N, E) in enumerate(coordinates_of_deposit): windows = create_windows_based_of_geo_coords( current_raster_object=tif_obj, @@ -328,8 +335,6 @@ def normalize_the_data(data_to_normalize, normalizator) -> np.ndarray: return normalized_input.reshape(number_of_samples, h, w, c) - - def convolutional_body_of_the_cnn( input_layer: tf.keras.Input, neuron_list: Union[int], @@ -430,7 +435,6 @@ def dense_nodes(input_layer: tf.keras.Input, neuron_list: Union[int], dropout: f return x - def create_multi_modal_cnn( input_aem: tuple[int, int, int] or tuple[int, int] = None, kernel_aem: tuple[int, int] = None, @@ -688,7 +692,6 @@ def make_prediction( return compiled_model, history, score[0], prediction, validation_labels[0] - def do_training_and_prediction_of_the_model( deposit_path: str, unlabelled_data_path: str, @@ -721,7 +724,6 @@ def do_training_and_prediction_of_the_model( if not os.path.isfile(deposit_path) or not os.path.isfile(unlabelled_data_path): raise NoSuchPathOrDirectory - stacked_true, stacked_prediction = list(), list() best_score = 0 model_to_return = None @@ -808,7 +810,7 @@ def do_training_and_prediction_of_the_model( stacked_true.append(true_label) - if cnn_configuration["last_activation"] != "sofmax": + if cnn_configuration["last_activation"] == "softmax": stacked_prediction.append(np.argmax(prediction)) else: if prediction[0] <= threshold: @@ -826,5 +828,3 @@ def do_training_and_prediction_of_the_model( df.to_csv("cm/cm.csv") return df, model_to_return - - diff --git a/eis_toolkit/prediction/mlp_classification_and_regression.py b/eis_toolkit/prediction/mlp_classification_and_regression.py new file mode 100644 index 00000000..a4306680 --- /dev/null +++ b/eis_toolkit/prediction/mlp_classification_and_regression.py @@ -0,0 +1,344 @@ +from typing import Literal, Union + +import numpy as np +import pandas as pd +import tensorflow as tf +from beartype import beartype +from keras import Model +from pandas import DataFrame +from sklearn.metrics import confusion_matrix +from sklearn.preprocessing import OneHotEncoder, StandardScaler +from sklearn.utils.class_weight import compute_sample_weight + +from eis_toolkit.exceptions import CNNException, CNNRunningParameterException, InvalidArgumentTypeException +from eis_toolkit.prediction.model_performance_estimation import performance_model_estimation + + +def make_one_hot_encoding(labels): + """ + Do the OneHotEncoding. + + Parameters: + labels: labels to encode. + + Return: + return encoded labels. + + Raises: + InvalidArgumentTypeException: labels are None. + """ + if labels is None: + raise InvalidArgumentTypeException + + # to categorical + enc = OneHotEncoder(handle_unknown="ignore") + # train and valid set + temp = np.reshape(labels, (-1, 1)) + label_encoded = enc.fit_transform(temp).toarray() + return label_encoded + + +@beartype +def do_the_mlp( + input_shape_for_mlp: tuple[int, int, int] or tuple[int, int], + neuron_list: Union[int] = [16], + dropout_rate: Union[None, float] = None, + last_activation: Literal["softmax", "sigmoid"] = "softmax", + regularization: Union[tf.keras.regularizers.L1, tf.keras.regularizers.L2, tf.keras.regularizers.L1L2] = None, + data_augmentation: bool = False, + optimizer: str = "Adam", + loss=Union[tf.keras.losses.BinaryCrossentropy, tf.keras.losses.CategoricalCrossentropy], + output_units=2, +) -> tf.keras.Model: + """ + Do an instance of CNN or MLP. + + Parameters: + input_shape_for_mlp: shape of the input aem. + regularization: Type of regularization to insert into the CNN or MLP. + data_augmentation: if you want data augmentation or not (Random rotation is implemented). + optimizer: select one optimizer for the MLP. + loss: the loss function used to calculate accuracy. + neuron_list: List of unit or neuron used to build the network. + dropout_rate: if you want to use dropout add a number as floating point. + output_units: number of output classes. + last_activation: usually you should use softmax or sigmoid. + + Return: + return the compiled model. + + Raises: + InvalidArgumentTypeException: one of the arguments is invalid. + CNNException: raised when the input is not valid + """ + + # if regression and binary we can not uses more than 1 + if output_units > 1 and loss == tf.keras.losses.BinaryCrossentropy: + raise InvalidArgumentTypeException + + # check that the input is not null + if input_shape_for_mlp is None: + raise CNNException + + if len(neuron_list) <= 0 or dropout_rate <= 0: + raise InvalidArgumentTypeException + + # generate the input + input_layer = tf.keras.Input(shape=input_shape_for_mlp) + + if data_augmentation is not False: + input_layer = tf.keras.layers.RandomRotation((-0.2, 0.5))(input_layer) + + for layer_number, neuron in enumerate(neuron_list): + if layer_number == 0: + body = tf.keras.layers.Dense(neuron, activation="relu", kernel_regularizer=regularization)(input_layer) + else: + body = tf.keras.layers.Dense(neuron, kernel_regularizer=regularization, activation="relu")(body) + + if dropout_rate is not None: + body = tf.keras.layers.Dropout(dropout_rate)(body) + + # we flatten + body = tf.keras.layers.Flatten()(body) + + # create the model + classifier = tf.keras.layers.Dense( + output_units, activation=last_activation, kernel_regularizer=regularization, name="classifier" + )(body) + + # create the model + model = tf.keras.Model(inputs=input_layer, outputs=classifier, name="the_mlp_model") + + model = model.compile(optimizer=optimizer, loss=loss, metrics=["accuracy"]) + + return model + + +# now let's prepare two mega function one for classification and one for regression +@beartype +def train_and_predict_for_classification( + X: np.ndarray, + y: np.ndarray, + batch_size: int, + epochs: int, + cross_validation: Literal["LOOCV", "KFOLD", "SKFOLD"], + input_shape_for_mlp: tuple[int, int, int] or tuple[int, int], + sample_weights: True or False, + neuron_list: Union[int] = [16], + dropout_rate: Union[None, float] = None, + last_activation: Literal["softmax", "sigmoid"] = "softmax", + regularization: Union[tf.keras.regularizers.L1, tf.keras.regularizers.L2, tf.keras.regularizers.L1L2] = None, + data_augmentation: bool = False, + optimizer: str = "Adam", + loss=Union[tf.keras.losses.BinaryCrossentropy, tf.keras.losses.CategoricalCrossentropy], + output_units=2, +) -> tuple[Model | None, DataFrame]: + """ + Do training and evaluation of the model with cross validation. + + Parameters: + X: This is the dataset, + y: labels, + batch_size: how much we want the batch size, + epochs: how many epochs we want to run the model, + cross_validation: Type of cross validation + input_shape_for_mlp: shape of the inputs windows -> tuple[int, int, int] just a point -> tuple[int, int], + sample_weights: if you want to samples weights, + neuron_list: How deep you want to MLP + dropout_rate: float number that help avoiding overfitting, + last_activation: type of last activation I suggest here to use softmax, + regularization: regularization of each MLP layers, None if you do not want it. + data_augmentation: bool in case you use windows you can have random rotation, + optimizer: loss optimization function, + loss: loss functyion I suggest this -> tf.keras.losses.CategoricalCrossentropy, + output_units: how many class you have to predicts + + Return: + return pd dataframe that contains the confusion matrix and instance of the best model. + + Raises: + CNNRunningParameterException: when the batch size or epochs are wrong integer + InvalidArgumentTypeException: when you try to use sigmoid or BinaryCrossEntropy for classification. + """ + if batch_size <= 0 or epochs <= 0: + raise CNNRunningParameterException + + if last_activation == "sigmoid" or loss == tf.keras.losses.BinaryCrossentropy(): + raise InvalidArgumentTypeException + + # seems is classy we need one hot + y_encoded = make_one_hot_encoding(labels=y) + + # generate the model + mlp_model = do_the_mlp( + input_shape_for_mlp=input_shape_for_mlp, + neuron_list=neuron_list, + dropout_rate=dropout_rate, + last_activation=last_activation, + regularization=regularization, + data_augmentation=data_augmentation, + optimizer=optimizer, + loss=loss, + output_units=output_units, + ) + + # prepare the scaler + scaler_agent = StandardScaler() + scaler_agent.fit(X.reshape(-1, X.shape[-1])) + + # get cross validation methods + selected_cs = performance_model_estimation(cross_validation_type=cross_validation, number_of_split=1) + + stacked_true, stacked_prediction = list(), list() + best_score = 0 + model_to_return = None + + for i, (train_index, test_index) in enumerate(selected_cs.split(y)): + # train test + X_train = scaler_agent.transform(X[train_index]) + y_train = y_encoded[train_index] + + # valid test + X_validation = scaler_agent.transform(X[test_index]) + y_validation = y_encoded[test_index] + + _ = mlp_model.fit( + X_train, + y_train, + validation_data=(X_validation, y_validation), + batch_size=batch_size, + epochs=epochs, + sample_weight=compute_sample_weight("balanced", y_train) if sample_weights is not False else None, + ) + + # make the score and the prediction + score = mlp_model.evaluate(X_validation, y_validation)[0] + prediction = mlp_model.predict(X_validation) + + stacked_true.append(np.argmax(y_validation)) + stacked_prediction.append(np.argmax(prediction)) + + if score > best_score: + best_score = score + model_to_return = mlp_model + + # create a cm + cm = confusion_matrix(np.array(stacked_true), np.array(stacked_prediction), normalize="all") + df = pd.DataFrame(cm, columns=["Non deposit", "deposit"], index=["Non deposit", "deposit"]) + return model_to_return, df + + +@beartype +def train_and_predict_for_regression( + X: np.ndarray, + y: np.ndarray, + batch_size: int, + epochs: int, + threshold: float, + cross_validation: Literal["LOOCV", "KFOLD", "SKFOLD"], + input_shape_for_mlp: tuple[int, int, int] or tuple[int, int], + sample_weights: True or False, + neuron_list: Union[int] = [16], + dropout_rate: Union[None, float] = None, + last_activation: Literal["softmax", "sigmoid"] = "softmax", + regularization: Union[tf.keras.regularizers.L1, tf.keras.regularizers.L2, tf.keras.regularizers.L1L2] = None, + data_augmentation: bool = False, + optimizer: str = "Adam", + loss=Union[tf.keras.losses.BinaryCrossentropy, tf.keras.losses.CategoricalCrossentropy], + output_units=2, +) -> tuple[Model | None, DataFrame]: + """ + Do training and evaluation of the model with cross validation. + + Parameters: + X: This is the dataset, + y: labels, + batch_size: how much we want the batch size, + epochs: how many epochs we want to run the model, + cross_validation: Type of cross validation + input_shape_for_mlp: shape of the inputs windows -> tuple[int, int, int] just a point -> tuple[int, int], + sample_weights: if you want to samples weights, + neuron_list: How deep you want to MLP + dropout_rate: float number that help avoiding overfitting, + last_activation: type of last activation I suggest here to use softmax, + regularization: regularization of each MLP layers, None if you do not want it. + data_augmentation: bool in case you use windows you can have random rotation, + optimizer: loss optimization function, + loss: loss function I suggest this -> tf.keras.losses.CategoricalCrossentropy, + output_units: how many class you have to predicts + + Return: + return pd dataframe that contains the confusion matrix and instance of the best model. + + Raises: + CNNRunningParameterException: when the batch size or epochs are wrong integer + InvalidArgumentTypeException: when you try to use softmax or CategoricalCrossEntropy for regression. + """ + + if batch_size <= 0 or epochs <= 0: + raise CNNRunningParameterException + + if last_activation == "softmax" or loss == tf.keras.losses.CategoricalCrossentropy(): + raise InvalidArgumentTypeException + + # generate the model + mlp_model = do_the_mlp( + input_shape_for_mlp=input_shape_for_mlp, + neuron_list=neuron_list, + dropout_rate=dropout_rate, + last_activation=last_activation, + regularization=regularization, + data_augmentation=data_augmentation, + optimizer=optimizer, + loss=loss, + output_units=output_units, + ) + + # prepare the scaler + scaler_agent = StandardScaler() + scaler_agent.fit(X.reshape(-1, X.shape[-1])) + + # get cross validation methods + selected_cs = performance_model_estimation(cross_validation_type=cross_validation, number_of_split=1) + + stacked_true, stacked_prediction = list(), list() + best_score = 0 + model_to_return = None + + for i, (train_index, test_index) in enumerate(selected_cs.split(y)): + # train test + X_train = scaler_agent.transform(X[train_index]) + y_train = y[train_index] + + # valid test + X_validation = scaler_agent.transform(X[test_index]) + y_validation = y[test_index] + + _ = mlp_model.fit( + X_train, + y_train, + validation_data=(X_validation, y_validation), + batch_size=batch_size, + epochs=epochs, + sample_weight=compute_sample_weight("balanced", y_train) if sample_weights is not False else None, + ) + + # make the score and the prediction + score = mlp_model.evaluate(X_validation, y_validation)[0] + prediction = mlp_model.predict(X_validation) + + stacked_true.append(y_validation) + + if prediction[0] <= threshold: + stacked_prediction.append(0) + else: + stacked_prediction.append(1) + + if score > best_score: + best_score = score + model_to_return = mlp_model + + # create a cm + cm = confusion_matrix(np.array(stacked_true), np.array(stacked_prediction), normalize="all") + df = pd.DataFrame(cm, columns=["Non deposit", "deposit"], index=["Non deposit", "deposit"]) + return model_to_return, df diff --git a/eis_toolkit/prediction/utilities.py b/eis_toolkit/prediction/utilities.py new file mode 100644 index 00000000..cd6a71a4 --- /dev/null +++ b/eis_toolkit/prediction/utilities.py @@ -0,0 +1,161 @@ +from typing import Any + +import numpy as np +from beartype import beartype +from osgeo import gdal + + +@beartype +def parse_the_master_file(master_file_path) -> dict: + """ + Load sets of windows from its folder. + + Parameters: + master_file_path: path of the masterfile. + + Return: + Dictionary that contains the following information: + current_path: this the path of the feature. + no_data: no data value. + no_data_value: which value to substitute to the no data. + min_range_value: min range of the raster. + max_range_value: max range of the. + channel: band. + windows_dimension: the window dimension. + valid_bands: valid band to use. + loaded_dataset_as_array: current raster array. + current_geo_transform: current set of N and E. + model_type: this is not used here. + Raises: + TODO + """ + current_dataset = dict() + # open the handler + handler = open(master_file_path) + + # loop inside each rows + for line in handler.readlines(): + line_to_split = line.strip() + + # get band list and convert to int + bands = line_to_split.split(":")[1].split(",") + + # parse features to int + bands = [int(x) for x in bands] + + # get other values + others_values = line_to_split.split(":")[0].split(",") + + # che sub raster from raster + loaded_raster = gdal.Open(f"{others_values[0]}", gdal.GA_ReadOnly) + geo = loaded_raster.GetGeoTransform() + + # create a key holder for the dict of feat + if others_values[1] not in current_dataset.keys(): + current_dataset[others_values[1]] = list() + + current_dataset[others_values[1]].append( + { + "current_path": f"{others_values[0].split('/')[-2]}/{others_values[0].split('/')[-1]}", + "no_data": float(others_values[3]) if others_values[3] != "" else "", + "no_data_value": float(others_values[4]) if others_values[4] != "" else 255, + "min_range_value": float(others_values[5]) if others_values[5] != "" else "", + "max_range_value": float(others_values[6]) if others_values[6] != "" else "", + "channel": others_values[1], + "windows_dimension": int(others_values[2]), + "valid_bands": bands, + "loaded_dataset_as_array": loaded_raster.ReadAsArray()[bands, :, :] + if loaded_raster.ReadAsArray().ndim > 2 + else loaded_raster.ReadAsArray(), + "current_geo_transform": geo, + "model_type": others_values[7], + } + ) + handler.close() + return current_dataset + + +@beartype +def return_list_of_N_and_E(path_to_data: str) -> list[list[Any]]: + """ + Load the list of N and E coordinates. + + Parameters: + input_path: this is what in keras is called optimizer. + + Return: + a list that contain all N end E + + Raises: + TODO + """ + # load the csv file with the deposit annotation + handler = open(path_to_data, "r") + coords = list() + for row_counter, row in enumerate(handler.readlines()): + if row_counter != 0: + coords.append([row.strip().split(",")[-2], row.strip().split(",")[-3]]) + return coords + + +@beartype +def create_windows_based_of_geo_coords( + current_raster_object: dict, + current_E: float, + current_N: float, + desired_windows_dimension: int, + current_loaded_raster: gdal.Dataset, +) -> np.ndarray: + """ + Create windows from geo coordinates. + + Parameters: + current_raster_object: raster iformation from the masterfile. + current_E: float point showing the E. + current_N: float point showing the N. + desired_windows_dimension: int dimension of the window. + current_loaded_raster: load tif with gdal + + Return: + numpy array with the windows inside. + + Raises: + TODO + """ + + if current_loaded_raster is None: + # get the loaded raster and the pix + current_raster = gdal.Open(current_raster_object["current_path"]) + else: + current_raster = current_loaded_raster + + spatial_pixel_resolution = current_raster_object["current_geo_transform"][1] + + # get the coords + start_N = current_N + (desired_windows_dimension / 2) * spatial_pixel_resolution + end_N = start_N + desired_windows_dimension * spatial_pixel_resolution + + start_E = current_E - (desired_windows_dimension / 2) * spatial_pixel_resolution + end_E = start_E + desired_windows_dimension * spatial_pixel_resolution + + raster = gdal.Warp( + "", + current_raster, + outputBounds=[start_E, end_N, end_E, start_N], + format="MEM", + xRes=spatial_pixel_resolution, + yRes=-spatial_pixel_resolution, + ) + + values_with_need = raster.ReadAsArray() + + # create the window I m testing with float + window = ( + np.array(values_with_need).astype("float32").reshape((desired_windows_dimension, desired_windows_dimension, -1)) + ) + + # remove no data value: + if current_raster_object["no_data"] != "": + window[window == current_raster_object["no_data"]] = current_raster_object["no_data_value"] + + return window diff --git a/tests/prediction/mlp_with_tensorflow.py b/tests/prediction/mlp_with_tensorflow.py index 14b51e68..e6a7d723 100644 --- a/tests/prediction/mlp_with_tensorflow.py +++ b/tests/prediction/mlp_with_tensorflow.py @@ -1,7 +1,9 @@ from eis_toolkit.prediction.cnn_mlp_tensorflow import do_training_and_prediction_of_the_model -if __name__ == '__main__': - df, model_to_return = do_training_and_prediction_of_the_model(deposit_path="/media/luca/T7 Shield/Eis_data/Annotations/17_annoted_points.csv", - unlabelled_data_path="/media/luca/T7 Shield/Eis_data/Annotations/2M_raster_points.csv", - path_to_features="masterfile_eis.csv", - desired_windows_dimension=5) \ No newline at end of file +if __name__ == "__main__": + df, model_to_return = do_training_and_prediction_of_the_model( + deposit_path="/media/luca/T7 Shield/Eis_data/Annotations/17_annoted_points.csv", + unlabelled_data_path="/media/luca/T7 Shield/Eis_data/Annotations/2M_raster_points.csv", + path_to_features="masterfile_eis.csv", + desired_windows_dimension=5, + ) From 30bb94350386baff5cc230b01bc226e20e724fe6 Mon Sep 17 00:00:00 2001 From: Luca Date: Mon, 27 Nov 2023 10:19:17 +0200 Subject: [PATCH 16/17] added the mlp stuff and tests --- .../mlp_classification_and_regression.py | 33 +++++------ .../mlp_classification_and_regression.py | 59 +++++++++++++++++++ 2 files changed, 75 insertions(+), 17 deletions(-) create mode 100644 tests/prediction/mlp_classification_and_regression.py diff --git a/eis_toolkit/prediction/mlp_classification_and_regression.py b/eis_toolkit/prediction/mlp_classification_and_regression.py index a4306680..4caa69ac 100644 --- a/eis_toolkit/prediction/mlp_classification_and_regression.py +++ b/eis_toolkit/prediction/mlp_classification_and_regression.py @@ -38,13 +38,12 @@ def make_one_hot_encoding(labels): return label_encoded -@beartype def do_the_mlp( - input_shape_for_mlp: tuple[int, int, int] or tuple[int, int], - neuron_list: Union[int] = [16], + input_shape_for_mlp: Union[tuple[int, int, int], tuple[int, int]], + neuron_list: list[int] = [16], dropout_rate: Union[None, float] = None, last_activation: Literal["softmax", "sigmoid"] = "softmax", - regularization: Union[tf.keras.regularizers.L1, tf.keras.regularizers.L2, tf.keras.regularizers.L1L2] = None, + regularization: Union[tf.keras.regularizers.L1, tf.keras.regularizers.L2, tf.keras.regularizers.L1L2, None] = None, data_augmentation: bool = False, optimizer: str = "Adam", loss=Union[tf.keras.losses.BinaryCrossentropy, tf.keras.losses.CategoricalCrossentropy], @@ -71,7 +70,6 @@ def do_the_mlp( InvalidArgumentTypeException: one of the arguments is invalid. CNNException: raised when the input is not valid """ - # if regression and binary we can not uses more than 1 if output_units > 1 and loss == tf.keras.losses.BinaryCrossentropy: raise InvalidArgumentTypeException @@ -108,13 +106,13 @@ def do_the_mlp( # create the model model = tf.keras.Model(inputs=input_layer, outputs=classifier, name="the_mlp_model") - - model = model.compile(optimizer=optimizer, loss=loss, metrics=["accuracy"]) - + model.compile(optimizer=optimizer, loss=loss, metrics=["accuracy"]) return model # now let's prepare two mega function one for classification and one for regression + + @beartype def train_and_predict_for_classification( X: np.ndarray, @@ -122,12 +120,12 @@ def train_and_predict_for_classification( batch_size: int, epochs: int, cross_validation: Literal["LOOCV", "KFOLD", "SKFOLD"], - input_shape_for_mlp: tuple[int, int, int] or tuple[int, int], - sample_weights: True or False, - neuron_list: Union[int] = [16], + input_shape_for_mlp: Union[tuple[int, int, int], tuple[int, int], tuple[int], int], + sample_weights: bool = False, + neuron_list: list[int] = [16], dropout_rate: Union[None, float] = None, last_activation: Literal["softmax", "sigmoid"] = "softmax", - regularization: Union[tf.keras.regularizers.L1, tf.keras.regularizers.L2, tf.keras.regularizers.L1L2] = None, + regularization: Union[tf.keras.regularizers.L1, tf.keras.regularizers.L2, tf.keras.regularizers.L1L2, None] = None, data_augmentation: bool = False, optimizer: str = "Adam", loss=Union[tf.keras.losses.BinaryCrossentropy, tf.keras.losses.CategoricalCrossentropy], @@ -160,6 +158,7 @@ def train_and_predict_for_classification( CNNRunningParameterException: when the batch size or epochs are wrong integer InvalidArgumentTypeException: when you try to use sigmoid or BinaryCrossEntropy for classification. """ + if batch_size <= 0 or epochs <= 0: raise CNNRunningParameterException @@ -181,7 +180,7 @@ def train_and_predict_for_classification( loss=loss, output_units=output_units, ) - + print(mlp_model) # prepare the scaler scaler_agent = StandardScaler() scaler_agent.fit(X.reshape(-1, X.shape[-1])) @@ -236,12 +235,12 @@ def train_and_predict_for_regression( epochs: int, threshold: float, cross_validation: Literal["LOOCV", "KFOLD", "SKFOLD"], - input_shape_for_mlp: tuple[int, int, int] or tuple[int, int], - sample_weights: True or False, - neuron_list: Union[int] = [16], + input_shape_for_mlp: Union[tuple[int, int, int], tuple[int, int], tuple[int], int], + sample_weights: bool = False, + neuron_list: list[int] = [16], dropout_rate: Union[None, float] = None, last_activation: Literal["softmax", "sigmoid"] = "softmax", - regularization: Union[tf.keras.regularizers.L1, tf.keras.regularizers.L2, tf.keras.regularizers.L1L2] = None, + regularization: Union[tf.keras.regularizers.L1, tf.keras.regularizers.L2, tf.keras.regularizers.L1L2, None] = None, data_augmentation: bool = False, optimizer: str = "Adam", loss=Union[tf.keras.losses.BinaryCrossentropy, tf.keras.losses.CategoricalCrossentropy], diff --git a/tests/prediction/mlp_classification_and_regression.py b/tests/prediction/mlp_classification_and_regression.py new file mode 100644 index 00000000..f80fcce7 --- /dev/null +++ b/tests/prediction/mlp_classification_and_regression.py @@ -0,0 +1,59 @@ +import numpy as np +import pandas as pd +import tensorflow as tf + +from eis_toolkit.prediction.mlp_classification_and_regression import ( + train_and_predict_for_classification, + train_and_predict_for_regression, +) + +X = pd.read_csv("../data/remote/fake_smote_data.csv").to_numpy() +labels = np.random.randint(2, size=X.shape[0]) + +print(X.shape, labels.shape) + + +def test_classification_compile_and_produces_cm(): + """Do the test.""" + model_to_return, df = train_and_predict_for_classification( + X=X, + y=labels, + batch_size=32, + epochs=10, + cross_validation="LOOCV", + input_shape_for_mlp=(X.shape[1]), + sample_weights=True, + neuron_list=[16, 24, 32], + dropout_rate=0.1, + last_activation="softmax", + regularization=None, + data_augmentation=False, + optimizer="Adam", + loss=tf.keras.losses.CategoricalCrossentropy(), + output_units=len(np.unique(labels)), + ) + + assert df.to_numpy().shape[0] != 0 and df.to_numpy().shape[1] != 0 + + +def test_regression_compile_and_produces_cm(): + """Do the test.""" + model_to_return, df = train_and_predict_for_regression( + X=X, + y=labels, + batch_size=32, + epochs=10, + cross_validation="LOOCV", + input_shape_for_mlp=(X.shape[1]), + sample_weights=True, + neuron_list=[16, 24, 32], + dropout_rate=0.1, + last_activation="sigmoid", + regularization=None, + data_augmentation=False, + optimizer="Adam", + threshold=0.5, + loss=tf.keras.losses.BinaryCrossentropy(), + output_units=1, + ) + assert df.to_numpy().shape[0] != 0 and df.to_numpy().shape[1] != 0 From f6da1046d747baf3883f6d97bf5afa8efaef98a2 Mon Sep 17 00:00:00 2001 From: Luca Date: Sun, 3 Dec 2023 17:17:07 +0200 Subject: [PATCH 17/17] found couple of typos --- eis_toolkit/prediction/mlp_classification_and_regression.py | 1 + 1 file changed, 1 insertion(+) diff --git a/eis_toolkit/prediction/mlp_classification_and_regression.py b/eis_toolkit/prediction/mlp_classification_and_regression.py index 4caa69ac..6f47c1ea 100644 --- a/eis_toolkit/prediction/mlp_classification_and_regression.py +++ b/eis_toolkit/prediction/mlp_classification_and_regression.py @@ -253,6 +253,7 @@ def train_and_predict_for_regression( X: This is the dataset, y: labels, batch_size: how much we want the batch size, + threshold: number that determine bound between positive or negative, epochs: how many epochs we want to run the model, cross_validation: Type of cross validation input_shape_for_mlp: shape of the inputs windows -> tuple[int, int, int] just a point -> tuple[int, int],