From 45757593f3e38c06b2825f557f25b573c6eff744 Mon Sep 17 00:00:00 2001
From: Eilert Tunheim <emtunhei@stud.ntnu.no>
Date: Thu, 28 Apr 2022 14:01:05 +0200
Subject: [PATCH] Added CSS file for graph

---
 .../java/com/application/DB/Constants.java    |   3 +
 .../GUI/LineChartFunctionality.java           |  32 +++++-
 .../DataProcessing/NonlinearRegression.py     |   3 -
 .../com.application/GUI/graphStyles.css       |  23 +++++
 .../GUI/graphical_user_interface.fxml         |  96 ------------------
 .../DataProcessing/NonlinearRegression.py     |   3 -
 .../com.application/GUI/graphStyles.css       |  23 +++++
 .../GUI/graphical_user_interface.fxml         |  96 ------------------
 .../com/application/DB/Constants.class        | Bin 6119 -> 6168 bytes
 target/classes/com/application/DB/DB.class    | Bin 14919 -> 15155 bytes
 .../GUI/LineChartFunctionality.class          | Bin 10007 -> 11202 bytes
 11 files changed, 79 insertions(+), 200 deletions(-)
 delete mode 100644 src/main/resources/com.application/DataProcessing/NonlinearRegression.py
 create mode 100644 src/main/resources/com.application/GUI/graphStyles.css
 delete mode 100644 src/main/resources/com.application/GUI/graphical_user_interface.fxml
 delete mode 100644 target/classes/com.application/DataProcessing/NonlinearRegression.py
 create mode 100644 target/classes/com.application/GUI/graphStyles.css
 delete mode 100644 target/classes/com.application/GUI/graphical_user_interface.fxml

