From 9dee5eaa47f98d937545fa88b0b9b2005c6f218a Mon Sep 17 00:00:00 2001 From: Factorino73 Date: Thu, 25 Apr 2024 02:00:30 +0400 Subject: [PATCH] DatabaseImplement --- Hospital/Hospital.sln | 10 +- .../SearchModels/PatientSearchModel.cs | 10 - .../SearchModels/RecipeSearchModel.cs | 10 + .../HospitalDatabase.cs | 85 +++++++ .../HospitalDatabaseImplement.csproj | 23 ++ .../Implements/DiseaseStorage.cs | 154 ++++++++++++ .../Implements/DoctorStorage.cs | 155 ++++++++++++ .../Implements/MedicineStorage.cs | 138 +++++++++++ .../Implements/PatientStorage.cs | 189 ++++++++++++++ .../Implements/ProcedureStorage.cs | 162 ++++++++++++ .../Implements/RecipeStorage.cs | 168 +++++++++++++ .../Models/Disease.cs | 98 ++++++++ .../Models/Doctor.cs | 102 ++++++++ .../Models/Medicine.cs | 81 ++++++ .../Models/Patient.cs | 231 ++++++++++++++++++ .../Models/PatientProcedure.cs | 42 ++++ .../Models/PatientRecipe.cs | 42 ++++ .../Models/Procedure.cs | 144 +++++++++++ .../Models/ProcedureMedicine.cs | 42 ++++ .../Models/Recipe.cs | 150 ++++++++++++ .../Models/RecipeMedicine.cs | 42 ++++ Записка/ER-diagram.png | Bin 67944 -> 0 bytes Записка/ERD-diagram.png | Bin 0 -> 67320 bytes .../Пример отчета Word.docx | Bin 0 -> 12596 bytes 24 files changed, 2066 insertions(+), 12 deletions(-) create mode 100644 Hospital/HospitalDatabaseImplement/HospitalDatabase.cs create mode 100644 Hospital/HospitalDatabaseImplement/HospitalDatabaseImplement.csproj create mode 100644 Hospital/HospitalDatabaseImplement/Implements/DiseaseStorage.cs create mode 100644 Hospital/HospitalDatabaseImplement/Implements/DoctorStorage.cs create mode 100644 Hospital/HospitalDatabaseImplement/Implements/MedicineStorage.cs create mode 100644 Hospital/HospitalDatabaseImplement/Implements/PatientStorage.cs create mode 100644 Hospital/HospitalDatabaseImplement/Implements/ProcedureStorage.cs create mode 100644 Hospital/HospitalDatabaseImplement/Implements/RecipeStorage.cs create mode 100644 Hospital/HospitalDatabaseImplement/Models/Disease.cs create mode 100644 Hospital/HospitalDatabaseImplement/Models/Doctor.cs create mode 100644 Hospital/HospitalDatabaseImplement/Models/Medicine.cs create mode 100644 Hospital/HospitalDatabaseImplement/Models/Patient.cs create mode 100644 Hospital/HospitalDatabaseImplement/Models/PatientProcedure.cs create mode 100644 Hospital/HospitalDatabaseImplement/Models/PatientRecipe.cs create mode 100644 Hospital/HospitalDatabaseImplement/Models/Procedure.cs create mode 100644 Hospital/HospitalDatabaseImplement/Models/ProcedureMedicine.cs create mode 100644 Hospital/HospitalDatabaseImplement/Models/Recipe.cs create mode 100644 Hospital/HospitalDatabaseImplement/Models/RecipeMedicine.cs delete mode 100644 Записка/ER-diagram.png create mode 100644 Записка/ERD-diagram.png create mode 100644 Записка/Пример отчета Word.docx diff --git a/Hospital/Hospital.sln b/Hospital/Hospital.sln index 37d231c..35af821 100644 --- a/Hospital/Hospital.sln +++ b/Hospital/Hospital.sln @@ -3,9 +3,11 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.8.34525.116 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HospitalDataModels", "HospitalDataModels\HospitalDataModels.csproj", "{DEC0CC7C-0315-4D11-B383-F5CD19DA7E15}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalDataModels", "HospitalDataModels\HospitalDataModels.csproj", "{DEC0CC7C-0315-4D11-B383-F5CD19DA7E15}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HospitalContracts", "HospitalContracts\HospitalContracts.csproj", "{435124E0-E0A5-4EB8-A46C-C093C47A65F7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalContracts", "HospitalContracts\HospitalContracts.csproj", "{435124E0-E0A5-4EB8-A46C-C093C47A65F7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HospitalDatabaseImplement", "HospitalDatabaseImplement\HospitalDatabaseImplement.csproj", "{595F63B0-79FF-4EBA-9582-2A0652D00B58}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -21,6 +23,10 @@ Global {435124E0-E0A5-4EB8-A46C-C093C47A65F7}.Debug|Any CPU.Build.0 = Debug|Any CPU {435124E0-E0A5-4EB8-A46C-C093C47A65F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {435124E0-E0A5-4EB8-A46C-C093C47A65F7}.Release|Any CPU.Build.0 = Release|Any CPU + {595F63B0-79FF-4EBA-9582-2A0652D00B58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {595F63B0-79FF-4EBA-9582-2A0652D00B58}.Debug|Any CPU.Build.0 = Debug|Any CPU + {595F63B0-79FF-4EBA-9582-2A0652D00B58}.Release|Any CPU.ActiveCfg = Release|Any CPU + {595F63B0-79FF-4EBA-9582-2A0652D00B58}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Hospital/HospitalContracts/SearchModels/PatientSearchModel.cs b/Hospital/HospitalContracts/SearchModels/PatientSearchModel.cs index 0cd6bf0..ec49e27 100644 --- a/Hospital/HospitalContracts/SearchModels/PatientSearchModel.cs +++ b/Hospital/HospitalContracts/SearchModels/PatientSearchModel.cs @@ -30,15 +30,5 @@ namespace HospitalContracts.SearchModels /// Идентификатор лечащего врача /// public int? DoctorId { get; set; } - - /// - /// Начало периода выборки данных для отчета - /// - public DateTime? DateFrom { get; set; } - - /// - /// Конец периода выборки данных для отчета - /// - public DateTime? DateTo { get; set; } } } diff --git a/Hospital/HospitalContracts/SearchModels/RecipeSearchModel.cs b/Hospital/HospitalContracts/SearchModels/RecipeSearchModel.cs index b13d68b..34055e5 100644 --- a/Hospital/HospitalContracts/SearchModels/RecipeSearchModel.cs +++ b/Hospital/HospitalContracts/SearchModels/RecipeSearchModel.cs @@ -20,5 +20,15 @@ namespace HospitalContracts.SearchModels /// Идентификатор доктора /// public int? DoctorId { get; set; } + + /// + /// Начало периода выборки данных для отчета + /// + public DateTime? DateFrom { get; set; } + + /// + /// Конец периода выборки данных для отчета + /// + public DateTime? DateTo { get; set; } } } diff --git a/Hospital/HospitalDatabaseImplement/HospitalDatabase.cs b/Hospital/HospitalDatabaseImplement/HospitalDatabase.cs new file mode 100644 index 0000000..92eb7a5 --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/HospitalDatabase.cs @@ -0,0 +1,85 @@ +using HospitalDatabaseImplement.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDatabaseImplement +{ + /// + /// Класс для взаимодействия с базой данных + /// + public class HospitalDatabase : DbContext + { + /// + /// Параметры подключения к базе данных + /// + private string _dbConnectionString = @"Data Source=FACTORINO\SQLEXPRESS;Initial Catalog=HospitalDatabase;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True"; + + /// + /// Подключение к базе данных + /// + /// + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + if (optionsBuilder.IsConfigured == false) + { + optionsBuilder.UseSqlServer(_dbConnectionString); + } + base.OnConfiguring(optionsBuilder); + } + + /// + /// Таблица "Доктора" + /// + public virtual DbSet Doctors { get; set; } + + /// + /// Таблица "Пациенты" + /// + public virtual DbSet Patients { get; set; } + + /// + /// Таблица "Рецепты" + /// + public virtual DbSet Recipes { get; set; } + + /// + /// Таблица "Болезни" + /// + public virtual DbSet Diseases { get; set; } + + /// + /// Таблица "Процедуры" + /// + public virtual DbSet Procedures { get; set; } + + /// + /// Таблица "Лекарства" + /// + public virtual DbSet Medicines { get; set; } + + /// + /// Таблица связи для сущностей "Пациент" и "Рецепт" + /// + public virtual DbSet PatientRecipes { get; set; } + + /// + /// Таблица связи для сущностей "Пациент" и "Процедура" + /// + public virtual DbSet PatientProcedures { get; set; } + + /// + /// Таблица связи для сущностей "Рецепт" и "Лекарство" + /// + public virtual DbSet RecipeMedicines { get; set; } + + /// + /// Таблица связи для сущностей "Процедура" и "Лекарство" + /// + public virtual DbSet ProcedureMedicines { get; set; } + } +} diff --git a/Hospital/HospitalDatabaseImplement/HospitalDatabaseImplement.csproj b/Hospital/HospitalDatabaseImplement/HospitalDatabaseImplement.csproj new file mode 100644 index 0000000..94a8962 --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/HospitalDatabaseImplement.csproj @@ -0,0 +1,23 @@ + + + + net6.0 + enable + enable + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + diff --git a/Hospital/HospitalDatabaseImplement/Implements/DiseaseStorage.cs b/Hospital/HospitalDatabaseImplement/Implements/DiseaseStorage.cs new file mode 100644 index 0000000..d2adb14 --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/Implements/DiseaseStorage.cs @@ -0,0 +1,154 @@ +using HospitalContracts.BindingModels; +using HospitalContracts.SearchModels; +using HospitalContracts.StoragesContracts; +using HospitalContracts.ViewModels; +using HospitalDatabaseImplement.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDatabaseImplement.Implements +{ + /// + /// Хранилище для сущности "Болезнь" + /// + public class DiseaseStorage : IDiseaseStorage + { + /// + /// Получить полный список + /// + /// + public List GetFullList() + { + using var context = new HospitalDatabase(); + return context.Diseases + .Include(x => x.Recipe) + .Select(x => x.GetViewModel) + .ToList(); + } + + /// + /// Получить фильтрованный список + /// + /// + /// + public List GetFilteredList(DiseaseSearchModel model) + { + using var context = new HospitalDatabase(); + // Фильтрация по идентификатору рецепта + if (model.RecipeId.HasValue) + { + return context.Diseases + .Include(x => x.Recipe) + .Where(x => x.RecipeId.Equals(model.RecipeId)) + .Select(x => x.GetViewModel) + .ToList(); + } + + // Фильтрация по названию болезни + if (!string.IsNullOrEmpty(model.Name)) + { + return context.Diseases + .Include(x => x.Recipe) + .Where(x => x.Name.Contains(model.Name)) + .Select(x => x.GetViewModel) + .ToList(); + } + + return new(); + } + + /// + /// Получить элемент списка + /// + /// + /// + public DiseaseViewModel? GetElement(DiseaseSearchModel model) + { + using var context = new HospitalDatabase(); + // Поиск по идентификатору + if (model.Id.HasValue) + { + return context.Diseases + .Include(x => x.Recipe) + .FirstOrDefault(x => x.Id.Equals(model.Id)) + ?.GetViewModel; + } + + // Поиск по названию болезни + if (!string.IsNullOrEmpty(model.Name)) + { + return context.Diseases + .Include(x => x.Recipe) + .FirstOrDefault(x => x.Name.Equals(model.Name)) + ?.GetViewModel; + } + + return null; + } + + /// + /// Добавить элемент + /// + /// + /// + public DiseaseViewModel? Insert(DiseaseBindingModel model) + { + using var context = new HospitalDatabase(); + var newDisease = Disease.Create(context, model); + if (newDisease == null) + { + return null; + } + + context.Diseases.Add(newDisease); + context.SaveChanges(); + return newDisease.GetViewModel; + } + + /// + /// Редактировать элемент + /// + /// + /// + public DiseaseViewModel? Update(DiseaseBindingModel model) + { + using var context = new HospitalDatabase(); + var disease = context.Diseases + .Include(x => x.Recipe) + .FirstOrDefault(x => x.Id.Equals(model.Id)); + if (disease == null) + { + return null; + } + + disease.Update(model); + context.SaveChanges(); + return disease.GetViewModel; + } + + /// + /// Удалить элемент + /// + /// + /// + public DiseaseViewModel? Delete(DiseaseBindingModel model) + { + using var context = new HospitalDatabase(); + var disease = context.Diseases + .Include(x => x.Recipe) + .FirstOrDefault(x => x.Id.Equals(model.Id)); + if (disease == null) + { + return null; + } + + context.Diseases.Remove(disease); + context.SaveChanges(); + return disease.GetViewModel; + } + } +} diff --git a/Hospital/HospitalDatabaseImplement/Implements/DoctorStorage.cs b/Hospital/HospitalDatabaseImplement/Implements/DoctorStorage.cs new file mode 100644 index 0000000..69d35b3 --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/Implements/DoctorStorage.cs @@ -0,0 +1,155 @@ +using HospitalContracts.BindingModels; +using HospitalContracts.SearchModels; +using HospitalContracts.StoragesContracts; +using HospitalContracts.ViewModels; +using HospitalDatabaseImplement.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDatabaseImplement.Implements +{ + /// + /// Хранилище для сущности "Доктор" + /// + public class DoctorStorage : IDoctorStorage + { + /// + /// Получить полный список + /// + /// + public List GetFullList() + { + using var context = new HospitalDatabase(); + return context.Doctors + .Select(x => x.GetViewModel) + .ToList(); + } + + /// + /// Получить фильтрованный список + /// + /// + /// + public List GetFilteredList(DoctorSearchModel model) + { + using var context = new HospitalDatabase(); + // Фильтрация по ФИО + if (!string.IsNullOrEmpty(model.FullName)) + { + return context.Doctors + .Where(x => x.FullName.Contains(model.FullName)) + .Select(x => x.GetViewModel) + .ToList(); + } + + // Фильтрация по логину + if (!string.IsNullOrEmpty(model.Email)) + { + return context.Doctors + .Where(x => x.Email.Contains(model.Email)) + .Select(x => x.GetViewModel) + .ToList(); + } + + return new(); + } + + /// + /// Получить элемент списка + /// + /// + /// + public DoctorViewModel? GetElement(DoctorSearchModel model) + { + using var context = new HospitalDatabase(); + // Поиск по идентификатору + if (model.Id.HasValue) + { + return context.Doctors + .FirstOrDefault(x => x.Id.Equals(model.Id)) + ?.GetViewModel; + } + + // Поиск по логину и паролю + if (!string.IsNullOrEmpty(model.Email) && !string.IsNullOrEmpty(model.Password)) + { + return context.Doctors + .FirstOrDefault(x => x.Email.Equals(model.Email) && x.Password.Equals(model.Password)) + ?.GetViewModel; + } + + // Поиск по логину + if (!string.IsNullOrEmpty(model.Email)) + { + return context.Doctors + .FirstOrDefault(x => x.Email.Equals(model.Email)) + ?.GetViewModel; + } + + return null; + } + + /// + /// Добавить элемент + /// + /// + /// + public DoctorViewModel? Insert(DoctorBindingModel model) + { + using var context = new HospitalDatabase(); + var newDoctor = Doctor.Create(model); + if (newDoctor == null) + { + return null; + } + + context.Doctors.Add(newDoctor); + context.SaveChanges(); + return newDoctor.GetViewModel; + } + + /// + /// Редактировать элемент + /// + /// + /// + public DoctorViewModel? Update(DoctorBindingModel model) + { + using var context = new HospitalDatabase(); + var doctor = context.Doctors + .FirstOrDefault(x => x.Id.Equals(model.Id)); + if (doctor == null) + { + return null; + } + + doctor.Update(model); + context.SaveChanges(); + return doctor.GetViewModel; + } + + /// + /// Удалить элемент + /// + /// + /// + public DoctorViewModel? Delete(DoctorBindingModel model) + { + using var context = new HospitalDatabase(); + var doctor = context.Doctors + .FirstOrDefault(x => x.Id.Equals(model.Id)); + if (doctor == null) + { + return null; + } + + context.Doctors.Remove(doctor); + context.SaveChanges(); + return doctor.GetViewModel; + } + } +} diff --git a/Hospital/HospitalDatabaseImplement/Implements/MedicineStorage.cs b/Hospital/HospitalDatabaseImplement/Implements/MedicineStorage.cs new file mode 100644 index 0000000..0e1c46d --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/Implements/MedicineStorage.cs @@ -0,0 +1,138 @@ +using HospitalContracts.BindingModels; +using HospitalContracts.SearchModels; +using HospitalContracts.StoragesContracts; +using HospitalContracts.ViewModels; +using HospitalDatabaseImplement.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDatabaseImplement.Implements +{ + /// + /// Хранилище для сущности "Лекарство" + /// + public class MedicineStorage : IMedicineStorage + { + /// + /// Получить полный список + /// + /// + public List GetFullList() + { + using var context = new HospitalDatabase(); + return context.Medicines + .Select(x => x.GetViewModel) + .ToList(); + } + + /// + /// Получить фильтрованный список + /// + /// + /// + public List GetFilteredList(MedicineSearchModel model) + { + using var context = new HospitalDatabase(); + // Фильтрация по названию лекарства + if (!string.IsNullOrEmpty(model.Name)) + { + return context.Medicines + .Where(x => x.Name.Contains(model.Name)) + .Select(x => x.GetViewModel) + .ToList(); + } + + return new(); + } + + /// + /// Получить элемент списка + /// + /// + /// + public MedicineViewModel? GetElement(MedicineSearchModel model) + { + using var context = new HospitalDatabase(); + // Поиск по идентификатору + if (model.Id.HasValue) + { + return context.Medicines + .FirstOrDefault(x => x.Id.Equals(model.Id)) + ?.GetViewModel; + } + + // Поиск по названию лекарства + if (!string.IsNullOrEmpty(model.Name)) + { + return context.Medicines + .FirstOrDefault(x => x.Name.Equals(model.Name)) + ?.GetViewModel; + } + + return null; + } + + /// + /// Добавить элемент + /// + /// + /// + public MedicineViewModel? Insert(MedicineBindingModel model) + { + using var context = new HospitalDatabase(); + var newMedicine = Medicine.Create(model); + if (newMedicine == null) + { + return null; + } + + context.Medicines.Add(newMedicine); + context.SaveChanges(); + return newMedicine.GetViewModel; + } + + /// + /// Редактировать элемент + /// + /// + /// + public MedicineViewModel? Update(MedicineBindingModel model) + { + using var context = new HospitalDatabase(); + var medicine = context.Medicines + .FirstOrDefault(x => x.Id.Equals(model.Id)); + if (medicine == null) + { + return null; + } + + medicine.Update(model); + context.SaveChanges(); + return medicine.GetViewModel; + } + + /// + /// Удалить элемент + /// + /// + /// + public MedicineViewModel? Delete(MedicineBindingModel model) + { + using var context = new HospitalDatabase(); + var medicine = context.Medicines + .FirstOrDefault(x => x.Equals(model.Id)); + if (medicine == null) + { + return null; + } + + context.Medicines.Remove(medicine); + context.SaveChanges(); + return medicine.GetViewModel; + } + } +} diff --git a/Hospital/HospitalDatabaseImplement/Implements/PatientStorage.cs b/Hospital/HospitalDatabaseImplement/Implements/PatientStorage.cs new file mode 100644 index 0000000..06bdec4 --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/Implements/PatientStorage.cs @@ -0,0 +1,189 @@ +using HospitalContracts.BindingModels; +using HospitalContracts.SearchModels; +using HospitalContracts.StoragesContracts; +using HospitalContracts.ViewModels; +using HospitalDatabaseImplement.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDatabaseImplement.Implements +{ + /// + /// Хранилище для сущности "Пациент" + /// + public class PatientStorage : IPatientStorage + { + /// + /// Получить полный список + /// + /// + public List GetFullList() + { + using var context = new HospitalDatabase(); + return context.Patients + .Include(x => x.Doctor) + .Include(x => x.Recipes) + .ThenInclude(x => x.Recipe) + .Include(x => x.Procedures) + .ThenInclude(x => x.Procedure) + .Select(x => x.GetViewModel) + .ToList(); + } + + /// + /// Получить фильтрованный список + /// + /// + /// + public List GetFilteredList(PatientSearchModel model) + { + using var context = new HospitalDatabase(); + // Фильтрация по идентификатору лечащего врача + if (model.DoctorId.HasValue) + { + return context.Patients + .Include(x => x.Doctor) + .Include(x => x.Recipes) + .ThenInclude(x => x.Recipe) + .Include(x => x.Procedures) + .ThenInclude(x => x.Procedure) + .Where(x => x.DoctorId.Equals(model.DoctorId)) + .Select(x => x.GetViewModel) + .ToList(); + } + + // Фильтрация по ФИО + if (!string.IsNullOrEmpty(model.FullName)) + { + return context.Patients + .Include(x => x.Doctor) + .Include(x => x.Recipes) + .ThenInclude(x => x.Recipe) + .Include(x => x.Procedures) + .ThenInclude (x => x.Procedure) + .Where(x => x.FullName.Contains(model.FullName)) + .Select(x => x.GetViewModel) + .ToList(); + } + + return new(); + } + + /// + /// Получить элемент списка + /// + /// + /// + public PatientViewModel? GetElement(PatientSearchModel model) + { + using var context = new HospitalDatabase(); + // Поиск по идентификатору + if (model.Id.HasValue) + { + return context.Patients + .Include(x => x.Doctor) + .Include(x => x.Recipes) + .ThenInclude(x => x.Recipe) + .Include(x => x.Procedures) + .ThenInclude(x => x.Procedure) + .FirstOrDefault(x => x.Id.Equals(model.Id)) + ?.GetViewModel; + } + + // Поиск по номеру телефона + if (!string.IsNullOrEmpty(model.Phone)) + { + return context.Patients + .Include(x => x.Doctor) + .Include(x => x.Recipes) + .ThenInclude(x => x.Recipe) + .Include(x => x.Procedures) + .ThenInclude(x => x.Procedure) + .FirstOrDefault(x => x.Phone.Equals(model.Phone)) + ?.GetViewModel; + } + + return null; + } + + /// + /// Добавить элемент + /// + /// + /// + public PatientViewModel? Insert(PatientBindingModel model) + { + using var context = new HospitalDatabase(); + var newPatient = Patient.Create(context, model); + if (newPatient == null) + { + return null; + } + + context.Patients.Add(newPatient); + context.SaveChanges(); + return newPatient.GetViewModel; + } + + /// + /// Редактировать элемент + /// + /// + /// + public PatientViewModel? Update(PatientBindingModel model) + { + using var context = new HospitalDatabase(); + using var transaction = context.Database.BeginTransaction(); + try + { + var patient = context.Patients + .FirstOrDefault(x => x.Id.Equals(model.Id)); + if (patient == null) + { + return null; + } + + patient.Update(model); + context.SaveChanges(); + patient.UpdateRecipes(context, model); + patient.UpdateProcedures(context, model); + transaction.Commit(); + return patient.GetViewModel; + } + catch + { + transaction.Rollback(); + throw; + } + } + + /// + /// Удалить элемент + /// + /// + /// + public PatientViewModel? Delete(PatientBindingModel model) + { + using var context = new HospitalDatabase(); + var patient = context.Patients + .Include(x => x.Doctor) + .Include(x => x.Recipes) + .ThenInclude(x => x.Recipe) + .Include(x => x.Procedures) + .ThenInclude(x => x.Procedure) + .FirstOrDefault(x => x.Id.Equals(model.Id)); + if (patient == null) + { + return null; + } + + context.Patients.Remove(patient); + context.SaveChanges(); + return patient.GetViewModel; + } + } +} diff --git a/Hospital/HospitalDatabaseImplement/Implements/ProcedureStorage.cs b/Hospital/HospitalDatabaseImplement/Implements/ProcedureStorage.cs new file mode 100644 index 0000000..a7d3206 --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/Implements/ProcedureStorage.cs @@ -0,0 +1,162 @@ +using HospitalContracts.BindingModels; +using HospitalContracts.SearchModels; +using HospitalContracts.StoragesContracts; +using HospitalContracts.ViewModels; +using HospitalDatabaseImplement.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; + +namespace HospitalDatabaseImplement.Implements +{ + /// + /// Хранилище для сущности "Процедура" + /// + public class ProcedureStorage : IProcedureStrorage + { + /// + /// Получить полный список + /// + /// + public List GetFullList() + { + using var context = new HospitalDatabase(); + return context.Procedures + .Include(x => x.Medicines) + .ThenInclude(x => x.Medicine) + .Select(x => x.GetViewModel) + .ToList(); + } + + /// + /// Получить фильтрованный список + /// + /// + /// + public List GetFilteredList(ProcedureSearchModel model) + { + using var context = new HospitalDatabase(); + // Фильтрация по названию процедуры + if (!string.IsNullOrEmpty(model.Name)) + { + return context.Procedures + .Include(x => x.Medicines) + .ThenInclude(x => x.Medicine) + .Where(x => x.Name.Contains(model.Name)) + .Select(x => x.GetViewModel) + .ToList(); + } + + return new(); + } + + /// + /// Получить элемент списка + /// + /// + /// + public ProcedureViewModel? GetElement(ProcedureSearchModel model) + { + using var context = new HospitalDatabase(); + // Поиск по идентификатору + if (model.Id.HasValue) + { + return context.Procedures + .Include(x => x.Medicines) + .ThenInclude(x => x.Medicine) + .FirstOrDefault(x => x.Id.Equals(model.Id)) + ?.GetViewModel; + } + + // Поиск по названию процедуры + if (!string.IsNullOrEmpty(model.Name)) + { + return context.Procedures + .Include(x => x.Medicines) + .ThenInclude(x => x.Medicine) + .FirstOrDefault(x => x.Name.Equals(model.Name)) + ?.GetViewModel; + } + + return null; + } + + /// + /// Добавить элемент + /// + /// + /// + public ProcedureViewModel? Insert(ProcedureBindingModel model) + { + using var context = new HospitalDatabase(); + var newProcedure = Procedure.Create(context, model); + if (newProcedure == null) + { + return null; + } + + context.Procedures.Add(newProcedure); + context.SaveChanges(); + return newProcedure.GetViewModel; + } + + /// + /// Редактировать элемент + /// + /// + /// + public ProcedureViewModel? Update(ProcedureBindingModel model) + { + using var context = new HospitalDatabase(); + using var transaction = context.Database.BeginTransaction(); + try + { + var procedure = context.Procedures + .Include(x => x.Medicines) + .ThenInclude(x => x.Medicine) + .FirstOrDefault(x => x.Id.Equals(model.Id)); + if (procedure == null) + { + return null; + } + + procedure.Update(model); + context.SaveChanges(); + procedure.UpdateMedicines(context, model); + transaction.Commit(); + return procedure.GetViewModel; + } + catch + { + transaction.Rollback(); + throw; + } + } + + /// + /// Удалить элемент + /// + /// + /// + public ProcedureViewModel? Delete(ProcedureBindingModel model) + { + using var context = new HospitalDatabase(); + var procedure = context.Procedures + .Include(x => x.Medicines) + .ThenInclude(x => x.Medicine) + .FirstOrDefault(x => x.Equals(model.Id)); + if (procedure == null) + { + return null; + } + + context.Procedures.Remove(procedure); + context.SaveChanges(); + return procedure.GetViewModel; + } + } +} diff --git a/Hospital/HospitalDatabaseImplement/Implements/RecipeStorage.cs b/Hospital/HospitalDatabaseImplement/Implements/RecipeStorage.cs new file mode 100644 index 0000000..56040e9 --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/Implements/RecipeStorage.cs @@ -0,0 +1,168 @@ +using HospitalContracts.BindingModels; +using HospitalContracts.SearchModels; +using HospitalContracts.StoragesContracts; +using HospitalContracts.ViewModels; +using HospitalDatabaseImplement.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDatabaseImplement.Implements +{ + /// + /// Хранилище для сущности "Рецепт" + /// + public class RecipeStorage : IRecipeStorage + { + /// + /// Получить полный список + /// + /// + public List GetFullList() + { + using var context = new HospitalDatabase(); + return context.Recipes + .Include(x => x.Doctor) + .Include(x => x.Medicines) + .ThenInclude(x => x.Medicine) + .Select(x => x.GetViewModel) + .ToList(); + } + + /// + /// Получить фильтрованный список + /// + /// + /// + public List GetFilteredList(RecipeSearchModel model) + { + using var context = new HospitalDatabase(); + // Получения всех записей для фильтрации по одному или нескольким параметрам + var recipes = context.Recipes + .Include(x => x.Doctor) + .Include(x => x.Medicines) + .ThenInclude(x => x.Medicine) + .Select(x => x.GetViewModel) + .ToList(); + + // Фильтрация по идентификатору доктора + if (model.DoctorId.HasValue) + { + recipes = recipes + .Where(x => x.DoctorId.Equals(model.DoctorId)) + .ToList(); + } + + // Фильтрация по датам + if (model.DateFrom.HasValue && model.DateTo.HasValue) + { + recipes = recipes + .Where(x => x.IssueDate >= model.DateFrom && x.IssueDate <= model.DateTo) + .ToList(); + } + + return recipes ?? new(); + } + + /// + /// Получить элемент списка + /// + /// + /// + public RecipeViewModel? GetElement(RecipeSearchModel model) + { + using var context = new HospitalDatabase(); + // Поиск по идентификатору + if (model.Id.HasValue) + { + return context.Recipes + .Include(x => x.Doctor) + .Include(x => x.Medicines) + .ThenInclude(x => x.Medicine) + .FirstOrDefault(x => x.Id.Equals(model.Id)) + ?.GetViewModel; + } + + return null; + } + + /// + /// Добавить элемент + /// + /// + /// + public RecipeViewModel? Insert(RecipeBindingModel model) + { + using var context = new HospitalDatabase(); + var newRecipe = Recipe.Create(context, model); + if (newRecipe == null) + { + return null; + } + + context.Recipes.Add(newRecipe); + context.SaveChanges(); + return newRecipe.GetViewModel; + } + + /// + /// Редактировать элемент + /// + /// + /// + public RecipeViewModel? Update(RecipeBindingModel model) + { + using var context = new HospitalDatabase(); + using var transaction = context.Database.BeginTransaction(); + try + { + var recipe = context.Recipes + .Include(x => x.Doctor) + .Include(x => x.Medicines) + .ThenInclude(x => x.Medicine) + .FirstOrDefault(rec => rec.Id == model.Id); + if (recipe == null) + { + return null; + } + + recipe.Update(model); + context.SaveChanges(); + recipe.UpdateMedicines(context, model); + transaction.Commit(); + return recipe.GetViewModel; + } + catch + { + transaction.Rollback(); + throw; + } + } + + /// + /// Удалить элемент + /// + /// + /// + public RecipeViewModel? Delete(RecipeBindingModel model) + { + using var context = new HospitalDatabase(); + var recipe = context.Recipes + .Include(x => x.Doctor) + .Include(x => x.Medicines) + .ThenInclude(x => x.Medicine) + .FirstOrDefault(x => x.Equals(model.Id)); + if (recipe == null) + { + return null; + } + + context.Recipes.Remove(recipe); + context.SaveChanges(); + return recipe.GetViewModel; + } + } +} diff --git a/Hospital/HospitalDatabaseImplement/Models/Disease.cs b/Hospital/HospitalDatabaseImplement/Models/Disease.cs new file mode 100644 index 0000000..7ca3093 --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/Models/Disease.cs @@ -0,0 +1,98 @@ +using HospitalContracts.BindingModels; +using HospitalContracts.ViewModels; +using HospitalDataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDatabaseImplement.Models +{ + /// + /// Сущность "Болезнь" + /// + public class Disease : IDiseaseModel + { + /// + /// Идентификатор + /// + public int Id { get; private set; } + + /// + /// Название болезни + /// + [Required] + [MaxLength(30)] + public string Name { get; private set; } = string.Empty; + + /// + /// Симптомы заболевания + /// + [MaxLength(100)] + public string? Symptoms { get; private set; } + + /// + /// Идентификатор рецепта + /// + [ForeignKey("RecipeId")] + public int RecipeId { get; private set; } + + /// + /// Сущность "Рецепт" + /// + public virtual Recipe Recipe { get; private set; } = new(); + + /// + /// Создать сущность + /// + /// + /// + /// + public static Disease? Create(HospitalDatabase context, DiseaseBindingModel model) + { + if (model == null) + { + return null; + } + + return new Disease() + { + Id = model.Id, + Name = model.Name, + Symptoms = model.Symptoms, + RecipeId = model.RecipeId, + Recipe = context.Recipes + .First(x => x.Id == model.RecipeId) + }; + } + + /// + /// Изменить сущность + /// + /// + public void Update(DiseaseBindingModel model) + { + if (model == null) + { + return; + } + + Name = model.Name; + Symptoms = model.Symptoms; + } + + /// + /// Получить модель представления + /// + public DiseaseViewModel GetViewModel => new() + { + Id = Id, + Name = Name, + Symptoms = Symptoms, + RecipeId = RecipeId + }; + } +} diff --git a/Hospital/HospitalDatabaseImplement/Models/Doctor.cs b/Hospital/HospitalDatabaseImplement/Models/Doctor.cs new file mode 100644 index 0000000..c4a1e54 --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/Models/Doctor.cs @@ -0,0 +1,102 @@ +using HospitalContracts.BindingModels; +using HospitalContracts.ViewModels; +using HospitalDataModels.Enums; +using HospitalDataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDatabaseImplement.Models +{ + /// + /// Сущность "Доктор" + /// + public class Doctor : IDoctorModel + { + /// + /// Идентификатор + /// + public int Id { get; private set; } + + /// + /// ФИО доктора + /// + [Required] + [MaxLength(100)] + public string FullName { get; private set; } = string.Empty; + + /// + /// Должность доктора + /// + [Required] + public DoctorPost Post { get; private set; } + + /// + /// Логин (электронная почта) + /// + [Required] + [MaxLength(30)] + public string Email { get; private set; } = string.Empty; + + /// + /// Пароль + /// + [Required] + [MaxLength(30)] + public string Password { get; private set; } = string.Empty; + + /// + /// Создать сущность + /// + /// + /// + public static Doctor? Create(DoctorBindingModel model) + { + if (model == null) + { + return null; + } + + return new Doctor() + { + Id = model.Id, + FullName = model.FullName, + Post = model.Post, + Email = model.Email, + Password = model.Password + }; + } + + /// + /// Изменить сущность + /// + /// + public void Update(DoctorBindingModel model) + { + if (model == null) + { + return; + } + + FullName = model.FullName; + Post = model.Post; + Email = model.Email; + Password = model.Password; + } + + /// + /// Получить модель представления + /// + public DoctorViewModel GetViewModel => new() + { + Id = Id, + FullName = FullName, + Post = Post, + Email = Email, + Password = Password + }; + } +} diff --git a/Hospital/HospitalDatabaseImplement/Models/Medicine.cs b/Hospital/HospitalDatabaseImplement/Models/Medicine.cs new file mode 100644 index 0000000..3602a6c --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/Models/Medicine.cs @@ -0,0 +1,81 @@ +using HospitalContracts.BindingModels; +using HospitalContracts.ViewModels; +using HospitalDataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDatabaseImplement.Models +{ + /// + /// Сущность "Лекарство" + /// + public class Medicine : IMedicineModel + { + /// + /// Идентификатор + /// + public int Id { get; private set; } + + /// + /// Название лекарства + /// + [Required] + [MaxLength(30)] + public string Name { get; private set; } = string.Empty; + + /// + /// Описание лекарства + /// + [MaxLength(100)] + public string? Description { get; private set; } + + /// + /// Создать сущность + /// + /// + /// + public static Medicine? Create(MedicineBindingModel model) + { + if (model == null) + { + return null; + } + + return new Medicine() + { + Id = model.Id, + Name = model.Name, + Description = model.Description + }; + } + + /// + /// Изменить сущность + /// + /// + public void Update(MedicineBindingModel model) + { + if (model == null) + { + return; + } + + Name = model.Name; + Description = model.Description; + } + + /// + /// Получить модель представления + /// + public MedicineViewModel GetViewModel => new() + { + Id = Id, + Name = Name, + Description = Description + }; + } +} diff --git a/Hospital/HospitalDatabaseImplement/Models/Patient.cs b/Hospital/HospitalDatabaseImplement/Models/Patient.cs new file mode 100644 index 0000000..e1c8fb7 --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/Models/Patient.cs @@ -0,0 +1,231 @@ +using HospitalContracts.BindingModels; +using HospitalContracts.ViewModels; +using HospitalDataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDatabaseImplement.Models +{ + /// + /// Сущность "Пациент" + /// + public class Patient : IPatientModel + { + /// + /// Идентификатор + /// + public int Id { get; private set; } + + /// + /// ФИО пациента + /// + [Required] + [MaxLength(100)] + public string FullName { get; private set; } = string.Empty; + + /// + /// Дата рождения пациента + /// + [Required] + public DateTime BirthDate { get; private set; } + + /// + /// Номер телефона пациента + /// + [Required] + [MaxLength(16)] + public string Phone { get; private set; } = string.Empty; + + /// + /// Идентификатор лечащего врача + /// + [ForeignKey("DoctorId")] + public int DoctorId { get; private set; } + + /// + /// Лечащий врач + /// + public virtual Doctor Doctor { get; private set; } = new(); + + /// + /// Связь с таблицей связи для сущностей "Пациент" и "Рецепт" + /// + [ForeignKey("PatientId")] + public virtual List Recipes { get; set; } = new(); + + /// + /// Список рецептов пациента + /// + private Dictionary? _patientRecipes = null; + + /// + /// Список рецептов пациента + /// + [NotMapped] + public Dictionary PatientRecipes + { + get + { + if (_patientRecipes == null) + { + _patientRecipes = Recipes + .ToDictionary(recPR => recPR.RecipeId, recPR => (recPR.Recipe as IRecipeModel)); + } + return _patientRecipes; + } + } + + /// + /// Связь с таблицей связи для сущностей "Пациент" и "Процедура" + /// + [ForeignKey("PatientId")] + public virtual List Procedures { get; set; } = new(); + + /// + /// Список процедур пациента + /// + private Dictionary? _patientProcedures = null; + + /// + /// Список процедур пациента + /// + [NotMapped] + public Dictionary PatientProcedures + { + get + { + if (_patientProcedures == null) + { + _patientProcedures = Procedures + .ToDictionary(recPP => recPP.ProcedureId, recPP => (recPP.Procedure as IProcedureModel)); + } + return _patientProcedures; + } + } + + /// + /// Cоздать сущность + /// + /// + /// + /// + public static Patient? Create(HospitalDatabase context, PatientBindingModel model) + { + if (model == null) + { + return null; + } + + return new Patient() + { + Id = model.Id, + FullName = model.FullName, + BirthDate = model.BirthDate, + Phone = model.Phone, + DoctorId = model.DoctorId, + Doctor = context.Doctors + .First(x => x.Id == model.DoctorId), + Recipes = model.PatientRecipes.Select(x => new PatientRecipe + { + Recipe = context.Recipes.First(y => y.Id == x.Key) + }).ToList(), + Procedures = model.PatientProcedures.Select(x => new PatientProcedure + { + Procedure = context.Procedures.First(y => y.Id == x.Key) + }).ToList() + }; + } + + /// + /// Изменить сущность + /// + /// + public void Update(PatientBindingModel model) + { + if (model == null) + { + return; + } + + FullName = model.FullName; + BirthDate = model.BirthDate; + Phone = model.Phone; + } + + /// + /// Получить модель представления + /// + public PatientViewModel GetViewModel => new() + { + Id = Id, + FullName = FullName, + BirthDate = BirthDate, + Phone = Phone, + DoctorId = DoctorId, + DoctorFullName = Doctor.FullName, + PatientRecipes = PatientRecipes, + PatientProcedures = PatientProcedures + }; + + /// + /// Обновить связи с рецептами + /// + /// + /// + public void UpdateRecipes(HospitalDatabase context, PatientBindingModel model) + { + var patientRecipes = context.PatientRecipes.Where(rec => rec.PatientId == model.Id).ToList(); + if (patientRecipes != null && patientRecipes.Count > 0) + { + // Удаление рецептов, не относящихся к пациенту + context.PatientRecipes.RemoveRange(patientRecipes.Where(rec => !model.PatientRecipes.ContainsKey(rec.RecipeId))); + context.SaveChanges(); + } + + var patient = context.Patients.First(x => x.Id == Id); + foreach (var pr in model.PatientRecipes) + { + context.PatientRecipes.Add(new PatientRecipe + { + Patient = patient, + Recipe = context.Recipes.First(x => x.Id == pr.Key) + }); + context.SaveChanges(); + } + _patientRecipes = null; + } + + /// + /// Обновить связи с процедурами + /// + /// + /// + public void UpdateProcedures(HospitalDatabase context, PatientBindingModel model) + { + var patientProcedures = context.PatientProcedures.Where(rec => rec.PatientId == model.Id).ToList(); + if (patientProcedures != null && patientProcedures.Count > 0) + { + // Удаление процедур, не относящихся к пациенту + context.PatientProcedures.RemoveRange(patientProcedures.Where(rec => !model.PatientProcedures.ContainsKey(rec.ProcedureId))); + context.SaveChanges(); + } + + var patient = context.Patients.First(x => x.Id == Id); + foreach (var pp in model.PatientProcedures) + { + context.PatientProcedures.Add(new PatientProcedure + { + Patient = patient, + Procedure = context.Procedures.First(x => x.Id == pp.Key) + }); + context.SaveChanges(); + } + _patientProcedures = null; + } + } +} diff --git a/Hospital/HospitalDatabaseImplement/Models/PatientProcedure.cs b/Hospital/HospitalDatabaseImplement/Models/PatientProcedure.cs new file mode 100644 index 0000000..f3968e1 --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/Models/PatientProcedure.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDatabaseImplement.Models +{ + /// + /// Класс связи для сущностей "Пациент" и "Процедура" + /// + public class PatientProcedure + { + /// + /// Идентификатор + /// + public int Id { get; set; } + + /// + /// Идентификатор пациента + /// + [Required] + public int PatientId { get; set; } + + /// + /// Сущность "Пациент" + /// + public virtual Patient Patient { get; set; } = new(); + + /// + /// Идентификатор процедуры + /// + [Required] + public int ProcedureId { get; set; } + + /// + /// Сущность "Процедура" + /// + public virtual Procedure Procedure { get; set; } = new(); + } +} diff --git a/Hospital/HospitalDatabaseImplement/Models/PatientRecipe.cs b/Hospital/HospitalDatabaseImplement/Models/PatientRecipe.cs new file mode 100644 index 0000000..8208f79 --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/Models/PatientRecipe.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDatabaseImplement.Models +{ + /// + /// Класс связи для сущностей "Пациент" и "Рецепт" + /// + public class PatientRecipe + { + /// + /// Идентификатор + /// + public int Id { get; set; } + + /// + /// Идентификатор пациента + /// + [Required] + public int PatientId { get; set; } + + /// + /// Сущность "Пациент" + /// + public virtual Patient Patient { get; set; } = new(); + + /// + /// Идентификатор рецепта + /// + [Required] + public int RecipeId { get; set; } + + /// + /// Сущность "Рецепт" + /// + public virtual Recipe Recipe { get; set; } = new(); + } +} diff --git a/Hospital/HospitalDatabaseImplement/Models/Procedure.cs b/Hospital/HospitalDatabaseImplement/Models/Procedure.cs new file mode 100644 index 0000000..e937b98 --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/Models/Procedure.cs @@ -0,0 +1,144 @@ +using HospitalContracts.BindingModels; +using HospitalContracts.ViewModels; +using HospitalDataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDatabaseImplement.Models +{ + /// + /// Сущность "Процедура" + /// + public class Procedure : IProcedureModel + { + /// + /// Идентификатор + /// + public int Id { get; private set; } + + /// + /// Название процедуры + /// + [Required] + [MaxLength(30)] + public string Name { get; private set; } = string.Empty; + + /// + /// Описание процедуры + /// + [MaxLength(100)] + public string? Description { get; private set; } + + /// + /// Связь с таблицей связи для сущностей "Процедура" и "Лекарство" + /// + [ForeignKey("ProcedureId")] + public virtual List Medicines { get; set; } = new(); + + /// + /// Список лекарств для процедуры + /// + private Dictionary? _procedureMedicines = null; + + /// + /// Список лекарств для процедуры + /// + [NotMapped] + public Dictionary ProcedureMedicines + { + get + { + if (_procedureMedicines == null) + { + _procedureMedicines = Medicines + .ToDictionary(recPM => recPM.MedicineId, recPM => (recPM.Medicine as IMedicineModel)); + } + return _procedureMedicines; + } + } + + /// + /// Создать сущность + /// + /// + /// + /// + public static Procedure? Create(HospitalDatabase context, ProcedureBindingModel model) + { + if (model == null) + { + return null; + } + + return new Procedure() + { + Id = model.Id, + Name = model.Name, + Description = model.Description, + Medicines = model.ProcedureMedicines.Select(x => new ProcedureMedicine + { + Medicine = context.Medicines.First(y => y.Id == x.Key) + }).ToList() + }; + } + + /// + /// Изменить сущность + /// + /// + public void Update(ProcedureBindingModel model) + { + if (model == null) + { + return; + } + + Name = model.Name; + Description = model.Description; + } + + /// + /// Получить модель представления + /// + public ProcedureViewModel GetViewModel => new() + { + Id = Id, + Name = Name, + Description = Description, + ProcedureMedicines = ProcedureMedicines + }; + + /// + /// Обновить связи с лекарствами + /// + /// + /// + public void UpdateMedicines(HospitalDatabase context, ProcedureBindingModel model) + { + var procedureMedicines = context.ProcedureMedicines.Where(rec => rec.ProcedureId == model.Id).ToList(); + if (procedureMedicines != null && procedureMedicines.Count > 0) + { + // Удаление лекарств, не относящихся к процедуре + context.ProcedureMedicines.RemoveRange(procedureMedicines.Where(rec => !model.ProcedureMedicines.ContainsKey(rec.MedicineId))); + context.SaveChanges(); + } + + var procedure = context.Procedures.First(x => x.Id == Id); + foreach (var pm in model.ProcedureMedicines) + { + context.ProcedureMedicines.Add(new ProcedureMedicine + { + Procedure = procedure, + Medicine = context.Medicines.First(x => x.Id == pm.Key) + }); + context.SaveChanges(); + } + _procedureMedicines = null; + } + } +} diff --git a/Hospital/HospitalDatabaseImplement/Models/ProcedureMedicine.cs b/Hospital/HospitalDatabaseImplement/Models/ProcedureMedicine.cs new file mode 100644 index 0000000..0fc396d --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/Models/ProcedureMedicine.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDatabaseImplement.Models +{ + /// + /// Класс связи для сущностей "Процедура" и "Лекарство" + /// + public class ProcedureMedicine + { + /// + /// Идентификатор + /// + public int Id { get; set; } + + /// + /// Идентификатор процедуры + /// + [Required] + public int ProcedureId { get; set; } + + /// + /// Сущность "Процедура" + /// + public virtual Procedure Procedure { get; set; } = new(); + + /// + /// Идентификатор лекарства + /// + [Required] + public int MedicineId { get; set; } + + /// + /// Сущность "Лекарство" + /// + public virtual Medicine Medicine { get; set; } = new(); + } +} diff --git a/Hospital/HospitalDatabaseImplement/Models/Recipe.cs b/Hospital/HospitalDatabaseImplement/Models/Recipe.cs new file mode 100644 index 0000000..db69c0c --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/Models/Recipe.cs @@ -0,0 +1,150 @@ +using HospitalContracts.BindingModels; +using HospitalContracts.ViewModels; +using HospitalDataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDatabaseImplement.Models +{ + /// + /// Сущность "Рецепт" + /// + public class Recipe : IRecipeModel + { + /// + /// Идентификатор + /// + public int Id { get; private set; } + + /// + /// Дата выписки рецепта + /// + [Required] + public DateTime IssueDate { get; private set; } = DateTime.Now; + + /// + /// Идентификатор доктора + /// + [ForeignKey("DoctorId")] + public int DoctorId { get; private set; } + + /// + /// Сущность "Доктор" + /// + public virtual Doctor Doctor { get; private set; } = new(); + + /// + /// Связь с таблицей связи для сущностей "Рецепт" и "Лекарство" + /// + [ForeignKey("RecipeId")] + public virtual List Medicines { get; set; } = new(); + + /// + /// Список лекарств в рецепте + /// + private Dictionary? _recipeMedicines = null; + + /// + /// Список лекарств в рецепте + /// + [NotMapped] + public Dictionary RecipeMedicines + { + get + { + if (_recipeMedicines == null) + { + _recipeMedicines = Medicines + .ToDictionary(recRM => recRM.MedicineId, recRM => (recRM.Medicine as IMedicineModel)); + } + return _recipeMedicines; + } + } + + /// + /// Cоздать сущность + /// + /// + /// + /// + public static Recipe? Create(HospitalDatabase context, RecipeBindingModel model) + { + if (model == null) + { + return null; + } + + return new Recipe() + { + Id = model.Id, + IssueDate = model.IssueDate, + DoctorId = model.DoctorId, + Doctor = context.Doctors + .First(x => x.Id == model.DoctorId), + Medicines = model.RecipeMedicines.Select(x => new RecipeMedicine + { + Medicine = context.Medicines.First(y => y.Id == x.Key) + }).ToList() + }; + } + + /// + /// Изменить сущность + /// + /// + public void Update(RecipeBindingModel model) + { + if (model == null) + { + return; + } + + IssueDate = model.IssueDate; + } + + /// + /// Получить модель представления + /// + public RecipeViewModel GetViewModel => new() + { + Id = Id, + IssueDate = IssueDate, + DoctorId = DoctorId, + DoctorFullName = Doctor.FullName, + RecipeMedicines = RecipeMedicines + }; + + /// + /// Обновить связи с лекарствами + /// + /// + /// + public void UpdateMedicines(HospitalDatabase context, RecipeBindingModel model) + { + var recipeMedicines = context.RecipeMedicines.Where(rec => rec.RecipeId == model.Id).ToList(); + if (recipeMedicines != null && recipeMedicines.Count > 0) + { + // Удаление лекарств, не относящихся к рецепту + context.RecipeMedicines.RemoveRange(recipeMedicines.Where(rec => !model.RecipeMedicines.ContainsKey(rec.MedicineId))); + context.SaveChanges(); + } + + var recipe = context.Recipes.First(x => x.Id == Id); + foreach (var rm in model.RecipeMedicines) + { + context.RecipeMedicines.Add(new RecipeMedicine + { + Recipe = recipe, + Medicine = context.Medicines.First(x => x.Id == rm.Key) + }); + context.SaveChanges(); + } + _recipeMedicines = null; + } + } +} diff --git a/Hospital/HospitalDatabaseImplement/Models/RecipeMedicine.cs b/Hospital/HospitalDatabaseImplement/Models/RecipeMedicine.cs new file mode 100644 index 0000000..95994bb --- /dev/null +++ b/Hospital/HospitalDatabaseImplement/Models/RecipeMedicine.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDatabaseImplement.Models +{ + /// + /// Класс связи для сущностей "Рецепт" и "Лекарство" + /// + public class RecipeMedicine + { + /// + /// Идентификатор + /// + public int Id { get; set; } + + /// + /// Идентификатор рецепта + /// + [Required] + public int RecipeId { get; set; } + + /// + /// Сущность "Рецепт" + /// + public virtual Recipe Recipe { get; set; } = new(); + + /// + /// Идентификатор лекарства + /// + [Required] + public int MedicineId { get; set; } + + /// + /// Сущность "Лекарство" + /// + public virtual Medicine Medicine { get; set; } = new(); + } +} diff --git a/Записка/ER-diagram.png b/Записка/ER-diagram.png deleted file mode 100644 index 4948bb32bb6bb5ef3036b888b88c4df23123009a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67944 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 L!+T{a&x8I8Kj8Zz diff --git a/Записка/ERD-diagram.png b/Записка/ERD-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..a746bb0a667cfa42f5c06867de8873aa3c54308b GIT binary patch literal 67320 zcmcG$by$>b*FLJEASFK1AYjs+f`o#EbR%6-14APXBBi7#Ff_uz&>#&%Np}n>F`(qo z(hd6_(C1a(Z-4u@_i^k$RD^r3dtJ5Gxz2Si-YLpU;^R=@T)K1#|GCsNK zo@Y*Lw()W9Rqk#9Yq3k;J(3m#Rh*X9<KS*hE04%b#z>vD?0rY2di5%8*E#XAA||8_Y?W zxIq+9%-A&)GDiV+MP3qY`bka$?$Y7&Jn5Q=K}9Z(?v*b0#M296hsBa~AJ;={4659Q z&(f;tn#{gmajkO}Eh{8%{JBvWtq&6QxQp`CKEtZ-k|A%2bKWjJvpj$f>`d;+hEg@$VHVu#8-tIOFL&Nm&FKHf+9KL zYZRkL3p*d*)x>9-kWCPlhew4LyX8=PZ;ig8zQ`B0Oz#j_rrt>!#+rf%y+>8&xw0VN zX4G-_=fPpWO}JAR{;H=GXDE_ywqS8nH_SEEMopU>$$_Le>^Jl)3_GnNt6;RVWpXwD zerd?>0P!$OV(%kzD-Bs{r<`HWV4+m-VYVl#^DsG*Z|8dtKWXCola3I>i}Bw+wOZ5J z?A#bUjgQ=WNufK~5Vka?IDf+;FN76ul^~Eb2YkOuhbexcsWahj-Yje*QI#T&t#Qy= zf!dsk(kRq=`?}qd-->rP8STXee0^~Z)baQYqPg>}ax;$fqLIHUmnpY~#K223-H^7B z+RD5ojc7wE$~FZ_NVYJX{fn5uAVfYi`}rBK)6gfi`NF#tNYt(AAv}Yh28OD|z*5E7 z;p~N(i;v5lpT>dNtMyl6ZC1s^%WoE#Ub;A(qE@*L+{9G<5+kx1_WA$yebKXVu5mNX zMb#eS--l)uR3Rd!x_4oDny;GWGo?sAe-|E%n2W1#WK0ZW2-<}GIbMl~?xUg?^43%g z-d>-I1-m@o$eH!!H+vSEAK;dkBP*^CEjXq zy~e(H2d}!}*dW(lS@e`hNQ7_vSR2jRl=s!+#X^@#7v6F~XMGta5n?19xIA7$h8Y@(gu!gj{Bs)yE>yJeqS{bl(`HGR_0T^x&4M)t~QL9zOFf za!-n6)>1q@c#*2*z4x75xzO<+{?GPlY`wK}_tT!Q;`CRjyN*V1HbH7%xhcG}Q5zSa zB^JJ`*L~^Vv*d4~LO1Ljjk`V<9c*UQf8C;Y0yzrU#N`~O;=d&c!Hd>di%p9Td}Vc~ zTyBkaWY3z}b!%3AdESd(mu5AADOj=`;!G1~4R%;wffhg1$R`^u`czlSa;qUYP#Ds+ zl+347peOZ>Yusr@F>1FyjQ<0hLT(7kBQ#`jSkcH~;lseVX*L*eahYX8Rj=MS=`ad5 zm__h<{9OOj&o~3HTA`Q+t?Qr%q?6qbMUsP*8aBE1Mn2ly=qlf=n(IYP@)Z==9HmBp z)yBrPVVXztFB8WERLDE(CWM~H>N2lax>jt1btU24S**Re!VW0>tr z56I4d>{Vpk@cUK>zKnyc)v}AO+RpShpM#S@4n)G&DPh3v=9W!ylvb5w>uc)OTBaU5 zI%W|u#3-x=Q|OYdoPw8N9Pqu~<&0safg|AdgItl@Nwp5B$=raDS9qUYYgAqQjy(At zf6mAUn9=F>=#0b5-X+VqhH(yQ_x0R|`fGCFNebCTawOn8cfovn-R=E*SLEIxswq3o zJ8Bp>^oCM_z$H4TEu2z3hS`XX5j59SpZCDT3ad24w7YGu{0Jtsrc?P+D)7*LBzID| z+V*lORcX%YE@H1nJ^e$6Z1Q;37s%eM@4#SZC?8D>W5JZWuk?U~1`S4OIeW{CB);6z zb$E2x;vEwiqOyDlPPlEI@z3DAXhaOdSp3>TyV)4eA>GQ$TUK_Y;wG{8b%}!!Y}xt@TS8;cIgu+Z3e+EJGI(r68OPd~dyi`G7Nc73r;cEca`~m~&HB$v#s;3lpQ63? z5E6S4&AuKB+don-Gvd=~WW-81x5w;)s7|uI`IAzkcle(GE-|NM{l-J>5n0_zTbsYE z381w<4JAvTSsvFOKVcApRsm5hD&X|fd@aA`X$Wf!}X=x z*}QOl!o8^?J1S31RT_+CY@w5NXeg^Nji>y+&ii@ZEEqzZ%On?Su?2A_$ux9ojpCb8FRK&Iha&I1B6B#*ICrb-gW0~sG#16fb;avcv*xSxYx!Nq_S-NKm z*d4tX3K^AEP(WdX@cVQ-GJ1$s$6c1axEF=My4RO@H{Tg`Qemrf5o{ilP*Q#QzXvxw z_59lp?*-Ba1zlfe5=gsEJ(p2S63+_Kjme(CmDfB1 zg6LlhW07~KSP^VummKv`r)7PDo-5h?zA*Qn8i83m19e@4kGzIpsU3Uckrz1GQ`>Q zKDb*@S(kMmzm! zBaCcE8X;1}b#>rmVPORcC$RYm8{^DhJE3JKv>=sv2QX<^n?P1=KFetFo-)0+-eTY9 zY{4Rz_hYX>%d(aEru_PoHUzZK0Vw{E*O|36gq!R;fb%*uj!3e1(4j7bJ*4=cF5i^u z)tV%LnDVwm%mEiy3AX1eJ?@EKL_^peO%EXQN*~!S+}=4bIN@sjGMuj}Ej-50hXmsW zlt*ANNot*icf|a8=1QV19M>Q1h7l!iyuB5Tyvhmp_I_EG?T-W^qpQa#JNZOyZFP-F z9Cx1X)3qdID<}NpOnk?FQfQj;VrmEKbZ+hWEse66V|&4e-FD6}ya@FjChapetrACB zELZTr%c(;k1PSIX`It4Mcg{* zRqP$ni?U7_(hhKjw+O6N*5InjK`mZG#p7?yn1Je3Roi=K5s7duJKL* zUGbQxWMeP%$DLJcaR@Ztv{YwiFe~f*5boTqR+^bn-n~8dbYPurkNLf24n*ZBz+RS2 ziTi$mN@b)|zBLs0qeo{GYb}_)uNbRT)|t`|wg6X8>PYzS-QiM!R)LH(^y`$$5uUGB zuUaVP<@N%>gC1lZKFKQq9+4n5ZBIs=81;IzM=?ow3BU)(NbnnW)LB(j6VDFGYhIrI z;00a;rL(5Vk@ZSsOrI-E_l;rzPqE8`>nuFzD(!S6^}Ub~a#uymoB_Kj8a?hiX~v@F zIFqFo_{%y-2~wV3xCNKrOgH?csV~@XJ=sMM-DF%GPG6;UF2mR zF>o2YDqL#~tuoajhy{>?4JF=Q$Fhp09bojBE+snk{v4+8HxkY>p+I&GqD0xXG8vdP zOFj{GK_q#y#N}AJm_k@FGqd$l{A_+ONKxu;bND~idX$>iyK*{H_$-T3V@yMvJWq5B zJeUbTqUa^>mmd0RL_QJ@Ya0KE1>;C(Z)MMcpRt7bkY0h=4N34t8jE^Y*#rSMque#g z8hX@HqoVrJVelC=i)V9YOU{N;wecXt=}e!|;cq7bL*PrWLv!Y=;knnK!L)6?6a1`l za9;Qe32z-C5Z56j^&MASb6jgUZ+&JeY$vHnxR!f6L!2VNTm=g1c*~mHH_DmLUP#u5 z>nqbu)+d^N(1`)1T;i}3t|(t%8@g#(8Oj>TS?0@Gvd?Ugigd*QH_~_QOn0QU%b4i= z<(xaY;jwuLd`KTDvC7wH%a>GBaClNtzE-gKh7;S7H&`l}t+LcZJ$ySV?4Hi_{NKJP zpO&Ry(#XYkSF5)CeLJg79kbeSF^RWG;yqIfo&m{lgteUIK4y0+C);2CAJ`>>KGghe zLj&dz95BpGJ!a{;?}yk$)t0|vTj{hLtw0=Q>aDyJh9I1RKTjyPxY8uiZ;_+EBMSO# z_NKU!(kC*CpB#y3LpD!;N4%pJ&V%HL#>O+@gb_t)jzG8 zxKOMD2}V>nob&gPrV50#f_X%Z`zsm?t*SRAnHtYuAs-Dw%%(Q~>94jHx6sL{UeV`h zfSfMQY`s(+2^i+c`hoptZfn`RlW;%fP4)b#mb2_C>%bu&q+pLtbqQG%Z6!ltJ_pU0 z4YZ+RIT;@;?dM9(>shcLpS9lH)Fn)RT3WQZTK~YrpcBH(OtT)xM6;G~f2e~LqVTHs zV{gLtSd?_TuRfO^K6) zTd!*ek`G8Y?-ix=SK2u(4ra!2YObB!!YcnDoCi88xtCHbEf#vOtoQa;(bJ6=shkD? zyO9$zDL3=@U{{|jFHo@Rl_>lSYg|BJk%~fHjR!J+me^k&dkloPB9PGt_mS>9bQS_+ zT`Su90L@gr^F_6^+S*NF5m61}&QVc9mIu=*tLo{9=-o2V-%2Q?$)_24RO9VnG4Ls< zBP0G+puOyD6%gkS3|em=*!Ny>-Ah?yT!qXqC__cDUClZjM+NEhkOZES>}8gT#>+cE zK>NZUi^kOdegEpOn>wPgD@>)p5_;4Sa5YQ6G=wuJ^RAV0)tlRnLztR7; z!EN-CNVWOv2iu?(?LdV8ZJYKjF_&okUT|VXRR*Ty9wogX0Dg z3KPQWygf@SPT7&sXdVw%;@SA9RH%>tJ^={qB%pWco0b?qtsm(%-S}ZChotq#rW6OZ z1%{uLwnAXtZjZzGI@#f&plA)bWTXX6l%S_9#6 zMVmL&I_EGd$|s;wj3wK8EMC*_8?2@?Fo$B`BLQqO8FJhAtugdqTMQSAekRD$cCQZK zvB#7KNqNW{#e#bn=qQWoV}ZVWGCt@;W;gh98NBapek(NYz_n59sNb*x!L3^$wwfQR zQi@vRW)%F}FToJqvZ1V?t2r9<5wvoYx-t1);HCY;h_JO`#i5ub5A(R(?ld5XNp5Kk z8ZE&(9Rf?#J>?==^#|q*&afm1TNG@>@H5s%EGcxI2j-G`gx9o|x=;Xk%Ra-x$Qzi) zvzS{p3xTy%46n9h48-(5S+Jte06PL3u#M&&WLh1K$$9E4%-qI5hv7%od(TWVEHz&P zrEb_?J}^u}j`*KeqZXFsp$+%{a^>hy0{~%hocWI)u14vqg>QrnsTNVK{IzEH)wY7P zQo<()@b4nHK~uNgP`Mi7Wm2ag8;q>XCD~9y*1y9YIuL`P~;}wT~IiO;sC&y zc`U*ZEJ|swJ2cqxL*m{nwBDD=UG9EspsFa{sL*TeyzYI5;p=liX^Z2lQi(+ky@-2W*B=sGWZFtH^w;!q*z<^QK$oqfmq|cY zC*<^u?$@@)a>QA9PTp6t2_OP+Uo44X|3i>Jx*I8Y!EZieNg;B{YxpZAb^Z=?tfh{@UponfN*n$sD zH8;t8GnA{Ap-&E1vrLQPTPz`x625;xHRt8Rc28!NA!>Rhi~ZB37T%Gix2e)8f~ zhsE*(!o|OK!cv- zOOfLQGz&n`h*esSJ+}o=0b1PfNXYhTO7mvWmZ$$@roOn>qoTp}vb})PDBM;~VIgJi z>p+12Oe5MZRz%|^57_!P@VoEWxZmc%3x5k13S^E-CO&YH%}w`k)o6rj+ssV$bJd>L zesy-O)!Qqp+qRq|n|e5W%KsD{sQ#F97Y>)tGb(jMEvAub=XCRq(f596*uY@?SZc_= zdBD84yD`sWFlsTDXU0T1nO5CR;wn@iP0W)gd<|KABsDNboCc%2K!g))=$XOFd3%{6|CKo6v347gZUoRtdD}7&ZgSl+C7yH~N zrIHAXoU>B*-U38H&@#WI=rz~wlTz584J*13gXVb$t4vr%qq+M!Bz0qNObKWmmS(rRbTb)vpc&COT7EX@)jj*k81{Z0D8_g!TEceTn~lhS zKCL4y{XNy5%fo_Y&;1W&w7F)XFEUqFf{%s~m1Y3O*%>NpKuzmSdzD)#iq8$my#xH_ zrmjYDg2!j$Fpo+zpX#GN$Ee-T4WcZi6u;_X6S!3pA)Cq}?^YsT$g0-DSGNAY=uFV{_`&>7cq>4CEzNR(f)U?- zL{+%N_BBx(M3T2_C4IC0`tnTJvR$Ge{N?AJvzkn~cN-m_jSsfy=4GOanj=#@ygc7< zW@SDXU*(I#nh~%gz#(nRiNjf!BEQGO6def=lUZ8ogP)Toc?Td1i;r6wpl;wDd(f0( z7`Cq)zySdju`KQdY_U*SCqQ6iJH^au)4tjO2l^xlWtzl!c0|)N1Jz7(-L0sg|JpKq z=g_s|@8H>a3`hz_)2UFCJYT0PRm62DK?U`NRWCOFhLj? zMW}Qcm(8}7_e5=c$%O#UZuC)3`Cyi^7PYp(3#9KZ{>xRis#d1Cicx83752ZI%RY=hUTI(AYhHCTWmvAC(g8ZP( zC{eNsi}lU#*)7`uDX%&v6ZZ5OK6v_@diE|w3-QQo{*WFg%#)({pz*t^irFrr8Q14; zps>NV+qDO7JZoHdJO6zvpmaCA(YB!a)E=L0aBb|7n)bRpZeY)v4!t+4UK1xg6WiOe z-IhZ47Wl`(bHI1GkdeSsX@G!&&dP^T4b_v6(eU$6^kAJhI8=aWmg*jhtPHg-;nfXD zf*a>%D}mMOirBzC@6~I)TFpTrzbE2{wcp85@&6M**tgm)Gwd;YJEpxIZ2bb7ko_*8 z{+Sn<#hz1&2;1QSe4rtP;1$~kvmCV_UK<^k00vQ@=HNw1PMfB z&@rO%$5W~kwAUO!Vcvg_2z3rIZ%@6ZcBYUB3uO)I2Us&zIc5-#QoPIQ52Ma6OSNgJ z&fuK{BS*u2#othX%CW&~)`^^R7(hfz(p|<;F$f?C)wnuAc6bUk;Q}GRxEW_6EY_&5{!URTa)q0^asTf|-KV84T;f13@gE!2FqAaPgYb1v;sRUWEUZpst>1(Eq zK7L2hlQly)J2CChvG)7HSO>!xo?cT_(z}np5n*PCZkcik-4-e(`^Yz5Nmz)E=Wm6PUNMvjKaTkKr2qU zmq7Hrvx!p08wK%qs}9Q`HQf|#8x=T31)83tqow|W0?ujG9^R>(O>j+Tc|vqRyjA+6 z_yI5{!GFUL`bvC4bn`cSc|jJ^0r2NB{ivEeuH0=~?D?HmsLWhrD``6uL01HH*{scn zXJGEFv4{RwLG8&=VSRj2f7%V8iX)DWa)9j%bZ9^#brrop zPJi4wu=g(VDB}adB!qd2TI(L^ZNdZ69T_^bfBxvNgTf8h$Y8g(GnHWL`InqXCHd>2-zkc~9$^7(fQVny0GN2IxeU$% zv*8fPbI-UJi{$@=EWN+6Gb9Li?p?btXQ}a?1dwUuQwAPxu4oI3#*O6BhgwEKPM9S2 z`$arGl0ufo`u?pQE8+fm3G*tF93H5?ADN&LD0PBGvM9Z%ovdRI{o!3F6!Q}OTC^Sn zsFP|fk|T!Ge14}Xmbl*du;>?k_NcbZ_o#3PQ)SZE5grv%5O(Od1f(xOg?V}0yZ#3+ zTEwzk0VHx292harSdN*|D1)H5LH3SP;CUQeqiUUunC7BZYAA{aGP?w0$8N`CeX!$* z+&Y6$+(@LU6Jy6TVs&o%9TA!=*96L_Ko-lqO4-s55VsyjYkIt@0(|+bi4@9eY7OmLh>My@Bs5PARLt}Hz4(*v@i0cdcP^8KbURF& zNKcv8ZUq$TF5lKJs9V&*=xMLk19H8In9H(%;;QqgZ|RtZ&%Mz|6z z&!ARt^RR|56U?%#rriDV4_H79z=AtiY(sZaV_D+X?|GVa+|*yC1(BgSheWYgAQhu( z*;NRLOvKx$R+T|pmb}AY4{GaEy+plYo1gcSwNUE}q8J7$_J^B-o(qpmR15O- zI1CjLUDfh)$`(C@0Tgl&x>i25W%l-R*_G+>8yG_Fik;j?pD@pIJaO|ZVfi|5DSy{j zpyOvmHp2e^U2Xe4a>su5SzS8VoDwNWmR&(UnQ- zGjH^6{HOc}piF!T)6g}Uu)Ct658|jq0HDPQ3TJ)JV`vQ5rT%KJ-T$OCOiOVvV99ZC z;>PONCoGMqrTID-0v$j>)40X~XBqKxrWx$E0{|bd7P{Dum626quqUS9`+;M1Af}t< z2AjHfw=f(a^BJ{Cwh0zv`ckwd+FzGtEwfJptkL>-z*!(I0u54sas?WC-jxBQAZKtw zwySf7()WL+TYi`NpfTeEkmCZLMLLK+BEX3|5t$^Y7|R~R1)i38RjEGI(vZ1hsnR;K z=U8IwrKA#UvduPxIm``TgLMi~K?7+k=lM-aFHnF#_J~FOT3{`8jB$*bCxLAU8YhS3 z@WO#LJskH`Q6;ovhSHMlY1&W@7y7t8{{ay3X#nYxO-mt{7eOO2=BbP74fd-2b7dO{ zum;|GOvJgV;KyFvw4iadg7iQ}VW=|@Qtg3UZ*MF#J) znJTe%FRX-yZ>r{#RxlM{-+m9RKvs(gM;Biiq00)U;QLWLZ(LW0QlsO%+9sltSa0jz z12il@@WaIY^?%0AKVv>RB3~~@h_l>-^>PdVr2q_LLv}_kAt6I)=w4aR=l-Ac^E<75 zO>|kBI)Gs5JhnCO$U1WKJ$tD2pCa_X{y&$UP-@WdKMJmonf|>B=$iKX>wskBzja;z z@&xE-fbXz4|7>P*2_{R{SvfIq4s6sTyqAOUtO-lFj%(8_Y*pK6LY=vh@ znwn7b5a(JEvzQ!C>ox1QqG5{nYvs>@@!VjZ^3u`5u-s>yAz)523e1#; zxr9Xp@f`mK5`edGiX1339Kr~eC`DgPL@p4BMS|w{GDNGe zuri4`lCAf^4w?V>1Q5{G?JpR=tBbp42NagFgMkYCE}c6B-yL?sV;5*Y7sOBcaf}Yq z9d%A(6kWani*Tq%<;Qf);!Encq=ns-MvDp`iB;cSdjz-dG4qdog0^-2bptv2KyzaL zyKHg5nP`9H;q~(_fzW4W=2zk+oC%EoKBVy++D;ojiopav{lV^Hr!OXt9`1kniXZa^ z>?!c`m$xqn7lOvce}Mn~XUzRiXo(-^jsG)){v7Ood+{%`q{4iBEzl;C2cBQ~rbb)0 ztN+_1{~rwcW3XQ@`E3EP-&qEcu)vF-y}Om%($aETSM9o$WZ!T7DsrSt>eq8FiPx^- zk{pBQI-KQp1w>87-)w(Dtk=%09po-|2<-do_`jVqP*bB8C# z2U}-c`1$kG&B135o5!FvN%V(t&#RnGxQ}Rekz#>2POO1Zv~6m3Z0LH&=e^KVEc|p% zB?vaW`8p={ZFGXn&Oe7zt9Kir6{LMcgjRD?o6rWsK29jI#?~AioT42 zc^t>4FTCA5m)VJa`p}l05iqPtW*dco`asJ;Bl#!Vr^g3p8tKwe>p{d!ue9+N&R_SY z-W7#De)Qk6Vg_Lvl->AfTb^Sqq|gChq`r;_`(Yb^5L(X^9qUH_r1I*opG=3bn_0)l zbn?J+htOB-xbfFWr!rUA;hEhgdFbVv#_ADM09L?-W^j7Cn+xRRlSJ)Pik{P3nnwge z=qJFNO=-KG;%7Rcynl`bVERY2PH855YuM|WIcP_)@3YlMDB7kLP|d@#K3}=<99xJo z5u}=PydEV@dP4JoAt)%J1HybPnb?tDyZ-g_k`HGyE>Ae{mRoicTYaSTicij8I;;39 z122BG%4Ag^%^9KdXl*RNk)xb%Rv^&>uC z0sg4au=YH~?6=hw8*Vv$a!RVZ*Ee2ND|*S=JS_(17I8i`Dfw&NQJqorvLEB|1<*A+ zpi@BK^Xz3&R5JX~@3$5KsR!Q#w*fyvSpP)@^)cA=gX!h?plW$=B7-^W>CUOYgWrhv);RLgRc3-zVTmXoN9ohj`i-KL@r;j&HzNN5UCUtM)@( zAd`(4*tStLOr*mV}%QKs?U@B~EGfWP!7t8p=+fcFM#xUMHs;wcFQlS^17W z^(cEWvSHYu;5^ zGvmCspq3OJ;DBXhxHuLsZ_jM6U&P9DOMtxMR|^4C@!{A0`e=ThP_#}dlA$)mM#aPt z61q%Zqc!*efRgl~fRMS1dQf>a*q8^9Z2={I)hwXpV(G=)+7sU4cHVE$vv)=1 z#y_H|WIbvMN-0cqJsiDLmx6F~HMS`gQ&c0)JWCw%)iPm45`X|0vKB`V)ao_5-ztd( z!&=!>7RhyU(IVz9sxd8cB!Kcefy{lb*45L~ZA|T)Qp}C}s+RT6*v-PRCWFAarxNAC zR?BG|bMuyvZN6JjM~wa0?X6?{PnjW$L0%YW(Y1b9#tW?U^Vjiya?-bOOzO)6ipDA3O`gV&8 z386b*M8R%)ZC|>5QmRFm>nY|l2{L-M)*5Y7VMa5?!Kq7@l8gfWae7>#9hyG}VFd=U z+y-QSXl4DB&Nlref_2AGfH<(4OScb8H9Q|h9#y4TqUfbRVHtannUJICg^`;`|8Gx2 zHSR)oFGW2{ol%!tZVWNrk~xa?dBuj>)!~M#5KWC9K}oo~mn#b3fFG@U@G?-$1Cx9* zdledN?O_TZUNgy>8TeE+IV>~N|HQO9U#db!X_jpbQDhIOD$zocSdLHrI*;H@hbJ$9 z3wU_4---M<_$7b7QZYh_zV7lcdk+BZv;c4K<1l0vYTyVcLUQMW0`((5sF%C|<-S7wsUTLoC>U%sv%1 z)5IInuU!Ws=P|`My2TZATZdm6ET&NhkW3njk5vNpF>UdQ_QKgHVO}(~qjgdMOY)F_ z6=iech1vk$cywlLdvrKlsT`r=2H1Jy7x>1$JL!L6>ehUF9?s|PCDq6q_&FU7|A6O! z4C(Sh1Rrj;HK3^y){RrukkBY__|cLJ`PWKqcECMMll5ZF@2NmHQgJar8Vf&(gU%yB zYhIg=x1Z>;<&y;>=g14S{#4P*i?j#?+XG8@F0nba>p%%S)H?I14`o_cEsVYo_vpOkAcij5gE?uY6r+)3 z>oStvt9@bkgPeFv+Fl{&FDFBm4!CD~?iG-w>^54_nZxi>T3%2h0c|JKR+XK)4bP*= zDgwFkocYC_NY~36_ z00IagVUg#WQ=~6lKAomMGW?MZi0Vr>RYuvGV#!@7n2NK^*1#-v-emW&_(~&0PV3ID z?++Mn*l$=_yROv^%8wBdv!=AawFZ6o$K+L=`9%-b+l<2Ln9cl0G@gz)cBYs~fuDOI zXuTTx>y{3y|EK055((NI05B|7gc?>A;-xt7N<3`zPzA))ZDZjZFc*7`s>CF$@;hu#iEHwgU*eUjl1MpcKCl9EkQwLWt&@;<6AvnU$#Y8_ky zk?lg(x)cvg53q-|J18DG|(EuI2_!tY1^L4~d*K#*Q z!;an!T~R3_gJuqKrSHVkU3h{7hKX#yz7CBVO%`_d2wTzg%+qmsEMc*pSUTHTlhrNb z3j|pA{b5Ay>U^#0Y?=rzH@3up=hC#35^;p=Ln)eZ^_o7b-I#Ac+4rqdx=5T1YyiO)5RpWT! zhh&*G{v0iw^Fjk7=ps1JQj%*8zj(zYnWz-E;s2fS{O`lSR`*1z$)S!`#>SRaBI#z1 z;d#{1{xVwplHGK`J^tG?q#X8J(@^q5)$A8fqeu_f`N%gHm6qOz?P&UH9U>(uk!ZRs zaiB36Gm|?;C()Dw2}rPVoVJ&1xox7?Z+`-Owb~e^-fsLlouu>((C< z0=R~8>!&Nh>Mz8Xn?0rkx}ZkN%g?)@oKHgZ81YXyx;?Yn0CBkgK~tIk{ju!Yf)}p< zA#)b%d$#bn5N+Ifq679U-pxgyW?Q^my6x?{a9;Sn7s{bw?}~->M-YWBw@QmZ9IrP3 zTeXG>UyBh4EW9hR*Em*mm|A&Id`lDL&&W|WR_Y5UJ(hw3i(R<6q^+V9lsrIx9fSeuGH_c4HS>$#B z4MU!U2WzG14l2=j^|oXLT7}8UiYAhQ1S$*R;BZ*NuBVbIv9})Hr9N)(ay_PBcPAbw z1)Hmfc$K>)XRvwp{J(8qDn4&t0xs~fno@joTSrvodK|)1B+kF!)fxw#NJcfYhscHy zi!%F^O<`f-#{3?CaA8j`5gPw75&pa#1q`Q{ii1(u7Y_2al;j9cg!joqiN&vDohSEv zfjt;%_#%cn%F6hVQY4>3p(`5_>Q(a93upq!76B)HodDH%Hdb&Gf~EvhK1Q-eA5LF^ z-n-vRAW3qBYz5T)pefNEZ^KBZI19(S+XLdlWaiFiI@j-WEGxx3q_Q^4M;9YFDv70u zm8OWd66iZ}8um(EQjY5c^uMogR}H(y0_R7SzGFpaBNoXP_bbX-2Gw2G2;`&;jzzA6 zZlPxq8pZ$q6^qS1{WE?Ei;+#h^sEGyZGUkt!g5tAq4CFOqLhsqVDm zmxYTM4w`K*^9;zPxE5EjvH8*XNT&zG7Wd)@(9*3({hum1K`3bZtWgKUUIG%WoJ6-o zLl{gaS4dz#`WHY;M|2LR`dhg~wdDs}EqZU;YfZa``Oy|n{<9DhF8}M$$4%Qj*>57N z74Qdww1Tn8jWo}4-YB-yNSPiX();cjrJu`GGztLEl!UGn?X)%%;DNLej(uH_q#wSa zagDf=T$9|pXqjrC0k^4xwmh24{wDRtC!>#!k1N^a)lwqMz!1h&sDqfx7rb*sjRU?} zlS_114}D%CtidwjwPkW6il2pYYSF{WDxa=<-I>HNF`S`CZJo+4>;OfyCO-Cgi)i@Z zKbE@3@~*I=O?9SDx>I14#ZX|)!eV3ft{gD6T+tGpV4@S(YM^1FR7f?k!qW-{n(V`R zR6|o{PI_S;B5J0CBp5DS2_(lz=M1VEaEO~skO_C|R&Gq9T@m6#Y11(Ydp}*CPbB@@g% z!?p$@*5mME0eyzP6B_R?5v`5Py_X4&;*Z%aAbU_{z4VYYJmbYU&{UR-1~HN!{PaQ< zX6{-f1&&;UYS+FrsMeoCd?DVdr?V zes^(6@SCDBUJ8N0VInkEco=uCH|NxdX6rVfFo(Oi`ke)uR1f)Uww~cT*0LA7yuP=Z z;*X)q6pYX1eytjFmMfemztw5!1$pI-0!ypC0J8*lc*k*=+2!HNeZqz8y@2CT{d)fS z8a5r95a+_4k>q{Ko75Zu1@hm$ny-H8kp0P?Kl<{RR1H1(Q^^n4HGLPUOR=DUhBdtC{g%BR!? zANWo?p_2lCzBCuE;5V;<^MUj7Hdm3tgAmrqn=>rj)J>Tw;seGBkb^ooXs{FaNZjL+ zQck!}{^g_T7l6dL6DT%Ev6D&2bHM@B;DD&i(2t$kVE*!(P2OC$Y{Oh_ut!K{baS`x zADm+9RFXAnWZ2pmT`@2j{y%G~h`35{wOW(Aw{aQB7d8~1(x`10)C*7>jeo$znIj+zC5_EdT!>3p+iJasdg zubo(Znktuy^;1Yb@V8c%1Fjx1FZYLub*d!?^&PqYpZhp${R(^TQV?~arVYa{$K?Yx zXna;gmJ-hpH<>8`!9U#J{n_cbLHq;bbp3!t43KsQkG(k7Cwn1y9V3yAI&;77tb*I$ zhZnuxu3gJ*?<7bYgm~({0j5*`VY=hu<8`&)Eob#yI59FAPDP{xzl#FUa-JKKfeLI4 z9uRCh#>V7?9z7E!i@6u+^QmiVCu0SU$##9pYzsH(+KYvMqyR1f-UOWf`{-|~#IB=kc?+@kHj2)RVE03uZfJZ|bO6CjBx1}c2Cf`@%y-2P zY;daOSKAkk*Z%>Wig5Hv-&4t7uQSy#m{$T<`4+qV^SPS!(H%2u>%jdnHVdpmi>7>2z zofrsEgvvZ1;}{Ce_mVv0mL1OBN`+IOAo?V9HIR+hp~1{M>lBElpQ(gPw-*GzQOl8m6P@7s{U6?C)p5Q>1UMH$$pU`XN9MyE0AUk zK~~mAJ(;1wW$UPk&@vR@(gPC_3v$_#|n&%=DWDT=ZzFc)lAJrnz?{^dwv1p(ep}QR zv2vYEroVU|vmVGC8tmG{9`{MuhU{x;PvO9LK)K-~jT#m$bQjn8z9=CWf9(d=uax7@ z^h5K!Z2Zzu=`o~_$*JFRFcawNByY6i%T;0xMKq@kn`4FZrwY@!ApOa8m3ecuxr0V~=)&wl*qX*~!F0#S` z5_Bda_%jo+jFsRc^9f-U07GfWi4z-0h(&UX zqR}U+W1b__^wvbtCvT}%zaOzT%q{meoG5i=z1EVn@dDiEcCtz<>dT%2%_$#Ac^|xJ z4W~u(P+{!D{N_TNkc0l&tcZSxqf4<~>rc|F%ELdF6To(ZVe|#qzZ_#qb1eSPc`e+{ z-5Q#Ozi0ese_(B7Z3bq$PLhvGzkm+ zwXHcNIV~j>+$|hv@a61mpcBS)k{;}6ci%vfy}g*XDkcnStz)4Nz8l4#a_|VGiu6o8 z*T7g6h8+FTNO~v}Wc0RN`{CJ~bIqG5pj| zQJ(Z>b8Y7U9lZP`U7x9S-_%3+yTNbgznBO9{np_dBb?YSB3NdhKZVk^5AT57_buCz zhW~WOsKH>&~E}-mSy3nRNWP zrp8a-=dgRoE#yENKhoom{AFUysWIx20$Dkw-9*z|Ik3To+rD{}s?kUDJ8H{sol2(b zaaj_vwyf?GXl)zRS|)})-I(w^z0dH=D+j7q%x8N8eWv=y<`-S29Tk0Z^X+QTTt}8j z$-alJvKd9{zY=_{@B8>qWO%A4_y#s|zi@TRW^l3!)@{3p#S(`wGJ5=oH5evWB}rNS zlvH`Op}5c$8ML(Z%vm83-GZv>EVdP+HvkBSJxq5GD2V4~=vdva?)_}=*k>a&J%0`Q z;1!VTGA^JyiD?4|n7`b1bihHn_2rtQe@n!)O;Nl+i*sX%uBI~i4|a{7%tdOxrLolDbj<_ zX53dm)k(%ofB~07jRL%zEog962Idx>#|Xy<0lnL?SUNA-=ASJdb#D;K2qhdx*cSEfwr%E1$pqO5HFqF!~?_U*fab z3YAJ#PVXh()2A^-_Crw${H%Rg#RTTQ*$c*SV~?=3C{^n#OI>i=2`@ooeOSoLGChIj~+QbyOAD zF?qjcZi;691L@kD4Hbrp?)Nj)KZQzr7ZQ5mes z-SI~S!MlPi#0Dr2u{Ah+T)xAnLx}I4p33nU`X$DEwhq6zjU?QsG((Swj`l96-{63) zLkNc*Mw&63(pz_QMYZQb*i$`v&L1i`c5>aYCN?Zi#nM95Eg|OPbr~X*^P^1gq2;#t zTN(Xk{Yo86_0Ijm+(9ST=KE=P)yCMP-}?MpR?|-9Ci8!sZoluj7GDd?m^(kxvu~Rm zM9S1S^nZ_@gYB3Q?$x!Z?b~7tYB9`^F`;n8_80_dR*zQ0t}cTZTi%XU@U5VV0>%&t zzl{k$wi9EKnTCRi*$>RIt@A$Pjv`~V4EwJNk8s5q#I`+KA&r2Z89I>ekZ1`NNv5Z? zrN$$1=v3?Zz=k?;&G6U@-HaO#{M!2kI+3| zgZw=gbaYGUZ)iO&1ew}P4MEJh>zAhx2Fvh|jxOLPY3Js#ymow)E-8#ko#a$hMBl0T zz-eT%7eypRGJWrd?Hpm=-XG@Fzy^RQD?P+qN&_IOGnzkJBnuT~irRorkyL3SdD$os zHM~rabaq4g+`g3?^F4wxs~niT;~nw&rpl&Q8u$5iBr5*H@B;16$(g5`-ALpp+5FQ&D&~4d~@%3s- zqZ+*?bI~nafgwC#Q~Y+92q3+?a3<#PxYSB}I3h*$O0>jakF5(4JXLXswIsp1XiydK zG^Pzg6*GzfvRLPBK4HT09o44M^kFY8&=R^3H^PR>l4wO$`5#5N+omdGBRgFB;G%Ff zdA|ii!Kf7<5w-*9M-b>_x=4Sl`m34jybspVcbsi94gAt4zj6wY10B!b$J{))8IBt*RK^0N} z_eXD&UbFM_=;uclTvCW^e3MZO@q1- z^FkFu3EBz(5jRnATTI$R%szIa>1Xe4VXcz<%rIm@(nA`0In4V8F(?kq8GvT}1+$kg zpSEOOMYlF1Y`Q2fTeLP6>`6X1X+rwBOA8cNeT-taZmg#X({RlzxEeRz#Uh_4Z>?vBq3P8w_tJ%e7@D7wB?qxuXTMPG}~AotwO+g{TzWT8&6? zl&w2x+&TRj*LfzB_>*Uy#@ZI%JdFVa?my*(Tma_+PY166FwoUaY`T1c7+GeXEbJ&#csB*$axOZuiJ!n)JZaZ*rIY4g{!S z9v$p=IjNwpDV^QS1{b>|vId>O{XLrgrW z5pIWYCTwia&9cDC#eZYA6+WBN$MO29( zR+B@ka@|*_`qOA%Qf*zqEoD}uyv~|cR{2K(A0%7@X^ahxie)1G&RwXMFI2B^?JK(v zD{do)Z4=1wF)B_A%3m2jmr(jPzn$)o_L3_g<TbI{81`ycDbAXGHCdck|)}$4&sKrI=h|SK!7m9FJvH$@VDA6?y88! zquHXEIx|T`2E5Uys(eL}&+_^OApuJqedxJKLiQ4LUK`|D?{~MR61=hfCuu#aqibXJ zmh1GgII_<(w#epvSSXretS7e3Pi9-PqB7!cLc8$a?|w-&l(n_{$!bmqW+BfVEi47^ zww0qgjwuz5N|E}il1DgCuvj5QqVmX z(!aC`paOaNk&XgT?w*YEZd@;LqR4Kb+Ry8lyg zm}csS2@p!ekr+hGNAWV;mID{X%$Zz|2T=7|=9n8(%_zTH9W3&~8S6$j9s)hWerSM+ zd3=mV402K;76pC24>BWhxLhtptRkQd;l?_QRfbeiE%KZR1x=|V7W~L1ZZc*q*1vnu zZ3;6(kZccA2`jTE&L#oR4gXKO%pP0B!eWCQ<%Gb!-Ci7Kr~cuiE*7KfnHxUGQ4%i7 z`!^?|Bc^@8p+}Wksr;BmN{up=y~(IM7I+~p+R$R#EIv3K9opmrBl{#O68FXD+v?LO zvbQ!@hU)P#McOkVk8)=sD~TkqG#&>>#U@5|FP#533(GRayJcw}PMCH(txe(RFuL7R z1txu@&9(t@M?ffg`n#2z_z-jBhePCx(P=+a))Fp1BO9&O4N-?rSgsJPHJ3y+0JlNuF-$a|ai60`i7A5> z-q3blvX5|a)9Wfgr%Ha};a+~q^FQ**^$aYE7a%UAr@lGa@frN~XEoPQ>)$md!o*or z#AR1KU2}rw&&QwIEnS6tsxoS3Z?rB#U78+oQ?+^K?iIE( zCXZ+~@!a-xWPfP{9`NWSV-!JA8EEHP*=M}>Z4usf`e(E=$N|7vhMcTQP^tqIC+T>` zkv<9~D5qvVdp)&tsI_$ zaA&n{JNj_^U0}#l=gUo>U>RmfvfOMM=I?8%eE>937F7ExA+^v03S4pFk~oA$FO<+! z=TQrS(#4vzLarqUj0^LAVOE6$x9!NRMbEs&qXAShJ%Ok%K8JAn#VE^yGI3CX#i)Sm zoQ&AX2wR&Ci)jH7en0L7yIND+XAoKMtN3?oQSi`*_n%^d&7#J_Y}~AVX2|E&kRoGR zL#lZm4ue5Vp9_uFM=1!sKf5UXXz_mM8KrH#7=_iYfP6=dIrMehHhZLZnqRRv59ig` zJB$M#otWCWE4bVILGzT{&X`5W(M9z{Iao|0nw)3p?y>jK>cNu9l>pqttyW2hYhdij ziF(X`YH>DDx5CXTaL)r(f0C*s5QqL(@Y}zpWJq(O$`Ec609pa&w zsiHe;{Cxu-C8|@*fJJ9{HX2G^NK4&E&yulR|JN=J;4S?u?`w)1Q*(_@EqL&k9Za*Cl@D0E+=->wk8lOc%<~bpI+dC^rxPa(Ts)Y)}KuA zZO%i9Qp&vN-}ZxT(J!x7w4^XB!Q_TB2_+t<2KU3*+khR<4#^vV=_igrvMl zp}mqTrhS%2Eo&|D*6`g1{@X4{6m|B%La91>RA1y>HWJmlI8Oa(Wa|nTIQ#jjem2f@>lSi4zyc00@ z;9r6At;7T!-@0_3(mQTq=%b~@m`VNA{=MXNe?AS@QzQW!?@j$I(ra`zK%PuSE{t71 z((fua#Ir0n0p0lNrXJSzi(%b2!F5!+oTpi^z$sDdH<*k&V8=g9fg3Aq<7ZqYhiy-c zz6Yr>6u)4mjG{jod)V)G8t5K60FyRSQH%Qga^Lb7Y_sF=@X-p(ybjpHE!k(0)F51w zUY{g3#5r^W;eYazBX`^g(V0sv=O<28V%5&zm^#wV&jrfWnDASu3`8>wwD!N9Va*n3 zY7H{FIj@Y5-#Knt)Rkx9yBsiA+)BL520xTpAve8R&Ur?);>{P?ilACX#@Kh+MU&^SNo2#bq$w%?PIij z$FDcrRFMYLmlg+#E`AOc{Ao;|487$2VXn-{v4mJB*$Dsw4Wx!7xHT~2`(lEtd@RV= z-T0Z`Pm4n1j|D-W+A+%q84rE9or}tW&iV*{XhHA!hdl4JoA9p&X`xaC9dPOTZ%S%I~+bUjD2x85e}#{0%+Q)FDm zokZ*OFXM`3qRB*-vyKcnUeX=dpNTs1h*Q_+r)Kx0ak$Z%3MFIxMzTGe`@Lt!XSZ}G zxYDOnV|{IrD+yO`bhV+A6rhrM{rE;?&!0|4GIZ0CCK+T$uhV}EW4!8n8#Ucxn`sAf zyE2BIX7LPkGj3%->@q*|Jr6m;s8!;zTM(XS%4;t=9%g5aulhw3f>*Mi%JH=6VS#=h zDAfLqX3r%FvhGxIW*XzCBSHJJBaN|ZQTDGlFf=kK`wR=$QnF09rS#ABY1cE@`svgr z3~SU>EnjnV{c<1Pih;kx{)zc-)(~IS}k(IIQ0YV&cLi;>Fm730?c{w<4M-xEv z%+#p$XK--vwlYe@Y%!2Bv(3}e|K>?WI-cak-g!#8s0iP%SEYH`_1UQV=8xYg=`F}I z_RS*oF+ExicniUDX0p%`b{je5oeHgljsqU?dD4c?Odi=tdFX@#z#AB)Xb)!C@GZKD zVMA({vQH?D%M31LKP1`1A707XdWKc(o{B5{-E3=~x7Fz^KFH+bG1%5Jn|GcZ`OW9TIU{p?>{ zT9+(w&0h8N>^|U>Wb3i{(v{b9;-J6rQH>KT#Hx2(%&*woA!kZ0E~B=iYW#kM&zN5) zOmbs$+X7Ztr%PO*(RdK7AF)GhpuOHu){11MJ9sJ0)gm?I)#enY?s|r`sMuq=o#4O& z^q(Vb2r4uB#1)IC!lBjOvn)foaOQ@`Rd&@cb)M*p5{3LI9TiS`wWH z<33xXO6M^hdHp-ti!Gt4h%ejx#M2%Eix)$Zn#0|+8Xo3#;`;(W`alR1_ZiNEUikTC zfD;a$tv|ayHbbFNK@PX?;;ihY538mhI2X;ZiP237dyOw$;r#e@Bk|}CTuOPt870C; zlxoa|HUgIixomAB0Oensna{0s&pxhusS*TYHDw01 z8xw{MW05!1Pe5`z1zc_yLcJw|?Xt2p$qCBz?ehnT`uOr{t!u3&XF|5K-xPW}=D(pb zsreNX2y~0=2stFB_tdtl&{2!}Wrzt8`8>smdQh8k zUivX8PXP_#-K5>SI59TaF7kvJN%H^a*Z-%aP#k$$*6f_0J?B|n;xgZjSYu0pdZy3b zNL~MAWQ{PRZQ1fWKmuvT9U}&kunPG8r^vo!z%(|n{p+Q5IP9?UD5fZ_4YaYw@)aag znRT;~TW&6JOB27Gn{EXy>$zqKpi3{ScOKf8} zyI&7~dF7mDJr3}iC2eqX(4uN5UAYT;-9BO#!yOq^HArU2CNaqK)f3{D>0bV&*wYnG zW&9A{bn|SV)~l%${S6{rz}+^vdEn<-Me`VKb~g_NgR}~v8Ri=2>@uJks1C6nsxl#% z`C0_EiNR2{^+wot4fK|de|8;DYVIUuizt;;rzpdAILBJ3l+3b$oeDobFR+Z<^sv!4 z0#jdg!2hwva7h&YiQ#tc62QGJ`u2^*ay-kv9eqmXH1_^9rKQ?6!qH2O2bfaQZ{3J1a48d zmgNPQi@Va!dZ2T?=CUpFh8(ZcaLc*slJm`vtdD`EhpE$oiH{QL5QO(uf*$TBWd7qw zBItVA7*y&@F>F&NL)!h*AS9IE%NGbKIaJf?c{b&i)M1vkRDrP;l5{`IO8?JUT2uH3 z`A`=H+kL`Jwy|}93%U-MZcfwRdyBSZ2?lJTMBJo%emr|qUPfW`P-8T02VsUy z-T$sx>9&es&WPk8r7?*MV}p4a;xo4Kyz73F!FoB&imvr0yLmji+MLdNaZQ?lZev4y zYMC*fYMf-I7%p(P9MgqDr}ZO62s5r;@iI=Fhp@zV@RX*-0*~=1+YR@~ONdPm@=FTGt^Y*FFbeW4(mY z;$z0B=0ehX-ruoKZgO2+K#%z6MMU+wv`wC;G1m1?(=>EyF+Hdf#&QYP4UVVQ>M5UC z|GC$YcC8kkXriVJf|9+QBRPpljMyWK3)|VA{mD{)!F|+&gU{4HB8a5wOB?FrE*~Zy zLD2iNAaaR8C?QN<19ef(w~rq$+___`SSW-xV!W?KLw<+6!Oy!m$80Ty!9%g4|}$;e)t3l=hrFnbx+~`eHI>WlD~?9?{^y> zrw1*MBh;hAnG~cD>_p(E3GxzIJ-3X8Z}K zt8c|-K#zm0kKI8aoIf!67<`#&hngme4hpzy_{vCaR!Zdeu;wEr;J|@muvF*yeXt8p zSx76bmj{1wBPH}2_SM3aHv}dg^&!Eu@_uiAxB`V8j*3$F$^n##T z$QO2a`iJ;`=avVsD^ua^P>2+B0^!8{k*{Nyz<8zny{RZ`a`g2tb`r0q&C(Uu3{awf zNjmR~gH|##>e6f@)Yr4cM@&L5>xW$T^AoYzVY#laC5g{=Cx3X5BC?SD6V?Rhv!myf zEe3#y5B@zrI9fNNR5yrdGOkrY*`BYoovEz5bN=pKPKua_VQ%4o#p|7OlnqO>XLamCQ!c}3_CgK*tI=sY@7<6(pOF?s9p##$H@vRXo4+SUP2 z_`3hCBNx5JKY~d zaQ{ck?UqI7;_Ni2f|RKj`k9c3Df)dFf1mdolR{%%<1pj8`d7#d=_WQ7HCzcjx-rkp zauoN1>?#IjMX7MV@Z5T#;Xgz^lN7ACUL`R(^a$E8Y0?wo8r6?NTS9i)t>>HX@HohL z^9ey9ndDh^G<>|y!*pkA?_J<=XmSV?>dO98xL!~vy>{bDP9N;KMk_s9>3yKpao{Oc zU#SuX8_B*c^wRG^ML!CUbzj2B{`keR0o;j-QIEoT*vlnGdX2pRj}UyI77-W+2yQNk z!ZU<^e`cx@NI1!^seg(wbz%-5Oxlvo=7+9>dJSB=Xvbm{DO~!AU@()|#&1Qcs<$WaQE4kfdn)_zYP}6TnSm062SR&WmWGuOa=la-HcP zF5dPQi=^O;qX**%b++X;-{hc`!iCeG^i%6?-}2L=B%zXBC%r=m97FQuT1u?S)>B97 z$&~gYA!BXWr>Vs0gNOGKL0e&<@3v?%6+XqzQ(#k35o9f znnhN;!5f&rKzu}V>t%XMt1KJ!UTpS#jOy+e=DrZ8DR!aR!vYq)gxYCa1(Nq(UxW%G z-svP?8>@fu2EA7O#3F?$ClT`s3^QZ_zepR^ipi^c=Vx7@sk-Ua`aabCjhk`%aCrPs zQ@6dAd@t{bYgM$wM!HugK8m#P)u&C8qhLM@4}EY94CRD&7!-)SGbEmtzl?6OK@r7_ zLej2KEB?R_Fg@*R&E4?g*N7W+Y5%QT_8deZpzL|KHOODDBHl%h2tUP*(F31B;Ud_i zUB-pR-PD=F%IL>MYJPL=e=7gzE9AgQd&Z<&rHE7a`Um+$a^Zu%~ z|M!*6vcJ8;n1iVA18@|3g?FEoHS44&lvR~+XnauCbH-|^#D?cqb@(U)SJej^cR4Hz zq;4oH5AeF<{`I8{*3XPX+uoM$o6gv1xKCtp&xT3!oFFUk_QfXRs`FFwD(b@QjVOn6cmeHp}-M3DRe zrK&@aUYA9{rCml4=Ax$`U_BjlmWN4pWrJuhw`KT$A=hVNz6y{lpKj|F*ZH0xYC z!Xv;n4+U_x_!h;xJAF8DXK<5DZQKD$$HfX9My}E@M84Amei=~f_-2gGCZk@`0pZ=k z9fE-9`&sJS+n?mor3d3 zf=6)k3w=c5eOH^XlFLv{7834CEU85&x4~%A372#l?CPYVvl(M;Gmx3Wyi1l0zP3x& zun(*M&_4*bg}-Lc(Q%ioxVc+89tonSKehiziR*1eaXEpnKfY^fJ(;Q{GA(_-#;dj%w27em*rx=bGPOcHg)mv zT8FTg&xil%W9+ugC4?l2?LNP@qYdm*#BvA$G+?=dfA|Q{e~I((5e6jWy+NSjiDN(J zcws4#$BM~05=LR%`qJIRzNRz;U}}h6pHEG{kj|YSMl!Tu2J9^ z`-k1(QL|ru{u{bw=+pY%m6UJJ=1KXSud~y5Z8dU?qKC7P9@1jO^GmNNucn8Sn)CYY zk{LrNI91R>6PQz7s~cl20mrqe z*!gV2>=1`iXg&%XRuPICVs9a1kfzbe1!6miS+->KinUs!T$%IIJw1teT5G(?viEa^ zqL}44j2jYfV}YBWIm>)E;@*E1*VW_3@@`^6yuujsSG4RGRb7yqC3*In>|S4k`Z3b} z>ZI!gYm*+w{W~u216fpRh+Dp!OkXNe(yqH8$B36DMw`Ypqv$8KKwBMl6Y5a=%q zvMqsl>F0k4t6P>##?dxq(epke9@_0|MfTRHv+3dU4(IWSSHUzmY=egg1{g^O`AiPh zmhS#{{(|%PZKL?m2F7knqrBTryuKIg=;wDfKtJPjdXMfaW0BlF($zyB0lDYv-4M&k z*`e~;=Eft?Wu^`R1bVoscc43vGC)lF`6{KL-K`!oEYcv$L{IE8JSsN(X-5QqGaaNT zYxp`4I`k{AzZOGP+g4tExA7GS5p5{w3wO{l&ZN9Z@kk?bnIs z=2tJ^W_7GvKdKY;9+R_1u-i)~Wjkgsfh53$Mf}izR7^12=u$BbhNjkOvdPVmoJ?}B zo5(;JWKyA2NgH!Aq?<}e-E??;lqn*#0c)^26_3puLKSrSoK?&_Dd<*^S+O=`vFvxd zEa+(FHYUi?6h-co`f80bRJQ-5)yWsy^P1!Eu0{O~-9b-h0$Ib|(p3u$PF$=`6sHe4 zW~X7$>FqK+Oe5GSjx`y1wFBQI23HHTc~?VY<@L*W2Cr-%ic=7Y!`6PSN3`6h-2U`L z@x-&`VL__Kq{q)+$HBh@AJYx5?;z^K=FUpI3;I4MD9-bSddZ>S#%146ui<84_?$K7 zjB>>rbJgAeMVQL@nc>tGc2bgD(Fu^`Ix<418S-j0nhw>wn#ov0No^6)0`-c< z{Y^=&_eIy%a6unxTD|V~B&sZXjpEnp@w?*s2>L=@>M~Ph1I?;)%{N9 z?t|F;LpEFTSb{)h?y*4)#xo7^JI-5I>!2WwO?>X)l|5GX1k1v=GVk^OQe0S{#Jidr z&x|M`Lq`UsP(+VgPnSBvM`_@Vy3=2X3p%&4Eb70uI5j=(WHC5 z(m~7|J!|0n*$U+CJRK^1HKR~~gN_LupyvF__(-p~2mCVf?G4baUrFZM+#5tTACH*Y zj67$Sj@ilxQsyq7<{(x}9Mx_rjjH7NKGfsrwsND}3oQMY2w5YVu9v;gZ22G>kaOmH z4|PMP8B11VE0N`=jMr&uG{R}pbm)XdYoHBdP&sYsv7)DOkYK}xlLlzJg*VAtKBWEo zNuM&j%*Bg+nfnS#D`UXv`+X#pMkdK6uiT2J%MI-M<=?&>x}acw)UyPo zUJDZq-DFu-FE3`w>A}6iG@kM|8Yq7<6mXaMz(i`MV8y1+bh<*8ZK6(Q{0;xvstm9&)&-?tJ&7%CV& zNttS@NOBIe|E4?fekdyOF)%5K00N&U)3|Ed&% zsso0~nL)hJXdEsE)=v66`W4h&xMSObaX*^fIN`sQ#K)=^^a}FiiVcTGsLiqXG>M^+ zQEv{&qg&iC5LPvD`+k&_tW{{-Gzi^V{}Qy9@|)kFS<^6EcWKV6nYLm-n&lAiuzp%G zj4ZliaNTn9LadNIEtLZyW&a?E=P@`o4wCbvoR3YVvNw-W9H>CFGLN#r<1;;~g-UYL zfDnL_{P7%DJh@~jcV#fQ|Du^-Q0WoL5KWj-*BxNU#o@@*!HiBo{$py6)EE(bsqpF6 zT+CL~TQ;_=U5}F8Ml+JJ$xwzQnnnISaD~^4Y}q-2m;#ma1=Eih!-)mW3iuKfpi7eg zV1Mct#ykIu81(mz$MgSp7R;dl-Sp749202 z^a*-#|9*;4aI*8+%CXE6Yd9f^fT4PnAfb^8VgHYy6hJTYkAghmI@wUjwawK*Pw*a5 zG_MMjvkmBSf3*y+vvPh%2u4M9wyOnP$#b0guD$e=)8Rgu^(^Co`&gJDjDORU@lH|| z4FrF8sv3k{caN0HFzx%<(Z{AWF;5{xCMuaz@1t@;D(;*D8f7;o>3nLUL>-P6rJjdx zR5~9!8B<0 zzO6hYoex6(ORLf-Zj9}pgEV^4xS*H^2Ix1nRbH6Xr z#sFAvCrE!0^lvg)5>30mv(7PvoH6fh1x}8R*vuCCkY-D`{0WSt8SIBs$8F0=w*or01lmv=`uvqJG1hrstrLGS!pDYAG8qUj=d-m~%?-VAmLcYZ;4BrvK?4>{9o9`Q|C=%jzU$ z2)h#S{&x&zymBTjr(2TNh=CBsX7M;{0iMTF?}1l7xP%;*I^5fg<n7Mk zY1pf{@^lj&_?4G&=t0qO>}>Q0VKY#tE{K1p2ez4tai-!T>ex&h7vZ0_SQMG+4s`S2 za+Yrm+9IS+vod@qgj84ESv9meQ|i8%kX+b^b2K^F!bo81#;#a<@u?2mc`s_iQK?5e z-R;x8YY3JergfAaIBFo-Hj77AqT5O9u&~ezd`+So}@*^;l?hH)}L(2!peVzQbzAc*D>uh%<%m6tfIGVI+12%y@G=6ykI1V(&EL=f>^I%{=j=4F(C z^8O6{i1Hs0HfNW-&=PwXnk^Uyfg485l3DDX!01nzIxm;p!*7$4A7zL0Z&YJ0N2Xd0 zw?WbGqfDYcOuLq~0ga*dE`MR>mgaj3^3R90JcwIFQZf(vnE*G4azP<&KiA@19E1%r z!;eS0HtW5$nX%@;DLE$4r+Yiij@EF!kV8R8s;H>ySIotLbY82N&+l7eqVy`>I~2#? zO1GNaL7kE5#sI2>FonOxoTV0EZR@}c_oB1sgXy@@q};g83GVp*_vS9Q5tqOL?@N{V zHr5EiM@H?R+>}?1xLLpC>9H%b6@Za$XPOI3qzw~hS+Wv(9U%Y|6n)iA|Af=@AZ1;g zwUS2_(y-l+oWD-T6ua02fsMd_=sm#Id5DF|i2k7AW}@w?Yrelpz3*h(xU>V$-(OC^ zsbNdmVw-#TB~tdDqtcw%7&|=etwgrJRfweT_#)&HFrGLk>h`&-t4+3z44$V~7kmHc zz7PqT-zooHZ-0s_+(J71Q&jdcG1MXrX|9&d)u;IiBDb8Yd ztNfj-AL(!KJu6HxCxtmJCYHkLLRYAV!hX;QPjcD;A+Ve7e|(zE`R8saIrU3+N zU0;_%8UvGL0x-(M~^%`bHkZ6k?yUV%N(aE4?2hPI9*?F&4~;6v}@PYXzXb z9QR+GFK1_CyDFvOVg`eQSwmN9KM-~S|EX2P%}tgyg4;uQQ>k4eU4fpxS!)9kw@hhW ztjy`*{jzBvrSJDo_6`LZ9eq+sq%cntSqNP}&kqPGt=437*V}~IJ0En#`}6!zN#X0w z1YFY$N1JqU;3OV-A}A?@3h6i%*O_dSowXot`l~04r^VTa#n6hjVqgYvl_sMW z8Oi1_sH3#_0s&KHs02Yh743ZPpS_9+N4{?-&clu8hp_z@ zlx#n*5n9<8h{N}!*%83{C64BDE!5)c&*A%zD5mLj!yTtti-8v1sm$`Pk3vd3?;8*L zqC3tz)X*Ge3~{Rl-K$4^LH~ZKkPG@E)XX&cV%Z_$uJ3Y~v*ptUpC8UmN+q3q#}#HZ+M+ym*uU%&Y%rF-6csb1orn@$x9gR-|AZVpJlH$z0@e z;vFFF)!mbQL4o<re&l*rE3Nk2W-2`(2tw zFUD&vd(fi@|Fh$qQ((6HNz3lps=K+Sal!(}Lse3U?N_3vJZqS8T{92ob&QGO6BEL6 z$M0KTu~827+CWPhz;$-A=~|cflUof7v8F#szLT_+60UxH@ z-}iK~vC#UE@`RYrMzdC3HD)sUv1`MQ@5^WDPJFyb0W_Utc!ETK`{o{gb0s@RMXeHuKu3NbT;?!y!lFb?>)<)0eKgBJ#t==!Po zo=9jd-gQi$xP4$@ngGRBX{tlcmxI%9T!cf7_N2Aph9Q!1LQv0p*Iu;!*PHVTe z7d@6d_ufaPm8|-DeR!4Mmm5_9YU*rAKoi;ArV{HaX@V#3^6m z1+)DJ0Lcg+{;6&I0KV0*yk6)dkC?<6_C7Cn**h~Sl}&u7FPj|J8Q7nxseu#wi${Vd zOOm8aIFxg#OHEd)sf|J1!_wVYUa4%ODWx<_g6?%x9YV5`!EZ^(jIcL>lfHf1lvho_ z0q9q1a0Cvrt@ZL8E&IusJ48f$|5NW9=;V!N-f>{b8H$S}P09g3#r0a=%6 zrV@PgEUG5!Qb9AfSW|Ba8@+r+36B%~$_BJ2v{jvb)0|E(}O)RoGj zr%5Y2@PN5I>k~mvW!9m4+OTl0r!YC6qMSf)v)h#Oc|G-P(&Bv&?|6-Lfw7GVXF!~z z#a)755}fjKdGVL&7D9|yo`UFjwK;?{0=owODZ#ooeVF5B;{r~{eFcNxzRJ!H*!>L< zZTt4^^I4KP9%)8o@i1OG$N&9l8F`)M6N2)#4G=;ACI{=13_h)D3^5V?e%KP_U>5<3 zX2JP!t6Rs+TQK&LQd63>Nh%)I0Dgv>;EC(|n9$R>vPOLN6<#K1;*JD+vp&uxPLFy~ z8EXCMYXVfp=(S3G9PWccz3H3`xgca6UYocx4<6st>l(KTM9>b)34l{B*h||MzWGqz zE{#oY`P2@|HBrk-WOm$=bPmb6>b}{q7bdRL*qSomL6&_f+$~HmZdIqKsPwP4d*lCs z^WuynH6*8Q8;%}cal1)ZJbM(w|6iF50dz~25oX4?byYw?vh;?Y4!K^&B#z^tkNUl+5eLGS&Xl=Mj(OrCKFpR1XkjikQrr z=O2X2(tL)Wn{fbGEUDkUkF^EKT_Nb|`_o-T;4s5wy2C0hUkRaB#=X$2+fJuHA9^yP z77oxdb^NxwizrF^i4&Ij#9-;oJcaWXn$>{u_G;Uo^&toIF7L#F)g*$!&W!@aANf8P zS1y;P4_hW-xPi)Ew;)g6iUOHZo{ec%*6>>93sJ8YZyo;MWxi8ar+XS;?k$>m<5}k+ zv_=DcDpT7)9j8<{tyN?NQHJnCe@5}lFD)EZS@{T>h1>Kncl^ z5aeF&WbjX_omkIP*mE?bw5LodpmOZ{?^_0psm zXD;unxYmem&7vG}H>Xv~^>k^(<_f4TS7$WU3hIY+M`I?5Hm3;YWw$RmV-VU~{w3LGaE zM0$MHayP7EKJSi+`L^lTnRBBpY2xkToK@T&l-oPSBCYq1q|@5zZ~x1`lH`@KeJplt z;(k|(8KU@iAZ!soF{EtbIXoT2_a4{v5d&JzvWZvwPFgK?wXFwWm?25}7ZI+E-2nPx$Z7GRNsg|^0;#TjM&9dnD zMnnVTDT2uhZuz0CVk+*$P?N3c*@7}t>Zb! z{y>RMxif3Y(fBcao;l0gCG|(-zjBDzD8gX|veABXr&3eMh)AlLzKiy~vcbW~IVky4 zu}$4c6Fsa(M&m;+57kKn{^kL2bHE$R6WYstsc-nC#SKQ7!IUMA+5qT z>9R%R*$ER6N8WZ2Rw8YT;xvvvAD@l)p{%PJSQJG}^9^u;uW5jR)v22UiIk*yArS6x zbU&YJZ;aa1MNBbWJHz{(uIj4_F(RjZ)2iD1#&o{7jo`Ckty$D{2G4=rDZlF^5J9^c zD|q>IBkO{K{y9CN2?{i1I0$d}&(b{lu$feEvoUC-0t5z{Y^_RhDMDk&vVs5sxuKFlVJA9(3Vv}aZH zje*=u<%y&zqf~&0nC8bVpVeDp+`*I8)#vq48=ja~Q$+t&{!_n}BK!EhPH2ETU{S7eoH+l}!!ZlpUEq`SMMJ4P6Wn%^~?bME`x@B2LO^T+e~{pEPEuYIk(c74}c z-?ewKzGsx3{41Z8+Wa!XvvI)GY3)dGRl<8yhq!IE@YMms>(ig^FZtLQ82m7M7y@_O z0eD_mz;uD|_D`Y4zddl5;&0puJ_&H;Oi`39@%rg6&#^~HLt@B(MD+-|XS|k+i#kW8 z;p5K18sw&exS{N_Q#Gmmz4M7og)W->nfnsaF_8KJhh>4pL%hgndSvDXioRg)J`iQ$ z{Mw2IvY3N<0hv6tYC-nnyYKiK1zT3D4f_%C0Vxu~v~7H^xP#n(__(VYGwzH(6v7T* z&Fo>qMiIiMmBg70>d8e19%lo$L#iIsH@uRytJ5d zD>zHTV>2G;4-_E~z410WAe|WKpaIks#hnj~Iw9;nbiziU5>*0ePsUJ|4Si7VjB(4%8h05$V%H zN#5H?YmKX?=uinO@5hW~9wijd?+&Qn68YmrDk|l#?aoa6j0!kVnn8pA+ok$ zHgpUO#MvO{@^yMy4sosB@~y8>D)FuR|555b<+-aBaPd(BvXJ%c>2Su78iEg5LqX{X zSp~8wKS|e+IgZ0ltLn&0nX2Edsv|3j4tNxT?7z%s88-8^>d0)!wy+m(SQ#_BroL$p zLRgGkCQ5aaN9d_1kRk`@{#BjIBO>?pn8o|HI|~g^nDgEg`@vkzmCRaKL>cYKv&YD) zvHkw4+HrN~)6Xne|MdgpW3v5Ee?R{q{B8=-F>>?z!``nTq!dDu_x@6!>?jpkKRJ#hKl zw~`D%=MWpzrl{}LCUy_-d;b)&Bc8A*^R2NN-9~_3h*ezIt5-cj%=#W}>SG;_uAY3A z+lA2r>g^M{RK)}5|IQ*qbMF+v=+b4b)ZZfZtg|-W1n`i%!OqSm7S;gsvY>Y&D0D+| z9n)RpQ1S4p*7m&k9ThK}l@3jKBj9&2=xg{`*e9~}hd@$M*WecEnFe5M4AhuC;RKMF zMNS8fScPHmHF?mJy~*2F)4`d|W5rjvEZWriGt1y2o5Pn5eox z1^jB2fJfbzUa|fwnF@~z=S|~5H$Ii~Fkn=%0ARu(FMQubz}HDW$CjvmWkLui72eYx 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 Q2k@n;q^VdT|04Lm0NEF8Z~y=R literal 0 HcmV?d00001 diff --git a/Записка/Пример отчета Word.docx b/Записка/Пример отчета Word.docx new file mode 100644 index 0000000000000000000000000000000000000000..501e64a43f1d3008a24f2edc9ff8947328705874 GIT binary patch literal 12596 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 literal 0 HcmV?d00001