From f044fd764452230fd5bd873e43f1363687af3bcd Mon Sep 17 00:00:00 2001
From: rojas <rojas@N619>
Date: Sat, 17 Aug 2024 15:17:48 -0700
Subject: [PATCH] Update

---
 .../homework2/Romero/README.md                |   8 +-
 .../homework2/Romero/RomeroClientHW2.java     |  54 +++++---
 .../Romero/RomeroHandlerThreadHW2.java        | 116 ++++++++++++++++++
 .../homework2/Romero/RomeroServerHW2.java     |  92 +++++---------
 .../Romero/TcpExample4HandlerThread.java      |  89 --------------
 .../homework2/Romero/images/MOTD.png          | Bin 0 -> 13177 bytes
 6 files changed, 184 insertions(+), 175 deletions(-)
 create mode 100644 assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/RomeroHandlerThreadHW2.java
 delete mode 100644 assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/TcpExample4HandlerThread.java
 create mode 100644 assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/images/MOTD.png

diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/README.md b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/README.md
index 2384842173..2ae29e8cb8 100644
--- a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/README.md
+++ b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/README.md
@@ -8,12 +8,12 @@ Modification to TCPExample4 to show the Message of the day (MOTD), depending on
 
 The server side sets up a server listening for incoming connectios. 
 
-When a client attempts a connection to the server it sends the day of the week for the current connection.
+When a client attempts a connection to the server, it sends the day of the week for the current connection, based on the client's day.
 
 Once received the day of the week, the server reply with a message according to the day of the week.
 
-Phrases taken from
-
-https://www.divein.com/everyday/monday-motivation-quotes/
+Phrases taken from: <b>https://www.divein.com/everyday/monday-motivation-quotes/</b>
 
+<a href="images/MOTD.png"><img src="images/MOTD.png" width="700" align="center"/></a> 
 
+Message of the dayreference: <b>https://en.wikipedia.org/wiki/Message_of_the_day </b>
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/RomeroClientHW2.java b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/RomeroClientHW2.java
index 9cc3217221..205fca1666 100644
--- a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/RomeroClientHW2.java
+++ b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/RomeroClientHW2.java
@@ -11,24 +11,16 @@ import java.time.DayOfWeek;
  * then checks how long it takes to read the single line it expects as a server response.
  * No fancy footwork here, it is pretty simple and similar to {@link TcpExample3Client}.
  * 
