From 178a605d4460b19c7c314f54584fa66ad38611d3 Mon Sep 17 00:00:00 2001 From: "James.Woodard" Date: Mon, 10 Sep 2018 08:58:41 -0500 Subject: [PATCH 1/2] finished up everything not sql related --- checkpoint3/.vscode/launch.json | 28 +++++ checkpoint3/.vscode/tasks.json | 15 +++ checkpoint3/Program.cs | 190 ++++++++++++++++++++++++++++++++ checkpoint3/checkpoint3.csproj | 8 ++ 4 files changed, 241 insertions(+) create mode 100644 checkpoint3/.vscode/launch.json create mode 100644 checkpoint3/.vscode/tasks.json create mode 100644 checkpoint3/Program.cs create mode 100644 checkpoint3/checkpoint3.csproj diff --git a/checkpoint3/.vscode/launch.json b/checkpoint3/.vscode/launch.json new file mode 100644 index 00000000..b2b31fc5 --- /dev/null +++ b/checkpoint3/.vscode/launch.json @@ -0,0 +1,28 @@ +{ + // Use IntelliSense to find out which attributes exist for C# debugging + // Use hover for the description of the existing attributes + // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md + "version": "0.2.0", + "configurations": [ + { + "name": ".NET Core Launch (console)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + // If you have changed target frameworks, make sure to update the program path. + "program": "${workspaceFolder}/bin/Debug/netcoreapp2.1/checkpoint3.dll", + "args": [], + "cwd": "${workspaceFolder}", + // For more information about the 'console' field, see https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window + "console": "internalConsole", + "stopAtEntry": false, + "internalConsoleOptions": "openOnSessionStart" + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach", + "processId": "${command:pickProcess}" + } + ,] +} \ No newline at end of file diff --git a/checkpoint3/.vscode/tasks.json b/checkpoint3/.vscode/tasks.json new file mode 100644 index 00000000..d29abe04 --- /dev/null +++ b/checkpoint3/.vscode/tasks.json @@ -0,0 +1,15 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/checkpoint3.csproj" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/checkpoint3/Program.cs b/checkpoint3/Program.cs new file mode 100644 index 00000000..5611a08d --- /dev/null +++ b/checkpoint3/Program.cs @@ -0,0 +1,190 @@ +using System; +using System.Linq; +using System.Collections.Generic; + +namespace checkpoint3 +{ + class Program + { + public static void Main(string[] args) + { + List tasks = new List(); + int tasksCreated = 0; + Console.WriteLine("Welcome to your task list."); + MainMenu(); + + + void MainMenu() + { + System.Console.WriteLine("Please choose an option: "); + System.Console.WriteLine("1. List tasks"); + System.Console.WriteLine("2. Add a task"); + System.Console.WriteLine("3. Modify a task"); + System.Console.WriteLine("4. Delete a task"); + System.Console.WriteLine("5. Quit"); + string userInput = Console.ReadLine(); + if (userInput == "1") + { + TaskLister(); //DONE + MainMenu(); + } + else if (userInput == "2") + { + TaskCreator(); //DONE + MainMenu(); + } + else if (userInput == "3") + { + TaskModifier(); //DONE + MainMenu(); + } + else if (userInput == "4") + { + TaskDeleter(); //DONE + MainMenu(); + } + else if (userInput == "5") + { + Environment.Exit(0); + } + else + { + System.Console.WriteLine("Sorry bud, invalid input."); + MainMenu(); + } + } + void TaskLister() + { + foreach (Task t in tasks) + { + System.Console.WriteLine("Task " + t.id + ": " + t.description + ". Due on " + t.dueDate.ToString("MM/dd/yyyy") + ". Priority is " + t.priority + "."); + } + } + void TaskCreator() + { + System.Console.WriteLine("Please enter a description of your task"); + string description = Console.ReadLine(); + System.Console.WriteLine("Please enter a priority for \"" + description + "\". You can just write \"High\", \"Medium\", or \"Low\", or really write whatever you want."); + string priority = Console.ReadLine(); + DateTime dueDate = new DateTime(); + ParseDateTimeInput(); + void ParseDateTimeInput() + { + System.Console.WriteLine("Please enter a due date. Enter using the format \"Month Day, Year\" (example: January 1, 1979). "); + string dueDateInput = Console.ReadLine(); + try + { + dueDate = DateTime.Parse(dueDateInput); + Console.WriteLine(dueDate.ToString("MM/dd/yyyy")); + AddTaskToList(); + } + catch (FormatException) + { + Console.WriteLine("Unable to parse '{0}', please try again.", dueDateInput); + ParseDateTimeInput(); + } + } + void AddTaskToList() + { + tasksCreated++; + int id = tasksCreated; + System.Console.WriteLine("id for this task is " + id); + tasks.Add(new Task(id, false, description, priority, dueDate)); + } + } + void TaskDeleter() + { + System.Console.WriteLine("Which task do you want to delete?"); + TaskLister(); + string userInput = Console.ReadLine(); + int userInputInt = 0; + try + { + userInputInt = int.Parse(userInput); + } + catch (FormatException) + { + Console.WriteLine("Unable to parse '{0}', please try again", userInput); + } + for (int i = 0; i < tasks.Count; i++) + { + if (userInputInt == tasks[i].id) + { + tasks.Remove(tasks[i]); + } + } + } + void TaskModifier() + { + System.Console.WriteLine("Which task do you want to modify? Choose a task number"); + TaskLister(); + string userInput = Console.ReadLine(); + int userInputInt = 0; + try + { + userInputInt = int.Parse(userInput); + } + catch (FormatException) + { + Console.WriteLine("Unable to parse '{0}', please try again", userInput); + } + foreach (Task t in tasks) + { + if (userInputInt == t.id) + { + System.Console.WriteLine("Do you want to modify 1. the description, 2. the priority, or 3. due date?"); + string response = Console.ReadLine(); + if (response == "1") + { + System.Console.WriteLine("Please enter a new description:"); + t.description = Console.ReadLine(); + } + else if (response == "2") + { + System.Console.WriteLine("Please enter a new priority:"); + t.priority = Console.ReadLine(); + } + else if (response == "3") + { + ParseDateTimeUpdate(); + } + t.id = userInputInt; + System.Console.WriteLine("id for this task is " + t.id); + } + void ParseDateTimeUpdate() + { + System.Console.WriteLine("Please enter a new due date. Enter using the format \"Month Day, Year\" (example: January 1, 1979) :"); + string dueDateInput = Console.ReadLine(); + try + { + t.dueDate = DateTime.Parse(dueDateInput); + Console.WriteLine("Due date changed to " + t.dueDate.ToString("MM/dd/yyyy")); + } + catch (FormatException) + { + Console.WriteLine("Unable to parse '{0}', please try again", dueDateInput); + ParseDateTimeUpdate(); + } + } + } + } + } + } + public class Task + { + public int id { get; set; } + public bool isComplete = false; + public string description { get; set; } + public string priority { get; set; } + public DateTime dueDate { get; set; } + + public Task(int id, bool isComplete, string description, string priority, DateTime dueDate) + { + this.id = id; + this.isComplete = isComplete; + this.description = description; + this.priority = priority; + this.dueDate = dueDate; + } + } +} diff --git a/checkpoint3/checkpoint3.csproj b/checkpoint3/checkpoint3.csproj new file mode 100644 index 00000000..23df6047 --- /dev/null +++ b/checkpoint3/checkpoint3.csproj @@ -0,0 +1,8 @@ + + + + Exe + netcoreapp2.1 + + + From fb88df647c1e97e895a0d88c4ddc0436c05d5be0 Mon Sep 17 00:00:00 2001 From: "James.Woodard" Date: Mon, 17 Sep 2018 13:35:20 -0500 Subject: [PATCH 2/2] ensuring the most recent updates are uploaded --- checkpoint3/Program.cs | 156 ++++++++++++++++---- checkpoint3/checkpoint3.csproj | 5 + checkpoint3/tasks.db | Bin 0 -> 12288 bytes cp3 backup/.vscode/launch.json | 28 ++++ cp3 backup/.vscode/tasks.json | 15 ++ cp3 backup/Program.cs | 262 +++++++++++++++++++++++++++++++++ cp3 backup/checkpoint3.csproj | 13 ++ cp3 backup/tasks.db | Bin 0 -> 12288 bytes 8 files changed, 454 insertions(+), 25 deletions(-) create mode 100644 checkpoint3/tasks.db create mode 100644 cp3 backup/.vscode/launch.json create mode 100644 cp3 backup/.vscode/tasks.json create mode 100644 cp3 backup/Program.cs create mode 100644 cp3 backup/checkpoint3.csproj create mode 100644 cp3 backup/tasks.db diff --git a/checkpoint3/Program.cs b/checkpoint3/Program.cs index 5611a08d..fcae222e 100644 --- a/checkpoint3/Program.cs +++ b/checkpoint3/Program.cs @@ -1,6 +1,8 @@ using System; using System.Linq; using System.Collections.Generic; +using Microsoft.EntityFrameworkCore; + namespace checkpoint3 { @@ -8,42 +10,67 @@ class Program { public static void Main(string[] args) { - List tasks = new List(); - int tasksCreated = 0; + TaskContext taskContext = new TaskContext(); + taskContext.Database.EnsureCreated(); Console.WriteLine("Welcome to your task list."); MainMenu(); - void MainMenu() { + System.Console.WriteLine(); System.Console.WriteLine("Please choose an option: "); - System.Console.WriteLine("1. List tasks"); - System.Console.WriteLine("2. Add a task"); - System.Console.WriteLine("3. Modify a task"); - System.Console.WriteLine("4. Delete a task"); - System.Console.WriteLine("5. Quit"); + System.Console.WriteLine("1. List ALL tasks"); + System.Console.WriteLine("2. List UNFINISHED tasks"); + System.Console.WriteLine("3. List FINISHED tasks"); + System.Console.WriteLine("4. Add a task"); + System.Console.WriteLine("5. Modify a task"); + System.Console.WriteLine("6. Mark task as finished / unfinished"); + System.Console.WriteLine("7. Delete a task"); + System.Console.WriteLine("8. Quit"); string userInput = Console.ReadLine(); if (userInput == "1") { - TaskLister(); //DONE + Console.Clear(); + TaskLister(); MainMenu(); } else if (userInput == "2") { - TaskCreator(); //DONE + Console.Clear(); + TaskListerUnfinished(); MainMenu(); } else if (userInput == "3") { - TaskModifier(); //DONE + Console.Clear(); + TaskListerFinished(); MainMenu(); } else if (userInput == "4") { - TaskDeleter(); //DONE + Console.Clear(); + TaskCreator(); MainMenu(); } else if (userInput == "5") + { + Console.Clear(); + TaskModifier_db(); + MainMenu(); + } + else if (userInput == "6") + { + Console.Clear(); + TaskStatusUpdater(); + MainMenu(); + } + else if (userInput == "7") + { + Console.Clear(); + TaskDeleter(); + MainMenu(); + } + else if (userInput == "8") { Environment.Exit(0); } @@ -55,9 +82,38 @@ void MainMenu() } void TaskLister() { - foreach (Task t in tasks) + string status = ""; + foreach (Task t in taskContext.tasks_db) { - System.Console.WriteLine("Task " + t.id + ": " + t.description + ". Due on " + t.dueDate.ToString("MM/dd/yyyy") + ". Priority is " + t.priority + "."); + if (t.isComplete) + { + status = "complete"; + } + else + { + status = "incomplete"; + } + System.Console.WriteLine("Task " + t.id + ": " + t.description + " is " + status + ". Due on " + t.dueDate.ToString("MM/dd/yyyy") + ". Priority is " + t.priority + "."); + } + } + void TaskListerUnfinished() + { + foreach (Task t in taskContext.tasks_db) + { + if (!t.isComplete) + { + System.Console.WriteLine("Task " + t.id + ": " + t.description + " is unfinshed. Due on " + t.dueDate.ToString("MM/dd/yyyy") + ". Priority is " + t.priority + "."); + } + } + } + void TaskListerFinished() + { + foreach (Task t in taskContext.tasks_db) + { + if (t.isComplete) + { + System.Console.WriteLine("Task " + t.id + ": " + t.description + " is complete. Due on " + t.dueDate.ToString("MM/dd/yyyy") + ". Priority is " + t.priority + "."); + } } } void TaskCreator() @@ -70,12 +126,11 @@ void TaskCreator() ParseDateTimeInput(); void ParseDateTimeInput() { - System.Console.WriteLine("Please enter a due date. Enter using the format \"Month Day, Year\" (example: January 1, 1979). "); + System.Console.WriteLine("Please enter a due date. Enter using the format \"Month Day, Year\" or \"MM/DD/YYYY\" (example: January 1, 1979). "); string dueDateInput = Console.ReadLine(); try { dueDate = DateTime.Parse(dueDateInput); - Console.WriteLine(dueDate.ToString("MM/dd/yyyy")); AddTaskToList(); } catch (FormatException) @@ -86,10 +141,9 @@ void ParseDateTimeInput() } void AddTaskToList() { - tasksCreated++; - int id = tasksCreated; - System.Console.WriteLine("id for this task is " + id); - tasks.Add(new Task(id, false, description, priority, dueDate)); + int id = taskContext.tasks_db.Max(t => t.id) + 1; + taskContext.tasks_db.Add(new Task(id, false, description, priority, dueDate)); + taskContext.SaveChanges(); } } void TaskDeleter() @@ -106,15 +160,16 @@ void TaskDeleter() { Console.WriteLine("Unable to parse '{0}', please try again", userInput); } - for (int i = 0; i < tasks.Count; i++) + foreach (Task t in taskContext.tasks_db) { - if (userInputInt == tasks[i].id) + if (userInputInt == t.id) { - tasks.Remove(tasks[i]); + taskContext.tasks_db.Remove(t); + taskContext.SaveChanges(); } } } - void TaskModifier() + void TaskModifier_db() { System.Console.WriteLine("Which task do you want to modify? Choose a task number"); TaskLister(); @@ -128,7 +183,7 @@ void TaskModifier() { Console.WriteLine("Unable to parse '{0}', please try again", userInput); } - foreach (Task t in tasks) + foreach (Task t in taskContext.tasks_db) { if (userInputInt == t.id) { @@ -166,8 +221,50 @@ void ParseDateTimeUpdate() ParseDateTimeUpdate(); } } + taskContext.SaveChanges(); } } + void TaskStatusUpdater() + { + System.Console.WriteLine("Which task do you want to update the status on? Choose a task number"); + TaskLister(); + string userInput = Console.ReadLine(); + int userInputInt = 0; + try + { + userInputInt = int.Parse(userInput); + } + catch (FormatException) + { + Console.WriteLine("Unable to parse '{0}', please try again", userInput); + } + foreach (Task t in taskContext.tasks_db) + { + if (userInputInt == t.id) + { + if (t.isComplete) + { + System.Console.WriteLine("Do you want to mark this task as INCOMPLETE? y/n"); + userInput = Console.ReadLine(); + if (userInput.ToLower() == "y") + { + t.isComplete = false; + } + } + else + { + System.Console.WriteLine("Do you want to mark this task as COMPLETE? y/n"); + userInput = Console.ReadLine(); + if (userInput.ToLower() == "y") + { + t.isComplete = true; + } + } + } + } + System.Console.WriteLine("Task updated!"); + taskContext.SaveChanges(); + } } } public class Task @@ -186,5 +283,14 @@ public Task(int id, bool isComplete, string description, string priority, DateTi this.priority = priority; this.dueDate = dueDate; } + public Task() { } + } + public class TaskContext : DbContext + { + public DbSet tasks_db { get; set; } + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder.UseSqlite("Filename=./tasks.db"); + } } } diff --git a/checkpoint3/checkpoint3.csproj b/checkpoint3/checkpoint3.csproj index 23df6047..81ecc728 100644 --- a/checkpoint3/checkpoint3.csproj +++ b/checkpoint3/checkpoint3.csproj @@ -5,4 +5,9 @@ netcoreapp2.1 + + + + + diff --git a/checkpoint3/tasks.db b/checkpoint3/tasks.db new file mode 100644 index 0000000000000000000000000000000000000000..58c220901621ca9efe6d120e5add5c638dcb2ee4 GIT binary patch literal 12288 zcmeI&!EV|x7zc0%8m3l*OzNSUG}Lc7wW3T3VUr4njdjt4N`cW-8kZtN%01BYM zx&qxyZl_dI`hpIpEV`V^JKI6TE@S48?sv0CJ-gx9;51&hY`Ayso=-h?Ad~x_&Xor{ z#iH_ATh1wHbP)~QVY<)!F^ira)?qKd1+sMR>du<@_gh+c~(I&SlXkDp)#lb0zt${k-;#sD tasks = new List(); + int tasksCreated = 0; + Console.WriteLine("Welcome to your task list."); + MainMenu(); + + + void MainMenu() + { + System.Console.WriteLine("Please choose an option: "); + System.Console.WriteLine("1. List tasks"); + System.Console.WriteLine("2. Add a task"); + System.Console.WriteLine("3. Modify a task"); + System.Console.WriteLine("4. Delete a task"); + System.Console.WriteLine("5. Quit"); + string userInput = Console.ReadLine(); + if (userInput == "1") + { + TaskLister(); //DONE + MainMenu(); + } + else if (userInput == "2") + { + TaskCreator(); //DONE + MainMenu(); + } + else if (userInput == "3") + { + TaskModifier(); //DONE + MainMenu(); + } + else if (userInput == "4") + { + TaskDeleter(); //DONE + MainMenu(); + } + else if (userInput == "5") + { + Environment.Exit(0); + } + else + { + System.Console.WriteLine("Sorry bud, invalid input."); + MainMenu(); + } + } + void TaskLister() + { + foreach (Task t in tasks) + { + System.Console.WriteLine("Task " + t.id + ": " + t.description + ". Due on " + t.dueDate.ToString("MM/dd/yyyy") + ". Priority is " + t.priority + "."); + } + } + void TaskCreator() + { + System.Console.WriteLine("Please enter a description of your task"); + string description = Console.ReadLine(); + System.Console.WriteLine("Please enter a priority for \"" + description + "\". You can just write \"High\", \"Medium\", or \"Low\", or really write whatever you want."); + string priority = Console.ReadLine(); + DateTime dueDate = new DateTime(); + ParseDateTimeInput(); + void ParseDateTimeInput() + { + System.Console.WriteLine("Please enter a due date. Enter using the format \"Month Day, Year\" (example: January 1, 1979). "); + string dueDateInput = Console.ReadLine(); + try + { + dueDate = DateTime.Parse(dueDateInput); + Console.WriteLine(dueDate.ToString("MM/dd/yyyy")); + AddTaskToList(); + } + catch (FormatException) + { + Console.WriteLine("Unable to parse '{0}', please try again.", dueDateInput); + ParseDateTimeInput(); + } + } + void AddTaskToList() + { + tasksCreated++; + int id = tasksCreated; + System.Console.WriteLine("id for this task is " + id); + tasks.Add(new Task(id, false, description, priority, dueDate)); + taskContext.tasks_db.Add(new Task(id, false, description, priority, dueDate)); + } + } + void TaskDeleter() + { + System.Console.WriteLine("Which task do you want to delete?"); + TaskLister(); + string userInput = Console.ReadLine(); + int userInputInt = 0; + try + { + userInputInt = int.Parse(userInput); + } + catch (FormatException) + { + Console.WriteLine("Unable to parse '{0}', please try again", userInput); + } + for (int i = 0; i < tasks.Count; i++) + { + if (userInputInt == tasks[i].id) + { + tasks.Remove(tasks[i]); + } + } + } + void TaskModifier() + { + System.Console.WriteLine("Which task do you want to modify? Choose a task number"); + TaskLister(); + string userInput = Console.ReadLine(); + int userInputInt = 0; + try + { + userInputInt = int.Parse(userInput); + } + catch (FormatException) + { + Console.WriteLine("Unable to parse '{0}', please try again", userInput); + } + foreach (Task t in tasks) + { + if (userInputInt == t.id) + { + System.Console.WriteLine("Do you want to modify 1. the description, 2. the priority, or 3. due date?"); + string response = Console.ReadLine(); + if (response == "1") + { + System.Console.WriteLine("Please enter a new description:"); + t.description = Console.ReadLine(); + } + else if (response == "2") + { + System.Console.WriteLine("Please enter a new priority:"); + t.priority = Console.ReadLine(); + } + else if (response == "3") + { + ParseDateTimeUpdate(); + } + t.id = userInputInt; + System.Console.WriteLine("id for this task is " + t.id); + } + void ParseDateTimeUpdate() + { + System.Console.WriteLine("Please enter a new due date. Enter using the format \"Month Day, Year\" (example: January 1, 1979) :"); + string dueDateInput = Console.ReadLine(); + try + { + t.dueDate = DateTime.Parse(dueDateInput); + Console.WriteLine("Due date changed to " + t.dueDate.ToString("MM/dd/yyyy")); + } + catch (FormatException) + { + Console.WriteLine("Unable to parse '{0}', please try again", dueDateInput); + ParseDateTimeUpdate(); + } + } + } + } + // void TaskModifier_db() + // { + // System.Console.WriteLine("Which task do you want to modify? Choose a task number"); + // TaskLister(); + // string userInput = Console.ReadLine(); + // int userInputInt = 0; + // try + // { + // userInputInt = int.Parse(userInput); + // } + // catch (FormatException) + // { + // Console.WriteLine("Unable to parse '{0}', please try again", userInput); + // } + // foreach (Task t in taskContext.tasks_db) + // { + // if (userInputInt == t.id) + // { + // System.Console.WriteLine("Do you want to modify 1. the description, 2. the priority, or 3. due date?"); + // string response = Console.ReadLine(); + // if (response == "1") + // { + // System.Console.WriteLine("Please enter a new description:"); + // t.description = Console.ReadLine(); + // } + // else if (response == "2") + // { + // System.Console.WriteLine("Please enter a new priority:"); + // t.priority = Console.ReadLine(); + // } + // else if (response == "3") + // { + // ParseDateTimeUpdate(); + // } + // t.id = userInputInt; + // System.Console.WriteLine("id for this task is " + t.id); + // } + // void ParseDateTimeUpdate() + // { + // System.Console.WriteLine("Please enter a new due date. Enter using the format \"Month Day, Year\" (example: January 1, 1979) :"); + // string dueDateInput = Console.ReadLine(); + // try + // { + // t.dueDate = DateTime.Parse(dueDateInput); + // Console.WriteLine("Due date changed to " + t.dueDate.ToString("MM/dd/yyyy")); + // } + // catch (FormatException) + // { + // Console.WriteLine("Unable to parse '{0}', please try again", dueDateInput); + // ParseDateTimeUpdate(); + // } + // } + // } + // } + } + } + public class Task + { + public int id { get; set; } + public bool isComplete = false; + public string description { get; set; } + public string priority { get; set; } + public DateTime dueDate { get; set; } + + public Task(int id, bool isComplete, string description, string priority, DateTime dueDate) + { + this.id = id; + this.isComplete = isComplete; + this.description = description; + this.priority = priority; + this.dueDate = dueDate; + } + + public Task(){} + } + + public class TaskContext:DbContext + { + public DbSet tasks_db {get;set;} + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder.UseSqlite("Filename=./tasks.db"); + } + } +} diff --git a/cp3 backup/checkpoint3.csproj b/cp3 backup/checkpoint3.csproj new file mode 100644 index 00000000..81ecc728 --- /dev/null +++ b/cp3 backup/checkpoint3.csproj @@ -0,0 +1,13 @@ + + + + Exe + netcoreapp2.1 + + + + + + + + diff --git a/cp3 backup/tasks.db b/cp3 backup/tasks.db new file mode 100644 index 0000000000000000000000000000000000000000..548a560a495a993fd62c6c62a689e41606e0c3b0 GIT binary patch literal 12288 zcmeI#%}&BV5C`yGFq)7c-ndAd^aO!;@dd27F@#dEEQwrf3SE;%D9|nkj>Z@AMSLf> z+QvvsJa{AjNw%BWk4gLMX~y?Xq!m4_l4YRjik&ge*)&6&RI{>+Lq5>R`4|>1JU%TR&Bs zt%~RSX}RkOTMCl)jU#C9Y%>m)s$*`pULN^Lz0u&Wwa=P5NS{+boE3BFM-{7Bwy0UH zkO?aaE$X>a+zF4|p(JD@0|;a1%SS`|C_n^Y^UtT#7JKLP>}fB*y_009U< r00Izz00bZafddvm|9`+g7oP?J2tWV=5P$##AOHafKmY;|$OS$CHh*M4 literal 0 HcmV?d00001