diff --git a/src/main/java/com/application/DB/Constants.java b/src/main/java/com/application/DB/Constants.java
index 25867d4..7e1d383 100644
--- a/src/main/java/com/application/DB/Constants.java
+++ b/src/main/java/com/application/DB/Constants.java
@@ -27,6 +27,9 @@ public final class Constants {
     // Number of wanted drying periods
     public static int NUMBER_OF_PERIODS = 1;
 
+    // Non linear regression
+    public static final double ADJUST_REGRESSION = 5.5;
+
     // Database ID/name
     public static final String PROJECT_ID = "sf-drying-optimization";
 
diff --git a/src/main/java/com/application/GUI/LineChartFunctionality.java b/src/main/java/com/application/GUI/LineChartFunctionality.java
index 10b8b07..b8b65b6 100644
--- a/src/main/java/com/application/GUI/LineChartFunctionality.java
+++ b/src/main/java/com/application/GUI/LineChartFunctionality.java
@@ -13,6 +13,9 @@ import org.apache.commons.math3.stat.regression.SimpleRegression;
 import java.lang.reflect.Array;
 import java.util.*;
 
+import static com.application.DB.Constants.ADJUST_REGRESSION;
+//import static com.application.DB.DB.
+
 public class LineChartFunctionality {
 
     private static LineChart<String, Number> lineChart;
@@ -42,6 +45,8 @@ public class LineChartFunctionality {
 
     public static void updateLineChart(XYChart.Series<String, Number> series) {
         lineChart.getData().add(series);
+        series.getNode().setId("dataGraphs");
+        lineChart.getStylesheets().add(LineChartFunctionality.class.getResource("/com.application/GUI/graphStyles.css").toExternalForm());
     }
 
     public static void clearLineChart() {
@@ -117,7 +122,7 @@ public class LineChartFunctionality {
                 index++;
             }
             //allSeries.add(newSeries);
-            updateLineChart(newSeries);
+            //updateLineChart(newSeries);
             //lineChart.setOpacity(1);
         }
 
@@ -216,6 +221,26 @@ public class LineChartFunctionality {
 
 
 
+        for (Map.Entry<Integer, Map<String, Number>> entryKwh : userInput.entrySet()) {
+            //System.out.println(data.size());
+            XYChart.Series<String, Number> newSeries = new XYChart.Series<String, Number>();
+            index = 0;
+            for (Object entryData : entryKwh.getValue().entrySet()) {
+                //System.out.println("data: \t"+entryData);
+                String entryString = entryData.toString();
+                Double kwhValue = Double.parseDouble(entryString.split("=")[1]);
+
+                // Connect the data to a series
+                newSeries.getData().add(new XYChart.Data<String, Number>(String.valueOf(index), kwhValue));
+                index++;
+            }
+            //allSeries.add(newSeries);
+            updateLineChart(newSeries);
+            //lineChart.setOpacity(1);
+        }
+
+
+
 
         System.out.println("Get R: " + simpleRegression.getR());
         System.out.println("Get getRSquare: " + simpleRegression.getRSquare());
@@ -234,6 +259,8 @@ public class LineChartFunctionality {
 
 
 
+
+
         return getLineChart();
     }
 
@@ -256,9 +283,10 @@ public class LineChartFunctionality {
 
         //double p_t = ((beta*maxYValue)/(maxYValue+((beta-maxYValue)*Math.exp(-alpha*(yValue-maxYValue)))));
         //double p_t = ((beta* y0)/(y0 +((beta- y0)*Math.exp(-alpha*j/n/(2*Math.PI)))))-y0;      //Funker sånn halveis
-        double p_t = (((beta * y0))/(y0 +((beta- y0)*Math.exp(-alpha*j/n/(6.5)))))-y0;      //Funker sånn halveis
         //double p_t = (beta * y0)/(y0 + (beta - y0)*Math.exp(-intercept*(j/n)));
 
+        double p_t = (((beta * y0))/(y0 +((beta- y0)*Math.exp(-alpha*j/n/(ADJUST_REGRESSION)))))-y0;      //Beste til nå
+
 
         System.out.println("---------------------------");
         System.out.println("y0: " + y0);
diff --git a/src/main/resources/com.application/DataProcessing/NonlinearRegression.py b/src/main/resources/com.application/DataProcessing/NonlinearRegression.py
deleted file mode 100644
index 5ff2459..0000000
--- a/src/main/resources/com.application/DataProcessing/NonlinearRegression.py
+++ /dev/null
@@ -1,3 +0,0 @@
-print("This line will be printed.")
-
-print(locals())
\ No newline at end of file
diff --git a/src/main/resources/com.application/GUI/graphStyles.css b/src/main/resources/com.application/GUI/graphStyles.css
new file mode 100644
index 0000000..bbef3d5
--- /dev/null
+++ b/src/main/resources/com.application/GUI/graphStyles.css
@@ -0,0 +1,23 @@
+
+.chart-series-line {
+    -fx-stroke-width: 7px;
+    -fx-effect: null;
+}
+
+.default-color0.chart-series-line{-fx-stroke: green; -fx-opacity: 1.0}
+.default-color1.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
+.default-color2.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
+.default-color3.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
+.default-color4.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
+.default-color5.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
+.default-color6.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
+.default-color7.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
+
+.default-color0.chart-line-symbol{-fx-background-color: green,green;}
+.default-color1.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
+.default-color2.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
+.default-color3.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
+.default-color4.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
+.default-color5.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
+.default-color6.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
+.default-color7.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
diff --git a/src/main/resources/com.application/GUI/graphical_user_interface.fxml b/src/main/resources/com.application/GUI/graphical_user_interface.fxml
deleted file mode 100644
index 4d8f5c5..0000000
--- a/src/main/resources/com.application/GUI/graphical_user_interface.fxml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<?import javafx.scene.chart.CategoryAxis?>
-<?import javafx.scene.chart.LineChart?>
-<?import javafx.scene.chart.NumberAxis?>
-<?import javafx.scene.control.Button?>
-<?import javafx.scene.control.Label?>
-<?import javafx.scene.control.Menu?>
-<?import javafx.scene.control.MenuBar?>
-<?import javafx.scene.control.MenuItem?>
-<?import javafx.scene.control.TextField?>
-<?import javafx.scene.image.Image?>
-<?import javafx.scene.image.ImageView?>
-<?import javafx.scene.layout.AnchorPane?>
-<?import javafx.scene.layout.BorderPane?>
-<?import javafx.scene.layout.VBox?>
-<?import javafx.scene.text.Font?>
-
-<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="700.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1">
-   <left>
-      <VBox prefHeight="200.0" prefWidth="150.0" BorderPane.alignment="CENTER">
-         <children>
-            <Label prefHeight="17.0" prefWidth="150.0" text="Tree Species" />
-            <TextField />
-            <Label prefHeight="17.0" prefWidth="150.0" text="Width x Height" />
-            <TextField />
-            <Label prefHeight="17.0" prefWidth="150.0" text="Sawsett" />
-            <TextField />
-            <Label prefHeight="17.0" prefWidth="150.0" text="Desired moisture level" />
-            <TextField />
-            <Button mnemonicParsing="false" prefHeight="25.0" prefWidth="150.0" text="Finish" />
-         </children>
-      </VBox>
-   </left>
-   <center>
-      <LineChart BorderPane.alignment="CENTER">
-        <xAxis>
-          <CategoryAxis label="Time" side="BOTTOM" />
-        </xAxis>
-        <yAxis>
-          <NumberAxis label="Kwh" side="LEFT" upperBound="25000.0">
-               <tickLabelFont>
-                  <Font name="Arial" size="10.0" />
-               </tickLabelFont>
-            </NumberAxis>
-        </yAxis>
-      </LineChart>
-   </center>
-   <top>
-      <BorderPane prefHeight="80.0" prefWidth="700.0" BorderPane.alignment="CENTER">
-         <center>
-            <AnchorPane prefHeight="78.0" prefWidth="700.0" style="-fx-background-color: rgba(12, 76, 81, 1);" BorderPane.alignment="CENTER">
-               <children>
-                  <BorderPane prefHeight="50.0" prefWidth="700.0">
-                     <left>
-                        <ImageView fitHeight="50.0" fitWidth="50.0" pickOnBounds="true" preserveRatio="true" translateX="5.0" BorderPane.alignment="CENTER">
-                           <image>
-                               <Image url="@moelven_logo_m.png" />
-                           </image>
-                        </ImageView>
-                     </left>
-                     <center>
-                        <ImageView fitHeight="30.0" fitWidth="125.0" pickOnBounds="true" preserveRatio="true">
-                           <image>
-                              <Image url="@moelven_logo_title.png" />
-                           </image>
-                        </ImageView>
-                     </center>
-                  </BorderPane>
-               </children>
-            </AnchorPane>
-         </center>
-         <top>
-            <MenuBar prefHeight="25.0" prefWidth="700.0" BorderPane.alignment="CENTER">
-              <menus>
-                <Menu mnemonicParsing="false" text="File">
-                  <items>
-                    <MenuItem mnemonicParsing="false" text="Close" />
-                  </items>
-                </Menu>
-                <Menu mnemonicParsing="false" text="Edit">
-                  <items>
-                    <MenuItem mnemonicParsing="false" text="Delete" />
-                  </items>
-                </Menu>
-                <Menu mnemonicParsing="false" text="Help">
-                  <items>
-                    <MenuItem mnemonicParsing="false" text="About" />
-                  </items>
-                </Menu>
-              </menus>
-            </MenuBar>
-         </top>
-      </BorderPane>
-   </top>
-</BorderPane>
diff --git a/target/classes/com.application/DataProcessing/NonlinearRegression.py b/target/classes/com.application/DataProcessing/NonlinearRegression.py
deleted file mode 100644
index 5ff2459..0000000
--- a/target/classes/com.application/DataProcessing/NonlinearRegression.py
+++ /dev/null
@@ -1,3 +0,0 @@
-print("This line will be printed.")
-
-print(locals())
\ No newline at end of file
diff --git a/target/classes/com.application/GUI/graphStyles.css b/target/classes/com.application/GUI/graphStyles.css
new file mode 100644
index 0000000..bbef3d5
--- /dev/null
+++ b/target/classes/com.application/GUI/graphStyles.css
@@ -0,0 +1,23 @@
+
+.chart-series-line {
+    -fx-stroke-width: 7px;
+    -fx-effect: null;
+}
+
+.default-color0.chart-series-line{-fx-stroke: green; -fx-opacity: 1.0}
+.default-color1.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
+.default-color2.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
+.default-color3.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
+.default-color4.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
+.default-color5.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
+.default-color6.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
+.default-color7.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
+
+.default-color0.chart-line-symbol{-fx-background-color: green,green;}
+.default-color1.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
+.default-color2.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
+.default-color3.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
+.default-color4.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
+.default-color5.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
+.default-color6.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
+.default-color7.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
diff --git a/target/classes/com.application/GUI/graphical_user_interface.fxml b/target/classes/com.application/GUI/graphical_user_interface.fxml
deleted file mode 100644
index 4d8f5c5..0000000
--- a/target/classes/com.application/GUI/graphical_user_interface.fxml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<?import javafx.scene.chart.CategoryAxis?>
-<?import javafx.scene.chart.LineChart?>
-<?import javafx.scene.chart.NumberAxis?>
-<?import javafx.scene.control.Button?>
-<?import javafx.scene.control.Label?>
-<?import javafx.scene.control.Menu?>
-<?import javafx.scene.control.MenuBar?>
-<?import javafx.scene.control.MenuItem?>
-<?import javafx.scene.control.TextField?>
-<?import javafx.scene.image.Image?>
-<?import javafx.scene.image.ImageView?>
-<?import javafx.scene.layout.AnchorPane?>
-<?import javafx.scene.layout.BorderPane?>
-<?import javafx.scene.layout.VBox?>
-<?import javafx.scene.text.Font?>
-
-<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="700.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1">
-   <left>
-      <VBox prefHeight="200.0" prefWidth="150.0" BorderPane.alignment="CENTER">
-         <children>
-            <Label prefHeight="17.0" prefWidth="150.0" text="Tree Species" />
-            <TextField />
-            <Label prefHeight="17.0" prefWidth="150.0" text="Width x Height" />
-            <TextField />
-            <Label prefHeight="17.0" prefWidth="150.0" text="Sawsett" />
-            <TextField />
-            <Label prefHeight="17.0" prefWidth="150.0" text="Desired moisture level" />
-            <TextField />
-            <Button mnemonicParsing="false" prefHeight="25.0" prefWidth="150.0" text="Finish" />
-         </children>
-      </VBox>
-   </left>
-   <center>
-      <LineChart BorderPane.alignment="CENTER">
-        <xAxis>
-          <CategoryAxis label="Time" side="BOTTOM" />
-        </xAxis>
-        <yAxis>
-          <NumberAxis label="Kwh" side="LEFT" upperBound="25000.0">
-               <tickLabelFont>
-                  <Font name="Arial" size="10.0" />
-               </tickLabelFont>
-            </NumberAxis>
-        </yAxis>
-      </LineChart>
-   </center>
-   <top>
-      <BorderPane prefHeight="80.0" prefWidth="700.0" BorderPane.alignment="CENTER">
-         <center>
-            <AnchorPane prefHeight="78.0" prefWidth="700.0" style="-fx-background-color: rgba(12, 76, 81, 1);" BorderPane.alignment="CENTER">
-               <children>
-                  <BorderPane prefHeight="50.0" prefWidth="700.0">
-                     <left>
-                        <ImageView fitHeight="50.0" fitWidth="50.0" pickOnBounds="true" preserveRatio="true" translateX="5.0" BorderPane.alignment="CENTER">
-                           <image>
-                               <Image url="@moelven_logo_m.png" />
-                           </image>
-                        </ImageView>
-                     </left>
-                     <center>
-                        <ImageView fitHeight="30.0" fitWidth="125.0" pickOnBounds="true" preserveRatio="true">
-                           <image>
-                              <Image url="@moelven_logo_title.png" />
-                           </image>
-                        </ImageView>
-                     </center>
-                  </BorderPane>
-               </children>
-            </AnchorPane>
-         </center>
-         <top>
-            <MenuBar prefHeight="25.0" prefWidth="700.0" BorderPane.alignment="CENTER">
-              <menus>
-                <Menu mnemonicParsing="false" text="File">
-                  <items>
-                    <MenuItem mnemonicParsing="false" text="Close" />
-                  </items>
-                </Menu>
-                <Menu mnemonicParsing="false" text="Edit">
-                  <items>
-                    <MenuItem mnemonicParsing="false" text="Delete" />
-                  </items>
-                </Menu>
-                <Menu mnemonicParsing="false" text="Help">
-                  <items>
-                    <MenuItem mnemonicParsing="false" text="About" />
-                  </items>
-                </Menu>
-              </menus>
-            </MenuBar>
-         </top>
-      </BorderPane>
-   </top>
-</BorderPane>
diff --git a/target/classes/com/application/DB/Constants.class b/target/classes/com/application/DB/Constants.class
index f5909ab5d7a461cab06b56f7142d8e1181ed9157..63ce6b6ba5f67a9529377d76c676478db897eb76 100644
GIT binary patch
delta 2109
zcmaE^Kf|E@)W2Q(7#J8#7+!HPSTM|BXPC*wzyzXaaWR-O%;sWXVVDCFnG0gg0}=B%
z7#4s;7J@j7I2aa#=p`HsOF0;paWE|BU|7Myu#$se6$is=4u&;c3~L$IaWb$ltmk0Z
zz`?MQgJBZ~!)6YKEg-S2T=fhr4BJ2kYzGlLI2d+vFzn)B*v-MP2c%#x2g5!Py`O{O
z02jkShC^HohZ&B5SVuv^$2b^{gXj|=;v|ST1tLy^h%@XAXW1FfaWR}{xWL6=!f=tD
z;SwVQcZk1>V`Ol=i(`l@BZH97#D59)f{rd;p}`^XL9XsWuED{c{(g)Mj4q4}yw3S~
z#U+V(C1Hs<rKxNVVhmuw$iNj4<nQI`91`#8!ohHPat)&v<CV?J8DB6lUfn!_WiBgo
zK10D|11?jGYYf+U7-|{Hc^Gam+~i^C0kIkx${86r!xD3HQ%f?Fi+LDsG2G^1XaR{b
zdzWYMFmy7MPoB%w$$f{1;TpqT9)?hcu*rtp_M$NiVLS|dAS3!g#3Yao*~tsIWG64;
zwh~EW2xDa63`$MR0lSumA&Vhw@&|4S;d?v`_Zc3rGd$#Bc*O9Shv5ms)5+32zTD4v
z7@jk{;9<yTc)7WlC!2{;ZSs9S(|RWcMh0gF1_mYu7Y0cNHwG&>-<?5{!Gpm8&i7=H
zWbi_g_hyh}@IjOJMUv-dkYw;f;tMcHGWa9$1sNn60_u?jgcu|l0+IM443Z2%NPJNS
zNrqq~3qu$rL4n1<$Pf<pKm>y%LnM-VDF#V~C?vi#gCs*V5?_`<lA%6^Aq>TUSR@PL
z7$h0uku)eVNHQcK@s$}Q84{8BARi?m@j)I+M&he5NHU}#@l_cl>lsp!ECl%|4b4I6
zNE*}`BpEW0_#hu;BJn{!%0knhjU=DLAjy!6WM3YG4?hDFLq0<R10zEr0|SFG10w??
z0|NuA)^-NQjo?r%VqjnZWq$?+J_Z&B0fu4*1_mC8B8C!%QU(SFPKGjuat0=b!pS~@
zX1*ZxLJTYn3=C-u91Q6Uq6`@f$_$xseH;w33>6HO3=9laP?I1c)eH>Kc&uUI0%anw
ziHRcOlb;EyAeoxaz`;<!Ai+?`putdtWU3NF9h#{ik$SkP4Gf$NjZk-n3+W=6SjND?
zP|hI8P{AO@P>E!s2!@FuktVo_%?w<id<=HyMIoPhkk929*cliYY8f~f>KFtW>KUXM
z8W@xr8X0sLni(t^T98aPW@troFGvL0bWVmghIWwY3=9l1;1FkEVA;eVv4Mesfsp}Z
z8yi@(0}^gL3>^$ypwa}SW%3GPvp|p%F$Pu!28JF64u)O^L54mCDTaOqWrj&e4v}T(
zLURa61l1wk5Qj|G7ZH^OnF_IZ8pL9-y*<#NO%$<43fegg91L?ABpBu~XfVu2vQvqn
z7tKzP2x?^YK}~!qf*e_k88{f0FbFa%WsqW6hGZfrYETmuNCepzTnznC6E6yBP3{#{
zLW;0e3>*xr83Y;DFi0`1Wl&~V$DqTofx(htBa#iq3=`1Y3=%=Mfs<h(B%DwqObtE4
zwnD-U5@C~|j<OO%j<B5!91Ob{1Q~WSNHOeTP-fVN<Pceg$!HD%iJ&@U3dA9k4~ij2
z*dd6;3>^#{3{xSQe)4BAJw}$vO5#0?MU&TyD~g*lxG~r>q%(vvbTGs)FfvR7mjcrP
DL7F)G

delta 2074
zcmbPX@La$C)W2Q(7#J8#7@l!4STIasXPC;xzyzYFaWR-OOy^=?VVD6DnF(Ue0ui%0
z80LUP=7Ko$I2h)G=mi`M3pp4TaWE|AU|7Pzu#|&g83)614u%z63@aH{aWb$ltma@?
z!@;nYgJB&9!+H*e4Ir_NT=fhr44Xg(Yz7fqI2g8aFl^&s*v`SQ1EgRl2g5E9y_<t!
z4;RB;hJ9QN`xy>^SO-DEhd3AxgXkk5;wXqX1|p7wh!gA#C)pWJaWR}`IK#zY!f=+I
z;T$6acZk1>V`Ol=i(`l@BZH97#D58LTmeD;Uarm|@t!V>47|?ydBr7(c_m?qIi;x_
z4Cg1$Wz=H4u=xbz3ns>kn>Vt|Wo6E0$eA3-WomJW;W7_HB||X}!xe_BJPaKmRxLv@
zBLinxVoq*qNoH~}55qNv>pTn%AW>%T@(dn^R)*rq`?xx}Z}2c&Vz|k}5XcZTIf&a{
zG=d?BhoK8(L^p`&1L=^Re2`0a@?mZ(ktBv7Mh4EH)WjUHyLcGV7=k7X@<<5Z;$gVW
zaEG1YE)T;!hWk7W4;UU!w&C&Re#FD@nBfTzLpH<H%~N=?nHW_k@tf9LF)%VXF)%PN
zF*q|wGPp1}!1=BWk_>JP2zhq~Nd^xzc~2yHeg;VfFC@MIgCv7D5?_!(lEDXwFT^0p
z;9HL*Ai^NY;D^K)Wsqd>N3t-0K@t=;42%rHU<ZdVNHT;Xsh47qWC%mzOEX9^gd_1~
z86+7Z7=lpr*GD2*5XB(L5RIfki9wPf28plCAjuGm#0U8(4v7!)Q9Ke~g+Y=b0g125
zAjy!3WM2S-WIaO?nv0T=G^jI3GNd5!K|V@F;)8sYhNeFqNj`%?k|7hx!Yl@U1}27V
zh8zY)hFk^)24e;rMg~R(1_oBG?F@_?!J(SRz`y{?%nS^C3@i)+4EYQU3_K7;3<V5@
z3=9mM3`GpZ3``8UlWPUdd_n4k7+4q>7?K${7*ZHS8B!UP8PeeTI2dFZN*GER7#PZ+
zCP75X85p4PSi!&r$}=DnCka_28JNSs!H~-!!H~zG!H|z+pb|qBnt>pZYPf+l44e$L
zP$zZ>=^~j}%)r4=!XU^{${@v1hGe1$hKV4NI=G4T3|ycb3v%M*DWY1Fb%d4bK^~W5
zU}s=psAAw?sAdpks9}&|sAW)QsAJG!Xkf5pXhgEXn4uBP%^(qE8#o!77@9#gFfcI4
zfCHR?fn^he#0CZi21W*uZERrCR!Fe%Ftjjmfyxe$mdQ7T%>qG6#28o^7#KPkI2gJZ
z1R1&+q!@Y_lo|Sw93somhUO5E2&zNcAr6_GAR;OYG8JO+WQfIJdpjV(J4r}<@=6gE
zq!6CTz`-z!L4sj6g9gJKBx{uzI?=2JiJ-<=7sSxXQliLlwt#_yVIhMc!y*PLhQ&xG
zf?^0YS%E~5J;KG%4K;C!s1H(nEob0hSivC3u#!QFVHJZi!)gW{hP4cq4C|0gH)iNT
zb1z5)*>p~ZUPv&Z#+Mp;d~JdR8zjE^pbp9wGXpya5?|XGI2g7w2r}$okYd=$pv<rv
z$sw`~{b&vWiJ&@U0yc+epgUwg#32kV3>*v-8FE-ag}`JLaXm)1$-&}1jCqqEh%1Vl
YFt{<;Fr+gCF?29QGB7es0v8IC0bpAx=Kufz

diff --git a/target/classes/com/application/DB/DB.class b/target/classes/com/application/DB/DB.class
index 9d33fb5ed445c83a81f92756eb4ca1881531e601..81a03bb8dbe778db793157c21df0e3c30776a0df 100644
GIT binary patch
delta 4043
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
JF&t&%1OURkVBP=#

delta 3742
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
a2Py^`^%;&bFfed2Ff#BlG%*}u;{*T=ULNlN

diff --git a/target/classes/com/application/GUI/LineChartFunctionality.class b/target/classes/com/application/GUI/LineChartFunctionality.class
index 074d021597c64fa7a2a3e9ef449d69717f744a45..319d3a1d0580e0b3b0197b741a90a29fc96b1028 100644
GIT binary patch
delta 5954
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

delta 4710
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

-- 
GitLab