- * @see TcpExample4DispatchServer
- * @see TcpExample4HandlerThread
- *
- * @see <a href="../../../src/TcpExamples/TcpExample4TerminalLog.txt" target="blank">TcpExample4TerminalLog.txt</a>
- * @see <a href="../../../src/TcpExamples/TcpExample4SequenceDiagram.png" target="blank">TcpExample4SequenceDiagram.png</a>
- * @see <a href="../../../src/TcpExamples/TcpExample4SequenceSketch.png" target="blank">TcpExample4SequenceSketch.png</a>
- * 
  * @author Don McGregor
  * @author Don Brutzman
  * @author MV3500 class
  */
 public class RomeroClientHW2
 {
-    /** Default constructor */
-    public RomeroClientHW2() 
-    {
-        // default constructor
-    }
+    /** 
+     * Default constructor 
+     */
+    public RomeroClientHW2() {  }
 
     /**
      * Program invocation, execution starts here
@@ -36,12 +28,22 @@ public class RomeroClientHW2
      */
     public static void main(String[] args) {
         
+        /**
+         * Using DataInputStream and DataOutputStream to convert bytes from an 
+         * input stream and converting then into Java's primitive data and vice versa
+         * respectively         * 
+         */
         DataInputStream in;
         DataOutputStream out;
         
+        /**
+         * Getting the current date from the client, and getting the
+         * specific day of the week.
+         */
         LocalDate currentDate = LocalDate.now();
         DayOfWeek day = currentDate.getDayOfWeek();
-                
+        
+        //Cheching the day of the week obtined
         System.out.println("Current date: " + currentDate);
         System.out.println("Today is: " + day + "\n");
         
@@ -49,15 +51,27 @@ public class RomeroClientHW2
         
         try {   
             Socket clientConnectionSocket = new Socket("localhost", 2317);
-
+            
+            /**
+             * Creating a DataInputStream and DataOutputStream objects that reads data 
+             * from the input stream of the socket connection and writes data through
+             * a socket connection, accordingly 
+             */            
             in = new DataInputStream(clientConnectionSocket.getInputStream());
             out = new DataOutputStream(clientConnectionSocket.getOutputStream());
-
+            
+            //Specifying the dar of the week, in string format
             out.writeUTF(day.name());
-
-            String mensaje = in.readUTF();
-
-            System.out.println(mensaje);
+            
+            /**
+             * Reading and printing strings from the server: 
+             * message1 reads the number of client
+             * message2 reads the MOTD
+             */
+            String message1 = in.readUTF();
+            String message2 = in.readUTF();
+            System.out.println(message1);
+            System.out.println(message2);
 
             clientConnectionSocket.close();
 
@@ -70,4 +84,4 @@ public class RomeroClientHW2
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/RomeroHandlerThreadHW2.java b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/RomeroHandlerThreadHW2.java
new file mode 100644
index 0000000000..dfbaa2e748
--- /dev/null
+++ b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/RomeroHandlerThreadHW2.java
@@ -0,0 +1,116 @@
+package MV3500Cohort2024JulySeptember.homework2.Romero;
+
+import java.io.*;
+import java.net.*;
+
+/**
+ * <p>
+ * This utility class supports the {@link RomeroServerHW2} program,
+ * handling all programming logic needed for a new socket connection
+ * to run in a thread of its own. This is the server
+ * portion as well, so we artificially invent what happens
+ * if the server can't respond to a connection for several seconds.
+ * </p>
+ * 
+ * @author Don Brutzman
+ * @author MV3500 class
+ * @author Rene
+ */
+
+public class RomeroHandlerThreadHW2 extends Thread
+{    
+    private final Socket clientConnectionSocket;
+    
+    /** 
+     * The thread constructor creates the socket from a ServerSocket, waiting for the client to connect,
+     * and passes that socket when constructing the thread responsible for handling the connection.
+     * 
+     * @param socket The socket connection handled by this thread
+     */
+
+    RomeroHandlerThreadHW2(Socket clientConnectionSocket)
+    {
+        this.clientConnectionSocket = clientConnectionSocket;        
+    }
+
+    /**
+     * Program invocation and execution starts here - but is illegal and unwanted, so warn the unsuspecting user!
+     * @param args command-line arguments
+     */
+    public static void main(String[] args)
+    {
+        System.out.println ("*** Please run RomeroServerHW2 instead.");
+    }
+    
+    /** Handles one connection
+     * @overriding run() method in Java Thread class is deliberate
+     */
+    @Override
+    public void run()
+    {
+        
+       /**
+         * Using DataInputStream and DataOutputStream to convert bytes from an 
+         * input stream and converting then into Java's primitive data and vice versa
+         * respectively         * 
+         */
+        DataInputStream in;
+        DataOutputStream out;
+        
+        try
+        {
+            
+            System.out.println(RomeroHandlerThreadHW2.class.getName() + " starting to handle a thread...");
+            
+            /**
+             * Creating a DataInputStream and DataOutputStream objects that reads data 
+             * from the input stream of the socket connection and writes data through
+             * a socket connection, accordingly 
+             */ 
+            in = new DataInputStream(clientConnectionSocket.getInputStream());
+            out = new DataOutputStream(clientConnectionSocket.getOutputStream());
+
+            //Reading the day of the day from client
+            String messageFromClient = in.readUTF();
+            
+            //Displaying in server side the day sended by the user
+            System.out.println("\nClient connected on: " + messageFromClient);
+            
+            /**
+             * Displaying a message of the day or welcome message when a user first connects 
+             * to the server. The approach is the first step after creating the socket 
+             * between client - server.
+             */
+            String messageOTD = "";
+                
+            switch(messageFromClient) {
+                case "MONDAY"       -> messageOTD = "\n\"Mondays are the start of the work week which offer new beginnings 52 times a year!\"\n \t- David Dweck";
+                case "TUESDAY"      -> messageOTD = "\n\"May your Tuesday be like your coffee: strong, smooth, and full of warmth.\"\n \t- Unknown";
+                case "WEDNESDAY"    -> messageOTD = "\n\"Wednesdays will always bring smiles for the second half of the week.\"\n \t- Anthony T. Hincks";
+                case "THURSDAY"     -> messageOTD = "\n\"Thursday is a day to admit your mistakes and try to improve.\"\n \t- Byron Pulsifer";
+                case "FRIDAY"       -> messageOTD = "\n\"Every Friday, I like to high five myself for getting through another week\non little more than caffeine, willpower, and inappropriate humor.\"\n \t- Anonymous";
+                case "SATURDAY"     -> messageOTD = "\n\"Saturday is a time to enjoy the small things in life, and to look back on the week with gratitude.\"\n \t- Unknown";
+                case "SUNDAY"       -> messageOTD = "\n\"Sunday clears away the rust of the whole week.\"\n \t- Joseph Addison";
+                default             -> messageOTD = "\nError while getting the day of the week";
+            }
+            
+            //Writing the MOTD to the client, according to its local day
+            out.writeUTF("\n**********************************************************************\n" 
+                        + messageOTD + 
+                        "\n\n**********************************************************************\n");
+
+            out.flush();     // make sure that it indeed escapes current process and reaches the client
+            clientConnectionSocket.close(); // all clear, no longer need socket
+            System.out.println(RomeroHandlerThreadHW2.class.getName() + " finished handling a thread, now exit.");            
+        }
+        catch(IOException e) // either a networking or a threading problem
+        {
+            System.out.println("Problem with " + RomeroHandlerThreadHW2.class.getName() + " networking:"); // describe what is happening
+            System.out.println("Error: " + e);
+            
+            // Provide more helpful information to user if exception occurs due to running twice at one time
+            if (e instanceof java.net.BindException)
+                System.out.println("*** Be sure to stop any other running instances of programs using this port!");
+        }
+    }
+}
\ No newline at end of file
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/RomeroServerHW2.java b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/RomeroServerHW2.java
index 7242113e1d..d58d620e96 100644
--- a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/RomeroServerHW2.java
+++ b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/RomeroServerHW2.java
@@ -1,6 +1,5 @@
 package MV3500Cohort2024JulySeptember.homework2.Romero;
 
-import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.net.*;
@@ -9,86 +8,55 @@ import java.net.*;
  * This server program works a bit differently by creating and dispatching a
  * new thread to handle multiple incoming socket connections, one after another, all running in parallel.
  * This advanced technique is often used in high=performance high=capacity server programs.
- * 
- * @see TcpExample4Client
- * @see TcpExample4HandlerThread
  *
- * @see <a href="../../../src/TcpExamples/TcpExample4TerminalLog.txt" target="blank">TcpExample4TerminalLog.txt</a>
- * @see <a href="../../../src/TcpExamples/TcpExample4SequenceDiagram.png" target="blank">TcpExample4SequenceDiagram.png</a>
- * @see <a href="../../../src/TcpExamples/TcpExample4SequenceSketch.png" target="blank">TcpExample4SequenceSketch.png</a>
- *
- * @author Don McGregor
  * @author Don Brutzman
  * @author MV3500 class
+ * @author Rene
  */
+
 public class RomeroServerHW2
 {
-    /** Default constructor */
-    public RomeroServerHW2()
-    {
-        // default constructor
-    }
+    /** 
+     * Default constructor 
+     */
+    public RomeroServerHW2() {  }
+
     /**
      * Program invocation, execution starts here
      * @param args command-line arguments
      */
     public static void main(String[] args)
-    {        
-        DataInputStream in;
-        DataOutputStream out;
-        
+    {                      
         try {
-            ServerSocket             serverSocket = new ServerSocket(2317);
+            ServerSocket            serverSocket = new ServerSocket(2317);
+            System.out.println("\nServer has been initializated ... ");
+            System.out.println("\nWaiting for conections ...\n");
+
+            RomeroHandlerThreadHW2  handlerThread;             
+            Socket                  clientConnectionSocket;
             
-            System.out.println("Server has been initializated ... ");
-            System.out.println("Witing for conections ...");
+            //Counting the number of connections
+            int connectionCount = 0;
             
-            Socket                   clientConnectionSocket;
-            TcpExample4HandlerThread handlerThread;
-
-            int connectionCount = 0; // state variable
-
-            System.out.println(RomeroServerHW2.class.getName() + " ready to accept socket connections...");
-
             while (true) // infinite loop
             {
                 clientConnectionSocket = serverSocket.accept(); // block! until connected
-
-                connectionCount++; // unblocked, got another connection
-                                
-                in = new DataInputStream(clientConnectionSocket.getInputStream());
-                out = new DataOutputStream(clientConnectionSocket.getOutputStream());
-                
-                String messageFromClient = in.readUTF();                
-                System.out.println("Client connected on: " + messageFromClient);
                 
-                String messageOTD = "";
-                
-                switch(messageFromClient) {
-                    case "MONDAY"       -> messageOTD = "\n\"Mondays are the start of the work week which offer new beginnings 52 times a year!\"\n \t- David Dweck";
-                    case "TUESDAY"      -> messageOTD = "\n\"May your Tuesday be like your coffee: strong, smooth, and full of warmth.\"\n \t- Unknown";
-                    case "WEDNESDAY"    -> messageOTD = "\n\"Wednesdays will always bring smiles for the second half of the week.\"\n \t- Anthony T. Hincks";
-                    case "THURSDAY"     -> messageOTD = "\n\"Thursday is a day to admit your mistakes and try to improve.\"\n \t- Byron Pulsifer";
-                    case "FRIDAY"       -> messageOTD = "\n\"Every Friday, I like to high five myself for getting through another week\non little more than caffeine, willpower, and inappropriate humor.\"\n \t- Anonymous";
-                    case "SATURDAY"     -> messageOTD = "\n\"Saturday is a time to enjoy the small things in life, and to look back on the week with gratitude.\"\n \t- Unknown";
-                    case "SUNDAY"       -> messageOTD = "\n\"Sunday clears away the rust of the whole week.\"\n \t- Joseph Addison";
-                    default             -> messageOTD = "\nError while getting the day of the week";
-                }
-                
-                out.writeUTF("\n**********************************************************************\n" 
-                        + messageOTD + 
-                        "\n\n**********************************************************************\n\n"
-                        + "You are the client numer: " + connectionCount);
-                                               
-                System.out.println("=============================================================");
-                System.out.println(RomeroServerHW2.class.getName() + ".handlerThread created for connection #" + connectionCount + "...");
+                connectionCount++;
+
+                //printing clientConnectionSocket object
+                System.out.println(clientConnectionSocket);
                 
-                // hand off this aready-created and connected socket to constructor
-                handlerThread = new TcpExample4HandlerThread(clientConnectionSocket); 
-                handlerThread.start();// invokes the run() method in that object
-                System.out.println(RomeroServerHW2.class.getName() + ".handlerThread is now dispatched and running, using most recent connection...");
+                //Sending to the user the client number, based on arrival
+                DataOutputStream outServer = new DataOutputStream(clientConnectionSocket.getOutputStream());
+                outServer.writeUTF("\nYou are the client numer: " + connectionCount);
                 
-                // while(true) continue looping, serverSocket is still waiting for another customer client
+                //Thread handler                                                                
+                handlerThread = new RomeroHandlerThreadHW2(clientConnectionSocket);                
+                Thread thread = new Thread(handlerThread);                
+                thread.start();
+                                
+                System.out.println(RomeroHandlerThreadHW2.class.getName() + ".handlerThread is launched, awaiting another connection...");
             }
         } 
         catch (IOException e) {
@@ -101,4 +69,4 @@ public class RomeroServerHW2
         }
         System.out.println("============================================================="); // execution complete
     }
-}
+}
\ No newline at end of file
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/TcpExample4HandlerThread.java b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/TcpExample4HandlerThread.java
deleted file mode 100644
index de26af4091..0000000000
--- a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/TcpExample4HandlerThread.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package MV3500Cohort2024JulySeptember.homework2.Romero;
-
-import java.io.*;
-import java.net.*;
-
-/**
- * <p>
- * This utility class supports the {@link RomeroServerHW2} program,
- * handling all programming logic needed for a new socket connection
- * to run in a thread of its own. This is the server
- * portion as well, so we artificially invent what happens
- * if the server can't respond to a connection for several seconds.
- * </p>
- * <p>
- * Warning: do not run this class!  It is created and used automatically by {@link TcpExample4DispatchServer} at run time.
- * </p>
- * 
- *
- * @see <a href="../../../src/TcpExamples/TcpExample4TerminalLog.txt" target="blank">TcpExample4TerminalLog.txt</a>
- * @see <a href="../../../src/TcpExamples/TcpExample4SequenceDiagram.png" target="blank">TcpExample4SequenceDiagram.png</a>
- * @see <a href="../../../src/TcpExamples/TcpExample4SequenceSketch.png" target="blank">TcpExample4SequenceSketch.png</a>
- * 
- * @author Don McGregor
- * @author Don Brutzman
- * @author MV3500 class
- */
-public class TcpExample4HandlerThread extends Thread
-{
-    /** The socket connection to a client */
-    Socket socket;
-    
-    /** 
-     * The thread constructor creates the socket from a ServerSocket, waiting for the client to connect,
-     * and passes that socket when constructing the thread responsible for handling the connection.
-     * 
-     * @param socket The socket connection handled by this thread
-     */
-    TcpExample4HandlerThread(Socket socket)
-    {
-        this.socket = socket;
-    }
-    /**
-     * Program invocation and execution starts here - but is illegal and unwanted, so warn the unsuspecting user!
-     * @param args command-line arguments
-     */
-    public static void main(String[] args)
-    {
-        System.out.println ("*** TcpExample4HandlerThread is not a standalone executable progam.");
-        System.out.println ("*** Please run TcpExample4DispatchServer instead... now exiting.");
-    }
-    
-    /** Handles one connection. We add an artificial slowness
-     * to handling the connection with a sleep(). This means
-     * the client won't see a server connection response for ten seconds (default).
-     */
-    // @overriding run() method in Java Thread class is deliberate
-    @Override 
-    public void run()
-    {
-        try
-        {
-            System.out.println(TcpExample4HandlerThread.class.getName() + " starting to handle a thread...");
-            
-            // get the connection output stream, then wait a period of time. 
-            OutputStream os = socket.getOutputStream();
-            PrintStream ps = new PrintStream(os);
-
-            final long TIMEOUT = 2000; // 2000 milliseconds = 2 seconds, 10000 milliseconds = 10 seconds
-            System.out.println(TcpExample4HandlerThread.class.getName() + " pausing for TIMEOUT=" + TIMEOUT + "ms" + 
-                               " to emulate computation and avoid server-side overload"); 
-            Thread.sleep(TIMEOUT);
-                
-            // ps is the PrintStream is the Java way to use System.print() to pass data along the socket.
-            ps.println("This message was written by the server " + TcpExample4HandlerThread.class.getName()); // TODO insert socket count here!
-            ps.flush();     // make sure that it indeed escapes current process and reaches the client
-            socket.close(); // all clear, no longer need socket
-            System.out.println(TcpExample4HandlerThread.class.getName() + " finished handling a thread, now exit.");
-        }
-        catch(IOException | InterruptedException e) // either a networking or a threading problem
-        {
-            System.out.println("Problem with " + TcpExample4HandlerThread.class.getName() + " networking:"); // describe what is happening
-            System.out.println("Error: " + e);
-            
-            // Provide more helpful information to user if exception occurs due to running twice at one time
-            if (e instanceof java.net.BindException)
-                System.out.println("*** Be sure to stop any other running instances of programs using this port!");
-        }
-    }
-}
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/images/MOTD.png b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Romero/images/MOTD.png
new file mode 100644
index 0000000000000000000000000000000000000000..d0784b97a259305b353d5bba14404e9786897531
GIT binary patch
literal 13177
zcmcJ0WmH^Uv*sZ}kO09USkOSw;EhWN?(S|un&6GU!4e1rch}$q2n1^^SfdHS-3ivv
zxX($xJKx-yb$`sAwdP0f)9W01_wHS_tDbtE;)9xsEDqLFEC2v-<mFyz0KmN&06?q6
zxCh>$o#f{LFPJWJ`fdP#NATx`Mw^b}0f1+K{3}T<@0q=M<1MC1|Ea^HJ7oU2gU$qE
zr;jskr$zor@5~IQlkse!`m=W-LjTO4<9|<4&N-EtiJRlymdPchRb(MDC3;Z!@Spe8
z@x)T6$|R&j^qO`b7vH?Iri?BB`7Mq(_v?v;eA$gEC$)o6TIx~y;zcHp?eL(VxbEHE
z5x3h$2G8boR;t@DrIz-(#<#QGo50iJz+C`n$12!6!|PWA04^u1+UdKKCClVE$Cu-t
z03dO(a&;3<<J11u;{gCD?VE{vTG7n!(h~td(3knM+3XU_Ps%%@N7Y1OHTM86&X@jP
z*IwxYKK%1|-E)sDb}<0pNJFY^WC|ag{0ojgP~P$5$B)_(v72BTkw6z0mjU)-l}w+J
zjt<G2{q=#7*3+4?imD93x2Ve<s3Y8W-eYpn?`U=hujQcAt*Y&|)NLPpAozA=;xaxw
zJiJ(?)%Pwn*`(<jHNYvf3C?u3OxqR+Jc$MzPJU@FULJ`Du62`gPFA(-IYHYtvsC8-
zu15Cn{I3sXIgEX3PAW_<68Eka?>?m?7hJlO+pe1LmZ!d04mVDk2A-(iu8A8rqSD;<
zE1SjKk*(R~;;?xSfq)I3z`Di0$+p|Vs(_QXn{&nDH?mht=m3Un(D+4q+r=p<{9rM&
ztg?AOEc^C19wn9WO<CLJ#`-|u-BvzchUit*!o_f)S|IA+;D8GGt@ZXSjKcYi({`e+
z$>qLRTfn4o+g8TaK-;zHmEHs3RP5yN3=6s7dwP4L^|TY;EDC;HD4SWvpT2rFfA;9g
zklkzX=EsQtzBmo|MW|%)z|-BfN^#ir`N`}a@~Yl#h_AQG2zEoU=)F?e9Pp!YJAKhF
zFCbP4z1o&~y6I&&Bsdl~sNWcVJ%`Qdw+K0N6ZdMOK7Bju<TdxUH#3<-^r97cbK+3d
z>a+KCa?ey;$Y-^r7_J?7){1O(tA&`{`R-I8MTD9z2YHgS{7--Dn!pZG>uqf}r`i6$
z3u$&6@XX{5&?Lh419&u2?&mxZzh1_^5?9H(?%&vX4(@TGqN<Me$xp@Ps@Bu`n@G^g
zGk-R4d*pf;d3{CrT!p{Q<7}ShW`&gIwnre#`(m92G<EjvRC3$(LvC`tf<ZJuz#)jS
ztat?6YA1NW$u@<!^F98_U!2s!p1b}?-@qFr-y|i}X>V9q{QNs%_T8`-+|%9NedT+F
z_=zSG8cIJjEtHv{_VkYlwVT$Hyms%r_ZyLXrgyhzcc0vxYasz+%20>zG?O=%RoU?~
zkwbiK2iSLOtfm(<!;Q_zTRDOAsYe33mDhKWF7RjM3oHt$yaf)-$pN!|=ceBqUadR+
z!;QsRmy3aCUaEVheyIK`v7<r8&ACjk+pe2(<5oPsrEF?SN@xDwGq)f^m8_N_h}X&X
zcyab^wA(%+aq{jI+P0G+40`^CH5p)cmlC_Uk?YewcZ1^0zM0z;^Ib<cd=f#K{y9xQ
zevIEF#(_H*uttBEchRqF>VHw2eG`1SXnI-bD|WqX>fp5ZJYXeh@v8N1YfchMd2}Rx
z_X&RbwRh2b6=C`5W>T|w;btY0vju`!%O`rk#hH2^V4;K^d{I=&K-<{gg9c9epWWON
zs`}mjEJTW2?T%fMBEPK;`yy|wyo_r~g-Y+lgoL)|m%dmoc&=`wLvNxM&yQC>iKDKM
z?z{rgHf9{E?nc9JFCK}Xk1%7Hy+%C(K2o72A=mn6#cmG+FM24d+Rj(jp@CPdfrq4~
zezzC4l_sqkflC5`ns2;9yu?pR0w;aeMUfY&ssX4)_%#a86t>>&Pzeb*8fu`XbkQUO
zmN9~Ers0r)0e0m1L3rSvthmpG;o@cXC$Y<R=*>i1<9-uG&(vg;K-Raz9>O(9HUEa8
zNC<uV_MF?u^e6w_)!|0VUNRG`XQ?TF?_*IJxea|?yBFl@qDl%zLq|8{^pzoJ_u!tn
z1s53TxV78vl8`z$Z9W@#EW}{ItKY5&5b+F=T}K0gGETqr-ah?c&Aj8>FzeiaNyy;n
z(l86z{JD>tMlgLBOS?IAg-DeH+CRSwubJ?dKrLXb_f2=CpUDv210vNgUzs*hvJoWT
z0A|l9?Tsrx8xC&l%=gq?IG>&DdCs=haX?35l|9%Lj{Y*!D|kgNE~b*P@dxZ(hC`N)
zRM6q?SKHD&=JwJ`i!ywsqQA5pX(>XbRZ?1kYJ*4G+KoLfac;IMJI&<lBVv$OF#^mX
zEc3(CTj?j_+WxKTtcP&8_?EyI*I-1$F{DcV+DzWwbDsU}I{Y17-vTG%ia4*(<}rR#
zY)TUvP^O`s$eZA?_+ZjfQQ8-yqdeUbV(_y?Z?ia~H7%Am7ebzJe*RA7oZUa9bT0P5
zndkhyQpE+sy`b?Kj41oT@zBHvjIH7HH2E2=tLv(z{_EE|N(FQeLSdx}Tk;P82hS}B
zCB82Y2mQx8YZ^QR-MfMdjUKTAL0K*Z(+UV<8`P=$1Wq0Ip?pn4Oa|1yOe~`#orN(0
z^|^mE8HG}L094!KS+{yGUoRB|<*=}KDm{V)tGqPqE!mWO><P3k#u1u!4nB1o9{7;#
z7T{8gU|~;FqAuq`<o2qF%D(RF`LdH66An~!Rpge7F86UqkBOW<1OO{sS=?lIN27Ig
zz$}`CIGQ<}(>*w4f(Fd|#Y3IZy)Ip$zPzB%?8LBv2qA<X0L;b-7RyUWdvN^+qWs3b
z3nY6J$T0R~1T4l|5KwCke^mHZ)tHQYry9O?#jT_{5~y>p)<v+Vg!)*AS|+nl(TO`Q
z+4av~aW;kUCAjk3ll$6N19N`Xbs#AiS00t~FkAQTOFha07gD$zDU<e(%5@hh4n?kw
z1v!6kqG2tw?U9E$Oaa!fvV3@~(tumCY#X)l%_lxr$-H#Y%6`(7%1GsxmyxrbvWa=H
z6qQ^e#e5X&q%Ku+JjK_VL{q08J=VrL4HdE-0h&jmCQt4s1b7s{E`FRD)$JP&We-$j
z4|f_$`Km)rRbF@MefKhg_o$?HGO&kMs5$mO!PV#BY)t6gnh%a<tx+3%#OG<v+BUPs
zRwb_hxk%*c#CGv0c+OAbH_^X)PDgg}%`xhioOp_3D1i?~=v{e6H~Xn$V#W2F_}Uf)
z=X{^Bi7R^c<ENO_buI-krt{%=8Jm!eZ||Z-on9+zGk23Tu$zZcs-O@$0bl#|O;QzM
zA8r1z=hn-WUWC;C!VWtUt$av|kPA((R&Fqk;mmDG(sfc`U0-`IBO&-xjCNf|NzlUy
zN=y*TplW`N-pi5ja%QaLw9wC4y`IRX%yC{hQQygtf~`71HX`D^%-`b#+1w7lHfeEL
z;D6e7f_7sF_Xt4`Kg8}o$Xv^%NSGAlE*`CR*O*};7#0_{=W<FDiH$cGej_bPR3j>%
zOQbRF7@ko(Gvx|D(4e*qerb7xvq{QTQChk^l`l@2`lI7O(ZZ9N8;}s7OkL!0(2I!x
zQ9?CW`gGwph<*^<iGx<I_Pmb}Xy5I^Z{o$m2A_pnp@EJ_2@YjC--n)>v#;sn1+XoD
zTa)CM>?eb^3@=@~n6B`MqjU0xLL7c6sm8><AqtvKz1{B9DDEe6HNvF0%uC7}$!KLf
zPF6IgBL|Ewr1dAS-&58k6Wwd~>B5JN_xbR>wl!G$an{t*Zh?GL;mU1L_8RwgYj=KW
zsi~~9!LfJ!C;O|iyRQ`^3k!bOH~O5M`6VNt7kH=MR9)1(QX(F2OT3QpPlOaPhn~pu
zebo&#0!T_)U+gsU6hBI5-_)n`srDG-bgsCI*g)n)>$geXG>7#xOk<@Bf9e={WDRWy
zAM-K`rZQK{RG(n9-ouH|kxqUwnavVhm~jx}#E0-q+f<?rBDb$V2)Wc2on0q4Pvy`g
z%dq5rao|VHKhGnMQxAjZ3LM5CzYMcV*Cg{P`lv-Ai!i^@u3S^b3R?g2iRyR#v*5Ni
z+aKSEuCN^^#BmfA{f3X3M-udDP;$kPWa*$2vw3_nVa$NWdjNMRef{P*7`-myXml~j
zt)t~gQYkDM7EX08h=rFMywjMf8TN9^NjWnnA0yAAOm}YDm!3#1T0Md(sFad3BUa<W
z6MATLz4{7V(B}AA8MuAd8^sa455{r)e>~n-Tu5L#yd>($W+BIIoQ?gYn-I)WmpSke
z`p~9=FX8KRO8r4T%(NFl@ekYCI%8#`sFqjQCD`tnMe{2PrQB#+P=}z|NyTh@kj?`A
zLY^{K?K4n}83Z%W<NOat*{RoGQzzyYQYGuA6PIODMXXEmqX^|GNw3j>-!2|juflMJ
zX9u4hl`g!Z1%lR+U>*h69JLulp4sEFQ)obnAmwi{m5Bz&&zhXf_TGx|9~WpYRg4;4
zxemi*N3JfR%W++1=!mkwZR~DJ3i5iA+9_thY#rCvx9H{|w4<<Nr(v74d9kLIad*IT
zSyHglhFi)qcHw(-ZU-xzXrfBsj+#E-pqDz({<{tW0FF(mUY?!7or_G;9PikNYI$sq
z6`Md)J}$tSF;-h5PNfJ26Ebi$73<taXY}|psp5E`1Bs-(J!U$;XgyfXNff2>VRHVu
z+JC5)#JH-013dE*{ORYSbVkb!$CbYWT6~1pzti<+F9_`PqJ`-IS^gLRtCyN~qFZG^
zAF>;Jb6uXYf;3%J0oh>meemfbJS{s`b0s}!HT@$!@`p=bYd&uRB=tr9S^~C1&Pjm8
z@WN=rTHXVIO<P;rW0y9RerK0rixds$qlvD5!RiIBC}qkVxsKLQL>vAv`V|^rrp@2#
ze>C&t9f&JvohQH_(+Sp8)y_%U`a2KXH1YZMZoQ+|8kYwixQV?A@IU0e(3GQQQterC
zgdL4V*6`uNuw<r^_hKNd|0GEt*{5EMWP7Ocm-eAYo^pr<V)b`9_A{?}55RJ?QT}gr
z?y;wLj`hknyDE9*B^O5B(|H<gM*@sj@frly_`cOx$RV73zBivkVSuZ>e=s<Zds=z;
zf)itBHiwgZgW5nZZgDaTm)dm{QD48SeBvwQZt5yZ$wwYcEaB}}SENR;5KAudrVG=-
znQ{fYJL$-k8j%<k8XZ)5T3Wt2oH21$ju_UcweV4!+%eoY)<ZYBBlL4&zv%dmO%pG`
zY?T1TmW)j*x=(U@@--K+%54Q*D<rys|J?Ai;$BllsOQYxJ&f{wPflPiXdY~kUKeUH
z02{jCxEn|mFE?_~o=}EPYT(h-ilSSaC-d^$C17HmNC~5_OJXAV(|`13ywv6ILg%|u
z;8S?(Vw!uwpYqr=cW_158#O1VH{C;)s)%v#cm`wB34|()4;eRjdwE6kZGM@-)+xDD
zJw=VogZs~{#VSRn%fwl2eFBtCrU3@`En(;Yv|Gn6Hk1yWoiH>6XQO;7<5g{$BY=e^
zn^w{0x4;yLGP?LwL#Q$3?@&;DXXUIU%TDBP9l2<R@@Ir_P%qkvwJ}vW@`(NpviKTa
z1E!Y%mwQs92_!Jbwra`Zl#10~N5beMfk)`;(+@aY&?7SNa`W9E$=V5ZZ^@ZsWZCqL
zlC2j)ta2kRT}@PS&6ljyxD&|7)Axcy=|0lo37s6vW|rP7NRvnw+2jjnYg<<oX^5{T
z_!rEv2(W*va3A1`bg@z&DPN|04ghX-pIr*z6Np044Q;Gyt5<0sfL`i}+Yd4!5`y5M
zGvr!ZWMT&)HV>YD{SQN6#uV9KgbUPQ!iD1ewiRgI%w0VXHvI8J0Wi`Z=a##-M|QYB
z2P7l}^Yr<7-90)tf?p?6xJzSaF&S09ttKSKbvmffqN=VAsE3-y?!=r1IB;!hQhCf+
z^)225l*;~<EPN^6-aw6LHSl%xai0pW82-@L`#pVn)Y_0u(&TbOxGfz&+5F&J%TUL6
zuM3ioG=pf?&M5<Q?%l_uEB67b34=tBv02)2OGT$oWd|M}*uy$tc8c415UhHQ>ECdb
z6Q9!6piN<T>I%CLkl4_>vvaKAyYD<!kaDB%g4bAo%bod1S^@wY>!Xw3NpBxJ6UkNb
zi>PA&IXJRu{$Z4{3`k>}dE><Fb9K$nRs4*$oM?oAQlV(V$x7%^uqMO1qB^^clyfHG
z$HNnExAke$D&?k<FWAkGoz<{Hao#Mv*((#~()sqA$8*?0;d=vpt}8kt{0a@M8w{lN
zeLG{VDW4l-gVw>6B{>;<%25v*O*Rrsc6;Z*=qYHQ*ZkPR)KX7ClWqPdBswGDK&N|J
zhciRA`j1;K%g0o|*_$M%i87lvWdZ4^hMJ-GBw3#<hfRvp_bHB_F#zo$xc-^1T03pf
zhca#6%Y@v@w}t2)u~tAaq0{_RY_X$kGjMGstk91?85W+TUhp#~CtuKt0YMs__(vYG
z*OE#oy#iQY+Vgvt(OU7C^N{|2fs~dMAD$P?bH4)B<#LTozSDv0rfA&TzmXUH_Wn)W
zdn*_DiP8C}Goq|D(mS^W<@eLNJWL0oKLl>gTO?T$Xwp_SMBrpV402npp?|-!GSkoa
zU>|9@sBko-#-fe1FqBay`$$(Fly`Sh<u}>TVchlkt*XP1<i|fWM&V?f_kh|KA-e1L
zgBNA3E>h1YTS~P|`QPvI;Y?y0WHunlIZEjIMpuU@rR&gho@4?NznA;W1Y)+y?cp?V
z=fPQ4`Do@N(X_f|3gjEfot`0Ymd7)<pWl)J&j@y+mBuo?pu7x=W?^~-kRaY!(Wd~g
z+;{I{qdYDD9|nK7>(|GIY60AKxQeKyDn3_8O$z|XKt7iuAiCmfXLG4z75l|kno}RV
z^g{3+_!my!)HP-7S5OY^`vto>eNct>O)VMNh6M=hHNA0t-Cb^AGaS`n^}YB3z!mlv
zG(M+n^j;Q$fdrmw82wy1hyn@e|6svCRY;Hvc>C`Fa%R9E;_P3E<!^TRdyM}M7_#8~
zzr!*}>4BB?f1rfFnDWm&|Hou(lSNlQof{l(o9CTnXS^I_EBr6wV%cG>@*oLw=CgA@
z_k*Lqg9~Q~uI(-|>6z^%P9e063+3h2oT(=6l&C32<p&+A8wUE8Mkn+3PS9~memQA+
znM!e|Ek5Og1xu>(#3H;0CQ2Bf-!1tC&!`Izj?*2!K8f54#M?Uisa$-Zvr$XjPS6<(
z@npBBnA2*r(Cns5@wnk7D$Ly+)^sxP{cSRk5cuLrEbzqfag;i8-T7i60%<4}*)qGg
z&D#HRveNf%PZ?I*NQ66-q`TTJaR@;+3lO<O%(=)VsfyK@>v0e=5N}(xsjr;LA!7{3
z?(a+3gJszMRJq@W0H$w38V!A6zO1c_Z}{KCg^5lK4@J+Gs6KDNo5D9{71_H~wJ)$5
zIXBm7is1Xtx18s_&(3|Y8TTHtE3f#*(*_nc+_O^&e_1(HS2>0OWn|+7$kw;tUlbR^
zlbvwNk6N?VUPvKNQYJVjJKFQ6BO3^&v7TytJ+Ih#jgYQA8J&J1p_W?^C1VjM*@g`;
zhSAd-H}35PIen4KYM$&AJ$dY_q#?B7>?>-kGW?W}eh!Xirn#jy5prh7H3b_@r(<He
zA0*Wk>v;Cb@--g^w;0!2ON*?bdRPD}EHw2516`VLLW_b{HDP*O*h0xWvQQS-q5@gv
z3}28T8g2v$<0UYfb$*XXY2c-2rB9ZOhi>u8K09S9xe7mEFHZS~ZlnccJLWN@O26`r
zOXqt{PLD#>+@gF9l8Aud`aIsrsE&_u#cvr+(VeOzwg)1uM*#+PZEY&w<8XTWzy`E@
z9op@+76di`RvuaU_bu>aS^*}Kmd9y|LQcf2zkj|t<g<+nCs8*6)D#4zx*i1QQGdH%
zLn@K_P5=IX%a8x>4n_OZuGsl>f_;_?bhk7p0z|(Kf;IEb{ZB2x+=!a8nvG}wJ{^89
z1Uy7fqFWdRx1zYV8|r7B1j6j#vp9S{i%}npL+1NGKwHQCGTSkLpx8eY{r|q1@P&pG
zg(K6&#nvzHklhS7t(-43m`vQ3z=Npq2SP3<3Dt&;f<zPfG~4+Uh5`s6Lw{C95Bm6k
z)Rdl-pp@eSpnc^8&)UheDK=iS33>VYL(eC&lRZZ6!(kpC@IX)1h1K}jPQ2=Q;64kc
zaPsJaM*S}1#~@RY#6($wtaq^oLq&)J|BvJ+;F~F~TJ(R#iy#k&#q!_La+#~fWE<<C
z3P2wYU$ShT=TE+$N}Bg4)lf#WQM<*V0nEx%gHO$;HM`P^=k+`0Weh^07yErroIps+
z86K>QpO$%Zs$5~xc58KJyj;=ot@zAvo_O6?b7j`GRT2Qy-bal(UFC%=;32z`ZyF5n
zKO!sS;LivCH36EXY?>~cUxy^J@9}bl&%lN-o6#P)c$ww*V%%F%a#*RwU1~Z2kVGEM
zdv(4)g}-Qc^2i_%jDFhxIo6)|!aK+-Uw$d%TP{3n4u*Qj7B}Ul@`ZscT#%HOwstQy
z$ohbIzaI>GF+7yZseIsfSo}Mb{@Y=KPTp`5aH{4<saFxw94D@^^mAS52Jo8A<dZO|
zZ;G_1?Cw>#wnmPI*qB|T^DVxx5^Hn`=+5v_@q5KsyM<QZy5;aDzLzcxT2cE2TWDJc
zX04~7G8Jl$tay&+o?liJLh+a#-;^6mznRl8w{IF7=<kf>b3YAZwk1&<u-&44y?yHV
z8%YvTEveiXo`j+kUR@AT(l7y@O{MtKU)Wk8Wl&nlU-?+uPb(2KzBC25Q)Fjh?+CJ6
z-Zro&Iz)QwOhKk`^~E%$c5+<;aNz4#4QE_vIXNK77QhFU^D=C>oL_jjM0o4tu&=1+
z3MbBYH+6I_@U0Tnj$~tiH%KF5)Zx-u2c(Tm*NNCNl~B0X`pEMVOjIhj9^QJ)=Z2rr
zFY7{kIRWOa?f0YkV=BLWr@y3oD_d!r!8|yh7GkBmL%~|C0N~@Y+}VsY^p%vLhSr&Q
zWQ|-_-{=mVo=M?7F3v7#{SyIP5|M=ku7t0*B9=D@mV`kHBPFqTOn?bjHi2EemMWP(
zj<4=~sN@mq`|rBOmx5+_byD`)i4*Gr(s3a;l?)OeIM)|MC|P{bay<WMIR`Qhp|{#8
z4cvm7U0l#^fsj!V^H&RIow<RX=tE=gcn|Yjo8oJS%YV1Z3!LkqH0qs3WvYHM6@#M@
zsU}|Nkz$Hk5rj8M^8SC$z}MW-@!8J6bL^nT5c)_1^eEpu;0s0&WQOgxSz4{HojDrh
zfqj<X8Ya*g`yC%M6w4(INJ*Bi0h8+=uL{!MY1EJ3gVzL<=3=L+m(L|fW+jy@R@s!U
zExG;n$$mm~%qx8Jaj4GC+9@=yo*HXJfULv<d!&;J>G*Txn8Q4HqgEsS%cTe@g4Hgq
zf%~Su8{_p0qMW%h`k~@4pIX1a@oKEz$5Nbcu*ibK{aO8mtp{*&_hLRN+L=5$Qj2eG
zg+NlI-0CM+BYlg-PDl`PCu$~%&INYDU5=a=EOKEYgSC>g`X$pvv?HO3i@dY}qewba
zYDBRKN(wCkS9XI@y4`BOVNK7f8gopR!9I}8ULz%Ud~D5ct7Shn>t_a6Xg}xmRP;-x
zq1NyWzu<mLd}WwNS!?cV%+Q~{+c@Z7Upf(~5e?8E^G1qz25z7awHc4lzw<Yj9p#Jb
zfHJC@4}Kb!r;ZRN)4iCGQVwABbFp6<P2Eo08a<#~4f#h4g>&g#)CaXLQ-9f}S9JON
z;UEj8eJDmnn<1?nPuzij*{p<sDa|T=NBv0!PgMl__2Zfwx(rX+q>XoHm$AHQ86!F*
zt;Dk~OY?HAjbC*_@n&>8omI!~6|g6a;xLhO=5bbuXtSc2^%`k*uw(~sK8qbdzqUy|
zAiU6Isxy7*H!$aiQDKg1h-l(oD+BD^!~(l<=M84Ml*En&&2ztJBv#Op!m$k`Sq61F
z;_#d})|Ai`FlAp0J^Fd8!B+a5|M75gSG4x}vX;4KX@Fd`Vnh>%hT~fd>C6bx(~gk0
zaTb|aR0zbF?Vva!e$#Lb-M2SdO@8B?&@WC(UytP|<k>R^!MKWtm<9%BT=MfH-znwR
z*rrP?@Q1tux}LNwh==U5*Ak|AOzN4fY$j$~z9N{nb@U(=e#YFZ@HZWm(V%<}J7G5n
zaY^Wf&C3wyQIRq8gGfuZmkdz1Ks=eooKzS&?@&gpda@*8Sk25EtvFWE)~ju%pD~ZY
z2aE8*e0={+_0qz-IgH3BO!~XSA{YjyCWzPcOwdHzbvYP@(&y4rq0=oqS?)VA(Cb<8
zWW8;0z(l4eAsFZO!vUl_sLcm*VokxE2l+Pz^8XG}{~fFUg57`dDURtAcg^#|kcN5Z
zP+h;%Y^?zA7tQk=+NkYSs;ke2!rSaQ`-c7Tlgh7K*Y$~R<i=kIzI$Me(s1KurZGs=
z&wdWU?w+)96=M7SEk+ViM!!y4P$eB@&vEwCc`o_OZ2CJe(Gt@9=>?eg$LzNYU^Pb>
zq#J`&v`PQ)A%j8gsMNCi(zlqUZH%OutbNaB=Utjh&7zb34G;Xw7v;4eO}B>5gdyuV
zc^3-BS+KLat@+f5^W!?g<t<-7xi+-zEUm(?FIPa!;BC)mCrM;aGbdBO39W$R^sG;r
z02|?UE~h);&m~_*CIP8nxvrApl02z6DQw1z3v1Sd^Xy-po-65`Zq4|2?29{LW0DKH
zH~*wWuxGQ>kIhZUcPx#LVm+A8dIB$;UV>LS1uP_eyzHuIo5yG{-i{*MuQ(1UOQ)Ep
zU>y30rSN9vs2KO-I|T?cUi0%dS5x@py3`?9H;<$pQD^V{ie#%Am6G=j!08#9*NXCg
z**+;*^hSo>FnxhpUo2Qk^^rA}v}J4^jBHHUU6_RdF0@icDW67g6W$zqa!+AC<J@L#
zIa00&XJj4CdCY`Fr-)V>eWRo`Sa<mN?dw$H_6*w2Ppfs~W(7LD=GKJhn<N9C@`4*u
zH8HeO&qJ-2`$D2lKE|nQt@z)6m1JxpIoZ?;f2MA*=j7RbnCxkRTb<$A<>mjjWGESx
z1x>Y$sIVx$Nm?aQ;s|%;lKZB68=92D9dRub(!+Y;kLG59g*4#K=7bpXyTa=thJJGu
zyA+&}q#@sB<-UqP3k+q*Kd{TmFxOdsBq4=$@&Ssoh3{<sQOL8vtGrz<+$i9oUG#ls
z2D<)Kibxg(|L&}7_oXwFnBdaV3^zP6&wj|+fi#}cAHL_>Pr&mxJpIk%z%x8j0X6aE
zzPq|Hl8nF&DcXS?%)$&mrUcYCbR>ec_u!8NNDw}z%&p)-(8yvlfdRAQNJ#m9Wy6c1
z&FlJ)tTk+1gvw~{S9ixuWws=bp6~PisPjKoPCON^R?^lU{~{YGC`HZw`^^KG+;Grk
z^>F@@QmU?CCyxVgNo|&f$S}_nz7Qcbq9Whnom#behBvl>PX3NDlf`~)B$b=<Z=Go!
z`v0xoq@S(3UEK4m&;@Zc@{vJR)r50HI+VmCUg*ur83ocAa(q&^UZ@nt$tXn^>d&Zp
z-Kmn7qhQ!6pTPCf4XUyA)XZ%QTdaO|?-r>OB&8jn-vF~#7bsa}45+R>V^lqth(mF&
z{q(*<G<L+P=B;&0#%q|V-}^a^pA(~3;QZdJ**GiPsNVQVP8B6Fz|2aC&ymNwh%ydI
zXe$)iO!qfwxTCN%bv30(`*^<VkvYq8wQm%Efk?o!fwsyH<rcQy(iXT>w>VCA`L;3c
zD&9`&Oj`^mbR6$EBrF>u;+dt1`AqMV)JO@QC^&2I@=csoj1twOY(J*gro>9;)@-xN
z-t;dRiohpBq5Tvee}C54E4y{sK~AW|?+zrLUz$RW;vZlQStU#tJx<c?RHRR9ihXgo
zF*7?0OLs`vFr4?7vC%4h@pNqF{6&z<Ht|Bi6r5OJW@o?WZEtuPy?mv_Woaz(WWvL{
zEAcufiFFo^el+S*E8?`0h%Y@%!I<(wK~Y1-@-*?Fg}UUeo(XIk7s8akMr$#@BM<5c
zfu+Z{FSaM30=LzOj4Oo&j^udna$08cs@IA7y6Z;{aC2*vG`}s86A?O9k_#PUwuE{o
zTu!9@;%kd^5p8EiXY59l#Cq@AWyRc5$ko#mLkQ2CU#8G{wx_Gb+MwtOuhM@GkMW-#
zt}4;sGmnpJp~Vudw3y{(_{+%ecl2^VHmL)){sA@ZhNhT>{oE_Gp<kbJ(Dq`xx_NfX
zntK;?<327oFq-g;eNR%aZ^R6i-VZ&dh@iJak8-_Dz6DEEFG7Pwkc(q38(UH<==*Jt
zg0D$^fKZ|809RkTbS@2pc!IjB6n)*+O|~&7lJdWa3saWEL{OEQ7Ntuy)T?pyhCEb}
zn6XOD?9ZWzDH>XN_X0;$JK+UZ3fN7>Vpu6U!>P<M#F4*Y@?Gmkx32miwg8ypB=nat
z{#@I?|KVHOzt5D_FlC2+v+0}}?~cY#SEL=L%Y;l$nr<81h7#3XD>c{IW6$VX-GclQ
z%9WDd_jfMB9rSFe<b`<BU{hN*?p~{r^;hiTnGn|YcO%~#L%KEhSeXLjpj<Er(}>As
zQJhoHXHTLF3m<==^4!({tqfZ>!L2<cku@_=UM$(Jq8~&zcREL`m!Xo0{Riy)LV6})
z4h0-mx$=fsPBQjod5CUp<DY!0{v$PK+7ydzVgAIf1l<`Mt>TUeCtULCxLMVbp?uy3
zGW!D)+z*_%E_ls`xEJLWrgcpEN^J9xW|6B7L?P%h3vvy3wR}SxIG1AfiY-h-QYm!L
zyFBS0`VTai)pFZvWNrt~YSr(;J<6q7gCP|0TIyYJEXaoy0XvQyt?9BV#lz+I=B68_
z_aJ3<e(|46rh-`*p0Fr5<RM?f&Ayo;)B-Xjukltop6e^YJ5o*bqeK=i%~y_$D-@4>
zcDNp8FV~#EiN7fSh?jHXYZaqxU-22{Af?KXF~B@+gHqshgupBlcn(945v-I(BHq)D
zUYB~U@6Qos%D1(y6aJoYV{TvHswz=1J|=!LY@P7YLpG-Bh8^+(D^meI$c<bkgdXCX
zympo5u@cL_nNAaL_|j0F<Byj9C6q{Iw%}KGU14s_X>|-@!p~vXjXeJip0%jghP%Me
z-7J}khBb0Z`?f+zzq9}uM8)@jsf^210^-rlpCcL|7Okn8O|F#dw3H4FPD8tpC!pa;
zl*sZZB%h9PIqlVYu6~Ukib7~6Af&k-KTF*FXm>h3d)1>w0SoRwa;c8Os+dBA^}S^+
z21KNwIsZH>u`C#k*-c!$$(&zyYoL};60D(>wcFw;h%t$%qyiooQGGCA{rD<6p;Mm-
z;Y}{soNr<dLwgVE%3z7EBiQ*0#AjSD|EN<Ef*L(U2lMHVO_jcu{KR!C=p1i}6Y*7K
zO&FA^Mk(l-z5cS*{kej9T2YW28Q)PIlZ|Y|l%bmU3nyV3Tu4+UD<U9>EMMk*?rU4|
z{sVlSS9_>8Cm4<ea48GYiO1@jcz>Br-bwBsV>2#YOct{u$!aHR;xkXgfQ@%Ee3+~<
zdD9n_(H7<Rh&Z7YG0#HU<x!OA<Www;g7(8w>hFDgtAiCEKE~1d!s?gVDb`4hKpllW
zMR?y+;slC*H<QJPr!zPSC4sT$3q1y6H+~iM8wH8J7#EA9)Kbx3q;@Ky$d`@ga@S_B
ze;>IO*hw?bbvXXAg{mc!r)5hvT9pBC)fpAh8}j6WdyhA?x9q7GpOQs5?z%x>xeQh6
z^;;sg!{HkY5yZ_e%KSL<&)%+G;mcn&V3pHJ8XIgS;lS(`9JdmK2OA3GY-?be6+)0V
z<A|gq$zF|L`Xw~o<x1CU(}pV4(OPIsRa0{srUgS}#nwAK9^=m~*h}s6*@_UGhpr}V
z>#oCyj-8`cRT3fsQ>oLWK#pGBpbSV=6-7!_*TUs5pIZ+<MzA62R~BESU!KtG?XHm8
zngduPFUuM&33W6tJpqJ7y<TVN6Z^OA^hvh<(~41?q8UZw!0q~x)SfLhCxZR5!CG!u
zyhh&z-$i3an?6UQwe**kk#hVn3=iL@Fy7Ar+u^Pm^-e*#?1z^_r?~9yxBrAo`qn8k
zKIwUf!$iMq?YF)pD8QSc9N!uXv+HAq$x0RnFS9G}eH{wMr~v3QH*!M>cr4|zG7HEH
zEcz-RkL^oQ(7{?tD>7+Hh)<%fu``!L<qt4KpYeZALvr*e_9GsJzvRb#|5%oP4MT#)
z@-`9A0{<CiC%(jXVzbw@?B37Qz`;t(bdME!yi@=eB(am+GR-D#$Vp>>S1b5F|G|it
z8|H$#2y!BQ^WnF9l^s}Ki*C^=hTG4Aq_CROTh~>UDV5AOq?!GI-wch*5&9_c{yMge
zol1pVU0H5jxT_8oht-d)hgDQs!@M*12uV^sj>!o(dQjA&9To=;wYju*{$CD4zm(Jf
z#a*QlH3v52^kMX<%TGgTxu$&F$8X2sWRR_5TjX{~u<qSEk~~mv4bavxMMtmTv18>N
z!t;VX9M8c?D~savl@?$&N*d*Sn*Krno%M7ILK7d(G5@Y&<Dn-`v9uD_5IHfJs}M<k
zP9C&4Qt=jwVMYJcX!GBjfZ10eeD(+JO}S`!=j_FcK53y-SSVM~Ynjq^s5B&?%&_xd
zZ>y8B*sIPTyBCd5`|==S&iin}_WKUxrBBm7DK_S-AC2nBB-%!ZQ8<xXv$_w#A2;G_
zvd7~U#g1ijk>`#?zlRK{;f|M<uN#pMsHM`WS}wm(JnIcHJX9X-IQ*195yjvXzfr>Y
z(B>D}rf#c5#$H^|hSCSsL?^B*E%tG<l}A;3QExr0O5uxhY;K0OaDL5)Xso{-9tBp!
zsrO5VgoX}~pC&%v8c9+NR;A~x{}E4^9SHxqJHz~RO5buGA5g@GZO+n0#hz~j;|4W`
z(f?Y-?7Aj!6|?0=R5?mvIei$psNmDu-M=4Zqs4sreT>aAc1BvC(?n2Qu*vriH;t!2
z<<Zy5eTYga=^zriJO8@y#W+~noiBeP`1L9UYV-qPLdfn<(s209mYW!ydb{j%r0;u!
z!4S4&yH2@IsV~~<7fK%>Lz>nJjXxqG=0nha<%qqxPc&xEtO`eJ6Dg1<edT{!Hd40*
z2v5+pFi}r_p_TJcPP=3Q?HWJYEjVzWi>o?zEqw{gc8^{@T%!&0Nb!#KmU^Q0vQHW?
z`(G^^6L5XP<8NOv`+qA5lQFtw^{MI%=x}Thr(vs_qcl`ZM4Mn_jgc9laeKVkii!^<
zO8h;nNH#r(6N3iyJ-%I|eW<18CO<k(`f|i&L#oJ5l=sBUoWEA36`5*i$*X-ha+X%$
zo9@ePlPLvAq`4G$;lOiFghFMt1}J#X<fTw+x>9F_Mh-t2jj_jD=5lM)LaYSmUu2_d
zJ2gY`U0I5aHFWeQbo6>=>#I66Cd4B|<-e-y0M^u(u8B_w+jHSmCF!5`rL(qG(M9j%
zr*euaj{Uzi$Q&_FwQw%Stb1(Xw4Lu5*WK!P-gm|Fb(7x5@D<on%&l-v;d$XijI(D)
zuNvN=Q7QXR9bMQ0)pTi8b;lY^P-7mb{#-`i&7o`)Kp=UvJddc76+6iZnInA1Z|M9>
zG!M1qxQI}Td>tW!?j{DSiAUO14;Qd2fEp>s=2R@fO1eCCDendC^T8;aCp@PO8yt5c
z<qS7XEgdO&$NrHNyg-IatxfEtiax)vn1JKt_&W5k{TLRiKc|Nl!%0cL`h2oZS?}oe
zNjZh4;pY5h60Ja!fLF*r8AAlR0cF=B8PzQcf@>*xzv=)?Fc^`hWd5!DPNV}yG9mL$
z&OWwQ=NlHhZI#zaTyBzflNl>IO#vJq%uUnmnKt;o8buUluh>p}Ywu^NXJHSEymQ5p
zF8jO@(|lIX3ned=6u=8r|LMw2SEgLLs$jy5;0c|TkmxThEw%iV<+28fG;8=wjc;Uh
zfc7_Cu{e--_W17sz&nKcKlHu-LfZQ;Sd;%Q1!LC8UvURYeQwUp^H@~{HH#=Y3R4DC
z{g`+lNIxC5jp6?sf(Zoem{6gaKLYuZaQfLj&j#?->_0NuB&@bbWOouh^l938|J<3t
zquKnzGmbMf&G>8qHA-27BwmF3!PbS>7LfOVYO-*6_R>{OLBsup9nW!_imhUm*IUt!
zEal?UHxr-3=Vk_$qTfpafJ39u&z9G571+D;k&UaW#4kTKbl9Bo3uO6$Abe1eGBv~H
zuA5|z;Zu@NywEr;sH!_08G3#95)Z9;0P3e!@7}+PmPuRXiQ96n7QW4w=syCbm^$2m
zlR+B(yEgCT7K*fSy0$_Zue=PKmD!vF3n<njO#<H3zSIrEuVEkSaFxZZ%on0;6mY>D
z1gw89-Cn3YYg@lFVC4msS~8HSygXE!ctq3u3T*ueas-=+yYNJp{u(NU^51goe==7=
zt_fe{dM#K%@cwz+p0F(EHSWd%P99XgEZ3UgeTE0V{rl0sa;~12VCUce(s=vtE7-#k
zGhK8=Few8<ITa(SKf>`W!*m4KT%sb_#VXM=4q`m6FQ?<NrKLajmk6`ZA2fn;QQdN%
zf7?wexK^v#QE-(9wt<(u8&&r~X-a+;>Gnr9QgYPn6)dq}L=gc&iE`seu%Uln)K{Dw
fY<ns~-2r2K<v0^Azb!xx5RjKqc~vQ8_U?ZGPtFs}

literal 0
HcmV?d00001

-- 
GitLab