From b694750231fc3920ec65698fc7c0525dc05962bd Mon Sep 17 00:00:00 2001 From: k-romero Date: Sat, 8 Feb 2020 11:02:13 -0500 Subject: [PATCH 01/16] making first changes in calc --- .../scientificcalculator/Console.java | 24 ++++++++++++------- .../scientificcalculator/InputMethod.java | 6 +++++ .../scientificcalculator/MainApplication.java | 18 ++++++++------ 3 files changed, 33 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/InputMethod.java diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java index 83f0e97f..e37bfdcc 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java @@ -15,18 +15,26 @@ public static void println(String output, Object... args) { print(output + "\n", args); } - public static String getStringInput(String prompt) { - Scanner scanner = new Scanner(System.in); - println(prompt); - String userInput = scanner.nextLine(); - return userInput; - } +// public static String getStringInput(String prompt) { +// Scanner scanner = new Scanner(System.in); +// println(prompt); +// String userInput = scanner.nextLine(); +// return userInput; +// } public static Integer getIntegerInput(String prompt) { - return null; + Scanner intScanner = new Scanner(System.in); + println(prompt); + if(intScanner.hasNextInt()){ + int in = intScanner.nextInt(); + println(prompt); + } } public static Double getDoubleInput(String prompt) { - return null; + Scanner scanner = new Scanner(System.in); + println(prompt); + double userInput = scanner.nextInt(); + return userInput; } } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/InputMethod.java b/src/main/java/com/zipcodewilmington/scientificcalculator/InputMethod.java new file mode 100644 index 00000000..5e511c8d --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/InputMethod.java @@ -0,0 +1,6 @@ +package com.zipcodewilmington.scientificcalculator; + +public class InputMethod { + + +} diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index 5f421325..abf9fc10 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -5,13 +5,17 @@ */ public class MainApplication { public static void main(String[] args) { - Console.println("Welcome to my calculator!"); - String s = Console.getStringInput("Enter a string"); - Integer i = Console.getIntegerInput("Enter an integer"); - Double d = Console.getDoubleInput("Enter a double."); + while (true){ + Console.println("Welcome to my calculator!"); - Console.println("The user input %s as a string", s); - Console.println("The user input %s as a integer", i); - Console.println("The user input %s as a d", d); + //String s = Console.getStringInput("Enter a string"); + Integer i = Console.getIntegerInput("Enter an integer"); + Double d = Console.getDoubleInput("Enter a double."); + + //Console.println("The user input %s as a string", s); + Console.println("The user input %s as a integer", i); + Console.println("The user input %s as a d", d); + } } + } From 5d7d0b47b304b4f95c603da7abaceb2671aa5ce6 Mon Sep 17 00:00:00 2001 From: k-romero Date: Sat, 8 Feb 2020 11:29:50 -0500 Subject: [PATCH 02/16] created while loop to ask for correct user input --- .../scientificcalculator/Console.java | 20 ++++++++++--------- .../scientificcalculator/MainApplication.java | 4 ++-- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java index e37bfdcc..f183dea3 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java @@ -15,20 +15,22 @@ public static void println(String output, Object... args) { print(output + "\n", args); } -// public static String getStringInput(String prompt) { -// Scanner scanner = new Scanner(System.in); -// println(prompt); -// String userInput = scanner.nextLine(); -// return userInput; -// } + public static String getStringInput(String prompt) { + Scanner scanner = new Scanner(System.in); + println(prompt); + String userInput = scanner.nextLine(); + return userInput; + } public static Integer getIntegerInput(String prompt) { Scanner intScanner = new Scanner(System.in); println(prompt); - if(intScanner.hasNextInt()){ - int in = intScanner.nextInt(); - println(prompt); + while(!intScanner.hasNextInt()){ + intScanner.next(); + println("Invalid Input! Please enter an Integer."); } + int intInput = intScanner.nextInt(); + return intInput; } public static Double getDoubleInput(String prompt) { diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index abf9fc10..ee37ca51 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -8,11 +8,11 @@ public static void main(String[] args) { while (true){ Console.println("Welcome to my calculator!"); - //String s = Console.getStringInput("Enter a string"); + String s = Console.getStringInput("Enter a string"); Integer i = Console.getIntegerInput("Enter an integer"); Double d = Console.getDoubleInput("Enter a double."); - //Console.println("The user input %s as a string", s); + Console.println("The user input %s as a string", s); Console.println("The user input %s as a integer", i); Console.println("The user input %s as a d", d); } From 064ebbd6e6c85beb8de25417700feca28b886276 Mon Sep 17 00:00:00 2001 From: k-romero Date: Sat, 8 Feb 2020 11:33:00 -0500 Subject: [PATCH 03/16] updated file structure --- .../zipcodewilmington/scientificcalculator/InputMethod.java | 6 ------ .../zipcodewilmington/scientificcalculator/MathMethods.java | 5 +++++ 2 files changed, 5 insertions(+), 6 deletions(-) delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/InputMethod.java create mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/InputMethod.java b/src/main/java/com/zipcodewilmington/scientificcalculator/InputMethod.java deleted file mode 100644 index 5e511c8d..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/InputMethod.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -public class InputMethod { - - -} diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java new file mode 100644 index 00000000..1b514145 --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java @@ -0,0 +1,5 @@ +package com.zipcodewilmington.scientificcalculator; + +public class MathMethods { + //all math classes go here +} From a63c21ab770bcb7d59d839aa2db55d7d9d1c8b4e Mon Sep 17 00:00:00 2001 From: k-romero Date: Sat, 8 Feb 2020 15:46:24 -0500 Subject: [PATCH 04/16] Updated display and user prompts --- .../scientificcalculator/Console.java | 39 ++++++++++---- .../scientificcalculator/MainApplication.java | 51 ++++++++++++++++--- 2 files changed, 74 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java index f183dea3..d11eb13a 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java @@ -6,6 +6,7 @@ * Created by leon on 2/9/18. */ public class Console { + int total = 0; public static void print(String output, Object... args) { System.out.printf(output, args); @@ -16,27 +17,47 @@ public static void println(String output, Object... args) { } public static String getStringInput(String prompt) { - Scanner scanner = new Scanner(System.in); + Scanner strScanner = new Scanner(System.in); println(prompt); - String userInput = scanner.nextLine(); - return userInput; - } + String strInput = strScanner.nextLine(); + return strInput; + } + + public static String evalMenuOption(String m){ + if (m.equals("A")) { + println("your string is " + m); + } else if (m.equals("B")) { + println("your string is " + m); + } else { + println("Invalid Input! Please type A for Integer or B for Double"); + println("your string is " + m); + } + return m; + } + + public static Integer getIntegerInput(String prompt) { Scanner intScanner = new Scanner(System.in); println(prompt); - while(!intScanner.hasNextInt()){ + while (!intScanner.hasNextInt()) { intScanner.next(); println("Invalid Input! Please enter an Integer."); } int intInput = intScanner.nextInt(); + return intInput; } - public static Double getDoubleInput(String prompt) { - Scanner scanner = new Scanner(System.in); + public static double getDoubleInput(String prompt) { + Scanner doubleScanner = new Scanner(System.in); println(prompt); - double userInput = scanner.nextInt(); - return userInput; + while (!doubleScanner.hasNextDouble()) { + doubleScanner.next(); + println("Invalid Input! Please enter a Double."); + } + double doubleInput = doubleScanner.nextDouble(); + + return doubleInput; } } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index ee37ca51..87abcff6 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -5,16 +5,53 @@ */ public class MainApplication { public static void main(String[] args) { + //Greeting + Console.println("Welcome to my calculator!"); while (true){ - Console.println("Welcome to my calculator!"); - String s = Console.getStringInput("Enter a string"); - Integer i = Console.getIntegerInput("Enter an integer"); - Double d = Console.getDoubleInput("Enter a double."); + //Variables + int i = 0; + double d = 0; - Console.println("The user input %s as a string", s); - Console.println("The user input %s as a integer", i); - Console.println("The user input %s as a d", d); + + String operator = ""; + + //Ask for first Integer or Double + String s = Console.getStringInput("Please type A for Integer or B for Double"); + while(!s.equals("A") && !s.equals("B")){ + Console.println("your input was " + s); + s = Console.getStringInput("Invalid Input! Please type A for Integer or B for Double"); + } + + //Update Variables + if (s.equals("A")) { + i = Console.getIntegerInput("Enter an integer"); + //Console.println( i); + } else d = Console.getDoubleInput("Enter a double."); + + //Ask for first operator + operator = Console.getStringInput("Please type | A for Add | S for Subtract | M for Multiply | D for Divide"); + while(!operator.equals("A") && !operator.equals("S") && !operator.equals("M") && !operator.equals("D")){ + Console.println("your input was " + operator); + operator = Console.getStringInput("Invalid Input! Please type | A for Add | S for Subtract | M for Multiply | D for Divide"); + } + + if (operator.equals("A")) { + //Add + Console.println("Display:",i, operator); + } else if (operator.equals("S")) { + //Subtract + Console.println("Your operator is -"); + } else if (operator.equals("M")) { + //Multiply + Console.println("Your operator is *"); + } else { + //Divide + Console.println("Your operator is /"); + } + + Console.println("Display:", i, operator); + Console.println("Display:", d,operator); } } From 76568285e0b7321ed8ab76c4551a68fff04ca271 Mon Sep 17 00:00:00 2001 From: k-romero Date: Sat, 8 Feb 2020 16:28:56 -0500 Subject: [PATCH 05/16] Updated code with Sandy and Dave's methods / work now trying to figure out how to update their branches per the master file --- .../scientificcalculator/MainApplication.java | 17 +++-- .../scientificcalculator/MathMethods.java | 63 +++++++++++++++++++ 2 files changed, 74 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index 87abcff6..5165ff27 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -16,20 +16,24 @@ public static void main(String[] args) { String operator = ""; - //Ask for first Integer or Double + //Ask for Integer or Double String s = Console.getStringInput("Please type A for Integer or B for Double"); while(!s.equals("A") && !s.equals("B")){ Console.println("your input was " + s); s = Console.getStringInput("Invalid Input! Please type A for Integer or B for Double"); } +// public static int getNum() { +// return null; +// } + //Update Variables if (s.equals("A")) { i = Console.getIntegerInput("Enter an integer"); - //Console.println( i); - } else d = Console.getDoubleInput("Enter a double."); + Console.println(i+ ""); + } else if (s.equals("B")) d = Console.getDoubleInput("Enter a double."); - //Ask for first operator + //Ask for operation operator = Console.getStringInput("Please type | A for Add | S for Subtract | M for Multiply | D for Divide"); while(!operator.equals("A") && !operator.equals("S") && !operator.equals("M") && !operator.equals("D")){ Console.println("your input was " + operator); @@ -38,14 +42,15 @@ public static void main(String[] args) { if (operator.equals("A")) { //Add - Console.println("Display:",i, operator); + + Console.println("Your operator is +"); } else if (operator.equals("S")) { //Subtract Console.println("Your operator is -"); } else if (operator.equals("M")) { //Multiply Console.println("Your operator is *"); - } else { + } else if (operator.equals("D")){ //Divide Console.println("Your operator is /"); } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java index 1b514145..f3cd2b24 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java @@ -2,4 +2,67 @@ public class MathMethods { //all math classes go here + + //Java Math Operators + + // Addition + + public static int add(int a, int b) { + int result = a + b; + return result; + } + + public static int subtract(int a, int b) { + int result1 = a - b; + return result1; + } + + public static int multiplication(int a, int b) { + int result2 = a * b; + return result2; + } + + public static int division(int a, int b) { + int result3 = a / b; + return result3; + } + + public static int remainder(int a, int b) { + int result4 = a % b; + return result4; + } + +/* + //The Java Math Class + //Basic Math Functions + Math.abs() + Math.ceil() + Math.floor() + Math.floorDiv() + Math.min() + Math.max() + Math.round() + Math.random() + //Exponential and Logarithmic Math Functions + Math.exp() + Math.log() + Math.log10() + Math.pow() + Math.sqrt() + //Trigonometric Math Functions + Math.PI + +public static int Sine(Math.sin(input a)) + Math.cos() + Math.tan() + Math.asin() + Math.acos() + Math.atan() + Math.atan2() + Math.sinh() + Math.cosh() + Math.tanh() + Math.toDegrees() + Math.toRadians() +*/ } From 844f8d14f200ad807b704029d1208cad6423b476 Mon Sep 17 00:00:00 2001 From: k-romero Date: Sat, 8 Feb 2020 22:59:10 -0500 Subject: [PATCH 06/16] created new class Calculator, Updated MainApp to call new instance of object Calculator, Started to call methods based off user inputs --- .../scientificcalculator/AskNumber.java | 87 +++++++++++++++++++ .../scientificcalculator/Calculator.java | 15 ++++ .../scientificcalculator/Console.java | 12 +++ .../scientificcalculator/MainApplication.java | 86 +++++++++--------- .../scientificcalculator/MathMethods.java | 21 ++--- 5 files changed, 165 insertions(+), 56 deletions(-) create mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java create mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java b/src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java new file mode 100644 index 00000000..923cc705 --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java @@ -0,0 +1,87 @@ +package com.zipcodewilmington.scientificcalculator; + +public class AskNumber { + + // Ask for a Double + + public static double askDouble() { + double d = 0; + d = Console.getDoubleInput("Enter a double."); + return d; + } + + // Ask for an Operator + public static String getOperation() { + String operator = ""; + String operation = ""; + operator =Console.getStringInput("Please type one of the following \nAdd Subtract Multiply Divide Remainder"); + while(!operator.equalsIgnoreCase("Add") && !operator.equalsIgnoreCase("Subtract") && !operator.equalsIgnoreCase("Multiply") && !operator.equalsIgnoreCase("Divide") && !operator.equalsIgnoreCase("Remainder")){ + Console.println("You selected " + operator); + operator = Console.getStringInput("Invalid Input! Please type one of the following \nAdd Subtract Multiply Divide Remainder"); + } + return operator; + } + + + // Ask for a Number +// public static String askNumType() { +// String a = ""; +// a = Console.getStringInput("Please type A for Integer or B for Double"); +// while(!a.equals("A") && !a.equals("B")){ +// Console.println("your input was " + a); +// a = Console.getStringInput("Invalid Input! Please type A for Integer or B for Double"); +// } +// return a; +// } + +// // Ask for an Int +// public static int askInt() { +// int i = 0; +// i = Console.getIntegerInput("Enter an integer"); +// Console.println(i+ ""); +// return i; +// } + + + +// //Variables +// int i = 0; +// double d = 0; +// String operator = ""; +// String a = ""; +// String b = ""; +// int total = 0; +// +// //AskNumber.askNumType(); +// //AskNumber.askInt(); +// //AskNumber.val1 +// +// +// +// //Ask for operation +// operator = Console.getStringInput("Please type | A for Add | S for Subtract | M for Multiply | D for Divide"); +// while(!operator.equals("A") && !operator.equals("S") && !operator.equals("M") && !operator.equals("D")){ +// Console.println("your input was " + operator); +// operator = Console.getStringInput("Invalid Input! Please type | A for Add | S for Subtract | M for Multiply | D for Divide"); +// } +// +// if (operator.equals("A")) { //Add +// b = Console.getStringInput("Please type A for Integer or B for Double"); +// while(!a.equals("A") && !a.equals("B")){ +// Console.println("your input was " + a); +// a = Console.getStringInput("Invalid Input! Please type A for Integer or B for Double"); +// } +// if (operator.equals("A")) { //Add +// +// } else if (operator.equals("S")) { //Subtract +// //Subtract +// Console.println("Your operator is -"); +// } else if (operator.equals("M")) { //Multiply +// //Multiply +// Console.println("Your operator is *"); +// } else if (operator.equals("D")){ //Divide +// //Divide +// Console.println("Your operator is /"); +// } + +} diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java new file mode 100644 index 00000000..8900eec6 --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -0,0 +1,15 @@ +package com.zipcodewilmington.scientificcalculator; + +public class Calculator { + double firstVal ; + double secondVal ; + double savedVal ; + double displayVal ; + + public Calculator(double firstValIn, double secondValIn, double displayValIn, double savedValIn) { + this.firstVal = firstValIn; + this.secondVal = secondValIn; + this.displayVal = displayValIn; + this.savedVal = savedValIn; + } +} diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java index d11eb13a..7522603f 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java @@ -60,4 +60,16 @@ public static double getDoubleInput(String prompt) { return doubleInput; } + + public static double doAdd(){ + double result = 0; + + return result; + } + + + + + + } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index 5165ff27..10549474 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -4,59 +4,53 @@ * Created by leon on 2/9/18. */ public class MainApplication { - public static void main(String[] args) { - //Greeting - Console.println("Welcome to my calculator!"); - while (true){ - //Variables - int i = 0; - double d = 0; + public static void main(String[] args) { + //New User + Calculator user = new Calculator(0,0,0,0); + Console.println("Simple Calculator!"); + /////Print Starting Display + Console.println("Your current total is %.2f", user.displayVal); + //Start Program + while (true){ + //Stores Operation and then clears operation on loop String operator = ""; - //Ask for Integer or Double - String s = Console.getStringInput("Please type A for Integer or B for Double"); - while(!s.equals("A") && !s.equals("B")){ - Console.println("your input was " + s); - s = Console.getStringInput("Invalid Input! Please type A for Integer or B for Double"); - } - -// public static int getNum() { -// return null; -// } - - //Update Variables - if (s.equals("A")) { - i = Console.getIntegerInput("Enter an integer"); - Console.println(i+ ""); - } else if (s.equals("B")) d = Console.getDoubleInput("Enter a double."); - - //Ask for operation - operator = Console.getStringInput("Please type | A for Add | S for Subtract | M for Multiply | D for Divide"); - while(!operator.equals("A") && !operator.equals("S") && !operator.equals("M") && !operator.equals("D")){ - Console.println("your input was " + operator); - operator = Console.getStringInput("Invalid Input! Please type | A for Add | S for Subtract | M for Multiply | D for Divide"); - } - - if (operator.equals("A")) { - //Add - - Console.println("Your operator is +"); - } else if (operator.equals("S")) { - //Subtract - Console.println("Your operator is -"); - } else if (operator.equals("M")) { - //Multiply - Console.println("Your operator is *"); - } else if (operator.equals("D")){ - //Divide - Console.println("Your operator is /"); + //Asks for first value and stores it in user totalVal + user.firstVal = AskNumber.askDouble(); + + //Push first value to display and print display + user.displayVal = user.firstVal; + Console.println("Your current total is %.2f", user.displayVal); + + //Ask for operation and print to console + operator = AskNumber.getOperation(); + Console.println("You selected " + operator); + + if (operator.equalsIgnoreCase("Add")) { + user.secondVal = AskNumber.askDouble(); + user.displayVal = MathMethods.add(user.firstVal,user.secondVal); + Console.println("Your current total is %.2f", user.displayVal); + } else if (operator.equalsIgnoreCase("Subtract")) { + user.secondVal = AskNumber.askDouble(); + user.displayVal = MathMethods.subtract(user.firstVal,user.secondVal); + Console.println("Your current total is %.2f", user.displayVal); + } else if (operator.equalsIgnoreCase("Multiply")) { + user.secondVal = AskNumber.askDouble(); + user.displayVal = MathMethods.multiplication(user.firstVal,user.secondVal); + Console.println("Your current total is %.2f", user.displayVal); + } else if (operator.equalsIgnoreCase("Divide")) { + user.secondVal = AskNumber.askDouble(); + user.displayVal = MathMethods.division(user.firstVal,user.secondVal); + Console.println("Your current total is %.2f", user.displayVal); + } else if (operator.equalsIgnoreCase("Remainder")) { + user.secondVal = AskNumber.askDouble(); + user.displayVal = MathMethods.remainder(user.firstVal,user.secondVal); + Console.println("Your current total is %.2f", user.displayVal); } - Console.println("Display:", i, operator); - Console.println("Display:", d,operator); } } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java index f3cd2b24..f5c6bad9 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java @@ -7,31 +7,32 @@ public class MathMethods { // Addition - public static int add(int a, int b) { - int result = a + b; + public static double add(double a, double b) { + double result = a + b; return result; } - public static int subtract(int a, int b) { - int result1 = a - b; + public static double subtract(double a, double b) { + double result1 = a - b; return result1; } - public static int multiplication(int a, int b) { - int result2 = a * b; + public static double multiplication(double a, double b) { + double result2 = a * b; return result2; } - public static int division(int a, int b) { - int result3 = a / b; + public static double division(double a, double b) { + double result3 = a / b; return result3; } - public static int remainder(int a, int b) { - int result4 = a % b; + public static double remainder(double a, double b) { + double result4 = a % b; return result4; } + /* //The Java Math Class //Basic Math Functions From 1dd53f7c72df0628aee07089e3fc004a81d57ed3 Mon Sep 17 00:00:00 2001 From: k-romero Date: Sun, 9 Feb 2020 09:31:08 -0500 Subject: [PATCH 07/16] Added Sandy and Daves changes to the master --- .../scientificcalculator/MathMethods.java | 10 ++++++++++ .../scientific_calculator/TestMainApplication.java | 10 +++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java index f5c6bad9..2c05a537 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java @@ -32,6 +32,16 @@ public static double remainder(double a, double b) { return result4; } +// public static double absolute(double a, double b) { +// double result5 = math.abs(); +// return result5; +// } + +// public static double Sine(Math.sin(input a)) +// //Math.cos() +// public static double Cosine { +// cos(double angle) + /* //The Java Math Class diff --git a/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java b/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java index 94e8d987..1ae0897c 100644 --- a/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java +++ b/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java @@ -4,4 +4,12 @@ * Created by leon on 2/9/18. */ public class TestMainApplication { -} + public class MainApplication { + MainApplication test = new MainApplication(); + +// @Test +// public class addTest(){ +// Assert.assertEquals(expected: 10, test.add(a: 5, b: 5) +// } + } +} \ No newline at end of file From 53f8fd9e776560a50b74661f6fafaf2e655b0502 Mon Sep 17 00:00:00 2001 From: k-romero Date: Sun, 9 Feb 2020 11:29:18 -0500 Subject: [PATCH 08/16] created second while loop inside first --- .../scientificcalculator/MainApplication.java | 41 ++++++++++++++++++- .../TestMainApplication.java | 5 +-- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index 10549474..ae595b75 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -13,7 +13,7 @@ public static void main(String[] args) { /////Print Starting Display Console.println("Your current total is %.2f", user.displayVal); - //Start Program + //Start Program 1st Round while (true){ //Stores Operation and then clears operation on loop String operator = ""; @@ -51,7 +51,46 @@ public static void main(String[] args) { Console.println("Your current total is %.2f", user.displayVal); } + //Start Program 1st Round + while (true){ + //Stores Operation and then clears operation on loop + String nextOperator = ""; + + //Ask for operation and print to console + nextOperator = AskNumber.getOperation(); + Console.println("You selected ", nextOperator); + + if (nextOperator.equalsIgnoreCase("Add")) { + user.secondVal = AskNumber.askDouble(); + user.displayVal = MathMethods.add(user.displayVal,user.secondVal); + Console.println("Your current total is %.2f", user.displayVal); + } else if (nextOperator.equalsIgnoreCase("Subtract")) { + user.secondVal = AskNumber.askDouble(); + user.displayVal = MathMethods.subtract(user.displayVal,user.secondVal); + Console.println("Your current total is %.2f", user.displayVal); + } else if (nextOperator.equalsIgnoreCase("Multiply")) { + user.secondVal = AskNumber.askDouble(); + user.displayVal = MathMethods.multiplication(user.displayVal,user.secondVal); + Console.println("Your current total is %.2f", user.displayVal); + } else if (nextOperator.equalsIgnoreCase("Divide")) { + user.secondVal = AskNumber.askDouble(); + while (user.secondVal == 0){ + Console.println("Your result will produce an Error! Please provide a new number"); + user.secondVal = AskNumber.askDouble(); + } + user.displayVal = MathMethods.division(user.displayVal,user.secondVal); + Console.println("Your current total is %.2f", user.displayVal); + } else if (nextOperator.equalsIgnoreCase("Remainder")) { + user.secondVal = AskNumber.askDouble(); + user.displayVal = MathMethods.remainder(user.displayVal,user.secondVal); + Console.println("Your current total is %.2f", user.displayVal); + } + + } + } + + } } diff --git a/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java b/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java index 1ae0897c..f6c4385d 100644 --- a/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java +++ b/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java @@ -7,9 +7,6 @@ public class TestMainApplication { public class MainApplication { MainApplication test = new MainApplication(); -// @Test -// public class addTest(){ -// Assert.assertEquals(expected: 10, test.add(a: 5, b: 5) -// } + } } \ No newline at end of file From 73e8ac0ba5a6d02f68d6db9d95d43da0e04bfcd1 Mon Sep 17 00:00:00 2001 From: k-romero Date: Sun, 9 Feb 2020 11:29:46 -0500 Subject: [PATCH 09/16] created clear function...sort of --- .../scientificcalculator/AskNumber.java | 6 +- .../scientificcalculator/MainApplication.java | 67 ++++++++++++------- 2 files changed, 45 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java b/src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java index 923cc705..51ba8514 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java @@ -14,10 +14,10 @@ public static double askDouble() { public static String getOperation() { String operator = ""; String operation = ""; - operator =Console.getStringInput("Please type one of the following \nAdd Subtract Multiply Divide Remainder"); - while(!operator.equalsIgnoreCase("Add") && !operator.equalsIgnoreCase("Subtract") && !operator.equalsIgnoreCase("Multiply") && !operator.equalsIgnoreCase("Divide") && !operator.equalsIgnoreCase("Remainder")){ + operator = Console.getStringInput("What would you like to do?\nPlease type one of the following \nAdd Subtract Multiply Divide Remainder Clear"); + while(!operator.equalsIgnoreCase("Add") && !operator.equalsIgnoreCase("Subtract") && !operator.equalsIgnoreCase("Multiply") && !operator.equalsIgnoreCase("Divide") && !operator.equalsIgnoreCase("Remainder") && !operator.equalsIgnoreCase("Clear")){ Console.println("You selected " + operator); - operator = Console.getStringInput("Invalid Input! Please type one of the following \nAdd Subtract Multiply Divide Remainder"); + operator = Console.getStringInput("Invalid Input! Please type one of the following \nAdd Subtract Multiply Divide Remainder Clear"); } return operator; } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index ae595b75..b05bfcf8 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -7,52 +7,67 @@ public class MainApplication { public static void main(String[] args) { //New User - Calculator user = new Calculator(0,0,0,0); + Calculator user = new Calculator(0, 0, 0, 0); Console.println("Simple Calculator!"); /////Print Starting Display Console.println("Your current total is %.2f", user.displayVal); //Start Program 1st Round - while (true){ - //Stores Operation and then clears operation on loop + while (true) { + //Stores Operation String operator = ""; - //Asks for first value and stores it in user totalVal - user.firstVal = AskNumber.askDouble(); - - //Push first value to display and print display - user.displayVal = user.firstVal; - Console.println("Your current total is %.2f", user.displayVal); - - //Ask for operation and print to console + //Ask for operation to perform and print to console operator = AskNumber.getOperation(); Console.println("You selected " + operator); +// //Asks for first value and stores it in user totalVal +// user.firstVal = AskNumber.askDouble(); +// +// //Push first value to display and print display +// user.displayVal = user.firstVal; +// Console.println("Your current total is %.2f", user.displayVal); + + if (operator.equalsIgnoreCase("Add")) { + user.firstVal = AskNumber.askDouble(); user.secondVal = AskNumber.askDouble(); - user.displayVal = MathMethods.add(user.firstVal,user.secondVal); + user.displayVal = MathMethods.add(user.firstVal, user.secondVal); Console.println("Your current total is %.2f", user.displayVal); } else if (operator.equalsIgnoreCase("Subtract")) { + user.firstVal = AskNumber.askDouble(); user.secondVal = AskNumber.askDouble(); - user.displayVal = MathMethods.subtract(user.firstVal,user.secondVal); + user.displayVal = MathMethods.subtract(user.firstVal, user.secondVal); Console.println("Your current total is %.2f", user.displayVal); } else if (operator.equalsIgnoreCase("Multiply")) { + user.firstVal = AskNumber.askDouble(); user.secondVal = AskNumber.askDouble(); - user.displayVal = MathMethods.multiplication(user.firstVal,user.secondVal); + user.displayVal = MathMethods.multiplication(user.firstVal, user.secondVal); Console.println("Your current total is %.2f", user.displayVal); } else if (operator.equalsIgnoreCase("Divide")) { + user.firstVal = AskNumber.askDouble(); user.secondVal = AskNumber.askDouble(); - user.displayVal = MathMethods.division(user.firstVal,user.secondVal); + while (user.secondVal == 0) { + Console.println("Your result will produce an Error! Please provide a new number"); + user.secondVal = AskNumber.askDouble(); + } + user.displayVal = MathMethods.division(user.firstVal, user.secondVal); Console.println("Your current total is %.2f", user.displayVal); } else if (operator.equalsIgnoreCase("Remainder")) { + user.firstVal = AskNumber.askDouble(); user.secondVal = AskNumber.askDouble(); - user.displayVal = MathMethods.remainder(user.firstVal,user.secondVal); + user.displayVal = MathMethods.remainder(user.firstVal, user.secondVal); Console.println("Your current total is %.2f", user.displayVal); + } else if (operator.equalsIgnoreCase("Clear")) { + user.displayVal = 0; + Console.println("Your current total is %.2f", user.displayVal); + break; + } //Start Program 1st Round - while (true){ + while (true) { //Stores Operation and then clears operation on loop String nextOperator = ""; @@ -62,35 +77,37 @@ public static void main(String[] args) { if (nextOperator.equalsIgnoreCase("Add")) { user.secondVal = AskNumber.askDouble(); - user.displayVal = MathMethods.add(user.displayVal,user.secondVal); + user.displayVal = MathMethods.add(user.displayVal, user.secondVal); Console.println("Your current total is %.2f", user.displayVal); } else if (nextOperator.equalsIgnoreCase("Subtract")) { user.secondVal = AskNumber.askDouble(); - user.displayVal = MathMethods.subtract(user.displayVal,user.secondVal); + user.displayVal = MathMethods.subtract(user.displayVal, user.secondVal); Console.println("Your current total is %.2f", user.displayVal); } else if (nextOperator.equalsIgnoreCase("Multiply")) { user.secondVal = AskNumber.askDouble(); - user.displayVal = MathMethods.multiplication(user.displayVal,user.secondVal); + user.displayVal = MathMethods.multiplication(user.displayVal, user.secondVal); Console.println("Your current total is %.2f", user.displayVal); } else if (nextOperator.equalsIgnoreCase("Divide")) { user.secondVal = AskNumber.askDouble(); - while (user.secondVal == 0){ + while (user.secondVal == 0) { Console.println("Your result will produce an Error! Please provide a new number"); user.secondVal = AskNumber.askDouble(); } - user.displayVal = MathMethods.division(user.displayVal,user.secondVal); + user.displayVal = MathMethods.division(user.displayVal, user.secondVal); Console.println("Your current total is %.2f", user.displayVal); } else if (nextOperator.equalsIgnoreCase("Remainder")) { user.secondVal = AskNumber.askDouble(); - user.displayVal = MathMethods.remainder(user.displayVal,user.secondVal); + user.displayVal = MathMethods.remainder(user.displayVal, user.secondVal); + Console.println("Your current total is %.2f", user.displayVal); + } else if (nextOperator.equalsIgnoreCase("Clear")) { + user.displayVal = 0; Console.println("Your current total is %.2f", user.displayVal); + break; } } } - } - } From 45187ab4ba9cd10c388def5f3620d99bfdc962d8 Mon Sep 17 00:00:00 2001 From: k-romero Date: Sun, 9 Feb 2020 16:02:07 -0500 Subject: [PATCH 10/16] we realized as a team we were approaching this in the wrong way, so we are starting to break up the code and spread it out between our different classes --- .../scientificcalculator/AskNumber.java | 71 +--------------- .../scientificcalculator/Calculator.java | 26 ++++++ .../scientificcalculator/Console.java | 1 - .../scientificcalculator/MainApplication.java | 85 ++++++------------- .../scientificcalculator/MathMethods.java | 39 +++++++++ 5 files changed, 95 insertions(+), 127 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java b/src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java index 51ba8514..ed459a41 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java @@ -11,77 +11,14 @@ public static double askDouble() { } // Ask for an Operator + public static String getOperation() { String operator = ""; - String operation = ""; - operator = Console.getStringInput("What would you like to do?\nPlease type one of the following \nAdd Subtract Multiply Divide Remainder Clear"); - while(!operator.equalsIgnoreCase("Add") && !operator.equalsIgnoreCase("Subtract") && !operator.equalsIgnoreCase("Multiply") && !operator.equalsIgnoreCase("Divide") && !operator.equalsIgnoreCase("Remainder") && !operator.equalsIgnoreCase("Clear")){ + operator = Console.getStringInput("What would you like to do?\nPlease type one of the following \nAdd Subtract Multiply Divide Remainder Square SquareRoot VariableExpo\nClear"); + while(!operator.equalsIgnoreCase("Add") && !operator.equalsIgnoreCase("Subtract") && !operator.equalsIgnoreCase("Multiply") && !operator.equalsIgnoreCase("Divide") && !operator.equalsIgnoreCase("Remainder") && !operator.equalsIgnoreCase("Square") && !operator.equalsIgnoreCase("SquareRoot") && !operator.equalsIgnoreCase("VariableExpo") && !operator.equalsIgnoreCase("Clear")){ Console.println("You selected " + operator); - operator = Console.getStringInput("Invalid Input! Please type one of the following \nAdd Subtract Multiply Divide Remainder Clear"); + operator = Console.getStringInput("Invalid Input! Please type one of the following \nAdd Subtract Multiply Divide Remainder Square SquareRoot VariableExpo Clear"); } return operator; } - - - // Ask for a Number -// public static String askNumType() { -// String a = ""; -// a = Console.getStringInput("Please type A for Integer or B for Double"); -// while(!a.equals("A") && !a.equals("B")){ -// Console.println("your input was " + a); -// a = Console.getStringInput("Invalid Input! Please type A for Integer or B for Double"); -// } -// return a; -// } - -// // Ask for an Int -// public static int askInt() { -// int i = 0; -// i = Console.getIntegerInput("Enter an integer"); -// Console.println(i+ ""); -// return i; -// } - - - -// //Variables -// int i = 0; -// double d = 0; -// String operator = ""; -// String a = ""; -// String b = ""; -// int total = 0; -// -// //AskNumber.askNumType(); -// //AskNumber.askInt(); -// //AskNumber.val1 -// -// -// -// //Ask for operation -// operator = Console.getStringInput("Please type | A for Add | S for Subtract | M for Multiply | D for Divide"); -// while(!operator.equals("A") && !operator.equals("S") && !operator.equals("M") && !operator.equals("D")){ -// Console.println("your input was " + operator); -// operator = Console.getStringInput("Invalid Input! Please type | A for Add | S for Subtract | M for Multiply | D for Divide"); -// } -// -// if (operator.equals("A")) { //Add -// b = Console.getStringInput("Please type A for Integer or B for Double"); -// while(!a.equals("A") && !a.equals("B")){ -// Console.println("your input was " + a); -// a = Console.getStringInput("Invalid Input! Please type A for Integer or B for Double"); -// } -// if (operator.equals("A")) { //Add -// -// } else if (operator.equals("S")) { //Subtract -// //Subtract -// Console.println("Your operator is -"); -// } else if (operator.equals("M")) { //Multiply -// //Multiply -// Console.println("Your operator is *"); -// } else if (operator.equals("D")){ //Divide -// //Divide -// Console.println("Your operator is /"); -// } - } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java index 8900eec6..58458ad9 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -1,15 +1,41 @@ package com.zipcodewilmington.scientificcalculator; +import java.util.Scanner; + public class Calculator { double firstVal ; double secondVal ; double savedVal ; double displayVal ; + public double getSavedVal() { + return savedVal; + } + + public double getDisplayVal() { + return displayVal; + } + public Calculator(double firstValIn, double secondValIn, double displayValIn, double savedValIn) { this.firstVal = firstValIn; this.secondVal = secondValIn; this.displayVal = displayValIn; this.savedVal = savedValIn; } + + public void setFirstVal(String prompt) { + Scanner doubleScanner = new Scanner(System.in); + Console.println(prompt); + while (!doubleScanner.hasNextDouble()) { + doubleScanner.next(); + Console.println("Invalid Input! Please enter a Double."); + } + this.displayVal = doubleScanner.nextDouble(); + } + + public void clearDisplayVal() { + this.displayVal = 0; + Console.println("Your current total is %.2f", displayVal); + } + } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java index 7522603f..42149aa5 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java @@ -6,7 +6,6 @@ * Created by leon on 2/9/18. */ public class Console { - int total = 0; public static void print(String output, Object... args) { System.out.printf(output, args); diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index b05bfcf8..fd295d57 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -6,74 +6,30 @@ public class MainApplication { public static void main(String[] args) { + + //New User Calculator user = new Calculator(0, 0, 0, 0); Console.println("Simple Calculator!"); /////Print Starting Display - Console.println("Your current total is %.2f", user.displayVal); + Console.println("Your current total is %.2f", user.getDisplayVal()); //Start Program 1st Round while (true) { + //Stores Operation String operator = ""; - //Ask for operation to perform and print to console - operator = AskNumber.getOperation(); - Console.println("You selected " + operator); - -// //Asks for first value and stores it in user totalVal -// user.firstVal = AskNumber.askDouble(); -// -// //Push first value to display and print display -// user.displayVal = user.firstVal; -// Console.println("Your current total is %.2f", user.displayVal); - - - if (operator.equalsIgnoreCase("Add")) { - user.firstVal = AskNumber.askDouble(); - user.secondVal = AskNumber.askDouble(); - user.displayVal = MathMethods.add(user.firstVal, user.secondVal); - Console.println("Your current total is %.2f", user.displayVal); - } else if (operator.equalsIgnoreCase("Subtract")) { - user.firstVal = AskNumber.askDouble(); - user.secondVal = AskNumber.askDouble(); - user.displayVal = MathMethods.subtract(user.firstVal, user.secondVal); - Console.println("Your current total is %.2f", user.displayVal); - } else if (operator.equalsIgnoreCase("Multiply")) { - user.firstVal = AskNumber.askDouble(); - user.secondVal = AskNumber.askDouble(); - user.displayVal = MathMethods.multiplication(user.firstVal, user.secondVal); - Console.println("Your current total is %.2f", user.displayVal); - } else if (operator.equalsIgnoreCase("Divide")) { - user.firstVal = AskNumber.askDouble(); - user.secondVal = AskNumber.askDouble(); - while (user.secondVal == 0) { - Console.println("Your result will produce an Error! Please provide a new number"); - user.secondVal = AskNumber.askDouble(); - } - user.displayVal = MathMethods.division(user.firstVal, user.secondVal); - Console.println("Your current total is %.2f", user.displayVal); - } else if (operator.equalsIgnoreCase("Remainder")) { - user.firstVal = AskNumber.askDouble(); - user.secondVal = AskNumber.askDouble(); - user.displayVal = MathMethods.remainder(user.firstVal, user.secondVal); - Console.println("Your current total is %.2f", user.displayVal); - } else if (operator.equalsIgnoreCase("Clear")) { - user.displayVal = 0; - Console.println("Your current total is %.2f", user.displayVal); - break; - - } + //Get first value and set to display value + user.setFirstVal("Enter a starting value"); + Console.println("Your current total is %.2f", user.getDisplayVal()); - //Start Program 1st Round + //Start program operations loop while (true) { - //Stores Operation and then clears operation on loop - String nextOperator = ""; - //Ask for operation and print to console + String nextOperator; nextOperator = AskNumber.getOperation(); - Console.println("You selected ", nextOperator); if (nextOperator.equalsIgnoreCase("Add")) { user.secondVal = AskNumber.askDouble(); @@ -89,19 +45,30 @@ public static void main(String[] args) { Console.println("Your current total is %.2f", user.displayVal); } else if (nextOperator.equalsIgnoreCase("Divide")) { user.secondVal = AskNumber.askDouble(); - while (user.secondVal == 0) { - Console.println("Your result will produce an Error! Please provide a new number"); - user.secondVal = AskNumber.askDouble(); - } + if (user.secondVal == 0) { + Console.println("ERROR!"); + user.displayVal = 0; + Console.println("Your current total is %.2f", user.getDisplayVal()); + user.setFirstVal("Enter a starting value"); + } else user.displayVal = MathMethods.division(user.displayVal, user.secondVal); Console.println("Your current total is %.2f", user.displayVal); } else if (nextOperator.equalsIgnoreCase("Remainder")) { user.secondVal = AskNumber.askDouble(); user.displayVal = MathMethods.remainder(user.displayVal, user.secondVal); Console.println("Your current total is %.2f", user.displayVal); - } else if (nextOperator.equalsIgnoreCase("Clear")) { - user.displayVal = 0; + } else if (nextOperator.equalsIgnoreCase("Square")) { + user.displayVal = MathMethods.square(user.displayVal); Console.println("Your current total is %.2f", user.displayVal); + } else if (nextOperator.equalsIgnoreCase("SquareRoot")) { + user.displayVal = MathMethods.squareRoot(user.displayVal); + Console.println("Your current total is %.2f", user.displayVal); + } else if (operator.equalsIgnoreCase("VariableExpo")) { + user.secondVal = AskNumber.askDouble(); + user.displayVal = MathMethods.variExpo(user.displayVal,user.secondVal); + Console.println("Your current total is %.2f", user.displayVal); + } else if (nextOperator.equalsIgnoreCase("Clear")) { + user.clearDisplayVal(); break; } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java index 2c05a537..af32148d 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java @@ -32,6 +32,45 @@ public static double remainder(double a, double b) { return result4; } + public static double square(double a) { + double result6 = a * a; + return result6; + } + + public static double squareRoot(double a) { + double result7 = Math.sqrt(a); + return result7; + } + + public static double variExpo(double a, double b) { + double result7 = a * b; + return result7; + } + + public static double invert(double a) { + double result8 = a * -1; + return result8; + } + public static double sine(double a) { + double result9 = Math.sin(a); + return result9; + } + public static double cosine(double a) { + double result10 = Math.cos(a); + return result10; + } + public static double tangent(double a) { + double result11 = Math.tan(a); + return result11; + } + + public static double absolute(double a) { + double result5 = Math.abs(a); + return result5; + } + + + // public static double absolute(double a, double b) { // double result5 = math.abs(); // return result5; From bb4cae9f98a5433d6ebe1525ae44cbe80914c7d5 Mon Sep 17 00:00:00 2001 From: k-romero Date: Sun, 9 Feb 2020 16:12:59 -0500 Subject: [PATCH 11/16] added Sandy's Test cases...we still dont know how to totally work with git and github --- pom.xml | 8 +++ .../TestMainApplication.java | 51 +++++++++++++++++-- 2 files changed, 56 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index e7cb4f6b..d8cd763e 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,14 @@ com.zipcodewilmington scientific_calculator 1.0-SNAPSHOT + + + junit + junit + 4.12 + test + + \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java b/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java index f6c4385d..0b6d8bbc 100644 --- a/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java +++ b/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java @@ -3,10 +3,55 @@ /** * Created by leon on 2/9/18. */ -public class TestMainApplication { - public class MainApplication { - MainApplication test = new MainApplication(); +import com.zipcodewilmington.scientificcalculator.Console; +import com.zipcodewilmington.scientificcalculator.MathMethods; +import org.junit.Assert; +import org.junit.Test; +import static org.junit.Assert.assertEquals; +public class TestMainApplication { + MathMethods test = new MathMethods(); + @Test + public void addTest1() { + assertEquals(25, test.add(5, 5), 0.01); + } + @Test + public void addTest2() { + assertEquals(10.5, test.add(7, 3.5), 0.01); + } + @Test + public void subtractTest1() { + assertEquals(2, test.subtract(7, 5), 0.01); + } + @Test + public void subtractTest2() { + assertEquals(10, test.subtract(20.5, 10.5), 0.01); + } + @Test + public void multiplicationTest1() { + assertEquals(56, test.multiplication(7, 8), 0.01); + } + @Test + public void multiplicationTest2() { + assertEquals(8.05, test.multiplication(2.3, 3.5), 0.01); + } + @Test + public void divisionTest1() { + assertEquals(3, test.division(15, 5), 0.01); + } + @Test + public void divisionTest2() { + assertEquals(6.0, test.division(36.0, 6.0), 0.01); + } + @Test + public void remainderTest1() { + assertEquals(2.0, test.remainder(5.00, 3.00), 0.01); + ; + } + @Test + public void remainderTest2() { + assertEquals(0.00, test.remainder(6.00, 3.00), 0.01); + ; } } \ No newline at end of file From ecef3283ecb33d8ff13716dcb2199569bc012c1b Mon Sep 17 00:00:00 2001 From: k-romero Date: Sun, 9 Feb 2020 16:20:41 -0500 Subject: [PATCH 12/16] cleaning up some of the code --- .../scientificcalculator/Calculator.java | 21 +++++++++------ .../scientificcalculator/Console.java | 26 ------------------- .../TestMainApplication.java | 2 +- 3 files changed, 14 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java index 58458ad9..d0a0b373 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -8,14 +8,6 @@ public class Calculator { double savedVal ; double displayVal ; - public double getSavedVal() { - return savedVal; - } - - public double getDisplayVal() { - return displayVal; - } - public Calculator(double firstValIn, double secondValIn, double displayValIn, double savedValIn) { this.firstVal = firstValIn; this.secondVal = secondValIn; @@ -33,9 +25,22 @@ public void setFirstVal(String prompt) { this.displayVal = doubleScanner.nextDouble(); } + public double getDisplayVal() { + return displayVal; + } + public void clearDisplayVal() { this.displayVal = 0; Console.println("Your current total is %.2f", displayVal); } + public double setSavedVal(double a) { + savedVal = a; + return savedVal; + } + + public double getSavedVal() { + return savedVal; + } + } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java index 42149aa5..9197dec4 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java @@ -34,20 +34,6 @@ public static String evalMenuOption(String m){ return m; } - - - public static Integer getIntegerInput(String prompt) { - Scanner intScanner = new Scanner(System.in); - println(prompt); - while (!intScanner.hasNextInt()) { - intScanner.next(); - println("Invalid Input! Please enter an Integer."); - } - int intInput = intScanner.nextInt(); - - return intInput; - } - public static double getDoubleInput(String prompt) { Scanner doubleScanner = new Scanner(System.in); println(prompt); @@ -59,16 +45,4 @@ public static double getDoubleInput(String prompt) { return doubleInput; } - - public static double doAdd(){ - double result = 0; - - return result; - } - - - - - - } diff --git a/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java b/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java index 0b6d8bbc..ffcbdb40 100644 --- a/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java +++ b/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java @@ -14,7 +14,7 @@ public class TestMainApplication { MathMethods test = new MathMethods(); @Test public void addTest1() { - assertEquals(25, test.add(5, 5), 0.01); + assertEquals(10, test.add(5, 5), 0.01); } @Test public void addTest2() { From e668a7c9671517433b976d28490503571ec92769 Mon Sep 17 00:00:00 2001 From: k-romero Date: Sun, 9 Feb 2020 16:37:34 -0500 Subject: [PATCH 13/16] Fixed variableexpo if statement --- .../scientificcalculator/MainApplication.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index fd295d57..47c95d0d 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -63,7 +63,7 @@ public static void main(String[] args) { } else if (nextOperator.equalsIgnoreCase("SquareRoot")) { user.displayVal = MathMethods.squareRoot(user.displayVal); Console.println("Your current total is %.2f", user.displayVal); - } else if (operator.equalsIgnoreCase("VariableExpo")) { + } else if (nextOperator.equalsIgnoreCase("VariableExpo")) { user.secondVal = AskNumber.askDouble(); user.displayVal = MathMethods.variExpo(user.displayVal,user.secondVal); Console.println("Your current total is %.2f", user.displayVal); @@ -71,10 +71,7 @@ public static void main(String[] args) { user.clearDisplayVal(); break; } - } - } - } } From 9290de3849062bb4073a48c79b27dc76e1369eb1 Mon Sep 17 00:00:00 2001 From: k-romero Date: Mon, 10 Feb 2020 00:25:49 -0500 Subject: [PATCH 14/16] added all the unused math function that Dave wrote and I created the M+ MC MRC features --- .../scientificcalculator/AskNumber.java | 7 +++--- .../scientificcalculator/Calculator.java | 6 ++--- .../scientificcalculator/MainApplication.java | 23 +++++++++++++++++++ .../scientificcalculator/MathMethods.java | 7 +++++- 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java b/src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java index ed459a41..60e8c008 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java @@ -14,10 +14,11 @@ public static double askDouble() { public static String getOperation() { String operator = ""; - operator = Console.getStringInput("What would you like to do?\nPlease type one of the following \nAdd Subtract Multiply Divide Remainder Square SquareRoot VariableExpo\nClear"); - while(!operator.equalsIgnoreCase("Add") && !operator.equalsIgnoreCase("Subtract") && !operator.equalsIgnoreCase("Multiply") && !operator.equalsIgnoreCase("Divide") && !operator.equalsIgnoreCase("Remainder") && !operator.equalsIgnoreCase("Square") && !operator.equalsIgnoreCase("SquareRoot") && !operator.equalsIgnoreCase("VariableExpo") && !operator.equalsIgnoreCase("Clear")){ + String menu = "\nPlease type one of the following \nAdd Subtract Multiply Divide Remainder Square SquareRoot VariableExpo\nInverse -Num M+ MC MRC Sine Cosine Tangent Clear"; + operator = Console.getStringInput("What would you like to do?" + menu); + while(!operator.equalsIgnoreCase("Add") && !operator.equalsIgnoreCase("Subtract") && !operator.equalsIgnoreCase("Multiply") && !operator.equalsIgnoreCase("Divide") && !operator.equalsIgnoreCase("Remainder") && !operator.equalsIgnoreCase("Square") && !operator.equalsIgnoreCase("SquareRoot") && !operator.equalsIgnoreCase("VariableExpo") && !operator.equalsIgnoreCase("Inverse") && !operator.equalsIgnoreCase("-Num") && !operator.equalsIgnoreCase("M+") && !operator.equalsIgnoreCase("MC") && !operator.equalsIgnoreCase("MRC") && !operator.equalsIgnoreCase("Sine") && !operator.equalsIgnoreCase("Cosine") && !operator.equalsIgnoreCase("Tangent") && !operator.equalsIgnoreCase("Clear")){ Console.println("You selected " + operator); - operator = Console.getStringInput("Invalid Input! Please type one of the following \nAdd Subtract Multiply Divide Remainder Square SquareRoot VariableExpo Clear"); + operator = Console.getStringInput("Invalid Input! Please type one of the following" + menu); } return operator; } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java index d0a0b373..b8ffea49 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -23,6 +23,7 @@ public void setFirstVal(String prompt) { Console.println("Invalid Input! Please enter a Double."); } this.displayVal = doubleScanner.nextDouble(); + this.firstVal = this.displayVal; } public double getDisplayVal() { @@ -34,9 +35,8 @@ public void clearDisplayVal() { Console.println("Your current total is %.2f", displayVal); } - public double setSavedVal(double a) { - savedVal = a; - return savedVal; + public void setSavedVal(double a) { + this.savedVal = a; } public double getSavedVal() { diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index 47c95d0d..42ddac91 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -67,6 +67,29 @@ public static void main(String[] args) { user.secondVal = AskNumber.askDouble(); user.displayVal = MathMethods.variExpo(user.displayVal,user.secondVal); Console.println("Your current total is %.2f", user.displayVal); + } else if (nextOperator.equalsIgnoreCase("Inverse")) { + user.displayVal = MathMethods.inverse(user.displayVal); + Console.println("Your current total is %.2f", user.displayVal); + } else if (nextOperator.equalsIgnoreCase("-Num")) { + user.displayVal = MathMethods.invert(user.displayVal); + Console.println("Your current total is %.2f", user.displayVal); + } else if (nextOperator.equalsIgnoreCase("M+")) { + user.savedVal = user.displayVal; + Console.println("You saved " + user.savedVal + " in memory."); + } else if (nextOperator.equalsIgnoreCase("MC")) { + user.savedVal = 0; + Console.println("Memory reset."); + } else if (nextOperator.equalsIgnoreCase("MRC")) { + Console.println("Your saved number is " + user.savedVal); + } else if (nextOperator.equalsIgnoreCase("Sine")) { + user.displayVal = MathMethods.sine(user.displayVal); + Console.println("Your current total is %.2f", user.displayVal); + } else if (nextOperator.equalsIgnoreCase("Cosine")) { + user.displayVal = MathMethods.cosine(user.displayVal); + Console.println("Your current total is %.2f", user.displayVal); + } else if (nextOperator.equalsIgnoreCase("Tangent")) { + user.displayVal = MathMethods.tan(user.displayVal); + Console.println("Your current total is %.2f", user.displayVal); } else if (nextOperator.equalsIgnoreCase("Clear")) { user.clearDisplayVal(); break; diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java index af32148d..bde2a10b 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java @@ -47,6 +47,11 @@ public static double variExpo(double a, double b) { return result7; } + public static double inverse(double a) { + double result = 1/a; + return result; + } + public static double invert(double a) { double result8 = a * -1; return result8; @@ -59,7 +64,7 @@ public static double cosine(double a) { double result10 = Math.cos(a); return result10; } - public static double tangent(double a) { + public static double tan(double a) { double result11 = Math.tan(a); return result11; } From 579070422493423daf344603c560dce6fada959e Mon Sep 17 00:00:00 2001 From: k-romero Date: Mon, 10 Feb 2020 09:11:40 -0500 Subject: [PATCH 15/16] Sandy added more tests --- UML diagram.png | Bin 0 -> 97904 bytes scientificcalculator.uml | 26 ++++++ .../scientificcalculator/MathMethods.java | 2 +- .../TestMainApplication.java | 88 +++++++++++++++++- 4 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 UML diagram.png create mode 100644 scientificcalculator.uml diff --git a/UML diagram.png b/UML diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..66fee7a312554d87de04a5b382c99937e8cf2b31 GIT binary patch literal 97904 zcmeFZ2T)Vn`!)(lQ$$eIh)5AcL`vvLN0D9yqz4cPJ%B*yonr$9>AgrtnzV#oRHWC? zLqMd4-dlit8_qeuQ~uv~=iZq+cjnIgmW{uNn&IZu(Yg~!kRRco^Nz152K#(@bU1Oni9McdAhs6 zpi(d~O3DU;-jv6OaMl*MQH{bfQ16UKmWj@SkI< zvl}04$tWrU-&*F*P^g28wWBN1kMdlgs$m;#Jy$(d6;X3X821YcM>8n52h8cL2!XhV zC~yday1roYfZ02^h@_QwJ*7FqVV(x6?&>oQXG6X^1oT)cQc=#1?((&NgVv2IRpM6 z5FQ~QkS0)k`dHh8a0TP(q`i=EfXijAVEO*=W+3sCLbItZ+opg(0))9(s5#q9asB%- z35xgO{({euYh5Xc`M8DdLG6>Awd2S^RX%;TcfPAXiS57e#{1IL@+c4yn_VTZATW?# z!bz4qQgtr?VXc>A8ysU6*IatMd%PumkLJV|e0#mcJ9UfqE?p!frj{o7`!CUZJf^OD z8&{yFFaCXrnwr*WZ9?SEze-R`rw0>Vq&G@!x%$tlsHL08sWn_~F$EA1k^k-2&nE!^ z<0QBB|6LDL`uwf`QNt?&!b%E(vcDBSuT5IIoA+PU1_V$L64`>REgt`4K-AI!0g2}S zIz>PTA|f8-?rRJBXV(G<2nAdJeTs;im^=@X9zpVVJDqi&$TsZXr-+S!A=gT?Q2b-W zKu?JW?_Bu15zabaMa`7%7ASY~--ag76CwS#ah&c-ORo}r;QV(TfPpXn+c^I<@E_Ly zuYvzq%l}=$zdMWnx`;pg$A4YKe_g~sUmO2*5&v}&|Jbzr*G2r-Mg0HWMVJPJid#HR z@4aL{R+innMkn@~fC$3!1-?97tpALv_*G32S?SnyB68Pv(&EFFkg}P=duzaEe`bv% zvkAlX#eIEpZIXCdo*?ki4ZQ{*&*WI6-)guV8bvRKNjK8GU8q4!`RcEH>6=Rm{{IkQ z@N^&nM6{z7IIF$+K8-u|YBe)$u)$S^!H|8oY7cN4jg9SMF3*Y(5&8E@0=S`(zwdR1 zGn|s{PC}mNJ(5<`8rsyh8OdY!sx2U^=^EAThYTm39MQ2_X(1CecOFTFNfu3Pcvibr zKUL~YTZ_W4=sePHU#B{r*Y=)BFRA~!eNzM6EydB3M9 zZ#GmH_Oa`6@Tzkh_f2KR&GtOc46Z)<<@X5Hd6qK|`#p_-5Ps}y6+W4ObV#UMS?W)9x(EeS}IK^%R1+7-6w=!=dfhylVkd^ zB*Znaw@jH{ z(#P{{|871<0NU+;SdXY*gEv7IWh&c2$;} z(&egjx-zlZ7YEdd0o1GGGHomu&J7ktVWr+yc&I$rpZO!Nwr)nfvAok~pYgOLuM^=O z*i%@Zxohv;`Q7<^Ygfu9Eluw|b&)mXE@8dZcw-WB1kFsDZIwN3kl>ND#A>5}$Wl)N zzq?RwpbRtkEEvB3bu*y;mH_|bHJ=I2`?VG&>H>uDrj;xHRl3jFGh62rPorrgQzO{n zl|v2ix}75=bawG&WOVdBO3K~6EZ5#Q>+Qc{mZ3lDS|X#9?Ss~d`(v$C8S!&4cHGK) zUn%DOd!Y<94 z35^yp))cPhGQmD>ISP`PO*X?=Sxdw6uH)I+>(vm?Z)z^534AUMT_$y!Wv{Q4M>#+m z@2?+k;a^&AhY%2{6PuMfpoX!}=82|Rwf3*mPr#JDen!C>);WzZ^M*`aNfkSRTN4Y$ z5xmtj_gGnn*Es3 zVXDp{2>S$$sqUCCiI0t)HvF}jDet`1W=v-RQb~da_ZG}gE-Hh1+fQl?lGsE9hmyan zm3rH5GmOs7lQgs@U%l4UL*Z~1)317p1ui*Uf1=G7Lxzb~= zeql#GJaKk35EGdsHMS=6s#@OQ0zP3Iq+Bm@S5nJWA*Uzas&nC(A7#XI>tnQiNBxko z#;s2nIYn|N;E}qyjCf|=nlvf=P7|xkb_f!;$GA-w;>}=_C3;BNAL@w@=b)f&l14LH zeutovI5h*g*VV7?55=)bn5S1S#{a_ISyLS?dzxnj7dx}7j;&XXO0uX-u}MAWg4&&{ zMNvRAfYT`D0v0uTiYj{<7P!+Da7{obT5{;dgjwgop5|ffxxg=zI)})xpq{bW!>r76@-JxHzuzP+=u!xc2Y*g!B zX8_>^i#7hlPIGn8GM~WABN)d3AHcGkpTg99aOJi7<)Qg5lk^0|Uqn_tHKdPTPzV~%F z;nf-Nr&b1Nr_vpmM(m@j)-anjg%@JCd5~5ZU9d?-5$$cgBeFpgpXGIxf*%UiCWhvQ zo^Z$omHqX-Ebr&YRWn_sUbHUWyGRD+s4+}ko9xy-ETvk5Y0ZIGORx{_UF$mendlHt zI3j>;vQzy)x%bp{;(%z=tKPEdla||L5#7j2!FD)evCFu^Xt;iZwO=Pc)UsL~Q9si) ze}j;i`O=O9W`3e312p)A6$v*C!A7_&{}|FJaFys*)#oFtoVMm--#W@_R4)sPiSNWY&DQiUlw=4=+Auu_Rl#sQ1|2pQky8G4KA*+ryI9(y3O-7i#RQBfuXOpdpnp|5U5=>9>F4Iig> z1qLgIbchdi9LpK$pg{B_HSUP;-~6U2rf%3GKR2tSHu+R5oT~yAgtsYIi`%u&s^RiT z@{v1V4vc|KomHD!4oV@?;pArEpPt%9-N zjF=`g)vAQOYLcQ-4S8mpZii#Vi>VC@^ye$5kiz2<1;vHlbo2V}(NuvB*GJ2sp(_}= zLAd9vhhjW(++NT?*ruf7&J?Tjva@jP7vBN~m|Q8nsodR0FYFT>pKG%wO>R#`Z)<}W zHiQ0EZF#}qumdcA;Htl%)4uvQRd*-)XUEuA0l6-f&&9gm4;HZfyhmJPV0ySUS9Z3? zHijWfz>`ZtFh~!B#IX2_^e1Z*HEY{g6->@DYS(texqfsptMKkOi#%FYvGJdlJzG5m z=(4Au(aG@b5NUtV+mRYXqrc+`9B=b!tz=3Zhw&q%VX{k42KKHd%5V)g6d%TU2^CMC zQ)wYwY<%gV>AwGy9D|(yUOiCadkjIQ&v^^p zPnd*-k!(WWgwA@za3kGe`I&#==P{F+0zpFs`h|TT>gZ zwZtg3)+@du28=LY+BUK+*{EceYFkOiYguhj{5pHVR@*!0Z~^fU6n*CC?TM*MDtGKVVi@kmzZa6~ zSd!@p%Pvck^y?!xZ{oX<;qH z;+P1_F37#=8H!ms+3LZep|@?nh>`x9Fm+!aFXuY@)OnHm4=|{mh8(*E)m1mmI`Xy{qFXO1Xh2Ole15_VqA;R zwo5%h7L#<{7Lb|k;V$tod|H;auYh?KFvh!i*ZoOgG=wwkUD?j=6Qf2q*{vm6?l{T;U%CUK=4)$iY{^z&JZ+Hqf2OO;fOV;MR^9A$>rX)XDJ%gQBWZtbDgBUo&x!Zb89!mWx{|lTQgyw~YTsqKrkafI5pL6V_I&63**ahcDNdqg)yAKrJeS@qGq*V-@7!wdg7a>S>KE}W zbKB-9v%`5immWkzrj$$SSub9E2jF>sGbt+CRIaImNvYA;@tSd45jQ9Gw%C_=n7FNN zbjX%+*(zr0sN>d}YGGV`UE$OFN!+>PeC|1mPF0vi6w3TWYzcK>x!_7rrjd_*shngw zuCKQJ8%3VrM@Xqi&<6%Ku{p`k&A&4d}gPo|%(M_$54hj&-dm5{Z` zd;!8!kKBWtwL6?FU3^g1BG4623ESdMa`=Y4MCr1zvSuqdZ=p^zX4uqXJG0Zq>fYV& zGp^b4Z08HC_8)*18X;SfnY?HFav8@=rKa>s4DcCe0IpSLEL5Gb9CWu#p43eqR?hG1 z`b6AE-Zy#@Y1m^u*>G{b+kZ9hI`2zFgYC%r&+8Av%e&%Bt0N<0ZMn1R9q~K$YN4@V zjN=^ppBgrb`vXhH>w2^Q-lwaYxd~?{z*x2^xW)Vp}T1k@a>4 zNp=>ov~fRG`Xd5%7mo|#lr1(szTg`++87k@KD}lLP7(9$8U~n|L2Ia`B+(|bG=vU3 zb$#x=E}=o*%x+TVME%2$)@!Ss43FA$UpMC$^~T$HOw1WZly^b zfxM@tzFf`BDlKhJ)>Dh-&GF7A{RZ$cW!|kg=jjQ>+L-rUD((Euh@4|Z6m!oARKP## zVqVI1uHNtMuMlw0{aVAhUxz3mL$4pw-eul88SdG2nr{8cu8nrv&!>ta7mz-W@5ei* zJ}T>F4_Xv*O(EM``G~6&oM-+@*^j%sJ1eRg5?5B>ZtJzYNn_)G^sCO}FzhJ9H_P{E zyvCkRW!X-hwWwU6Z^-rN;FAz&*ww4_V$QzbG04|$`PQbF>auI%;D}VTyWh5!7zEGm z!EU(o+?K}TumN`MvF4c%1B(eKs22<;9pI)^6Z7APhDw2AUf@rYPciPZ`(M%uM zM#MJKciiMB61?w3Z)>2ouHF$B2Pbx27o;#GK=r}vxR@od5f z18Ul5qyo`zksrG;xtOKmDB=d-iz;lRVgKku7!@ znN=B+w430mXC|i%J0hqf>%y>m-89^gMjdXNT$Q*XIw7>|?Pa>Bxo}ypjh|RYW5X1| zrXFGRxS1U3$dR=7@XFYsUy`asl?g|TFvkk)!8pB7UiHvZ!!kkH&sylhw-YrFt11tAH{xGmCuvX3 zUYFNx-v&d~`7m>IbW15_`voIs%VaA~Q)jNUH({+!(l*sek&FrDorAfobkiYaI%j$G z>X9(~hY|Y3d%jLqb8BquV`!Z5BdfL5(_~JgnvTntu!8&6>&Q;P3^K)U-;sa+1eoED zpUriV;xjWWEoXeGznjigG^QM<9D31bp!m7MxA^|D)7=u~ZLFE1y?wMWNMe~|IElh= zN;o0*SH@?<1}tP(&hVpPWrYA*XX#a^4o(N+P@@jkJ1*qp5014NS><%;HBGISA5#Q8 zn6v1YaJNr`+(Y9TG+g0VjB|S5K@eWSn0aYndmp!2i{$85m|n1_sJU`m+p5OauApYJ z^*J1uqjir~>Sc(h+=`3P+f>JnVoVx1PLiHl6;x+Idd1+2YqkjODwU)Gbl-eoH9XH!DS8FS@tG5g$J6@_CFp(OKI`3|cJN zP^MQF4{U+}9@4h;Q{NU~*4pypLb|}z>*>X-iZH|wnvpRrC)BHA6=W$w;Go;R;u;&*Le1D*Yf+aQ~oa)zGr$m)>aI{xXJh9y>mgP?J^TY zxcl9Ua_nA_9g0AYj0Lq&uvFhB`fKk)h%-u4pt<+~@DMH@CoqeZIW!L@xcT;PEiP8$ zqz*N1avQQP3pLu-hE5fHj;8lN&BWwPf<&^N5M1iP)xD+T6UfE1;)I(Eo}oGlkv7%E z{s+>oPfZ}XQLc?U+kqIdmG+GsU1Ma?kbCz}S=l%H<1P0So|OqYI)%I`TW+uSQ(sV{ zr{wl)Jh(#zJg|7?rS30OVxbacFLOpF9&HJ{s_{4Q53ebl$A(!jJh0X&@IP%=5tPuj zcQ)=OE201>#7CiBva=TKLoPxRx5a%b45$&IfZ zZW~3*3%wmxHvHdFI|^kz$x*-kXyR9fB@CO^0KTrixyP$!>$#zKN`UB~7o6CLzK%mX zJ-<^v5x=C{XujTiis?ONF&&E7S_~4cK~5Ivfdp*d+0-P|))e-(t(a>n0s*Y$Z5R6W#@Xf9 z6C|IlMZDffaWJxtqy#`5ITv*a9JW~h!qxV(n% z!G7j@9tow{QTe=;2>KFzF(<);Rfe@v~wnOM0NII4P=>MM3c|Nu4N5pQweC)v&bj zKVc^!@zEy$2TC0ej6wf-C9nse^xY>v3jT#$&yRLwfF}J8vdcUF0o@6RQb0`UYjt<+ z{v~K!d;>uAlMQ97xPM`KQE-!axu|2??V|+g@c=?T_t6LKy?2;{wFXuub%lqO^)V9c zpKI86!x{JaueyPNo(BCB*)k0M2iY#VeEyv`2Y~7WfH_}mW&`-v>lTzTyCO8KBD}n& z)mLq3GyGlNe2ArbsFa;G@6hBUc{ZL>PL1>BR~LE5Rfk7h%fcf^cmDluM~_)}w6>R- zr|<*1-#H2iZt1vn1~#kU&4=mDJM$Cmupj_=_Man9bN2epBE~iVb(!ZVBYw5Z(G6gLx=jkoW1e1=0B{-;~-*aacjV7`^f~st^ zEq2d4hRXA?A+2D|c24`A8-3G}40rR6{=}4+j?CFhm1}ba!b)XWZvVB}{*TqD0kRHi zt@)lDYaBhSA!)T$b4;C4$~qW(!%nDrEXKH3a2+yyAt8IC`REhYbiZO{hpksmOQ ztm;cn@b!mbt+&4w#bL?6M**u<+}AL=a)cP5LTF2&qE)8jnnj*LsB~Ipcgf9;)$qDV z5eW~6b>E)0w&?ePIgVDsSsKedDH=>8CB{pyi%L681D8jN6^u`_ezyC_HC^gr0M$Ti zs_Kj-8_lZhjRfvVD;a(kRL>G%VsF3WLb9hmwV&-eY(%`{A+Gtz>P3^o-=HZW>hO2g zW1l2wEp`bf*2Td5Q%;(UXnO!cs}&e^B=AAkRZ{M<=jUtcYO%Cfg(*Lub97TUGPIe#t|3?Jm96~^X=I{5yj(Obvz_i3i)h{O*O8okkiKA`Xdlq>y$@NmM*70%GOBL zFV!g{rHTRQTxZ-ceC%)m37t_cAu05pDqf9DPBt@msX3?F?m6Xfv&ZFYr=0iaVhluyleIpZsz0CtZ zg;s|vtqJPQx=9VCu+hius997vqH{*RUtWOXIg)-1$?d0x<6#Knm8Dy7s4-bak8k;8|Y}- z=gNNO@J;XtmZqY3Dq39mp!67TPo-5VLM+NjedOPHrR4Qx@*NleeF@H>uT%B^9{TpD zKiBHvD018x!k54u4*Xj`fWHJrka{yZdXH4R9c<%tNwc>#sL6`wyMII(8yjswG%}m( z%ipS=%n2v}_yczw6a@nJ24Z^A1XYWD#?`uTL)(J&_CO3{;?Lt8$VeU#zdyz@i@daG zv|jGKjAGW(@*PQb^<#4H;zL>WB2l{*n(Dtrb(4@%4uEf_#r6Z)7eh6mdmb2rwdt|U zr|KcfJ!z$4pE1p`#a@%7czLQ7L|{$otZ2J_V``q=7&uviJ=574dJ<|p3e@3hX2K(T|9#!tr z@>7N<`JkTE=X=z$4$g+DZUc~0{XdX1$$elj;n~Q`?3E0WX5SHRU0eLoV0*_7N z#rXYqllWZh&ZbO8U`37@jmrAT0eG+ebo(53`~UnMc0c~{A?<V94OuJz_5-rtz2b*!=-CzIX4@O}eK| zf21<(NCn=ek-j2``S2&&COU9W9TbP8R6w6zz#Oxqpq&LKF=YG8_R1x0y9u?nF^g1i!iL7}YqR%D(*DaB|O);3Id<$^;W0!RLH@X~u(2^CXQ3t426oqE3R2 ztqETW`JnI_J>hLwmqRAK0#^tDH7c}9*Y%my*f2D{uq!mMYju))1+_o^RPT9hN*DV_b7xxl}OZWZo z6fWzo2Nd_!5>iG0eq-;ZwSAs@2t9wv<}VPxDMsUC*~4((9#?stBG0d^^|}V@2|c{^ zx&qIQ>IaH(x$rR!IC_jm{@bb0fBzU(-u~EboU#mBT zZ!P+XaRBz4ox2g3dh@ND5prRFzz|r36*tf_|KW@|2RqcV;?wV~8oUyCPs_Dz zg0B%s?9$sZEm&04(&0* z#bY|=^x9cHuKL5V7BJu98ebF=yGfH9zmO|w6})&DnpR1Oof{YqY`#sm4BhxLEu=7l zD+`W7)r<`c*pJjZjoD5yLqVb4<`z0*xO8}Wg)6_=!Pjh#xmcU#{(y0R%x$M-Y1?rq zgi$QBNPI4b8bXzj~AcT~qDi-}e?%Bm<*b2RRJ^5XWfEec4)f7oZSe1SLgt z4*NK)P?uypUx{9MzbhdIYS6&HDzqNoJc&4+29+I*Rn8MV{tPfh4N)x(KV-&sCDrMP zi-#`{T(@IqI5z7pEa-IE`Yb>Ho>F4KJr5?BVCS01ra6#)6heEsgoWJ*}HjipN!r?pNK81Eaw%UiWOrTr1Bob zc=6wcS7~n|{1-Nylq*w;!!2kX4V*y<0Xo4mmNY81AgB6p^;!uv_GH-lhvBu*q4`uv zylZzwU5{bKlSq|L_{lf2jLd~4>&iqWDKV?Hl%5!Pl1a=AS(@vJ5EnviU^R@F#cx>w zebjb~{-Q3jNO{rC)zyfrH?gaKixx zcvl|2dR@)+<>7u0NA2jOo5dG}8Uco%jj`h^w7~wbqV}Nvv(nh+g4Fn7%9tZ0a4pzj zrfH3SkJuB%QG&k7i+Pjr&3jeoj9nPweAEKW$Zsa9y(yx%jgF1+cc}d8!v?!a@`S%h z0nSW<{Y9#HFu(EQPKoDx?owyRmWo z=1oncdkL>yI7=XxA);;a!W$x`LasqNV~>_A@8KuM`n1BZ*B*%sio*#mk$ty3Ec3Zg zw^iZ>#p_K(OremSyWcLq&B=s{L9$YYa;Fb#N;ck9O+X)4lQDw2XA;;-3yTsYl^Lth&n+{|TDQ1NlSgoMsX5G3~h z7U57c?^{))I>NAo#M%oQVKTSj#(7@f+UeE=$9ZYF)6~Lsbmcla#ffXQ&faos`vVw! zFX_5V-Ed_yu6f}UNLIs0HCXMHr4UW4iKe6*nCw<}x$mtc_lUK-xO&_*Vc0t- z^s_@^tc}aOV#tH^@agf5fw=AmztAh?Us$*&I{91UW4GeE`R(ur1&rv}Lt}2WH$qaK z;yqS>G7v>J^c`Ja?~?r5y$1%geT`B1ip(y~^%=bhZVVr?Q=E5Fu{3iGHsn*-AO3>p z8Y0ni79!U@`NsEb0!YKmmR)9_1Xudwojs{~*xC$)4JUQlCrqxV9+z2Sug=K0J>!oX zsTxhW$^QlYay$Oc>O6y^BH2fj)HR~jt9=27runU>l~$gyf94!s1#$w3h{xH}AMd`o zpLc&3Oh}nE!yCV5GIh;6^v{s^PMGwHM0|z&ozXKjz~3VN1Vr>eIDCy7MDedEIaA+5 zAmcIOAGZP}|6fUG3h(}P>nw%S<^pNk#EZ;(QZ8@Lh@$EOy5;P`wbbj+G0{h@;bK*C zH_t>^UM5U}iWX|cx?68NSvl$}#RaKkJ3fm$XH2jhCEK1WmVjXrU!v9^^V+x=_?C!7 zUk2*i^Hfny<+7f`Q-jxwQ$Qng!6BOL`PFnhX;i>4q&X?BTX;iP1xoIbrQEpOd!05F z8zW*~UsgWK!WxsRH%ZxXu0#ls4yU+hX=R0X33rU4WTws}(#lbZ*s{BES2_2bgy3Vk zdz^CZo#o_g;S1;7%}*18MZ=}ZlLy08-_1L`myd=5%)-F&55c}zIzA?L#bT4%YdqjV zGAjuiEG>Np$QII!5;chZd3>72UryS|QR1&WSwN_v=x*5s`H+(f0=f)$t40sHN^-hz%)23 zeV(Xy;V@0bzgau@fGbJcCwF}nfaje`*p(HV%y5{K zBv~=1K}EJ8RLJn->VJ#m@9F(ceT+onUkd+?`WRKEtgr&>nGr2T2Vk2SYi5KQ>L?{y z`t%9$<_-MIA#Qa5W0U}k0s)E^@}-Fz94#4l$iK%nO}t=1yKaYRKUuw2?725pbMwpS z8UNwt*@9+{1jGzWW?7#&SXfX91-ln#TH~~Y#<2Uy!yqK;2K1tFuHP9Q0&GEKy3Gtg z6xO}3>y8y6bvimD^hD*Ym8K+j^!vz&UKmD>`5$QQU0$rW!HuO~o#%#O$K(IzEHaEf2^8hcHz_a}YEy6Sl69RkkQfk<;_h zDz+rzv1Lj)qf{iI{%hOY_hU;4CN+#Jh*PovqTKgx$DxHwIvXJ9xg6|3F$7(aG|$>d zLGr2`)KS;MVeygO9pF~jr#=LnTtpTDf`ey}H39evgr?Ui8=SmhnDDmIJGD!dSb zprFAzZ2eRy{mv)J?_Oh_ok|v475aSUYs?~Au8#(}4{}2&L@;6^umm!po0ynd1K?QR zlK>oxbk+Z!V|nTIY~kYNyn6ay%k^^yOhtYP*~ zS;G&2vI3dzG|Zjr6@mc0LN%j_`qsB0kk^ZsXJQ4|uurX5QSR%@bT5ARRo&U#zp+|{ zih;f-_lPS8nVL60Et z01WN!b>~8Eu)s786L%-2RYjTN5D&<5%P3mPtXg%%^a08k4rIvOIb2zJ_fvLt;awC3 zE1=2u*~py=jeV}QTmMjzui2^E<{7@1@gx+s${=JGEg&S+R<%h3eUD}Ka_a5*0_}${ z)mPU}VV3OZM_`NZs-gs(r0Vura4)rc9!*Jn1f&!LXS@womOKRkXet`Epca-&sntB6 zfJy67+F480?ch!{{ROElUaEb*bsP(BBQEa-^dMt4Jwg@7=W2-@+0`(te!2wpPLM*@ zbud(SeQ<}Z*Z5Mo%w`$*MaYyDn?DSKpv>8=l#d#*GeDrS8csjeZ6~E22^E39R=BI= z9hsf}vdV56qy+S!W5!p<4Hp(q)$Jv&t)0&aC5V2~isuDFhPflO)x&n zS>n@h7S}2ei;N9pJMGG-IW!4mdfY`^{ z0BVr$+wS8?wKj4n`Pz#H3>}%##IR(0jKwM7sMojusk3l!*pKHf5Vl8z3JeR!-<;WU z3dQBvg*t6wncIauk#$GUabkVaM?Z7Ln1?~aT_;E5{IXGdO4ZN$Yl;*aORQT{ikF*D z4Dtm)td+F|lh-mKoxRs9ja6I>-(bBI$#-5$SC~u2;(M1V!H9R#@<5PW?BS2C6V3Fx z>SvLbYEhOnmxmKZX0_gAibkI)Foc)BV!i~BRwR-hkpzrm4A-sJthXF1-PDZNG4=Fr zg6EV?gjbsD8D%4~8kUfp%siG;>!r3vEK-K25rMA+Pzsp%&Y)k6%ys4Q?&sUN+ttSz z279RjZ=bQ)h4BZyC&M}$_fRJjij|f7<~l$wj?+Chr1;CAz}|RI1Vuka1t?drnFBkiHp0P? z*hiQCCeVm{;YB3-8SF|>`fgt5U3S56(v(H)%85r3mqFIlNKkeG^XX}dFG{|#NN-z2 z-#T`L;wfAB8nPVVtr$yH)clOEzP&-XG=8QamN&Tp;D>@KPTUZbXq-9WoZun2+by11 z^PT};MQ**oRKxQO7mpoYwNKl_s8GZeA<|O(zsAU}^A5|8oe?%}Bg0Wv zt8%{kd#GU-EBfXV(WVGD)*(O|vZU=$V*%!Y$i^iUFOTnvbxyoVuv+tW)69ZZw!)9U zvjaguKnF6+oj-nZ=#2HW+TGiYq@A!1is4n6UivPo^inm_;$z zh+ceSHsZv&X7OV^0plBO`Nd4L>WRUu7S|mFqU$U{#Z`ez48B z%4Cb+^y5|=+t~%wC%EI$pnQIqbkXC=D{?veVaq4oq8a&aH@azsn=L~txFAf4%Yvw1 zg&>AVmGA&Bm#a_YB}d?*iu=!{7)R^BrG9brnuDVaisVESt8)}BqwTxtl7D?#xgC&) zt=5tc4rSaBVc26$Z}Q!csi)n0VO1(G)U!i6;d&LIfg~K@`rW7@MMhb{$sI|33+^vA z^`GEDfTm<2ak!n#b}O!b&m0u3xzT!mCDt7#q9hSK%$DB zxAU){=8})P+P`rS)w7?y0$$;_y-;spXJADA#f!VUepWZyr>uw(_G8T6RCg|oGX9}5 zkuLl{s!Z-Ffo20JUAM{T+msD0Qyd1Sg>v^vEU(E-~9{C36mc+DGeWB$Yz{g1mV zo=a+Pe5QDf*6}uS>B{ULpAj54GVNQ%nQR>NP~qE&vs!0SDgIX;l;Gc-u|r*%q33!O z&N-7cjdgQ4unDU1Y3DD4+bt9LHgB69y5!Y#H`bji-MM^}D-kMoJP=LVYWTQ+io>KG z$dNuqs;VJG+vF))EpI9=iVd(MCupgXA9|@$GUsj|4Zx=zP98~tJ*H+Vizz3mB=@NR zxy0$FM0womb#nIsEb-9MQF^h?+R7B$%r&hu89&6O63bV#uL63G5#U16H_BJ1v@CD7 z9AB`t(kNvBKLx=w7`YJB*_s4oY6{pV1My zB)=+)S9ik7gQ~6rQWYaV*!7xR5`njqr@6@PliFnqd@Eze$paSNeb>VpJ8!SvpD(wQ zZCCehtt+lq9&a|D*cq+Jh0;D+tMarDcY70#%(~ExWn@1k7BH36TPpS6)b&z&e@+HT zub<@YNDB(tkuj5^CG(#Y^kd}JqP?G{X{kQ>qd{q4MAB4}cd4JHGuh=8 z_9i@NfA@~C^MgVs^+}SLeT5Gom}3=mzc9Z|2=wqRG%(1%q%dVZW;VS%XgY!U8-G2Y zRiUoiP4BF%0h-R*$78=+VDV+(_m!0u|FzAcvd6?`+NK@R?3#W>%obRI_{n53ebRfs zHEJ>UcO@kYs;mh}M%U&H)v%qVYe2hy^mbxr-dOlFYkOjqr#=Fze&>_%m@i3=z0Rxp z_g6@REG;Z4V|9)3ITaNZZL5YO!Sf*p>oQ3R^zj=%kbX=I+w>DPeu5Uo*4r|cA$+{C z9g;4SW}Xh;LN&dnlg0h6r**$8ouyqW=%p9d;WnzGw$)Kl57k2^n0n2ql;oqou0P30 z(B;vbUAu6yoRB__*IWF2lvfUK`Wu1Nr1U=tq#lPUe+ZD+!B2GBSkhC-HqJ{A^Q(fj z+Ck_X{NpE)B+SSAV@UVpdYN<(7R8?ax%N!Yav^Afo#~vDYa(#*3l$^qgUg_>@AWUCL@$`AzuZ1PYp+iZqofD z)dK<&c7{oZ{p-DI6I~7~^*h)DrS|g#FY1xAw62rgX9ua*`Uu;OQN2{_5rbJ4 zo`VzjXjFdsRMseoM>6%!szzUwksp;6RCkhIRorUJ#2JfC{h8;AGs;p94sWh~%C5(b+dWw$+K>Wtln#BwD`t1w|1M#=2$0;>8VP{r^SRTgOG! zeQ(2ppdb>0f|P)iNGaVQ64FR__t4!42&j~FcXtilAl)^<&|MBabUX*Wz2p1--aq|} zGtAj%&)Vy%b>LTMa&H{`fry2;rd06L6i$YXp{K}n8AmCqO(G9~IR?L|9HaV~h07!Z z3<5gF#*=7`MunI9M~9RnkD-p2>kiY^p!!)B&5}y>I7i=xRlH46=tFw*8jIk;o`}i> z?J&)mg^0k8oS&XsRXEt#Yf0L-KRjRPot*!2^T?_HcJrW4Gwn9t8D^@`HmaPwK$B0l zQdAh-TvWeGCbLQ01%r&gVTeMbVq@`klHYod2m1jlCYY7oMGqL%j5&cOJQbqj+7XXl z#W1q=S5{=cIF)O(Y*D+~ub`qhQmfQqgwpPSVaUD@0$GM`yV-7zg{}fVf9V5{lD|kT z2_vOw7B-gdtiWHiR(H1Y{C8b)kzTLsja!)d39T30>2T3Aso`{ipINhxb^zJ;pvgt8 z>dACQR$(SQUAG2)!Lx31}c)4>#nR4u1M-F zib33`Hypgi(m&Xq4aS7eR2!^-Im;an?K$1E#;a9wd8B22CMv6`I{|K*p%~77LKs)2 z{lpR5CmvUwYF>nKQV5U-MG|{!C?!cmI$0dqvk0Uup@rv;CxD%n$zTe_&I%6n6qZ1A zo6voW*ZY?Vr~J-@!)O_gZ!n-5ll;bPxQMzBa8gABb0~Uq6E#$Cmt!PV)vEIlu6pzz z4m8L!0Ye^Ud@=~{;!G?$^Z-v2O%CM~f-0q(o?Fq6jTJl*6Qc=FyaHoxpM8y3v)wYT zO8h&7f`@Pw@ykAwZQRh6Yz`_-v1)2o+|fSPE*!XYe&u$srGMfhdeYs(kZ0jY^?>S! zukqtI4xlHABMsN=huYk)g(VYoA!|zc77!pjn1TVJ> z?bZ2BG@a7Uz(oAVd5y8vdKNS4q+nqee^bNaye1IC&9BtW9XBPM1DeZo@YjkQWzijF zakDuDQfAlgfUBlRy(=CqH{NJSTW@<-$Zlyjc7VjP(NXv2T`C?@`gN1u`R$z6qFw}w zy~-!tZH$O81cWdlyA)f1yy5%yf5lLmILjoYBw_$ZOAOkEG?euhJHm_-w?fH>K2%gWx1_w-i3f-4pzFD-Toh4!Rf?o2yjUXzx^7nV^x&1+~UpU-}Tc}PDI zs!m(uFEtLBWv4#@xVovsJ8H06GMD{8&JivxWyMSN9wu5S8HhKea;4z_k|PJ! zPm|&l99JFOtNtli_H(*y!U&iHV(}ILC8B)XZf(`^hZ1;e{9eb5RnOd}zI+^=n$p>> z_?m4jlT0*QF$PJ3x)wF^fCHT(;=Go-wGx^)_xW&w7{j+J*5elI$4~le0b0f+wTNcc z)gb{e*Ssf%?$JiyF2MemIp|E3L}#VPJ*8gjYY8;eMZe;fF-tC%2Fx!p>+43^Z;EzG zYK>ovu#z1|TgG0RR<5Z;R1t8~(>b<9cpX!ep4o@3%EU3KYhCBVAh|_71mC$$H%ray zHE%5=CXDKl<>jR&k06i*uCa1h<^!BqP)oj;dZ~lG6}9k8z;EW|N&7G6g@aQ}CUw%% zRrPqg;UDJ3o?w_EDNL>*a&Bh1ayRUR5_i2L(3noeK^gzQ)C&WSlxDeWyHWiIeGkA- zItDE#WC)cGb)-AnKvy>A#KYfHio-pj-V&ciCX@vY|4adMpJm4^e81!R@7X2vu5^XM z%tLEkL?a+coV7*Ic5>g=o}5HwcS6v70rE$DZQ#*JacR4hvQ=Z{y5z^5jwX|xO4nPrR+gib=ye=nWMMSeE32huQ zU!jQxzY*a5IL`7$@O$34r^$BhpBCFNyqd3fVj7-PRMse1M^6(18iZPyt~0JCL;88{4Xwsl=6SMn0Va4yD*Kuvz_kFCDqtB4S@IIv$ISRm6EYe06sEGTtvtom7etnp*E0KF(_*_Z0F$Kqj%iv9{>3!C zB}#;w4B`JGlwJTtL?v@y6PH8Iyl9ax;e`|4Br^D6CNRpsm?`521dim-V z?Bx2LaNc-ASZRCKx9V%|fB^M;m_7Ojhc`?f>v{8ph2%E#Z|<+H1|?vD_s8Hnn=^K} z43)meNc0ALt^@j7A-&FH%Z=TMvSy@Eb3`Q=VlnmCq8^ZF<=kygK)LnwYt`y=#TmcL zyToE`~XdUUki*3Z@60!gV|+`oJ_)l55~gn#>NdJF#Y z+4TPZ`)q`^9uSuz#E{qvydjpPRao3Gio!Sg&Pp6MvnBq*lK3vG^Im1r8+Z7ZnI>iV zx0xom3UjF{>wczbpi^e~`s#Xh0r#niom`Rszmq$=S9Ss}*Ze=srknL%1VeOAy6`my zoBPYI_>_2k2Yx$gEQt4CJ8RK-VJKFg$5fNf(1LROtnwhyrs&xcugR;WFH6Q?mnL04 z74wT+5^fOpC6E`r+W`4xuOt@FFwZC>l%5#c*8${8;anxI2eOPv+vMk#b2aOdmXn}N zcohhl?y~?pDzI2^$ZdUVJs}XH+4tP9^+FjI{B5zpLB!lPGXzpJRqxM`4NF^Q_Vd!(nuQfuj&eTz>CWZ+?X;P|~&U4;oSMr+*glq6jUL=BUU2gXD z%YIh$ued$H=sym&-PN8~@gfOKF0+J0t&ItsLwSM8Xp^)TiKhRX3#u!B)ihF`QN$vb zl%-jkWH}WE!C{cS8BJKI7)pl}FDymdRLp;Hi472t0YY9UpP6Pht?t4zFhXN5O;nC| zm5#Ubw+8{X{Jkc_#cZPi%v)kxp|>#Y6+O(~c_DopFq#RF7t#;|@KJ4Q6hxl=o{p6PGhLs=%NB0Kbjif657@oo@ z^dKj5Iw}9ZgER=ad$s;;QW6jXF5wGLzYwYHzbP4JkxaucHv`0MYJ7l4F+9E=;plf5 z6&T!T~!ydTny?lz*{vDUGq~XB{T!)px(ZJ0i#P z;_MxvB;Yiq5zni)a-?&yU(hNy`inx_q`eyjLc2h5IZ}iOM6ZITn1~x}Eb<_C*%!1} zRulj3Bu%Y@sxJoodtr5G2o?G#?Q7vjhs;Nl>NLM6PV5#9oEE^e{+c*Z;9+F^cZ#eU zxY3qt-IFCq_V<`>kB{2jC|GG!U$C0?o}{4oXJK!je?4z7uHL77~|wg4m6s*hZ}6-Ho*Ic7aO=FShHU3;P zq-1h|(#5@X3QMHnBGSXGbCfG|vxm)>v;Dbwpu3v~T6lFiMvtgUm5L@k6xU)WzvNC+ z>mk7=oj?wvmWgRs7WW7QQ0Q^&pi5Te4!G&!_MGYV_GcsN-9sKuFFy!gK0-`G7W*Km z_as5!i^oFHyDEKay@xznoi>)eabir0%z1SY?yT%~8<2hlkDh^~RVCbop%a5;XQG5p zWdlY^Xb9M(0@&Eldt?aMP&_c%7T;|(=fIW{BX+L(-1bJ1SrSasYr}qrXRo3`$+4la zu_xsco0w20%MaO}lV2IN9>i{3!CHlvbbAqt%@a|}xKqV9yWwlj# z3r_-exZKw0c}Wxm&!N@o`NlefhF}rB6de&sw*Q6O&x!_>q|+0o@s$+9+H*>gdG<8m&(vvAfCaL8v~pjZNEK{FAr-=( zGGX%Rc{w==%Q-o+=I$>m+1T@4kG*;&9?>vv#Bx0&#w&q-E`5RZTqq~RQ`!WFhJz&% zTUA9=Tuh>RM)`V5_5mDT4$+ioH@*L^QX0lBu$JYQ|NQKSOv<~C$Pz_;2e*R!MAoUx zad>pL2sHc}oARKBVI$>jbQvp#J{21G?x@o~1_~3;7_R?Yvz%GKu3U7L*Vu@H0w^d5 zz>0JdBRt9Nnxl_G;PeroMT?10k(dsPmn2(LR7!aB+>VeTBPc`8*touITP*COnHMoA zFZk=T#U$d;BOd4BJci2Zs?ysNQuqlkuIy!*CEG>-Y2$SVFOmhDWIG9;n#>Fu9)0G? ziPFmSZt+8L*^pR{xQoln;5HT}FxwHfo|u1O`&NOc`731l%a)dvuV0qH-h3u)EZZha zeEqS{TH3Bx#IO>pBU95RN8!tTVAIP$@uT9Tc1Mnt;f=|YxvV{Bk(RlU9!+PCc;9ix zzwWO9N)01$Rdc8FVnazEQtO%n+&2cYJ#o2aTy~r$nygF}-74f=Q4p-Ht-qgmT_Ieu zCp@|wmcwMH*RGFR#twhQe@da*=&XbqR)5mKJG=Z^TV1_^DMwmTIzwI2{|ktWi|j<~ z;*nG><7EM;$CEJl{RI{QZZ>$ltC>vc!Ji1g!u_sWK4;&Y?9o|5Gr*1bt+K*}2Yj%y#kGQD=>d5(5JT3rYtY9cobCiF~6?O{K>Bq4zjN;Z=Z?)P-W{P+b+j zyo}DaKn|mQO;7)NG1ath+Q98a+RYL;%YN1>k0!>@+qZovexDQ(r>CbQ?M@nc987Xk zTr6|cM7E?&-*yZoOK3HEJk_!fZg7+I{r-*_UAHbBUPe+ZW{APpBBzG6+VA%xj0LTz zh)OmzGtos03E}-G76~89!;s99dadi?!=0PWM(qR^{StJc(@tBRed0-KB>MJny?E8S zoA@e{uD+nSgkjL+vAV>{+3vzMChiBu(MfHOv>~(dy?l?`6LtPnOHcn3&$D7NFJh0y ze4hTUMzeD{F6+fl=cY0IomT1sEyEL!G@4dM-vN7`CtQG?ac(Q5x$=ceg~9MD&a-E5 znYMR8Rl4sT$80Ren&7a5192#BQWYMHFdkkt#TtfgNe`MH8m2)*W5Nh@q%7o5@4q%H z&hce^rm(=Oz?@ey6n6RL5WQ$;i~=QWo!6vI7;b7@0-l(AkLFZczC>rkL8)-??56m(ngdhM%8u9k zUW55j2W7qh9s9En|5R$=k0@(YZEz06*-#NpwUZ1B30A~BR+ui zvgMT&h_Vj)Oum$mupaZI2Hd}o+t(uoY{=OZ0l_Pl*R-^D_1;q#7QSy9$;pDLoYhYe zkCs5DOJUpW#a}BSA(CiJ%EQZ91vH!%Y{3&xH`sf2SB52)vQxQDijGD{D_=+(gcdaJ z5cGwaYks|K5biT+XC9I_oMv^Mnq&{x&28AdQ0HFu7WcM!C%`hkvdq>?nkXy)<`{fQ z4+Bo|#m9)=IPOtKP|)*WGEDGPWfIK%#^S<T)7f#eB(pk)U@d9!is`8Jj`K;!9ELfQ*RfT%F*-?KTJL#)@8=*S+mV6 z{p7ZFY}Q1g%*(C^H1;9q6HCNaJvUT-qLS$i%w1b^w;Q+V3%3imIir@8IfL09eUQf` z*wkx}Ffg(fzYph_(UX}zn5*?z$=m+kCfE{%I-6H3{Iw^qcvg5T0qglQ#PqZm&w}K7 zoT(SZ)rg#QVAAn;al%eT)V)cp>czsg&W-QxF?qQ1@3A14UW#jbF;bQ-y4PogMGek_ zS>F1EQ%QYP{YX_^ETSFM;NF;9(w-W1!sO7-)?>UwO2y!vZ>0pZ)S>tl#8-U*$D`WU zRxEFs#FNx3bqRrQn>M^}y}h-YO}Lh2|8r4G-_wHH(1?p(vr!Cn^ZFVyN(`>7?Jh2# zu4g(Hl4QR;?D?9pHov@izc*nO27B*zd*)VD162dFR<^?!Xo z8^fShXGZRK@VVtZWS)I|F6;dzfBJAKir}@AYU!7_=nqLSi{maQFR@sT!z0X8!e?2X zY-4zIX~KO<^3P>HI667lr0fxt=o)tx*5b~5`6>bC&i)#au^H^-SxAL3Go!Y-Tswx# zx^lsG;p&!Kb@70B_LMrpQ-$k$le%X#Pm-I1B63z)RL^V>-Rsxg6~~+1oMdkpP`>!P zYRrn@f6hRy3CHak(I*bRn3FnsS+SX6Gns|qM1eIZnB)R&LEJex?ohC44yhW@`j9ZX zE<0Z&uFoc6NUHI&1IF@Gr{MN^vD$4yc(inrr>Fgp&+Spl?GgL&1YXLkvAtTf7+H`6 z4q912UfRtI^;SBi4LEDNpwV3PMt3On15%FYn5S}*=7>czS48Kf{&Oi^K}FH-9@jmg zGZ5<7ICW6LqB{mF`+QDSv=Pv5pi}|}{t4CDg{@moZsFM@;iJ_S0JU`Z)K!}?a8dIroE}e=n2z?&|s#4FHK>es;JoCZlYlEg!0HKu(u^DJzSYE3h+V4{O;Y}dP zkB`@o4FxA+A+CJ=WRlx8HWyjO5%h`H)Mh^&h2FXsVZ15+K=IN@)j^Pr%P8`H#X7jW3W$~?aXeKm@I`y<-bOH+|H*V z@)zXU=7EN$@U>5A{KjM~FCHR2_{fMhuI8i4J($FGQCl|DnwA#X?Zb=RX;2ib*E^YC zR@bPgIH-2+vF$1$Pj1oU`8B*|pzqu`$dJX-ScW7kq)I8dv_|5L^dX)o zl_^k+RbM=oSZPHqMkT2K^bzie`w2pE)5kOx4Ci!H6^7lF20FpWo+j#mpU4qoGbuSdp8JSx|gKQ(J*vZ=Sm3z?I!v?EhQ4` z)XZr+JQ|G3>ikGti9Y?3p;%$qJ+co2MPKwUrD5aYaeN{R)vD?1S zOc_bL2YZ;KnLY2XD=Mova*t!P@cM{6FgmCk$o3sl77dMkZebi?x)4110`_5H z;42Rw?yivUecxWWmAB8PaS&HRftF-tFS++iqJT~zn8VD(*S9bUBa;ClxOcs;>F_At z)P!C7g)Vvzd2@>ngo(1;AF5TJ^|e;Db;*@;tCDuOQ{YlhDsZVd9#2xFo35@g$I!l{ zzQPD(FBYU}p$HqGLUiE2ZJLsJ#SG2!m+D=@;iW$aL&^i)3u{gw*pc=1zyn6@%LP(`^VJ9wwbJiIuos%o9gVe`_Y0-cRlbaaEAME;dbxf!a) zA~QyWgNM&PdpGdxlP;1{Kl!Me@Bxpl%N11gCBEa2-i9btiptIi<(U~wS|e(I%+*C1W~Jdm^Wlkij||*@9{aSG$9kkU=JSF@+jdWrT`rlnoj~ zTx$`JCu2!Nx*H8T)bi_bwoOPCv+Z z5(%olc(V@m!iRFdN~xfoPVaN;t4qa%ul7*}w%gbzi!~>(Xl}{!n8zRVd`qBmLmKhC+ zI7kt8;AvTH(T6uz2=wX|U#Te(H;isVk1n^>bulzlX$yrO<3YfesOFBV}vU}8$GK$62H6eg^YNLrtXeD4Dzpsro-IUxK7cmxIL7JD+ z{e#cvGua^1o;cliFhgx@KbV#mjlyd5 z*s#nhdQk1tKoo@z^2sQ432##O0vZNxALx>5ljFpp+Rpk=I1w6x6D28PW&J$oR`nQ4 z3qQSC$7=$eimaA+we67Lw4!?LjGH#>!>uhcV>25j#!s5-%8xA^CF!zbY9ySXl5s`f|qKNIzxhRrzxeoR%#wHo!L zD94OII3QG8>DoJP$O9~&O;;TZxWIelir4+ee%r!C2QR^&7dYuSk&DWyWI>aq*Avax zKb%$EDO2{}fi3LP&ZlDBR5^GHk?aSA)Mtk~zn?HAU&F59J_1TNJ?U64? zRFG3Wt_|*Mcwo`Y%7r&|;SXH1^0^i#_Y#L~@9d7px|6W*l|Q>{4uER8W!bAjB&f4? zG4S+9wpDfDBU8_v`x7FQU=G6@Vl4%xOsW23Zt=kTMLqT>V|{w^q9)p@N#0(}TDw>X zj!WUsLcxTX6KK;4kWG`G_y_ILR1a?KUz@7)mF9F>W&$y%sge8*B=1qrIeAo1-7U{0cXl;7thhur^+%r1gbPkJe7r)uJ1^d$ntEL5hm5q-NpDK zPmm$K={+#$q9}{c>#~SMmc3aA^ltw6+;D*tNdrFphU7YbO=7FX`~G^4=FQZoRYISW z8rLQhk`8KAzl76TGS4cL2Z5z%=3YDHn%em+yc$yZO56&-gDm5Bc(8`vd+>yf>v%dx zJU2O-FNN!@hV1ll$K_dQ9PUFZzcUr_Di)+FmgiM0Z=<2DoObm7(L+frj7)*WbCqRt zP*=;5in8I}VEQMfnkY3G2xkQ=D8vs3el(I$&&VZx*5UFOmSDf9|$mvVFB- zp^Wf7LHHAhLcN5KYBlAUrPEgP|B@0lTmbK(d5s}<`{y%)5WS^#CPM`2<^1lrgO&rN zy83$Jg)d-IB$2P5PG3!sPyC{{|NQ?y|JZ+p_)^ww92VXB2m!$S|9!c|1YkW}!5_qV z|1VzSBT&&#a%bp$pCSH#UiKb&Ns0(J35#_7?F+sp{Mu;ChepICvszGX-1is`zO?j&t90zhCzTV2`|W$Vmydb5^Lc zcs~n>tSThLo7z1dR>%l)d6XbAZf*O0mxM5Lm~&mZYsf~}lQ`?$C!*?KdEoqe(>zB&7?BOV z7i|F7KtvJ9mf71#%D$(~zrC}UMS+`WRn1a9I-L+rl`T7(N%NYvcNH?R85kB*f(Lha z4j$FYww$6mHz&T+$p&IsW3KKa<~CMFiGO4GcoT;c*<_7MuT~c?*#0uNeg|PfX@L|a zvH5nbS=M%&2nyDxPT~Nk^hy-xZ)-cRNoBp8zwBBV%SWG4Nd7O;@agTLugV&Z00k&uQ?4;v0Y$*scJy&U^)>BPI4S<-yrBWFC2vH$e}v-7bg?d5mY zGjs>1t>K$c6qh2+KA;0Mu~m5NQf71uBe{+oOym&q^t=Ju^Iw#L;~3r>U&8{LAgR{+ z`npZN$s!rZb|^q5^gMKsOe7MvYB z9B$#3N?JLQadzFeADcZ?^g}$%D_3{=5c5(<(B|@3V*Cyu(Nwq!m=&rgyeDE>g@YM< zk%8+M62CYAhE~8{ziy6e*|>Q%*%c{}(66su4Rtqb_ zsJw!bJLG#L>z`Qwe(5XNCObz9ez$;{VB-TmhE9-1?L?M$XO7(GA@a*w&*z zp2u8JG)#-bKzW=VA&T*wb+~o5SqLIKBQe3=yTxvv4BOcIA4PPoP)F2Cnvza(gXmTc z#`qttHUBC-t;c`3DC@^6iz~d|D+g)ld#QES+hzbF%8iaj`JayS?NTTBk*6_8KAozo zDmnIg0u=@rRxOLS^IDJ)5Dlk8m7ewX=7xeJ>>C#`5kc?c$5fE2ZN_Z(B7%Y$b;Y&9 zrG=bgK(HB&{u%S?>r6wUSEtGYiz$6yzK8orz7%=|D5o{Xwk7{6>^i}~*#+tDb|Fh8 zAMO=gr+|n!W>U$2aEaRewpGmc<9Tn8W8H61Rp>D|4}T3bbT}+v6v)KFg4NUP5eAmQ zb}_8X>gJk&>`qB}gdZ>X)I?{{!p2@?Nn?~|XWc2SPQR4aigZS`Hctt8UnbN50dz7v zH9HeHkcC7Y>t1M!-@&gyd_~39y3LAmv5pEo^7ih+dHMv0y5KPWP4Lz5H~H{1iVKS( z*y3m z9*v-W#iAG(YMrfbz9su#MfEG7s1_ZnU)*oC{a(2W%vAa$RYEVrKpKBKGQ|JUbBO!Y zJs?IO?PV7m4O#=Ewd=0*t?%;AX{tR5ov-WTJ=#p5@cpMs zm}3J<2i1$(S4dw{8-vu!zCBREdQ_N~wLA43T6f91%}7US{>{NGX`c3HpN5LHR-94$c-@T_{Ur{gY-7 z50F`kV*`&27YoYzW#ggtX)IlZN9|ZRo{9*g8WyYc_3>NWA9%rcyvaHA6<1*=BwRbO%7W;GCSmmoKRc>fXFSGVtBv?jLx2^BeIl z({i>DY-4P6FMs`cT1csGF|(Wzm6FU9@fXsKZnwYug><`(LkCze)B*&|EQ;vWDql1@ z1h}n_uzz^)kDNYr2eUMV!du5s3pJYKd{j&teyg&th&0ERBhQ_jKlWhpyt(AlQ0Fv2 zH}mL(%D_99E@-Px0~t5Q>>;~GWy5Go#VLLUXY6>|J<3fzXfcJdO^sN|Wc|{Hy7Cfl z{F39E1T;mTTE`lYrwyuvECzSaps+aZ4O%ENx}r#d#i7xd@dVqPZ>By{KDSz^RbMk* z{-lfS!s*{&=Tkmw`y6B+J=Z6%h_4e*ePRVe; zi{c&#YnKRoWb$s^Hkl$e2gwX&0!8FOEAh<$%FW-B?`Cz;MbW{CzkECNOjxy`Cx-R% z%ZHHe?Ob^YQo~SmpXxO2$znAvcJ+cj`Kn#(A)Ym@ZjOH%3TpB@d~su7bs_^vj>JY} zkot`;2z<0miT(U9;x-&#d&BQk+X~fkWh)XtJWcYw7h|Lb!;Geh33o$r7SXO}7F9F9Yk+th8f9 z-5uN@=yo#b)b6T0>Qy91*~Ixah2S(mw(!S)l{g~6p2B^q2mc%3q6>@ZIOV9{Zb`s z?t5EmwT%&bf#$r6j%|)n0pk8RPCR%e=pICi?{5GSlW&&cKg;}dZ$;+Gjkg(?-aO=S z%9c;3TVb5%rZpm#&_P)wR!zT}&nHu{Sdp8$dRE9cRo+l|UJA>cKCGto_Y)p(JS-nnECDWZ<`uCHB-@8MZNYjD|4fc^c^D z8UH#_2^V2uKa2vY^IMBDwREuJ*l6)xhpi)oq=QcJOG5>0CTr4S{9TFnK5vs3<~hb7 zNr71{!1Y1zE@=J>FErvlku{Xip2}WO{r836CrbFp0`(EnWQb3*{;gfhwIN&h*@>;D5CCUgFR z4$`XF!`${0{}G)ZA=&{j6e;@H>R}i z(8J-uTaU`Etu3WK#NwGmDdCu-&9-UkP{$_g9`QTPs3B3G>OTDFGzS=3Hm0eCQQEMY z-@|&{n!I=Q{Sn&XX0M-y0~ZUAkK@nT_sR^(%naA;?Bs!ZIZ_*rS9!Gue41Rhth!>& zOPO2DMk6LccJt|mkxe>pVYhpy0dptT7t}610iPO;-vZL=KwNX|&Dky^@566F_OsY; zu1lCL18DC5(|GrzB1!Kn#+$0Qft4P(q;?d;%yWtZJfNnP=+cMjrS|h{e`68u?Zs(4 zr!k}#?Euy&iI0sbi)`>{FimYnh;k;laYo z85}NWJmwwBp9(aNqo*AzU#ABnLgcljma^<3Yu(WSQ%_O|(V2>u*oj|DDe9Cf?tNcD zlb2p36ac#`aL4Xi;~74drX=3LwON+d?J}DGiGq0L#y+_ykbB_Haa&Lz9 zy}1C9n9JF;17HKm&0YeEsbW;j^S;c?fiyQK%Q0%Nvm&l)=V=19CP%aZb#SC@2nmIU zc95SvH`Z~AePW&2_-<0XdSq;(nWtI^a1|&)>lGY@4=5wBp1;4_t7Pt`&})=0DQTB; z%v)u^j)$O<-izaFOmT`wbid9mX^sh3v2L0h?G`t-Qj3oj6pP5tEqtZVAnSJS`cXUJ z9WBfd7+PO4zkX9kKQt1gYS+V0`U$G8o|n0ay_Uk6Hb}2o8P@ia>Z7(5CIE_3eJ^i> z7TjTOES#@JXp;U&qDngfrf^!To8WxRwL5%N*N3Qo2Y?LTJvYjUhRW#Sm>sbJ=MW8p zXI&ZnIIrL3M@3z%AZ3dwk)AxeS1deLh)H7n;Ty%Qsb9_aY`2|Z`jZ9PsT@>&DXV0T6U{F1z;9M zy-Y|8s<6xR@AS$9+qnCQ z+6X3$0G#2g#{<46n}m?7$6=EbI9CZ;xAO}Xstalpif1p1r@`&372yL`g?T~K5Ps%atlkC=ZA!QvZ;gP<06w?$KkX#gz{L@W;}_= zTt{GUzgE~*VBWGPu|-1TceXMJ%brr!+k`BpcuI#^X&jjS?M@}_n_(1=|Dn`TliZ_cPcwCh=oV;qrr_=BrCtg*e}@NkG$@=87tU9 zDb~0@8XFsWQo6o@=I8ydH>aFm)6=E)o!1%^U8nn8ky*?(slI!HL#}!z`7uMa)R}W~ zr`>1<4>f+fwy@Fvp8NU_U9;Tgu4b#i374ZZnUHTvI7rX3gtxJg;GLInBzkzYmRA62 ztf+9;$N9Jw`^K}w?+0wQbI&6@iK06J!kyn8-1n_ybbQKGydDF=^c*_SE5v`>FP23q zBc7DCJ$9ig=Nv{#Dl8Q|Cfx(Mk2*e^FE?~)e&Qq|9v3H#L!L976raF@kCR4~u0v^i zFiYdvS)98!2WZQNhe^H#?cW^K&+0ca^q%X4qek$Ae{OLm1IUa6TWUih49dk_Pk+eb z=5+$y`HPc-zVSGmhegl4wvX0teAl0aM2AMzE~L9~pA;u-kPMd5!sn8%$TYvsSnnP= z_pP*hc77z&?bH=ULdv_|4QTANi*_{QH&oxtk@`znJ0Y3BT&mA!JEMAt956gRCYtBV zs)r7Diu#U9cDTB9{dwnuU(8?u{Y^_3J_$XbiB{z{GU)1ZZJfotCPXqTALe7o=8xYW zgTCtKZWpw}eW;)&#L6>ruQfF<&l@;uuGcsC(5NMnhRJ*OHW|K z^S#mGdg9&W3HNKgCCmoLZhnSv>uR)EDV6M(DRoNWf7(Q5GtQ&Qxg+8hwN zUQ$UbowMi?xTtfIP?}~L&?3zy+)>9Kx0$EXFBe|}MnU(u!t>o$^Wj-z**(z1TPl!g zJM%*7DtOxdqJVL{-xfeuk*#WJFEN^Y1vuF`Ql(#trgsEVNHXe1=Uv-XuB-b|>ZE#% zTwnXU!<~1wag$`Elx}Z5hGCEPKS~t0}r2#mDzY5F^sj0c48WM#q8V6yfYqVQA&8O30 z96ESE>+%JsWN5sX=T7{*NADSP+!Ma86<^vm;3rQ*!J>iOeLqYor0ky4!-o5_`AkADAETqm zN8=TlSEl`vjL!uHNz~g+&hM5!>eHEQ{Z3MZCwJ5*%9Pf!eP-}lpFy9~Q20>l{G_xm zJ^}8#zDaX7PaR9=ljA3q?tP;ZgcE&Bf+xb31`Fa1rEOlAHwuR4a$hRt$Vf}(!J3N3 zebtZf`>!7!Fd6rC^(uLs1z7Hfx)Y)QHt4@-E|iuL%Sectj7o{YM1#_D*cP8lut7`L zOY+{9gB=2z>eKl%xveYgo4dwpeLA_e4W+W8wY1AcX0j$L>@PzH$r%9>rA=rKcvu!r zuUhRpAezr+_lD)ft+-yjy_vs}u7Lp2Ll=85*y+Z*T-#O3Aq_ynf^BV4SRrDK)KU;= zmsL&{8>xW49@fq5>CWz}6jN~U)rb4{uf$Tq z50WGWCyHLLhU(5oj*7E@A7w18KitT+MMOD-!K39RLcS7n70?Q;+SNZ1WN^zH% z(4#VO-CKGP{8_|xmYL-N|1nO$NuK9&hl9k4#5T$8+78k=qA2X64!AyYp-}6 zbBke?ZuZc|?$IxeIg=RG6gMbbDgbqk^)SBV9S{M&%=196=4-ABUCS+SS zS3&sPGv6L$TfH9>X@881^G%URM@%A@`p%%e{T4BgES{}1JtrOZo;j$pz_@fjh_z^M zwkeH@YJ*Wr21FVAgjcGBO-VP*KD6=MmvD^D{(7O5aZ*jzlh zx9?NyQ=*8>VL>z02xJs-N7yzpEYh4e_Fj4iKsX9YrGlPgePBFYeWF%wn{#&* zXsRt8a~of!sfX+{3pGOAU`uMrpsQ* zYCb)9NM=YYs5%2^?#C=gR;wfK1=e%3UcvWvhgR52R5$mi1fhu9=0x!3pat9H{H zdL4B2nZ%v0^^?C-FBqTasMN8FrT7s4HsX;BXCcUZFc677?uF)e79{n8dU^ekYBi8d zRr34A9er&qzV*D)MIL_94Mlq^o&r~G_v_Qgh^%}lD*lT;XM+Iyu;K?CCM#>wy&Od1 zf9E^cXv{Z?7AAP=VVu1~!|{w`AKXuWI?mI*ryF|teg~2M0SnVUKO}tKTn$Zabk;t_ zN9Dc6K=mWW@GqVPrzGGFeZxLww5FL4t|@e}Zl|Y&h=@ySuP!}IQ9(c2n$>7?lDhgf zKU}kZglJyun%#WgZIg22>pa5!rE3F{9*&-f5a4ZIswx#@_3V2@uvcbuad6u6k#1kG z7>^VV(_tEs+lFm@Yy)S3$a#&6uEVMjtyyUPz7Z;+H zY7AU4F(MC_!3N>pLLv!oMczZ+fO;8#-x$g7k|Va2M%hH2b$gmC=`}dogp0l~%F0Q7 zSL%UN)^#IuL7My?%y|5pB1=oFDk8`%kDJZEYS%OP0!^YjKzlWD%lOMX^&>;3(>e9F z>-c@4IygjZ2<#QGljd2{-1u(eDE(r}t?t&(=?7 z^Ivglw+40ngdO4m5)CB*`@K6a861%NxmNTZpV+~3wDl!#=;d6H1;inUXeKstA$k^n z7ELkQKNZnDoT$(=0w^f10zPc#teX{yW$-c>rOiNYxU?hYsRUOXjNjGCKyP<$(s!4v z%mBdC(6~=>egMiRrh4s{`+&AyZ%vsQVi)37bz}4@0(HaQr6INu)=M;kvR-NAsclrgZ=b zU@hjn^7T8OzjG#d#di3(qqmcYg^&Ia%`a9|I{E=KHCeZ)8b5BkqgbPvmxSd+{B;e2 zNQoja3vkGog?D$ddelrUk7Ej)KHTN9S9$_Vo8>GZ&Kq_L?ux66(TU_39zt=uuZB!q zbPB@NUPZtMCb|0Dae2jNQBGn`hbT&tQhb zA&-1h%Tce9+F*!ez{hfOV)FUf3Z9X-$c2rIHBZnEfYli5lF7)$8;FeP?v=Jq5r)^x zZ~9FSIWnD|nDL)&AmHo9xLfX)8~hFc(nG*P89%lHAJ&q+5$=Qni6t3&CEET_h6+Yqxt^|4&aQE zQj95=Ax)BNP#j#a7#lh|I=8uh?jtf#Pm+Bs_k;MaJ4Hz&Tja5yVD5~i#)FOfq(jP! z)MdH#snR41ZvOY3%?&oB#QxHG_M*C`*mx{=+j&MoJXeS5rKcw@svKEBG zx=AE`o1H|YUy}HYwngSVEWf%DYK0wSSx;5zTmDqFtG$Wu^S!+J(P%UD+WSTI*bD*K zCv137{0TIUECwWplB{JA;D!;v{BMU%9gKx_JgESR^Uq%&?psq$srMh>`qw{QVA!9#kNgOa1z0%5u8o9D@X9Bh1H>_Q zr{)XT2Zoz_JW+p)ETM*skW^gIr6s3}h$LQ&D9tU6p|5nLqglj@eFh&c1~46X>~0Wn z4Fw+5x%$E4C%wA{yhCLq4LkNFlRh)<(1lQs$-B6bzupKNHqshoA|vsfBdxsIU+BBu z+>D|DhQi~jWh&Mua+|0r1wRB-JZ93*LWv#Lf5XH+C`_~l{|hF9Juh!p&58;tv%(dL z??2gT#uN$}F3#(et$dny52mD1$W2c--XYl4Pvqc^Q?(dU^D1n)aOJ@NaQ>lxecVzq zL26=SuS`|K^|?XAJ8?+Lzfs||qS9JL9u^YnlZ=qtTM=6hAB2ION|yzp7N|5w1)O8S zMeePW1Z+&v4)#vga1>Z_worHuiad1olWGlN`F3btp^HjyT0b)g$DfN&>?x!(?6Gxp zAG#AS&dn9EfS_8BdOpS~bPp1kH5Tx2zGiMjb;O#<`$jFpw~g^8Cgc1zh-Aw8!zM)zS1yrz@-ztRsc;uIZdBeCyxK@eCx@e5|h*0E+z|f{uq$ z(g8!GDvCDTOvhqI-MuEx~!hYJszQ3Iv7M`Phr z#?``s-D*(SSTX@(IE^*#Zy^8(Mv`Fu=$I73qh_lca+LA@r&F-h)CkY)&YF+oM zMr0+HJ~pG>xoCr>&jWo0vA^!Ktw&^i5kY}P#QwtzlfQ9aQc#ppV&C3FfuR~;?L_2z zkMDd7Tlt&q(dIRTarvVXVTLlQT&1Abrb6Y|cZ;50Nre4Uar(!QFG6mgGb8Ys3>8IgTYx<}!U`K9?i%I`;2xC`>&%SI zs_(AVKzv=CFEokJLWou{O&Z30igD6bMdA>cg^a(!ped>fIKZcg#Z+5ft%DjOfy@3a zXIJ(G7FbJ?LeaX%XJ@pcqN01BbMvxC26}f2i=h+nNjsIHM)pSs)7R)bCq2!W4$?rZ z>3w$tjn{htSgm7DVzd@f3s|m;O-}o%SkKxgtf@ajo*eOVwMY+&yw9;{pD}d_JolU~ zFI9nWTu`(Fdm|K_-$>(wfT(d(+kDaCGC@5auCAdekrzp-d^0R0 zX)46&MQ*^_Ts*j<^e0o2TQ&VBSO56zDf-8_@3Ti`)4?9$qlS`ls5l3P&EEW?(y^=n zT5Na41D1w91|G=f#M)b1KS!ETF6Igyrc0ylq* zj|>&;&f;?aTpm`IT|*|L@@z>r5P=-{j$Fen@yheyMtjxxL(P%4#k_56E9-3L8PECS~4-EnZbgygGL#7o8FGvZely&ib}$dy?xx$vNFnhu}NfCSKdo|A7uK{ zaF&D-u7qjY1RA;^dyQ%)B^X$)p(KikITm0wzO;DF$8eGToo-@HU{aL`hq1$iM>y(f zzk~#!$wpIP>dQSrp>x|H?p-`9EX2_@R5-M>F6P~6(a^{R7Pbej;T;e6Sobpu*vI(z zX5lBFh^ogokp_A+^fmXtMV8stcd~(7_>sTdB#f|v-!_W*88sKeW)NK6oZtHV+jNoE z5~6(sPlV;hhLwZyXYT0NpDhPFqa!E*w70~%m)JF}m+Xct)Ilk8>AiB3=VE5LvcqZq zSQ(n+-~sg;CuUH~bJ@<`XFf^D0}}gH%^lYQW=2T0PoOU6y5cKQ{UqO_O9J3MjOOjb zrW8Onwnv03o3+xx`u5^rLFL{*Y=(-M)y(H|Zzx>fM0a5@iR48aWTP8C9Ao=ipAoPu zv+j5aq|>ZMS}>b~C%473;%=|>7lP$((ZVCc#@_4SB{~p(WVg;QY?^tIzHgyW(ge-4 zBqbBY$ZQqY5vc2`rxyk%7RDX6i+uN*dpJS_2HTue(vkO_^(C@$Q{QuUH;|hLFVnpe z%mK&6?9*2?M_cAjkz;2&yZW+J)wy+04TB&5->v{0z-+PY_g^-px5s z#$Rc1_bLom=@LfqQ%d_z$zs)3clHFbTDR)twEo}_WZQ_(%=(iCSc=Pfe`ph3M1R%( z=X@DhPzYy`di8el3E>XF;nj5Ay?O|3;|+&K_e2FE8=(oAZFhFzpS#N5X@~3c=k1Kv znaZF|1jL`)J3D3>W0;qq#mpRH_$@NJo17{2I8s9*!GOmaNZ*FHDcS;X%dz50X0ngl zn23RWd*^Ys>(6PU1E+yK>}X>k@BFcObd&ipiEgxiT;N$DJb1UiA!^ABtI%{5%R^Lm zyDJBC99t4D`}uk2_zvlXyyd9MI)i1Z|d3M_b=bxM~&CiMOI@7_bY67q1h0{@ zB^oqy3Ku*4X|QFcgLwD}V%-q#(`telG;YZU)*m!tv@GdZ*3#6Q zgC=hiWKmcP+>P%O9B<_y7-S5ZXlO^Q-}(w5?#jdS;2{Ig+HXtB3-9x8-^N?C)3bHu zV-?eS)mE!MR^tl5sa(YRS^8zl6EJf^W|j6pwP#llFUvATpR>n+DjKRf)BQ|>F%u+N z6c+Gm+Cqs$1D4=Vc>?iARIK_h3}r^9KHKoKji&L1h@0uQ9f-NbNL&aRcwa(ItVt}n z9Ld&l3Rs4n2IC>`ny{Z->$tYsKZn=Lma_BM+E$SDN6aAeo=>XdDK-73y~q$(;*J?e z>^EjS8t#6|Wo@Tf2+3h|J8o6|V1`K}TEr(%8yBQjHi^J>qut=%RqSTH3gav$Canxq zt)T6wg3fv;E0K&TklVf=`Vid@xYF#uQ*H#3B?G+8MnEcM7?7&QU64v24eV|^oQ5eq zrAr7Mk~d24U2T|YkCwbv@6e=7usJpx;HC*OZVM8C1XzqOx@h+?>X9!;K!M($k3<0I zy{>He1N7|jo2JwK0iajKb@<*}WgPo{MEv{9_P#{(G^7FUdp8QS?#P15lX9a>?uT|{ z98V3eNl(HIospZ9x-g9ROQOQL?HJMhV|l*EUC($_M`mCA36Yp@Q(SE~!2b@By!fEw zJo+h7{kwQWX}KF0_Pmn2lX$hUY&gce%He3KPXTLl)X+UxYbM2=f_t&Wf-A9lQVZ$u z;i&Avvhnse-+M;H1mcR;W~L+PFOMX>` z19w;RozOvj;Gp?O#KL-_12ODW0l|M!w?W8P`hQWk@}V`$3*r_zHPauliCe^mw1jvp z4tfQznIUfNZ!&V=OV|T?X%#Rj4$EVPMLl<^Pkb$O@9mrJBXq+Eb>D&9sv6^}JD8*6 z9aGZWR?Hyk*YM;*nTn4I^3@?q3g;cFG@SU!Omeq~ zhbz|jBuyZh+D0g(7oVMV6JGidRl__6?abLG*V*$G&LQgy-*U!XrSKUL)8j{NH>4n8 z^Fag4^0Y@j_r4Z2WH%?`AULv8`E$tt41B}5jw`d7`CybCP)9Jz6g#r-neKpBEv7b_ z?(@r~ZKE`9G8T9Vzm_cEPmrlJxO2(j`<}~BWEWQ&;wP=048g4_dRkc`rXvt2M&l`2 zd}XqNqXF~MGN`=tRGa$N&Ty5xRQktyOZZN`;|-0M*DgvhI%3OB%T1>!(VVZ8@}E8j zzBm9zMyxYJA|L&sYy$SbDVz0+Ka_1mc@Me2nPlDK^4VtkD0-18k%}7@tS68zQt$Gf z)U8+tKJF{sQV&-u*Nn7von#(A_+i@gwbfBQtI$YQE!Ndr{j zeY#k7HdAu#V3o*p<*-7Sc}@ZB*-^B zDh$}R+B)IawISkOOUrO2^U1p*nBCg`$Qt=AW+cuh1LA&q@2Q(k?lg+)RSQhZS?+@< zy+25m`7(;&Wbq0V{JSdTSs9cYmAPnkaTmgKWdKRUy6#A2>FytN(^<2_d`11hQH~AH zdr9WJE+V`1nvv$Q)Gc^8WrH3usG;PIe9n@R(me zo<-JJ>XK@fFkZr2M1)2-1^b!&<(n5>!z;70z}g5$9Sh>$-zSvntE8?zF6t%#Ptbxn zjMSgPA6*EthDgr*0zC3aRNs`cDk?al9rqoKcWThuPa^`jl9p{3Q2K+*ass7QC5Ika zZ*RT3{(SMP`NJ!}!O=r~4qBHao5UW59X&?JBNBpufRNu*(mCDb)O_AvvzU(D-0YOM z5qEU^$|bG(0gzy`;rC5#&(NZC?{4p`)`3LJCYhK5nlsJRDdNUnaFF!y;DUX@(d+OF zv>_p-ShK00CPv`qgk2OrS{mbnhUkA&EBkUZm%9=O-!p#xeW-{zzx0|Q{qJ$=gNLKN zWEiN5U+<%__=2drJ3IJ(+uf4E_3^I|j>Ym{@vT>6PyDy9c3U-pN-xT4O7C{#Iws~L zdc_vj3DiDVNE4;<-4ZMm(`j5aHM%Jqc93&ryZ;Eu+k1#9D31~FNZVGsYwC_}#;n4B z!;&XO)XpVfvUtxx9e_9rVZ>J_Jb74U#s6=I5k21|A$j7Udo25ucSpE0%#N>GOPGeEbmv%WKD0bX!m4& zy$-$@3&;7>{ZA(4^ovRD{|_dW76(IGl-3 z?4BvXWBSSi4XT0)u+84%Q%iC(OnggrR&R1Dd6^aDGqPoXS$YgRety$G+CL_>>>Wja zH+h7#Q_`sTJV@3Xxdb;~uc}$wd)a&le`4OBBqyh3o6R;jH8q#jpN_GA6J6*r5o8;a zA`mRm(NU1skZczdKU(hZLC+u%Vfaf|`|w*=BR`EixF5|HRX{s)+CNosw%v=fN#eH0 za&~qe1@tyFz=#tE!OA4({ez#6HP+CyboV2 zC|`H;J^MkzI0o6$J7`1P<8)w|&=c#+6c)0GOqtKY0lnjuuC%&nroa)$#ot_8T!$Rd z{g#OBhl8aL{kWP%wM)8%8A-2$BYTjulw7BkbiGzr7 zlErp-L@iX|t|sjU%~5PvslQ6l$#2}3%v}qK>j}nl*8&BKPJcBsB|tN?KW{nTESKu; zQnNCFH5eS?F3|E()^3l$Ha?PLBL|f-Z7%}=epXKgdTTe8Xh)e=jSu`@H^%uZ1Wfb4AvxNvWdsTj*pphEoN}Ctc z1-v&PYo7wrVwojw=q`0khA?B401yQ&YK#fudne0v zcIs4#nbO|Yg+1exOwzy~`;{#fm~nZ<;$1YFCK zQVk5}3YQK<4mOZC;Xa^V%-tptd$9O1;=h}46HFkBTsmPqtaL4t|XuZ(&ispS~Nx0bbrIrWd*QwtUU%w`;1}rE1DF$$`%$>aCVM= zF${Es3c>REahGCf;IY1t^@tJRPoH&AWkY%F>;jUnkZ=eTOA~TLH#>0GfFLuM@xTs` zYuoqx6cx%Nk7Mqh^%#p` zi%Nt^LkU0zWCj#4PlEd)jrA$@GdAW53C>l>L z-i0Z}f<2&t#P%Gkty^_EfTYhYFes1_Z0Ge@d)6ANvGs&H6T{ejP8WVr@rzgOd(BiW z3bhf!BuN9cb1A;(`l}6C*o1?cq=*`EP!p}@(Kqx~Dr{9t?Su+nOS2thW(b5EqX!@R zdKz1*4>}_(g@3~^YH*NpI#&SCbcGrb2+mjpE1e*J3!94#+njdUVldfwreeHzC8TpA zKE6GELx7hul(Eru!|;6&!1d}d&mGBxJnmJhZ;KCyo;8O<`(WcAzi;Vg^&C?h{b|1L zyq>k*@!>oaq8C$^5l5z{*Bo2RBJv@9S+|EIjcAI3=emjBvN+3d5*4%s^p#W@xc}-a z5jxK7x1@cM5|qew%Vgom_7$iI8{OCwwVuTo~>5vQi*hZ9Gogr`Gq$j=2uZ;{PP=FSI;NadCauvMPkkB6M9s5bck+hf?oFqS2Xl#5X5ET3+T>^*~|K532zqu9WrH$;;z9Dj0I_l+~}YKbxk z76?DU!e1bG+OOO!IX#p^5WZ_@#WJ?s#YWCQui(o!rg$)l2V_+gU}g~+FG&Bxfx)l* z7+@Q(;17EG_;XnRSGFiV+tg?uvULJaMk^=sF(;Bse8W4)we7{PXeBUa>|RN?9gHM_ zHP{K{@iaO$@8?&2x@gh&)U@=H2(6%Y8TcHq%et_uJsBbLtCaa)9KuT)gm_EE``DXW z-A98#j2dj6-9aO9b078z-3F%8CpSy)#+!rmz(#ZSCgj+Y+&V=(!(A3eRGN}%I7(}6 zW!iH21Yb&r(gX_OIPHK4m{rji46NFt*JOQIjaab6;(f*}3q$5hbciL@va^#8+4m9+ zK^XFbSeB^mkC@Djp`p5W!o=d?=3iU%C*{$gDr7SZl}Y z7HL&Wh*83TY6Imo^IJV;`8~-Tl}Iyy?$wbEl7<*Yan1%2;=5HGW)yqG3CAGgH?Hxm z5B5SJ7yfBOs9Lro)>BFZ6gbX?+ow4#xWO-T@`Vgs38+TXXU~uKD=(q!0R<++D;D|o za&z{Z_+rfBlyD{l$gBoQGZ}S5IHh{W;@{k;JiLR3gMR)xPcz4rPe_Ai;&TJVm(t5; zfB>l3V2CO6%yG&1@yEz?sdnz_{p0ys1m^Cu%uGm#NExuH+S}rsah=egdI7%;G6r0u z9$HUK>Srxxm=zEpgmx2BUDRJ^G8(>KmR>Tk*`ccai!GUwFJ49Z+)3YM%svbZJw%dk zp3)x9WwBoT##5F=#ZFu}TK~dRfdMa3*`=p0mNdymc;ePRJk;>`6&zrkw?MH}UQFw2 zD3%JpI4Jlfn4uCBO88dR3vx@w(GiV)PC3+uGa|eBaLBIoF*FjRx#sX>iq$diVP7o0 z3lX*tQyz24Kt{s25fkWiXq=ZJ2$n=vzqt5(&^R+bByK+oQ~`4j*?B;r-dsM5zcZM2 zN95ydSVk#fSOahia(8dWeYce8|A_P;HeoEMguhZ#oPI)J@D!L1H0HM;88E93NT0lp2uOPw{?k2!VhM-uZVguKQ@ zb7+nGuQnW$Xfcaxf(ZBz&fq-kUj1^-tLGc*DbJY<{G3aOws+_r`rn2roF2+KzgT;N z`w~dZnBFl&9bxJE!ZWHRcxZ3Ia$2hvf z`tbw(h+ZjUtCyCK;ZCU|xJ?vV$$IGKYDJG@h-^|1x1)y@mzGNlQy$A(>fd@y zYcxOru6t@_=rJh1zPmGj@;c+>y$bn&y;r)_A~&;QqE9e>EGju{rM>hOfry>WaIR8% z+)&a`G&k7`katk*R2f#BgJ0zMR$242Re)2^#`(kui!w3^a&mh49hY$Mo_*7{=1XGz zaC-^JS>~^ya+Z;-ZHlp7Uk&yZa6g*0F7WF`1jn6z(?DM4-Reh{9RHEG_oL0r$9%Qa=1{z|`-EHz^fE`7O&sSqEw{p+jIsFG zY}E{`3o?@c0l-#M0V^RAgg6cUSGlRMO_m4mwm-4!0aXB>~K0sloz2!nM`(p zhMGTgSE?vrWF+}eRNR^&?y-CE{tdrzWu6xLJni(OV@_rN3QU*|)Nrql z_helpuU9Mn0j{JQ`pzeGNH{Or95ox1M$vB{bxI$~e3v2ki-&%}A3b0SU;R?L6d9HT z7HL9STaEeOMC>nff&qR$^U(ikQ-MC-kM=oG^@1Z7P4O2c{Ri0kwx*W`MOeST=?h0I zpAL)$vgoO=fbeVRE0i*EqlrcN$Ke-9JL>;HX7Yd!X4@+n@%LxB68jOXL|cONpIlvC zCVcXeHD+6h#v+geJ~kJuaUVtd0Ucw1o-863X0$z`U##`tWN7W9e>c4}OAbqst~sA^ z0jbLBH$Kttcim$(OMRqD-X8ReSiC98Txi@E9&M*)qz6rOkq_Kl-HatE2+}#9-;z(A z(n3pZtDZXs9;sWp!Z#gnTm&;|<(m!Hl%#q@mAEx*I8Qf3+@9buXT>kMc5mGd+%R;T zN*Z5((mB1pxK9I$U?J0fBkr2ank=+|zR}Qp>zn1#l)q10iyV`$P0K2`DQJWoXoev& z>sND#!tdN&R;tDi%tg!NIU!8jy@aY$j!T{k+OA{gsZd}M^O?&Z2nDGjpi~K7G%BoM z4JIS~5}l%HibNC=35(!E^MCT0l9fLa_W)AfAB=4oUpfeji??+#6;0az;P7+W>wWx# z|1P50_U`J-esT@Sa1oed0@byO$YVg?8!szMHz2b0CHtT>GCh!fnylO=r!z}nQG_ON zZxLiJ^do&Q3F;SxzmNih(BT^>nVKD!Po8?BzzwZxNznh*8}s@z0^-NaYF8DH#2&L? z5_rVmQTU~9IB(fm;(C`&9ubOY!QJSqBH`K1% zsnvb*Cli=|vm=@dZTH z&F;xJ!%Rc}r)6e)UX>>q-IUq!f2Ao~7lDFVXz4ogR4P-x^%hV9yY_?APggH#yg-Af zS_LSgd4h(Km$q+LuVN?*>>ru4CwMWO-J=3!LHdk^{nbEq>{eyuQq3&l8%3k90eH-M z3MMuY3xLA~BsmCoY8`J70Ig3=|JLaTe}b*jino@=Gk8;w7YCke)gv4o(Fd6N3>;M( zNcijJf^v_`uaShc_QB^qFM#P}l~uQ*z*|ev*m!*n=Ei^24EjE$3^ntlS$?dAc0AF1s^R`T@=^j<8GB; zvQa;$S;`e!dxfM;z1-^^G`4riphFT9h_aex0UMg~j?i!9xTtdTht)y-7=ln2S|D^2 z5H|;ni`at(t|1&aaxMzw5OMj}cu1HD?9b=eBS;W8yUv|clHa+|dhMJkXteC>87!0) zEjIaN8!hgPD+m;T8aOT#uzPnxv{pq0>*x{Wr2~`4+Cs*4f&FxQ~_CDIhINSR{`cX3gt*sc@ZSp zK$LPftWke`YQ7-zd%k5-i)&qy$?Uv*XlRb73m!-joH-g;wh(l*&y zqpM+55}N(;plFxA=hFZ_FrNx)a_pb$OAZ=jH{uY~S|Ej^L4u=!PtV|i4R{R?}Pq9X+iII6ab;+v)7gkqahfL)yYt2%=w;Dqh?rNu^EUHv)kmuY*L4?F__M9-C zorN>KS{@+V3ZCKqk`h~|Jssmcv#VV<7crlSiQ->%V|eF!e#v=#lv7!FkALIcM>xaW z+pldn$Yj0(sjd%gzJ5)nvBZ#PbbAVpU8=a$x;S-GTixXfm6Olqq-~*K#{frvk;wso zQ;9V+3rQzb+Vzz;c>MJ0>9eQuwCE3ky`@Gfj!4KTS#R(bA?i;1Pf?DGEZbJi)H_&d zUM$<$*->FtQO_ht_iKUQq!>;PgL-UsxeVnnZ;Zf~T;N{&r$y!!=x%N*5*xW2E`_~1 z{&xk|Q?v8m{1%&E(l;*lZ7Nx*Eyv?0zK@L5l-VGDCgenF<#u^S45!8NRG^V(H`VkS zHz~E~x_%k~R*4G6Zx$z#aAWr!-2T1=UtF{7;fUkaRv@gnaXV5~xiUStlSA%W%V*TQ zI2tKFr}JfufD7#UTc`ctR1&Hr?Il{+;deT6wlcR8s=eW=(t3<2Lu5r1>@N*tAi7q5 zm71Hwbss3Jc58WXJN$etZnqv$sSx%PoQxam>@e*%L5 zBdjL;yDN_y`+Gy=kr|>IHBZ$isjNbZTC8cB?JIr6u=;Y?V)Ff+QyX@9K>4^FCMOot z-hfHxtiBmfYD$v0OJNX2c_1ND5wQF<6SYB96}1!QORp;`W9~S*LDQ0{a$)-Lo*7b8 z!$;f@ez(+_ttVRZ_0S<_9govZ=DIGl&c)|pSPp?6#S}poyT$RSY;xA>Dq`Bw`F46u zzv}K)nq2EW#N>e(WXg!joS0gqD}4LGHxJtv1CmF|-#?cF|H%_!p=XHgBe#4~S(GLF z8$B*&psK>8rLKr-7B7SYv~hqyCLEupspieb*&^U_2%EZ#Sdd@f=dKf0ki)BKH_WpY zu2H{7d!?#1`^g!*?G&gzLez!WRbtD}>GC}zyfNmPFUn|cHpG(({tzNlwa>eBXCHG> za!^2j3bX@Sx&~mkQ(ISG(%UayQJ_qQ#aLZ#q%Nt`%qZ+)uv|#VKr@Z4cw`_iY#b1K zr{Oo)su#-Rp0W0C57|5%^UW(Qk-tGAZjzGg)V&-961^gAqmhOUB1xkzeMBwuE8%50 zlcSr-kjH6gj%I0V`@7 z;vkDj?uAIBIi@+l?Qd9E646P)$oP`7zm0iH1kNXI@4sDG&dPIGA;ZUFJ1KI+CsW2> zN%(9+HQ3QMD?6JSbM)dyMQz1O#_c}28Fkrh!oNJZBY#NhI!MqR6wtjnZVTqzSGw3)GlvR(EG+q zTMd?WM{d2Hr=+6k{fa-Zqcp}r$nR*tQ&DeEIq~|^au}yn36?}5R4Vl^cbX_XD5W3O zr1>YjlVjsJI>RF~Ezhj&&RsnU5lB9uB?*}+h8HYa{l2Oj<(xbqlML3T=&32%JnVxb zn6j}+bXhr)ta@iqx=OjR%B*m)b%+z~dUTbRT=!z2A^C1n&zbOLq7m9n8mk^8?dql| z9v1tp!S#4le;*c60WB+LK+joG*V4e`b$i(j&Q}*(K7sBaO>Rr~()x#Oc1cVJc^Ei| zsR-R;*q36S2zf`edIDo=^i_?$EVz4Z(hRkuL&}_F<4VQ;S!>oZq;XWw!V{tId9K%& z&W~ZC*Y6Rm^W(4(;;hV)#Cuf(skt9I$@yW|#o%bm+?NS)^*_G6@VGg$fAE*!d!D4- zYq>GT5tm@mx5R`Ol#^z7$XNF-%`2cxRonHc^ku1*TJ*=I%nWp-C#otnoxwU$Na-y% zXG1aXfdHX~-#)l3(o_7{BAIwV9NzjW+Smx2OJTz@rup{dAlNKSEYI!;uJoCEJGB(e1KfUE$1MLO7!Ai_!>U?Z8YvdU25XdrXXqec3z zGiR*><6Y@FXH2V!)*wDZiNELZOA)dk1K|3%G$Ac>p%9{2Q6SuEO1#A_pUBR$XrF!? zDPqjru0|$267X?p?8$x1r%S|8eph&(JdFb~IuZBR2=pTEsw{q zj3VwycrqJBS3hOaiLTy+dm46rmmV5PS;^Y$|Kc(vkmlfBM_YH47>m>&h{nBb?p$k;=6)a&oExGEg~6+c$AzCZx6Xb(OZQN=<{1AouPQ4?4hM-?ocU zUcC)mo0yZvnktQUQ7Y3|I6CJXN8mi>9PdrJ<35&-sb=-LK-?xO@$o#^)HF!ELL>xU zKVrK==BNM%BiHdrCE;yP#7IiZ$$4ac@&Mk&-Tjo5!sktL_<0~X-5DRX-aYC5l<&RI@;M&QP{7Zj&K-PYD|bC4=<1>kQ2jXLrc&o~uXE(Qbt`%5Sq2Htu| z$SwgA29#hy5`6GUguz#OzIPh$h1Yakx{`rlc*!}pi#wpbR8Qt+nic7LXtIdnv z?f!XYt?INe(FX_l9FCGyXi|H-BV@KXD16(NoyyH{5U&!NQf)e2K77% z`5<($Uk-tPuI#a@ z(vbq3Vd&{FMn!_Zx~2!r92_qhl9AVPL~~E0R$o@WKQT(f4>aQ&OSZ)rs(uKMKOa3Q zYc$z<(^o1S)3E0zE1M`e!ugs$?D4E{S&Jmrmr@UM%%{Y%Dr31t`~wLD(u@_n!1g7L zW)T(SAI_t2XQ)0vvYz(b!S5I%t=Y`>*naqV9gCvwx%CME~hHrmJKiy-5B1neF(@gW+eM8B_XoeZ%RIy>~&EVYB%oGyD0j z+4%`|2d9VHq3-v-*m$0tcucwdIgDHPe!6mRRb>U7k7)_ySim)F{FUUaPYQeGm^F5+ z_m$sS*PD?M{XV6ol)$y=T+BX7^&CdDL&gEK93Hs%P+*avow{H_89(oPsE$Jq=s32v z6s-5{8{2DKvWYyB8nHapaFBQ~(5Q=E_>L9CYvXl+UW0E|Lc=bJ7WOfHzm%o0!2{Ut zQf*61^hRsKZm==1Drq3ML#JhO)^vnxdS(UMT2xJ-am^cq*bWp`}RbQ+9`L<7V&J^|63i2Hf(+uBINt6Sm2 z88RzPPY&Cerr-#YOCXb0R=98IxyO8bexBjgauYinxeD4CaPi4xq86CdlPTpbPy4EH z&3-!d)mC`d-!~7-x2GnLguUOT9Z6nFv}49`V}wZbR?sZ;ve@`c#7oMnF1iKJ6FofQ zv&UN9nAhu8^ZD({DKd3>UmuKDy+?z@S!ydQEfup)+JHne z1_~)Y$)L^~+&?l>|1hiYnMDb|Z=9#^T+69ZaB?#!~ z&AUFNVMm$%z}~uS8;W7AP-kj((wumBy=1SG-1IV0yiYEvlc{m?cP&%aw%+<_82G;O zSP$=E8z|tHO-Yq{8`9&nv8F|}vEu03I102bP1fW!gt0s&)iRw<_U{*Eqe}p?u_&7nmrrc;d0c3yE?9^Artj3-gfIrR#d#0Cga}^u{!Us zg|FArD>)_^Am^~IPig@`fqyj~537=j!h|S>;M|tCR|!W3E{^j^uMs05wk8!_Viv#f zUZ6J0zQUtN9Y)5e=%|GpUIsS)zL>u*(6}8XoZK7*MsSPc#$(l2(_{EHQT8!hT2JV4 z7(X*N7*dRc?nGzpNE>0y{o_N-K(RIT7PS-p?b$VRZ%Sdy1N+U^#F76G+U*s!190|* z-?saya-yS*o0#$QDch`3Q2fs>2*v$ruTf>lI{SJgowtgMy$0Pt2!^PoNPd}V^!G;$ zwUN#CdP}sFU=f##sSiULeXNununTuW>?x;Iy~W#><=FW*h-aCVM-n*$+IewtQf8_G z_9k)ltTGSRi0|Bt$=2$;&Q}m+$963}uVT~%mUe)Fp%`A9Jv^?Z=3(O?7BjW!tzai@ z&hStISF&(_k z5b|Csb2RBnWaj$R?E`dNHgHEKKnKLKkd<$=D&{I`kIpL0W##OP=hJORiHe-&l#X*s zs|a?~oht)Kg?H7xzrQ1!yIKWpcc$?SGNaE=OilH*|5RpU519mRbRNQwo6m$bfc;6s zBswTx!5;^E`rwGJ4+t8)X>Gf;o-085( zGYf@rCw^w3S8$w%D+`h7O?*HI1mT_tc34GE0$-n7Ajd zceJ%{ny~YW4e}= zPwAJ3%<;;zt&^ud%$LNyBgwUE^qW23um~T%Q2!fYEYI90WH!XrSC^BYGFywXPdV)D zfaWN)({8s>bh~I~wr<@D?3$GpR)-`)aIOw&!{@SEwJbXDFzvaiP(zd1IrIwHeG$?&jYAO+`FUU`pxNr(x{QNfkQn~L(}>9bLs zz5Q14s@Xs|*a+`?ZPW{~c=j?Q5>g!K0b=oowSBX2 zAoMBB;S`RQ=quWdC=ot<6?k;WIewdR>h1pWcA3uVB*K37%ny4&$?7du&Y*#q8>^4j z6-nsiOHN*O5}~U+e~6%N)Wcg@V{FbPT0O9c(h+nRd7n+YF{L&b9g^{*UWIWsX^VBj ztV%cyl2ZSw`I_LPxo&_}fgq`j;eJkkqFm=~5AB|#;Od9bER<&IjhSQKus{FBH2Nnv!mQepRUu zu>mZ|-G;pU46hK)Png5{aC>7iWA1o;@obQUWHR!x09ughG*8)4BRuOOhampjj~g~d)5Ryi$wx8;9r_%n>%e7PA_`DT zT5MmjUx4jB|F6WA9vAqU-$5Sn;o3;pLLeA8kTzbc7IY%AuY;&%xJd5rVQmB~mk?!1 zTi1w+j%jJWyuNR;oME_s+OPbTq_Q*N_rMVf9XJLeZZG3JdfhmhpU!8w{5Se2*W}6h zH~Nr|I4fQ!<>X{hNlawXu9DYj`o39Is4Zuk{2wHwA{!tfXcyL116U8U$^K5+FZW2_ z=FPXx@TW5J6;>UrvhMHfNJFs)U0)UfzHKf#^pM=kV2bEb9Dn$(nNVFq`QnfU#>XNLPDX7I-^ zLj$gTw3Yvly|;{tU z)v@2b_r3p_`84z8U5mwP=+#p7)N|^bz4zJYtN7||g>N_NL#G{FH~X$h+^hU!PnZp_ zGoPonS=VQQo5FXMsz0(#I#T2}(OQwaT)hO3r_sh`(rb6Ym7G_n>}Y{%ca_YAkjwB?<#8KASoF_gJJ;mi5H~V=GiOQPCSQzL(9$(<$N`B}g zSFo~6sp=iL?48P%`)Dq9|1orv%AmeY7m+uhN^JK0HrXb*Cb@3{PoZK0ptKU|9+lYs z!UDobzDLK$bKLFB636;Vd}t|0@9FPP_Z>GW!I{r*;r3-9U< zom83J@Xe;2Y^9RH3Z>*3f=zA8H_xhzyRR9cjf|*el`Y&iO`>I1!->9?t{{>8b03PT$Ja>=uZ;D>0B24PvYdfEzI5;}i80#Uw z>YU0RPRcG4dF8Ohq5tk5^yCrrp&Sr3ZwZJ8Mr7bW$$NZanG}aS4L}SXAJGtg!zcWD zmI(Z*_?pSv&wu}CA=I1v#-kojSQ`HKf1bfRQ!uagGw$e-(&pyfSw4b*griz`3pz=^8om;H21_uf(-C8Xz(ZJ znFZVGlFx(E0Ay8VVQySR1&>yFLRn5bj9{L%mG|H9C+`*#fckSq!&jy;yMrGHi~~Sx zU_wTBxA_-rf!8En8l&agdRC+=6)c+322cL|3+tT#7479ZSC;xHJ1WXsSHOyq{w;{_ zEBu_I*siPKzu-H5EB3#EAwzZ6h=J+m2Ln)UWfSaB9mb zLd`hG)-`h}^q=$Pa}3~Ut_=w34-x`|J=1c4?B%O^$OI~FRYj@HYf2qv3$}+1U?P$~ zQ{(If|JiTEhoM0agM%Z{F@i6#P`BB(wZuW*hC)Op@g3wFh#wNq_z+sEzA<>A%bEUh z=Y06!Rqsg7-dos(ov)|#_Hl3ioTU~(`@zoxHNudwh1&Buc}Jefs-9?68G<%7eaSh# zBIIFb6n~3oDU~#jjDV2-WrTi;ODdLcmW@1lJgPDWvt4!&{Z+Vi5ZT_!3m`+Yk z)0&0^qPL6={H;`mmxid9Z(qxV#f#_^EO>5NKZMKTaiuc%80nB*8%a0cecK%kJ?yA~6#42|R73ZqMWPRH*|RCJAbb3HRlOS~0F zPR)w93gZUb5FDgp0Pmm>0_O+~)_4X3RzZ1%O(M5^;19d$zz`zFO}Z>Ujr?uUC`WXF z7k8p}eTrSO3|9G*KRf27HBh^UvAsRxql6bO`EHiTT8>grZO5U)ZJL^N8aoyf3}=5R zo0*xQfP?yxwDSmi?u#yXSw0u+74&aXicz2kk5;QLVh)t3Abin z0nEaL#~e79=$ffv3DbS){0oZVi>}>#=Ov&*P1}?MdmR^ld}BOwArGBwGvq=6lE(S7 z-C9Hdg@hv@#%8L8zjAg{fCw8D!hKrJ>u=u|lMb7vUqnKsTV|gEnt<`K=sjids+7s3 zwb?Q06!R1Lvtaezot>&o^a24iDj{_y`Xt{g@S||FUD`OPL zxAGg%10Dp8ri*j-zm(8R8n0+6f<&{%-ar%whWHV_LV_+09Lj=QlTGPfzsrA>OrZR) z+VBWcbRGaS2O0^zFUPiaA_H>E8$)za7L-myLZm7t!a1HiMn0}G)Ndz7aPH&S3b$b} z`?J5HVu3AofHv^5V;rHPG?g=?GB;@_7XzeY_99iu5d zLb|gT1R>xJqUjz!`iZDlb#7?_ekG0|ANa)&A3mJT1`w1SRU8K)^09Ip?HrCJe4qaC z^W3(6VsQ9#ZhhWEV&_+=bhlx0!nx_VN)F~0U#Z3IJS+WRrj#BNwpyP%D@Pdi9Q! zvzAd6MxzD*$B&5bMgVd)Rwu)y>_UOqqhGcN7(%H4rRCgv1d6HFthqD>tOL9853YqA zxAMc8DjbQx@Y1i{sN)Co(Q+_p5}leaGAr~CL_rS=vaCvcT?t3@EXHf#$9)gmFi1r) zS)|PX8^mA0O?8>~{1w|K8$@0M~`N7f}rUV(9ACX4G)ydQO)h2HJOS8B=4? zD8&QK#6{6anu&291OW5#Ce+u8ZqhT24XIkKpS}5H)8TW7R2nb8Y&v2>Cn&APJzt*zcwyejnvAQaU?a=s}oCmvVvEjc{m z9VID7%~?K=)e^Kcr-Rx2sgZ#_YEHG(JPB{c`02m&wFwI3sF}p|WBwjBx(I}mvpbW! zKxeTCMuc7yCZwYadn$_zcRS_}G!6o}Vve_#1Dhnp`+Gr1i~c8z>E8NoPWX5TJ6&Yz zwo6xV&J@$U%7urCZ#4QSNK_p?M~ra@k|2)RJ{&iuXtG4|8=#>`!|JA!j5ZQDRw)I9 zWU*7Q3!62tM7~e20%|J9!P@h46QF!PKKH$LTDnJdIQsweOz&}I^WcB7dIi9(AV(E}cP=B7E4? zp;Yu*Kqx6wgX@-&@36f1?a?~FN#kRI=?oc7smM%%^pH^2E%$!XzG~CD$_i%}*37Ko zHEYWU4UtFFC&yeI@HJ~3Cc>fn{q@_s96(pOq@JGtYf|z1F~1m);37R{{Y{nqTVARG zB%ev7ey;!VNsvEN0Zs_?1SavnJoTLhD2|3A1bO}hmOnRXAUz#HZ80ggr!PT(9zyx| z>~k`sGCL@b6O@ya3-sXfIcDKZK>f=Lf!F>^22V;)uK&s^Ope%#fFR$;1lI4%osr0J z+K0+$<5eYJ)3HXJ6f1BpxZs+w_S0i!Lgl z*krHqe%?t(_;c=CFo3h;`WerL#>pPm*Bu;XJl7w%sVG)4GuFlGm*G5Guy_}{CGr+~ z=*)Qj!y359Y@E_L*pJub_O46HZRc8T$%b1%+iWN+X?>XNbh=n;WP^9{*;AxU3Z3C{ zvhwT1=>DtD*ddCyu3)?RWCu=DYr&SJ(E46wg=c@Z$s=f3pI78i@azJ=DMTwQ2!&Wh z>Hb<_?O4Fo#_&rU=1h$1g{QdqOTUl)9F3ncqBxYDE@Q^e$?NpB2k|6jWm2}y^xXgT zRI(90A~0v;d>Qxo7VXO;!<)1F+DMG;EjbTxV^o{(>EaaG$?Bz2KH$n=H1|wJWe$UN zVmmSXHvz~EAprATLmh2dk1{6C;4B&O1b7w~?ep&*S zlgwc@3cdBtEqQZ5Qyj|2XJT|pG;{jR=(SR}^3v|tEedYiS3I5zVj<5jw;@Spkr*;9 zxGzrA@#veu6W;Wbv3#nB&gms0Yioj&4SuU}1LJTk>c!>jd9MtmZloUzb>e&F#nl1k z`PQTNau2Clt|%6Eegx@}2;{#Y&uN1z5zs!167MxAL&_>9>5q za0^z@KvOG|@emPeg$MXfIk7B)8c=`<&+9s?>?wk8N~U7Of=9uA&ghzAad zF^2u(=kQB1=7q8MhI%D)hn@=-y-agCV8a%Q`JIN}ycUy%6AXo`C=H~EJoPJt*&;ED zfFzih*GiR(a|^=rCxEDR=QKAE&g{6HS1JCEc5J1KztU?ZuW3C#hQ;Jl>awmUSvNEBzHj3-sAm55$ z>3TbwZ>JzON3R2hT7cBb3<+K_9a2>IsiQ5ReO}674xMbfAlAsw4Erad#hn2WS?)$C z7%mhJAhWcxOJk~kqp^-0h66mxG*(@lfrO2}Rj@|J;HzG?;>MZpT2g6^Q)7b>{S|;V zl_Y^56<;bSh{E9zy3g&p{;Z^2$n28`hcn2_s~J#{RTa_>T0X|l`RG_!9DXMYsAVVZ zAj(^A5p1Q1>T0&<&$vBmQLtIG2L%9LN)~6>N6|1y{HC0(87aozgtvP;{ll*q-*S)jbIW8&hd42A5rb0nO(^f|3IlQ_?lQk33F%7!kq#aP) zTn>sUOpEBpio$lXHGgbT-LKpTQJaQXxylz`Y!INDlKSlebkpVGkypXV`NOA2Ts?C? zhI#M2J+cFuy-^112yRm?avK|sW^m8eDoVrZ;v8`X6*Lo@nhqLp8AdntSWR-bx{Z%l zaYC6{ft5^csj{rt1N5{Bs)XB7q#wD@Fs%}`S3Z9*?;6&-U z*PlEtR8N#bd$!+qElBl-Ghe#16SjUu=lS4)hTtCSfxPkbH<~X&fzGENZdEtkefBT!=eN z{mq#7v<8}xr&JZO#QLjZ&G|-g0_O8sxSQ8cTs}*QtBw|tepdtFgk6)@YRj6>Ek4E; zg5*34cw#6P(K_pEkDKO_2SM8^G#`UnXb(DI8!E2Q62ops`y6U394`C&FzO-v$Nj27 zKWxQ)CyCp;O|*^J#X-**GwNcRk%KcK_L*r|Aghx` z3S>j0Da&j+fb))>$}5|G>~TZMu^$cVk;iU=$o13DiU7Z+ul zn*x<&(;O%6W-++Vym|$}z*DRUU>K!{R=w;J&y+xqFcWQ?y~w;0pK<#3Q`uCLKVyDI}f+OLvTrX5=+lTWr;xRYsqrU2_5%__O^5ykj0K0X7eMI zRvkKbse4EQeggBb=EfJREfrz9j@BXl(ECQ}we?J5db*3*!2!c)U!`t3hu78tfdX5x z5aMRmWarTgip})eyZXAX`;$>ADb|T09)E87K9m4!bdJIEL%oUtir5EaZZ24P$GdNu z-PNWPwT;dn4keJ6uFC3!nX;3Xy^) z1MY^`9ZsE^UAK02pi8Yc0DEHbccJ{gO@0@EXaGi9+myRgym@>;qJW@(pcyd?KW&H{ zn8n~F`Vx?MNDH}ZK00n9*)5d0_On~|*)=N?N2nLkJHE8+sU zAUy`7bAy<`!{3|oKM&}8fj3Pye1g&cA1No0b=o`!f?Lr_u)_b$oyo8vuv{6;=M8Qy zCp?! z|9gS_j|-&fu}crM52X}<6j}Eb;UPYOaw7VYl5!+F{@(mejTgHgLi9qgH@S|*JAagM zAdbeZLQ>pg^hf;!vZ=s?1!po_AZlre5|Wd58ySS0^VfInv_iE`#DkPZ0>r&r6aX6DW^=KiCs)TpYUi z2mwiyLLMCwC>?wGg(x)Vm^szUYCAVbHk$0 zZnbyvekthF=d774LsxlSslkxvYupL%FD-1Hn=$#=JTgE9HaHKb)hM0D$dKQy4rOCL=^{?`J)J z)v#au0nRFy$z~@`3NW}FHyMj*Py?phCueVnz`(#L+h164dhAQx+TmuSp=L$v5yXmz z;X4YZ;*$?;PYEH^tbm2Y-z^-=fEu_H&5x8vo0jj}C~NFC>Cz61#M)tZ3GUZ*Rc`P2 z8s%83`zJ4u@58*lC2&Qbb&4HvO;#&p!Ud_x1I^5^=EUqhFh5tt1_xNW#Z7rVqIVMB zgUr#!bK&$>@inn|TsCQ*ao0}bd2D`k>tEn#BAu3AW`rh!V^q^;do}`Aa<*S`I#}`n zTF=cVYn25YyVx>n!wZ`~w!D-*Opzyt7hZEd^63?9kvSspWn+C4h|hPJz8yDXl67!! zAOrAEQI*CYL{jnlgyLdM{DY8wT{#QMz$I4ACmi=(7!4)GtTF!b`}aolDlut@1YY zJw#F^)|+zB>XwHSWr^g2{p()MT_!$cR^grJQq5eG^Vm@q>NH2U5vO0RfEgBxY6Jp! z!Hr3CJ&%2QMOyHV2m}GBH7ZLc?Cs!@Ltl@UV7!J!PR4ey@6k4IDj#Q%+UCgT%EWEe zYlrB?(J4s;iChdOYM;a9{86<`w)@?qotx-W`@_9<0nzl*G3Qm6)Ae5r(Oi!oGrs2=du3fH{gW6qm!Hpb87nU1EF!W4$vOwC|)Xwu6Y7|3sZqtHSbmGuMyo$bges`@2UD zHkuN~9(j_FA9{ptZ)oc$wdgSLv$>+#C=FWCBonK9Qd!IR0S>#Q5v!&hEJQ)4uVhW2 zt6S$$TL?Tc(eLEyW}8 zYfseK@4t3mq(#|JRq#n%0?h!eYS#sDoB~Y+3MutA@l?lKPc$XKmXBSp7p61fZMnv? z%}q~-8#?==jm7aJjD}VbXU7*sPSw#vVWE|Ly$2gx@D2&uv@5F8P@9}CF)Nvuvay-g zXad@oJoxib`WVp5*bY+b66T{GvL6bK@?)J(#%L&6v^$kcFybuj-!J&JrR&NAWR~BkvYxNX6rf zF8Yux^IhQysu!k|6x1>0S;;!LpJ9>mtKFqrmi2ZJ#c~cd=mn7(Q)sS_48iT~?W`KZ z`xy!}Bh3iYukXsO)4APm%FT?B5hsl$D#lL8n*ufR*+$%_==+<>JpewFib>H5w=n5S zR)<43)o2a4`5-~DHFyo^mMJ#sp<9HTG3if~ewjhp*$-9Fc2Lqj6}|MCBBxvJ;H$eD z)970~COWv<+_V2a++2w(muq+F2uF!-n`9CM|K0OmD2Dr#!?xN1AUp)_QYtY}UJ6?k z%EY)u%r=VXi~s9^^7AZx9Bmduf9Wn?*u+#wOT_NMz(dt6d0>Jx{>TCZPBWoGw<*-} z%mggzub1q360OKHGsbO^o{}gub&{9G%H&Z?7E_JyGGD~M%c;*l>0G*7TAa^PnyUee z^dV!v40tD4`qd)$r6KkK?Vcm)ZmqoF>FE|&U-WdaPJj;{@KP8+oVpIW(;0NXk zx=}|`@Ax=vN#VoKIGqzyV;OVtmlF2n8J{q1^~xL6mNQ(Z(!9>@oAX;tHS(v&FR+@4 zS(7BoJ&z>}Z5KZRWKLv+H`fv$;08hIqpT%RG2#4x-z==j|JHKo0Jz~y#_9%65uoFU z<##k_I!WagHwrmSRx9&?z(C3ZimUvr;|hKsSzjNT?ve zsf8UKAOZod{Z@kC8_p0lsu8Pr+APm%sxx87CttT-IW7kKQ;8)BeUOI3&LkphB=hnM z0!cTs3J*!I1l3-h<(?-#5>hQ8M+6sfTy@AZ76vhNQ*RPFgEX|~ZN*Mo8#`k#FMh!e zS~5Tqm>+1sJxoG~+)2LMYjNTG?MOP{BXZ%|+xnAuRpX^bIT;EbyYM&`;EUCuw15q? zO45{m-(YN>K=QK{3O%G`0dKg?)-tKxVJ5O*4S<}ic@DL}w*X1qey7m%F|f&=`|oMo zM0Ed4Qcd3rh~$#jpSpmdM%=+S?aTt7dIU%qTq zUMP`L22iubmZcd`ve0}cg7L)&no53?w`=+hK;3p-@0=x1TUUYQ-bZf%xAWpe{r*z_ zD3z1xq3wvWMlXQMLKq$q)=r3)TX_Zk{vqJ&p&_zFxGg^RC&kQt`q zelBxzewq$w*@%-B)rCn8W^Y-aKYKRv!Jl)|6X*m50qvfHx(&g`1HtKlhsySQ-4rDc zzCHJ^uY}boe=={J0T9j)z&Y)kmu{|_?!g3+SOnGnb@g?sLW#Y(*k`NN%S3>mHqboi zrd~_U2sjrBB|0_m1J)Hu#`~XLI9|2yzceZA`?lri8TpwmiDjScCmY}Qtbc*Sj&X_a zV|BWP;bInERNLjtTGdrFr3sI;^hO71q{#I5gPTTNP+$*04%=%q9W`6~j!Vw%)}U9A z53+x6SoD6DsbmQNp@;4POW!00;jxtx%;?CCsU3uav~Np33^o_~4Sd0%dpf-SR4ezC zOhIfm6`hCI?FF4R{z$+3#j>**-Sr8G@8O3>e<~n5EaS%(21s6c7fr{5Z!U=CIrV#} z=cOn-i3Ax+V_Qo10R-}z7EIXZZ+G^4{ek%>R%{U-sJ@r`9sxkaRg{xsLrouwYmSSd z8O{pxJVk^|zg-lOO_Xh=F`buM8j!tri&=k$?gqxvfOb< zA(cW}+^w=ivgd=1eF#k-NM?z5iFssMj@SK2y~&t|XWug0;0a&${0p|^9TcutYMiXp z)5!1K2<#?VSX8&_WKWK;s4fg^(NP~YTRCtGY00&6u5W%HSf0Bn z8x8P@pZ&U#sX`pM6SH=eFpBpex=rb}PA!!wl2I_kBJc@7onH3pH6=9l!{Ie`L*1s=Sb_f0K1F{dp*U ziXi_fFy*W0W5)8`Np{Se%O*flZfdQh`b=N6_}F=1>g8|BUwP|Oaw22B$)FMYY1G=4 z_nu7V`kPDSx5?!$@6T2Qttm`PRW}riM0blNJQbcXQk7Ex0nAD|17}wAgmo&0&;HNc*Nz5PDWep5DfVt17gY(sAY}dOoUq zo_ob~IkGm)PP2J$5w&SzTll?60)u!cik8cyDo6StEuo_CQMGw>#g}x1tc15G`$T3M zY>%G-s7NN@k`z^IPx>N>HZ>;ei6lQD6#IgP*{KD>m!*EEr3CJW0W@{DB%ocjWoI>> zuR$nYhZ72Q8n!O#1i;L#Np~?O0@S5)ws$I<$AH>Q4RjK9=90(92z!#x7 zX7*ZlZ#CgP(2yMJAuop*Lqpyx_mwAL-7n;8irA%>WD=fLMI88&^w2wI%5tWUY!N5t zM)ev{r{@zlcZ!(g?u`n0Vl%a`xU9CvaNF`l>H@vQ$5PyYYsm@UBmWalhmX zpQGcVNm7~t4kzhe9TS?07IteT<|m5$5%B(?Iwh4MP?_B1I}1B>tNz=V6GSYjN3@wh zUvjWl0*g&j!MA9B%M(U{shnuMyE`GOdQYPq0$xl{8q3cc-pPSe%i>-e?68lKlT3)M zxaMvED={i4bEM+Nvt5x)Qb2{8hUnKlnIJsFd2H4MN)LYRE=)g8&Jk*h4~#y+LQMQA zDt`SgFDtOl>l5J}q@%gaGBB9|LzD2m%j`stanJgt1-q5<*O4_aZwf$%#I*5nOi_~ zoa-$HO8%+gsIM)^tRi7$cAlC2)@N9hKu^0NV#z}v1B{Q9*LWFhlrnTix_Lt+E`et8 zSZ0ro+i>utjb92P1#!g@N3HWV2v-S9sOL7qaprnjd$7(IzdLCji+dRs}~So9ZqsO1PfjzkJ%J=*;>6!B7gl> zPFHen?@XguW@mbvm+acWLnc0HFZAbDaQJ5{z)u+Tqc_SZLQjHu)~ii<&re~@eznfk zjpc=6j&r6LrcQHOw8=`Hei(H$sZJ8^zA#`irlnOc^BvRp#0$t>PeP)ey!+*K#*<-j z-nCktnW+%(D=B=8GyPdPR$p;P8ZE?y%|bCmI!NThT>oA~iw5W^V$cX{v{&wx&1dU6 z-rf&jLW>`~Yo?oH&Abw+OboLa%M*DgdwJpm>7Dz4;vk}FH>X-;o_6l7S~l7RDHggH z!Zv2#SCSuJGgw1$2rV#mJza8%ffhwAGeG7W19fmf+rI0^`C2>|iM*HZ(DtEcsU~SP zQgPdT<$ay&afPed*~#9KIza)*R@a! zZP4r6dl0$YwgMePc7~rYT*kbF1-VXHDBYAchM9SUowFD@7ID=XYjp~0a(VtvMM5E| zh(Ta7870&xZb!l3Hz-U~-z%KSf0eBK$c|l7uWT(lVN*r2x-8o)%E@g7wg8Tux_V^5 zoY;PLjpd~4`3T76G(jYYbMDynYJL{bnoPn}!uzAei4PQYR%kRW(`=3);5u8K4x!XJ z-(;M0Mm@1USkdU3ynO8$moB4nN7x)J)7SZ+iof1zIibq0Q~nkavCs#THo>zXaeur% zjyO!}OM2O!S~M$_L970xTB(d)@vNn26O~ChT3V-=vb2D;8t;pm%;n$0ZonT;mNk}7 zRKKbL@B~ZrWE%l`KEEGmv8W+zV+@Rrso5?*HYW4^lpJWYc-&^O8)uf%>Utl|hI@!; zhmbdMnBlK8yrNOvDP0pkTq)xIbtBVvQ;v>zz0C6(sT9`>wW`ypG2UbUJU3x*M~!~m z!BXV)InfL`SG>nmwxn(LZGfpc>GNl2`B-{@q`eH+|AmE}%A*!)TqgndR1sp@>7*%9 zXjJ^!2a_qAqm3GwoEA>80VI{GfscqM#LcLgL;cT%+JmaJ%}a%pDAkFv<&T+PW^}d zZ=HI~>~GZ#&w1(O6rJ(%6AS79j}IW~*yTC7v#ymJw5_Vd8D#aegU_2=qwTUA)6~l< zn9uVh=ZaOF?rPuA>fTmTk>@qIBoU-Vn(iIOYKVgc&HPCvFTc6~5*ckk68iKbnS!Si zpy!wb;Sc3=m^-f=!_?dG8xyF@W>3X|$!PP&hQII;=C`|A>xK+>h0Ohd-r@;%SF*A!Y$lWNt2pysOI_a-33=dB zqBE7zx}jEBi7nE~hh6~&T8I7C)H^hN;;=!iC&KkyMWR=>mQP|s3zoj?>15NMdTqQ` z6+TtzNj_i9wa7ikd z%01$Xk{@KR7Dj&byxr^`X8-t99RniQM{B%WB%tu>=WDvO%P$(&==o_Jmq_5q3l5G^ zM$?t?AW(gtw1E27@%&~h$3GpZpS*x1u*#)tfc<9j;nXV^OmH{-FeJDsa+BbvEG98f zEaE*T) z-!8AnsW_ZESNWtV8?ar8P0?(5XO&j4kup@r>b<+r@ijg8**1DFKf*&hjPAJzzW>I6 zAyYyoZ{ad$4gW+lY6d1$x~{U07+eW#s%tt``p~Y5M%IH6tE0J!#;}k}NRX5xLFD0* zYn(c>XkmpQHqy*ME=GO>ujgJ(PM8(?*X2tCW?VMJFPmbN+#7&bChjz6l|k-VK?%DW zOyCJ%ZUh$jE3IpsJrcp>rS%i7R)x$E%m*`>l4yo=0e{Oaz4-vETBh4F)<7B>;||0t zw<`TNG$}TDu4pb?q0OWRTm1?ZvtQ?FROUp<%E$SSaA;G|G>47*^r2Ekc%~Bqvxao? z*shdgCnlLnUr^v3NMW3hjL=JA*t)IB8a6eu%nwOG>&jHFhh8EhU>ei)2BFSl8D8v$ zGA}Q=5N$ORzXf%T>L!MERXSPi9vL*bFTXsp=-byy5yuR@`u6Ns1X%|f!|*wnD&jg| zgPEo0Y(XUplCzQFGx)7M#J$;!$^3j37S)WmDVOS9Y) zLo#=xd`}W)Y|cAn_oZip(f>kbvGkAtJWKvP7sTY$>@`Ck8j&m6qEuX&>)KHA4gj+* zNdUhGH+-ytzUK&^vUX4`^2iwj$+jj+zfts~b0DjQ(1Og}mK$C?$bqwqyIf^gpHO*; z6VhYCF09-$VD9k~{Ke0vVEqL>L0fPCHd6dmJ^laCKKp;ut9xY`gZg6K#~TLvAEPx4 zY?KW1stbDs6*0sYER#ypYu!kobbzAQqXN)611bWK0=!=<#0dBb@L-2gO)H7Z&txFi&TYg}0IZk-Bdzes#2zajXxGiV-_&~Xi$Y<};4S+i9W`1cTupXYFo=|GB#yT2jnRZEuQ&yG+Bq`~;=FTTD)+n$Z*F5f?i0P@|&tApwu zK0@!^!=@luiYPLbfwH z4Sfy1L^g3w)aDvGW59P97-|m>&TVe)>>>}j0@+QweS=`?9F94N5b$YD=FzL&W3u3T zayTDCUB1lt3tN2_NY@46N)4=TDjWs$tG0efC zErPE2954q{`yl!gJk#Qgv}HXo^kMu|q+6SsXFXdP07#P|LWhZN!81!t&VK>tWk4OoavwrVT8d^&V$=|yvuoxMGN zs3C9FWp%igMY1g&E&}qzFVNf>BGpvFoPma_hb>DpL1H?s(u_y!Akl)fVW_Jh>WWV| zTSDye^{ZS;`K?sA-*8n^zZ-G8+me2YfS{CMX|g*vB>{9Jt88S(>{kTCDGw(cgn6Ax zMOV8IKJHtp2?20c891@a$XRvb_-dmO1xrh>dzH`043VFQQqp{hb@TA2Hs6_8ox9Fm zuR3j)^EH~x?Iq641YZ@CTp8@GS5d{tsZ=V#fb#u&qen zm`cm2;Q^%OeOiAVRs@gJQksv`;{m{0VP@)+I#J%0mTYFpf5E8&1!b+y?0<%b;t zWnDl~Ui3(me3cW6w}6jkdZUa6!zY)9s-bSnkkJ{NFeLX2F^Bzg?kI^L3FjC?U)Qg= zzq=|?*7k#i;u5u~Zw&JIoUDp9IQWuk9V^@d8r@DSo>W?sya=ddU`FUOt^bzKCd~{ku3P zCf8fWwqN)71_v(k+$Ll=<=vj&=QUv#)_z(md8OguC#SQY5Ko|(V#2M z*v-iuIsh=O2?D0cKx_jcXj(%2Pc-dOfBSK*lGu)M@5WmLmc?SVy;p+`8$K*YBH?z>*Vhh& zEHu{M_?9M@!cXH=ZypCB(4D6V=`dz61}q%VQM7V7&7ZCh(-{cAq}wuJr+yP?Tg}TC z9N2L8(u|6>Nt}qHV<4EoOsW0mB<(dLRf5O&*nC@#qqH=W61sb2{Xr0At@V2xLtHg)Kb_WbRK8a8&j1Jg?+w@Vr^19PkM zOTUaLdr;3M^?Mu+hke3sqnvCwshG(1`Jvznl^b9>#W(}|0F zGM6D8NCb;w`R%F_914&s>1+O~N?*N^0VBeX{+bm3>6qvCOi@LHGKu?Zu`Am15K~Lx z9~Ks7iY}Qn(pb27jJlXU!>oaXPDS58^@WDWDJL8d>mDjWb&!nflu)EQDn2||AIYTW z*A?+ByG&f7!IMl7BS1xb;ZF;PdVBMRaNcO4qct$Fe_G-lmBdDA!V7gFUmL*lfD8U$W z_d#Qqfo<3e;RRm&AYpgZ^Q_^gwL1 z;xYXQ)94M(j>^<)!k#-9Tr@~{OF)k7WgKs3V@g3<3eBuCF6`mOeycgknATBFXTGONv+M;$G)nl$NT&b~6^qny%;la32@BZ5GF&K-<1@RSfwkFn+MWaKh`d zcj2ptj@Sv9%(mvHdJ|#UkCEV)U9OJ_@gu*R*_v;Y7{nu8t$A7H`g8Fyg0EjpI+|EJ zZn9!YC6-DK$`~8T-Nb_H)8za4-c))uIKJm+7RyafA5^3fXkRC&C?at?=!gIslg|M% zAUb+0OeLnq{&Rk=dbllnL{*iVhOX{mipU{-XcI3xyQxA}CIR+*wEa=hEF&#uPNK2) z!Waz|nd)Lte|AgB1(Uk9Hk^DoO;#2_oC$a9#3N4?L5`qJgVSr}&(72u$E&JgvtQM*1 zMw{m-ir+yjXq2^hKg70IcYx;XDGqd%^*(Iv9s}PIMJSk1m=_Pi3hNHJZ`QeCV>Y!U^9kdy7sc+v_ z<_hQ9Dc=p01!$)T@8IL(XYt?;YTZneBiNIb_1zEeepXZ=DJogz)V!E^m0kQmbE$uT zNqu6Pxz`}3rFBUvuL(b_3*9GSzE%Uph&9_!N9RBS4Ai8|*G?Q-U0zx`QEvP)LcWBT zw?gu;@n)G|=w21q!_g|XXR;Y@@U~;gNfkxRz54Ppt#UG~(f!;QGJ*q9gnWB9lWEs) z%EG$2xLDu$X!~?->0(_ZUcq4gh^;V`8aRh1+Bt&=YCjozpKx?*i*jy zbk+576ly9TcTop9%V$SI+9 z%=Se1@R`gcSZ3)qaWK4_bVk!Xl)#K)5+p|eG-S8Y4UT@f29@OV>#KfeKb1wby zAtrWN(IOx3!}%CaJuWYRx*<&;rup4dzI=?$QcaZ;&u5|0;F)G)cDrt5T{B>@F-L2z zEixO!voqM>q?2MkBjbrs4(ipxD7#;2Am<9aOp}XVm;JMRm+x(a=7+b$?;ZC&OnSGv zmX`bBLTmLBJ8(qDMn+OyIjZe9K>1Xz*hck!FDJ~5elvDfF)tG}ZlQ4ezH?shP{o}0}3nzL(6NgWYb z@&4AL!2OWTsk1q$61~4fcqf^OPl|Hlys}!krDDI6ZX`ynspux$>(R80{c#%llZkTA zf_@W%dLEp<4fS^lC&E)&j-+x1BI;T*MsnrqDwR=PTar$v{ZGAT%!5IsIWaB zP-Z=wCA8HZrWOwBN4OR4e)(d(l!4BI^w&KIrO(pcKtqL*$ji&~`9_+{${bv@mODW}{o(Tt_6em~yR zRlVyZ-X1E++gEt@Jh3Zg{c*dkTYRy{DVMq2S_RYPI@?%_g{2z*9$TZ^&o{rDID9$F5KjN<}%-=PAc+wuq$oV_=-UuwR4`$JpIcFT<%!A zTO^msH`T^m$lO1LX~JmUey&7229{xjgeH^(Gq-_?d23ANxsfS2L9$A|)qEmXi7>kr zW%(8R@o(Ol>-AS~h!3gD$ri|*FwIFsRfkiJ6ScckJq~06T|6`YT)4jXLAAG>muFA? zhWDcYbF(Rm(^_zW)`lvL7>^2HXaioqiNx)V4ThEDmSaqwC2{1eS*lmyYq8KmeJA5% zjFOPhH&BiHnUAZ+UXk*kYyMyDy>(Pn?fW$j2r4L|qzD2^NTWzdhje#$=O7(Jo3wNa z(m5b8bScdc(hU+r4BZXy8GRn*`8?mxTEF#M>s{;pq!BJz>G zzTs~r6Js>;TD(e^M;{>;K6K-SHw(un9;O9aoHJh1Cf$s0GnVPzAtdAvIXOLzPApE! zWRhewq4P8eU9{pK-;r2wAWqLXN>YZcT7>awp6;sT$JhAyv@f;v&2(ybCU1RWCsbKK z21A5viaOS0zs{+_S!y5X(s_P;o! ztLn7L*MLzR;Q1nm_3KlS6cjwjc>G&~C-V?^)$ATEfbLemWaYQm@bQdF6)8j$Il;y#}%X`oUQoA=W~LcwH>FbYng(*@-=6i z+cF;4kzRpUgnhm!_wcPeu>=j!(HGyyXLsA@E-bCv4q2HQJnfK|Gr9e+AU~}W8BxId z&u86~;YXWRR8+iVJI;Db?AKU&FOJiWY-kel+=j7p@1VJAVcygy`weGoH+EP?>$Lb_ zmzuS_#4U%IzO+mRIzFCQGqE5bUwwy3@ui-1a>uK zV3#b;=0rX#&2j4Ny)xq^FdG}22+rn6{6;}MMik*8}wVzK#+ z8$AmPC%rJ)pYyCFKs`Wu zsC$&I&mJc?93bR8Rzh@R=f%B z+OhDR?$7ZB;{o4o7@o!L`7v~d$LT2!yDn^$_L#98qKBJWs<*TS2i-j5-o5{j#u1-m zoD}lv>(|uIgaXWHZqC;a5Y{X6GnZPXOy0AiTJ;`yrtn3@*)9n(4w?A@ZHD zY^wC*cGw$4AS(=iG9WkozCjwHKw)F=JMec6*y2Rhk)v3XUp@lR~-)3ZBlwNp16`Vbw1}0>-INrmcOmc zTP3Mad&FAVsnP@XXl@ft?>xA@&U}@|KXpJb@3Aw4uI*ET#*|!w2!3QlRoQ4BWFuQt zhj7KbN=0EhOX4!a(>vVW1~{rwx~jTTUcfBgj-mVBE>YFl*;!Q>O7;FxX5${QBB&)J zt2$ya%RI8uOrL?j=#j@peogmo)sr`O{@mjR{x=0vlPR|D50~D2Q`&EuI9$B5*c7u| zM;*Hyy++OU^o5|fdqaMf0tvK_H+|kEPB#OZKkPd7#LQG1TwWLWxXg233^0r{qdq{# zc>hk(L+y@xd{+&piNF>j1Y-~ePcxAVN)p;7TKJyO%>vk22?I`!Axex5)fytuihNpU z5Y45@_r#j|UMzcdKv|W!n;n*G`2PA02*TCXIb6Uojv!HxQz~#s&zx9&M+Eb5?tI>X zJn?B_p$@n7qeq5p0@n9TnYE<63PyP%v<2kF&vh;l{tqaf^=P8?>SVlX<@sKZ6^(z9 zr5l{CB{OqRu7zv?j#J0A%l+}nYP;b?*wXRuYn^gx?PUYLPagR$?Kj%SMQxi~cQ2v^ z28Iq$dTfAQ6PFz2Z$A99lr*9POD3Ptk7otucw38JO^O9it>_+8NK75v-m}zvH&QJ> zI&#XTB&EfTjEm^&y#zpNVSX~u5U1sGPOc`x&;({ixMe=A+tN42X?Tia^4q@(!{VnQ z075vF_YaZXfl^M|3Zr5Va~8cq{8h?RR|X7K|7gqoOdLtm0vRH*Q=KVmFl4A{UZ22} z+Npjk$0LCtR*<#+dDZ?p6rAo|IDnz5qpK&DeP>hou#S%}ssY5%4bu_X!EMyTy;bhb zuf#&}RD$mGgkuAcT#2Eh#|!9taHSkhPc0tT?h5_d1b=QJaW{cA{)s<#>)s1A+d4kB zPr5lg14^_RY2$@w9;YQ`#OwI2;jK3`EeE44R~phGL#$nU?X=Df?;wLQ&8=I7fb)L( zh1fX2j2Cy}s@vPc_9B`nH+QwAh`Z7M`j zK+E27;M#i3hDt2MTP^=QKAWeZ-$A)Hj+Dc%>?uc{xEizavK16udJv1x1BcD^z)|=Q zSw!)48dw*?IPHU%!qKg+gF84GK3#Y31>Mj;FXW!-)tc&KMK}V0)#T9B4&LfDuT_i? zFgm#ndr@-e?&cPE;JL?RYFUndf6|0eN7%AJB!$a8j_k{0dQk7q?lg{%aNo1->rBaf zu=q*Jbxk{BA|gjgrf!@e*!3zLLv=Sm9d>Mg;d@}=ybg~gtFI-}lip}=jt!&2Bf995 z*?0lOG?4?<>)-pd-}Ymaw;r_;#-w4?6sJ+Yuq4NSU`baymUXRzG*i$oEE%XX$#$|t zr#@3FSGAT`GXV@kP%kQ=ik@~C87I3FfiV~ zito0>j4?Q)9AjmF$ssj&;Ps_2u=>VHNT6ymI{EXH;)x&jezbMjp=;{Qla|C|Y?Rz$ zqP4^0l3(bGU)aa=psjh zk_L6u9;+8pu6+U5)(LwcE=Zoo$WuEJK46Za4g?UZhWgfD;y|t<&7EL31 z)cWOuuw;A1ENWo6dW1P$p8LajTD?wzZd!}y{A{3EJ>$woEQTOuO7uL3!mfbN z5kr3724HBudH%t}4cql{n^UbMWbrjn(YWv*!*(rZ_#MA7ROzq%CKOm6jad4+F5}AYG~_1b3aM9 zlqswDX-|8n>c-eT8^gjy$9UVwBqH0W=7{_%L2EcJ>VzI^o?TI4-C20MZ4u6d=Zdm- za73-dQ>CoT!gbFcA~Iz{k1_Rvx{Qw=c-uSy>IX%-uD0k(2CS!9Gbh(by~aYJRXn$8F~oIH(STPl_Ca&j#zDO#z($yb!b;y z0kbU-!W==7BWg1{Lz-3|1y8cs5kAfB%jN%_5TY}Nz^k?7xoBVElkAjcb{%_VKw1bg0 zLeKug2@hCz{I(wf@8S8v82|4z=+9y#DFz%9m9~P+f7mwz?`Yr&6boeJJ@+yGD)0Xs zk3qz}t$35&uTFvnUC3HhL2iLj3iFc~5XEj)J3I}_+ptKT%esyryMN!2_~}1Nd0=V= z@NW_3+qOo*GyNOCNj*| zRYhe`K(^k}P>f>B27R$RQJmd%^)^WmYaO3G^Re654Bc$EsbdpmZt>wg_R^to<^Bnu zL-LO1l9{5S%xLS1@4?IWt#b0+rOw83cWJ@f4$(8i{d+3M7G@^QI#N~c$86>oXjr$g zvTk6vu69mU@S~t`n@EZXsmyi8{RadnWGmKw!p7_GvgR4~?%g{ek;X&SPN;`ftIUZy z(|oBP=n+_Xz6!g3a=Lzy%5tA+ti(b8v$M8dR^EayS;m8{&wFh;U0UC2N?W8 zG_`7Ftn4Gfal^%hK0qXnNYQ|C^uf+gj<>4U&zCFm0y~0I6LmC&zy;6H?QB_e%F>|%?xFTt2=uujZER9+Y zByei+Yj1A~VZ+wrPux54qFF1?(=60v{Ne5eAdZGT8quEMthrm+xm(LiR&fN@9HmeX z0$VRQN!bz$c{Q8Ut5-QC64LOAXwK!A7sMe^alG&I7&;ksGkdx}UoT(tIXl(Q=bbJ0 z+^6a6>`wn?tp8E(jx^;|w?!w-@L@(2o9^a;-IOHgR4EPp&pk1jh=Ol*s7EfbM1xL+ z63>5ra7Kr8ygXTP(^7n!Bm z?GqE?n%TDSN`QrB(kTI=pXW&MQZmNZ&sR5>A+A23O(LOXZL+OIo2cPJ!(V{NH-xnv zLp}M~j(MQ8taE0`Vi3b2bZ(cvcR9AE!mqKOP?=M6<7pD=jdWiea1BT$a3+c6r5_GLtgE3PTI zO|mEIt4Ucjmq|>w)o4KFKE+B7JT~7+o}Gw_OA@<9$fPPYy)u8pJj7%$buGV&m7I-F}#&X5PMt_Gp>eGw54!yI@gUva<9qivzpc^xn zBTKt+h#(7FNng+_U7;Qt$t-;mZGBo$DKdVxlNjS2vJey6f~~7(q%vKZ)oKay6qLmw z|EK|;ncVk^h$T#0OA+u22I*Y}+Q2Q0Hdqfei!q(jGvey26-4xCc6CHBM;1-l>S@2i z)a_IzFqo70QwtV4EO%9Xr0!p+syRqj&5Mh+0gy=DHF82h!sO40rtgirzHi5`5n?{B zCP%fK4kIDJHM_@%#88K~_cV8cK?r_#qbYWJ*O*vt&Pb-(M^1}_h6oc_DS87gh8%tw zz%9~pu5;;RuOX;SbJx~avVugPs8n3;?E0w1Ot!}_)^%W(Dr?TlrX^?-$YW0c#OMH} z_R#c?k_ecMs;&?aY#|kpLSXK4>Ouv>22tkvM^Ej(6(6cA!_&0ROCgh2{h>dHV9JG7 zDeCSwh+sxhv0#?@S`5KWoe*36(JX4NiWZ`?gr;hmgH=GIgbT~ux;{n(gz4b2GvL*k zz;yhL&G3K}5|}!vbRU>(_bO0W9k`hCF$nX+?i|u8Xu~ao6lNuauFXJBMqrOtsd9s( zSH2mWxw_QZXf=pUD!J*G|4sh7tySmIJ3Mjx{K5oa-kFZ`jK)@sM>Z^2Nw?6D0ZLt5T$5k=k}r^< zSc8)~Kvbi2FHm~#ZxV43-lW!rs@g`?*SD6zQ()0+4p(7Jw_MR2>{P51t(UnDh#=z3^G zJKrxR6=W^_yvFaw7m~U$=uGmYkx^q25;cXl7aT~?z7`ybLfW$*si~kH z2P2Y4?~m8+K77DPM`_3Z&2prKh^b^l%c_3UIJ3BNrJmZS35Cx9Keot#tVww# z`M-Rr`UTQ@Inzg!HK@D3XR6SY z8jJG!da@u9bBn`yAHY&aNhakVgV@#4vI2&5@SC#UW9N;_@)t5BQkqD=Dg?ZGNzrZN z7R^i;sH>Z4z7La5zhv5&4I^__+$d2+Ea&AVE}nPSdERjoS-1@^XD-~12BK|FV?Fz4LiV}(MWiHoX(0T#aNNpC9jVpIpB=Qc+81gT` z6E=X4hXA{!^*R){6Yz;QS^k?kBu&Y{d;*#Q>eXa!r2gJ|>WRnFE3bfg@R&H`u!7=E zBp+8W)J^Is{aD>v^0D<#l5Mqrr_jgQ&xk9pOr$)<*KCf1uU!hFhjm^zyz!s{$seW+ zr(AZ4IXF-SY4oY~7izr^D}raLyA|yUkE?7|EBWt(vrOg71i)w?Ft`k@^Q<0i%%xet z`0c%{jL6*cIcQ<)>4kF83Z2MOBte<{lc01eQ~(n{Em&aYw*L@QsFU8={I=$;ZW~VN zL^=9x<&MxvBVxdfb02dB(4a zy#GM)^aLFX3oB=Uqd&)W>>X8LxAEZ%9$S$1vD0L+e;)Yp3wrY)A!ZYa8F<#KDKtYDf-C+lArwK0TmxGj9vKoAzrYq zD5oTKq!w9k>P=4UszI`A&K%OCbWf=R2z<<(7`?WFQu3DUww_t?oyCtL**kM}@2c06 zsgY27^ zg4B)-HAJxF6#zw*%Oqa&4%r6`YR4o7&cUwYAvo2f^gJWNBb0i)bSo&mcU7?X~N?wvRDpi%_W6Q!7*`&wgRp0e2L7(aa*yB36 zISmNzP^QVQol7n0wEgj;0{_gZve)zMLp-JmWmLt#)1rY&YBCPsZ$Py#?%JMV-q*}w zr)ySX+L#e-yQ8=?pEIsSTsSW+STIrL&XV_Gq&E#etf(xVGr=tL&M(Z|xvtYQ=5olU zRArdza!Byj^Ea@20F?g^Fm;4{F<&UOSWc4vD(^Q6XA$I4iRj^PkPs{(GCN6+HyZZqNS5Cb1Lfn0`4 zF{hL=J?JYfWp`2o*?sv1ge%m8ulUacR&iexYPyvK@4C|5U7pWp9H1e36UA-RQn-pR zIJC1iWq2_rVi>RE$KX6og`g#ONp0)P-+`*TM&R_CZi+XkelmkEgvVA8VPoHk;9O$y zHY9L%E+5!_4PJ49hb%pK0d#?}j6_HE9MlS-c*OagMau3g1WeY0MddmszGqPFjxgO5 z=^`DKdE0;DT^n!A@GE#%k-XeLq1J6yw$L-sMw{QAxymyphS4Wn4KgG4{=jQ5!vNjY zPv{X_$jFj=B=USOYUk5`NmPC|M}Qd>+CjWJwEHuZzd`V;e}dq@$u*5sz(Zm8{f{3C zrjLejR20>O-wT|^W%YhYt0KNd2QD5%I~i+xxcB+%s8*4k0P#jhB^6C?Dw0;)Q(7`p zxTZZJaB*IwIz30Ehpc=Q)j(tfWT*bYCtuhWN!*3DXC3P^zMtUTa#fN_IQYQu2dMjA z;X&^Gi~^Y0&8BS}2|KxQN*hnGG(Jqj!3|c_Q=+GqPsz=bBGG<3zF?hpAy=w8Zc>MI zK4=0Lj|Rd(7H%)JrE7BQ4>*u%u{Rpd;;lG=o=Yc8U*7QEKyE`(EW!%ZN0f3AFzp7A zsg(3$#1b=?+X8^|;f;cysKs3VVOC+Ni&kB(@1i-J{;k%`42t$7$>vP@HSmSZGkeLa zoS9eM&T!2F94=dPxqfY*Hzaz`&gW8qA=cKOy20rns%0*pTu0!Yo|)ID98G(w^O5O1 zmEHZtAFlwEJjC0qs@n-FMq}Jq^}e_moE{fms^^s=08&z@nVJd<_$R}dhy(ebZYCoqMXNL)`7HGi`fXcQy9Ta+!56fXj9)u+^+8QTJ@`wN-aFF ziv^@Hn>E4)-6ly;cI%&iI_8W4)|{xbGjUN@h-3rKH<9z&@rx)sr=JK zMwO>9@Ohr|L;{Cc$RG(I^Bj<5UPL*Q<1^Kr>1oJHki|9ar@b?|B`VLY(%ny6*Pqs$ zcdA|*TiPs%;nx7)Jbmo;t!#PPTUHL^o;yB_DQl;?b;Z8XW|2xXqK{+@tA=g7;{$sM zl%xk)I42cSwQJA!BigJk_67?o6#NOc?yoCt~;eiy>-~mZNfAwT3e$b&Cq#i^? z`zL`!8xs$|iM@TJX%cwzrqUtbH7_9BJMk|P5NmS`(8^_`r(DXeGsG1B#Q`GNok3Y1 z{7o^7JqH{FY|{7wifeMDlj&$ylA`8cbE@4_Ufta+jlQ6w810Zhq?0Zxi{8dH>rGvC z5+Zw;#WO@;^Yuby$kG;+CW}#&@71QS`@+_8Ny1E;dMczcCxwMK&%vyPnzltPGPAli zSnlC;cBco}BWjL^#W8%GvT*eqLXB}0*Fq+um73z|hm+CjBKcF-OFyPdlBj&B+f5S| zy&e|oyp{HgslbqWoLQz{@H8bKJVAsRVaY~hZe74Vum4zI@Z+&#Hk?>DQy{*#qbWu6 zAoa%kcS=enW2Tc2M@B8k{xbOd=_lk$h4Oa%p*jX@)kDAXX|jZ#n4z9Be5~A@a)uQC z=D5F^L@wVr^p$=k@rlTs$pOlAm4gT6O4_(2O*Py+jA4b7=%xLhm(#it7bd)l+|a@C zei_Hb8w#(MBZ;uI;@4IEoh>C9t4PZ0q>P>oWruf8_Vt-rGNXPI`8uNXhfd@ML=i67 zMWqWh4wQr@NH%fS)8rC~Ju_OEc*3LmuM(6&*9N$x#2oF*TeW?h;F7y`;hf+jN>bp2MFLFYbF8($ttK6o{vh`Yp$@hgB^K}5UxYV^+Slz z7{wH6Y3XzaXpF@GXCXoU#XeRZ?U$yern2{x@MRSuh5 zzb}5;{B9sg?0$IAUueprwJ-x6^qgr^o0`k&6X2{mS#<6+bu}KtV*s_xg)*UblsWw+ zHWjA_#HP#hHllanlrd_htA}3WZ9>H!$2Myp+KCZI*?=;5Nao~YX~^rB!bdjn7cNV3 zs#5cB)8-3&-{l`T5SCS9!%9gBhPqAzGS3?uQMB`kw#J5RrHb+4^(%(2Y3^*MCX2&% zM(C)u(u{%1w=PQ#sY*xD7CUVujuZC8IlWmi2O`7Hp-tx;!9LWhA=?E_<*Wn%? zkFu_-gh^*O+N*~x`8uwaUmwVPo~=T`ig}Yprfj!(-^&S6u+03yR<&j9fwXD3sDBo8 zwHB{{yN_@1%fvaZSwqC3S5WQjz+<|A!*XlMgE5$Sv+}S;B*`y5@lW~%uvr5{T80D^ zueI?ss$3{BijB0ukT)e0WOSM}^Yc-su1C-(ZS=EwI&K#J(rppN<_J}FGw4KG2_CwKaQ2x}D*`_~}D3Pe+wZc0mto8F=@ zlvAr8Bd#pm?B+gIIv3RNqy$Rlv4B9PbgfKQ2$}ep=6%DP>Y^`NkBZ(@i~@AD9yZlV8Ve= zPI)qXGSaZGOTUob*!+zIm(cJ@RkB$18eCb$TS^7JlpWe0^(> z-Bw*SG>1wiR4(vQQb0vNC&T zfeOC(kXC5yli-CmTCRwp7#LuB(D{JrG#eUA)St~Sn7Dqw+-o$ZW@pVNgu2>ILL!IS zqng3X%Gt_J-Kyf9y1b_G%h_fRX*Hip~HU5 zOyh_RvALUUlCI|zTZetMua^3e6t@yo+r^_{34}wMB|Nf6Z50H^XsmW+T!E}F`+JDoU!TiAD znBI%e_wQfHpdu{^F$js3Nr_R%8Up^67twQ*f;RrYMmW4W=J54r{17BT=w6t+0 zj&03Pk{j#2PHFURO8iDsz=I#G!0N!9F5HqU{Q1k5S9vl7yH1p7fRYYGg)MS5ljqf2 z6rFnA)HmFJ7USQqWAGAK2C?t*{(Ir|^<_X-7Z2?j%jri~-$<$djA@Tk0aAXzN=#2^o@b#0QF?4VuVtR&1^730y>x~S zY&AW=>aLXY3(#}A+(kv?J$Rt}>^s+$J_@jJ_=17Cq;;}Y6uQYzf_pYQoqD1R^VUq3 zqfV^bIDO7Ln9md^N$LkZ+&?}D!}+d|;;icG(W#dJkir*E+k1VOc&l&OwQ1QHg+qMu z(}L+?g}l@-HyGFSJRiHE$sgq^%1t+XK(!4XbPyWFd_>Xdv@xC?ZOQXZWWj@>Wn6CC z(Y)bs{xay|qTx(Efj~feAG!jsSQa?5y9_CB*tU&5mHU(^xl73CP*ty@QwN{v!?`%T zlq;$~pSlMvRo9GK0i<=c|4M;yiZB?pd-`8+NNb~r95}B{(SBz z=rkCp8aYo|SdDOv#eAn~qfHZJm~r~_#P+rX8&uDK00yesjhjW4i9IAugZ7T!^E|0= zXd(lEZVIjAtddnFIMHY>vV8$A8nI~wkUZ$eC&yJ|eW+88OUDQcdJu+<%bA_i zJzb!nO%QgJnz@47LPe$6S&M;>PbvlEo5%3$jUDrg0;c>$MJzymq4M#5(ehv_U!IOm z0@Ao>Lpy;?X($9&x<*&v2vbsTu;4{zl6q`xf4G;AA{^N=^b*5Yong$ZioZqodbB?lk@KHTSp{or4)0HV)oY9&P4J@Wnz|7wea=A(ULAG0yrELd5|c3!CJE0HfA_ z%o5fQg_*ZcPwH#b#S<>nf7W{(C!uO|`ffAlC>@Y)5PiDg%GY7?_TCSR*s80}l>n+QS#K7<-#brj- z0-Rjp6C}VX+lI%voI37x%*uE>q+>+n{9zN@cXk;XyAh@ijwuZ?a*jb|izBv9owDGB z2b-m7Jqc^`NE=$fIIw^Fnos)s!&SOOf^Q}++c7Ho%Cba3ath{P9*pZ4`Mm3~yy9)m z%40*)ROi{ICXwU}1ra5LEKdOM?rM+R4`j~H{cBviP&1ot>@3Ry8~sZJ+Ejx&4D0YQ zAf3+Wd>F0C{j}1aYAG)SgN?_QpM7xXyQH_Gf@}7;k#jkxtKv>?GOtKC4tY*2jsuGT z&S z6|9vhsWW@hYbx>!v^)>`-mB;n&?O0Z&r%HA9IqH) zXhzg+FJ`c)NI4$wGdLYIqn7V&s`5q-j5^NRm$b<+v=LmX`3!b&feU6qSG&um>n3mU z^%`!GDSgPHO3iqWV%_)z0sdY5W+~HqnJf6CoYUv24h@7Dl?^kbR+I0i8gwP+c9>S= zhOnK74oG@G1g2ip^N*h(ILBlU?Xvf3_nEwYa zAjt22W}FqXO*Y>UJAb>wOFcDThlnugt?p8^o2qD&VQ*x)Qh)hL$^xiEvaU96(h<*X z&~WIjj}EJ|ZUc~0s>{~ZnWs^3L#sZoveWtS4huf@Y_>Ug%bFm2UbL#ez~=Gx8@B?Sr;wUV1b*|J0HQ% z4k5!>52Ga?+N%?}I;bm?GaSrqfD&~+)pWp|3FoGnB}?1oQ|>`RNmil8vlY>py;t|Z z$VA`O%fL^Qq)&P7KBank_GNLKYhZEibD52YihcBWFImZKQac7qr&SJszfE_q@Ro>p2hl{lM||MS2Uca40>Bbc5~uhWOfBvSBl`oI%Yx_ za%2!?rOw)umFB&Y>Zgf`WRn945A=||_R0(sE$BA2%Ravtac!7RL95qV&$`V9Q#Ywo zh^eeOa|MIl7r^)BDaoDY_&E#;&|GeDGL|Qx5CYeb#|d&M!COmR3ko;tHWaA z$l`WDYpRg$h-yZya}y}$il?QuO+9(G77`X6!GRYIiqT0cnB>(;XwajJ?I!(VWAWi- zP~@2GIi%tA20Rq2}tGshEqJObh+&;Xq)-(wcQ(=U1aB4+a=8m>Y*>z6d z4$9Qgk9^(VVF&p7YC68_n$0DKdzMSE$AbhxZK22$|1qjmtI33chv&NA*^kC3?!3*ogD z+WyHMLD!f^lx{2g>$JiIBP z+wH%L*k2EREF$aGV>F@K?I#M#u6AcPT0STzqv$Qj9EYKx{4VL-D3JBsk2E2ZD~s2! z($z2E32+0=jiBKE{_EclfTsZ>+e(YOSHGEG7{Xu<6XoU-eP! zG~?df+fGet*NnpD4tacbE&3^>Zc1gUPq;-Edywzx(_%Cur+*%ipFL7^uJhFRV~4PT z+>z5bX{?m@^t76C!v6=AH=uIwsK|=zyMOPlsRwvYhm~ttAKx~2S5vl1n_&nk!)7PB zwLGrAgtRxm11Pt#0B(AnXF7`^wnu3tI*8s8kYNXgq{t#!yZ*h8%qgc4)#T1xfOT20 zlc)G6X8pPVr6quo#&(7R)S#&1GkZi;?H<-A7G5#UDi(#sZ!LggxWQRdOx*ZEG*_ZB zFf-WMt|xPOkf{HFUHr<}rmyb}+(t4h938d~ycg(bUY^mW)&k*4dtAE|NaUK>yD}{FiMu$_}M@U z>YbQgm|WAub_pj^o*UwkvNJhO^OAwcn<|7{Qc~oKrrG1MMlWpL} z3^b3h+&5?Y=qWbNJyBa$Me!=t?MlAMU-OyylK4vii!8lASVde=JKW#aa0%_yKKm9# z6*C8{$Mn1h7#O9GSLaXnZec)PhldtHOI;r>c&+M_joGOtB}ZHD>-Zerq0Y?Egoi9P zS@c@6nZDG&ddV3BU~Yf(m1t39FmNpnWX~iEh@#ee4+@NmcNDxBDd#9=s3d|@XDaRN z#pmUf6|3gR*3%$1N!8#qtG1&j8|%~J-GS-IQOk|#+^nN!{GC}8OIMI8;J{Yl06sX_ z$$AfH6qaf(C4gQnk}%B7FjWA!=#iCFZ352aWuls6F8^td!y8Vsd-i$xRhcIRb*hrU zc<4g67r#wT_COmBZKkG9^!eE}K)a0Lc@j*U$>{1_roB+>bb#*;K1D`0)NS`1T8OCx zvwAmN&iiCA5cPilMh#mbV<>yJElIV0aIx>o9F`ItDgO9%SL$C9W-fsvcrW98jf1kX zuB78Ysie+O5kX4Dgb7JaIgIqD{u{COOaCnf7C2%0GpIU$#8N%Sf#pYCe&_hI3%92~bD5N5ZM&O-T_kJ)Ms4$D2sGC=>eoOEvs- zze>3hFlm%U>3+6ep|9cXmHQ+P6b6-ZVwg}UTdubV=I}|dY#ii30+__4>acCW z;-j=8+&|n`f`?d3B`vnz7~I=J4TwJJ)}1kbTbs}+UDSU((57i&CShpV60b(;zk-wqw)<$ z!x_!P%Q@v+12o6G^%;lY6dV2%_h zE1`r1h1>^5K1mx_b2^iOkxwJ+SRgs8Inc1Edc=Eu=KMx^KS+Uj(1@=`uU3a{So~m9 z4eRvrv@%mJAX3H^)lwp67eXIC3d68-3o48>o|JX9wQ5HSH!G+45^!GEQ7;rrTV$DE%-oa4ta? z81aa3E%nhV5i09O_&It0$s8IJXe^+Bad82zJgZpRZ?m$tEvv5n-Zo~awC~7}RMYDt z({utW6Sm2kx$HNo#d*d6aJ9x7wP;&wzM#2-03WMV2c?=f6SSPIl*A3??J8QRD8Tn3 zEIZ2vZRb6r3ZUQqfoE9nzPez6bv%{sLPbxG6zn!&aW=^u5Oj;HJ}F);E(LbQxq{BP z7#97y_&MCjG4?aI^PB0gDEUWg*sM20)3qFPJ{SX zt+qH{@v}1bB_1{nC9&zcx}O$C+b&G(Gl#{h(4X?)#~?Q8HNbYKM2SVW>L9*(*}_^G zG%|;F@i{eAD>3l}tp+`0;(<(TPm+>fJJt8t$``N;3(2~=Dg1j}FX_I0;)WecVC2-h ze{vWDbS;!YtCf}7(m%?~B_Efft6RH%{l>Jh(_KJezFkZ8J)zu32d$Jzvpzwsa4Kz) zq0@!6#+7q7*}*F>x9~Id8b^J^>u;E`K;tPY>I4`_7-_j8qw@7#0*cM`D(f2^Z2`Xq zOb;7|^%zpu%Ehe)H;!JwFCKcYcPJ_)y!dO%lnbq_Zh`SAuFj>YDeO}xltEpE%R}GM zva5Hbp}J8B7NH_yg(vp7gh_7xe+6*#t1#+RXM*T37Pi{1=C@XkI4D#B@`EISIHaJw-xD zoE*9Giw_ARaOOIXK1>NP-{+>VshRHm zcLdo%=5l#_BS;gt`Of1}d(5rlVU0PgKV({@pD*3>=L07*Bawz`ao2A0Qu_J(qtWv^ z_T)h|aw=-eUTTW3+UaD!*~2hFtY&XnXD$p`KYSy@IFKfzUcT+E$tgMa4njBBOW$uj za~2vnehzSzrbD8CYh#(YvZPZ?a9k}$*~+yzmrKQ+SiZt`kQ!OfGIhEdL+J?PCcs6b z|3<@6uE+Ej+xI27Fh#?(SJJroTL&Z4S&4vdDBv|%Wt#J7IiGAATz?wYpxE0BSXSz! zaVK<*C4(?EhTFyCodu>3L3WcrEpTS|!7cw-d|$mp)-ei(DVAvdM+ci5^oH7F zEt&^1M4aqjOcP%FS1DHeY;HJ8JJxT-m59MEEM<$M<@Uc;+1yw$c0F1G9N+|s6~s&P zD=JmZP2lvRT>ewp`D0R$%+#-srsvmTr`0pF>EA%Pb+BjK0eKp?vS<|BUkVGa9QnyZ z&3e6T4T4G;at~ZG8HNCK(0UWxgaf~89D-^$PL zrkqCe>?7w)&A04HF@V|BHzBEi;G;p*%|>B9DT==Cg(nm-h?h3GVh{Auj57JlHjCzY zXvO}Sw?=gH$0#EaMJm?6kO|7oQQ(fTl}7(ZYvHf5><1dMM=vN$@XyNrXEpJK+Lv#z zTx5$Ejw$hq_G+2&^Va}DsaXH%p74M4y??@?`*(q%U{rjQKZNx!lmz_reGY7+|NUvg zwkQ~yS8K+<4>TA6hURY+?)em%MV*C%U*n^}9#BRcWzr~*i2FPiY|39a8bct&8a_;(vsn3Zhz&}Y*IgvtP1ONX6 DQ%FfT literal 0 HcmV?d00001 diff --git a/scientificcalculator.uml b/scientificcalculator.uml new file mode 100644 index 00000000..b9879a5c --- /dev/null +++ b/scientificcalculator.uml @@ -0,0 +1,26 @@ + + + JAVA + com.zipcodewilmington.scientificcalculator + + com.zipcodewilmington.scientificcalculator.Calculator + com.zipcodewilmington.scientificcalculator.MathMethods + com.zipcodewilmington.scientificcalculator.MainApplication + com.zipcodewilmington.scientificcalculator.AskNumber + com.zipcodewilmington.scientificcalculator.Console + + + + + + com.zipcodewilmington.scientificcalculator.Calculator + + + Fields + Methods + Constructors + + All + private + + diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java index bde2a10b..85b330cb 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MathMethods.java @@ -43,7 +43,7 @@ public static double squareRoot(double a) { } public static double variExpo(double a, double b) { - double result7 = a * b; + double result7 = Math.pow(a, b); return result7; } diff --git a/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java b/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java index ffcbdb40..cecdd765 100644 --- a/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java +++ b/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java @@ -12,46 +12,132 @@ public class TestMainApplication { MathMethods test = new MathMethods(); + @Test public void addTest1() { assertEquals(10, test.add(5, 5), 0.01); } + @Test public void addTest2() { assertEquals(10.5, test.add(7, 3.5), 0.01); } + @Test public void subtractTest1() { assertEquals(2, test.subtract(7, 5), 0.01); } + @Test public void subtractTest2() { assertEquals(10, test.subtract(20.5, 10.5), 0.01); } + @Test public void multiplicationTest1() { assertEquals(56, test.multiplication(7, 8), 0.01); } + @Test public void multiplicationTest2() { assertEquals(8.05, test.multiplication(2.3, 3.5), 0.01); } + @Test public void divisionTest1() { assertEquals(3, test.division(15, 5), 0.01); } + @Test public void divisionTest2() { assertEquals(6.0, test.division(36.0, 6.0), 0.01); } + @Test public void remainderTest1() { assertEquals(2.0, test.remainder(5.00, 3.00), 0.01); ; } + @Test public void remainderTest2() { assertEquals(0.00, test.remainder(6.00, 3.00), 0.01); ; } -} \ No newline at end of file + + @Test + public void squareTest1() { + assertEquals(36.00, test.square(6.00), 0.01); + ; + } + + @Test + public void squareTest2() { + assertEquals(9.00, test.square(3.00), 0.01); + ; + } + + @Test + public void squareRootTest1() { + assertEquals(5.00, test.squareRoot(25.00), 0.01); + ; + } + + @Test + public void squareRootTest2() { + assertEquals(9.00, test.squareRoot(81.00), 0.01); + ; + } + + @Test + public void variExpoTest1() { + assertEquals(49.00, test.variExpo(7.00, 2.00), 0.01); + + } + + @Test + public void variExpo1Test2() { + assertEquals(1000.00, test.variExpo(10.00, 3.00), 0.01); + + } + + @Test + public void invertTest1() { + assertEquals(-10.00, test.invert(10.00), 0.01); + } + + @Test + public void invertTest2() { + assertEquals(50.00, test.invert(-50.00), 0.01); + } + + @Test + public void sineTest1() { + assertEquals(-0.7568, test.sine(4.00), 0.01); + } + + @Test + public void sineTest2() { + assertEquals(0.9894, test.sine(8.00), 0.01); + } + + @Test + public void cosineTest1() { + assertEquals(-0.9899, test.cosine(3.00), 0.01); + } + + @Test + public void cosineTest2() { + assertEquals(0.7539, test.cosine(7.00), 0.01); + } + + @Test + public void tanTest1() { + assertEquals(-2.185, test.tan(2.00), 0.01); + } + + @Test + public void tanTest2() { + assertEquals(-225.95, test.tan(11.00), 0.01); + } +} From 0fae80df936faa7fd4c92e84e5c021e2da8a5a8f Mon Sep 17 00:00:00 2001 From: k-romero Date: Mon, 10 Feb 2020 10:25:54 -0500 Subject: [PATCH 16/16] made a change? --- .../com/zipcodewilmington/scientificcalculator/AskNumber.java | 2 +- .../scientific_calculator/TestMainApplication.java | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java b/src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java index 60e8c008..f75839d4 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/AskNumber.java @@ -6,7 +6,7 @@ public class AskNumber { public static double askDouble() { double d = 0; - d = Console.getDoubleInput("Enter a double."); + d = Console.getDoubleInput("Enter a number."); return d; } diff --git a/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java b/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java index cecdd765..fa6b2d25 100644 --- a/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java +++ b/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java @@ -4,9 +4,7 @@ * Created by leon on 2/9/18. */ -import com.zipcodewilmington.scientificcalculator.Console; import com.zipcodewilmington.scientificcalculator.MathMethods; -import org.junit.Assert; import org.junit.Test; import static org.junit.Assert.assertEquals;