From d590a26fb9356c861aca4c24e2ef9623c8d47667 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D1=91=D0=BD=D0=B0=20=D0=A4=D1=80=D0=BE=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0?= Date: Mon, 25 Nov 2024 16:23:53 +0400 Subject: [PATCH] =?UTF-8?q?1=20=D0=BB=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectHorseRacing/Entities/BuyHorse.cs | 27 +++ .../Entities/BuyHorseHorse.cs | 24 +++ .../Entities/Enums/HorseCharacters.cs | 23 +++ .../Entities/Enums/HorseGender.cs | 16 ++ .../Entities/Enums/RacePlaceEvent.cs | 21 +++ .../ProjectHorseRacing/Entities/Horse.cs | 34 ++++ .../ProjectHorseRacing/Entities/Jockey.cs | 34 ++++ .../ProjectHorseRacing/Entities/Owners.cs | 29 +++ .../ProjectHorseRacing/Entities/Race.cs | 29 +++ .../ProjectHorseRacing/Entities/Result.cs | 34 ++++ .../ProjectHorseRacing/Form1.Designer.cs | 39 ---- .../ProjectHorseRacing/Form1.cs | 10 - .../FormHorseRacing.Designer.cs | 147 +++++++++++++++ .../ProjectHorseRacing/FormHorseRacing.cs | 102 +++++++++++ .../ProjectHorseRacing/FormHorseRacing.resx | 123 +++++++++++++ .../Forms/FormBuyHorse.Designer.cs | 170 +++++++++++++++++ .../ProjectHorseRacing/Forms/FormBuyHorse.cs | 65 +++++++ .../Forms/FormBuyHorse.resx | 123 +++++++++++++ .../Forms/FormBuyHorses.Designer.cs | 125 +++++++++++++ .../ProjectHorseRacing/Forms/FormBuyHorses.cs | 93 ++++++++++ .../{Form1.resx => Forms/FormBuyHorses.resx} | 50 ++--- .../Forms/FormHorse.Designer.cs | 169 +++++++++++++++++ .../ProjectHorseRacing/Forms/FormHorse.cs | 116 ++++++++++++ .../ProjectHorseRacing/Forms/FormHorse.resx | 120 ++++++++++++ .../Forms/FormHorses.Designer.cs | 126 +++++++++++++ .../ProjectHorseRacing/Forms/FormHorses.cs | 113 ++++++++++++ .../ProjectHorseRacing/Forms/FormHorses.resx | 120 ++++++++++++ .../Forms/FormJockey.Designer.cs | 171 +++++++++++++++++ .../ProjectHorseRacing/Forms/FormJockey.cs | 91 +++++++++ .../ProjectHorseRacing/Forms/FormJockey.resx | 120 ++++++++++++ .../Forms/FormJockeys.Designer.cs | 127 +++++++++++++ .../ProjectHorseRacing/Forms/FormJockeys.cs | 115 ++++++++++++ .../ProjectHorseRacing/Forms/FormJockeys.resx | 120 ++++++++++++ .../Forms/FormOwner.Designer.cs | 161 ++++++++++++++++ .../ProjectHorseRacing/Forms/FormOwner.cs | 88 +++++++++ .../ProjectHorseRacing/Forms/FormOwner.resx | 120 ++++++++++++ .../Forms/FormOwners.Designer.cs | 125 +++++++++++++ .../ProjectHorseRacing/Forms/FormOwners.cs | 114 ++++++++++++ .../ProjectHorseRacing/Forms/FormOwners.resx | 120 ++++++++++++ .../Forms/FormRace.Designer.cs | 128 +++++++++++++ .../ProjectHorseRacing/Forms/FormRace.cs | 87 +++++++++ .../ProjectHorseRacing/Forms/FormRace.resx | 120 ++++++++++++ .../Forms/FormRaces.Designer.cs | 126 +++++++++++++ .../ProjectHorseRacing/Forms/FormRaces.cs | 109 +++++++++++ .../ProjectHorseRacing/Forms/FormRaces.resx | 120 ++++++++++++ .../Forms/FormResult.Designer.cs | 172 ++++++++++++++++++ .../ProjectHorseRacing/Forms/FormResult.cs | 66 +++++++ .../ProjectHorseRacing/Forms/FormResult.resx | 120 ++++++++++++ .../Forms/FormResults.Designer.cs | 92 ++++++++++ .../ProjectHorseRacing/Forms/FormResults.cs | 60 ++++++ .../ProjectHorseRacing/Forms/FormResults.resx | 120 ++++++++++++ .../ProjectHorseRacing/Program.cs | 21 ++- .../ProjectHorseRacing.csproj | 19 ++ .../Properties/Resources.Designer.cs | 103 +++++++++++ .../Properties/Resources.resx | 133 ++++++++++++++ .../Repositories/IBuyHorseRepository.cs | 17 ++ .../Repositories/IHorseRepository.cs | 21 +++ .../Repositories/IJockeyRepository.cs | 21 +++ .../Repositories/IOwnerRepository.cs | 16 ++ .../Repositories/IRaceRepository.cs | 21 +++ .../Repositories/IResultRepository.cs | 16 ++ .../Implementation/BuyHorseRepository.cs | 24 +++ .../Implementation/HorseRepository.cs | 31 ++++ .../Implementation/JockeyRepository.cs | 29 +++ .../Implementation/OwnerRepository.cs | 30 +++ .../Implementation/RaceRepository.cs | 30 +++ .../Implementation/ResultRepository.cs | 22 +++ .../Resources/карандаш.png | Bin 0 -> 27149 bytes .../Resources/минус.png | Bin 0 -> 1791 bytes .../ProjectHorseRacing/Resources/плюс.png | Bin 0 -> 86858 bytes .../Resources/скачки.jpg | Bin 0 -> 76820 bytes 71 files changed, 5353 insertions(+), 75 deletions(-) create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Entities/BuyHorse.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Entities/BuyHorseHorse.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Entities/Enums/HorseCharacters.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Entities/Enums/HorseGender.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Entities/Enums/RacePlaceEvent.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Entities/Horse.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Entities/Jockey.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Entities/Owners.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Entities/Race.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Entities/Result.cs delete mode 100644 ProjectHorseRacing/ProjectHorseRacing/Form1.Designer.cs delete mode 100644 ProjectHorseRacing/ProjectHorseRacing/Form1.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/FormHorseRacing.Designer.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/FormHorseRacing.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/FormHorseRacing.resx create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorse.Designer.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorse.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorse.resx create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorses.Designer.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorses.cs rename ProjectHorseRacing/ProjectHorseRacing/{Form1.resx => Forms/FormBuyHorses.resx} (93%) create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorse.Designer.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorse.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorse.resx create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorses.Designer.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorses.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorses.resx create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockey.Designer.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockey.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockey.resx create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockeys.Designer.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockeys.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockeys.resx create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwner.Designer.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwner.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwner.resx create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwners.Designer.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwners.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwners.resx create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormRace.Designer.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormRace.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormRace.resx create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormRaces.Designer.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormRaces.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormRaces.resx create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormResult.Designer.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormResult.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormResult.resx create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormResults.Designer.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormResults.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Forms/FormResults.resx create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Properties/Resources.Designer.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Properties/Resources.resx create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Repositories/IBuyHorseRepository.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Repositories/IHorseRepository.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Repositories/IJockeyRepository.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Repositories/IOwnerRepository.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Repositories/IRaceRepository.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Repositories/IResultRepository.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/BuyHorseRepository.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/HorseRepository.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/JockeyRepository.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/OwnerRepository.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/RaceRepository.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/ResultRepository.cs create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Resources/карандаш.png create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Resources/минус.png create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Resources/плюс.png create mode 100644 ProjectHorseRacing/ProjectHorseRacing/Resources/скачки.jpg diff --git a/ProjectHorseRacing/ProjectHorseRacing/Entities/BuyHorse.cs b/ProjectHorseRacing/ProjectHorseRacing/Entities/BuyHorse.cs new file mode 100644 index 0000000..5269f89 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Entities/BuyHorse.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHorseRacing.Entities; + +public class BuyHorse +{ + public int Id { get; private set; } + public int OwnersId { get; private set; } + public DateTime DatePurchase { get; private set; } + + public IEnumerable BuyHorseHorses { get; private set; } = []; + + public static BuyHorse CreateEntity(int id, int ownerId,DateTime date, IEnumerable buyHorseHorses) + { + return new BuyHorse + { + Id = id, + OwnersId = ownerId, + DatePurchase = date, + BuyHorseHorses = buyHorseHorses + }; + } +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Entities/BuyHorseHorse.cs b/ProjectHorseRacing/ProjectHorseRacing/Entities/BuyHorseHorse.cs new file mode 100644 index 0000000..f8d653a --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Entities/BuyHorseHorse.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static System.Runtime.InteropServices.JavaScript.JSType; + +namespace ProjectHorseRacing.Entities; + +public class BuyHorseHorse +{ + public int Id { get; private set; } + + public int HorseId { get; private set; } + + public static BuyHorseHorse CreateElement(int id, int horseId) + { + return new BuyHorseHorse + { + Id = id, + HorseId = horseId + }; + } +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Entities/Enums/HorseCharacters.cs b/ProjectHorseRacing/ProjectHorseRacing/Entities/Enums/HorseCharacters.cs new file mode 100644 index 0000000..4371107 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Entities/Enums/HorseCharacters.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHorseRacing.Entities.Enums; + +[Flags] + +public enum HorseCharacters +{ + None = 0, + + Быстрая = 1, + + Выносливая = 2, + + Спокойная = 4, + + Сильная = 8, + +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Entities/Enums/HorseGender.cs b/ProjectHorseRacing/ProjectHorseRacing/Entities/Enums/HorseGender.cs new file mode 100644 index 0000000..20ecb85 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Entities/Enums/HorseGender.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHorseRacing.Entities.Enums; + +public enum HorseGender +{ + None = 0, + + Женский = 1, + + Мужской = 2 +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Entities/Enums/RacePlaceEvent.cs b/ProjectHorseRacing/ProjectHorseRacing/Entities/Enums/RacePlaceEvent.cs new file mode 100644 index 0000000..a69eb77 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Entities/Enums/RacePlaceEvent.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.Tracing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHorseRacing.Entities.Enums; + +public enum RacePlaceEvent +{ + None = 0, + + Ипподром_1 = 1, + + Ипподром_2 = 2, + + Ипподром_3 = 3, + + Ипподром_4 = 4 +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Entities/Horse.cs b/ProjectHorseRacing/ProjectHorseRacing/Entities/Horse.cs new file mode 100644 index 0000000..0829932 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Entities/Horse.cs @@ -0,0 +1,34 @@ +using ProjectHorseRacing.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHorseRacing.Entities; + +public class Horse +{ + public int Id { get; private set; } + + public string Nickname { get; private set; } = string.Empty; + + public HorseGender HorseGender { get; private set; } + + public int AgeHorse { get; private set; } + + public HorseCharacters HorseCharacters { get; private set; } + + + public static Horse CreateHorse(int id, string nickname, HorseGender horseGender, int ageHorse, HorseCharacters horseCharacters) + { + return new Horse + { + Id = id, + Nickname = nickname, + HorseGender = horseGender, + AgeHorse = ageHorse, + HorseCharacters = horseCharacters + }; + } +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Entities/Jockey.cs b/ProjectHorseRacing/ProjectHorseRacing/Entities/Jockey.cs new file mode 100644 index 0000000..afcb351 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Entities/Jockey.cs @@ -0,0 +1,34 @@ +using ProjectHorseRacing.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHorseRacing.Entities; + +public class Jockey +{ + public int Id { get; private set; } + + public string FistName { get; private set; } = string.Empty; + + public string LastName { get; private set; } = string.Empty; + + public int Age { get; private set; } + + public double Rating { get; private set; } + + public static Jockey CreateEntity(int id, string fistName, string lastName, int age, double rating) + { + return new Jockey + { + Id = id, + FistName = fistName, + LastName = lastName, + Age = age, + Rating = rating + + }; + } +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Entities/Owners.cs b/ProjectHorseRacing/ProjectHorseRacing/Entities/Owners.cs new file mode 100644 index 0000000..159d957 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Entities/Owners.cs @@ -0,0 +1,29 @@ +namespace ProjectHorseRacing.Entities; + +public class Owners +{ + public int Id { get;private set; } + public string FistName { get; private set; } = string.Empty; + + public string LastName { get; private set; } = string.Empty; + + public string Address { get; private set; } = string.Empty; + + public string PhoneNumber { get; private set; } = string.Empty; + + + public static Owners CreateEntity(int id, string fistName, string lastName, string address, string phoneNumber) + { + return new Owners + { + Id = id, + FistName = fistName, + LastName = lastName, + Address = address, + PhoneNumber = phoneNumber, + }; + } + +} + + diff --git a/ProjectHorseRacing/ProjectHorseRacing/Entities/Race.cs b/ProjectHorseRacing/ProjectHorseRacing/Entities/Race.cs new file mode 100644 index 0000000..c2c7b03 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Entities/Race.cs @@ -0,0 +1,29 @@ +using ProjectHorseRacing.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHorseRacing.Entities; + +public class Race +{ + public int Id { get; private set; } + + public DateTime DateTime { get; private set; } + + public RacePlaceEvent RacePlaceEvent { get; private set; } + + + public static Race CreateOperation(int id, DateTime dateTime, RacePlaceEvent racePlaceEvent) + { + return new Race + { + Id = id, + DateTime = dateTime, + RacePlaceEvent = racePlaceEvent + }; + } + +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Entities/Result.cs b/ProjectHorseRacing/ProjectHorseRacing/Entities/Result.cs new file mode 100644 index 0000000..42c8959 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Entities/Result.cs @@ -0,0 +1,34 @@ +using ProjectHorseRacing.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHorseRacing.Entities; + +public class Result +{ + public int Id { get; private set; } + + public int Position { get; private set; } + + public int RacesId { get; private set; } + + public int JockeyId { get; private set; } + + public int HorsesId { get; private set; } + + public static Result CreateEntity(int id, int position, int racesId, int jockeyId, int horsesId) + { + return new Result + { + Id = id, + Position = position, + RacesId = racesId, + JockeyId = jockeyId, + HorsesId = horsesId + + }; + } +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Form1.Designer.cs b/ProjectHorseRacing/ProjectHorseRacing/Form1.Designer.cs deleted file mode 100644 index 78b8133..0000000 --- a/ProjectHorseRacing/ProjectHorseRacing/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace ProjectHorseRacing -{ - partial class Form1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "Form1"; - } - - #endregion - } -} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Form1.cs b/ProjectHorseRacing/ProjectHorseRacing/Form1.cs deleted file mode 100644 index 49ca883..0000000 --- a/ProjectHorseRacing/ProjectHorseRacing/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ProjectHorseRacing -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} diff --git a/ProjectHorseRacing/ProjectHorseRacing/FormHorseRacing.Designer.cs b/ProjectHorseRacing/ProjectHorseRacing/FormHorseRacing.Designer.cs new file mode 100644 index 0000000..5321611 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/FormHorseRacing.Designer.cs @@ -0,0 +1,147 @@ +namespace ProjectHorseRacing +{ + partial class FormHorseRacing + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + menuStrip1 = new MenuStrip(); + справочникиToolStripMenuItem = new ToolStripMenuItem(); + JockeyToolStripMenuItem = new ToolStripMenuItem(); + HorseToolStripMenuItem = new ToolStripMenuItem(); + RaceToolStripMenuItem = new ToolStripMenuItem(); + владелецToolStripMenuItem = new ToolStripMenuItem(); + операцииToolStripMenuItem = new ToolStripMenuItem(); + ResultToolStripMenuItem = new ToolStripMenuItem(); + ListHorseToolStripMenuItem = new ToolStripMenuItem(); + отчетыToolStripMenuItem = new ToolStripMenuItem(); + menuStrip1.SuspendLayout(); + SuspendLayout(); + // + // menuStrip1 + // + menuStrip1.ImageScalingSize = new Size(20, 20); + menuStrip1.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, операцииToolStripMenuItem, отчетыToolStripMenuItem }); + menuStrip1.Location = new Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Size = new Size(782, 28); + menuStrip1.TabIndex = 0; + menuStrip1.Text = "menuStrip1"; + // + // справочникиToolStripMenuItem + // + справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { JockeyToolStripMenuItem, HorseToolStripMenuItem, RaceToolStripMenuItem, владелецToolStripMenuItem }); + справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem"; + справочникиToolStripMenuItem.Size = new Size(117, 24); + справочникиToolStripMenuItem.Text = "Справочники"; + // + // JockeyToolStripMenuItem + // + JockeyToolStripMenuItem.Name = "JockeyToolStripMenuItem"; + JockeyToolStripMenuItem.Size = new Size(224, 26); + JockeyToolStripMenuItem.Text = "Жокей"; + JockeyToolStripMenuItem.Click += JockeyToolStripMenuItem_Click; + // + // HorseToolStripMenuItem + // + HorseToolStripMenuItem.Name = "HorseToolStripMenuItem"; + HorseToolStripMenuItem.Size = new Size(224, 26); + HorseToolStripMenuItem.Text = "Лошадь"; + HorseToolStripMenuItem.Click += HorseToolStripMenuItem_Click; + // + // RaceToolStripMenuItem + // + RaceToolStripMenuItem.Name = "RaceToolStripMenuItem"; + RaceToolStripMenuItem.Size = new Size(224, 26); + RaceToolStripMenuItem.Text = "Скачки"; + RaceToolStripMenuItem.Click += RaceToolStripMenuItem_Click; + // + // владелецToolStripMenuItem + // + владелецToolStripMenuItem.Name = "владелецToolStripMenuItem"; + владелецToolStripMenuItem.Size = new Size(224, 26); + владелецToolStripMenuItem.Text = "Владелец"; + владелецToolStripMenuItem.Click += владелецToolStripMenuItem_Click; + // + // операцииToolStripMenuItem + // + операцииToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { ResultToolStripMenuItem, ListHorseToolStripMenuItem }); + операцииToolStripMenuItem.Name = "операцииToolStripMenuItem"; + операцииToolStripMenuItem.Size = new Size(95, 24); + операцииToolStripMenuItem.Text = "Операции"; + // + // ResultToolStripMenuItem + // + ResultToolStripMenuItem.Name = "ResultToolStripMenuItem"; + ResultToolStripMenuItem.Size = new Size(216, 26); + ResultToolStripMenuItem.Text = "Результат"; + ResultToolStripMenuItem.Click += ResultToolStripMenuItem_Click; + // + // ListHorseToolStripMenuItem + // + ListHorseToolStripMenuItem.Name = "ListHorseToolStripMenuItem"; + ListHorseToolStripMenuItem.Size = new Size(216, 26); + ListHorseToolStripMenuItem.Text = "Покупка лошадей"; + ListHorseToolStripMenuItem.Click += ListHorseToolStripMenuItem_Click; + // + // отчетыToolStripMenuItem + // + отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem"; + отчетыToolStripMenuItem.Size = new Size(73, 24); + отчетыToolStripMenuItem.Text = "Отчеты"; + // + // FormHorseRacing + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + BackgroundImage = Properties.Resources.скачки; + BackgroundImageLayout = ImageLayout.Stretch; + ClientSize = new Size(782, 403); + Controls.Add(menuStrip1); + MainMenuStrip = menuStrip1; + Name = "FormHorseRacing"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Скачки"; + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private MenuStrip menuStrip1; + private ToolStripMenuItem справочникиToolStripMenuItem; + private ToolStripMenuItem операцииToolStripMenuItem; + private ToolStripMenuItem отчетыToolStripMenuItem; + private ToolStripMenuItem JockeyToolStripMenuItem; + private ToolStripMenuItem HorseToolStripMenuItem; + private ToolStripMenuItem RaceToolStripMenuItem; + private ToolStripMenuItem ResultToolStripMenuItem; + private ToolStripMenuItem ListHorseToolStripMenuItem; + private ToolStripMenuItem владелецToolStripMenuItem; + } +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/FormHorseRacing.cs b/ProjectHorseRacing/ProjectHorseRacing/FormHorseRacing.cs new file mode 100644 index 0000000..0742ebb --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/FormHorseRacing.cs @@ -0,0 +1,102 @@ +using ProjectHorseRacing.Forms; +using System.ComponentModel; +using Unity; + +namespace ProjectHorseRacing +{ + public partial class FormHorseRacing : Form + { + + private readonly IUnityContainer _container; + public FormHorseRacing(IUnityContainer container) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + + } + + + private void JockeyToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void HorseToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void RaceToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ResultToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ListHorseToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/FormHorseRacing.resx b/ProjectHorseRacing/ProjectHorseRacing/FormHorseRacing.resx new file mode 100644 index 0000000..a0623c8 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/FormHorseRacing.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorse.Designer.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorse.Designer.cs new file mode 100644 index 0000000..d3db3d1 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorse.Designer.cs @@ -0,0 +1,170 @@ +namespace ProjectHorseRacing.Forms +{ + partial class FormBuyHorse + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + SaveButtonOwner = new Button(); + CancelButtonOwner = new Button(); + groupBox = new GroupBox(); + dataGridView = new DataGridView(); + label2 = new Label(); + comboBoxOwner = new ComboBox(); + dateTimePicker = new DateTimePicker(); + label3 = new Label(); + ColumnHorse = new DataGridViewComboBoxColumn(); + groupBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // SaveButtonOwner + // + SaveButtonOwner.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + SaveButtonOwner.Location = new Point(109, 512); + SaveButtonOwner.Name = "SaveButtonOwner"; + SaveButtonOwner.Size = new Size(94, 29); + SaveButtonOwner.TabIndex = 26; + SaveButtonOwner.Text = "Сохранить"; + SaveButtonOwner.UseVisualStyleBackColor = true; + SaveButtonOwner.Click += SaveButtonOwner_Click; + // + // CancelButtonOwner + // + CancelButtonOwner.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + CancelButtonOwner.Location = new Point(287, 512); + CancelButtonOwner.Name = "CancelButtonOwner"; + CancelButtonOwner.Size = new Size(94, 29); + CancelButtonOwner.TabIndex = 38; + CancelButtonOwner.Text = "Отмена"; + CancelButtonOwner.UseVisualStyleBackColor = true; + CancelButtonOwner.Click += CancelButtonOwner_Click; + // + // groupBox + // + groupBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + groupBox.Controls.Add(dataGridView); + groupBox.Location = new Point(25, 165); + groupBox.Name = "groupBox"; + groupBox.Size = new Size(438, 329); + groupBox.TabIndex = 40; + groupBox.TabStop = false; + groupBox.Text = "Лошади"; + // + // dataGridView + // + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnHorse }); + dataGridView.Location = new Point(0, 32); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(432, 291); + dataGridView.TabIndex = 0; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(88, 43); + label2.Name = "label2"; + label2.Size = new Size(78, 20); + label2.TabIndex = 42; + label2.Text = "Владелец:"; + // + // comboBoxOwner + // + comboBoxOwner.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxOwner.FormattingEnabled = true; + comboBoxOwner.Location = new Point(190, 35); + comboBoxOwner.Name = "comboBoxOwner"; + comboBoxOwner.Size = new Size(223, 28); + comboBoxOwner.TabIndex = 41; + // + // dateTimePicker + // + dateTimePicker.Location = new Point(190, 103); + dateTimePicker.Name = "dateTimePicker"; + dateTimePicker.Size = new Size(223, 27); + dateTimePicker.TabIndex = 43; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(61, 110); + label3.Name = "label3"; + label3.Size = new Size(105, 20); + label3.TabIndex = 44; + label3.Text = "Дата покупки:"; + // + // ColumnHorse + // + ColumnHorse.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + ColumnHorse.HeaderText = "Лошадь"; + ColumnHorse.MinimumWidth = 6; + ColumnHorse.Name = "ColumnHorse"; + // + // FormBuyHorse + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(490, 562); + Controls.Add(label3); + Controls.Add(dateTimePicker); + Controls.Add(label2); + Controls.Add(comboBoxOwner); + Controls.Add(groupBox); + Controls.Add(CancelButtonOwner); + Controls.Add(SaveButtonOwner); + Name = "FormBuyHorse"; + StartPosition = FormStartPosition.CenterParent; + Text = "Покупка лошадей"; + groupBox.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label label1; + private Button CancelButtonOwner; + private Button SaveButtonOwner; + private ComboBox comboBoxCharacters; + private GroupBox groupBox1; + private GroupBox groupBox; + private DataGridView dataGridView; + private Label label2; + private ComboBox comboBoxOwner; + private DataGridViewComboBoxColumn ColumnHorse; + private DateTimePicker dateTimePicker; + private Label label3; + } +} \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorse.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorse.cs new file mode 100644 index 0000000..68f7c75 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorse.cs @@ -0,0 +1,65 @@ +using ProjectHorseRacing.Entities; +using ProjectHorseRacing.Repositories; + +namespace ProjectHorseRacing.Forms; + +public partial class FormBuyHorse : Form +{ + private readonly IBuyHorseRepository _buyHorseRepository; + + public FormBuyHorse( + IBuyHorseRepository buyHorseRepository, + IOwnerRepository ownerRepository, + IHorseRepository horseRepository) + { + InitializeComponent(); + _buyHorseRepository = buyHorseRepository ?? + throw new ArgumentNullException(nameof(buyHorseRepository)); + comboBoxOwner.DataSource = ownerRepository.ReadOwners(); + comboBoxOwner.DisplayMember = "LastName"; + comboBoxOwner.ValueMember = "Id"; + + ColumnHorse.DataSource = horseRepository.ReadHorses(); + ColumnHorse.DisplayMember = "Nickname"; + ColumnHorse.ValueMember = "Id"; + + + } + private void SaveButtonOwner_Click(object sender, EventArgs e) + { + try + { + if (comboBoxOwner.SelectedIndex < 0 || + dataGridView.RowCount < 1) + { + throw new Exception("Имеются незаполненные поля"); + } + _buyHorseRepository.CreateBuyHorse(BuyHorse.CreateEntity(0, + (int)comboBoxOwner.SelectedValue!, + dateTimePicker.Value, + CreateListBuyHorsesListFromDataGrid())); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void CancelButtonOwner_Click(object sender, EventArgs e) => Close(); + private List CreateListBuyHorsesListFromDataGrid() + { + var list = new List(); + foreach (DataGridViewRow row in dataGridView.Rows) + { + if (row.Cells["ColumnHorse"].Value == null) + { + continue; + } + list.Add(BuyHorseHorse.CreateElement( + 0, + Convert.ToInt32(row.Cells["ColumnHorse"].Value))); + } + return list; + } +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorse.resx b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorse.resx new file mode 100644 index 0000000..4973883 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorse.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorses.Designer.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorses.Designer.cs new file mode 100644 index 0000000..74e44df --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorses.Designer.cs @@ -0,0 +1,125 @@ +namespace ProjectHorseRacing.Forms +{ + partial class FormBuyHorses + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + dataGridView = new DataGridView(); + buttonUpd = new Button(); + buttonDel = new Button(); + buttonAdd = new Button(); + panelJockey = new Panel(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + panelJockey.SuspendLayout(); + SuspendLayout(); + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(637, 450); + dataGridView.TabIndex = 3; + // + // buttonUpd + // + buttonUpd.BackgroundImage = Properties.Resources.карандаш; + buttonUpd.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpd.Location = new Point(34, 161); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(94, 94); + buttonUpd.TabIndex = 2; + buttonUpd.UseVisualStyleBackColor = true; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.минус; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(34, 287); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(94, 94); + buttonDel.TabIndex = 1; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += buttonDel_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.плюс; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(34, 38); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(94, 94); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += buttonAdd_Click; + // + // panelJockey + // + panelJockey.Controls.Add(buttonUpd); + panelJockey.Controls.Add(buttonDel); + panelJockey.Controls.Add(buttonAdd); + panelJockey.Dock = DockStyle.Right; + panelJockey.Location = new Point(637, 0); + panelJockey.Name = "panelJockey"; + panelJockey.Size = new Size(163, 450); + panelJockey.TabIndex = 2; + // + // FormBuyHorses + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(dataGridView); + Controls.Add(panelJockey); + Name = "FormBuyHorses"; + Text = "Покупка лошадей"; + Load += FormBuyHorses_Load; + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + panelJockey.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridView; + private Button buttonUpd; + private Button buttonDel; + private Button buttonAdd; + private Panel panelJockey; + } +} \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorses.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorses.cs new file mode 100644 index 0000000..74f96b7 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorses.cs @@ -0,0 +1,93 @@ +using ProjectHorseRacing.Repositories; +using ProjectHorseRacing.Repositories.Implementation; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace ProjectHorseRacing.Forms; + +public partial class FormBuyHorses : Form +{ + private readonly IUnityContainer _container; + + private readonly IBuyHorseRepository _buyHorseRepository; + + public FormBuyHorses(IUnityContainer container, IBuyHorseRepository buyHorseRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _buyHorseRepository = buyHorseRepository ?? + throw new ArgumentNullException(nameof(buyHorseRepository)); + } + + private void FormBuyHorses_Load(object sender, EventArgs e) + { + + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + + private void buttonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _buyHorseRepository.DeleteBuyHorse(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _buyHorseRepository.ReadBuyHorse(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + return true; + } +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Form1.resx b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorses.resx similarity index 93% rename from ProjectHorseRacing/ProjectHorseRacing/Form1.resx rename to ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorses.resx index 1af7de1..af32865 100644 --- a/ProjectHorseRacing/ProjectHorseRacing/Form1.resx +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormBuyHorses.resx @@ -1,17 +1,17 @@  - diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorse.Designer.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorse.Designer.cs new file mode 100644 index 0000000..29284aa --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorse.Designer.cs @@ -0,0 +1,169 @@ +namespace ProjectHorseRacing.Forms +{ + partial class FormHorse + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + comboBoxHorseGender = new ComboBox(); + CancelButtonHorse = new Button(); + SaveButtonHorse = new Button(); + textBoxNicknameHorse = new TextBox(); + NickNameHorse = new Label(); + AgeHorse = new Label(); + numericUpAgeHorse = new NumericUpDown(); + GenderHorse = new Label(); + Characters = new Label(); + checkedListBoxHorseCharacters = new CheckedListBox(); + ((System.ComponentModel.ISupportInitialize)numericUpAgeHorse).BeginInit(); + SuspendLayout(); + // + // comboBoxHorseGender + // + comboBoxHorseGender.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxHorseGender.FormattingEnabled = true; + comboBoxHorseGender.Location = new Point(237, 87); + comboBoxHorseGender.Name = "comboBoxHorseGender"; + comboBoxHorseGender.Size = new Size(151, 28); + comboBoxHorseGender.TabIndex = 0; + // + // CancelButtonHorse + // + CancelButtonHorse.Location = new Point(273, 376); + CancelButtonHorse.Name = "CancelButtonHorse"; + CancelButtonHorse.Size = new Size(94, 29); + CancelButtonHorse.TabIndex = 17; + CancelButtonHorse.Text = "Отмена"; + CancelButtonHorse.UseVisualStyleBackColor = true; + CancelButtonHorse.Click += CancelButtonHorse_Click_1; + // + // SaveButtonHorse + // + SaveButtonHorse.Location = new Point(138, 376); + SaveButtonHorse.Name = "SaveButtonHorse"; + SaveButtonHorse.Size = new Size(94, 29); + SaveButtonHorse.TabIndex = 16; + SaveButtonHorse.Text = "Сохранить"; + SaveButtonHorse.UseVisualStyleBackColor = true; + SaveButtonHorse.Click += SaveButtonHorse_Click; + // + // textBoxNicknameHorse + // + textBoxNicknameHorse.Location = new Point(237, 39); + textBoxNicknameHorse.Name = "textBoxNicknameHorse"; + textBoxNicknameHorse.Size = new Size(241, 27); + textBoxNicknameHorse.TabIndex = 13; + // + // NickNameHorse + // + NickNameHorse.AutoSize = true; + NickNameHorse.Location = new Point(31, 46); + NickNameHorse.Name = "NickNameHorse"; + NickNameHorse.Size = new Size(119, 20); + NickNameHorse.TabIndex = 10; + NickNameHorse.Text = "Кличка лошади:"; + // + // AgeHorse + // + AgeHorse.AutoSize = true; + AgeHorse.Location = new Point(31, 141); + AgeHorse.Name = "AgeHorse"; + AgeHorse.Size = new Size(125, 20); + AgeHorse.TabIndex = 18; + AgeHorse.Text = "Возраст лошади:"; + // + // numericUpAgeHorse + // + numericUpAgeHorse.Location = new Point(238, 141); + numericUpAgeHorse.Minimum = new decimal(new int[] { 1, 0, 0, 0 }); + numericUpAgeHorse.Name = "numericUpAgeHorse"; + numericUpAgeHorse.Size = new Size(150, 27); + numericUpAgeHorse.TabIndex = 19; + numericUpAgeHorse.Value = new decimal(new int[] { 1, 0, 0, 0 }); + // + // GenderHorse + // + GenderHorse.AutoSize = true; + GenderHorse.Location = new Point(31, 95); + GenderHorse.Name = "GenderHorse"; + GenderHorse.Size = new Size(98, 20); + GenderHorse.TabIndex = 20; + GenderHorse.Text = "Пол лошади:"; + // + // Characters + // + Characters.AutoSize = true; + Characters.Location = new Point(31, 194); + Characters.Name = "Characters"; + Characters.Size = new Size(180, 20); + Characters.TabIndex = 21; + Characters.Text = "Характеристика лошади:"; + // + // checkedListBoxHorseCharacters + // + checkedListBoxHorseCharacters.FormattingEnabled = true; + checkedListBoxHorseCharacters.Location = new Point(237, 194); + checkedListBoxHorseCharacters.Name = "checkedListBoxHorseCharacters"; + checkedListBoxHorseCharacters.Size = new Size(211, 136); + checkedListBoxHorseCharacters.TabIndex = 22; + // + // FormHorse + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(515, 450); + Controls.Add(checkedListBoxHorseCharacters); + Controls.Add(Characters); + Controls.Add(GenderHorse); + Controls.Add(numericUpAgeHorse); + Controls.Add(AgeHorse); + Controls.Add(CancelButtonHorse); + Controls.Add(SaveButtonHorse); + Controls.Add(textBoxNicknameHorse); + Controls.Add(NickNameHorse); + Controls.Add(comboBoxHorseGender); + Name = "FormHorse"; + Text = "Лошадь"; + ((System.ComponentModel.ISupportInitialize)numericUpAgeHorse).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private ComboBox comboBoxHorseGender; + private ComboBox comboBoxCharactersHorse; + private Button CancelButtonHorse; + private Button SaveButtonHorse; + private TextBox textBoxNicknameHorse; + private Label NickNameHorse; + private Label AgeHorse; + private NumericUpDown numericUpAgeHorse; + private Label GenderHorse; + private Label Characters; + private CheckedListBox checkedListBoxHorseCharacters; + } +} \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorse.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorse.cs new file mode 100644 index 0000000..c0f1f68 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorse.cs @@ -0,0 +1,116 @@ +using ProjectHorseRacing.Entities; +using ProjectHorseRacing.Entities.Enums; +using ProjectHorseRacing.Repositories; +using ProjectHorseRacing.Repositories.Implementation; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ProjectHorseRacing.Forms; + +public partial class FormHorse : Form +{ + + private readonly IHorseRepository _horseRepository; + + private int? _horseId; + + public int Id + { + set + { + try + { + var horse = _horseRepository.ReadHorseById(value); + if (horse == null) + { + throw new InvalidDataException(nameof(horse)); + } + + foreach (HorseCharacters elem in Enum.GetValues(typeof(HorseCharacters))) + { + if ((elem & horse.HorseCharacters) != 0) + { + checkedListBoxHorseCharacters.SetItemChecked(checkedListBoxHorseCharacters.Items.IndexOf(elem), true); + } + + } + + textBoxNicknameHorse.Text = horse.Nickname; + comboBoxHorseGender.SelectedItem = horse.HorseGender; + numericUpAgeHorse.Value = horse.AgeHorse; + + _horseId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + + public FormHorse(IHorseRepository horseRepository) + { + InitializeComponent(); + _horseRepository = horseRepository ?? + throw new ArgumentNullException(nameof(horseRepository)); + + comboBoxHorseGender.DataSource = Enum.GetValues(typeof(HorseGender)); + + foreach (var elem in Enum.GetValues(typeof(HorseCharacters))) + { + checkedListBoxHorseCharacters.Items.Add(elem); + } + } + + private void SaveButtonHorse_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxNicknameHorse.Text) || + comboBoxHorseGender.SelectedIndex < 1 || + checkedListBoxHorseCharacters.CheckedItems.Count == 0) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_horseId.HasValue) + { + _horseRepository.UpdateHorse(CreateHorse(_horseId.Value)); + } + else + { + _horseRepository.CreateHorse(CreateHorse(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void CancelButtonHorse_Click_1(object sender, EventArgs e) => Close(); + + + private Horse CreateHorse(int id) + { + HorseCharacters horseCharacters = HorseCharacters.None; + foreach (var elem in checkedListBoxHorseCharacters.CheckedItems) + { + horseCharacters |= (HorseCharacters)elem; + } + + return Horse.CreateHorse(id, textBoxNicknameHorse.Text, (HorseGender)comboBoxHorseGender.SelectedIndex, + Convert.ToInt32(numericUpAgeHorse.Value), horseCharacters); + + } + +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorse.resx b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorse.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorse.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorses.Designer.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorses.Designer.cs new file mode 100644 index 0000000..73cd77b --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorses.Designer.cs @@ -0,0 +1,126 @@ +namespace ProjectHorseRacing.Forms +{ + partial class FormHorses + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panelHorses = new Panel(); + ButtonUpd = new Button(); + ButtonDel = new Button(); + ButtonAdd = new Button(); + dataGridView = new DataGridView(); + panelHorses.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panelHorses + // + panelHorses.Controls.Add(ButtonUpd); + panelHorses.Controls.Add(ButtonDel); + panelHorses.Controls.Add(ButtonAdd); + panelHorses.Dock = DockStyle.Right; + panelHorses.Location = new Point(685, 0); + panelHorses.Name = "panelHorses"; + panelHorses.Size = new Size(153, 427); + panelHorses.TabIndex = 0; + // + // ButtonUpd + // + ButtonUpd.BackgroundImage = Properties.Resources.карандаш; + ButtonUpd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonUpd.Location = new Point(29, 165); + ButtonUpd.Name = "ButtonUpd"; + ButtonUpd.Size = new Size(94, 94); + ButtonUpd.TabIndex = 5; + ButtonUpd.UseVisualStyleBackColor = true; + ButtonUpd.Click += ButtonUpd_Click; + // + // ButtonDel + // + ButtonDel.BackgroundImage = Properties.Resources.минус; + ButtonDel.BackgroundImageLayout = ImageLayout.Stretch; + ButtonDel.Location = new Point(29, 291); + ButtonDel.Name = "ButtonDel"; + ButtonDel.Size = new Size(94, 94); + ButtonDel.TabIndex = 4; + ButtonDel.UseVisualStyleBackColor = true; + ButtonDel.Click += ButtonDel_Click; + // + // ButtonAdd + // + ButtonAdd.BackgroundImage = Properties.Resources.плюс; + ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonAdd.Location = new Point(29, 42); + ButtonAdd.Name = "ButtonAdd"; + ButtonAdd.Size = new Size(94, 94); + ButtonAdd.TabIndex = 3; + ButtonAdd.UseVisualStyleBackColor = true; + ButtonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(685, 427); + dataGridView.TabIndex = 1; + // + // FormHorses + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(838, 427); + Controls.Add(dataGridView); + Controls.Add(panelHorses); + Name = "FormHorses"; + Text = "Лошади"; + Load += FormHorses_Load; + Click += FormHorses_Load; + panelHorses.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panelHorses; + private DataGridView dataGridView; + private Button ButtonUpd; + private Button ButtonDel; + private Button ButtonAdd; + } +} \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorses.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorses.cs new file mode 100644 index 0000000..e543a2e --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorses.cs @@ -0,0 +1,113 @@ +using ProjectHorseRacing.Repositories; +using ProjectHorseRacing.Repositories.Implementation; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace ProjectHorseRacing.Forms; + +public partial class FormHorses : Form +{ + + private readonly IUnityContainer _container; + + private readonly IHorseRepository _horseRepository; + + public FormHorses(IUnityContainer container, IHorseRepository horseRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _horseRepository = horseRepository ?? + throw new ArgumentNullException(nameof(horseRepository)); + } + + private void FormHorses_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _horseRepository.DeleteHorse(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _horseRepository.ReadHorses(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = + Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + return true; + } + +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorses.resx b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorses.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormHorses.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockey.Designer.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockey.Designer.cs new file mode 100644 index 0000000..0717a7b --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockey.Designer.cs @@ -0,0 +1,171 @@ +namespace ProjectHorseRacing.Forms +{ + partial class FormJockey + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + FirstNameJokey = new Label(); + AgeJockey = new Label(); + RatingJockey = new Label(); + textBoxFirstNameJokey = new TextBox(); + numericUpDownAgeJockey = new NumericUpDown(); + numericUpDownRatingJockey = new NumericUpDown(); + SaveButtonJockey = new Button(); + CancelButtonJockey = new Button(); + textBoxLastNameJokey = new TextBox(); + LastNameJokey = new Label(); + ((System.ComponentModel.ISupportInitialize)numericUpDownAgeJockey).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownRatingJockey).BeginInit(); + SuspendLayout(); + // + // FirstNameJokey + // + FirstNameJokey.AutoSize = true; + FirstNameJokey.Location = new Point(21, 38); + FirstNameJokey.Name = "FirstNameJokey"; + FirstNameJokey.Size = new Size(89, 20); + FirstNameJokey.TabIndex = 0; + FirstNameJokey.Text = "Имя жокея:"; + // + // AgeJockey + // + AgeJockey.AutoSize = true; + AgeJockey.Location = new Point(22, 131); + AgeJockey.Name = "AgeJockey"; + AgeJockey.Size = new Size(114, 20); + AgeJockey.TabIndex = 1; + AgeJockey.Text = "Возраст жокея:"; + // + // RatingJockey + // + RatingJockey.AutoSize = true; + RatingJockey.Location = new Point(22, 182); + RatingJockey.Name = "RatingJockey"; + RatingJockey.Size = new Size(114, 20); + RatingJockey.TabIndex = 2; + RatingJockey.Text = "Рейтинг жокея:"; + // + // textBoxFirstNameJokey + // + textBoxFirstNameJokey.Location = new Point(153, 31); + textBoxFirstNameJokey.Name = "textBoxFirstNameJokey"; + textBoxFirstNameJokey.Size = new Size(234, 27); + textBoxFirstNameJokey.TabIndex = 3; + // + // numericUpDownAgeJockey + // + numericUpDownAgeJockey.Location = new Point(154, 124); + numericUpDownAgeJockey.Minimum = new decimal(new int[] { 1, 0, 0, 0 }); + numericUpDownAgeJockey.Name = "numericUpDownAgeJockey"; + numericUpDownAgeJockey.Size = new Size(125, 27); + numericUpDownAgeJockey.TabIndex = 6; + numericUpDownAgeJockey.Value = new decimal(new int[] { 1, 0, 0, 0 }); + // + // numericUpDownRatingJockey + // + numericUpDownRatingJockey.DecimalPlaces = 2; + numericUpDownRatingJockey.Location = new Point(154, 175); + numericUpDownRatingJockey.Minimum = new decimal(new int[] { 1, 0, 0, 131072 }); + numericUpDownRatingJockey.Name = "numericUpDownRatingJockey"; + numericUpDownRatingJockey.Size = new Size(125, 27); + numericUpDownRatingJockey.TabIndex = 7; + numericUpDownRatingJockey.Value = new decimal(new int[] { 1, 0, 0, 131072 }); + // + // SaveButtonJockey + // + SaveButtonJockey.Location = new Point(96, 253); + SaveButtonJockey.Name = "SaveButtonJockey"; + SaveButtonJockey.Size = new Size(94, 29); + SaveButtonJockey.TabIndex = 8; + SaveButtonJockey.Text = "Сохранить"; + SaveButtonJockey.UseVisualStyleBackColor = true; + SaveButtonJockey.Click += SaveButtonJockey_Click; + // + // CancelButtonJockey + // + CancelButtonJockey.Location = new Point(231, 253); + CancelButtonJockey.Name = "CancelButtonJockey"; + CancelButtonJockey.Size = new Size(94, 29); + CancelButtonJockey.TabIndex = 9; + CancelButtonJockey.Text = "Отмена"; + CancelButtonJockey.UseVisualStyleBackColor = true; + CancelButtonJockey.Click += CancelButtonJockey_Click; + // + // textBoxLastNameJokey + // + textBoxLastNameJokey.Location = new Point(153, 77); + textBoxLastNameJokey.Name = "textBoxLastNameJokey"; + textBoxLastNameJokey.Size = new Size(234, 27); + textBoxLastNameJokey.TabIndex = 11; + // + // LastNameJokey + // + LastNameJokey.AutoSize = true; + LastNameJokey.Location = new Point(21, 84); + LastNameJokey.Name = "LastNameJokey"; + LastNameJokey.Size = new Size(123, 20); + LastNameJokey.TabIndex = 10; + LastNameJokey.Text = "Фамилия жокея:"; + // + // FormJockey + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(425, 320); + Controls.Add(textBoxLastNameJokey); + Controls.Add(LastNameJokey); + Controls.Add(CancelButtonJockey); + Controls.Add(SaveButtonJockey); + Controls.Add(numericUpDownRatingJockey); + Controls.Add(numericUpDownAgeJockey); + Controls.Add(textBoxFirstNameJokey); + Controls.Add(RatingJockey); + Controls.Add(AgeJockey); + Controls.Add(FirstNameJokey); + Name = "FormJockey"; + StartPosition = FormStartPosition.CenterParent; + Text = "Жокей"; + ((System.ComponentModel.ISupportInitialize)numericUpDownAgeJockey).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownRatingJockey).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label FirstNameJokey; + private Label AgeJockey; + private Label RatingJockey; + private TextBox textBoxFirstNameJokey; + private NumericUpDown numericUpDownAgeJockey; + private NumericUpDown numericUpDownRatingJockey; + private Button SaveButtonJockey; + private Button CancelButtonJockey; + private TextBox textBoxLastNameJokey; + private Label LastNameJokey; + } +} \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockey.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockey.cs new file mode 100644 index 0000000..4e61356 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockey.cs @@ -0,0 +1,91 @@ +using ProjectHorseRacing.Entities; +using ProjectHorseRacing.Repositories; +using ProjectHorseRacing.Repositories.Implementation; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ProjectHorseRacing.Forms; + +public partial class FormJockey : Form +{ + private readonly IJockeyRepository _jockeyRepository; + + private int? _jockeyId; + + public int Id + { + set + { + try + { + var jockey = _jockeyRepository.ReadJockeyById(value); + if (jockey == null) + { + throw new InvalidDataException(nameof(jockey)); + } + + textBoxFirstNameJokey.Text = jockey.FistName; + textBoxLastNameJokey.Text = jockey.LastName; + numericUpDownAgeJockey.Value = jockey.Age; + numericUpDownRatingJockey.Value = (decimal)jockey.Rating; + _jockeyId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + + public FormJockey(IJockeyRepository jockeyRepository) + { + InitializeComponent(); + _jockeyRepository = jockeyRepository ?? + throw new ArgumentNullException(nameof(jockeyRepository)); + } + + + private void SaveButtonJockey_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxFirstNameJokey.Text) || + string.IsNullOrWhiteSpace(textBoxLastNameJokey.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_jockeyId.HasValue) + { + _jockeyRepository.UpdateJockey(CreateJockey(_jockeyId.Value)); + } + else + { + _jockeyRepository.CreateJockey(CreateJockey(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void CancelButtonJockey_Click(object sender, EventArgs e) => Close(); + + + private Jockey CreateJockey(int id) => Jockey.CreateEntity(id, + textBoxFirstNameJokey.Text, textBoxLastNameJokey.Text, + Convert.ToInt32(numericUpDownAgeJockey.Value), + Convert.ToDouble(numericUpDownRatingJockey.Value)); + +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockey.resx b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockey.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockey.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockeys.Designer.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockeys.Designer.cs new file mode 100644 index 0000000..95488c4 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockeys.Designer.cs @@ -0,0 +1,127 @@ +namespace ProjectHorseRacing.Forms +{ + partial class FormJockeys + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panelJockey = new Panel(); + buttonUpd = new Button(); + buttonDel = new Button(); + buttonAdd = new Button(); + dataGridView = new DataGridView(); + panelJockey.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panelJockey + // + panelJockey.Controls.Add(buttonUpd); + panelJockey.Controls.Add(buttonDel); + panelJockey.Controls.Add(buttonAdd); + panelJockey.Dock = DockStyle.Right; + panelJockey.Location = new Point(683, 0); + panelJockey.Name = "panelJockey"; + panelJockey.Size = new Size(163, 425); + panelJockey.TabIndex = 0; + // + // buttonUpd + // + buttonUpd.BackgroundImage = Properties.Resources.карандаш; + buttonUpd.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpd.Location = new Point(34, 161); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(94, 94); + buttonUpd.TabIndex = 2; + buttonUpd.UseVisualStyleBackColor = true; + buttonUpd.Click += ButtonUpd_Click; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.минус; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(34, 287); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(94, 94); + buttonDel.TabIndex = 1; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.плюс; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(34, 38); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(94, 94); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(683, 425); + dataGridView.TabIndex = 1; + // + // FormJockeys + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(846, 425); + Controls.Add(dataGridView); + Controls.Add(panelJockey); + Name = "FormJockeys"; + StartPosition = FormStartPosition.CenterParent; + Text = "Жокеи"; + Load += FormJockeys_Load; + panelJockey.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panelJockey; + private Button buttonUpd; + private Button buttonDel; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockeys.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockeys.cs new file mode 100644 index 0000000..abbdfa4 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockeys.cs @@ -0,0 +1,115 @@ +using ProjectHorseRacing.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace ProjectHorseRacing.Forms; + +public partial class FormJockeys : Form +{ + private readonly IUnityContainer _container; + + private readonly IJockeyRepository _jockeyRepository; + + + public FormJockeys(IUnityContainer container, IJockeyRepository jockeyRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _jockeyRepository = jockeyRepository ?? + throw new ArgumentNullException(nameof(jockeyRepository)); + } + + private void FormJockeys_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _jockeyRepository.DeleteJockey(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void LoadList() => dataGridView.DataSource = _jockeyRepository.ReadJockeys(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + return true; + } + +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockeys.resx b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockeys.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormJockeys.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwner.Designer.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwner.Designer.cs new file mode 100644 index 0000000..e7a5aed --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwner.Designer.cs @@ -0,0 +1,161 @@ +namespace ProjectHorseRacing.Forms +{ + partial class FormOwner + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + textBoxLastNameOwner = new TextBox(); + LastNameJokey = new Label(); + CancelButtonOwner = new Button(); + SaveButtonOwner = new Button(); + textBoxFirstNameOwner = new TextBox(); + RatingJockey = new Label(); + AgeJockey = new Label(); + FirstNameJokey = new Label(); + textBoxAddressOwner = new TextBox(); + textBoxPhoneNumberOwner = new TextBox(); + SuspendLayout(); + // + // textBoxLastNameOwner + // + textBoxLastNameOwner.Location = new Point(245, 81); + textBoxLastNameOwner.Name = "textBoxLastNameOwner"; + textBoxLastNameOwner.Size = new Size(234, 27); + textBoxLastNameOwner.TabIndex = 21; + // + // LastNameJokey + // + LastNameJokey.AutoSize = true; + LastNameJokey.Location = new Point(31, 84); + LastNameJokey.Name = "LastNameJokey"; + LastNameJokey.Size = new Size(153, 20); + LastNameJokey.TabIndex = 20; + LastNameJokey.Text = "Фамилия владельца:"; + // + // CancelButtonOwner + // + CancelButtonOwner.Location = new Point(293, 253); + CancelButtonOwner.Name = "CancelButtonOwner"; + CancelButtonOwner.Size = new Size(94, 29); + CancelButtonOwner.TabIndex = 19; + CancelButtonOwner.Text = "Отмена"; + CancelButtonOwner.UseVisualStyleBackColor = true; + CancelButtonOwner.Click += CancelButtonOwner_Click; + // + // SaveButtonOwner + // + SaveButtonOwner.Location = new Point(106, 253); + SaveButtonOwner.Name = "SaveButtonOwner"; + SaveButtonOwner.Size = new Size(94, 29); + SaveButtonOwner.TabIndex = 18; + SaveButtonOwner.Text = "Сохранить"; + SaveButtonOwner.UseVisualStyleBackColor = true; + SaveButtonOwner.Click += SaveButtonOwner_Click; + // + // textBoxFirstNameOwner + // + textBoxFirstNameOwner.Location = new Point(245, 35); + textBoxFirstNameOwner.Name = "textBoxFirstNameOwner"; + textBoxFirstNameOwner.Size = new Size(234, 27); + textBoxFirstNameOwner.TabIndex = 15; + // + // RatingJockey + // + RatingJockey.AutoSize = true; + RatingJockey.Location = new Point(32, 182); + RatingJockey.Name = "RatingJockey"; + RatingJockey.Size = new Size(207, 20); + RatingJockey.TabIndex = 14; + RatingJockey.Text = "Номер телефона владельца:"; + // + // AgeJockey + // + AgeJockey.AutoSize = true; + AgeJockey.Location = new Point(32, 131); + AgeJockey.Name = "AgeJockey"; + AgeJockey.Size = new Size(131, 20); + AgeJockey.TabIndex = 13; + AgeJockey.Text = "Адрес владельца:"; + // + // FirstNameJokey + // + FirstNameJokey.AutoSize = true; + FirstNameJokey.Location = new Point(31, 38); + FirstNameJokey.Name = "FirstNameJokey"; + FirstNameJokey.Size = new Size(119, 20); + FirstNameJokey.TabIndex = 12; + FirstNameJokey.Text = "Имя владельца:"; + // + // textBoxAddressOwner + // + textBoxAddressOwner.Location = new Point(245, 128); + textBoxAddressOwner.Name = "textBoxAddressOwner"; + textBoxAddressOwner.Size = new Size(234, 27); + textBoxAddressOwner.TabIndex = 22; + // + // textBoxPhoneNumberOwner + // + textBoxPhoneNumberOwner.Location = new Point(245, 179); + textBoxPhoneNumberOwner.Name = "textBoxPhoneNumberOwner"; + textBoxPhoneNumberOwner.Size = new Size(234, 27); + textBoxPhoneNumberOwner.TabIndex = 23; + // + // FormOwner + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(513, 315); + Controls.Add(textBoxPhoneNumberOwner); + Controls.Add(textBoxAddressOwner); + Controls.Add(textBoxLastNameOwner); + Controls.Add(LastNameJokey); + Controls.Add(CancelButtonOwner); + Controls.Add(SaveButtonOwner); + Controls.Add(textBoxFirstNameOwner); + Controls.Add(RatingJockey); + Controls.Add(AgeJockey); + Controls.Add(FirstNameJokey); + Name = "FormOwner"; + Text = "Владелец"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private TextBox textBoxLastNameOwner; + private Label LastNameJokey; + private Button CancelButtonOwner; + private Button SaveButtonOwner; + private TextBox textBoxFirstNameOwner; + private Label RatingJockey; + private Label AgeJockey; + private Label FirstNameJokey; + private TextBox textBoxAddressOwner; + private TextBox textBoxPhoneNumberOwner; + } +} \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwner.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwner.cs new file mode 100644 index 0000000..70b4b94 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwner.cs @@ -0,0 +1,88 @@ +using ProjectHorseRacing.Entities; +using ProjectHorseRacing.Repositories; +using ProjectHorseRacing.Repositories.Implementation; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ProjectHorseRacing.Forms; + +public partial class FormOwner : Form +{ + private readonly IOwnerRepository _ownerRepository; + + private int? _ownerId; + + public int Id + { + set + { + try + { + var owner = _ownerRepository.ReadOwnerById(value); + if (owner == null) + { + throw new InvalidDataException(nameof(owner)); + } + + textBoxFirstNameOwner.Text = owner.FistName; + textBoxLastNameOwner.Text = owner.LastName; + textBoxAddressOwner.Text = owner.Address; + textBoxPhoneNumberOwner.Text = owner.PhoneNumber; + _ownerId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + public FormOwner(IOwnerRepository ownerRepository) + { + InitializeComponent(); + _ownerRepository = ownerRepository ?? + throw new ArgumentNullException(nameof(ownerRepository)); + } + + private void SaveButtonOwner_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxFirstNameOwner.Text) || + string.IsNullOrWhiteSpace(textBoxLastNameOwner.Text) || + string.IsNullOrWhiteSpace(textBoxAddressOwner.Text) || + string.IsNullOrWhiteSpace(textBoxPhoneNumberOwner.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_ownerId.HasValue) + { + _ownerRepository.UpdateOwner(CreateOwner(_ownerId.Value)); + } + else + { + _ownerRepository.CreateOwner(CreateOwner(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void CancelButtonOwner_Click(object sender, EventArgs e) => Close(); + + private Owners CreateOwner(int id) => Owners.CreateEntity(id, + textBoxFirstNameOwner.Text, textBoxLastNameOwner.Text, + textBoxAddressOwner.Text, textBoxPhoneNumberOwner.Text); + +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwner.resx b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwner.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwner.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwners.Designer.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwners.Designer.cs new file mode 100644 index 0000000..4fc651e --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwners.Designer.cs @@ -0,0 +1,125 @@ +namespace ProjectHorseRacing.Forms +{ + partial class FormOwners + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + buttonDel = new Button(); + buttonAdd = new Button(); + dataGridView = new DataGridView(); + panelOwner = new Panel(); + ButtonUpd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + panelOwner.SuspendLayout(); + SuspendLayout(); + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.минус; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(34, 287); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(94, 94); + buttonDel.TabIndex = 1; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.плюс; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(34, 38); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(94, 94); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(637, 450); + dataGridView.TabIndex = 3; + // + // panelOwner + // + panelOwner.Controls.Add(ButtonUpd); + panelOwner.Controls.Add(buttonDel); + panelOwner.Controls.Add(buttonAdd); + panelOwner.Dock = DockStyle.Right; + panelOwner.Location = new Point(637, 0); + panelOwner.Name = "panelOwner"; + panelOwner.Size = new Size(163, 450); + panelOwner.TabIndex = 2; + // + // ButtonUpd + // + ButtonUpd.BackgroundImage = Properties.Resources.карандаш; + ButtonUpd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonUpd.Location = new Point(34, 163); + ButtonUpd.Name = "ButtonUpd"; + ButtonUpd.Size = new Size(94, 94); + ButtonUpd.TabIndex = 6; + ButtonUpd.UseVisualStyleBackColor = true; + ButtonUpd.Click += ButtonUpd_Click; + // + // FormOwners + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(dataGridView); + Controls.Add(panelOwner); + Name = "FormOwners"; + Text = "Владельцы"; + Load += FormOwners_Load; + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + panelOwner.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + private Button buttonDel; + private Button buttonAdd; + private DataGridView dataGridView; + private Panel panelOwner; + private Button ButtonUpd; + } +} \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwners.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwners.cs new file mode 100644 index 0000000..5421f91 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwners.cs @@ -0,0 +1,114 @@ +using ProjectHorseRacing.Repositories; +using ProjectHorseRacing.Repositories.Implementation; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace ProjectHorseRacing.Forms; + +public partial class FormOwners : Form +{ + + private readonly IUnityContainer _container; + + private readonly IOwnerRepository _ownerRepository; + + public FormOwners(IUnityContainer container, IOwnerRepository ownerRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _ownerRepository = ownerRepository ?? + throw new ArgumentNullException(nameof(ownerRepository)); + } + + + private void FormOwners_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + + private void ButtonDel_Click(object sender, EventArgs e) + { + + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _ownerRepository.DeleteOwner(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _ownerRepository.ReadOwners(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + return true; + } + + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwners.resx b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwners.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormOwners.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormRace.Designer.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormRace.Designer.cs new file mode 100644 index 0000000..163602a --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormRace.Designer.cs @@ -0,0 +1,128 @@ +namespace ProjectHorseRacing.Forms +{ + partial class FormRace + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + GenderHorse = new Label(); + CancelButtonHorse = new Button(); + SaveButtonHorse = new Button(); + DateTime = new Label(); + comboBoxPlaceEvent = new ComboBox(); + dateTimePicker = new DateTimePicker(); + dateTimePicker1 = new DateTimePicker(); + SuspendLayout(); + // + // GenderHorse + // + GenderHorse.AutoSize = true; + GenderHorse.Location = new Point(30, 89); + GenderHorse.Name = "GenderHorse"; + GenderHorse.Size = new Size(194, 20); + GenderHorse.TabIndex = 30; + GenderHorse.Text = "Место проведения скачки:"; + // + // CancelButtonHorse + // + CancelButtonHorse.Location = new Point(265, 149); + CancelButtonHorse.Name = "CancelButtonHorse"; + CancelButtonHorse.Size = new Size(94, 29); + CancelButtonHorse.TabIndex = 27; + CancelButtonHorse.Text = "Отмена"; + CancelButtonHorse.UseVisualStyleBackColor = true; + CancelButtonHorse.Click += CancelButtonHorse_Click; + // + // SaveButtonHorse + // + SaveButtonHorse.Location = new Point(130, 149); + SaveButtonHorse.Name = "SaveButtonHorse"; + SaveButtonHorse.Size = new Size(94, 29); + SaveButtonHorse.TabIndex = 26; + SaveButtonHorse.Text = "Сохранить"; + SaveButtonHorse.UseVisualStyleBackColor = true; + SaveButtonHorse.Click += SaveButtonHorse_Click; + // + // DateTime + // + DateTime.AutoSize = true; + DateTime.Location = new Point(30, 35); + DateTime.Name = "DateTime"; + DateTime.Size = new Size(183, 20); + DateTime.TabIndex = 24; + DateTime.Text = "Дата проведения скачки:"; + // + // comboBoxPlaceEvent + // + comboBoxPlaceEvent.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxPlaceEvent.FormattingEnabled = true; + comboBoxPlaceEvent.Location = new Point(246, 81); + comboBoxPlaceEvent.Name = "comboBoxPlaceEvent"; + comboBoxPlaceEvent.Size = new Size(190, 28); + comboBoxPlaceEvent.TabIndex = 22; + // + // dateTimePicker + // + dateTimePicker.Location = new Point(0, 0); + dateTimePicker.Name = "dateTimePicker"; + dateTimePicker.Size = new Size(200, 27); + dateTimePicker.TabIndex = 0; + // + // dateTimePicker1 + // + dateTimePicker1.Location = new Point(244, 34); + dateTimePicker1.Name = "dateTimePicker1"; + dateTimePicker1.Size = new Size(192, 27); + dateTimePicker1.TabIndex = 31; + // + // FormRace + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(477, 218); + Controls.Add(dateTimePicker1); + Controls.Add(GenderHorse); + Controls.Add(CancelButtonHorse); + Controls.Add(SaveButtonHorse); + Controls.Add(DateTime); + Controls.Add(comboBoxPlaceEvent); + Name = "FormRace"; + StartPosition = FormStartPosition.CenterParent; + Text = "Скачка"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + private Label GenderHorse; + private Button CancelButtonHorse; + private Button SaveButtonHorse; + private Label DateTime; + private ComboBox comboBoxPlaceEvent; + private DateTimePicker dateTimePicker; + private DateTimePicker dateTimePicker1; + } +} \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormRace.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormRace.cs new file mode 100644 index 0000000..46ec46d --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormRace.cs @@ -0,0 +1,87 @@ +using ProjectHorseRacing.Entities; +using ProjectHorseRacing.Entities.Enums; +using ProjectHorseRacing.Repositories; +using ProjectHorseRacing.Repositories.Implementation; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ProjectHorseRacing.Forms; + +public partial class FormRace : Form +{ + private readonly IRaceRepository _raceRepository; + + + private int? _raceId; + + public int Id + { + set + { + try + { + var race = _raceRepository.ReadRaceById(value); + if (race == null) + { + throw new InvalidDataException(nameof(race)); + } + + dateTimePicker.Value = race.DateTime; + comboBoxPlaceEvent.SelectedItem = race.RacePlaceEvent; + + _raceId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FormRace(IRaceRepository raceRepository) + { + InitializeComponent(); + + _raceRepository = raceRepository ?? + throw new ArgumentNullException(nameof(raceRepository)); + + comboBoxPlaceEvent.DataSource = Enum.GetValues(typeof(RacePlaceEvent)); + } + + private void SaveButtonHorse_Click(object sender, EventArgs e) + { + try + { + if (comboBoxPlaceEvent.SelectedIndex < 1) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_raceId.HasValue) + { + _raceRepository.UpdateRace(CreateRace(_raceId.Value)); + } + else + { + _raceRepository.CreateRace(CreateRace(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void CancelButtonHorse_Click(object sender, EventArgs e) => Close(); + + private Race CreateRace(int id) => Race.CreateOperation(id, dateTimePicker.Value, (RacePlaceEvent)comboBoxPlaceEvent.SelectedItem!); + +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormRace.resx b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormRace.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormRace.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormRaces.Designer.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormRaces.Designer.cs new file mode 100644 index 0000000..0fd09d9 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormRaces.Designer.cs @@ -0,0 +1,126 @@ +namespace ProjectHorseRacing.Forms +{ + partial class FormRaces + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel1 = new Panel(); + buttonUpd = new Button(); + buttonDel = new Button(); + buttonAdd = new Button(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonUpd); + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(662, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(149, 450); + panel1.TabIndex = 0; + // + // buttonUpd + // + buttonUpd.BackgroundImage = Properties.Resources.карандаш; + buttonUpd.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpd.Location = new Point(33, 177); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(94, 94); + buttonUpd.TabIndex = 5; + buttonUpd.UseVisualStyleBackColor = true; + buttonUpd.Click += ButtonUpd_Click; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.минус; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(33, 303); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(94, 94); + buttonDel.TabIndex = 4; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.плюс; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(33, 54); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(94, 94); + buttonAdd.TabIndex = 3; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(662, 450); + dataGridView.TabIndex = 1; + // + // FormRaces + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(811, 450); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormRaces"; + StartPosition = FormStartPosition.CenterParent; + Text = "Скачки"; + Load += FormRaces_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private DataGridView dataGridView; + private Button buttonUpd; + private Button buttonDel; + private Button buttonAdd; + } +} \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormRaces.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormRaces.cs new file mode 100644 index 0000000..629fa5a --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormRaces.cs @@ -0,0 +1,109 @@ +using ProjectHorseRacing.Repositories; +using ProjectHorseRacing.Repositories.Implementation; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace ProjectHorseRacing.Forms; + +public partial class FormRaces : Form +{ + private readonly IUnityContainer _container; + + private readonly IRaceRepository _raceRepository; + + public FormRaces(IUnityContainer container, IRaceRepository raceRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _raceRepository = raceRepository ?? + throw new ArgumentNullException(nameof(raceRepository)); + } + + private void FormRaces_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _raceRepository.DeleteRace(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _raceRepository.ReadRaces(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + return true; + } +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormRaces.resx b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormRaces.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormRaces.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormResult.Designer.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormResult.Designer.cs new file mode 100644 index 0000000..a082341 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormResult.Designer.cs @@ -0,0 +1,172 @@ +namespace ProjectHorseRacing.Forms +{ + partial class FormResult + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + comboBoxRace = new ComboBox(); + comboBoxJockey = new ComboBox(); + comboBoxHorse = new ComboBox(); + numericUpDownPosition = new NumericUpDown(); + Position = new Label(); + Race = new Label(); + label1 = new Label(); + label2 = new Label(); + CancelButtonResult = new Button(); + SaveButtonResult = new Button(); + ((System.ComponentModel.ISupportInitialize)numericUpDownPosition).BeginInit(); + SuspendLayout(); + // + // comboBoxRace + // + comboBoxRace.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxRace.FormattingEnabled = true; + comboBoxRace.Location = new Point(236, 80); + comboBoxRace.Name = "comboBoxRace"; + comboBoxRace.Size = new Size(223, 28); + comboBoxRace.TabIndex = 0; + // + // comboBoxJockey + // + comboBoxJockey.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxJockey.FormattingEnabled = true; + comboBoxJockey.Location = new Point(236, 129); + comboBoxJockey.Name = "comboBoxJockey"; + comboBoxJockey.Size = new Size(223, 28); + comboBoxJockey.TabIndex = 1; + // + // comboBoxHorse + // + comboBoxHorse.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxHorse.FormattingEnabled = true; + comboBoxHorse.Location = new Point(236, 176); + comboBoxHorse.Name = "comboBoxHorse"; + comboBoxHorse.Size = new Size(223, 28); + comboBoxHorse.TabIndex = 2; + // + // numericUpDownPosition + // + numericUpDownPosition.Location = new Point(236, 36); + numericUpDownPosition.Minimum = new decimal(new int[] { 1, 0, 0, 0 }); + numericUpDownPosition.Name = "numericUpDownPosition"; + numericUpDownPosition.Size = new Size(150, 27); + numericUpDownPosition.TabIndex = 3; + numericUpDownPosition.Value = new decimal(new int[] { 1, 0, 0, 0 }); + // + // Position + // + Position.AutoSize = true; + Position.Location = new Point(24, 43); + Position.Name = "Position"; + Position.Size = new Size(194, 20); + Position.TabIndex = 4; + Position.Text = "Место, занятое на скачках:"; + // + // Race + // + Race.AutoSize = true; + Race.Location = new Point(24, 88); + Race.Name = "Race"; + Race.Size = new Size(60, 20); + Race.TabIndex = 5; + Race.Text = "Скачки:"; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(24, 137); + label1.Name = "label1"; + label1.Size = new Size(58, 20); + label1.TabIndex = 6; + label1.Text = "Жокей:"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(24, 184); + label2.Name = "label2"; + label2.Size = new Size(67, 20); + label2.TabIndex = 7; + label2.Text = "Лошадь:"; + // + // CancelButtonResult + // + CancelButtonResult.Location = new Point(270, 244); + CancelButtonResult.Name = "CancelButtonResult"; + CancelButtonResult.Size = new Size(94, 29); + CancelButtonResult.TabIndex = 19; + CancelButtonResult.Text = "Отмена"; + CancelButtonResult.UseVisualStyleBackColor = true; + CancelButtonResult.Click += CancelButtonResult_Click; + // + // SaveButtonResult + // + SaveButtonResult.Location = new Point(135, 244); + SaveButtonResult.Name = "SaveButtonResult"; + SaveButtonResult.Size = new Size(94, 29); + SaveButtonResult.TabIndex = 18; + SaveButtonResult.Text = "Сохранить"; + SaveButtonResult.UseVisualStyleBackColor = true; + SaveButtonResult.Click += SaveButtonResult_Click; + // + // FormResult + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(538, 307); + Controls.Add(CancelButtonResult); + Controls.Add(SaveButtonResult); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(Race); + Controls.Add(Position); + Controls.Add(numericUpDownPosition); + Controls.Add(comboBoxHorse); + Controls.Add(comboBoxJockey); + Controls.Add(comboBoxRace); + Name = "FormResult"; + StartPosition = FormStartPosition.CenterParent; + Text = "Результат"; + ((System.ComponentModel.ISupportInitialize)numericUpDownPosition).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private ComboBox comboBoxRace; + private ComboBox comboBoxJockey; + private ComboBox comboBoxHorse; + private NumericUpDown numericUpDownPosition; + private Label Position; + private Label Race; + private Label label1; + private Label label2; + private Button CancelButtonResult; + private Button SaveButtonResult; + } +} \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormResult.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormResult.cs new file mode 100644 index 0000000..37b2c44 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormResult.cs @@ -0,0 +1,66 @@ +using ProjectHorseRacing.Entities; +using ProjectHorseRacing.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ProjectHorseRacing.Forms; + +public partial class FormResult : Form +{ + private readonly IResultRepository _resultRepository; + + public FormResult(IResultRepository resultRepository, + IRaceRepository raceRepository, IJockeyRepository jockeyRepository, + IHorseRepository horseRepository) + { + InitializeComponent(); + _resultRepository = resultRepository ?? + throw new ArgumentNullException(nameof(resultRepository)); + + comboBoxRace.DataSource =raceRepository.ReadRaces(); + comboBoxRace.DisplayMember = "DateTime"; + comboBoxRace.ValueMember = "Id"; + + comboBoxJockey.DataSource = jockeyRepository.ReadJockeys(); + comboBoxJockey.DisplayMember = "FirstName"; + comboBoxJockey.ValueMember = "Id"; + + comboBoxHorse.DataSource = horseRepository.ReadHorses(); + comboBoxHorse.DisplayMember = "Nickname"; + comboBoxHorse.ValueMember = "Id"; + + } + + private void SaveButtonResult_Click(object sender, EventArgs e) + { + try + { + if (comboBoxRace.SelectedIndex < 0 || + comboBoxJockey.SelectedIndex < 0 || + comboBoxHorse.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненные поля"); + } + _resultRepository.CreateResult(Result.CreateEntity(0, + Convert.ToInt32(numericUpDownPosition.Value), + (int)comboBoxRace.SelectedValue!, (int)comboBoxJockey.SelectedValue!, + (int)comboBoxHorse.SelectedValue!)); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void CancelButtonResult_Click(object sender, EventArgs e) => Close(); +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormResult.resx b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormResult.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormResult.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormResults.Designer.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormResults.Designer.cs new file mode 100644 index 0000000..aa56f73 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormResults.Designer.cs @@ -0,0 +1,92 @@ +namespace ProjectHorseRacing.Forms +{ + partial class FormResults + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel1 = new Panel(); + dataGridView = new DataGridView(); + ButtonAdd = new Button(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(ButtonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(652, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(148, 450); + panel1.TabIndex = 0; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersWidth = 51; + dataGridView.Size = new Size(652, 450); + dataGridView.TabIndex = 1; + // + // ButtonAdd + // + ButtonAdd.BackgroundImage = Properties.Resources.плюс; + ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonAdd.Location = new Point(29, 30); + ButtonAdd.Name = "ButtonAdd"; + ButtonAdd.Size = new Size(94, 94); + ButtonAdd.TabIndex = 4; + ButtonAdd.UseVisualStyleBackColor = true; + ButtonAdd.Click += ButtonAdd_Click; + // + // FormResults + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormResults"; + Text = "Результаты"; + Load += FormResults_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private DataGridView dataGridView; + private Button ButtonAdd; + } +} \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormResults.cs b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormResults.cs new file mode 100644 index 0000000..75eb4d2 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormResults.cs @@ -0,0 +1,60 @@ +using ProjectHorseRacing.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace ProjectHorseRacing.Forms; + +public partial class FormResults : Form +{ + + private readonly IUnityContainer _container; + private readonly IResultRepository _resultRepository; + + public FormResults(IUnityContainer container, IResultRepository resultRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _resultRepository = resultRepository ?? + throw new ArgumentNullException(nameof(resultRepository)); + } + + private void FormResults_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void LoadList() => dataGridView.DataSource = _resultRepository.ReadResults(); + +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Forms/FormResults.resx b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormResults.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Forms/FormResults.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Program.cs b/ProjectHorseRacing/ProjectHorseRacing/Program.cs index 26c34ad..80ed3d6 100644 --- a/ProjectHorseRacing/ProjectHorseRacing/Program.cs +++ b/ProjectHorseRacing/ProjectHorseRacing/Program.cs @@ -1,3 +1,8 @@ +using Unity.Lifetime; +using Unity; +using ProjectHorseRacing.Repositories.Implementation; +using ProjectHorseRacing.Repositories; + namespace ProjectHorseRacing { internal static class Program @@ -11,7 +16,21 @@ namespace ProjectHorseRacing // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); + Application.Run(CreateContainer().Resolve()); + } + + private static IUnityContainer CreateContainer() + { + var container = new UnityContainer(); + + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + + return container; } } } \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/ProjectHorseRacing.csproj b/ProjectHorseRacing/ProjectHorseRacing/ProjectHorseRacing.csproj index 663fdb8..accbdf0 100644 --- a/ProjectHorseRacing/ProjectHorseRacing/ProjectHorseRacing.csproj +++ b/ProjectHorseRacing/ProjectHorseRacing/ProjectHorseRacing.csproj @@ -8,4 +8,23 @@ enable + + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Properties/Resources.Designer.cs b/ProjectHorseRacing/ProjectHorseRacing/Properties/Resources.Designer.cs new file mode 100644 index 0000000..93a9b5d --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace ProjectHorseRacing.Properties { + using System; + + + /// + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// + // Этот класс создан автоматически классом StronglyTypedResourceBuilder + // с помощью такого средства, как ResGen или Visual Studio. + // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen + // с параметром /str или перестройте свой проект VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ProjectHorseRacing.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap карандаш { + get { + object obj = ResourceManager.GetObject("карандаш", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap минус { + get { + object obj = ResourceManager.GetObject("минус", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap плюс { + get { + object obj = ResourceManager.GetObject("плюс", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap скачки { + get { + object obj = ResourceManager.GetObject("скачки", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Properties/Resources.resx b/ProjectHorseRacing/ProjectHorseRacing/Properties/Resources.resx new file mode 100644 index 0000000..48e88b6 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\скачки.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\плюс.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\минус.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\карандаш.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/ProjectHorseRacing/ProjectHorseRacing/Repositories/IBuyHorseRepository.cs b/ProjectHorseRacing/ProjectHorseRacing/Repositories/IBuyHorseRepository.cs new file mode 100644 index 0000000..3f861a2 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Repositories/IBuyHorseRepository.cs @@ -0,0 +1,17 @@ +using ProjectHorseRacing.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHorseRacing.Repositories; + +public interface IBuyHorseRepository +{ + IEnumerable ReadBuyHorse(); + + void CreateBuyHorse(BuyHorse buyHorse); + + void DeleteBuyHorse(int id); +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Repositories/IHorseRepository.cs b/ProjectHorseRacing/ProjectHorseRacing/Repositories/IHorseRepository.cs new file mode 100644 index 0000000..da6db78 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Repositories/IHorseRepository.cs @@ -0,0 +1,21 @@ +using ProjectHorseRacing.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHorseRacing.Repositories; + +public interface IHorseRepository +{ + IEnumerable ReadHorses(); + + Horse ReadHorseById(int id); + + void CreateHorse(Horse horse); + + void UpdateHorse(Horse horse); + + void DeleteHorse(int id); +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Repositories/IJockeyRepository.cs b/ProjectHorseRacing/ProjectHorseRacing/Repositories/IJockeyRepository.cs new file mode 100644 index 0000000..6b741ed --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Repositories/IJockeyRepository.cs @@ -0,0 +1,21 @@ +using ProjectHorseRacing.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHorseRacing.Repositories; + +public interface IJockeyRepository +{ + IEnumerable ReadJockeys(); + + Jockey ReadJockeyById(int id); + + void CreateJockey(Jockey jockey); + + void UpdateJockey(Jockey jockey); + + void DeleteJockey(int id); +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Repositories/IOwnerRepository.cs b/ProjectHorseRacing/ProjectHorseRacing/Repositories/IOwnerRepository.cs new file mode 100644 index 0000000..35386a4 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Repositories/IOwnerRepository.cs @@ -0,0 +1,16 @@ +using ProjectHorseRacing.Entities; + +namespace ProjectHorseRacing.Repositories; + +public interface IOwnerRepository +{ + IEnumerable ReadOwners(); + + Owners ReadOwnerById(int id); + + void CreateOwner(Owners owner); + + void UpdateOwner(Owners owner); + + void DeleteOwner(int id); +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Repositories/IRaceRepository.cs b/ProjectHorseRacing/ProjectHorseRacing/Repositories/IRaceRepository.cs new file mode 100644 index 0000000..2c4a0b3 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Repositories/IRaceRepository.cs @@ -0,0 +1,21 @@ +using ProjectHorseRacing.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHorseRacing.Repositories; + +public interface IRaceRepository +{ + IEnumerable ReadRaces(DateTime? dateFrom = null, DateTime? dateTo = null); + + Race ReadRaceById(int id); + + void CreateRace(Race race); + + void UpdateRace(Race race); + + void DeleteRace(int id); +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Repositories/IResultRepository.cs b/ProjectHorseRacing/ProjectHorseRacing/Repositories/IResultRepository.cs new file mode 100644 index 0000000..c5d7228 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Repositories/IResultRepository.cs @@ -0,0 +1,16 @@ +using ProjectHorseRacing.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHorseRacing.Repositories; + +public interface IResultRepository +{ + IEnumerable ReadResults(int? RaceId = null, int? JockeyId = null, int? HorseId = null); + + void CreateResult(Result result); + +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/BuyHorseRepository.cs b/ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/BuyHorseRepository.cs new file mode 100644 index 0000000..48e251a --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/BuyHorseRepository.cs @@ -0,0 +1,24 @@ +using ProjectHorseRacing.Entities.Enums; +using ProjectHorseRacing.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHorseRacing.Repositories.Implementation; + +public class BuyHorseRepository : IBuyHorseRepository +{ + public void CreateBuyHorse(BuyHorse buyHorse) + { + } + public void DeleteBuyHorse(int id) + { + } + + public IEnumerable ReadBuyHorse() + { + return []; + } +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/HorseRepository.cs b/ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/HorseRepository.cs new file mode 100644 index 0000000..0a4a7f2 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/HorseRepository.cs @@ -0,0 +1,31 @@ +using ProjectHorseRacing.Entities; +using ProjectHorseRacing.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHorseRacing.Repositories.Implementation; + +public class HorseRepository : IHorseRepository +{ + public void CreateHorse(Horse horse) + { + } + public void DeleteHorse(int id) + { + } + public Horse ReadHorseById(int id) + { + return Horse.CreateHorse(0, string.Empty, HorseGender.None, 0, HorseCharacters.None); + } + public IEnumerable ReadHorses() + { + return []; + } + public void UpdateHorse(Horse horse) + { + } + +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/JockeyRepository.cs b/ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/JockeyRepository.cs new file mode 100644 index 0000000..0910572 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/JockeyRepository.cs @@ -0,0 +1,29 @@ +using ProjectHorseRacing.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHorseRacing.Repositories.Implementation; + +public class JockeyRepository : IJockeyRepository +{ + public void CreateJockey(Jockey jockey) + { + } + public void DeleteJockey(int id) + { + } + public Jockey ReadJockeyById(int id) + { + return Jockey.CreateEntity(0, string.Empty, string.Empty, 0, 0); + } + public IEnumerable ReadJockeys() + { + return []; + } + public void UpdateJockey(Jockey jockey) + { + } +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/OwnerRepository.cs b/ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/OwnerRepository.cs new file mode 100644 index 0000000..9529111 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/OwnerRepository.cs @@ -0,0 +1,30 @@ +using ProjectHorseRacing.Entities; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHorseRacing.Repositories.Implementation; + +public class OwnerRepository : IOwnerRepository +{ + public void CreateOwner(Owners owner) + { + } + public void DeleteOwner(int id) + { + } + public Owners ReadOwnerById(int id) + { + return Owners.CreateEntity(0, string.Empty, string.Empty, string.Empty, string.Empty); + } + public IEnumerable ReadOwners() + { + return []; + } + public void UpdateOwner(Owners owner) + { + } +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/RaceRepository.cs b/ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/RaceRepository.cs new file mode 100644 index 0000000..bcaf871 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/RaceRepository.cs @@ -0,0 +1,30 @@ +using ProjectHorseRacing.Entities; +using ProjectHorseRacing.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHorseRacing.Repositories.Implementation; + +public class RaceRepository : IRaceRepository +{ + public void CreateRace(Race race) + { + } + public void DeleteRace(int id) + { + } + public Race ReadRaceById(int id) + { + return Race.CreateOperation(0, DateTime.Now, RacePlaceEvent.None); + } + public IEnumerable ReadRaces(DateTime? dateFrom = null, DateTime? dateTo = null) + { + return []; + } + public void UpdateRace(Race race) + { + } +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/ResultRepository.cs b/ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/ResultRepository.cs new file mode 100644 index 0000000..76a2c47 --- /dev/null +++ b/ProjectHorseRacing/ProjectHorseRacing/Repositories/Implementation/ResultRepository.cs @@ -0,0 +1,22 @@ +using ProjectHorseRacing.Entities.Enums; +using ProjectHorseRacing.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectHorseRacing.Repositories.Implementation; + +public class ResultRepository : IResultRepository +{ + public void CreateResult(Result result) + { + } + + public IEnumerable ReadResults(int? RaceId = null, int? JockeyId = null, int? HorseId = null) + { + return []; + } + +} diff --git a/ProjectHorseRacing/ProjectHorseRacing/Resources/карандаш.png b/ProjectHorseRacing/ProjectHorseRacing/Resources/карандаш.png new file mode 100644 index 0000000000000000000000000000000000000000..eb8c80538cf885df6f18f152f5f0087155efba5d GIT binary patch literal 27149 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 dSpREYo)(n z0&*E*ER`l@-I?mm_rCs*zYM=8XUU^Qhi}XOXLffEa+2NgX2Xw<`M-PjFJbwweZZdM zP!pp;p^l2`jU%n?*X95FeL22x!jy!YxvzJ839w`MCd28;x&8Si=bsD~(d1v3|dn7m--J`nS3Y)yqFlbkHOC+GJUpn%>{01D_7(g==|V#}cV&ch}AH=DX_dV7{xw zN9F2@H)*A@1rg^2W>{)X%DQmoXxr2N24G4&085Dvi`x%q>?$u%S?hRHS8C^(4Yw3G z$o}oglU4N8eq*-Z_O_m3&0mQd9cGK~{t<5SEK%{4&zW?8%H2Q5a(3((Dj9gxoxl*d a`iJ=`mz%irjhBj`@bGl?b6Mw<&;$Tc%XT&Z literal 0 HcmV?d00001 diff --git a/ProjectHorseRacing/ProjectHorseRacing/Resources/плюс.png b/ProjectHorseRacing/ProjectHorseRacing/Resources/плюс.png new file mode 100644 index 0000000000000000000000000000000000000000..ed70560dd311749835a30b413f9c060a8a6fc9e0 GIT binary patch literal 86858 zcmYhicUV(huswVd0)%QpmmZ2p2c_4D^j<{iL{NI~QbSXE69GX40Yy}L6A*}W6)A$W z(4==ndjBQ7_ulV&c%Hx?oPGA5J+o%bnn|p_t{Md?BPjp?6dLNvh5$f-`;!2G65)P5 z4+oNPzldzK)Rcis{7-&!@pAxR2Q-xL+zWWM(fp*s<(uWq@pu1b=d^;{2G2+Rze%)(ieAu#GJb&=NQ*EL#@-(b{mhz^f@15yYh4|y&@?BQ65yUkhZ60#|BfDJW>~sqUd2o z9RRQ3sD2;_&=t(u60j6D0)MUvc4dE{+-uBWLEu3W@k7LmLgWErNej8dthr0bxtRHM zMe+2&$Fj#!hPwu~2oR#51A&c63w$UdFgb=0|?rsQx9c+#K zIY)$E2IR;h^}zplFe`e%v7YtO+@HL#1rqX6d888b8wnwRSQy*spuYLK#dkTBX36+w z+%v+@qrhQXRueEuIP3R!H+f}+;K+z`i5eaJNn}a!!1D;3zz9=Hx^)KTieh$bSzq?F z@u)a`+LrEqD@BsDmkIPl9G&Z%oXBjh350=r!bBo23rDv@7nZ|TzLTx9(jcN7-T>@T z%)Bj!_7!1L6QMcbUs$-ODZiQnKBMwNUPeaXqY$9gFl(^#U}D zinE?WbsJ&O2S)Zatf8RJ#jB0QjXN14i{`?={q(*DL>>LVt0b znn!SPN}~R1t1LPAYRwga6`bGv#JyGi}`#;2ygetTZ* zVG~4ej+GtTa((!*KGCY4jF)t;QJ%&yAG=v#M6=?v-V~qo^lrlU!LvZIjtT+M6*e0a zN`oZLJ>n4Z9|+Y#_(`OKY9UqOpvS*}sE5)W`7_-W%$d}4f2_BBu3c>Phq9G@3c|(D zJQ>cUMaEs#7fp(kS!~K$dD2*Otd#!=bKh%)`0CSTkEK1+jqO}ydHruyf7XP>)TSlW zfPdZSprrsZ5Sl`x9aslVQN^yytFDF)Od)!UvDd}<7o&!pt!I=<#7 zw_hMm&J`#rDLob^Xf0YjIYqYaKWQ||m^mrG@VlH}XNKU+p@cJsW8$|h1vYT+y7$D? zn(Ln=^KDG&vU~d`y<7LHk^M58-Qa7N+oO^re!;@)Z~|3>?$PgC&+2)>bgZTyk6))Y zjsEdK^N*Iz{rk=T`RJF5T-XkWkX0Z_SNe3S-9k2!^%B$M9_(SvLZ#%!iof~Nzqxv@ zVcw1lk$~<(#pwEh$Kj^`e0bA#H%t9=wC-TZ?^v&w)OJ5|hVH>uoXho~0cM|WF{T(m z1X{BT2cg0(K5*;MKTm@HGzibmz15l?Ttbpx6kq$YJR9cH%&F9)Lx{65mu#|p!#OAV z%n0xmmQQ;g#Iy5(*g7$D>hPA!W9`))ne3nL5{!3(Y*5WgsQp2}Qd5705B21J@aBoQ z-0o!c(OGr>Y;?RJ>p%X0?b+V1*UtadKcp$sh9Vx~&u}b~qLw#tQ4BtoEqSNAmD|C@ z7J7TDbv-o3LE*!{pJTFuoij08qJCx8)<*n9Nf9syPVVH^IJrueOrAIR@H zIcMv!8fJcx;7i!zu4fp#iOAO^n zc-C@4nQsp^!lj(V>A@cph>o5|{4$D|fPsL&$HJkYu%jKtw#0UVWF7Hm+zXqnM_Wv- zx$O)%WQoLK;IAy)4F)D=&D8@Nl8#|Z3)h3E9$Xr~8v9vg?FqC3Vr|kZwxx}0&y|FeM#AJ*0#%M(^q5i;qC#ak`Mju>!VW_)t+yp z4S8)QohnVKIR)xVg>;2*O60z~?<~lB=cOO?UlGA|hTwyj{eS!wPKZTrte*S4C3~{j z-+J0*Z7(`k|FPZ z_7H5$Rss)?qqYC7FP0y==;Tfj1t|n6G?f`Xh-#NylS>7{XQ!LCzM9V*WelrhE?`UD zM&!76T=}j+g4@QKC2&o`@iedX*xBP?xS^Nx-(Zq@k1({&hTY>$Rh}O7=);KnJuRg| z*pI?h6?Mo_u6NLCpbAFbe==6`%ZWH;kQ3{Zy%1UJ9H%Il*Dgi{69p4bKHKNzXuX5^_;(_+xh&e?ZJH4IKT>c|lM_1%+5=7TTJ64Hw->3z3kmkmq$A~b9gaqq zm-fFrh^5IS|EqE{m;)m|7tAp`IbJQrOzt82@L>hRlll6V$4A3z3RRUsOH@h{FIEUTg;cvnn zj!48;j}468M4~I@!w%pbM88d)1O-8zY=3}bv|Cw80YYWqHZS#1xVor@XWqy$AM>#lH9u*hL#5|)RJrlKWd7QqZWt~m@%`kE^=U%;8vCtj@L!*)Lz%N z8_|$si5Um=QljcW8{kDDv^-`*sCV&{4!Ug4Y!P%AKu26(DROl3)%R@a@;t0yhD~bY zSTrR$bY+LhJxYWW3EgRj0tn^k>o3{p)YEsb0p*`BjdA%o__Gb2z$*O+Ur4$aEfKM; z+RP-wW&BR7LG{)vRSgt`a};Qh5YFa)M@sI;zQ~#|9*w$o(;qPwEs7oDdv5BB5vQJ! zqC%Daa^pg|+h4OjK9QWeJfFJkmzjfscc1zT&N&DUc`%p=o$ZN&L=v8+ewT);(+z*^oLdN zW+D2z%Hh%=qpdpw`yJp74wTDKtx&!t{O`$wW+Ll=EmQJm?Gy5ZVT;(j$5!w< z8;LlSzoKmH(Wz{4I(!NZ{#1B7f1ju{`ulv+sUaaX`1)J9&nCek$)k;#k2o= z6HGX{*?s%xI{|AJ>=s3NFlQXcrEdFMiw^bID!lz|v#8KWN4bt@X21(Dl55rfOqkAt zD;ct$V;tD($~z>Kknx89y~u(KQ-jaDZpF)xMnROaKA*R0KH9^jRB?@0?`!%g5E#pWLB{a|nwSlNO^17> z#~As;IqI+zjY%mvq(F4mB_p2TcaY*gzWKM*A3mju$^O3W(-?5vT;7wGdOKb3q5c_f z7qJbz%BBPGx{i6AzuS8x@9GD5lfIK9OVAbm#61uLMB1!7<_CDT41Atclm0?|v){&R zV&cC-|iPp zQo3iZ5HLfKIPxo@A2QY~+lW9cyhG#dRRm1aVV52sHdA@4wOqe@%&hv4J`qb@#YoQn z05R2nw@!g*{Mc1}n>wX06G-?F2D%mD(=uCg&*$~s!Bd)dJS^Jd(-Uo$^)u5BK8rnH z3JvZm^;F_-!e)_0FW(tm9_Q%ocPZc|>u+w;Pt-p5JXQi~O3az>4POZ%tvYW?nJ&I@ ze1WF1ChBM{Z}qW44u;sxUG}SB2o5J_9K;M~KQf8q3dNw$MEE89uzoX;EF)1@)-TJC zznv%PZ6;dpsrRTNIP-VkdWz-Cfk>n-tL>)j*$b;hq(rgTSL$}@E1H_ATN%dG)6qOp zlX4g)1cy;43%A)i%8{e^O+4HBMkw8+gWlZHvwevI(*Ffl z_=RKHm&6R~7`Tf)cyF!=sHN@d0RIt(dl{M7kRB#6y&Pa1jeC-v?>(d`0ByP=j z%+2>Xf-|tfla(H5gD=%ab59t^+veM}#zd{jL?cqa#8A;2%-u?`xD)GaA{X`|<&5U} z^RS@jVf9^?x<9^K0;MdY2CUp8uPgzVbCosKW=e2l#+)AHS47i@s}fU#mOEKk3q4=E3thW5X{% z!WJ6jG1oz|;j%r;?j}1BMBT^}#cXu74du88IWgmVxZ|b{=cUH4HQqg@2@C*4w61Hu zLxvjxx^Hgtn}5bJ0}ldKN|XnhiWqhslLaF0QcQ{NX5g0RNh2AGR0r9TLIW9^MhUwp z13_6r5Ecd+m=AE*2?`2o)4q6$(SnH?5YkDf^p8X!4FUrf@ zD6z{^nXm(a*T-|!qI5#Rho_ah-ZSm(;!uP)ewTE;krUZib91TMup1@yzbp)iVdSa| zv$t3NEEkwmQCyqZ}TP!xdiUmc2l!xk&krJm&X%E=ee{H8a{IbNLD9prBf>#eKB0;@c#fKYo6 z%%)KU=*yF5;|CU0!%l@}{|=F~@8{y4O+1Hhd_Xft5a>%cEL(zdnQ#A$&sVej`m z0s74uVO{SJQA^~;jmJ7jQF;n$quYmL!>nUXIVZ)n50ARUYnTjchUKjZBCYbBZVq;i zj*XRnKRG{XYB#YGZsJtXs)pM(Si0JJ?&R)Q#{(L<0g@?mRJ|*55X{S=;zGea%?9Et zMTZElLA2#f*9P%uR+pBB{TMeF@m|k?9k@Cor67iI)V5G)wd@LFirkxobQh{QOG| zn%)G9T4-p<79e?uKGfTu{NRK@z%O4<(>>(e&>r3X8SGeYB+v35 zMJCmg->7KS>A@FHI)$L$LB7Qk+cD+lkbChQYXrzt&-vVFqwvE+-L6{k8&x3Ons}Y6 z#3o-sYGtxy^{cYqvekT#gboOduBzC4`YTuf@edkN!SH_C=>}xdH<&KFm@s;?Nf})} zb)tgYd;njoS9%8pfS$$i_VeeJ7hfKd!VpDZoDm+q#MaXG=gK^zc{Y)ME%Gx9n(jJ> zlWYg!KWL=Nos=6y0&j=jBlF9q>;lE|g_PGq#!A;zkiYW|)L=w1ax!v+%-N+J-56} z73d4%rQbYwE=ZtL2zkePy*q=v>+Kqu6 z+(rN|0-&O~nQ8n!2NP~#S$xj8z8wIz1nM2vxAWv&eK(2~z555Z)R`vLS-oT9{Z7f| z87}X2kH0dG4L^uN*OhmkRt};oj5go<-cv>&a_1e$>>0(c_wb7^ za3FHMx}~me&s1LZ%3JXtFA;@v33Xc+-}Z6|y`ca~O!^wTwMB{92i48S`cRuiIJ9M=iatT1(P?Uh!Gl!(8B9gb~MpAC!m&nQwrri zGSYm_60F&}3PcBl{5DMr0k4W%qk{hjY0zqG) z=-dV}mo!R{c~QrUqSPX?$j%kyCx(GxhZ_)x1Ois|C!J>c;O8jeQTMH&bOT8531tkO zYe#`hjbqfCXnbISAej5Ye1tJG`%x*RXZq|>y}ZgHRio2x=Prnu;L|FmtRKh3Xu~q) z{Y@TYSVvsAhxK?A`n&3`1G3r|lyejOiqm7{eJnZyg4X_pZnV^0qgKks2mMRiguut! z(+6%*A1(a5y-9({_Sohz0|$#UnmhWm1QREJn#>Rt_YC8SqH?!yaIlA3V&27~8`1v` zP2JthG(oqX)8xBlt_PAJe&Xp|?@ji7#}Hy{^I}NP{L*xBlD3eh#r=f#O-2do+oEEz zq)}UI_PhMtRTgvZ?%SQC{%4Kol;-b+8ypxvepSfu<_2~R|v!Vo|frNWfU+X@>eCr89gkN z(ZzO1NYqKrg*Dgqb-*Yg!DtFE4i#Pb@Iz%EFcQ-2Cj5ry8!PDM&)QE1!4d32GWi=? zFIdy>LLCY~I)PG}92jof^pL>QoL{=6DZL{=(b+j%$;}U+k;xcd0Ap(haujF19`+`Z4s)D3YhP;Q5@4 z+8QE&8%@RX4uC6B;j3wZ0y6@U=}5T^htaL?XWi_F9JA}7OvQSUzl!!@Ou6SYh>C0n zbh*EI$@Xy#FE}`&)1caq-!3@f0D_Ss9pF9M*MT}xD&B!2;+3IjQ6XaMN5^)*Rr_3# z-Q?W{(a{$f-G$G2b>7$aU#A^-OLV-oVz9i5|b79|ikGgAY{j1Qatz$>qi~gEb<9qp5z#g2b6}tYKns0#O4{E^MIm znuqDN{fC~INDfq}urB0t8>1)(#!J!+63~&zLpsZ7{t*r&=&vMY+=znlU%73;nfA>h zWcBqO-pBmJ+%MkHI2GR%hfPc0EBz`>Ca(&dNrEh+Vyd>ABS1=;MXZC%IjFP~ZZLWO{j z19RKitvN>va&($2ZwRGphE_~f^`9p@-Uf@za-fvdsjhCMARbV5za!-<&cn-AN`k&C zmaI88phEnMgP8I=|zyG*tpe^)tewRf)l*7E&~le|Aa$rx1(1Lm{SI5t@; zr0(Nkm%X%hyv3%){i$;(VAQl(HM>3PT5k3LmA*|1dUPCZ8E6SG3@vRaiX;IwlZ1!` zlXeXV4o3}if5y|0?H=zw2@zb^1byg2yeo8D(|BTcOg|Lmv|sBNQcB|}OHly&lg_Rs zqbu_Bh6L5@1WV83JJRv)l4hGmSZfEDUsXT~LOUKr^gjZ}t#)L6D=PI1@e^|_!vS2j zy;XoTn*^*UTMUElKUafB^;3GhIALDT5@X8i{2hZ{`|A}0Bwq)91wv567WGt0&?}0q z=?h_xuG7^J7x{*be@6liyN7AMkF@m;eOx~8$d*9#S(CtzUTrJ`8uNa;ovKOShN-gj zT*(v*2hv5j@8USZ(p5r>kpR!q0#s+Br7A$zIEE2I@|eTW_FBAlQlOiV?5uRF!n0M7Ug-cGnBX)gr0 zP`13wJ2+6UR|70;xLyZ{=EsxXTYtK7?DR|-tpz=L)On(enkFi8YE^cYifyBXbNDT+( zcPL@??z_&&E-0e=icOFkr~=w0IUzp%O@~a0dZYG=j-jow>{)$j-D-quogWj4qBcjg zl3SoLu`E%Q30f2M05`twhTsnn{~m&D-~v7+UF?NruyG2i0*|ED?L7xwtDjuluwlQ! zhbpm8BsyX_UK&JeXr>I6ee@YpM)x_DCiw@GlpssD!4OQ%p(L)=b#Y~B2F?#(B7UVm zRGXPc*ESI4Gg?-V!E!{PLq&BGd?`3nI0a5fn9x_4av&u$7H@ePmmJX5n11|yB82=X z<&psNdUciRVCjuGu;f#li5A`51Q%7i!U2pgy2Xq2X@J$Kh-#QX{oZ3`$tBn%@ zb}<07@&?bxPk&u>EnT}`L4?Lr7Vs6sfOG8?428gDCS_+ePbiU;*sT?0g{2r30@bu`hs^uz&LNkw*k$0OOa_6t}{Em9+0N4GWYMHDj{M|?ZeZCZN zQ04t5UZeuW^E)(RbObGoW(fV}1RP&>YQT1Gz-TzZOPQ>of)(%k)qX$d2t6J$HCPI) z6aYXkUmpmc!v4$8-RYxZzk_*^9~%6p?CvJsr0)a8WZp=Pz*O0>PbQbEszZyE36>6R zl+j_&*v&OeAoqACY?xH_qu_KJXoTZ|6#^8}?x=IGI9 z-9Hqm$Brb|#xlHDBmCk^tAvy-v|gR|o%vNa9ohO5S9v6uRH}gX=%(hKo_?}{i;Uu! z=2eF6710EVFeY)>|IW-^!)48YppJkCGxG7wyhOK1!gr>Iap|?RG($0BAP)Ms;AMT@ zNKGtS9bPOz7E4tfr-G4#Ccx6JYT=|6Lo`ugr`+jhDRj8w6XNIawWf-du9b2)FHr_1 z%kDk$Nmm$!{`kRfvp3McsvwIDi`Lc(=zw~h2Ms$r_z`UrP>RaM)of$XGf9%GfqXRYJFrlFrjorrdMmp2; zcqbV5xxxq1$D{)$fS9c~PnN{$UCGOBx8e#mZ3@yUS5C$XA$Y|?I7C z@?(jjx@23)2g>MHx3NDXeSPbi^HH%1q$pfC-U4e1d+U(0&(EHwoAnb|?y1+Ww7|SrFEVc0_6B`y} zWxr_E!gO*Ol|plM?+5;6C4`v#8MT4&`ig8QTIbQtu52Ch1zdl~0o`=%LH{}xNKkco;bdl`kBKf^Q9F}}s7u6GafU}^uU6(6%T&%c6j-pJ}|?2jlFg zN>VtgY5hG@?d_D-Op6jEV%VnL)Sx258w1=W!Hu`z3ztVEg>k^%>ABtRI=?9aY^|__ z-9ZnktU?gMd#CP~1qa4=bg;bEM0S0vidNFuT98ByBxXQjJ+4``yLw6eKcpTZ1A;XW zp`Q9adp+6Fh^n-~;3OR?a0|a)cC2@1{wofo`^+MHaVc>Hw2X)|zO=CF4{7j#EKih+ z6h1ldsqz38&cK@bVmFGGC+l7BR|#5zeXVBLdo_Z!Lra~U7$BNJSfM!Bs*LHQ7Gyp#M~2yK!6J3way5U8y?6Br7GU{FQOS}_t)$eyRavs+8OJv|b{ z{u(FHf+nmAi;~_N;;#9_LzC=JcF$PjD3#Q&6jj>qhV{^ZU`phd$mTRC+WV#s;T>&l zj4;G!5STLFzu%kiMOf!?Nw+EoX0VupR^6!Xmsnm#SLXj$0P@)gIe%a|aD}6}jWXD> z4l>o(rcQDEB@=AZJgh?S!S;jfXi}XsHE87i0V}O=ZP$*~?}%Ag*-hl>Uv`oI-3A25 zdrctduu#h`D=g`O`YWe|&&L-gqWN&}aRF#Qn-z}Qbv9B#k0$kXeNu}aDm@W|@RjnD zR;1CeyAf#qmoW|Rq&ER9d+wiET;MIS(=~LNyMOv1UW&a3T`2@Le$;&8 z2G_4#_6yxl&D^Ux+WB;Y6gm0|R<(-vSU!eDY2ev;v?V$tH-wE}n%l8K@APP{16lDr zpZxu}ff~VwLy5bP&+ATI^)2`EkIV)QfS=Dfqf*52h+mSg17duEn+!9kskXiELFFOx zT^~+he26`F@lj%DzE+`3z{lO_fRRx_x9V*k`II1~2NJlQX;8F`nH-V-L2glmXrc2& zBk@QnGMOPlT@=O%QDS+Zb6*YSR&NHc(C2CY)KnKDYXEG1gi9t#^Xmf^1jzp}z}uU{ z;Mt0>cJBwwikoUcn{G|<8%~`b18E2Skdv*p$NU_azz3r9Y#ZM!CEfY-&A1aEX(fVt zb3V06FaKXvcu(Z*3MUZ14mc%+zId|AHwuhFV(Lod`DVA;B}wzhO`NQ$K@WK>xxpND z(EViJ3w`Q814T0{s<0R^SIz$K4>P0C*Tzsl73ZT@y2HH{RDh+q{})<^DUJQ6DgH5{ z;qk+ND>T}L;BQLo9E|KgxSyz?>$go~3(8EsXQNm$H?P0d*)8WIt;pUB4h_MnA?+N1*k6v#>DQzuHWc}rcguoC$rD)1i%8gYutSK`Lko(v&$d zcPko{_%cv4gDY09=G#hct-U8iwua^B7+W5R@|zIAP8_tT2n>`kt{sZ)TX94+f?$`7 z+Ui|5vPL>y1Hk-Vn`AaJk=y`%u!^5`P2nWROCJ%^Usx-NFm+@pima&nqQ1O;JO%Fi z#)l)>v~Vj;J#G`G%3!M#2DjCP%xn3kdkaAO;DiH-Ux(bdt9Ns5YT|S}ysV`jZEqD7 zN`XOnQlM|Wu;X3^#uO&@Y%mXO+=t~DVK1nnQg*NNgMBnavUe6W2)|deONo=B6j@B# z_nwrsNf-YwH8cFfsfU8jikQGLU*EVh=@auyk(l^%l+Rcu(}SsC;5X^)hs}%6j+N0r z(n^(I$Wfbi|FRJ@04PN30w{5SSdFL5WBMu}N@BiTk%wz^?%Cc8bOedf7^TgW&dwlF z+3iQvAoxf3$aN5n0bnd#`@vNW#2nFW%XuSdn6$0j9T&$(BudcAH)g~h`BG4qiF#nyk4}`bedJA3+B2RjsdT!UO`>|FSxc}S^R|1sb zL(t_WA!d#PmDz6HnPn^hetl@ok{C*7wtT=Jg{~fPQbAT&zlHX^Af>6Pgc|@lL0W>< z5#=Msdv~DHb$_X&U^ZXh8=_C1M`D60!#XqRP~6Ud!0n3oi2Rof&=*p~1oa<3^a5zlAm@?bws0giH~_h&4hYQ$3Xy<{9pdTXo6-{~4@f5I_8Ngx`RiShmgCjQx_i6CbN2#rk&R{q6LJ&2TuWk&Yw|8dB#~M8UIl6BndlP zuSDC60YxY5$|Rg@Y7A_{X$CQI5>EmH(}OFiQ{bvTAYV~Rxo6c{ zo<++PNj@A`ql7V@bDTk0qBS7_pBh~ybDoTj#09A>B!E{4^=?wV38EJ`unD?cEOI@? zjj!UfK*v)vfZPcVNPc`yj3EBTLBvP~3KGNk8VmMugFpNf^IrcdS|&)_Ba=QWHIe)C z+S3PoHM!v777VTe_Q#uuj_Vc}RjGeGxHPu>2FX)U&w$fh=Wh+wLEpzc2TE9(IR0Ze!MshiVwx7cS`7h_+pT-%-Om&8I?~dCrK?SS$MhwQWp-p z`8(j?`VR>NX?~`?X!+_~NGsz9x%iCw6&ifitbr#X8@GK9BpLZSz-$^@f*Rn&^n&V zfJGP+E0Rn@*)EtJbIHo#;GfFqLQ4Yp?53nWUkW(nUcr;Ney2iUA|N4p#D5j?bHogYe}t1Zs-*pXk9=>n==Ck4wRFqLsz@vLPQ~_PP7+5&-1JjN!>&${hGVfd zfs-s@%>P+IHB|@b`PJ_Pdszn3uh%CHkAC(-Yi8G32psJ9AtY$+BxD4=?-VUXJgq?Y z*xf*0x%S6}M2$M95ctObFcL ztWcZPlpsk4Bf1O#EL5-@%|~%_IKD|YNsN8y-vfTUByjJ_>23T#j4u&NNe3Uezv2qe zbc3i7s2CjA>Us#Dt)koZS=J(y`EG!=sB3pbatMaideO5hsdM0Y5hM8h;To^n0S$X* zlk46)CTay@BqyZH_nw5)H5?~0H*SWS=6_UUP^rw(6Az00BjT7r{s z^DU@0R=!OIiU`DSUxUF`z-_OfU6}vpCERD}d_rxJ?k4C5E=85beryTNn8FtR^RI}z ziR=j-Vu-6j~5x0B8J~WEW;psSA``E`eYz` zVvnYM*En?6J$AiS%|d{Y`lH^?;Bf47>N>j3bJ3Vpm#!H`#6l0Af@l>`Q8V98>*J1=^uPu*ZSSoTQ=x@s=Q;6apoV zQYDTG>jB9nCw`?W-|)2o7sb`hcWKjsY(sP}Icz+?h{Y%JfI!Vy`vqW$@8qptb0@R#5p_LeweA%J&1F3oh(?yzW4kX~Sv8MLD6J!8t2zgx-BeF%CL*DEB)C%j+pNr2X&nWc*r z+f(e?&e7zlCU-H@YawvjrT|mu812HYO+rk&DDe{dMpcb%O3~-%I>>LAv0y?r7Rja{XC9a!nw_jB!B5v$=SJQ4()4 zmMe?dURvKa;-fBpzX(M~QEF5rBN!-pZh$#*y}3WefIDiifJf(69kK`gXRpwHx@iGIi@2i3Kx?h z&LbeP&C<8ft0%68gSdLzI8fz7io2cI^D$Fh5S2EyXE3W3mIKN5d?58U>3~aUP^}~K z%~;fkF1639Yj%}@2(C4q2D&=#&~tQq(&a)`>G>cJ&6wB8MriRTAu1bXBtw578dolU zfWLkF=hF>}_k#C7
KZk(0@{~%-6ACm`Xj;2SBVHC*b%g%?;#ukw8+6UlGi5 z&`|uXsk9QD>B%HbH`jGg)vurEn?MJbg#-s088ub9l3xRJM!ASwg;5tT(oaoW;KAl= z3ifJONAjnAEDg}N7lWT4HxdS)l^`$L{yGl^beX*%s##qJCIZWg zmXDq}FJA`IzPp4e-NMr|jkaEkz(YA%x-G4ETr^S|eu4fSAIyl>e)ySt_+Cco zl$iF~Gb58OZRKXf>@s8urA4 zDXjRy9FHKx%GkXA?fr#o_&BA$y3~yvbmIfUn$=HnE~Y1cRS0}I^3QJ~%f#|6)`2}^ zqcpz>bLbZmg9y47E9WK)9J{<4aMH+%gZyoXq*nXVseaZrMZv|#N^z&jUX~WH0|MxyIJ6V4ND;{mxcj+?{R#_DNa*%{&Ja>;aXD=;{v}o1-+!4w9 z$q(V7X_)%+yA!r9?k_XW_N;i|9ot(|7Qk_~pDzTUuDo=}aBm zSm>$m&3?+Sb!iukPj%Y(07-k#0|;7}eqnc9L>Gw?`Z?cyzqi@6${(KuUeF{ko035f zz|7tUf5I~S_;++KfJy|xg&zw}5wpOe%|duU6A1uK({Her%)qaoW~Mcb798(xG>xXJy|R~=exOFUI*b4^-kj9);cORH91 zVgG*{nxkTYAZ48aCt2W0cLkpWCiUl6#=I`41CH-{Tdv5*fn9{SSiZ`NPes3vU#`9i z#x+h{%0zNSEx zFm|3;))3`HNmTjKm@Ka(UVmKIL&L75u5gv;hiTA32VrOL---j(Dwsxjv$mUcVlsB0 z+{u0wMj6W4B>^5x`bz3o-)+=TUY4n^fsW;Ih78kh*v)=EU6dF(dX=~yweb{+r_2dg zcng)0(YpQbT`3gp2lseU=&Aa5DQMe~bMkDNKJk$*=$0HYE_|JKC# zFL;4a9=w1_%xbVcG_-F1(ggU1XBaNyz5~f~M(j~P5@sZE?kvYstY#Vbr9sASiq(3qk0l&+71`0 z{VoQIczK0BaK-+Ym$qs}%d~ValOJ(#sgFQ`dVo9X(bdDs8-CAzwMpc!-NmH6NgrdD zIQLH#24nCxbi>;)mZ9I6<&NYjw9%{J&PN@8b|dMne)slo0kEtqr221zJ0+BaUiORh zRrU9%7>0DbBN=^=R52oczLPes)mB^d9TsN^%|hTIvjv)!lFSiw$9wO#X_Cw z&yr%R1D7o+tRD1#8Bz9-kfws@SpqB&F& zYCQMSf>@9SrUWTJcD%-3{6lK)Im^iaD-kE@3Xw1Rp=F;nUpyz^qQ_s#$-M4QhE-ibnnv%^iStFQ^Yx-{U!W%X>LGBC9?O3-{s~hM=SQe>N96`A zv&N{eEzwUr<|^WyMSE-nJeI4N8VpB+v9Nnaai2;Q`^GOVRuxZV5`(oe`{E?=Asn8D zC!JRt`!TG7&I)!0WVDI_XN!&WCdPjp`mojg7)T(lb}m zQpOVgfrH(ibYPAbqr0r=b)cwsk}L>@Z#jls{Ie^DFS-q_t-l%!c!=i%3;3y^v?$Ci zPDU6=S`Yl%4fMhH;{1nJ&O7KLhv4s?C*3YvVqg3pg+FxPss0BY_X!iPputa`4OV*rEWd6 zrx9v$0Lwg>=j*=?cgVPy|1@ujo6yzNSywo>D}pRK-&Va9+)N6ID19W0`|dkl59Eri zJl)Qos*6W2S_T=KSQYBEDgEy(07Q;0#<|4q5vk4qaqlu>xiVev#zI|%;fUCzW4-D0 zyd6_dhNklWv}_%FIeo>amr&|e`;?6Wcc>u1y*#Efb zm1{n_v=J6S*;LxWsx#y1y8GL0`bMe%0=-9*59YZ|9tBfcyUK|b?*1z|{*vP(0F;zw ztZYAR=?rUk$s`23FPqlzD@^Rxn^Hmy?>B{=rGGqvkKH)0PtPxwm?|={Xd|MSrSY&J z_(!u76sIkl! zN{lJO@JyJJQ}3a2iPa(;n3}uS>DFw0m{rpkHnDNpI22}PX7Z_^)O4Lfk2BlvG1bsy zuWloS64djGqTi+K2Oqp5sqnDoO13rX34Ii(H5pvj6|IwZZe7kfBXHS@+jYxurK;V1 zmq*j83F{DRmbu(>dnKIWK!G3gN;C1f^rig#jSdF@tu~UA{wN9gti$c9fwqm-TTHxL zq0@VX2lRksbq)u%>MgOxM3BYza}RDMs3Ts%;!1T2Ozw*2yQKm&dMORgm@t3lj`(?e zIBwSBl*K`_@-4YbRxj_{Xt&laVL-P6%j#(he|`fX#any=uVAG`2|POQ&2_mF!Q~_2gztt3-t8G<9oNd$ zjn=-vdo0vt)X)FXn)7`7W31v`kSOLfB1WO!ySi5iQ;H$p0xLr`Y%{*uW{~l{otNGH z2sUTn_Ay5hb6BphsQG6<3mdV1dFXE8@7;HS-FnuM*{mBJXsGaS@v>X7e3*6KOcG0? z-aB5DimUCRSD6lc{ZxS#f$HBbj|;DXBI~7M$D(pSn_dPIgndt(K6Y0)E!Su@H5x{} z(M|i}D1X_S8-o@f{OKZTw#ISelrEoGhY>fgE_~HFHrP2$+;5u}^5n^<%;*Oy2A}TE z42UKp-Af7WtuyEHhFh+?E?%C_aPl^j959Nl-|6*oGUte3dV>3obdn670sXp}u>|LP ziTo{nsagGW6>fA!hMvltFZc{$DBs=QW5ed0AF6S9y}exM-y9t_%}kH0E~@6YlWfcb z3vOK4UbP^uWRF-S2$9_@(i(MF4Wu!7(H8igC9vV&`?2%H^wLSgX*z5R^8aXh?{K!? z?|(e8l~UBG6{9U`ui9eOELvKsM%1XP5qpzpwW?~>s@+yq)uyPK7)4d>RYB}cVunPL zUtaIu_j6sj@<;x-^E}V{KI?JLdEA-#X$<87&z$W!(mgF7DGkNE-M5clG>GC06t*WH z`Tq|?{eNrqvcbz-H?C5;80))MuL`LpFjX95 z3?}=5l&I}7y=UW|WfVWq5A)t#f8ZA_QoZ?V7hqcP14X4p{~Km{-}3-)S3aFw@!>p0 z$Q*EWrh4Y+?^*TGc_?c7`tnSlCtrfkUFiyXW8Z8^q8N1ddR6ny?@OPlbq#n^|M3+8 zQw5g(YmfV1y@b84jn0|UAZEb{I8g*FI?O(6u2R`bRy0G=ku3>oeB{6yT8zCTR(8eW8 za5C@bs_whQocH+R0^)QJzc)_#2zxqxGX>yDYV~4re4AY$q6aVzml{ zxE4GoTI0znIK6*ln1sT--YadznlsK?43KftY{jT4>p@SX)Z1lECOA;X^l0twS4y)D z&Hs#)_;WA7U{^|M!3|2fXJjGih3|8De&U@Om7ps>gecFMDhst`N|E@)YTo+5QdyZO zmP)Q}7-vC!r|x`v*f?b<#3N4uZ_56s=H0Dy$h}9U27ne_;3BtBrvv$)GmH|H~&oHnHeyds5KwmxTJ>luqKfC{S&kY)cFtZV-nu&LPTU-A{Hj zFV;Xk%0BM@hmbOseF025`V{4fT%H16-TZt7W)a*DeI->ph@W=+O|yYur(w{T%l!v~ zMB=_Fyk(x;MIeF{$6!&S{i7~?E)E+uK|<2&Wa^*Hb~}HJ8UE?~=lM*ox|prh4!6oi z3Y$*>gI1ZdtmAhXbq2x=#wy5XPAx~6=Vj)UB=&e0md6%*GBeem`m_?lP%6LzYp=%EDEYt8973S8{&G&LR&}taa8w_Q z5htlo`Ohm1&l~bGN%bE;YI3b}s`obb+X}6f^=8j;Fy}Gv zz55H7jub`fD*X_d}^ zRHf~I;bPeQyWkh0^HiCv@bU;F1(johU4KeG8f;WCN{5d}y(>6eV^c8pQXcuL8pa2Q z_>5#w?9l&`9D}CKzk<^nv)p#?Sl*SUYNSzpOm)2aw0w4S!b#{;pTp71+bG? zNbJ}Ec&C7vA_{9A@u~{1Y>56fHQJx@=u0a3Rtu%W>e2tev(MvOLaSk|a}`vm`_aMv z>d)-Ps}~NS?+@!AEIxl(Bg&hN1BJ9G4E@~UT2ma_ zkvEjPk?RAUvcL^Ja-Yz-Q|-Enrp)gRs~-NBjq?2uPf!;?S&0;MOS6jsT2#502KrQq zM|gGN`zm|Te-t!byz-(r_?xu*lr?Nc;P_;a;@Z8O{$#3evAIHfx{0Jtkml*c5X3}L zpFxeqkBx#kB>1vLzAcl|-2Q~*GCdBC{(b%?=EpOB%au0fCSTOKr3sPIE=5!|>)StA zBlV1d z(@MHuv>)35{j?IRnx;YbKGeJ1eIitPd4$s$Bw|k)B!vqIDL|hLUIx%liUcyIj#=Sc zDh=+vFltGE_yl{~XVRjHyXuEqRGQxDJ>E)ys;w8A->2?1Dts<%199KNa$px01x*Zn zQIGj9gUV|deou1!LEK1`nn+W5yO<%)e@>J^u&h8Z>Cy(jnP z4{b(b6Vx@o()j&Gwp}-@(iwDr<8V7wk}9x_pHtSEX*l{Ia2j!(CYF3Ef$FmWv>l1n zL_hV|aqsOX()v})2c!USdVXR;+<-vf%FFu^S9F}^^3s%^UW@>qTHVeo|51p{c^g+g zh=+cP)KidiqLzz(Y1mdOc2$*evBXbHjjjFJ&tz?V4WB7Q40!iKvQJ)eQZ=__0z{q( zaxectWKBrDXJt8#{?K?Q@5f|1&^Nww@5OH%BqAd=_3x*pNV{GZ5kTjerK|ThaZ_i8 zx$wT^@LiKA6S!qIvgl1(X^A-bXU0AzYLmW7E8FKnI>3z9qF0Nd6bDi1tRm1#q_~Cx-UVq{DB8uh~l=JtlAJ59H6f}n9 z!|s&%XV?$qnwC5o^B^l4(0sl-$NyhFDieFfIi~08Sz0M(=KP}AG8eKPgk6A~k-9A_ z1Ml(O04$tvsJe%QbkO!jamWlzQ_p}rTn<)JQqA4VH@E<|v&gwj`8EwZ1Jd6O5}p=+ z<5mv7D8Es7x}e|TP|}hU(zM2qP453oQVE{T-1|V%XE53DjlFoL)&;}Oq-!96t}%xc zKB0?~VAU2cZh)m`?DCdIXon3mDGS&^OBYE=pjS6*+8dHuUVbL??GMD%SO`aMF1pPj zZ*5xNI#eYA`6xa;Lb2e_wN1;t3wpVZg9_hM@Q--?XUr|fpD9?zg2mII$l6vY8-*x^ z3aKG{IMi1-d#=?sebLR@v4Mp_)&NsC0fOP|rA;*iqGk7m9P|Fl1)Z=_%H9G?%N^)$ zzAE<|;g?RV7Q-bT%g1h(z6ty}!{?`*Uf_gTKT>ppLRDn%q2=c^{TdAwt zFbzv_MLMrK!s$dELKe`H3-DwERrT)~DLfliE1Iu8hxD&q-y*}fr{osSC2?~)_Jl5g|1_Hds0%Bf0Jc`Qbv-ZS~Pbry;zuz4#Wh4 z2$M^FsNHW5|Hp#o`jhBNbuJ8O+0(YUTRPrp17)HRrv1m$=H$emnW%gr73fvO5B~lo^ z&lE=bCA;#6yQt4u?%Rn;@=cK!zD?8&PdiMSP_OQiXyF!3FZI@oI_GI2CE}NY)Q>FJ zeVa5QsW}C7OU31+H-lPNUe*ANfkEntzeP-iy|}#M!9)t_+&epOH#weU05!9bC=WGr zygo%drCaxtnFj*m>i8k7@uJM}Ycnw3ES^lh+VQ6fRGR-#>Sr2YoR;dd&X7n={OSVw zN(Px9Iq!42;!1g;r55=;3GEy+C{%Ysf!6Nc-jmQsK6`tOnQfm>s2p`JCfWEw(AlX% zQ>%u8WB}-`o0r`lOqCzW^AU|HR=V-JSa={nO5B+l-+d5I_y{gM*&2QdbCbGdNZi!V z$+C+%t$IA9k!e3G|12aWrT)hE?IlwZuY7gwUi*6a{IR8SRl$aer*!nMcGi`y9MlUg z{bE&d@T))TOAzM zy#)RZ9wjk8KC{{?m@Bi4Q%784wo^}Lx$Xa`@j60iZL6Ku zXsq=k=J$Jmm?ZLE(9Ps>a` zSA}53mkGBoN%-L>B=W(5ETxu3U1c1lH3&q?US;KVvAO*S>86_YcXi*WrJ_-f2M&Fj z_6CX_h_aK`IP@})T<`)%pM3pF)ka92G~!0-XNI;?2d!Ii@6nkoZEtmHzwr4Nro6*L zz20yiEN{ZW zM)i6-?B~so;=Oxse-GjZ)A}Z^(MJ?4biHdm#66U_r~c;~*`}P87;V2drTsGZSU}iH zI=Ykr5FF&){Nq&2x_YGr`mS@S^9nr?NEffqFUT^2Ng=n#5U)&Ev))Ud;^ zjAYqWbidp$0}zbHoK7e9%L1^Kvu0mWTgzR|M?X)xq<{MDYf{J>lk~W{A8-zjYgt1i z|4IVBH%v?D@E(H|(}na#CJv_F0H!5(*m%`?tppx)eaMQS^r@UiX0p+emmBniqEzT! zvdg|Bae8Y23#2>P<~JST%MsIPMm5rrx_>ey`D-0Q6n9MiYn-0nohW+#&v1}5EEt!c z8c~qL=~`VJQpJmdO8pY<8*)L_(R*bCdQ_Aolca|we=!cvgudkv+-}VQFla1&!X*qd zHcbZMe4aNQF~H9d#FowK(-1#7Nz2=uS=N7^=cp1CF}#HM z^F#`zawZBg^w{}T0DDFQew`JnTE^N7sMv+{YFccMoh)~^ z_~fO#m8IVSDDA4o@roZVg}8y~s(aw7-Q3?;=(VufzoYEQmKsJi-N zCoUdu({7uEnby9oXYunZw4KALog;$$PkUvqI+I9h!}L-ipg)wvS>#K$088PMWD z=E3lZS9G6;okFzyVHJg8vKL{YoN))BNxFVo^#s>Vx6T(ZW50S#l9-E}p8vUWit_(n zH~;Te0oLI@An7PCoUY^cmOYI0Y2ztKKaN3n=D=5w_FL8(8&C%KSkg2~)Gm{urpcU> zip2J7`tj=H^VXlf-=iGRi% zZ54Z^%D}3o_2kAzv(O1D9Ys2GvRR`5alt}< z{hpV&g~ULQVGC30SGIeef!QERLlj>?#XqDOEn{wqPkYq zt-NfDzAIc#xgq0Bdwn|A@*m6RRUpWcLzP?Z9*IyxTbCyNQ;oT$+<{ZwKCqiv&Y@y6 zGj9F+(zhac3`|=)DR5(JXNH35^zlZ_2PeYz8h0G48_5wI@jgc6Ob_QR@IZ5-F`4m1 zU@xv(ii}n$lqxfd@tBE$S&5y6Pre3xATLbG0=9?uwY~nb zmbFFtKDqkQUe)jJy7CG{m?+yK&l5v7XHZeA`6HSc%yciuiD&99y6wu#ufv`kKjGo0 zq7(!KDdL7q*s5=BXR)1DC`S69=9XNX?QR$B`qvJfgR<%J1Ab+<`#Ko8o}#sqOKdy0 zqc*O+oGlAvxYZEIxdylQu2v+Y5Al?*X@wz1))RrCEUoBjS76OoC?@by6pPGkd%*b> zNYp8NA#DHBzz?NQ8%8c2EnE9KNr-w7VQbuDbc;-nY^y3ul4wO~gq`cNF2zRfpLqYi z_CdnP0_coEqyfqj;7^G=+@)1kaX%}b$GwTJ;B6Wcqk+gXVNwR(KiCw2{(Urs zIN4Ywb8Vnb`k$i@)a8hM(@mA+#(Y0Vw1h?2H)s*Xz@awcP|tgh+dF8H`v)zA$zvaw zG%IWT*@XwBD{$D!!cG?J`K}Rh_!1np<>K9KCVYXXAo>5120Nc z+8Mcr9CCI(k{F!FRTl!kb>UZ0AxPyO-`nS_5Xj!S(o+RXR zhfP&Azfs=c5CS!N@~%_6!cQRc(+AYS5R5->M#i>aPI~3AnZ3qjP5T<+$MEp@xVNa4*G{2zIV=+ILUs!h#pnRoc?g(^^61lGQ$ro_pC`2_3b@tgVO7y-kwqsX02X zXFYu}k=$DUdME+X=1_eE+7H~9>}ykh{OJnhYl6X-1WH@ysm6tZi>0JZ;UOsNUD(w0E0OozhJO22IwBV`eJ6 zGwJaVocX*5_|&T#o%oy+^|#p4m;6&FMyYW=gF;lQTpe+PvX{E091kLYtOCy|=9kKO z%hX|tlPIft&$m>`mV6s^B;S*8B{8~uML_;_PSOwmcY8gmv$F@P_yAIwcO3)6zscE0 zQpQ$P+c7Ks$G<$!4?U+3Aazf&%nsGbr>#}*;p3iqD?jXNr|T`VW*>iLg!9*vZvhvB zT&CL3rf*aA9eI_&%uN$oVPuRY;#9|t<|B<8jjmdU=nWcC9cH28oO6Fi#d*hLaCjMP{Ec;xpmumkVj_gblwi^2cuYH-GfdkMKl)_aIff_=t2cPAATJT)5S z!`I;w&d&Ef!;v4QxOcN%h?O!<8b!ZWqd8)VR2TXdhD#>*09W@Tx1KLy)|L~evA@a3 z?iudKv99r{LlFGp$~5U7N@$xeETDgyJiO3)GF#{7`2@0>?}cd?t{f`+zF$?<@i4Gn z_nx_m54FPWI(Iud@R`W9B`#wIH$KrqqAB7Z4B5rtdfoe=>m|tNU|Y$A_SbCX{v zHC^t0)%Pm((xHXOO0{m*oWS)Py=#1FX@P$mhWU+lc5~QPxYF1}JJPP@oFhISmds%g zIKh}x962UxZ6$?s+^oNj21!gg<6N}?IE?N+TiP|79j|+ADR-Ap%&NWFhI9n{Frjh@ z1y13Qj!lpbO?xkew`MX@hpnN-ZqV9 zvyq9F$^@x5CTy8vg?Bgvy2JL};fRkOjeh<}v<7dYJ)EqDxZKzmfJST_EmnUm`}V05 z@d?b_!HwqxZ7+0KPn?|s{gby&Q*DK`5+EfvYfK9y3$Vm@?E3L@q&f*+=_KxEE0Fob008V3Zefv|oC15@Eu2fUiomLn zk5pheOJA~giwKgkWHBKky{;ty0LFKN-xZyg6?IkR#WdS0K;ezF+qF8X*?`T{X==Zl zz;6w*TORE2QF@Ko147euEnQHx302(tN&DEFjfM8?LUoO%G*ON>`;_N|?*XqxN~hBE zf7;Vd*XMimJJ^zz)c4Al30rNV&Ir#*twF2TZ~z8U&dL1X=h3Nd+zS#qPg`kv>R|@k z+Vo>yLhZVyQ2733tBA{A=mAUR`6?~P3?-W|2&rdhb2r$g_XD9>yw0oWe!P~=5$00Z#+`Gmi0u(|zc#I{ZVwT0Q zf6+&g#{FrZx)K62I|HBoz0sfZ=A8FdH1mPMszU1P((Z9lc-%W`cD!R45h}#0$vBq2 zYINMBSDFDxP!WJj?b_ZoTTljAT3SbVF)~I1D?%QzpbA&22CWZSj9U+I*ulv7R$Z80 z7q*>oH+4)xw_O8e9wu>i^Ii3)r`tWMZuL~JjY#9iTwm@qYwjUlObWs_+G{4xCAG#? zFUiP1+fLMB-;Os7Rc5o;6;4}Uo~!4(TBvG(RolXIVze1B*JKn<1VB`ol8(1AI?4lZYp_VdwLK?mZo`bMdcC6HRJ~Vb;@yqeQ8mIY9LkPdRpoS(t`-1j97CWdA0))lN%;OmQ?y3bEA=k(G zmgm#z%R;`{7R5j0Rh_8@lFu#8(wp6QT!z^$@}`3AS}#BfcFc-oN8RJ1#x z(FA2}!m+euF3To~9Zv3dtGh)WgpkixnxGK!EqKbKasYNT9<-c7S^~!rE&62(SD(zS z)NEj-ts)Zh7fuOR#;Mr_@zHO(`DlEDibG$j2mLhaVhY;2!M>k{4G@p~m%Wx<-=Z`} zzs3Pfs#1=0e0h8;mi*=0`gcUAQuQq0qMLfwRc)oTExUop8QT1{ZD4&q;Y`nwDEplS zxv!EMf?)ZASw02qC;2`wN{MHI3WkIcN0#>VyH=jy-`d=K?cPQrQO7J{F6#StbQQ<; zJu0SOL$EX)cSfCe#w-e5Qki7{%mhs4u_4P@ieD?C*UoWIx>;i!?sx3<+bEXxEF!jVx*HVu3BkK=q{@2FLRZ z8Lgeia89mc$ zeDlw=_Ck$zLyg*CXb@OXy)CA-JFkhc2r++B4G!KUwQF4TK*>Ca3p2FK-vVaTqlQq>UhR0wC^{K;&@LQQp}B=p5gJJp6rktA#jrd1X(!6xK4FHdeYBQUu&0 z7;hb+INwtK&~@7{o(1&T4CImxMruc2YdvNRIb+z-)s{r8X{NwQh3H$e7vIS>uht@v zh~D9S!t|ONVkXXwI0?fH5E^aC+<5yl_%xCP!r5M^6u7Fij3!xRC}P(?b#FjJ&qzB0 zU!g>YA##2!`3Q4i9d&xGol_i>+y^DGl7FEPVh_KE0+Ndmc*|IRDl+)6q53Zpv1<`h z$OQNiNnJ*`I!{6ww_=X%!zd?+&oLu849SM3I`rcdVTH{+Dbns0h+zmld$K#uYEh`~ zyj7-SboCggU~`{u5z}7|#n+lv(_S3$hU@H3Vl|J$!s^P&`SIFkpl<~8FRhTSy|?5f z-yl0v#-A|%9%7=X_W2@^^0JpAi!fNc`FZ<%1{`{kEW5%DTPhmgPI1I>124jBt?vg(hnZ%eB7y&{S{fR)x-p!D`nb3Y&ykvT&{mh8+*tPp}n}#Y8R@+#1a5CYz zwbt^}4g>c`UL^WY_%BVYYkLNrWvdqz`I5}#5_O+WgzLLgcg;EcHbQ1~{>!H-QfQIL9;~D{ zfwGz*-&kUF@3eM!B7u8N9|1m1lD*SWf4=R9J1Z@@BoEwddD&m_92T5{K2Jw4(!L>d z&hMjswvz9(g`F@NCoEtndpo~5AingADn?OAO^?05$i941;zh?2bcl_fB%ZwbzV?rhjXJJKiT#n6NjTEot+*u0sD zemyTh3_7AHNwL`1IIaCL)|K}C(u4c>(1VhFbYJ8=2BC*7dIgSmKTU6+l|34G??mMi z3!A4d^SuaACAF-0A!N=uZTs{pgcxZ-Jd^uUMYQ;7c6r&OlbAM&zzonD5GO^6a zgpSi<5S`K*_#Xy)tt`qC(uLq;v;ZHtf^S{xI(&-=Wfc-#+5c6&9CBlsB97CxUrIFo zR>*nzOeu(Bxj46i1fJaPYzS{Vq3?Wg&^_nLo^(fw2etkk23es#KVkz`x!TT%E}|Rz z{xQRYFI{j<>FK{PkC2HxK`g39QSrxcH4~)2%!BD$pz|GNffQ@Q*bajso4{JSCz^x} zGtm6X8c`7H1b$n`gx~fEJBLz1NvCDbS%8awh}WzT@G`_*fG}nRT7HQ`$FpLV4uc3# z^yvjFTl!>R?^r;tMIA4+I$p4JbH*zTK4ld9@M)1TmNrUr zWYZnJ#UcRaYs!TqBk5gLEk{`EM1unnq5wj~MP0BfEQsvIFqILcKN48{A{qOVe2?9J z?BFppZ84H<^%VT%OdqreB5#L^JF1m{ft35i7Wkb=_nl)Bk)Nx{Bh%{x@{WXrFV2Ve zYltLB&C@hikjS3)uRY(+B;Ox}>`pH6thL?QHD(aK_!Rm@nC#u9EoIZK@`aJowJC10 z7UB8B*78bA>I*Ht@Y8X`fVcm%#iCZ;;RVZQ4H$B+;6?jDIavh9wAyW(#@db37~}hL zd~GC}E(nc*l{QIUw2dY$_zxiE#rOlemS)J>{1$zTP>@EH9~q9rG_zvbaRGM$S&Ddi z*k<%aI_y|r+cmNO%(dUxxINd7Dm4&qH;@d^Ee$plT_3=6WpC64QbLVSR#Ycly~4 zl`LbP%n6R>ZI~Ul+Vkcvd#IQydM??0cx3yD{=A?6m-cc>7cpDQq1oyMyK0O=z*pwg zY2$gX>utLGPPpnF3n)-iBp3?ZjLe1x6?+x0$P2UfpM~AkvFKM@`at*)WT2;g+SiX1 z#%YSd!7pNtH5GHYzhoRNn32j+V@&{yAY4FvN=Hx%8qd=3a(xGkvqh835DCL1nS0j( z=XnViEy#FKl$`^I}iQJ6?d(r6{0^KO=yH37($+z z&Im72?~cXKtg()ku+pcJh1vJz_fa_mQWAL$+MXkW)4v`w`2;@G8{Iklvd3vlB+Qo5 zlkx6i`^j)vnrGw*`p9+fS>C8T@TZaX98NjD&~^Qey3o?)5iOA=pfRgX z1PvBGp#=z|853ns?pGDMA$VneGx3fZ>!M~c{d%d{Omj7L1h&8fM*R#7^574grVhTo z>bmbvw+Md3>m!paU+KS6rj@r4dCqg5%Do?Q&9O`E{Lxr80xy^c5L&|a0WuhMOt(rO z#Z%JnK4J>(*CJ3B93gIEv>P%U-b&pnLf^Fz%l6>Y!a7MqPqqZ|cKAOGYdmTT2Fe|PGQFFSZR z8}qUNSd2a2^L(L(ubiVZk^%TtAizpJf6a1=T_H7@8rHj)Ok;G7nCS!PZlZ5Bag0AY zR}azQ1%&Mb&l8%+Dy+z88Z7Y#KY&onx4vaS>QTfB1nQ|B_8t@)Ns9>&-Q~}Glc3wN zfZJbjJs|x8qG6&jt=y3F?Z~rC*qP6^uQwe@3qaRPh(-{`V8ovmg1$2w%{0HS0r0iu@(pUwNKM6RvpcaM zNiUbsw#H$vSTL52TRb`!O6T)tObRs{>A=2}$>XcPBYlin&$g*xU#GrT14&0MK1c*K zG=>LAHm%c*h2=#hOxcpXJSl;qCD@iL)%vJ&9-x33TH0NW{P*h5ZT8>%hpQId{^D96 z<8n$@g^N-w5$q$bTmj<^tFQJ;daZlWQ4YQPOXOz#+#lkW;WwWr_X$|+4Qx)Fm!9q{ zUl?mXZ8f-Jk$m6NG@J@p*eE&TU~hU27wUf(A5e5aR0)_TRdv&YI*_=Ia=F3z^OvyG z>ZNWnX?Q7egJ$tpqAfxNRG;s}aGdY~FxaW3Ki?6+3d5=SjqC>Z$EQ$CBJQ^i?wS=& zg7O)Oew*>l_9i9JDVJDU1MEVCmjoGcn?vLd-ff7mbYZ*Ywq~xhe!%4dhE4pgoAd8a zfsV5GZB1={r&QQe!*pYm&s5yH7SZ%d*>gC|0C)V!BAUA7?!PuK8@+TXP#oYpaye&3M)V@L8`y*fRnF6nrTevajOEA$km>Rz~Q>;B8}hWCB&AU#gaYs@S+=Z zbF!8W4|2!Kxr4dCVD@+Y57(;O`fdP_q`xbFz|3vus1>e{qA`3s{V|9>BTy7vaS^hJ zJ%7SDR(iwHHXCr2^>R_>Q_786+o>raVUQT38IG=XUr{Lf?L;(4Ejl@fa2=myyp5Yh zvn~=l5T-@+LPbs@Yl5rPxQ)=&(j)SEuF~UVmjwOsS{XL+;DCFOOOey>ulh0d%w~LC zEa5Wwdg@3`er4Jx!}OuqN?pL~m1M=f_s6-HLYk@XPXgV6jxJPB{?K{=N`g6ACus*0 zJZ5`mSR3`-Jw!TR6C;F|#{^$_l%Q~#jL5`xpR*N9r)67M&SVzpG5{8dXGXHte+IRY z3xT&xk<|xZ_V=)jaMe2tybsQTq7qgP1d+BkFM;64YF5)^;b>SG@gH^J?e4bGkc`wr z0jr4E49I`U^$Gc_=Eaa~Dt38r9Qx~@rIJ)kLTq@Hv!}LC&=vIbdV01YpGX4S*DUMD z$u>W4sR0UXe^1t~xb-p?qc#PA4Zo&i3ceN%^SpXt$N>|db-?0VTUl6HJ4miw2)etecP;v=iv%yQo9(vMrXLXEA3#|qx^(z*Y-YyT zma?nkC;P^q6%dCfe?xUT^oJmNg6uzHxE;44K3NOQtRMv47zH|{UVQQ`61fK~F8vgz zg@4kf-xWhOf-??R;kN`51=QR48|T`P=PXkRhm2y`YwSrYgH%VZjzjD$O-5eYHwJIT z`@rtf+%!6tWQh7H8+@5{N4B2kz~&b5Q{#CJKPS@?GXal;thdOW*;a<-5 zTjl+I+^Vg$;r4x=U@q+*|` zsofbGfh2g9G)<}Q>?qL53I61hlZo5m0DfGrf`7S_-JmyT!}oH#YdhBuTxH+`2X~7h z*?omXp?hV<=TtplE);ybL12VlnQzQVPhFU+xr)c(!E)Y%x@e zEd|20h*%E|SMUr=fOffPS5o*62a~pcrMa>FJx#l)`v+J|2E}PszcQM#JRZ$E6ar>ylE@p1&QF17LQpuxi^Xv^O!ggt_v`TDU*&oN6+mkYbu0dwtrX?5^OsF zxCA0O3{Qc+zN5b{RqNAmeO>wDn-=E}TEc?b#)a!g>}}_e%UX{73u7VWF*ac~>ZC*8 zd5bjSP{?9&ic{{1wdvNG;s(t}v$I>MM#2({4)7rtEtj~dDjn{C>AKd>$lIbo3HGtb z%Xt}Pywv~nhX`yVYYBwzl0Em~%`36& zGj{lrz?cI&JTM`f<~aYFawv80t56>ixs?wulD@k+m)-wdSw&WCwB2NmjVY`@ee%Pn z8jlOMq$c?=xqEVbj}ot*`VP+%{p@LO_{=z7!N%J!SGo30ZFo-EOY;C8mSXooMup4T z%Bdb!mu@!Ca)}!~b$%1?%*3krcJ_E{Rs#@0MY;9|(b64*UOE`HR0_zB*^aWiO^vCw zXbbai5-;1F6gX)S$!pol9{vz3K8cDIn^F)-<&AQ&W7D9nixWG1&|oVI3rMf#`om9| z8KA2c5R#Kld6(t=;)TP6d$C1bw&iUDa(ikzwb0m<%36OZxqy^=f8ne;GtU(j__X0D z#&5%XL|H>%?(9Xs`yVZVGmjONT;i6sMNc@rTE*Ly*t&4;$*sVZun#jQJ@2tz-mflZ zp1DAo=F`)6hGSx1I;~tSY|s~}eo+6sL&ocILD7fa#{+6BL*eNuMvtldWXzESP{);U z8hp-H$GgZ(AKg}8yu0dO4hfnhBgbWJd++tgT@N zH!n3izfa7EhGTPCQl-=3bwld6)_Mie+H8x*=FRx8Dey3q+_{004`k@5kd0NdplkZgGk%h+tEu0qK_%l zBnm#Nw`SYkD=UsHchF2WR6f)YIjWU@wVrIp50WL!;|b_!D(9wUB5Oa5&j#vJq{=jaluZ$a19}M@8(Eoth zunV1q8*cJulAf;h*Oe9BB+t1USOEpsEz}ZQsfT4G`d^XjPixinqPd%`MSt4QoLpEL z)e1k4g;h=zCUQ(BN1NvfaG2+@MQ(pdeCMTc`}J~YKZvfaQaI$VThzDRm4Psxd+SH{ z)^7z{_c*ghP8^-?gtv|Iyfx7kOfP37m6f&<@!TD|>fnSkID#6xK=XS8DF81Rp4fTd z)#4jX1z$?+SpMuanxs$^57 zY_v`rbROAp+ZT#0nk#kdO;E0;RK|uLD`&$jdHe{m4@u@t$32?wPDi(xYnbxoWS<_r zY$qCJLlL>yXr8wcRP%eNwp%exkgP!;1dbGt*kK_6xVRWDrq%si& zE#xISWRk63(l|#&T4XE(qln1J@2!Bkh#0m8>Q+#eTI$G-2#~fcvi!R9gwILPR-jF? z+rL^I>N-^#TRt}|*s2(lLr7Q7fPK+s-0WNTcc|NNXcpL+ph+|u6%L%OOCypfBG~>X z!nilLZv3gc-MYmSg{Q6N$AfQ}o?g!~RQ-ItL1iMhh7_T;PBT+%J3TQrTp6Z%IQ#T3 z{@c1ZYiP*h!-;^tA8T`nu6o)%4MJ3VRI|~vNo$blHeeA(P&mr~>P&}2RcilOsoTJS zKSw6Dq$=+2n%|5Lp0-X*Qu1~OYf|HBc(}D|E7KHUYfM{iSvLkAH>x%)1jFwDq&Bs0 z36JjewcOLFE&^z<&EG+Knk&dP+*e6dAY}grTcIN?Mc*si68?l=qb4EW+cy^fF$A49 zpdQIYl!V;-s5rNtCpi;+KwSa?_g?ww6@*B<7+GbrpDedX$*DE`4c zl{~LvxOkt8voB};C;`{ncFjf^Jz7dA?H}27CB$s07iHxm_0c8N>dI86O=1fabmz2O#0X@b*74?5j~{of39-j&?*0 z@t_;uN!R5sGNapj;2zK)CmwnryDrATe|f>XK>F|d`ptN%XV@iYWVnn@qiy4L2K)my z!|8teB4(*QX>!%8*>l@z`?u}y9wI@hKZ*V`A%BM3WQJJ^)J#y*0G;a=CI^-q?ok?n z|32N%l-0C}KK#=b{9D#OW2_s6)xXD67;Fw9+DSBRwUV1A{yuZD@%15{zh@JK#+`XZ zw}aVwth(zl$$zzD6)gd7sA?x#cDO6fznezq^Ld$;56V+-YjorOZ-#9a$Xzc7^K!~b z%1Qiq-E&jQg{F4VuFXz^`vwA>MBkc`;_9d*?q~nPlr^l#v@EKwoazhDJ)bm|jMGX) zBhQrSb(A1li?u?caT!;-?U5P?}xw`M1YG(c^g%cSJ?Fc#~fl z7IY1sEoV9|Z-W(?Dy&w57~+?%tp@zl&-8>uJuI4FV zy-Y!jX&oewve)2FfelkqY8Q8Kc8ldQjEnnpkDTP-enZ*xDEy_K?R?V)3kEmI6PSIt zl2717@)E?577ISGV<&};qYo9QAz5_mkgT1kq}*tUDT&61T8WRx`}&)ce=S8E65mxC z#c@6!{BK+K3%1M2pX*HJVRy=#jGmYCdeA!CnHT1US*B^qH5(WSm_cbk>7l6kphXMfMYA)0%PG1W}U|-mCdrdl}V&47E8m2zu zc!Bl+(Frpnc&vl25iH`y*l%ryIT-+!XRPbFx4*R=JbaRK#TytZV;*f;;gdO9daXV_ zd*h;F;lOykHh9LCxF*jNGc!#y<*KHEd4$Den>DD*u7DH`_5AIUI6Il{P;EYqJ{TyR zo+LkpG-aTiLK7zqGXfl)uN<~$zb!yDYNqvnKG@~mBhy!8W8WPgYGbd+X%9}{HN3xByVR`W{ebh+4aC+`yK)|jt zxz!;sC-}<^x*ee=p96NA0__30s#Bw(ydbx1neflH#MrH8wQgcYig5Q~WtpLqwcY7A zqVk=|P;Y+0fwB*}$tshw2=6J9)X~4%RLOF5_E5mI6A^+*k}xWJ{;WDDKTi49o>}*w zNv>o68?0=XcYGv{-pX8K3BAmA>dBNk{XJVYy11L`fi{k-U4NCu^PD_II2v8ooGr?2u;(YWU};`n{$j;I-`J-LV^%dkSaCUA^oLOB1~$}sKNW;%6uEGYu;Djn+!9bsEw`Vk-!_ffDceQ-zlkX*Nd(~&lTC(ux#B5IO>(Zx}Qx1+-W7;Hj z9A6MjN0}G*X`5-qLzRaCGwJ4ht>zHmC5CEXW>ml4$=f}Z_v$YPgVkJYC6A_WI+d0s zI>xQ9IjD+R=MSP9+OD`?(%Ja)4`_h-HS41r;K_JXt^G#L5r#!-O*EuBfy#&HyUz${ zFS6V~HuL!3qhI#RZ^GrZ6kM}P|9v31WPXi(rxsWJE~SO{wxO4|Juj;7KT(zl&j#!<)V|>xX`l3W<`&K6%))4#%mYf1`dgCGRFS`2b?3 zzi}J;w5_z_zrZxTtix&^dMh*l`l4SSXBG=HxQ@KdTK$QW4wB53*XB>Ua#M zr2C6!-=s9omlYpK>t>_5l%(Akzf?zNXn+dvFRYp;^qG8(Gqo>EStEay20KGs$zsA=fTv;)-vU*Udql)`V zul@&p@YWY!o*6xQjVE2#3!#x{RIeMPt5%P-OApgLg7yvH0Cb{VkpPr7UJwrf_nU-L z-XYhdC>f#8n`Ho9i-&ecN=ZrpM!%$A<4?)|vMeJb5qwtJyhiq=w8HwLdBOUl>G5s( z8Z(d+keJb;X%ZyQY7M)K9>-ZbT$!A)$l5KrzTWOFz4fQN0lht|ho+Of?4fz7&TCUC zw*(w%ULDkVWt7FAI#aFkW;VPl{*09X@Shd=auEoW)fK)0_&32v1Qhwe(guJM_~$Lj zwrrmmf4s6U%GH0djB>nPOyJmpfIQ@01F&By#gCNsJZqw4#8%5!fS#!9U|;*rfja;% z9^-ca1{-Fn^ee5rVlR>WCZKg8J}S8C6q~|jQ(b#F80&5WCa{LA7@S&i1G~0=h1{G&)K%B-wLGMtPT@eXMIk3m=zP_shA^qR+Gv ziQm_2U-7qf^);R?AtGeCPLlK1gL$bIuPS28^4HvP$ueoT2wIGFf&wvJD^tvcVN&IM z^}rKT=Ec@^D>x_3`4DUEbRc?Ocw^DC9M{kEv9w+@`op7dQ=Zy;A1!EVdDnRR4*=|p zi~FaMLB9s{agQcn0%oYqYde=@>lCMxxv&|Ffx~B&`I9Ab3s|vJOxzU$)ij#+7jo*b+(A8>2wgKoNo zW42~n#@D?D_~TsTjrE1^vm$?#Q}3^`wUq>8IZ+%beeiV+9{?V8 z`aHY6pLy&7AV2PRsq!^N8PZOGv9$OlZrNE$={T%dwcB*GQi3LewvN7b&Lau4TY=OK zB`CMt=>6bo&H$3Oy+!lF==ae*N(X(mGLVzD3FkBcC9Bq1n{eftEkS*K)wZDFf2seU zVQ1-2$y-yylNH>O&CxzCUeHhk^49pVZmZ8&8(T)_>ozCLERSPNOYqME?6c*7U8zdw zs|LO?r88{`I5D7c(=z?M@MYeZ;b%&{AGM>Kb7xD??#ML{cl-$TrIz)Kv+a4T2<2;w z*&;sN8zvcx%xP!cCK#ytA>cXjBQ7=k2-v99Pb%y+hYc7CUorP8XP_y@20D#Hmv^VG zv#|0WjSCnjW%Z^|n)PK~l9~67<-_2Ih+X_Jw`yC^$u50Iz}A`7TD_*8a^UZpbTjtk z8e5jL<6rSV>9nkQHidS~ihNmp9BESG1TwVvbD6_iTA*6ZJcLo>dW}=zht3m%{uE#@toWm%lW{ziT5i`TiUy{Ps>_` zhk!3;y*l4WEzY?1N|rI4*{%~M`?aFI1KqB3Uq9Lbz%J*PA?tL;F3}dx0B}hKx&G8q z7JrhyNWziV)F~ETt*PYFx7331)FQh z5%uAzi1V9oRZZJR(BA_1``dj`)R)7?8}Hg|w&z$@RcrH)n0KdNuJ7!}9w(edbtHx_ zTA(*RzJ^p!txG)kE1kKzwU2M6uHW+`vU=4>R?AUiuc5svIfqBBZlIgwiABOKXl`MX zI{=(%_c?$L0FD{4I{*N)a+S2n8-Rf69e@@mzdqJ37ARF48!#iKep%cnq2wI@IUnpr zeOyeKzOXEdG6TS}uj~oHi1g#!y25{1x1^&uDh-& z+&)cO>y1$v_jaJZF7#HS4C4(!md~Ca3;)so^ghug>Bs|* z{l=gZ8C;Wv$p5gIXUDN+Xz@Szc3G;oxW?BZB-1KbAXc})m1|=Fa1;8+8fz7gf`0*= zRfB)Yb`<=Rpj8DT4W93!d=hFH%wv{HeZ`MRk9ZxrZyuEAY>?-;QrB~T_&46i?fPzO zo-I};;$=KxN~EXWt3Xe00jk^r6zeYetGx|qp_d7sUKuy6*V%Asve2!YX8h#VdoK%z z(O2s^i+q6_Y=9C1CfQqhWuNonmo7VLgUHGSA^(m5c3Rj^6GzZp1boRs=GqY826NJS9JXYW%=xAFw6I7S!t2rrASv(5<~0jG)2Fghzh98S zeIG#cOJn1&#@kwl^3lynIaHZElv7vTGln|>x;{zH?=OM#G~^k-1U-4+7K#2^p;sEs!aEIVqfJ)O8v9~SabSxUL4>YH263MwCpy-oSio^vkKXiEV z8V9+sX}rUv3opDD|ImG0=(04*{@Tw4$a3@k@?N4Bd&x@veD%egrSv;F6Kl8qBp?W`e)O8~OF zj1N1By3ief`suaBN5H0f*#PDQ`Ye=5d>)B&v{Gl#Co`Bhi{G-$)qY;H{6*cF#L7lQ7=Dcr*{Y1-XVByH1u_@xynDvbC7L%R{3#I zl+KFTv1xJI^CGg}pRp!J$;|j+>niNi@lUr|NT_~t{>?N}u8`|UUB>FDmZCS?b}pKm zJo54r(NOe@y&ic(W(7|08b@oa?dwbrJ5L)QZ9J+Nv$Tkg1uP!7ZHQ-PRB}s@)dM`(0?;rKh;9pG^-rWu{c}nPW=TOKaPg!xX-i%M_!qip&PYEh<8bCH zI~J|kXX~ih^5ZZ5x%_3VY-dk6AI{~3&w?kmZo|)*e^Qm?4Y{hRSjTVI?0mUO$#rwp zgTHZEi;E-HCNtxBT|UvEqP@LPHM^G8P)xTsW42n!wt5DjD}a5SoyxZW)$Z%t<_jev*01@xzb5@cbC++Hd(0xbpOe zDqK&elGAiU*&-Z=^4tizh zpRBCrUKU0|rOt^@>%I>#)UJLr(4u5GG~Y%PdM04vClLBpK<#q@fc5^J(^#|K6jat* zI!^0R{WAh1@5y^sstjB!-sWR~(L}3eMzqhe-Et7u9D#9+oib_U7pNf2nbgLB|GYE+ zzD-~?^CsX&fpT>FrtL)^8sMKj*E5aE{HX%Dt7m}j6XQ?W)p5V=^AYLa8scr%f#X`w zvhcGOpk7*zp(oI7tXoWp_1f>v5&+$uIiG{M_rt#x4*?4h&jGsWVjlvFlMlVw2XNPZ zAWQ?mtF$e~2a|}DMMir$4bC_vTPERng~^|xl|HnP;{&@a?27ujy}7owf7j4fTY#om z(rN+s3_$Q9;0VoJ+u)PPf|a3&o#@g)(Pt;O=UQv8zbrqu>dT$^O;9zKN7}J1_}8dnd#2$Z4`ZeW(s_x*ew}=YHLv|N+FcQH zIFYz-5gXyL5GG$v^?~eK@0@e;%=oS7V`aPtwXBrWdA8dE)JD(n7NFXPfMd7%wz>n5 zw4j@%!-@%SM*ip`ACs>OxH7Lf1*PVO7h|!*RS#_qj*J+*e9)oyl~6MjbI%4?V92l` zN{o&36M^XX%ai}=!{Xe2jW16{?ff34r@a|JAL`hdRk6B9K3&4o#q9O3nY#*?8DGcp zNSxaY{G0rZVzJ9(*;_jYrGAt8fNZ~j2U@)Llkuf2;#Ui`K8yvFb;b3;X=ms(*NzEC z&WsN$b+3{O=oZF#q{Q0(1F)~_tRPeEICc{A9e@savE|a8(e|z4h5i=%^l6DLwgN?b zmlSB$0)8PQ_KkqPT(Zz+JCJ7^D4$=jWJWoCbB`jMK|C8U@oV+gpatIqi^-Y)boNHZ z`*e{R<<`wrCX#Fs4YrJ6OABjkIZM6+SQ)(xxYRi;;IHejAi5+s$5FOiq&+h~wgCTz zzcKKy1MN~O4lL)zzC7bo3#x)|6)tchYZ8&#p5gT~x?F&&`B0o{rj3#{+jlcAc%jDC z?)RJ*I~ecRkhcY=UhgRst@E)1fMd${^(q2)0XEtKl=A6hNQBwn$KSd_h<4_2yjg5|+87DTd zr;5Z!Z(Fj@;%0XMz-ldhrG{>12E2dgM&(U;tq4*b68T^d^33 zOOEHmtUT0-n)kAg`mTCsQCDePOiK;ETo^EA5Z?_r$uljrVOuFRY46z=QYK8j?EJrV z8n2P^>~Go1b$w@!f#Lkk<4SZqcoM$8n!WyGsi$8U>1G_AdR5^I5xbn#VybOXq}k@i z$V_V?B6&qdC&jnes}Uu?*mX_<|C}W2Rz!!l7U_|nU)SrR!dl!gm*d*0n`FkB=fm~M z@w&ZND7*bj#F~!wrh*Ln* zjGSJ(55|R*3n`j5!N*~-B9}H(dm$6@d34BuX{xCIkg%;|UgHBbRcFQpl7Ui>loYhE zumzPqYTmc9qSOxOsRUZ_b8k!eI(y)64H{X;+yhRw3{O@pc|PEuEuU#E7t4@;%(|l! z>zD6I#12ztTV&TYfiKtqdlG-HKV}!X@^$ccxb~%E5T*E`qhI`+s z3+m1mq5eAnN8HD@D#-)O-y6RTG+5qd5%-%{d>cUewG=5eNG0u_2bkANynLzN2SaUW zkG-Z%;LiY({#1bND-8QEeAeVF-;FlROy)s*{P}>g#`9H@obXQrYqHuirL|FtSsZ*D ztQTAq*(TORZRprB>K_Zp7@ssC>g(aW5TJtzpyqX+Wl@6YV+LFowfYH!4nYjyRa8ZQ zHV%XN_@2F5vXt(WjV#{3$qE97eJ(L4dUa+0^xJ*nAj z*GsS5b^Um>8TJ5>5?0><5NU~v(IR6uVKo}yI0n8_ffF{l8krM$=-%@(QPbC9OS=L^Zs^HC)Q6Tkb4ElX(ZV@%{ ztf7a8sRAbn{-bcnPGsu9e_6C1{4?!h!7Y=VFk62L%K{*(1OJvS#-D%?BNEhO>)^oa z_E-N`09I?tsGdZ|^t4_F-(D<>`B#>DeH_=n=n-~$ZhEpr+dR4K!gw3eM!)e0Mvd5fFNoCXlBGOZS__l*OpYG0Y}y+tu{+6 zhDB$gl4`~EHsYhgf7TmY5N&@?b$Rv=qjxIn124Ubdr)}dr%{uQ5?+6v73Jw)SWnc4 zYo~bIGB5}H1&CUAo_uLW|9ar>&$D^`S*HAv9925_$!&CD|ZKTW*nZ=U!s-0bEseFF@1Bi` z>@qGF{lw}Mlw1X^i#`6@yJA5MX<_X!TYYo}ACSuRWj|T+77W$pbntIM7e7F4f+EIF;Rr85}uWw#EomWxNy_}P2R-A<@-ooVrVhf_M z>*}`o5UbAKI^aLAi7k_JyK9zk3r6{Xx-9X5_1tZpp9OfVuk3jjFgop>rI%71)w#B8 zF@~6#!g+4n70-$}p2;#v9Yw4kt_K(vphbOcU)GM3Msl~_JeV!;c z9}u3GNb>e$zL7-0vc>5uq5qm>U@5=Qqv4rwVsIVAuc<8(84IAcu=~WoU;d%WR)c@B zx*q(O`1h&6zYZoDAKC4bwr{*&WwRna8QLqRn!M$PNgJYeD*OnR#b#baKSP`@&PRQ4 zc}OkZ2lLX(=tY-!fO=WI<+{iu7wi_G@G}5D_*;~1iV*VRH<6Hp^)JEp#Eyo!LnU&J z1!>>OB;Z_R-3yR`@o1&2E9}kxvHcNjuTKO3P;U*I>hmp*9IZl;krYg-)i86Z5HO(< zG*wBq^dg}BT7iGbQ`)Wt|CWE&0JE0!F9!J6$pHV1J;g5uw8usp3yA9gw%%^XmpuNc zoynrQYC&IvI!=orSrO;d@mCu&Tl&E0u9ag*m)rCXz*)C3%Dn{O=YJmE|5K3wFjRuW zOOXWPB%qney8!Z|$|(QwNr*ks7HJ4ph7De$zD z02Cb3xxt{@@>cF;n0`;Vs_zDjJgpLeo{K#zCt{NUPL3yQE(_<8kh&ag>BS{LzXysr zy{m!0{6m#zJW-`W;NSA)Ie>rLLRrd!V69*+sH+3!MOjvBLYAY`yG1m3{#XAc>3A$N zVCXatp{#QjSssbCJ=m9K`L{&+F-$J;OdAII)%7o;+*G(Q~%Xd|6o1>sy|4$)#;* zsayMd3Y%NojaZBNH2HF|E2cA)1I+I)~QWs3*>QHLL*4342X=TjmOnKK!#{smW7OShk^vd!AROOR|g=1JV=Gwi2C zbq4u-d%A=p8kATg*s3{A0*R$8td2L?l4;ket3+4W+f43KYfXgg2y{5u&)#+q`LS~Q4?hTP z7q_JL6U7Z?3sv0YHT)7)+d5o~F#KQ_IbUw0%cZ+pB)YWgp7wSQ{EtKr9Raa8^=1g;KV@HXAS%1ugsy?*bXQXS~?Do{Pw7zfZuJ-HWy=)1iZ*ep$_I0oxl{NEuS8`aM+V;w|Uzdr;L-(LA zW}AMx-jtGte|lM8Uh0z8FD|xtJ~^$B%UXTh(;Vk)ng#4-uCnTJ!1|pM3jA=MKO=b;tYj2Z1-F%WQ?pC?EfvADzm?M@tv1lC~wIYU}({ z(;}4^AHuqVZvu~S zi7CY%@W1q4$l3*PJ3F$p1$^W7d;sO^D{&A9Q)*z2-+rq_HlQvznuCA;+_eV(*SYUs zm*=dq;D7CG<8@Tqk@5*jJDZ63nyPGuluKtyVa|TUs_W~3lrsL?+pA4L){$l5aIo#~ zQ@XoHKCH0Fg6{3U1K{6fu|d357Eb~s78|I~MXaykNI;-6#D=4SLwT^k4gx@2I~vPN3hvV9=5sGaron&P0}XMP&s-}6K~6D36! z3usyv1unNeEx~^bU>AHV!GBRsfqz-A(KMoh1-U%&@BClm5BKce)nEN5Lku$x>Zp;f zye`5pR=s}q9{zpWm2FC;Cqx2py!SqC5HYX9hl}-+4NvEs0_q>6qN*^utX&RgBX_tcv^+he9~{F0Xm=_t;zL*q5f!fA^`Yb0GLh~|E@s)Gq1Qa zAlW7C2edptYSoI#64ns(&pBAd?SQ|{NiNG9fPWeDJ|+0q!4L=Xd=TVm)h$E@BnyNc zDd7aw0nzyUB!^pE#{_hbJnVUw6OlSUSWZVelt3t4IW`hGixFLnIzHCLDR2870MB|p z`fmX`=3Ms>upDLevaKJ6s0u1tK#(LW1LeZ6)d4@`8@V7&f=*;Xr)*FDsb0h_xwGQ< z1HyB^vdXjMJpGgnf?6`g>fc1^^Z+56}Lef3AYyv)rOOwtg`^mvDn~PkI88kO5 zv8*aw*_UG>i4Cj`A5{Bm-}O&e3ZGlUq6+>iK%?u5WJ?0vQu|r3DEY&+W!=^v2b2Z^ z2!BQ^K)f|g3pPc6u8F#}ae6~JGFC}+*{lDhPe)>B{~pJDANN!nRJxvv^~D6pvRi?) z#9;mN08$d5Y4HL4tZV|RZQn@$7CuIk02mTWf9Kx7@VT#(TP2jv{P&&>DDB3e_*RKP z-;*cewg?gWm+Qsc!=V%;GYH6W69RwpXPKdN&Ou0 zFY-X94=n9=I$+o=ixWS}*C}7`?TWh)6V%Ot_b5k8puPR8KUW6m)pD)2*4Ns9blw02 z0A0ea@-?7(u#qP9_I;rbSSBztR~cCQ{yL}i2{-l6HDaZ|Xqf#m@loGY6X?UKj2bBY zMV|H}kH!8=Gj*+b@yphcXFp{rMpvB&a~aacggs}>whXn|HuNshyl-+|Z0n)BiWiu3 z)s3B^WLCwGZJX1s@gMY6e06k-T(gGCGS>q>W;va7vSy+lyadf`^9>cXX4x4DYzDj zy!nLJS;rYQY%FIADD-sMoL;R2NNss++mN0${t~T7$SxkObgV)G`UM ze75|aYevB(myX4L8ep{thGkjLz;_DH#np6ym!fI-i9+w?Jgk`e!c?9GL`P*Zj@CHi zMwm@PP+Tbo%3?NkjK%6_7EZ6$0?l#--xtbxcELhR@Nao*1M#v*0}kBzD$Z8bIae%( zkgC=TQXfiVEC8Uc?ZMwdC8tj-^Ja%$#*- zJw6h501~?UHK&AuL0fMf$Rdbb7D$jZ0JMeg1GGy5Bu}0)34r3dm@Rd7;@G2{>>m6tV_;oo2?*;9&0R9u6D&X(gP#}#9{$p4D$I|Bl{R)M=A6)cSQT)TT|c zWQ+4=lAAXRHpwtl2ZP*&*%aU4R=k}%UB5W9SRqbnS5?ZSl zH+|`5e3)}E=tl#Rj2&gMr@&jye*eiY8vOhIUpM$~`_L}~KAF+_v|E3qk~Lsg@>H5T zk^ZeGQ=>XQ1D3OYR+v7gjaBM$Ba@@XivioNJaamhTU2KDnL7Y`O*bPwCq9U@j2>*&0la0BjvtKd&SJkYTgtFPQ`Yitm#OQ9BF^iu|OQc}&>yV-C?h ze^n=npQRSPh9fBymU`OG+DnGVHnd%sC!wkXN*Noz1j8YL7fufcoDEI`K#wdwC@)K_ zHbp?L;f3LQ8}RQ-xmJVcQ|8dYEeHHo0#Hvr0J!@Sg|AS_`Y7vL)i=d(sOUp`NG;g5 zIB%oK+N=Lg;AAwcms|MYpwe~ZgpbFA@Aq&App7p{Etr71P00b;OP|&x0ilP2eJ|&S znx=q%C;o5}0M7QJFYBHQDC=f&RSyV{^*a1kcql;wxDi{*LT>=*6GNa^C#6=KG|&EeQe_u3G|qPUjY&pOb6_{N>7a zz~7Ub18ff<>)0p}IE4j^*OFe|P1Bzl5M)C(NqAJhH&QEg#+TGnU$5nmJN5E{Yq2e}~^LS9n|Q`**>=;)2BG zU5X{NmOr_EQO}R0lJkJ9SjDPJ`{Q^eSk4|dp`SLV>*A6ay(AJvRqdkqrPiLMxy*hD zta}l4(hI#wDA=|emf9UqxB%JweG7$akp$QpuOkWY{q%eV1ZAcNHUzh}1Wo)OSmqws zz6|2>7{zklpJ8{){~f_ea&_R z{;u5mQ#5rQU}ZSf(M$yx$;&`{S(4mwbuAYt%8Xg#x09iDF}YfN1r^hHa(sB;-n+R+ z!hSpF2SApwX$K|s0pm+10T#G^4oQHnt1bz!z0m#c|L?wzv-)npoJUU?l$sgdW)lI< zuen!eBd%uIxk0unA&_*{`12eo7O1ub{Bzmo3;gFiGM=?`)O{P&Z{ziW|3Z6n@K19Z zHf{eH-{jLFNk-<5?FXJnwM_%dQi*1XOslsR1{AFMk%QE zSZ2K0}d^}xTZ z;h{(bG*6kf2LF6}H1Kcr)wO|t$u94sUd_Yx)mNUyzR;0+{Tzyw`RC=S9{i1*bCR;x zuY@0j3tkk8#iEE6ZX}niZ9HNq<^DWMHV$k8kTR;a05JgA2EXkn=VaK@pta8H0$i&! z{Cd#mmIMG(SZdxaITvlUC1}!)i3+tJHTgl<_C&6kSLX?*H|9BDKj-3PIGckGA$n*x z)HsW^A#ZJR(~eZl@ro*|Q8>?W>Hvw=8DH9zHf6C?koLj2Txzw|YQ;MY{#Co2j|}Ln z2e)OhrZF~8T5tWSq=0bSND`@(&bQw$mQt@Ryi`4~_s;(&ul}4++VINvae8xM5mV_q z013Ej>!J_BTT>E&U%>tXVDm`;|7M`;O#*=O0cKs7?=R+Zl;4)`{r@j>H=yTPp9oAt zPvowE?W3Ly*m9iRi5_i@c1*0B;oAkuu%$|XyvB=dK>vdOse%8wz=sB2YM__iz`t0t z;&q>*2MfT#f`7(09eny8F8%U+V(_pH0wr%{f7m_}%kr`|AX}8Ik74oonT5leSw7Y* zUxQgkY(Fy6kvZ0YvVJC+SAYWj7NF{ffGs#T@?2t5z!ZWSV7CCRI>6@dT|DLoEZg;-Wkd8?*_>FB_I4mK+#pSw?BwoL62?3S$}sx(>&2>#T2Jn5otnI zLDm)8B6Qo!HzUV$UnB7M_0(VWpZt`istN>U1+KCy|?8mW3<@4@kPSO2Y8qng}?1RIYJ^fLfy?|;(A zvQ2IU+Oi{xaUMxbB1wP_-rtEN0MZq73y=nqfLW0TiZ%cH|I>E^2DY*Vtr7u8*9?b_0d8?Jn$y;xp0^$Mq(;I; zKD3Rd!2evZ4e%dp3Us8(^6iU*|Hz$->jnQ2kZo(y^jgIx2(~rNcscN|ij!6)ZzbW& zZT&IFiaK^BDchH|wEE3IlnuLN-PU|7<}5fjT#l^pNVSXGQv?3F_TRui_IDjwb;TKTTgRkp#?&?3Ba; z)uW_bKa+owM8MElBtj$qR>^=Q)k|st>r#oqwGsz&*68DAzXQr#d?{lU(N1uBsprU?2Z6EzxYz4ruDa{zAuqe9 zny%vN|0?~(NilV8bqByxdte^|1`yu@r0CWl@u@WBgl!%MI9ZioXXK$^vHE=Q#Y+MZ z^!HQ;Od+MaCFoqV=5By?$4BsOqeMWLaCS|kI8JwkHSpx3-x6aX-dbaPTJ!U@@9 zftw|%V{Q&M*<9XvkQQKBmIKjao!l;~FL~hXgIBG8bsG%0cDM~|ETGlPMVlc+WJ6!y z8ViJ>oE9CJ`sZlnR-^!#I!FU1_$SNU))BsVk*mqoewr>WCCIKk$@8yyJ#C!!%_i(V~w_Gw7okG!8cLOFmR=+W*JP8wSa0e&8uqhp#w^kMJfPi4LZ&6h zjdB4i5z4s4GXNRG)qLiP`v6LFlDERIq!|eFn!~=u&7J`;VsQrW z$i4;?NGsn0WP!gq9g(nGXG|d}3(=AQiCQHAvTpS?ooW&QMKh5E%ns|4fZn=dKLg9> z0^s^>`99Yo7cqAOtXk%7z@SG-1V(8RunWAtWI%Vp+A1MfDqqr5U(?^3+DB{^>|6!t zFL~Di|DG@E?Yt%i{L2y_s7HW*UsD7At#&+j@E-ubl^^@E0l8)`Fz&^^s|1ZEi`0I_ zPJuHklM!`12YeyRT0~4YA~?XCIY-{R^ZoG_r>)-xRN4a$51DR4)fS-QT(Db#@+~bZJ%O zUL*pt&vGkt-$q_vvN9Psv$sqLEMrT$_5@-3fZPV~a{|u`_}jW_z<;d$Ulj1K(U#y} zJ6(30v@*2~;W4S5KNbkv5=)=BzEa8pQ`cn81P^H>(j#J7=K5bR{}%Sp7B~*dbd4ruOSn%YykLWuBf5s z5B$p#&x7s3zYnNYF2jfD+kPxvju)%IKL@yU|A>BBj7!G1_51!MTe41Ow#0bqfpd%3 ze)@LXL}fQJ2;(y9#k#BinKe_$ZMAAi&la4H9?4gL0(}Bd;iI(J<>G4li8Gy9wz@ia zwopP=IyrF!#BvgdyH+oo1fbBU1K64*px5Mq;<^8_PgbV2c3V*Ye>xEWV81?eTEgfo z`FZJ}9V#IhbzR3b{Obe!_9CGdvszp;I)@+822!9#%mSYH^B*xaCNwaxP2TEV{q zcD4ZjxhOIGlQnCm>%qU~LLIQQS>k}30ix#E$+j%zi}6dftN7w2B5q72h#RNt))PMh zDRX0^Wz0%w4&(#CKy?Dp8!Mrq4U#tl7PG`cN&@8MBo3}6u}H$8_;=#JP!dpXU9x?q zo(sU!+zsge?`;cO=qPI2Bm#2{wp~^CAj3m^5#95qW@6g1a7~H9_Czg8)q$NCi~(Iv zi;aC){p*1LSZjf0xsU_Ss+CExF1z|+--68=Q959kyF>%wwl33};;X?lDdj+R+`mY_ zMCJtxgl&oW&ox_rV#H`zZ6&v{vnJA=&x|`ZiAdxOdV9=ey~?&~*j`V|5jQXlir;Bo&;M9RRkD%DWCCR1GHqOTPIpso|w29k}aB0IHJ}^JoE@ zw@Cu#zRv-%)z2Ph39U=Ub=!hQj%Xq<;ca?XK-MJdX5^!`1#wZ8y~G=WL@Do1RVbWj znL7XgAOJ~3K~!rVn_~(sNVnFu4uGRJo(}kzC7vhBSX2SYl*Ovo{Ic3)fgK$X%jeA+ zDN%5(`OJdezC7ZmrbD(O`N!+M$SXfhcLLx#FKbzUWc91VS#F?1^&`+PMNJ*Bf6A-> z0Fe2M@wFxjV!r_Z;PX9zl`cx4P6m3%T=l#$K>>h$Mc)W8;q;0-7T(c#IKo{y34mzJ zz25G=B}mrGaSElgA_l^@P6Q@8H@hn!%f;cn6gesr^GINvnP>}pw^!EANc)zP&~h{2 zZ|f8nSZ7g=lsJ|q1(uIBz<*J9#o%8pcfr3#yq~((IQZvAhz9;+;M1guU#omtMXVjE zckN`vvO%@knQwkA$Kd%98PS{@@pHS?W5CDBorR^1#|PTxw^wfgI#G#(1)#dwYe01{ z$-f!M0*mi*5-|DzQLEK6wGRl}dL_=%H)(uL8Ak~3!Te1Vfr*$5`&%Rfqij4Okfdt- zsWkB{sNQ)78n@8e4)pi@mjnJ~MGW|l^?Dy%3;4Hf#lS!Bx9>9#u-kxtjr2Z^j|rWZ z@ry}H7!S-Dl9xO>fH%jHI>!0Y7vV7_veq-Pvbg7@da<_+-@>LBp667QH6i0pTi`XI z-))ot2(VO00=9Yv0OxFo1lUS~vh6nlN&toH6d=b8#Yru5-k4Io4_NT;)j-hWk?xP* z?yW!i#WQe`W1Y8Nf2`jaSx?6yv5@o!?f`sm-y`9uo5~;(lYlADHd}!5d23NL37|Md zf$L5JR1Z;r-9|}3uW^gJ0rPqps$V)0=zqoU3QYJnO$L_oy5@QdY|MD-L}8l{ye-(* z_4rsi9?LlicCl*#{26=367PWjDDW4p(ZJvK<#~aBA7EQrb+1GPh7Q&@C{5S!i)$n( zzcvnVI#+M~X;qdvU%WC8cvGYY2K86LxAOF50LQ~d>(4npl==^B0+8{&J#ftJ7HI*< zO~7kDZUY9&0mCK%C9qaFMcvyZ0SZKIkOV;SehHNO|4Z=J2FRDb8$kQFI467}VEJSB zluoDMGT{#;0})$-T}6);GS<)7Z35t>s1-O~W34^t?`57d@E189;NREAz`qZo9iJQ^ z{Jg<`$sPy)8Vm2=`hEXet<-nyzJJ3)fiEk;aKo^}sA^%()gg@0C4<-7_88>IOG08F zzH3ieJ!csY>}x=~bh-mjSn%)FV4}wdqKrSb zRqnyx_E-NoNsdYCal^Njp}r4Cd9!B#vJ&qyfCHHTq@2IE@-09T{1Sj;29QQ**qV;& zRu|c~g5HTFz|v>+%tD6p`&0*`X3M()47Z}AC~lVsj9is>1pqL~z`RPYsV6O9>1l{Z zmrfSyLvH(E&FJT_bB%A@!b*CgYgENJ7*}C&Qf156Z~0l&8(_%?kB&D+J7OSLILc)? zdk$jYUn8QQ+~E`%``JEif?l&V+~i~h2wD%M=SS?>sV7En4 ze4+y!H+l`|LGj^u$o!jlb87JrFrNhEja~z40!_g;_Vu6!ccJ^@Nq_*Jp;%aQ$li~2 z^Ft5PR`@@aZG1PN^zmsEfswN&8Cb}L?+(Zu^~8h<{m$EU&?P<5ZSk0**5Bv@dle8a z2#jihzsl(>_LsQo?;TMdJ#+AH>xqK@tseTV1nPPGv2H|cZ_880& zL$(KbZs~9Yc8xc`ly?^Tf=BiNU;tQi2ViQ}+pck{Ip+QFtHrRI8t|@3KmR1agwU6G zIQXo_1IE@k$b(Gn-GK5))#FMSdP41$1S6ca$-u&%kq|6B)2-bSgE`eNJ2unW__qz{ zS2bS{_^aF-f&VD*_l_jFFDCdWfLEUX;6_qS-^jeCL{`efeo0cgPR1vG-Ya&T@qH?D z&qvnU9V_$CoL_d0SN~7+xIqGtl?ERIcN}uY>wT)~J8Kdy!NLSOXW)43&~=UPiyRXH zu7kk(ok;?0eLZRYg;|N@zpU8?>D-%whI%s*@PMh?BHPzl)ihYOyDKo|1lA-2b4};| zn^IL$pmF+A*H2qOXo<1G>O?_|I=enV<8-qile9i5^x&Ll#{%1ndgI*1+Glvx6#QG~ zj0e_cc@yxju|$1Tl!>RX4zNvqTQ|x_zla_oXA1#_Rc(?N^|2{7yXzUa9$(Ym;v`j3 zAF4_vkB5Yp`xa}!NXOaRg+|?n1AhmgOX*>sfyX)*e0aI!%>a)14jtMi02zq{*VmW? zK+)JP3D7J^wo2H#kQ4l`yBlzlbgtwp+k$#~49J#SR7$alz*x}wuE3m|Pc=B(fOMyf zNeUEJQYx;kj@kv-kR~0qHu0iP(^kOW1JW`3W*Z6M-*d#lKL`9(PD{Y{%4pN-cl;NJ zaqutu+zR|leI4_$Tv8z>>J4UUh;J<#%5;0);C`Z**4mPX50Wh;&Fh9KW(%kR?> z=KcdkU(4EUkY2kjXzrtJL-RwHnob}C9k048;B(F;rWSZv+y1o3PYe`kMvV960#t3) z0f=qLhE|L$&t-u}PIn9xmwYO>0hC7;&z9%2h#JL$SUaBp{44(Rem@2H*E|aLQN_Gu zKqp_yz-eFJ^eMBJtn-uAak4CP&qePWb;y3ajXao3((&x@ zymgNOTOHEF$^_tKmQMnXhdbbIoyEDvZfh=tk=#AI?%tt;Dh2)~;m(6vf(UoXe^$KV_Zhnc_e1`%{7c zwXgd`;UnW81GHI?sh_zKY}+HApa1Q*{%lJv>`?vUFfskV9G4{*Hy$*4*x(L;_I-gv zv7hw6W_>WVO2ZC*Y&b^7h zRU#0PA`*df^)w7`mki9MS|c3ZJ zo&%EVVzJp+b4IcKLm*{|+ zk)D?-_MZ&=OLh&LntDQSQJ%*i%*Zx@Cp}#yE%G>B?Nh@t-j_8DWH;(TMg3LqDf4J7 zS-*xn9DpN$mM;R5KQNYY3_Jv!frouwy#;8Zj<~k`c(@yC+bqtxusQrHoVd0mU~xnx z0Tuq9d|m)$-|rI#FzvVTNbqIGFdpdbfLJqfFdJ$z><5K8Tb7h8Y3LLMYmx!q3r=$U zwQW-1d-85lE3jXur5^O_43W~HM-73$uEz(>Ca0-;S{H3!-G2YY(GC2&9?VQ<{mizT?caqI8AB|plNP);uKu5D9v^`htv-X5=Qi`?$5DFG zhpH#N?T~5`fIR!BC|7>S9;GcB+NR*2tQ?v8{8lb%v_(~_KDEl~7f)Gz_?lYJ4Rn67$nL?lI$14K zFA6zVmCg_;)%6+@v=9dZ>KYrbP19|A7Lp zMCy*ndmPgnq*z18z`$N!R6dK;~tG*@lq$O5aHR;z!M zx~;%}p8sHdUH`gI&8F@j?T3j!|@J#d>*zb>OY>g6KQ+xFPj7y+^}J@ zl>{K@ukD4uC1~!W#HAlCWQDfWJ|x_8JVhcP^Xk%enxM0k$pGtJsWdL_Yb^E4+OIWH zh{L@tY}QG(1^s%>wE}-#4+ogbg4k#kR9bd0Z5b|L-}h(8}xH}*8qRj8wdEyEbYO+5A`gco(K3>N5e(Hzebu@ z>%c$rKr%5qD6m~SC)<=oNNO<)h*yAahmY~aYq}p12&RR$w+*)dSr|W(AoX_u^6@hX z0LI7$*z;fgGXSk9=jF?l-mxU0I2`>2?ei&!U1m!ViV{)rOu~NOkKV44gMDMrgy+fb z3UC}c+cM0pNeCoEOS;xAJzG=TbcKd84M4wM8*LK{{5idw0Dn%IdcMkS4_QZusITY|>t# z=6D1SM_||BU7*M5`CZQCz#V{m%xRC5K8?FjcBB40KnZJ)$31fHkW#=~)f0WIk?Mis zV+k`g;8~LdK-H!DI*}cn%hvx(<yv zP$S+>(sKg{m#nN0UJEqPsTW3I z-KjnTo(U<@F4rat*66@F;=c}C%5vXlO`CRJ4ZC@EWa^P?bsri3OrTASJ5S3}Y~3qA zHP=|cUG`Oztv}VYXhk5_m>O3)tn2X4-P=dt)r)oZ0hrr-B5yA0()k&H^`|kK1RRbp zu;0C2Z}%9zx^5S2mjqZK+VXXBR3rf~e1_q-v1P{fU(;LKmD7TS{H(}olc7W8U=o3W z+erjQkH#a8^d8W)s3xis)!9Bl;rZPk{K zmTt=vAN(^tGcEt(fq%)a?jtiI3D{2f7U>VR%u z=O63NWlpCpKvj#d29<|$9l;?3{e!?Q5&$IF+iVp7#sZ523gfwa%On8jk{X{aznwJT zG_b1f29$QG{+tyt5WWQ0GDjY`>Jx#|nr~Z{p35w!Z}WtpV3)$=T;Jud<*!|kE=yrh z8E#$#bhI$&f#zi;r~m(F?@fbl%g*|~|JwTu?{MdPd!D5376KuuMG&|kIEf)~8AD|( zWP}BQ0;$1NoU%W}ADmPvd`MiW$`@5(G(d>}k_>H^W0IVaJgPl*4EbgSsk|# z&Q+`C;$QkqBHsES{!N9o*xD|Le;bjviBBJ!!Rx_Qafw=*3Spfcbxc0Qut_jR@p|}) z@bN2CyjAY6%OcU~CNt!l0NI@-&sU3ponx{|0;+X0Z#w}+l1L2V6IR)F5&+aiqA&@l zRNGjswpPWxioLI+0h@xhi9k`yArTOmtx9>Zu-Dp`v@x@0kr0TgH=4+PI>mN(b+V5s zHb3PqRa_gjic8bZm*_8QZcq4&tLTNlvR05OKecDZ;$P)YA#Mc+POtcvh0yh)UjtFt zuqCgnJ=4b9EcS2m9<`tPBZ}5dILpsl^bRQMaY0$7#56uRy4t?B0_8bZUYAUXBCr9# zj@^Gm0J+Fk*G)Yo0Gma?Dp9@7BmhDy5VsKe**vR>-Ac7;E%PZss}H~Z0^!1<{M{A= zDTqW6Tcc?6iq&cgBT`|N2(16uj0)&uXj*8tlOHj+VcbO6RQIza_tVEDq3utaYgO0A zCO@!ked~pjxu5gGacK>Yz5dk_)w!vpj4B>8L0z?^7p}@zm{%W|#%mj^oxrY@ zmtr*id??>_(PK}M5;3sSE_mw)K=SS)Ur$j)_>Ha0vpdhl7VJh^MpWD+cp-72`iJHeieKW zBosTN;RJuPt=5wChgROeCPmO6F%kaF1NJ}VA%%bQxb#`WjLN!P1lycPcj8}VT`#Wn zmfhl%*)a2|_ikdn`qXSxLM#58FQ2fkyZBeO5+2oGeY#utYcdj{E8|T=*7jDH*oB7# zpt%OX?z^}qX4wEqeiN~6OEXs+87fW!vTTUKpk)Gp=EkaSNdTmA+9m-~DePgJP*p_L zr_x%`iDPvdu)N|pj|Ma&YPJyAXcTPgE4w?+q+cw*)kDAysZ)t7v zRN;1#ZGT#AJ!q|Qqgu5lHuX&fl1#W6x6t}q9aq-aO0U1ly4s)gsP$ss>M^lVzrOc{1dD2$?G-r@#$hSdF{0C8`r!Jy7orc317Y7HjAjMg}+8_G?mnctDnI| z%5m6oG(4BD0=6Pfkw?jBbjzi&>D;x-hq!jw%Q^tbHlU_A7pa!WzMX~_o=UkS0;ju2 za)syGvBnqB?qXd&ro4P|F8#6LwMR1hqI1%fG>c3<>f$Na)SSD>Hs?wg9QDJ^5<56l zHtI+1eh6j%?iSj;24<~%ytdW$T5IbHwx0-_?}Pq~h4qBZlr6OW%E#reiTFCUX>DR( z7LDNAC8(+TMUq7%J|web7QgbhjaMJoy$`aBqSB+(hH0Fpzj;0v{hGwq-MoL9AK9Ga)?r^4of^QwJ4%@`mX;M|?txVe`Dg06H8 z9A@*(i;`t|>2Q{}-xQVe2=;g3mBmakW^;7?v-Q*%?-X^N1x7Ot%A^PU4M+xk`nOam$ z|E9uEP`4DP>1W1%QL@~whfkz|MfEGC_hu^oZM>R_;Wkr$Oplt^F|uKBeNvUxOBbn5 z59!Gj*DcktIy_~0^vrvZ0qn>v6x-GHymC1AFap5&O7zMiQGCIrC0tU)@Iqt~fnp>; z{e^6L7DmPERW}9pKd5e_0UN80U?eqlud2X~<~;S664MK^!>9n3uZzMBul;M5wxMoa z^_erR?drD=|NNebd5bnw?HE~JSFn%4S8spys2~nuQ}MUJ#%H;X{PmGvudr^Zz8=a; z1m`KJDL*$=Op;hmwfL8LlE*2(%IQi&(5J62}s+H0C1qP z24E*g0w8SHZe2jBoh1HRErWAdeQ7kK0fPDP8((6t&Dy$U!Gh98QTehheu+>G=0R^)cRlHAU%x5t*W#8}aSOXfo_OPdg-6>qrb10nPuSGt zoQ>pzx~5Wu*@$m=OTD>kwCSomA7$AKi{7!BNiIaMN`Ta5r9UnKyy+WnN< zCIPD_40%386eUhxbHq9i+6eVx+BOM*(7!Z-)sK?bn}*e%3B|G70^!vMTe)))M+eh_ zB&EWNs|&-Xu zE{#U_nO4WuyIp@gTy9M+i9W9CcGu`C^8^^R*a@f@0T93Tb|V06IRe1hjrPCBDxq30 z-w5j@9br6jO8~$HcLC;r{l5DuF|(^HyaIr zA`#H{%X>)#D#g`vR(sdisMhAC+AhgJsa>mtz{bA`CRY?Ue_hDyetCD3x6O)OiGIDW z?F#>*j;rwBcuYyq!5u8S^kyN>h-U;<Gz zO|_?ewe?DN=Ghp)iH-A(9nNaj$_{LkfK6o0XQlF{BSA}X$)+6QD3l9o&EsxH21)#z z0%KuaJHC>=w$p-io|`qRb*$oT6mJUj-pikLv(GlxuZmflhOf0t@#`jvtkgnzBn-a9 zv`LJPl@cHA2fHHf%Xs`j5(qFC++C?nUL>_hMgFJnD0>iM@Z~UuM}x zV2h)$jnCwDG`*^rymlsWnSaw{zE)z>#*Vzy*VLb0-SJmbFXtRd$}n=+1XH!mr)?sY z^3i0u1^`!`e(yOHNq|`?=L}gkKpfkTi)=;!s`gEj0JUV53F$CN07Nx{ObMzzYp7kF z5Z1|K(`i8nnh1zXC5b@gQ2BCWGb*62)oj%!8L0WKCj|!P)QN$rMziMW!0hVTN~(Jl z{DqbNi+;7Y(<1z<1valhanxKy>pY3d?=JB#vS23u^)VXwTZ?~F(I_k5WDzFcR`btX z8-Xi3)J`<3%FM42?dy26Verz;QjXEk{x>wwSoy`p{9$YM z_?zwwlw~8Q1RzH&iOwbokVh&P(ymDW8upYi8^x`%Sv^)Qsd+O#4`~BIbQ*E1Sszfu z>XrzIOBG^WXu>WEAIU(`(p6mZ%AZOch9=Erzsn`HtE9pGa_>c&bLo?oX4}|uNpSiu z{PngBCn0D`)S_8#MP9l(rhJX0FTdKR>9ew!mRs#k{Az%@h^IfY{b8rMMa2` zx`x*TZkCkjzD;H=LQMTp#ICvC_F>^~y==Y!;II%lQ@m(dX0rkqi;q5yq?iK4qpL+v zzBz08r__OFNkE#7FmhN3%yV@Qc=#j$#W5@KEPKILUoP8q0d`Y@n$eZ)HdL-o0PAJ3 zJ`Gr2<)rURIRc%4w24v@yHLZIe;!Om1*C?IsE!WUw-?4CN(vlI+gv5&<2&6F)N3HI zUs!8vFSO_vAMA(lH}Tg-_*Vxpj>TJAeP|jBmkls&QpR+&Y{%S>RjaZn-LZ* z{Uie7C`2vv6M+;WU3#ebn&=~{e}UU21ce1(Q)^VBr|{IEt64pv5MEEaNnN@W{NkE| zwn}qt#f7|HH^N_B$6WYV3+%y#h8U2!edx!kSd-%enwJXD|Bh<_Po@Aj&O`S)2b zWbMCQrb1XyOIk^E{)*T&;@|kZHB*0#VyQe7y))Ia9Kbx~7+bCb*v#^2`p7Is0N64C zhydWDPh$eWcnLwCRW~B4p11tVB)_aMWV!v4=$x0=09byBIhVFkUg)GHq7QYd8y=r+Bj4#RJ2yaW&Y)DT4??k z2HyO~W&gz0J)EvlSj~TuID-aO4$8XNaV0nQp%-(MAv>fQA({!N8-c=2x|GG*f5Or&eyQzP-OwqCVm@*Pt7 z624%@5t*0S(G=XGS3~c+u+t`P(QDXb_#^r($m^PkPIV-vwVR=}5W-S7qR+EwLgJQWG?NGy zEBcBm8?%L}gAL;Q02HtPVs4%QFyKX?lmKv;tM9b2-H?3}P%qC?`#S>XyeeF`odi@p z0PA%DiX;F=ac^o%cL@SCqXB9Wu1-g4$F0suURsY~JBffiK7EQHu`fMbJ)p57z;8mZ zu`0hz-R;RiIFVoV(!NC>MgOM0AK`E6U-#-Lm3O1SUi|m3*I#bgC6?V3|2jMJa#wUYFnO%eBWs8)n`fr7Z76GqHY!U!) z_I02#1&E!PUfgHG)Wt3ds0-^fAAxfQX0aV=2t6U1H#Pjk|Ltj=4 znsHYu3!;(4(t3e#^>{PN(s8SElKT)xTGa8I2|#*6^|>*-gVHB3(;SsruX`ez>Yi^PsZ2mU?S9D_ycXkpezm zUvW!?JtJ4*3i=4$z8~6Fm7SMbTZ1f4w`-N;kit*-c)Pv*Rlg|~zYnz^GLu)Q*+Ldd z_1da?#mdLTF^Ha?F7Ypqk&D7q#Ag2|ypsu~i6{6dzKl=0Jo1hFln4Y(&#LV7o zVfQ;xy%X@}@pNK!Bd?RkuTEbBN+SR{@SJHLGC5iG(sLNkwdc@|1lT121A+T$!RDDP zPDQNXn&~w1=|x8C0xH$21enthvmefZZRT|Zr2St|+`+k1a#b?*1^n}LlLhWWrCBWKQ*EhF4KeYs_RyDJ2 zZqei%1$7!lI_aT{MJIy9s?0__n>?#NRlSO;Po75n3$3UHwYWxm@vkipCjQM|SM6t6 z@mZ{wn+Q&Mxn9cGk9ynk(=aAAq8HvxaLdKNLu4&4)vG#_c@7{}RjrVfbbi^-bYimu z5T5XXad7RJ zB6gJpkw2+8=F9(iTpQ4g#xxPoy%RnY0YJA-pz6`Yx2R>ajZ({Nj+#{y%YQ#ffy##; z%l*Wkz&Eq1@#o=}D3s_oZfPw1P2;eWU-Akj=h0I9JJ0oR9^an$=L&b*6aS|1`WOFZ zVpjbg^O8M%d`9A*TL@sOKau#CVJPYiY}v;Y;yNvQ$Heg%y&syg&BvZ2=fFHMyCGQ4 z%ew$oKj@Pqi#ZSapcR%U1^>GyxOiviE^ZQE{WZcQZf^RA&x|u zr@}sC7)Ha=Q-+wu>lTbL#HHg+OtiNcHbUkDkW|p0vrdBe75}C} zwP}UKzYKfvFSlg+ecS%Le?cwjbwCt}+@g^$0};+QK^b_^lqrI8xw_64W(h!+iIRxo zu~h;9{`u9T(g*;1KDP+}*3DyFx^%7~Y6Z?v5!THI6&C3j`vwU>p2tU5bQYv(7wPCJdY7 zk@R>R4-kO?jA5`$DxxStgb0i=4B}-OixIIR1&HHO@t4J5QIX9KqX8J$(pO=75DmbX zKHJT~k>|x1E6a0mUc85Co~<+SG^>7AvplWr)tmEN`+g6XuR(E6Y#m?BB1BOP#v+Ud zV+^Aa*lILGtoLik<$t)uK*x3jx-VJ_eT!-)4QynIt4}i_;zJ=NYXv*<4EhD=W)}rVG_W>u}J2ar*q8GITq<+Bl7do-!w&}Z}WpCRP^?VK|PMs zi23*2;)>u=?E9>tYiB0<&3$zu{Dnm(=cE_s+Qd&%VOPX|#xo>of+U+GNsHgV;`ss@ z&yi*c^1KlDX`U@RIx=K=A>;|7@2rxrIEoN4hKNOoBDPG>V#LeG5sMJ9B7rD6;fe$; zju|49cb=?bIz_BrHd*8VkF`InS>d86*_}~YT|Lu?94><5Q zOspIoO>uNQ#o06a>sWjw0ckoyF|kH{(acNpl|)HEnx~k|PcU6fF;5qT&`;)=r86X1 zVzp%wLG%F*V397cNYx``5sR=tI>4Fnd7K@e!`bn9oZCN-@nCOL$tp3ZHnRQZY%5`K z|AsrXbav)T&UYmG0ps5Ojm^_4{GsXf*ZELN{bq@y_+MlT%+opM$qdtEhD9!XPe^gE)#1$IHJF!yt+g#SFt}fI)49NYa6i zJO^ee$DU>yP@0LaN4IZSb+Uf;nV-e+>dBydgaf|^!vp{TUVH5t&c5Z5a{Jav00%>o zjxid{l)gDH&0puh$>IdJXLoRCat9}i6UxXRX*O0~gWRP5_ET+-5wtSpv+ur5Abk@3^15w>zl~*49c3-$Hp?bH z{P+4#lPQkpN0`h{a56u}G?`+S&XMOCV4b{5=rRBQ-FCXSvj^o?rBLJM^cgxQ!2|$$N)4Ab7U;udi>P2HO%a6`!Ww!yiGemlQ+h42RtINe83q7eT{mf+^(I&Pla#I5N~ z?Z_ZO5Z%E!$0AL!NK+h5mxT-%#RHt#8{^FW7~?@9!6)+^m(FSufUJ47IJ%W0&&{v7 zQN(|*{JfF?%%`)@3=j7f07fRp=JOQac5B#V7u@3y!l2VT5( zg0H;#Ear5j-%-uJO?hE8DVcIpG|Z9C@XCR%8?`-FF!vq_Qk;do;VokP z*NrU#m`)dX^|c$2U*uF5$J*ty^k9)3G-|(cV}jRiP8;O}LHHrdGrWHEYN>=9{@XR$ zpO^b9;q&#|*s!w3QS@kY+o*ZTlTCakM+9|+%{PTM)N;P1QWZ`N-f5!4kn zuNL|c{>obG*GcR_??-%=bu01;&GaJ4X`LHEoK|j4lFB`V%A`5RW}_|+&Vd`RTTTC& z4@Z0dqF&fY06z8f(KT@PTQ-&#ixhwP<(JmMm2pY}0A$Gsc~)H%aWGadk{}4eo%_x` zh`;j0e}etd=B^}u<#a#jW13)M+gk9io4bg9Sc?8~OOqply29o?91p;ob-*Gw~LsNm9KUTz`Fz#oS^$Q_g<-mw)2ct$ML| z!cl}zm|HHm`i+~oc5StA*H02KomVe-SI&+bcf%tH!W{_79piWe z7vX9ns<-{mjjqz4mVzJHh}c%5-_)bJ{>})0mdUs<+-JWiDitOG$?^1G0C?Tf1HSmhuVXr0 z1=c%)4kA2qrMWhMAP76ggE8K8`AK}&6W@z>J^Y=xaB!(sBb=1(AKN>g7@R{J;Ysb~+3XBFLJbv#JiZ}>@ z*d_KxLp*%t0?r>6H|d-%IA%%nDllE-SX~FMePe-SVRbXJuO*ij|F`IXush+4zlHQ2 zKRArR@Soav$#aeyH;(YY1D8rSJ8<6}2w;e!41>XD?&G=rGkERB3@PmbL=aYt;}Pz^ z@Ce>=@3-Ka?|VBgpScI4*l5S!0H{au?o4mvOIJUS=im5COp;?r76Bj`c zedS!bu(ke{+D0>vGfl_hX$fT z0N5K&|M4u{`yT+*y9Sk)h@pnap)-!0L3=)yxd7#-j% z-}n+1^czSJ{f7a2!y(S>jd6B=jCkEa-u#~5ndZ1~$gwvpwDHk2TQ3fN`S}S_yUlPW zNJqZ}h5q`*)!Uojncc!e7al_#^BW}VQz{?((!@%`aG?mKrsvOLFRabj}z1VMBK1IEJv4)?~maBzV8&Y!`B!+q?H zhKMxlSUEVRiyY_nV{i_elmAl@rko%D_=O9L#q6s9 zE?aqBa?icz@s78@xpfi%ptva*N3kY=t;#vB-gyHrU4I!VZIMRYWenpH&L3RBh5gI8 zaBvZ4$LA17(m_2V)R(643BsSg_=mWDa!q*bt@phhk6wCn;0XN4Q9F0-t+wmsH*4#& zw_oqkqwt4(j{n9}0O8*#a_{voj*5@Z(*<6=`4V0~dYwAN2%-br4oo;8|y!Q2zH}Iz~{*mwOWm3#0hLFrTE55CcEyKB>)va%ZGWMCJP=#o61Qc@LC#3p0`gKlYLRM^o@G061$K#fsrD#@pWZ7_MA7FLm#p1XPdZoa5HX zO(~qbO+k=e ze}(vO9^jZHQ{0)}!O^VvH%(?5`vkEAFcbnliV?>#;)o%R%72$V^(&Ddv*oX;xVOEI z{Cg<)wt4RT=bYo~Up~RD8!pK^d(S7Io<5_kWoqudAKCjU27JsRl8Up39=?JnpL}SY zU4=>lR^*)H&h!YkPHy7XyvI0gs;B-7kJ_NbJ}_joPPx0`ruPxg8`I33c*}?^A$k!D-YT9_M6pM z)!Vl4H!86d{#l;l^`ooEImh|Eb2zhC?N_ty^{@KUv|X~u5**KtaI%C=A0X30OZ-?Qz18 zWC@ODN6X%jW1P%s2L+-EL$nm|qjit{XfVPk9%DEdt)CC$J&XpUil`4YKi<^Vc02Oj zk_8Un(_j4^Op}SW?!o8~-~EL3#$?J1eV6zb`{uTsrlEA++h5e(3E|%;()ajt0AG6T zSzJ5btjoK2a1q~h|F>YMo#JQF>#qn@c3vDDv&9T2^9g3j6!UbBSu(>snPZ;L>35RQ z60ryoV-*1(MG*!pE{S`Fc-bo-MKK0Z1Qs#L?l=PZtPtC>NATfh$i~9B7cq})j^kmtjWo;Xq+uz_*&e7~PKJ&uw8`Wh1{-d}2XBckn24-f2 z5&HHvt$X>Ehiyf_S&eet-4yh9pgqWD6u&f+S6_$Py%3f;3AgP1r#q#=uxHFFs=Ny5~KL z3gI5Js3htcViti#@mlQ1QPF!})mLUhTmHRoBmND1iH8A{5ryvkU(9p7@R!G!oH$Ke z&!ZgQ_iH~h`(4up*1F(*A31m+NB&s=58AdB5yvq)4aKJb03ZNKL_t&@d+c63`sh7~ zYds*Lk^uFb>f%VwbIg+2^549;@TF7Ck~tPxf}GYBbVkIAmH2T~{2ML*4&ou=cz{7P zz#tl87!NRvM;OEd45Ov!k4J`|BlXgBn?tG!+fN9Zwzr)eeC^s-@Z7a88`uA~N4^u6 z5AO*Wks11ndl*k{HFsU~L-Io_^4dS)zv9nd`W)`e?g(q18K1>dkG`uRqLdolQ2g7S zo9aDLNj1Jq6jG#liY!l&t{!J8k~~G4Wk{FhInR;j8PYsMmS@O#4o*{$Dlh=ia+=E^ ziok*Ow3j%Fz}QlZmwMhAW6PfS2#gi=BgTML&wS-LZ`@mjOTTA!z3hc8arK0W)OO#`Rj{`Y=t^iGyX{|bP&U*X{} z#v_m3hesc|2XValKyEV$PfCJVUm;=%v~6A1^L?ZEx_iE3A7E zqQUawQw;q@QH+Sig>c7e9^aTgH*H|rUXl1Rji>FYmB zX87Y5KBJ86(Mylv(aVo5o4fY<>uQD(|H?MJQ6h}O3niqBRycl8N zJV%!2U;xr(XI$MH=UmuP#{uL#)1RlHLL7{_{M7qNJ~a21Rdz3j{0_lOk> zRHLZSCM=4@L6m}Peni}R*f;jt_p&!*Yb*Y3;*!5+O*7)ppixYMM2 zaZBec&x+oWRnJFWT)A=5d>d#MK{@cx}XWVN>I` z^2|J`lKQkLH4*>%a@}{MT+`;-VUv_7yg7+~iPsk5f92`cwFO>%VTxqYV&seCcalr9 zpRyJIKuh)Tw>~!dmO&o<4hQaUV@E{981B9AA|83zv=eh<88s-Po>hx5X{iaDrc4Ve6t_+N&n=z8k`S#j~$|9yd;IDC+>g{pTLQ zllML;u&O&>RZZ3Tsm@DvwwgqQSDqQzw1~eH`{@+_GQV~)n)GG^=HlNZHWQ(3`r7eL zaB6?1z7*7fwE~f-_mISN|+a>}gXWQ3Az}%+$ z7(;+$z&Ml;34uQgKKaJ&S8#Kp7e!^#JjG*|pXk|{tZ0{%v=aPARk{-WMVq@r`0J16 zJjZiyJZCh=eX^L~f%6X_iekfa)=3Vv__s}H^sk1y_%{;N+SpaEz}+MMO$0rl692N6 znoo>Y{F{~f68{>f=IzZ5NtsSky!^EZUVCARWYO-o0$`ty5dHOE`KhC8`nnPeEh7K` z{Ls(i%qZUbCC>03ANHg$;L^pjxbL0|xP0Y2_Vy&ZwQMU15LVMolL$8&P}Fcs1f(%a z&21qO06G{IFl(dx+@$Gp0o?L$k|ape968UBq-ildEaOO%1X-RV%QB={F*Phr%z6pp zsJPKdw7w}ygeWeif9>s!us0rKJQ`zfZ;bJHB)BI*_mcY0U-~SroxE<{?t7m6K8y#l z?|*38Ubs!H82WJfQR|E7hvElb6vcLgzuL3zT`Z2DEKcybum6d%Zkab-c^nU2ct~qs z9i#3XyA=QW1ja`En+j^P7+8l#EG_8r^q%=?#kus3_1o;=KuT3ze1APFMfLW zW8a1I`xm{&Qs772+gtP{OnnDXQ_)8jYU!7ay#;ShvkiT-xtBYxm8-jsuDed4p28{ZW`~Fz1W5FrYnfd%qGi`?w|N73 zGR)O_&&*&NaUP21JA(-j;RJx0HB?P(Gj~TMrGwY%;1j$-sL9BJm{!N`6J7c8)kt5E zeDBdHzY0fU)63b1(0q~`G|y8Yz=Zw_(QXP5@@|qSvkAX2^Dm-%C)>QL$?w{+QGd6bL^cz7*1PJil>IrX@AbL$-pP5n&0wVp@O|z83rAe&yQ{ltQezHUq2yt zdT&RM%ROzF-YxJNQ@mM=E<2Gv{1Vgsvs77OS?<;^Pw#j0E56}x^T1EmaL2De$eJH= zXTKb#UmBT_zTY@mK2wg^ZEtA6(Xr!zCdmjIj#jJq{pH@-$y#DO1ClQHa#_o;A6RNX ztSrYL63Eq@p$8q(={Fd<^`1QXEx3-{Z?_&YK;A9C%kXi;FGz08b9J6X;k5sb z|KDb^Yi0*Ei-&n0v-@Siz27$99tTTvBF^nSD$*?dZu$K{A6x9OxRpT3UXo&1uvfJf ze|*m?(Ayyf%h5M47=~mz(f+?$`eqa%Q)ZW5*B8QV##` zO4th?PWA8s?_>V*$v;oeyPdxdGCbQY`)P5`7WADKce=MYU^EYPHZ-%}Ymi~U*{dO* zGHOtXT6h0!R|Wu^==ravSNE56&xsY5@4jV^3wV7Z+G?F*rPL>Rt5-5TKj)0hA$}iu z9Fvs^8!H&dej7S-JU3@>D-H%~@{2sM>2g$P`_LNlNj@k{+TqB{|3@MQBNcULIR1;< zeez^fDc4L#RrVSkEJmgG8UMWj`7C}XsRsLTHf23#lixaudvUf?L3+2Zd{FMq3OUZq^jnzi{IUxvQl;h9^vY0caG0+sD)p83-W7D z>HbgX8P!sXU#c=Y*SvXRuo+*}_X36PopI$8%E|f=Tf21b2b8R8tj%- zUQcbwyr{yM$KK6GQWC83MQD$OdJ!>N?HLHOzLNMyx0zj}HFog|Ja0 z*Aibg9NV1XZY-R`NOn?YvFxl=*6bUJ6-ecd>Ah`y(SR(-W@9rE4F6GDIW+)S>3ZOg z|H$V;lJOgc`Q5@dicWUP2W<^g#0y40cYn7Xj|yD!dr|4oJ3FP|Cc1MBoKbRLM?eEQSu7Y zof3Vg`?16(Q*yVx**AEP_qY zDN3{_$v*Opgm2~e!5_hU;Tj)rVfyJ1tpmGKq1)21`0c=BSeOor#Glt6kA*+|p7L0^ zq2utHUbe|$=$Eb8>Z(ArW{@CKH6Pu%z8$p#otSIlHJ5`jc-(i#tLm{%-^s8?{hVzo zceKU+^@WY?kof`!oXqF94}8}_VfYiP;56L%F${wAx2ihkv)n*B%EENIdaFGVF;hwK$TmKIVn*f6lt*{t_9e4wTiWoXMLmFl}}jv_Sv<< zABco=`=&&^gbC>`a|JIs%uV01zw1EW6pLHlwx<5AL_NE(jTxIhzTS%!m&3hqYoiZ8 zlwtmu{@{~$vP?4zc3#K-7?Jrs^S+$!)mX6=s^DdEx#jTo_$dEA4%Y%?M1_ZSK~^r* z0?E}f^EnfJ~Q z>79_++s4hvcpE|dA-DdYV{tlVu<<+TbYc8Dl6p(;eE<>19!Av-1!>Row?fOfl~HW( zR+ z$6wDW%s_HxRauDo&ZUu1-Eod0HxlJy=C4t-m_0taP?55sS0RU9FDQ_~~P`^fm# z*m2mLGU?7v${qe_M5c_3IOk~3@2mh;kcr7bv2W0qORGIEXW=W09;e>B8#!>O|5xP} zD3dOVE^J}EqRF)adP|kI!H)X1@@zcjX55$u^6>qyWhJ!gUmz@N+}lb4d?2%u z_~oB~4)C|hJMn36el(g2kaK{WU|2G&Ksy~H(w{2%Iv$!=_ayPmA2RtHN$x22=3x$> zbx3$xINJ1{r19Jyd%UzPhfaHuVb=sA>#+O*yrv722B<;tpr@q$_?P0T`|rJVii=DV zSsJ(2F&8oqIOI7p&Yvi@+7Ucm)Y>RG`P#6O=+$ zZW?D4RR)a_#ZQ5>Is!r|rSKoVLa{rwB(KPEX;nHZeY$Gwo^^nU8x*|gDF0O|S?k~H z-Fe*rf~cbm_(9Ym@p3_zeSm@LoSgC3o$WM%O)X$hrcKMI*%mMWblqo{f-g6v zvXR{yJ5vhuRCe%}TlSCU2?~2@ZatfNYfPYH+^z#HK>c*KDS-47{>0E94#x0vW{QE3 z-?y&DTUi9NJ_%QQF42T0C%Y=@@GR=wx7Vbr$z3|?-AgW>pG02I=?hjB76$lZ^PDm- zImiy7-dgJzS&s@SEeOs4*$oL>LCU`VT;I>V!jzj?Gl3m3VEQ$$@R8gjdtTiX+4OD$ z{wG1ZnSZ}$4mTbroid;4xKNYo3RK6CaA{2zoTLp4IiJvD1G5%`DyyunXIXCe{S@g9 zQ~ukueZ2!mdkYpS^(1)n1Jc8@k}aJ30ZD;4=wV9}?9$s&pq_L#QTO9{zX$g;46_j_ zqupE9_1#M8wUmk8%&dZPtBiH5oog3a@vUv1Umi=J1nAf}5|2FeU?+n8q3&Q+(UU)C zdZk1^C}wH87nKj#STDJ6!32qMp$tYiI1H^C%xpYtwa_U)|%L}-(GMMG`20tHUzI1L&8({ZeQtS-N zTL(&w6VaKWDjX8(evAgC`AC}CW6*i)aj5M<57j^-5qcZ=bZHg!^MI=fy6r4Kah$_; z;wiJGwX=>oUEM5W-uk`+t*Aopc8;N3tudTMH zDxDl`a9wpe*9F2UBA#@+(HZkMGXNGRf>;lO)^t4!-0~H#hBh8%4YLz{4f(m8J(uFR zk@Mi2+ix24SA0qXrFO?%D|T)Wm756kY-QafJqo4AfmMsM!C~CdH~P*ue#vU)jl)3Y zed%!Lt_Ms*k!8XvHF=(ga(20m!dtBeTX2T6u$A{7Y(B=hT(lY`i8^{_bI3jWE#u5< z=qq17UNvZamfW;MmgOIKdQYO67VLHHqHPM~IYXM)U))4~LPBw-L#QS&s4#r`i2PJC z*COKX3MvlsMW8Pn>E62ZwWI9OLHg^=vBRS?T5P`Xulz`bLH>Pd5~1$OnqO@af#ea~ z(FVjNAZ|!5XyI>us0oMm>8>p)D1agEb4E8MfQR52ew4D6h`W? z%`~MRTX$)}pfGwMoO_}Lv=Fj-%XqS>J5yBWcZlCzS+$v7cai3@Vrz*4xO~sg4rKZc zl*wT-Ysk4LR+aM$|HaAaUPS1!y6`KkqW$lrqz_!{@; z7D#Sc41$l)OBY>G412eoYN{Ot9T)wQQ7k@s6p}s^MQXinN+!_HT@`eOJ5B6CTPv8kho z-A%OV`~RFM9h?X-8i>|0Zr}VNaCu2Am=c>A8ydOem!MF!10CMIMFaqGqF$$8v+h$% z_+P>!D&rNw?6+H&74bFrWi0cPx&e2YX7ddM1vW79=4#9>-(1+LgTSfJDe4+0vV|+Q zvI`&kV!FwZ*KP|B2-U9KVkAVWDX|Kzx&!~W8I7h7KQ&Tx&pTyxF z9fOFccHePVdnhnW7#%1_bf}LDtOceKE#@pc!-bLpeA|O0@#kA)2+pAcD&+1xn{ffW zze!|O9nU&8e;q#p!v+SCE6|ZQN|jE+9&R6f((qgE2@3s?upvbEUQj*R9on`Bcm9J1 z(+GFAhfLU^s1#;-hO@1bngJOJU)B8 z!TpoX%>Nl`fE-_6dxp#v>LYR`o-ox(-(q0seO3EDC47eaokeu$T#h6@Lbv;FmumwX zGnLTqqGe$#6BqR_-U z`)Rq;|8=y6@1@HH1RGx?bQ?i-U@h2#nI>U1>8adufdw5~5Z?Q`7OIY%coglVbZY7= z&$G*I5C(8}Usoqafq@{^a2|-YLk@x5jnc$H)KVmO`M=jx@tdfvR1iUr&csh|Xc6~p z!z&(F{A?8^A`N?2z-nzt#{f`w$G_l?9-NyKGjq1Y7OSxD;_(!7X0WQZJSfn1!M3~;>{^m^K_u( z2TPEj*EV#g2nDCdv|P&xJaa3az;CzT`ys5tk0B3tq$HTLDk@KD0eO$p`%;)LW)OEq z%%b$%(JlCMi4R+?n?*Zv#jj#Q6J3@F*1mryBoPw+13?f_2+hiw{Ju&YOC0AwBYEKE z&4|XjZ)Ky|y0__gumKPo^kB8qBlg*Pn}>P8H+N8VnWx9ECYi z(5lj6A_?tJGzaW@MB3i){7M&Q&B8s(xhm<;G@RKGl;vH?kc)h*T)qRpX+y3H;)S%3 z5lC!~B}VBNaRRWTupO+a9v!g0^;{JF#jrItRF{Pba{~dinAj8e&N#l5xhHZi+jvKeNc<6{HZdgJk@&(9Esx`EUx4+~ zf^v^kElwEEj;i4jr)~{n8%s7eD4CCe;dnq;-dHT5$d*E1U3`yTLMlo?`m_8m~g;w=Tq-$Uu~y+Q;E>nmEz) zHPy4VDN`pf(u}=Sj9mlydG%%_vRYop@e-aLlrD0mSzCoa$(>4@v4fFM-3P8m&-%G6 zD&<=ap*$8^pNArs98VsW(}gt#Pm_m_*%5+;SFSk_C!d$GGNHY089q~D=Q1GSw1s!v z%;0_WKC=VaN2fVO6IFtoxBno0#P&vmWiXhu2>N8-;3+SKMHHqSkb z3uO}@J)X)=!h3I$;BSbYknQ6p3mr}qszY&eNyf8H#p(}(f7fpPVa&1*S)RsD%#}vK zKCsJB;MG9>B7|?)k@H_6gNT@@ZRQS<>P=VK2jla{O4>&UadD^wG@1^JdV~2Q>Ai-* zpQGita640y4Eb%6Xg{$IB7f=Ys|FkJ%E8bSM9GTZuET!d2{RUP^O^>2+Y~9mfndQt z;s>C$Bqn9|;0Fu4Hox@N21-^&;Wx9EYy{6+E2nnJ@EHs7MZ=&BZgNGEuY%#7*Ww?l zAscSMY%ZBcW9`$GAhFx%bsskzAU(wUZ-CYX*RAyoc#pR&T_-+y+b6dnWs|Gp6b z$ONO}@;1AKano=f^x~^P-cuLDjr`Y#chC&@v%=wo05i231Z9ylGVHi-#16J^;FKWP zn_fRY_0$BNwfnpjC(`5`BgW^Z90UwQ^qS~^1N+6c+ZTR{{ zt2D}^^#?Bm@)us&*?8<{xBkAGGd(JB>NewfOJS+7)z^$*XCKA;`{Z?4yVS-9VATWq ze{|(u_F;#O@2EKf@on>W62-^(=R&7N)vgT@X)|0$`@PNKXWWqa=NE9^d{YJzA0`*| zlpj>voP19AS)yWl%-ID$j)d|??~jQIo9;@{@dN{k{R@->!%}oY(R$^dggP|*TiLXI zv4ear)VzFqOK58S_E&}}W3sH(j%KlPFa8t>sd^}BM{uDXZc{3#!c~pgRQeqeVtm2@;s87hF z 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�U>LQ`aW4METn&g9i7sx}Y^?nF<@=$=tL- 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 E*{w_gy8r+H literal 0 HcmV?d00001