From 9e546a4cfd7acd071d87f3a6cb0ad32c043d142d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A4=D1=80=D0=BE=D0=BB=D0=BE=D0=B2?= Date: Tue, 1 Feb 2022 15:07:06 +0500 Subject: [PATCH] Add role type ids --- .../20220201100352_AddRoleTypeIds.Designer.cs | 4233 +++++++++++++++++ .../20220201100352_AddRoleTypeIds.cs | 589 +++ .../AsbCloudDbContextModelSnapshot.cs | 82 +- AsbCloudDb/Model/AsbCloudDbContext.cs | 82 +- AsbCloudWebApi/Docs/Create permissions.ods | Bin 45098 -> 45145 bytes 5 files changed, 4904 insertions(+), 82 deletions(-) create mode 100644 AsbCloudDb/Migrations/20220201100352_AddRoleTypeIds.Designer.cs create mode 100644 AsbCloudDb/Migrations/20220201100352_AddRoleTypeIds.cs diff --git a/AsbCloudDb/Migrations/20220201100352_AddRoleTypeIds.Designer.cs b/AsbCloudDb/Migrations/20220201100352_AddRoleTypeIds.Designer.cs new file mode 100644 index 00000000..b5549875 --- /dev/null +++ b/AsbCloudDb/Migrations/20220201100352_AddRoleTypeIds.Designer.cs @@ -0,0 +1,4233 @@ +// +using System; +using System.Collections.Generic; +using AsbCloudDb.Model; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace AsbCloudDb.Migrations +{ + [DbContext(typeof(AsbCloudDbContext))] + [Migration("20220201100352_AddRoleTypeIds")] + partial class AddRoleTypeIds + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .UseCollation("Russian_Russia.1251") + .HasAnnotation("ProductVersion", "6.0.1") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "adminpack"); + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("AsbCloudDb.Model.Cluster", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption") + .HasComment("Название"); + + b.Property("IdDeposit") + .HasColumnType("integer") + .HasColumnName("id_deposit"); + + b.Property("Latitude") + .HasColumnType("double precision") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("double precision") + .HasColumnName("longitude"); + + b.Property("Timezone") + .HasColumnType("jsonb") + .HasColumnName("timezone") + .HasComment("Смещение часового пояса от UTC"); + + b.HasKey("Id"); + + b.HasIndex("IdDeposit"); + + b.ToTable("t_cluster"); + + b.HasComment("Кусты"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Company", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption"); + + b.Property("IdCompanyType") + .HasMaxLength(255) + .HasColumnType("integer") + .HasColumnName("id_company_type") + .HasComment("вид деятельности"); + + b.HasKey("Id"); + + b.HasIndex("IdCompanyType"); + + b.ToTable("t_company"); + + b.HasData( + new + { + Id = 1, + Caption = "ООО \"АСБ\"", + IdCompanyType = 3 + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.CompanyType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption"); + + b.HasKey("Id"); + + b.ToTable("t_company_type"); + + b.HasData( + new + { + Id = 1, + Caption = "Недрапользователь" + }, + new + { + Id = 2, + Caption = "Буровой подрядчик" + }, + new + { + Id = 3, + Caption = "Сервис автоматизации бурения" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Deposit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption"); + + b.Property("Latitude") + .HasColumnType("double precision") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("double precision") + .HasColumnName("longitude"); + + b.Property("Timezone") + .HasColumnType("jsonb") + .HasColumnName("timezone") + .HasComment("Смещение часового пояса от UTC"); + + b.HasKey("Id"); + + b.ToTable("t_deposit"); + + b.HasComment("Месторождение"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.DrillFlowChart", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AxialLoadMax") + .HasColumnType("double precision") + .HasColumnName("axial_load_max") + .HasComment("Максимальная нагрузка"); + + b.Property("AxialLoadMin") + .HasColumnType("double precision") + .HasColumnName("axial_load_min") + .HasComment("Минимальная нагрузка"); + + b.Property("DepthEnd") + .HasColumnType("double precision") + .HasColumnName("depth_end") + .HasComment("Глубина окончания интервала"); + + b.Property("DepthStart") + .HasColumnType("double precision") + .HasColumnName("depth_start") + .HasComment("Стартовая глубина"); + + b.Property("FlowMax") + .HasColumnType("double precision") + .HasColumnName("flow_max") + .HasComment("Максимальный расход"); + + b.Property("FlowMin") + .HasColumnType("double precision") + .HasColumnName("flow_min") + .HasComment("Минимальный расход"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("well_id") + .HasComment("Id скважины"); + + b.Property("IdWellOperationCategory") + .HasColumnType("integer") + .HasColumnName("id_operation_category") + .HasComment("Id типа операции"); + + b.Property("LastUpdate") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_update") + .HasComment("Дата последнего изменения"); + + b.Property("PressureMax") + .HasColumnType("double precision") + .HasColumnName("pressure_max") + .HasComment("Максимальное давление"); + + b.Property("PressureMin") + .HasColumnType("double precision") + .HasColumnName("pressure_min") + .HasComment("Минимальное давление"); + + b.Property("RotorSpeedMax") + .HasColumnType("double precision") + .HasColumnName("rotor_speed_max") + .HasComment("Максимальные обороты на ВСП"); + + b.Property("RotorSpeedMin") + .HasColumnType("double precision") + .HasColumnName("rotor_speed_min") + .HasComment("Минимальные обороты на ВСП"); + + b.Property("RotorTorqueMax") + .HasColumnType("double precision") + .HasColumnName("rotor_torque_max") + .HasComment("Максимальный момент на ВСП"); + + b.Property("RotorTorqueMin") + .HasColumnType("double precision") + .HasColumnName("rotor_torque_min") + .HasComment("Минимальный момент на ВСП"); + + b.HasKey("Id"); + + b.HasIndex("IdWell"); + + b.HasIndex("IdWellOperationCategory"); + + b.ToTable("t_drill_flow_chart"); + + b.HasComment("Параметры коридоров бурения (диапазоны параметров бурения)"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.DrillParams", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AxialLoadAvg") + .HasColumnType("double precision") + .HasColumnName("axial_load_avg") + .HasComment("Средняя нагрузка"); + + b.Property("AxialLoadMax") + .HasColumnType("double precision") + .HasColumnName("axial_load_max") + .HasComment("Максимальная нагрузка"); + + b.Property("AxialLoadMin") + .HasColumnType("double precision") + .HasColumnName("axial_load_min") + .HasComment("Минимальная нагрузка"); + + b.Property("DepthEnd") + .HasColumnType("double precision") + .HasColumnName("depth_end") + .HasComment("Глубина окончания интервала"); + + b.Property("DepthStart") + .HasColumnType("double precision") + .HasColumnName("depth_start") + .HasComment("Стартовая глубина"); + + b.Property("FlowAvg") + .HasColumnType("double precision") + .HasColumnName("flow_avg") + .HasComment("Средний расход"); + + b.Property("FlowMax") + .HasColumnType("double precision") + .HasColumnName("flow_max") + .HasComment("Максимальный расход"); + + b.Property("FlowMin") + .HasColumnType("double precision") + .HasColumnName("flow_min") + .HasComment("Минимальный расход"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("well_id") + .HasComment("Id скважины"); + + b.Property("IdWellSectionType") + .HasColumnType("integer") + .HasColumnName("id_wellsection_type") + .HasComment("Id с типом секции скважины"); + + b.Property("PressureAvg") + .HasColumnType("double precision") + .HasColumnName("pressure_avg") + .HasComment("Среднее давление"); + + b.Property("PressureMax") + .HasColumnType("double precision") + .HasColumnName("pressure_max") + .HasComment("Максимальное давление"); + + b.Property("PressureMin") + .HasColumnType("double precision") + .HasColumnName("pressure_min") + .HasComment("Минимальное давление"); + + b.Property("RotorSpeedAvg") + .HasColumnType("double precision") + .HasColumnName("rotor_speed_avg") + .HasComment("Средние обороты на ВСП"); + + b.Property("RotorSpeedMax") + .HasColumnType("double precision") + .HasColumnName("rotor_speed_max") + .HasComment("Максимальные обороты на ВСП"); + + b.Property("RotorSpeedMin") + .HasColumnType("double precision") + .HasColumnName("rotor_speed_min") + .HasComment("Минимальные обороты на ВСП"); + + b.Property("RotorTorqueAvg") + .HasColumnType("double precision") + .HasColumnName("rotor_torque_avg") + .HasComment("Средний момент на ВСП"); + + b.Property("RotorTorqueMax") + .HasColumnType("double precision") + .HasColumnName("rotor_torque_max") + .HasComment("Максимальный момент на ВСП"); + + b.Property("RotorTorqueMin") + .HasColumnType("double precision") + .HasColumnName("rotor_torque_min") + .HasComment("Минимальный момент на ВСП"); + + b.HasKey("Id"); + + b.HasIndex("IdWell"); + + b.HasIndex("IdWellSectionType"); + + b.ToTable("t_drill_params"); + + b.HasComment("Режим бурения в секции (диапазоны параметров бурения)"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.FileCategory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name") + .HasComment("Название категории"); + + b.Property("ShortName") + .HasColumnType("text") + .HasColumnName("short_name") + .HasComment("Короткое название категории"); + + b.HasKey("Id"); + + b.ToTable("t_file_category"); + + b.HasComment("Категории файлов"); + + b.HasData( + new + { + Id = 1, + Name = "Растворный сервис", + ShortName = "fluidService" + }, + new + { + Id = 2, + Name = "Цементирование", + ShortName = "cement" + }, + new + { + Id = 3, + Name = "ННБ", + ShortName = "nnb" + }, + new + { + Id = 4, + Name = "ГТИ", + ShortName = "gti" + }, + new + { + Id = 5, + Name = "Документы по скважине", + ShortName = "wellDocuments" + }, + new + { + Id = 6, + Name = "Супервайзер", + ShortName = "supervisor" + }, + new + { + Id = 7, + Name = "Мастер", + ShortName = "master" + }, + new + { + Id = 8, + Name = "Долотный сервис", + ShortName = "toolService" + }, + new + { + Id = 9, + Name = "Буровой подрядчик", + ShortName = "drillService" + }, + new + { + Id = 10, + Name = "Сервис по заканчиванию скважины", + ShortName = "closingService" + }, + new + { + Id = 12, + Name = "Рапорт", + ShortName = "report" + }, + new + { + Id = 13, + Name = "Программа бурения, части", + ShortName = "ПБч" + }, + new + { + Id = 14, + Name = "Программа бурения", + ShortName = "ПБ" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.FileInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("IdAuthor") + .HasColumnType("integer") + .HasColumnName("id_author") + .HasComment("Id пользователя, загрузившего файл"); + + b.Property("IdCategory") + .HasColumnType("integer") + .HasColumnName("id_category") + .HasComment("id категории файла"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("id скважины"); + + b.Property("IsDeleted") + .HasColumnType("boolean") + .HasColumnName("is_deleted") + .HasComment("Удален ли файл"); + + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name") + .HasComment("Название файла"); + + b.Property("PublishInfo") + .HasColumnType("jsonb") + .HasColumnName("publish_info") + .HasComment("Информация о файле в облаке"); + + b.Property("Size") + .HasColumnType("bigint") + .HasColumnName("file_size") + .HasComment("Размер файла"); + + b.Property("UploadDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.HasKey("Id"); + + b.HasIndex("IdAuthor"); + + b.HasIndex("IdCategory"); + + b.HasIndex("IdWell"); + + b.ToTable("t_file_info"); + + b.HasComment("Файлы всех категорий"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.FileMark", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Comment") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("comment") + .HasComment("Комментарий"); + + b.Property("DateCreated") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_created") + .HasComment("Дата совершенного действия"); + + b.Property("IdFile") + .HasColumnType("integer") + .HasColumnName("id_file") + .HasComment("id файла"); + + b.Property("IdMarkType") + .HasColumnType("integer") + .HasColumnName("id_mark_type") + .HasComment("0 - Согласован"); + + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user") + .HasComment("id пользователя"); + + b.Property("IsDeleted") + .HasColumnType("boolean") + .HasColumnName("is_deleted") + .HasComment("Помечен ли файл как удаленный"); + + b.HasKey("Id"); + + b.HasIndex("IdFile"); + + b.HasIndex("IdUser"); + + b.ToTable("t_file_mark"); + + b.HasComment("Действия с файлами."); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Measure", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Data") + .HasColumnType("jsonb") + .HasColumnName("data") + .HasComment("Данные таблицы последних данных"); + + b.Property("IdCategory") + .HasColumnType("integer") + .HasColumnName("id_category") + .HasComment("id категории"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("id скважины"); + + b.Property("IsDeleted") + .HasColumnType("boolean") + .HasColumnName("is_deleted") + .HasComment("Пометка удаленным"); + + b.Property("Timestamp") + .HasColumnType("timestamp with time zone") + .HasColumnName("timestamp") + .HasComment("время добавления"); + + b.HasKey("Id"); + + b.HasIndex("IdCategory"); + + b.HasIndex("IdWell"); + + b.ToTable("t_measure"); + + b.HasComment("Таблица c данными для вкладки 'Последние данные'"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.MeasureCategory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name") + .HasComment("Название категории"); + + b.Property("ShortName") + .HasColumnType("text") + .HasColumnName("short_name") + .HasComment("Короткое название категории"); + + b.HasKey("Id"); + + b.ToTable("t_measure_category"); + + b.HasComment("Категория последних данных"); + + b.HasData( + new + { + Id = 1, + Name = "Показатели бурового раствора", + ShortName = "Раствор" + }, + new + { + Id = 2, + Name = "Шламограмма", + ShortName = "Шламограмма" + }, + new + { + Id = 3, + Name = "ННБ", + ShortName = "ННБ" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Permission", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("description") + .HasComment("Краткое описание"); + + b.Property("Name") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasComment("Название"); + + b.HasKey("Id"); + + b.ToTable("t_permission"); + + b.HasComment("Разрешения на доступ к данным"); + + b.HasData( + new + { + Id = 100, + Description = "Разрешение удалять админ. Кусты", + Name = "AdminCluster.delete" + }, + new + { + Id = 101, + Description = "Разрешение редактировать админ. Кусты", + Name = "AdminCluster.edit" + }, + new + { + Id = 102, + Description = "Разрешение просматривать админ. Кусты", + Name = "AdminCluster.get" + }, + new + { + Id = 103, + Description = "Разрешение удалять админ. Компании", + Name = "AdminCompany.delete" + }, + new + { + Id = 104, + Description = "Разрешение редактировать админ. Компании", + Name = "AdminCompany.edit" + }, + new + { + Id = 105, + Description = "Разрешение просматривать админ. Компании", + Name = "AdminCompany.get" + }, + new + { + Id = 106, + Description = "Разрешение удалять админ. Типы компаний", + Name = "AdminCompanyType.delete" + }, + new + { + Id = 107, + Description = "Разрешение редактировать админ. Типы компаний", + Name = "AdminCompanyType.edit" + }, + new + { + Id = 108, + Description = "Разрешение просматривать админ. Типы компаний", + Name = "AdminCompanyType.get" + }, + new + { + Id = 109, + Description = "Разрешение удалять админ. Месторождения", + Name = "AdminDeposit.delete" + }, + new + { + Id = 110, + Description = "Разрешение редактировать админ. Месторождения", + Name = "AdminDeposit.edit" + }, + new + { + Id = 111, + Description = "Разрешение просматривать админ. Месторождения", + Name = "AdminDeposit.get" + }, + new + { + Id = 112, + Description = "Разрешение удалять админ. Разрешения", + Name = "AdminPermission.delete" + }, + new + { + Id = 113, + Description = "Разрешение редактировать админ. Разрешения", + Name = "AdminPermission.edit" + }, + new + { + Id = 114, + Description = "Разрешение просматривать админ. Разрешения", + Name = "AdminPermission.get" + }, + new + { + Id = 115, + Description = "Разрешение удалять админ. Телеметрию", + Name = "AdminTelemetry.delete" + }, + new + { + Id = 116, + Description = "Разрешение редактировать админ. Телеметрию", + Name = "AdminTelemetry.edit" + }, + new + { + Id = 117, + Description = "Разрешение просматривать админ. Телеметрию", + Name = "AdminTelemetry.get" + }, + new + { + Id = 118, + Description = "Разрешение удалять админ. Пользователей", + Name = "AdminUser.delete" + }, + new + { + Id = 119, + Description = "Разрешение редактировать админ. Пользователей", + Name = "AdminUser.edit" + }, + new + { + Id = 120, + Description = "Разрешение просматривать админ. Пользователей", + Name = "AdminUser.get" + }, + new + { + Id = 121, + Description = "Разрешение удалять админ. Роли пользователей", + Name = "AdminUserRole.delete" + }, + new + { + Id = 122, + Description = "Разрешение редактировать админ. Роли пользователей", + Name = "AdminUserRole.edit" + }, + new + { + Id = 123, + Description = "Разрешение просматривать админ. Роли пользователей", + Name = "AdminUserRole.get" + }, + new + { + Id = 124, + Description = "Разрешение удалять админ. Скважины", + Name = "AdminWell.delete" + }, + new + { + Id = 125, + Description = "Разрешение редактировать админ. Скважины", + Name = "AdminWell.edit" + }, + new + { + Id = 126, + Description = "Разрешение просматривать админ. Скважины", + Name = "AdminWell.get" + }, + new + { + Id = 200, + Description = "Разрешение редактировать 0", + Name = "Auth.edit" + }, + new + { + Id = 201, + Description = "Разрешение просматривать 0", + Name = "Auth.get" + }, + new + { + Id = 202, + Description = "Разрешение просматривать Кусты", + Name = "Cluster.get" + }, + new + { + Id = 203, + Description = "Разрешение просматривать Месторождения", + Name = "Deposit.get" + }, + new + { + Id = 204, + Description = "Разрешение удалять РТК", + Name = "DrillFlowChart.delete" + }, + new + { + Id = 205, + Description = "Разрешение редактировать РТК", + Name = "DrillFlowChart.edit" + }, + new + { + Id = 206, + Description = "Разрешение просматривать РТК", + Name = "DrillFlowChart.get" + }, + new + { + Id = 207, + Description = "Разрешение удалять Программу бурения", + Name = "DrillingProgram.delete" + }, + new + { + Id = 208, + Description = "Разрешение редактировать Программу бурения", + Name = "DrillingProgram.edit" + }, + new + { + Id = 209, + Description = "Разрешение просматривать Программу бурения", + Name = "DrillingProgram.get" + }, + new + { + Id = 210, + Description = "Разрешение удалять Режимы бурения", + Name = "DrillParams.delete" + }, + new + { + Id = 211, + Description = "Разрешение редактировать Режимы бурения", + Name = "DrillParams.edit" + }, + new + { + Id = 212, + Description = "Разрешение просматривать Режимы бурения", + Name = "DrillParams.get" + }, + new + { + Id = 213, + Description = "Разрешение удалять Файлы", + Name = "File.delete" + }, + new + { + Id = 214, + Description = "Разрешение редактировать Файлы", + Name = "File.edit" + }, + new + { + Id = 215, + Description = "Разрешение просматривать Файлы", + Name = "File.get" + }, + new + { + Id = 216, + Description = "Разрешение удалять Измерения", + Name = "Measure.delete" + }, + new + { + Id = 217, + Description = "Разрешение редактировать Измерения", + Name = "Measure.edit" + }, + new + { + Id = 218, + Description = "Разрешение просматривать Измерения", + Name = "Measure.get" + }, + new + { + Id = 219, + Description = "Разрешение просматривать Сообщения телеметрии", + Name = "Message.get" + }, + new + { + Id = 220, + Description = "Разрешение просматривать Статистику по операциям", + Name = "OperationStat.get" + }, + new + { + Id = 221, + Description = "Разрешение редактировать Рапорта", + Name = "Report.edit" + }, + new + { + Id = 222, + Description = "Разрешение просматривать Рапорта", + Name = "Report.get" + }, + new + { + Id = 223, + Description = "Разрешение просматривать админ. Системная статистика", + Name = "RequerstTracker.get" + }, + new + { + Id = 224, + Description = "Разрешение удалять Рекомендации уставок", + Name = "Setpoints.delete" + }, + new + { + Id = 225, + Description = "Разрешение редактировать Рекомендации уставок", + Name = "Setpoints.edit" + }, + new + { + Id = 226, + Description = "Разрешение просматривать Рекомендации уставок", + Name = "Setpoints.get" + }, + new + { + Id = 227, + Description = "Разрешение редактировать Телеметрии", + Name = "Telemetry.edit" + }, + new + { + Id = 228, + Description = "Разрешение просматривать Анализ телеметрии", + Name = "TelemetryAnalytics.get" + }, + new + { + Id = 229, + Description = "Разрешение редактировать Данные телеметрии по САУБ", + Name = "TelemetryDataSaub.edit" + }, + new + { + Id = 230, + Description = "Разрешение просматривать Данные телеметрии по САУБ", + Name = "TelemetryDataSaub.get" + }, + new + { + Id = 231, + Description = "Разрешение редактировать Данные телеметрии по SpinMaster", + Name = "TelemetryDataSpin.edit" + }, + new + { + Id = 232, + Description = "Разрешение просматривать Данные телеметрии по SpinMaster", + Name = "TelemetryDataSpin.get" + }, + new + { + Id = 233, + Description = "Разрешение редактировать Скважины", + Name = "Well.edit" + }, + new + { + Id = 234, + Description = "Разрешение просматривать Скважины", + Name = "Well.get" + }, + new + { + Id = 235, + Description = "Разрешение редактировать Композитные скважины", + Name = "WellComposite.edit" + }, + new + { + Id = 236, + Description = "Разрешение просматривать Композитные скважины", + Name = "WellComposite.get" + }, + new + { + Id = 237, + Description = "Разрешение удалять Операции по скважинам", + Name = "WellOperation.delete" + }, + new + { + Id = 238, + Description = "Разрешение редактировать Операции по скважинам", + Name = "WellOperation.edit" + }, + new + { + Id = 239, + Description = "Разрешение просматривать Операции по скважинам", + Name = "WellOperation.get" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationCompanyWell", b => + { + b.Property("IdCompany") + .HasColumnType("integer") + .HasColumnName("id_company"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well"); + + b.HasKey("IdCompany", "IdWell"); + + b.HasIndex("IdWell"); + + b.ToTable("t_relation_company_well"); + + b.HasComment("отношение скважин и компаний"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserRolePermission", b => + { + b.Property("IdUserRole") + .HasColumnType("integer") + .HasColumnName("id_user_role"); + + b.Property("IdPermission") + .HasColumnType("integer") + .HasColumnName("id_permission"); + + b.HasKey("IdUserRole", "IdPermission"); + + b.HasIndex("IdPermission"); + + b.ToTable("t_relation_user_role_permission"); + + b.HasComment("Отношение ролей пользователей и разрешений доступа"); + + b.HasData( + new + { + IdUserRole = 1100, + IdPermission = 102 + }, + new + { + IdUserRole = 1100, + IdPermission = 111 + }, + new + { + IdUserRole = 1101, + IdPermission = 101 + }, + new + { + IdUserRole = 1101, + IdPermission = 100 + }, + new + { + IdUserRole = 1102, + IdPermission = 105 + }, + new + { + IdUserRole = 1102, + IdPermission = 108 + }, + new + { + IdUserRole = 1103, + IdPermission = 104 + }, + new + { + IdUserRole = 1103, + IdPermission = 103 + }, + new + { + IdUserRole = 1104, + IdPermission = 108 + }, + new + { + IdUserRole = 1105, + IdPermission = 107 + }, + new + { + IdUserRole = 1105, + IdPermission = 106 + }, + new + { + IdUserRole = 1106, + IdPermission = 111 + }, + new + { + IdUserRole = 1107, + IdPermission = 110 + }, + new + { + IdUserRole = 1107, + IdPermission = 109 + }, + new + { + IdUserRole = 1108, + IdPermission = 114 + }, + new + { + IdUserRole = 1109, + IdPermission = 113 + }, + new + { + IdUserRole = 1109, + IdPermission = 112 + }, + new + { + IdUserRole = 1110, + IdPermission = 123 + }, + new + { + IdUserRole = 1110, + IdPermission = 114 + }, + new + { + IdUserRole = 1111, + IdPermission = 122 + }, + new + { + IdUserRole = 1111, + IdPermission = 121 + }, + new + { + IdUserRole = 1112, + IdPermission = 117 + }, + new + { + IdUserRole = 1113, + IdPermission = 105 + }, + new + { + IdUserRole = 1113, + IdPermission = 123 + }, + new + { + IdUserRole = 1113, + IdPermission = 120 + }, + new + { + IdUserRole = 1114, + IdPermission = 119 + }, + new + { + IdUserRole = 1114, + IdPermission = 118 + }, + new + { + IdUserRole = 1114, + IdPermission = 200 + }, + new + { + IdUserRole = 1115, + IdPermission = 223 + }, + new + { + IdUserRole = 1116, + IdPermission = 105 + }, + new + { + IdUserRole = 1116, + IdPermission = 102 + }, + new + { + IdUserRole = 1116, + IdPermission = 117 + }, + new + { + IdUserRole = 1117, + IdPermission = 125 + }, + new + { + IdUserRole = 1117, + IdPermission = 124 + }, + new + { + IdUserRole = 1200, + IdPermission = 203 + }, + new + { + IdUserRole = 1200, + IdPermission = 230 + }, + new + { + IdUserRole = 1201, + IdPermission = 202 + }, + new + { + IdUserRole = 1201, + IdPermission = 203 + }, + new + { + IdUserRole = 1201, + IdPermission = 220 + }, + new + { + IdUserRole = 1202, + IdPermission = 203 + }, + new + { + IdUserRole = 1202, + IdPermission = 220 + }, + new + { + IdUserRole = 1202, + IdPermission = 236 + }, + new + { + IdUserRole = 1203, + IdPermission = 235 + }, + new + { + IdUserRole = 1204, + IdPermission = 202 + }, + new + { + IdUserRole = 1204, + IdPermission = 203 + }, + new + { + IdUserRole = 1205, + IdPermission = 215 + }, + new + { + IdUserRole = 1206, + IdPermission = 203 + }, + new + { + IdUserRole = 1206, + IdPermission = 206 + }, + new + { + IdUserRole = 1207, + IdPermission = 205 + }, + new + { + IdUserRole = 1208, + IdPermission = 218 + }, + new + { + IdUserRole = 1209, + IdPermission = 217 + }, + new + { + IdUserRole = 1210, + IdPermission = 203 + }, + new + { + IdUserRole = 1210, + IdPermission = 230 + }, + new + { + IdUserRole = 1211, + IdPermission = 203 + }, + new + { + IdUserRole = 1211, + IdPermission = 220 + }, + new + { + IdUserRole = 1211, + IdPermission = 239 + }, + new + { + IdUserRole = 1212, + IdPermission = 238 + }, + new + { + IdUserRole = 1212, + IdPermission = 237 + }, + new + { + IdUserRole = 1213, + IdPermission = 203 + }, + new + { + IdUserRole = 1213, + IdPermission = 239 + }, + new + { + IdUserRole = 1213, + IdPermission = 212 + }, + new + { + IdUserRole = 1214, + IdPermission = 211 + }, + new + { + IdUserRole = 1214, + IdPermission = 210 + }, + new + { + IdUserRole = 1215, + IdPermission = 203 + }, + new + { + IdUserRole = 1215, + IdPermission = 222 + }, + new + { + IdUserRole = 1216, + IdPermission = 221 + }, + new + { + IdUserRole = 1217, + IdPermission = 226 + }, + new + { + IdUserRole = 1218, + IdPermission = 225 + }, + new + { + IdUserRole = 1218, + IdPermission = 224 + }, + new + { + IdUserRole = 1219, + IdPermission = 203 + }, + new + { + IdUserRole = 1219, + IdPermission = 206 + }, + new + { + IdUserRole = 1219, + IdPermission = 230 + }, + new + { + IdUserRole = 1220, + IdPermission = 203 + }, + new + { + IdUserRole = 1220, + IdPermission = 228 + }, + new + { + IdUserRole = 1221, + IdPermission = 202 + }, + new + { + IdUserRole = 1221, + IdPermission = 203 + }, + new + { + IdUserRole = 1221, + IdPermission = 220 + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserRoleUserRole", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id_user_role"); + + b.Property("IdInclude") + .HasColumnType("integer") + .HasColumnName("id_include_user_role"); + + b.HasKey("Id", "IdInclude") + .HasName("t_relation_user_role_user_role_pk"); + + b.HasIndex("IdInclude"); + + b.ToTable("t_relation_user_role_user_role"); + + b.HasComment("Отношение ролей к ролям"); + + b.HasData( + new + { + Id = 1101, + IdInclude = 1100 + }, + new + { + Id = 1103, + IdInclude = 1102 + }, + new + { + Id = 1105, + IdInclude = 1104 + }, + new + { + Id = 1107, + IdInclude = 1106 + }, + new + { + Id = 1109, + IdInclude = 1108 + }, + new + { + Id = 1111, + IdInclude = 1110 + }, + new + { + Id = 1114, + IdInclude = 1113 + }, + new + { + Id = 1117, + IdInclude = 1116 + }, + new + { + Id = 1203, + IdInclude = 1202 + }, + new + { + Id = 1207, + IdInclude = 1206 + }, + new + { + Id = 1209, + IdInclude = 1208 + }, + new + { + Id = 1212, + IdInclude = 1211 + }, + new + { + Id = 1214, + IdInclude = 1213 + }, + new + { + Id = 1216, + IdInclude = 1215 + }, + new + { + Id = 1218, + IdInclude = 1217 + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserUserRole", b => + { + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user"); + + b.Property("IdUserRole") + .HasColumnType("integer") + .HasColumnName("id_user_role"); + + b.HasKey("IdUser", "IdUserRole"); + + b.HasIndex("IdUserRole"); + + b.ToTable("t_relation_user_user_role"); + + b.HasComment("Отношение пользователей и ролей"); + + b.HasData( + new + { + IdUser = 1, + IdUserRole = 2 + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.ReportProperty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Begin") + .HasColumnType("timestamp with time zone") + .HasColumnName("begin"); + + b.Property("End") + .HasColumnType("timestamp with time zone") + .HasColumnName("end") + .HasComment("timestamp with time zone"); + + b.Property("Format") + .HasColumnType("integer") + .HasColumnName("format") + .HasComment("Формат отчета"); + + b.Property("IdFile") + .HasColumnType("integer") + .HasColumnName("id_file") + .HasComment("id файла-родителя"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("id скважины"); + + b.Property("Step") + .HasColumnType("integer") + .HasColumnName("step") + .HasComment("размер шага в секундах"); + + b.HasKey("Id"); + + b.HasIndex("IdFile"); + + b.HasIndex("IdWell"); + + b.ToTable("t_report_property"); + + b.HasComment("Отчеты с данными по буровым"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.SetpointsRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Comment") + .HasColumnType("text") + .HasColumnName("comment") + .HasComment("комментарий для оператора"); + + b.Property("IdAuthor") + .HasColumnType("integer") + .HasColumnName("id_author") + .HasComment("Id пользователя, загрузившего файл"); + + b.Property("IdState") + .HasColumnType("integer") + .HasColumnName("id_state") + .HasComment("0: неизвестно, 1:ожидает отправки, 2: отправлено, 3: принято оператором, 4: отклонено оператором, 5: устарело"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("id скважины"); + + b.Property("ObsolescenceSec") + .HasColumnType("integer") + .HasColumnName("obsolescence") + .HasComment("сек. до устаревания"); + + b.Property>("Setpoints") + .HasColumnType("jsonb") + .HasColumnName("setpoint_set") + .HasComment("Набор уставок"); + + b.Property("UploadDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.HasKey("Id"); + + b.HasIndex("IdAuthor"); + + b.HasIndex("IdWell"); + + b.ToTable("t_setpoints_rquest"); + + b.HasComment("Запросы на изменение уставок панели оператора"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Telemetry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Info") + .HasColumnType("jsonb") + .HasColumnName("info") + .HasComment("Информация с панели о скважине"); + + b.Property("RemoteUid") + .HasColumnType("text") + .HasColumnName("remote_uid") + .HasComment("Идентификатор передающего устройства. Может повторяться в списке, так как комплекты оборудования переезжают от скв. к скв."); + + b.Property("TimeZone") + .HasColumnType("jsonb") + .HasColumnName("timezone") + .HasComment("Смещение часового пояса от UTC"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "RemoteUid" }, "t_telemetry_remote_uid_index"); + + b.ToTable("t_telemetry"); + + b.HasComment("таблица привязки телеметрии от комплектов к конкретной скважине."); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryAnalysis", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DurationSec") + .HasColumnType("integer") + .HasColumnName("duration_sec") + .HasComment("Кол-во секунд после предыдущей операции"); + + b.Property("IdOperation") + .HasColumnType("integer") + .HasColumnName("id_operation"); + + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IsBitPositionDecreasing") + .HasColumnType("boolean") + .HasColumnName("is_bit_position_decreasing") + .HasComment("Долото поднимается"); + + b.Property("IsBitPositionIncreasing") + .HasColumnType("boolean") + .HasColumnName("is_bit_position_increasing") + .HasComment("Долото спускается"); + + b.Property("IsBitPositionLt20") + .HasColumnType("boolean") + .HasColumnName("is_bit_posision_lt_20") + .HasComment("Положение долота меньше 20м"); + + b.Property("IsBlockPositionDecreasing") + .HasColumnType("boolean") + .HasColumnName("is_block_posision_decresing") + .HasComment("Талевый блок поднимается"); + + b.Property("IsBlockPositionIncreasing") + .HasColumnType("boolean") + .HasColumnName("is_block_posision_incresing") + .HasComment("Талевый блок спускается"); + + b.Property("IsHookWeightLt3") + .HasColumnType("boolean") + .HasColumnName("is_hook_weight_lt_3") + .HasComment("Вес на крюке менее 3т"); + + b.Property("IsHookWeightNotChanges") + .HasColumnType("boolean") + .HasColumnName("is_hook_weight_not_changes") + .HasComment("Вес на крюке не меняется"); + + b.Property("IsPressureGt20") + .HasColumnType("boolean") + .HasColumnName("is_pressure_gt_20") + .HasComment("Давление более 20"); + + b.Property("IsPressureLt20") + .HasColumnType("boolean") + .HasColumnName("is_pressure_lt_20") + .HasComment("Давление менее 20"); + + b.Property("IsRotorSpeedGt5") + .HasColumnType("boolean") + .HasColumnName("is_rotor_speed_gt_3") + .HasComment("Обороты ротора выше 3"); + + b.Property("IsRotorSpeedLt5") + .HasColumnType("boolean") + .HasColumnName("is_rotor_speed_lt_3") + .HasComment("Обороты ротора ниже 3"); + + b.Property("IsWellDepthDecreasing") + .HasColumnType("boolean") + .HasColumnName("is_well_depth_decreasing") + .HasComment("Глубина забоя не увеличивается"); + + b.Property("IsWellDepthIncreasing") + .HasColumnType("boolean") + .HasColumnName("is_well_depth_increasing") + .HasComment("Глубина забоя увеличивается"); + + b.Property("OperationEndDepth") + .HasColumnType("double precision") + .HasColumnName("operation_end_depth") + .HasComment("Глубина, на которой закончилась операция"); + + b.Property("OperationStartDepth") + .HasColumnType("double precision") + .HasColumnName("operation_start_depth") + .HasComment("Глубина, на которой началась операция"); + + b.Property("UnixDate") + .HasColumnType("bigint") + .HasColumnName("unix_date") + .HasComment("Unix timestamp для Linq запросов с вычислением дат"); + + b.HasKey("Id"); + + b.HasIndex("IdOperation"); + + b.HasIndex("IdTelemetry"); + + b.ToTable("t_telemetry_analysis"); + + b.HasComment("События на скважине"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSaub", b => + { + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date") + .HasComment("'2021-10-19 18:23:54+05'"); + + b.Property("AxialLoad") + .HasColumnType("real") + .HasColumnName("axial_load") + .HasComment("Осевая нагрузка"); + + b.Property("AxialLoadLimitMax") + .HasColumnType("real") + .HasColumnName("axial_load_limit_max") + .HasComment("Осевая нагрузка. Аварийная макс."); + + b.Property("AxialLoadSp") + .HasColumnType("real") + .HasColumnName("axial_load_sp") + .HasComment("Осевая нагрузка. Задание"); + + b.Property("BitDepth") + .HasColumnType("real") + .HasColumnName("bit_depth") + .HasComment("Положение инструмента"); + + b.Property("BlockPosition") + .HasColumnType("real") + .HasColumnName("block_position") + .HasComment("Высота талевого блока"); + + b.Property("BlockPositionMax") + .HasColumnType("real") + .HasColumnName("block_position_max") + .HasComment("Талевый блок. Макс положение"); + + b.Property("BlockPositionMin") + .HasColumnType("real") + .HasColumnName("block_position_min") + .HasComment("Талевый блок. Мин положение"); + + b.Property("BlockSpeed") + .HasColumnType("real") + .HasColumnName("block_speed") + .HasComment("Скорость талевого блока"); + + b.Property("BlockSpeedSp") + .HasColumnType("real") + .HasColumnName("block_speed_sp") + .HasComment("Скорости талевого блока. Задание"); + + b.Property("BlockSpeedSpDevelop") + .HasColumnType("real") + .HasColumnName("block_speed_sp_develop") + .HasComment("Талевый блок. Задание скорости для проработки"); + + b.Property("BlockSpeedSpRotor") + .HasColumnType("real") + .HasColumnName("block_speed_sp_rotor") + .HasComment("Талевый блок. Задание скорости для роторного бурения"); + + b.Property("BlockSpeedSpSlide") + .HasColumnType("real") + .HasColumnName("block_speed_sp_slide") + .HasComment("Талевый блок. Задание скорости для режима слайда"); + + b.Property("Flow") + .HasColumnType("real") + .HasColumnName("flow") + .HasComment("Расход"); + + b.Property("FlowDeltaLimitMax") + .HasColumnType("real") + .HasColumnName("flow_delta_limit_max") + .HasComment("Расход. Аварийный макс."); + + b.Property("FlowIdle") + .HasColumnType("real") + .HasColumnName("flow_idle") + .HasComment("Расход. Холостой ход"); + + b.Property("HookWeight") + .HasColumnType("real") + .HasColumnName("hook_weight") + .HasComment("Вес на крюке"); + + b.Property("HookWeightIdle") + .HasColumnType("real") + .HasColumnName("hook_weight_idle") + .HasComment("Вес на крюке. Холостой ход"); + + b.Property("HookWeightLimitMax") + .HasColumnType("real") + .HasColumnName("hook_weight_limit_max") + .HasComment("Вес на крюке. Затяжка"); + + b.Property("HookWeightLimitMin") + .HasColumnType("real") + .HasColumnName("hook_weight_limit_min") + .HasComment("Вес на крюке. Посадка"); + + b.Property("IdFeedRegulator") + .HasColumnType("smallint") + .HasColumnName("id_feed_regulator") + .HasComment("Текущий критерий бурения"); + + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user") + .HasComment("Пользователь САУБ"); + + b.Property("Mode") + .HasColumnType("smallint") + .HasColumnName("mode") + .HasComment("Режим САУБ"); + + b.Property("MseState") + .HasColumnType("smallint") + .HasColumnName("mse_state") + .HasComment("Текущее состояние работы MSE"); + + b.Property("Pressure") + .HasColumnType("real") + .HasColumnName("pressure") + .HasComment("Давление"); + + b.Property("PressureDeltaLimitMax") + .HasColumnType("real") + .HasColumnName("pressure_delta_limit_max") + .HasComment("Давление дифф. Аварийное макс."); + + b.Property("PressureIdle") + .HasColumnType("real") + .HasColumnName("pressure_idle") + .HasComment("Давление. Холостой ход"); + + b.Property("PressureSp") + .HasColumnType("real") + .HasColumnName("pressure_sp") + .HasComment("Давление. Задание"); + + b.Property("PressureSpDevelop") + .HasColumnType("real") + .HasColumnName("pressure_sp_develop") + .HasComment("Давление. Задание для проработки"); + + b.Property("PressureSpRotor") + .HasColumnType("real") + .HasColumnName("pressure_sp_rotor") + .HasComment("Давление. Задание для роторного бурения"); + + b.Property("PressureSpSlide") + .HasColumnType("real") + .HasColumnName("pressure_sp_slide") + .HasComment("Давление. Задание для режима слайда"); + + b.Property("RotorSpeed") + .HasColumnType("real") + .HasColumnName("rotor_speed") + .HasComment("Обороты ротора"); + + b.Property("RotorTorque") + .HasColumnType("real") + .HasColumnName("rotor_torque") + .HasComment("Момент на роторе"); + + b.Property("RotorTorqueIdle") + .HasColumnType("real") + .HasColumnName("rotor_torque_idle") + .HasComment("Момент на роторе. Холостой ход"); + + b.Property("RotorTorqueLimitMax") + .HasColumnType("real") + .HasColumnName("rotor_torque_limit_max") + .HasComment("Момент на роторе. Аварийный макс."); + + b.Property("RotorTorqueSp") + .HasColumnType("real") + .HasColumnName("rotor_torque_sp") + .HasComment("Момент на роторе. Задание"); + + b.Property("WellDepth") + .HasColumnType("real") + .HasColumnName("well_depth") + .HasComment("Глубина забоя"); + + b.HasKey("IdTelemetry", "Date"); + + b.ToTable("t_telemetry_data_saub"); + + b.HasComment("набор основных данных по SAUB"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSpin", b => + { + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date") + .HasComment("'2021-10-19 18:23:54+05'"); + + b.Property("BreakAngleK") + .HasColumnType("real") + .HasColumnName("break_angle_k") + .HasComment("Коэффициент для расчёта за какой угол нужно тормозить"); + + b.Property("BreakAngleLeft") + .HasColumnType("real") + .HasColumnName("break_angle_left") + .HasComment("Угол торможения влево при работе по моменту"); + + b.Property("EncoderResolution") + .HasColumnType("real") + .HasColumnName("encoder_resolution") + .HasComment("Разрешение энкодера"); + + b.Property("Mode") + .HasColumnType("smallint") + .HasColumnName("mode") + .HasComment("Выбранный режим управления"); + + b.Property("PidMuxTorqueLeftLimit") + .HasColumnType("real") + .HasColumnName("pid_mux_torque_left_limit") + .HasComment(" Момент при котором определяется ехать назад по моменту или по скорости"); + + b.Property("PositionRight") + .HasColumnType("real") + .HasColumnName("position_right") + .HasComment("Крайний правый угол осцилляции"); + + b.Property("PositionZero") + .HasColumnType("real") + .HasColumnName("position_zero") + .HasComment("Нулевая позиция осцилляции"); + + b.Property("Ratio") + .HasColumnType("real") + .HasColumnName("ratio") + .HasComment(" Коэффициент редукции редуктора"); + + b.Property("ReverseKTorque") + .HasColumnType("real") + .HasColumnName("reverse_k_torque") + .HasComment("Коэффициент на который умножается момент, для того чтобы система поняла что мы движемся в обратную сторону"); + + b.Property("ReverseSpeedSpZeroTime") + .HasColumnType("smallint") + .HasColumnName("reverse_speed_sp_zero_time") + .HasComment("Время выдачи сигнала нулевой скорости на при смене направления"); + + b.Property("RevolsLeftLimit") + .HasColumnType("real") + .HasColumnName("revols_left_limit") + .HasComment("Ограничение числа оборотов влево"); + + b.Property("RevolsLeftTotal") + .HasColumnType("real") + .HasColumnName("revols_left_total") + .HasComment("Суммарное количество оборотов влево"); + + b.Property("RevolsRightLimit") + .HasColumnType("real") + .HasColumnName("revols_right_limit") + .HasComment("Ограничение числа оборотов вправо"); + + b.Property("RevolsRightTotal") + .HasColumnType("real") + .HasColumnName("revols_right_total") + .HasComment("Суммарное количество оборотов вправо"); + + b.Property("RotorTorqueAvg") + .HasColumnType("real") + .HasColumnName("rotor_torque_avg") + .HasComment("Момент в роторе средний"); + + b.Property("SpeedLeftSp") + .HasColumnType("real") + .HasColumnName("speed_left_sp") + .HasComment("Заданная скорость вращения влево"); + + b.Property("SpeedRightSp") + .HasColumnType("real") + .HasColumnName("speed_right_sp") + .HasComment("Заданная скорость вращения вправо"); + + b.Property("State") + .HasColumnType("smallint") + .HasColumnName("state") + .HasComment("Переменная этапа"); + + b.Property("TopDriveSpeed") + .HasColumnType("real") + .HasColumnName("top_drive_speed") + .HasComment("Скорость СВП"); + + b.Property("TopDriveSpeedErr") + .HasColumnType("smallint") + .HasColumnName("top_drive_speed_err"); + + b.Property("TopDriveSpeedMax") + .HasColumnType("real") + .HasColumnName("top_drive_speed_max") + .HasComment("верхний предел"); + + b.Property("TopDriveSpeedMin") + .HasColumnType("real") + .HasColumnName("top_drive_speed_min") + .HasComment("нижний предел"); + + b.Property("TopDriveSpeedOffset") + .HasColumnType("real") + .HasColumnName("top_drive_speed_offset") + .HasComment("смещение"); + + b.Property("TopDriveSpeedSpFrom") + .HasColumnType("real") + .HasColumnName("top_drive_speed_sp_from") + .HasComment("Заданная скорость c СВП"); + + b.Property("TopDriveSpeedSpFromErr") + .HasColumnType("smallint") + .HasColumnName("top_drive_speed_sp_from_err"); + + b.Property("TopDriveSpeedSpFromMax") + .HasColumnType("real") + .HasColumnName("top_drive_speed_sp_from_max"); + + b.Property("TopDriveSpeedSpFromMin") + .HasColumnType("real") + .HasColumnName("top_drive_speed_sp_from_min"); + + b.Property("TopDriveSpeedSpFromOffset") + .HasColumnType("real") + .HasColumnName("top_drive_speed_sp_from_offset"); + + b.Property("TopDriveSpeedSpTo") + .HasColumnType("real") + .HasColumnName("top_drive_speed_sp_to") + .HasComment("Задание скорости на СВП"); + + b.Property("TopDriveSpeedSpToErr") + .HasColumnType("smallint") + .HasColumnName("top_drive_speed_sp_to_err"); + + b.Property("TopDriveSpeedSpToMax") + .HasColumnType("real") + .HasColumnName("top_drive_speed_sp_to_max"); + + b.Property("TopDriveSpeedSpToMin") + .HasColumnType("real") + .HasColumnName("top_drive_speed_sp_to_min"); + + b.Property("TopDriveSpeedSpToOffset") + .HasColumnType("real") + .HasColumnName("top_drive_speed_sp_to_offset"); + + b.Property("TopDriveTorque") + .HasColumnType("real") + .HasColumnName("top_drive_torque") + .HasComment("Момент СВП"); + + b.Property("TopDriveTorqueErr") + .HasColumnType("smallint") + .HasColumnName("top_drive_torque_err"); + + b.Property("TopDriveTorqueMax") + .HasColumnType("real") + .HasColumnName("top_drive_torque_max"); + + b.Property("TopDriveTorqueMin") + .HasColumnType("real") + .HasColumnName("top_drive_torque_min"); + + b.Property("TopDriveTorqueOffset") + .HasColumnType("real") + .HasColumnName("top_drive_torque_offset"); + + b.Property("TopDriveTorqueSpFrom") + .HasColumnType("real") + .HasColumnName("top_drive_torque_sp_from") + .HasComment("Заданный момент c СВП"); + + b.Property("TopDriveTorqueSpFromErr") + .HasColumnType("smallint") + .HasColumnName("top_drive_torque_sp_from_err"); + + b.Property("TopDriveTorqueSpFromMax") + .HasColumnType("real") + .HasColumnName("top_drive_torque_sp_from_max"); + + b.Property("TopDriveTorqueSpFromMin") + .HasColumnType("real") + .HasColumnName("top_drive_torque_sp_from_min"); + + b.Property("TopDriveTorqueSpFromOffset") + .HasColumnType("real") + .HasColumnName("top_drive_torque_sp_from_offset"); + + b.Property("TopDriveTorqueSpTo") + .HasColumnType("real") + .HasColumnName("top_drive_torque_sp_to") + .HasComment("Задание момента на СВП"); + + b.Property("TopDriveTorqueSpToErr") + .HasColumnType("smallint") + .HasColumnName("top_drive_torque_sp_to_err"); + + b.Property("TopDriveTorqueSpToMax") + .HasColumnType("real") + .HasColumnName("top_drive_torque_sp_to_max"); + + b.Property("TopDriveTorqueSpToMin") + .HasColumnType("real") + .HasColumnName("top_drive_torque_sp_to_min"); + + b.Property("TopDriveTorqueSpToOffset") + .HasColumnType("real") + .HasColumnName("top_drive_torque_sp_to_offset"); + + b.Property("TorqueLeftLimit") + .HasColumnType("real") + .HasColumnName("torque_left_limit") + .HasComment("Ограничение крутящего момента влево"); + + b.Property("TorqueRampTime") + .HasColumnType("real") + .HasColumnName("torque_ramp_time") + .HasComment("Время нарастания момента"); + + b.Property("TorqueRightLimit") + .HasColumnType("real") + .HasColumnName("torque_right_limit") + .HasComment("Ограничение крутящего момента вправо"); + + b.Property("TorqueStarting") + .HasColumnType("real") + .HasColumnName("torque_starting") + .HasComment("Страгивающий момент"); + + b.Property("TurnLeftOnceByAngle") + .HasColumnType("real") + .HasColumnName("turn_left_once_by_angle") + .HasComment("Доворот по градусам единожды влево"); + + b.Property("TurnLeftOnceByRevols") + .HasColumnType("real") + .HasColumnName("turn_left_once_by_revols") + .HasComment("Доворот по оборотам единожды влево"); + + b.Property("TurnLeftOnceByTorque") + .HasColumnType("real") + .HasColumnName("turn_left_once_by_torque") + .HasComment("Доворот по моменту единожды влево"); + + b.Property("TurnRightOnceByAngle") + .HasColumnType("real") + .HasColumnName("turn_right_once_by_angle") + .HasComment("Доворот по градусам единожды вправо"); + + b.Property("TurnRightOnceByRevols") + .HasColumnType("real") + .HasColumnName("turn_right_once_by_revols") + .HasComment("Доворот по оборотам единожды вправо"); + + b.Property("TurnRightOnceByTorque") + .HasColumnType("real") + .HasColumnName("turn_right_once_by_torque") + .HasComment("Доворот по моменту единожды вправо"); + + b.Property("UnlockBySectorOut") + .HasColumnType("real") + .HasColumnName("unlock_by_sector_out") + .HasComment(" Градус отклонения от сектора для автоматического сброса блокировки"); + + b.Property("Ver") + .HasColumnType("real") + .HasColumnName("ver") + .HasComment("Версия ПО ПЛК"); + + b.Property("W2800") + .HasColumnType("smallint") + .HasColumnName("w2800") + .HasComment("Установка нуля энкодера"); + + b.Property("W2808") + .HasColumnType("smallint") + .HasColumnName("w2808") + .HasComment("Неисправность энкодера"); + + b.Property("W2810") + .HasColumnType("smallint") + .HasColumnName("w2810") + .HasComment(" автоматический сброс блокировки"); + + b.HasKey("IdTelemetry", "Date"); + + b.ToTable("t_telemetry_data_spin"); + + b.HasComment("набор основных данных по SpinMaster"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryEvent", b => + { + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IdEvent") + .HasColumnType("integer") + .HasColumnName("id_event"); + + b.Property("IdCategory") + .HasColumnType("integer") + .HasColumnName("id_category"); + + b.Property("MessageTemplate") + .HasColumnType("text") + .HasColumnName("message_template"); + + b.HasKey("IdTelemetry", "IdEvent"); + + b.ToTable("t_telemetry_event"); + + b.HasComment("Справочник событий. События формируют сообщения. Разделено по версиям посылок от телеметрии."); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Arg0") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("arg0") + .HasComment("Аргумент №0 для вставки в шаблон сообщения"); + + b.Property("Arg1") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("arg1"); + + b.Property("Arg2") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("arg2"); + + b.Property("Arg3") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("arg3"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("IdEvent") + .HasColumnType("integer") + .HasColumnName("id_event"); + + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IdTelemetryUser") + .HasColumnType("integer") + .HasColumnName("id_telemetry_user") + .HasComment("Пользователь панели отправляющей телеметрию. не пользователь облака."); + + b.Property("WellDepth") + .HasColumnType("double precision") + .HasColumnName("well_depth"); + + b.HasKey("Id"); + + b.HasIndex("IdTelemetry"); + + b.ToTable("t_telemetry_message"); + + b.HasComment("Сообщения на буровых"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryUser", b => + { + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user"); + + b.Property("Level") + .HasColumnType("integer") + .HasColumnName("level"); + + b.Property("Name") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name"); + + b.Property("Patronymic") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("patronymic"); + + b.Property("Surname") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("surname"); + + b.HasKey("IdTelemetry", "IdUser"); + + b.ToTable("t_telemetry_user"); + + b.HasComment("Пользователи панели САУБ. Для сообщений."); + }); + + modelBuilder.Entity("AsbCloudDb.Model.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Email") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("email") + .HasComment("должность"); + + b.Property("IdCompany") + .HasColumnType("integer") + .HasColumnName("id_company"); + + b.Property("IdState") + .HasColumnType("smallint") + .HasColumnName("state") + .HasComment("состояние:\n100 - удален"); + + b.Property("Login") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("login"); + + b.Property("Name") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasComment("имя"); + + b.Property("PasswordHash") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("password_hash") + .HasComment("соленый хэш пароля.\nпервые 5 символов - соль"); + + b.Property("Patronymic") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("patronymic") + .HasComment("отчество"); + + b.Property("Phone") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("phone") + .HasComment("номер телефона"); + + b.Property("Position") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("position") + .HasComment("email"); + + b.Property("Surname") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("surname") + .HasComment("фамилия"); + + b.HasKey("Id"); + + b.HasIndex("IdCompany"); + + b.HasIndex("Login") + .IsUnique(); + + b.ToTable("t_user"); + + b.HasComment("Пользователи облака"); + + b.HasData( + new + { + Id = 1, + IdCompany = 1, + Login = "dev", + Name = "Разработчик", + PasswordHash = "Vlcj|4fa529103dde7ff72cfe76185f344d4aa87931f8e1b2044e8a7739947c3d18923464eaad93843e4f809c5e126d013072" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.UserRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption") + .HasComment("Название"); + + b.Property("IdType") + .HasColumnType("integer") + .HasColumnName("id_type") + .HasComment("0-роль из стандартной матрицы, \n1-специальная роль для какого-либо пользователя"); + + b.HasKey("Id"); + + b.ToTable("t_user_role"); + + b.HasComment("Роли пользователей в системе"); + + b.HasData( + new + { + Id = 1, + Caption = "root", + IdType = 1 + }, + new + { + Id = 1100, + Caption = "admin_cluster.view", + IdType = 1 + }, + new + { + Id = 1101, + Caption = "admin_cluster.edit", + IdType = 1 + }, + new + { + Id = 1102, + Caption = "admin_company.view", + IdType = 1 + }, + new + { + Id = 1103, + Caption = "admin_company.edit", + IdType = 1 + }, + new + { + Id = 1104, + Caption = "admin_company_type.view", + IdType = 1 + }, + new + { + Id = 1105, + Caption = "admin_company_type.edit", + IdType = 1 + }, + new + { + Id = 1106, + Caption = "admin_deposit.view", + IdType = 1 + }, + new + { + Id = 1107, + Caption = "admin_deposit.edit", + IdType = 1 + }, + new + { + Id = 1108, + Caption = "admin_permission.view", + IdType = 1 + }, + new + { + Id = 1109, + Caption = "admin_permission.edit", + IdType = 1 + }, + new + { + Id = 1110, + Caption = "admin_role.view", + IdType = 1 + }, + new + { + Id = 1111, + Caption = "admin_role.edit", + IdType = 1 + }, + new + { + Id = 1112, + Caption = "admin_telemetry.view", + IdType = 1 + }, + new + { + Id = 1113, + Caption = "admin_user.view", + IdType = 1 + }, + new + { + Id = 1114, + Caption = "admin_user.edit", + IdType = 1 + }, + new + { + Id = 1115, + Caption = "admin_visit_log.view", + IdType = 1 + }, + new + { + Id = 1116, + Caption = "admin_well.view", + IdType = 1 + }, + new + { + Id = 1117, + Caption = "admin_well.edit", + IdType = 1 + }, + new + { + Id = 1200, + Caption = "archive.view", + IdType = 1 + }, + new + { + Id = 1201, + Caption = "cluster.view", + IdType = 1 + }, + new + { + Id = 1202, + Caption = "composite.view", + IdType = 1 + }, + new + { + Id = 1203, + Caption = "composite.edit", + IdType = 1 + }, + new + { + Id = 1204, + Caption = "deposit.view", + IdType = 1 + }, + new + { + Id = 1205, + Caption = "document.view", + IdType = 1 + }, + new + { + Id = 1206, + Caption = "drillProcessFlow.view", + IdType = 1 + }, + new + { + Id = 1207, + Caption = "drillProcessFlow.edit", + IdType = 1 + }, + new + { + Id = 1208, + Caption = "measure.view", + IdType = 1 + }, + new + { + Id = 1209, + Caption = "measure.edit", + IdType = 1 + }, + new + { + Id = 1210, + Caption = "message.view", + IdType = 1 + }, + new + { + Id = 1211, + Caption = "operations.view", + IdType = 1 + }, + new + { + Id = 1212, + Caption = "operations.edit", + IdType = 1 + }, + new + { + Id = 1213, + Caption = "params.view", + IdType = 1 + }, + new + { + Id = 1214, + Caption = "params.edit", + IdType = 1 + }, + new + { + Id = 1215, + Caption = "report.view", + IdType = 1 + }, + new + { + Id = 1216, + Caption = "report.edit", + IdType = 1 + }, + new + { + Id = 1217, + Caption = "setpoints.view", + IdType = 1 + }, + new + { + Id = 1218, + Caption = "setpoints.edit", + IdType = 1 + }, + new + { + Id = 1219, + Caption = "telemetry.view", + IdType = 1 + }, + new + { + Id = 1220, + Caption = "telemetryAnalysis.view", + IdType = 1 + }, + new + { + Id = 1221, + Caption = "well.view", + IdType = 1 + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Well", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption"); + + b.Property("IdCluster") + .HasColumnType("integer") + .HasColumnName("id_cluster"); + + b.Property("IdState") + .HasColumnType("integer") + .HasColumnName("state") + .HasComment("0 - неизвестно, 1 - в работе, 2 - завершена"); + + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IdWellType") + .HasColumnType("integer") + .HasColumnName("id_well_type"); + + b.Property("Latitude") + .HasColumnType("double precision") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("double precision") + .HasColumnName("longitude"); + + b.Property("Timezone") + .HasColumnType("jsonb") + .HasColumnName("timezone") + .HasComment("Смещение часового пояса от UTC"); + + b.HasKey("Id"); + + b.HasIndex("IdCluster"); + + b.HasIndex("IdTelemetry") + .IsUnique(); + + b.HasIndex("IdWellType"); + + b.ToTable("t_well"); + + b.HasComment("скважины"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellComposite", b => + { + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("Id скважины получателя"); + + b.Property("IdWellSrc") + .HasColumnType("integer") + .HasColumnName("id_well_src") + .HasComment("Id скважины композита"); + + b.Property("IdWellSectionType") + .HasColumnType("integer") + .HasColumnName("id_well_section_type") + .HasComment("Id тип секции композита"); + + b.HasKey("IdWell", "IdWellSrc", "IdWellSectionType"); + + b.HasIndex("IdWellSectionType"); + + b.HasIndex("IdWellSrc"); + + b.ToTable("t_well_composite"); + + b.HasComment("Композитная скважина"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellOperation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CategoryInfo") + .HasColumnType("text") + .HasColumnName("category_info") + .HasComment("Доп. информация к выбраной категории"); + + b.Property("Comment") + .HasColumnType("text") + .HasColumnName("comment") + .HasComment("Комментарий"); + + b.Property("DateStart") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_start") + .HasComment("Дата начала операции"); + + b.Property("DepthEnd") + .HasColumnType("double precision") + .HasColumnName("depth_end") + .HasComment("Глубина после завершения операции, м"); + + b.Property("DepthStart") + .HasColumnType("double precision") + .HasColumnName("depth_start") + .HasComment("Глубина на начало операции, м"); + + b.Property("DurationHours") + .HasColumnType("double precision") + .HasColumnName("duration_hours") + .HasComment("Продолжительность, часы"); + + b.Property("IdCategory") + .HasColumnType("integer") + .HasColumnName("id_category") + .HasComment("Id категории операции"); + + b.Property("IdType") + .HasColumnType("integer") + .HasColumnName("id_type") + .HasComment("0 = План или 1 = Факт"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("Id скважины"); + + b.Property("IdWellSectionType") + .HasColumnType("integer") + .HasColumnName("id_well_section_type") + .HasComment("Id тип секции скважины"); + + b.HasKey("Id"); + + b.HasIndex("DateStart"); + + b.HasIndex("DepthEnd"); + + b.HasIndex("IdCategory"); + + b.HasIndex("IdWell"); + + b.HasIndex("IdWellSectionType"); + + b.ToTable("t_well_operation"); + + b.HasComment("Данные по операциям на скважине"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellOperationCategory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Code") + .HasColumnType("integer") + .HasColumnName("code") + .HasComment("Код операции"); + + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name") + .HasComment("Название категории операции"); + + b.HasKey("Id"); + + b.ToTable("t_well_operation_category"); + + b.HasComment("Справочник операций на скважине"); + + b.HasData( + new + { + Id = 1, + Code = 0, + Name = "Невозможно определить операцию" + }, + new + { + Id = 2, + Code = 0, + Name = "Роторное бурение" + }, + new + { + Id = 3, + Code = 0, + Name = "Слайдирование" + }, + new + { + Id = 4, + Code = 0, + Name = "Подъем с проработкой" + }, + new + { + Id = 5, + Code = 0, + Name = "Спуск с проработкой" + }, + new + { + Id = 6, + Code = 0, + Name = "Подъем с промывкой" + }, + new + { + Id = 7, + Code = 0, + Name = "Спуск с промывкой" + }, + new + { + Id = 8, + Code = 0, + Name = "Спуск в скважину" + }, + new + { + Id = 9, + Code = 0, + Name = "Спуск с вращением" + }, + new + { + Id = 10, + Code = 0, + Name = "Подъем из скважины" + }, + new + { + Id = 11, + Code = 0, + Name = "Подъем с вращением" + }, + new + { + Id = 12, + Code = 0, + Name = "Промывка в покое" + }, + new + { + Id = 13, + Code = 0, + Name = "Промывка с вращением" + }, + new + { + Id = 14, + Code = 0, + Name = "Удержание в клиньях" + }, + new + { + Id = 15, + Code = 0, + Name = "Неподвижное состояние" + }, + new + { + Id = 16, + Code = 0, + Name = "Вращение без циркуляции" + }, + new + { + Id = 17, + Code = 0, + Name = "На поверхности" + }, + new + { + Id = 1001, + Code = 0, + Name = "Бурение" + }, + new + { + Id = 1002, + Code = 0, + Name = "ГИС" + }, + new + { + Id = 1003, + Code = 0, + Name = "ГФР" + }, + new + { + Id = 1004, + Code = 0, + Name = "Монтаж ПВО" + }, + new + { + Id = 1005, + Code = 0, + Name = "Демонтаж ПВО" + }, + new + { + Id = 1006, + Code = 0, + Name = "Установка ФА" + }, + new + { + Id = 1007, + Code = 0, + Name = "Оборудование устья" + }, + new + { + Id = 1008, + Code = 0, + Name = "ОЗЦ" + }, + new + { + Id = 1011, + Code = 0, + Name = "Начало цикла строительства скважины" + }, + new + { + Id = 1012, + Code = 0, + Name = "Окончание цикла строительства скважины" + }, + new + { + Id = 1013, + Code = 0, + Name = "Опрессовка ПВО" + }, + new + { + Id = 1014, + Code = 0, + Name = "Опрессовка Ц.К." + }, + new + { + Id = 1015, + Code = 0, + Name = "Опрессовка ВЗД" + }, + new + { + Id = 1016, + Code = 0, + Name = "Перевод скв на другой тип промывочной жидкости" + }, + new + { + Id = 1017, + Code = 0, + Name = "Перезапись каротажа" + }, + new + { + Id = 1018, + Code = 0, + Name = "Перетяжка талевого каната" + }, + new + { + Id = 1019, + Code = 0, + Name = "Наращивание, промывка" + }, + new + { + Id = 1020, + Code = 0, + Name = "Подъем инструмента" + }, + new + { + Id = 1021, + Code = 0, + Name = "Подъем инструмента с промывкой" + }, + new + { + Id = 1022, + Code = 0, + Name = "Обратная проработка" + }, + new + { + Id = 1023, + Code = 0, + Name = "Сборка инструмента с мостков" + }, + new + { + Id = 1024, + Code = 0, + Name = "Подготовительные работы" + }, + new + { + Id = 1025, + Code = 0, + Name = "Сборка КНБК" + }, + new + { + Id = 1026, + Code = 0, + Name = "Разборка КНБК" + }, + new + { + Id = 1027, + Code = 0, + Name = "Промывка" + }, + new + { + Id = 1028, + Code = 0, + Name = "Промежуточная промывка" + }, + new + { + Id = 1029, + Code = 0, + Name = "Прокачка пачек" + }, + new + { + Id = 1030, + Code = 0, + Name = "Разбуривание тех.оснастки" + }, + new + { + Id = 1031, + Code = 0, + Name = "Ремонт" + }, + new + { + Id = 1032, + Code = 0, + Name = "Спуск инструмента" + }, + new + { + Id = 1033, + Code = 0, + Name = "Спуск инструмента с промывкой" + }, + new + { + Id = 1034, + Code = 0, + Name = "Прямая проработка" + }, + new + { + Id = 1035, + Code = 0, + Name = "Принудительная проработка" + }, + new + { + Id = 1037, + Code = 0, + Name = "Тех СПО-подъем" + }, + new + { + Id = 1038, + Code = 0, + Name = "Тех СПО-спуск" + }, + new + { + Id = 1039, + Code = 0, + Name = "Техническое обслуживание" + }, + new + { + Id = 1040, + Code = 0, + Name = "Цементаж" + }, + new + { + Id = 1041, + Code = 0, + Name = "Шаблонировка ствола" + }, + new + { + Id = 1042, + Code = 0, + Name = "Геологическое осложнение" + }, + new + { + Id = 1043, + Code = 0, + Name = "НПВ" + }, + new + { + Id = 1044, + Code = 0, + Name = "ВМР" + }, + new + { + Id = 1045, + Code = 0, + Name = "Прочее" + }, + new + { + Id = 1046, + Code = 0, + Name = "Спуск КНБК" + }, + new + { + Id = 1047, + Code = 0, + Name = "Подъем КНБК" + }, + new + { + Id = 1048, + Code = 0, + Name = "Спуск ОК" + }, + new + { + Id = 1050, + Code = 0, + Name = "Промывка при спуске ОК" + }, + new + { + Id = 1051, + Code = 0, + Name = "Замер ТС" + }, + new + { + Id = 1052, + Code = 0, + Name = "Тех. отстой" + }, + new + { + Id = 1053, + Code = 0, + Name = "Циркуляция и Обработка БР" + }, + new + { + Id = 1054, + Code = 0, + Name = "Срезка ствола" + }, + new + { + Id = 1055, + Code = 0, + Name = "Вспомогательные работы" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellSectionType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption") + .HasComment("Название"); + + b.HasKey("Id"); + + b.ToTable("t_well_section_type"); + + b.HasComment("конструкция секции скважины"); + + b.HasData( + new + { + Id = 1, + Caption = "Пилотный ствол" + }, + new + { + Id = 2, + Caption = "Направление" + }, + new + { + Id = 3, + Caption = "Кондуктор" + }, + new + { + Id = 4, + Caption = "Эксплуатационная колонна" + }, + new + { + Id = 5, + Caption = "Транспортный ствол" + }, + new + { + Id = 6, + Caption = "Хвостовик" + }, + new + { + Id = 7, + Caption = "Пилотный ствол 2" + }, + new + { + Id = 8, + Caption = "Направление 2" + }, + new + { + Id = 9, + Caption = "Кондуктор 2" + }, + new + { + Id = 10, + Caption = "Эксплуатационная колонна 2" + }, + new + { + Id = 11, + Caption = "Транспортный ствол 2" + }, + new + { + Id = 12, + Caption = "Хвостовик 2" + }, + new + { + Id = 13, + Caption = "Пилотный ствол 3" + }, + new + { + Id = 14, + Caption = "Направление 3" + }, + new + { + Id = 15, + Caption = "Кондуктор 3" + }, + new + { + Id = 16, + Caption = "Эксплуатационная колонна 3" + }, + new + { + Id = 17, + Caption = "Транспортный ствол 3" + }, + new + { + Id = 18, + Caption = "Хвостовик 3" + }, + new + { + Id = 19, + Caption = "Пилотный ствол 4" + }, + new + { + Id = 20, + Caption = "Направление 4" + }, + new + { + Id = 21, + Caption = "Кондуктор 4" + }, + new + { + Id = 22, + Caption = "Эксплуатационная колонна 4" + }, + new + { + Id = 23, + Caption = "Транспортный ствол 4" + }, + new + { + Id = 24, + Caption = "Хвостовик 4" + }, + new + { + Id = 25, + Caption = "Пилотный ствол 5" + }, + new + { + Id = 26, + Caption = "Направление 5" + }, + new + { + Id = 27, + Caption = "Кондуктор 5" + }, + new + { + Id = 28, + Caption = "Эксплуатационная колонна 5" + }, + new + { + Id = 29, + Caption = "Транспортный ствол 5" + }, + new + { + Id = 30, + Caption = "Хвостовик 5" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption") + .HasComment("Название"); + + b.HasKey("Id"); + + b.ToTable("t_well_type"); + + b.HasComment("конструкция скважины"); + + b.HasData( + new + { + Id = 1, + Caption = "Наклонно-направленная" + }, + new + { + Id = 2, + Caption = "Горизонтальная" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Cluster", b => + { + b.HasOne("AsbCloudDb.Model.Deposit", "Deposit") + .WithMany("Clusters") + .HasForeignKey("IdDeposit") + .HasConstraintName("t_cluster_t_deposit_id_fk"); + + b.Navigation("Deposit"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Company", b => + { + b.HasOne("AsbCloudDb.Model.CompanyType", "CompanyType") + .WithMany("Companies") + .HasForeignKey("IdCompanyType") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CompanyType"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.DrillFlowChart", b => + { + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.DrillParams", b => + { + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.WellSectionType", "WellSectionType") + .WithMany("DrillParamsCollection") + .HasForeignKey("IdWellSectionType") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_drill_params_t_well_section_type_id_fk"); + + b.Navigation("Well"); + + b.Navigation("WellSectionType"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.FileInfo", b => + { + b.HasOne("AsbCloudDb.Model.User", "Author") + .WithMany("Files") + .HasForeignKey("IdAuthor"); + + b.HasOne("AsbCloudDb.Model.FileCategory", "FileCategory") + .WithMany() + .HasForeignKey("IdCategory") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Author"); + + b.Navigation("FileCategory"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.FileMark", b => + { + b.HasOne("AsbCloudDb.Model.FileInfo", "FileInfo") + .WithMany("FileMarks") + .HasForeignKey("IdFile") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_file_mark_t_file_info_fk"); + + b.HasOne("AsbCloudDb.Model.User", "User") + .WithMany("FileMarks") + .HasForeignKey("IdUser") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_user_t_file_mark_fk"); + + b.Navigation("FileInfo"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Measure", b => + { + b.HasOne("AsbCloudDb.Model.MeasureCategory", "Category") + .WithMany("Measures") + .HasForeignKey("IdCategory") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationCompanyWell", b => + { + b.HasOne("AsbCloudDb.Model.Company", "Company") + .WithMany("RelationCompaniesWells") + .HasForeignKey("IdCompany") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_relation_company_well_t_company_id_fk"); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany("RelationCompaniesWells") + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_relation_company_well_t_well_id_fk"); + + b.Navigation("Company"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserRolePermission", b => + { + b.HasOne("AsbCloudDb.Model.Permission", "Permission") + .WithMany("RelationUserRolePermissions") + .HasForeignKey("IdPermission") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.UserRole", "UserRole") + .WithMany("RelationUserRolePermissions") + .HasForeignKey("IdUserRole") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Permission"); + + b.Navigation("UserRole"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserRoleUserRole", b => + { + b.HasOne("AsbCloudDb.Model.UserRole", "Role") + .WithMany("RelationUserRoleUserRoles") + .HasForeignKey("Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.UserRole", "IncludeRole") + .WithMany() + .HasForeignKey("IdInclude") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("IncludeRole"); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserUserRole", b => + { + b.HasOne("AsbCloudDb.Model.User", "User") + .WithMany("RelationUsersUserRoles") + .HasForeignKey("IdUser") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.UserRole", "UserRole") + .WithMany("RelationUsersUserRoles") + .HasForeignKey("IdUserRole") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + + b.Navigation("UserRole"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.ReportProperty", b => + { + b.HasOne("AsbCloudDb.Model.FileInfo", "File") + .WithMany() + .HasForeignKey("IdFile") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("File"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.SetpointsRequest", b => + { + b.HasOne("AsbCloudDb.Model.User", "Author") + .WithMany() + .HasForeignKey("IdAuthor") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Author"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryAnalysis", b => + { + b.HasOne("AsbCloudDb.Model.WellOperationCategory", "Operation") + .WithMany("Analysis") + .HasForeignKey("IdOperation") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired() + .HasConstraintName("t_analysis_t_operation_id_fk"); + + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("Analysis") + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_analysis_t_telemetry_id_fk"); + + b.Navigation("Operation"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSaub", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("DataSaub") + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_telemetry_data_saub_t_telemetry_id_fk"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSpin", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("DataSpin") + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_telemetry_data_spin_t_telemetry_id_fk"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryEvent", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("Events") + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_event_t_telemetry_id_fk"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryMessage", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("Messages") + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_messages_t_telemetry_id_fk"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryUser", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("Users") + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_telemetry_user_t_telemetry_id_fk"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.User", b => + { + b.HasOne("AsbCloudDb.Model.Company", "Company") + .WithMany("Users") + .HasForeignKey("IdCompany") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("t_user_t_company_id_fk"); + + b.Navigation("Company"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Well", b => + { + b.HasOne("AsbCloudDb.Model.Cluster", "Cluster") + .WithMany("Wells") + .HasForeignKey("IdCluster") + .HasConstraintName("t_well_t_cluster_id_fk"); + + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithOne("Well") + .HasForeignKey("AsbCloudDb.Model.Well", "IdTelemetry") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("t_well_t_telemetry_id_fk"); + + b.HasOne("AsbCloudDb.Model.WellType", "WellType") + .WithMany("Wells") + .HasForeignKey("IdWellType"); + + b.Navigation("Cluster"); + + b.Navigation("Telemetry"); + + b.Navigation("WellType"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellComposite", b => + { + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany("WellComposites") + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_well_сomposite_t_well_id_fk"); + + b.HasOne("AsbCloudDb.Model.WellSectionType", "WellSectionType") + .WithMany("WellComposites") + .HasForeignKey("IdWellSectionType") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_well_сomposite_t_well_section_type_id_fk"); + + b.HasOne("AsbCloudDb.Model.Well", "WellSrc") + .WithMany("WellCompositeSrcs") + .HasForeignKey("IdWellSrc") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_well_сomposite_src_t_well_id_fk"); + + b.Navigation("Well"); + + b.Navigation("WellSectionType"); + + b.Navigation("WellSrc"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellOperation", b => + { + b.HasOne("AsbCloudDb.Model.WellOperationCategory", "OperationCategory") + .WithMany() + .HasForeignKey("IdCategory") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany("WellOperations") + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.WellSectionType", "WellSectionType") + .WithMany("WellOperations") + .HasForeignKey("IdWellSectionType") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("OperationCategory"); + + b.Navigation("Well"); + + b.Navigation("WellSectionType"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Cluster", b => + { + b.Navigation("Wells"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Company", b => + { + b.Navigation("RelationCompaniesWells"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.CompanyType", b => + { + b.Navigation("Companies"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Deposit", b => + { + b.Navigation("Clusters"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.FileInfo", b => + { + b.Navigation("FileMarks"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.MeasureCategory", b => + { + b.Navigation("Measures"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Permission", b => + { + b.Navigation("RelationUserRolePermissions"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Telemetry", b => + { + b.Navigation("Analysis"); + + b.Navigation("DataSaub"); + + b.Navigation("DataSpin"); + + b.Navigation("Events"); + + b.Navigation("Messages"); + + b.Navigation("Users"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.User", b => + { + b.Navigation("FileMarks"); + + b.Navigation("Files"); + + b.Navigation("RelationUsersUserRoles"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.UserRole", b => + { + b.Navigation("RelationUserRolePermissions"); + + b.Navigation("RelationUserRoleUserRoles"); + + b.Navigation("RelationUsersUserRoles"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Well", b => + { + b.Navigation("RelationCompaniesWells"); + + b.Navigation("WellCompositeSrcs"); + + b.Navigation("WellComposites"); + + b.Navigation("WellOperations"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellOperationCategory", b => + { + b.Navigation("Analysis"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellSectionType", b => + { + b.Navigation("DrillParamsCollection"); + + b.Navigation("WellComposites"); + + b.Navigation("WellOperations"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellType", b => + { + b.Navigation("Wells"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AsbCloudDb/Migrations/20220201100352_AddRoleTypeIds.cs b/AsbCloudDb/Migrations/20220201100352_AddRoleTypeIds.cs new file mode 100644 index 00000000..1def293d --- /dev/null +++ b/AsbCloudDb/Migrations/20220201100352_AddRoleTypeIds.cs @@ -0,0 +1,589 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace AsbCloudDb.Migrations +{ + public partial class AddRoleTypeIds : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1100, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1101, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1102, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1103, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1104, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1105, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1106, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1107, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1108, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1109, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1110, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1111, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1112, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1113, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1114, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1115, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1116, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1117, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1200, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1201, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1202, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1203, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1204, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1205, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1206, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1207, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1208, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1209, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1210, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1211, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1212, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1213, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1214, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1215, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1216, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1217, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1218, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1219, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1220, + column: "id_type", + value: 1); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1221, + column: "id_type", + value: 1); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1100, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1101, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1102, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1103, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1104, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1105, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1106, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1107, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1108, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1109, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1110, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1111, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1112, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1113, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1114, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1115, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1116, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1117, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1200, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1201, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1202, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1203, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1204, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1205, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1206, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1207, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1208, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1209, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1210, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1211, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1212, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1213, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1214, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1215, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1216, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1217, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1218, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1219, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1220, + column: "id_type", + value: 0); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1221, + column: "id_type", + value: 0); + } + } +} diff --git a/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs b/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs index f7561c8f..c45f8db3 100644 --- a/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs +++ b/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs @@ -2668,247 +2668,247 @@ namespace AsbCloudDb.Migrations { Id = 1, Caption = "root", - IdType = 0 + IdType = 1 }, new { Id = 1100, Caption = "admin_cluster.view", - IdType = 0 + IdType = 1 }, new { Id = 1101, Caption = "admin_cluster.edit", - IdType = 0 + IdType = 1 }, new { Id = 1102, Caption = "admin_company.view", - IdType = 0 + IdType = 1 }, new { Id = 1103, Caption = "admin_company.edit", - IdType = 0 + IdType = 1 }, new { Id = 1104, Caption = "admin_company_type.view", - IdType = 0 + IdType = 1 }, new { Id = 1105, Caption = "admin_company_type.edit", - IdType = 0 + IdType = 1 }, new { Id = 1106, Caption = "admin_deposit.view", - IdType = 0 + IdType = 1 }, new { Id = 1107, Caption = "admin_deposit.edit", - IdType = 0 + IdType = 1 }, new { Id = 1108, Caption = "admin_permission.view", - IdType = 0 + IdType = 1 }, new { Id = 1109, Caption = "admin_permission.edit", - IdType = 0 + IdType = 1 }, new { Id = 1110, Caption = "admin_role.view", - IdType = 0 + IdType = 1 }, new { Id = 1111, Caption = "admin_role.edit", - IdType = 0 + IdType = 1 }, new { Id = 1112, Caption = "admin_telemetry.view", - IdType = 0 + IdType = 1 }, new { Id = 1113, Caption = "admin_user.view", - IdType = 0 + IdType = 1 }, new { Id = 1114, Caption = "admin_user.edit", - IdType = 0 + IdType = 1 }, new { Id = 1115, Caption = "admin_visit_log.view", - IdType = 0 + IdType = 1 }, new { Id = 1116, Caption = "admin_well.view", - IdType = 0 + IdType = 1 }, new { Id = 1117, Caption = "admin_well.edit", - IdType = 0 + IdType = 1 }, new { Id = 1200, Caption = "archive.view", - IdType = 0 + IdType = 1 }, new { Id = 1201, Caption = "cluster.view", - IdType = 0 + IdType = 1 }, new { Id = 1202, Caption = "composite.view", - IdType = 0 + IdType = 1 }, new { Id = 1203, Caption = "composite.edit", - IdType = 0 + IdType = 1 }, new { Id = 1204, Caption = "deposit.view", - IdType = 0 + IdType = 1 }, new { Id = 1205, Caption = "document.view", - IdType = 0 + IdType = 1 }, new { Id = 1206, Caption = "drillProcessFlow.view", - IdType = 0 + IdType = 1 }, new { Id = 1207, Caption = "drillProcessFlow.edit", - IdType = 0 + IdType = 1 }, new { Id = 1208, Caption = "measure.view", - IdType = 0 + IdType = 1 }, new { Id = 1209, Caption = "measure.edit", - IdType = 0 + IdType = 1 }, new { Id = 1210, Caption = "message.view", - IdType = 0 + IdType = 1 }, new { Id = 1211, Caption = "operations.view", - IdType = 0 + IdType = 1 }, new { Id = 1212, Caption = "operations.edit", - IdType = 0 + IdType = 1 }, new { Id = 1213, Caption = "params.view", - IdType = 0 + IdType = 1 }, new { Id = 1214, Caption = "params.edit", - IdType = 0 + IdType = 1 }, new { Id = 1215, Caption = "report.view", - IdType = 0 + IdType = 1 }, new { Id = 1216, Caption = "report.edit", - IdType = 0 + IdType = 1 }, new { Id = 1217, Caption = "setpoints.view", - IdType = 0 + IdType = 1 }, new { Id = 1218, Caption = "setpoints.edit", - IdType = 0 + IdType = 1 }, new { Id = 1219, Caption = "telemetry.view", - IdType = 0 + IdType = 1 }, new { Id = 1220, Caption = "telemetryAnalysis.view", - IdType = 0 + IdType = 1 }, new { Id = 1221, Caption = "well.view", - IdType = 0 + IdType = 1 }); }); diff --git a/AsbCloudDb/Model/AsbCloudDbContext.cs b/AsbCloudDb/Model/AsbCloudDbContext.cs index efefd114..7f9a0ab1 100644 --- a/AsbCloudDb/Model/AsbCloudDbContext.cs +++ b/AsbCloudDb/Model/AsbCloudDbContext.cs @@ -271,47 +271,47 @@ namespace AsbCloudDb.Model modelBuilder.Entity(entity => { entity.HasData(new List{ - new UserRole{ Id = 1, Caption = "root", }, - new UserRole{ Id = 1100, Caption = "admin_cluster.view"}, - new UserRole{ Id = 1101, Caption = "admin_cluster.edit"}, - new UserRole{ Id = 1102, Caption = "admin_company.view"}, - new UserRole{ Id = 1103, Caption = "admin_company.edit"}, - new UserRole{ Id = 1104, Caption = "admin_company_type.view"}, - new UserRole{ Id = 1105, Caption = "admin_company_type.edit"}, - new UserRole{ Id = 1106, Caption = "admin_deposit.view"}, - new UserRole{ Id = 1107, Caption = "admin_deposit.edit"}, - new UserRole{ Id = 1108, Caption = "admin_permission.view"}, - new UserRole{ Id = 1109, Caption = "admin_permission.edit"}, - new UserRole{ Id = 1110, Caption = "admin_role.view"}, - new UserRole{ Id = 1111, Caption = "admin_role.edit"}, - new UserRole{ Id = 1112, Caption = "admin_telemetry.view"}, - new UserRole{ Id = 1113, Caption = "admin_user.view"}, - new UserRole{ Id = 1114, Caption = "admin_user.edit"}, - new UserRole{ Id = 1115, Caption = "admin_visit_log.view"}, - new UserRole{ Id = 1116, Caption = "admin_well.view"}, - new UserRole{ Id = 1117, Caption = "admin_well.edit"}, - new UserRole{ Id = 1200, Caption = "archive.view"}, - new UserRole{ Id = 1201, Caption = "cluster.view"}, - new UserRole{ Id = 1202, Caption = "composite.view"}, - new UserRole{ Id = 1203, Caption = "composite.edit"}, - new UserRole{ Id = 1204, Caption = "deposit.view"}, - new UserRole{ Id = 1205, Caption = "document.view"}, - new UserRole{ Id = 1206, Caption = "drillProcessFlow.view"}, - new UserRole{ Id = 1207, Caption = "drillProcessFlow.edit"}, - new UserRole{ Id = 1208, Caption = "measure.view"}, - new UserRole{ Id = 1209, Caption = "measure.edit"}, - new UserRole{ Id = 1210, Caption = "message.view"}, - new UserRole{ Id = 1211, Caption = "operations.view"}, - new UserRole{ Id = 1212, Caption = "operations.edit"}, - new UserRole{ Id = 1213, Caption = "params.view"}, - new UserRole{ Id = 1214, Caption = "params.edit"}, - new UserRole{ Id = 1215, Caption = "report.view"}, - new UserRole{ Id = 1216, Caption = "report.edit"}, - new UserRole{ Id = 1217, Caption = "setpoints.view"}, - new UserRole{ Id = 1218, Caption = "setpoints.edit"}, - new UserRole{ Id = 1219, Caption = "telemetry.view"}, - new UserRole{ Id = 1220, Caption = "telemetryAnalysis.view"}, - new UserRole{ Id = 1221, Caption = "well.view"}, + new UserRole{ Id = 1, Caption = "root", IdType = 1}, + new UserRole{ Id = 1100, Caption = "admin_cluster.view", IdType = 1}, + new UserRole{ Id = 1101, Caption = "admin_cluster.edit", IdType = 1}, + new UserRole{ Id = 1102, Caption = "admin_company.view", IdType = 1}, + new UserRole{ Id = 1103, Caption = "admin_company.edit", IdType = 1}, + new UserRole{ Id = 1104, Caption = "admin_company_type.view", IdType = 1}, + new UserRole{ Id = 1105, Caption = "admin_company_type.edit", IdType = 1}, + new UserRole{ Id = 1106, Caption = "admin_deposit.view", IdType = 1}, + new UserRole{ Id = 1107, Caption = "admin_deposit.edit", IdType = 1}, + new UserRole{ Id = 1108, Caption = "admin_permission.view", IdType = 1}, + new UserRole{ Id = 1109, Caption = "admin_permission.edit", IdType = 1}, + new UserRole{ Id = 1110, Caption = "admin_role.view", IdType = 1}, + new UserRole{ Id = 1111, Caption = "admin_role.edit", IdType = 1}, + new UserRole{ Id = 1112, Caption = "admin_telemetry.view", IdType = 1}, + new UserRole{ Id = 1113, Caption = "admin_user.view", IdType = 1}, + new UserRole{ Id = 1114, Caption = "admin_user.edit", IdType = 1}, + new UserRole{ Id = 1115, Caption = "admin_visit_log.view", IdType = 1}, + new UserRole{ Id = 1116, Caption = "admin_well.view", IdType = 1}, + new UserRole{ Id = 1117, Caption = "admin_well.edit", IdType = 1}, + new UserRole{ Id = 1200, Caption = "archive.view", IdType = 1}, + new UserRole{ Id = 1201, Caption = "cluster.view", IdType = 1}, + new UserRole{ Id = 1202, Caption = "composite.view", IdType = 1}, + new UserRole{ Id = 1203, Caption = "composite.edit", IdType = 1}, + new UserRole{ Id = 1204, Caption = "deposit.view", IdType = 1}, + new UserRole{ Id = 1205, Caption = "document.view", IdType = 1}, + new UserRole{ Id = 1206, Caption = "drillProcessFlow.view", IdType = 1}, + new UserRole{ Id = 1207, Caption = "drillProcessFlow.edit", IdType = 1}, + new UserRole{ Id = 1208, Caption = "measure.view", IdType = 1}, + new UserRole{ Id = 1209, Caption = "measure.edit", IdType = 1}, + new UserRole{ Id = 1210, Caption = "message.view", IdType = 1}, + new UserRole{ Id = 1211, Caption = "operations.view", IdType = 1}, + new UserRole{ Id = 1212, Caption = "operations.edit", IdType = 1}, + new UserRole{ Id = 1213, Caption = "params.view", IdType = 1}, + new UserRole{ Id = 1214, Caption = "params.edit", IdType = 1}, + new UserRole{ Id = 1215, Caption = "report.view", IdType = 1}, + new UserRole{ Id = 1216, Caption = "report.edit", IdType = 1}, + new UserRole{ Id = 1217, Caption = "setpoints.view", IdType = 1}, + new UserRole{ Id = 1218, Caption = "setpoints.edit", IdType = 1}, + new UserRole{ Id = 1219, Caption = "telemetry.view", IdType = 1}, + new UserRole{ Id = 1220, Caption = "telemetryAnalysis.view", IdType = 1}, + new UserRole{ Id = 1221, Caption = "well.view", IdType = 1}, }); }); diff --git a/AsbCloudWebApi/Docs/Create permissions.ods b/AsbCloudWebApi/Docs/Create permissions.ods index 019119b3416b54c79ca2fdbf3fe948c38e6e70d1..ec824b8e8fd2372cbbf1e95115da239d01630a99 100644 GIT binary patch delta 22291 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 z z25*t#F$FbvIHND@aS;Ws;`+5C{-pEm;I4RkBI9T3=i4nS{J6aYqysrHFR;U9YX;GiZ)z5{@U2wVd!4w$`CZD@5H(bBcCD9;_o_nw+XNs zW=qHx%`rUq(EKo{?s;aTu2xF^tgyb~uf}QY!P23142ph{|%$G*>Zw z;bGk_6awiKts#88cQ!F}@vz-Q9t4e+MLmAYxB>I{7WypLh3&&WY#S6k={f%7hc|eb z%rGoba!3mH`KG$OQamXB;l_VX33SVCB>&GV-I5C_9M&4FxER8+&ZAQdzt^UvJMW!3 z-df&KT32X*D4AB;Sv@bPROzy=^kVdbeC`-}MZkKTbH9u&Rma3DVp}fpxq#LyM-IQk zokcWu>ZZC3WuGi4carv2w8#ocnP{V-w9pE@G~w=}UuN<=X%TZA*oZWcp?q*`GnWmz z_XrC!ON^HxV1mSX76PzHs)c?QPuXif7fab(ez5Y-lTd;W(Tb#&%-_{k>Gwz+7JXar zR&0b#@1<84H|ngV+F$rhB5H~Ssh@Pf*rs;;02EdB6f7xk5e$uZvHlZQ`fSv!A7Y?P zJ$|zY5LO>Nfl?CQ85CkbQ2MMO3-LM?0zL2d zx9E%Lnp6viJ_tR!e*v($Z0b8cXr-Wu{5ZdpMa_TJW}@UTG%{uY(Lj8|uaR|$Q3L}sH2L?@&12nLh$lP<$&ieouEvtjam}IMMth#s+G*zTT?GAC}X{^!2&#JS82nc-vK4 zksM?p4%HviBLb6igd6deOfA8D73&(k3q!IVh!cub!N7u=P@RRr){<+vG?1WrNU@oH zHzdb)DL;C*FAeVR9~0a~0EgFo$`G9(n|?BikDZ!Abu=;&`SyHLcu+R(==PmwYzQEX z<|K&ycG&ui0x2BO9oRtyH)Pv%6AEd0JRq)E*FOc;S%Aj`@X5PEjUtN&8vdZgyBaTw z2t{;1?@f!9W%FujE}}O2D=0c)ljHx|4gVRNy6m9sggpzo_r)&YQ4Evp4l#UDp98?< zGgC^bf!Ro*GZ&v#Lcqw53aNpy%7$Y<>sn5VgdqByA-VN-X2F2~*wW)>vQ-GK2}Y+_x@;{GgiytKT;w=r8Y z82Az>`ZtRAg%=S~{!=NlA zl|J9AWr$1o$s|$Ipxo{Eb^}V1pk|08w?5=b3YeZ@4SiE?89hCp;!)#rB441$vwPh} z(qV08KVmO^F7lJ2b*TKIf#Ik4nT;+Bl`j}-+8v(wX@d6Z*{f$ouW#=<8>c?hT=F!V zfij2!OLB)~2F70ux>T4v+6E7_@mKZls9!CzpwRBo?X@C6G8dx$F$mSlf+)Ddq!o zGVAG`IQKGlc$Z{zqPzRuu#Ld@X?89J9;ZgbeodUZXfZ`{4^I_a=5^9XL$GFDJ}Lge@zF8N-lk!SHh-QTZxSN$atl=sX* zSO3^-TIo2U*euy#9u4RUA*;774VCa@k$@fB@PloOl8M0W7X^uDu%<`J;h`&r9)yf+ zE<6BC&jeruR??LQg@%=S0O)Lel)1yW#1q+(XJNz#xMR@Q`B_j@jTJzEkO}v? z3h%PeULZE7XoI2?xW^kF@vlNa@2|s+6%9x9Z>WUDX8WnHrT|;J@q;w{Zn2NS;(awV z<9q(vQ04o*Lz;zQGG%tn(g$^zFoz~3)(oH-L5`V|Xi1)-(Sd@LhN^1p(+p<|>gW}9 zbUn_}8bEzpsj*Wsqjx)tJbRLA^7Y;wwIzeLZd&~jr0wC>R528b+RE=cnujJ+Xu_{w zpW_b8UtdMk09X89F`wlMM7S~h2jTT<*nSFrmM99+Ut;Y&ooNgbG`Cd;3 zXohMtm7DqX}@#!Jc!pGs92T~xi`py2Q?;4qGfkB%M40V zYN1h)IB)QV^nk(=-n^zT;hP4a~G%%XaYC&e-**O}7$FNS$IZ~%zG$EEMxKcJDkxo3@j zMriztY5DY(?=H?e{NBS_Wk8RuyE{pw}@Uf5l9B7zaQkUp8f`e z^ZMD2y3nE^wmp~#sL@B|=KX1^pGH^5u$QeFmaj#{sjGn0PQw`am(Ql_62LK*O_}M!;0k->nGkt9+0ao+GQ~FA#Me<(mkaB z0mFQ_9pggqGyqy37WFK+qB9xn`{=VwwkzPbeSPd7-I=gtZR89b2?8kPS(x=APZcS& zp0kxmR4Nrwf)f15Ue83*eG@d%X0~kP%}8dyoG88Y>yNy>GP`pcoOugts=UWupDF^* zbGU(lZ2EqJI6)gXBBOLwP}jf-wG8PbPQ?jhze#jMO*k=LA>C|hUkpqIghw28!Wv}=$~)HTt=-DOSnf2h;whBwG}<&TK$)}k zBR|V;9

KyMsa)CR1+%}=z2qkig6_;5x^W)x|RUMdRso*Og0wf^EeJyVhr2$t>p z)Z!47S=SV-;LnZHRO5c@+2-JB z)H(+to%4_~thxs-j1%vQw@vhKFQoKmK^B-bW5|%xdAlJ>kiaw%;7M#GQT+X|k}J%3 z`VN4S>)NuxY+V6rM4Tmq&*=^%4tt1SC9Jcj4tg8pr#@5=iNB-yv465JiQdtq5J@PM zqq%n(K~HrdIo!iu5kN70@R}9drGPpoX#P7#RTgkCjZ)R+BAxY}qbg*~2_fs5Hzs;b z%KhGm%{1mj0Dl8u@R?JBnbKbVmP{1Y;r43xyI)%`3cB6t#9$xutH4g^H%7dJ>U(Hn zkU`5d=fOLIk-24AgZmBRN;Tgwom9+Q*L|4XxMY!iIs3z^wS89tt+p)b;)p*}?5O%BN+7 zvn+S4t%xJ!4Zf{C@i1gn77&c{e80kc{lf`v0iG6w}%QO3UVOol7MVrM?O zo;1E_K+LZ5MAo|XM}LohFyIJqD}@*Nr|Y$Wo?uR)5b-aBV5&^Uy>U*KRV+Jtti#!7-94yN)IxU7 z!tnV;DNe{MU$<6I^ z0Y?aML2X7c8`v;Tu32|YVM0|LxiMyH+@ITM!~2AVxi$Yw<_Xt0)sxsOf^%!?Q6Y^2 zj`JGvj(J2xc5*|Z`J3$(HGFVpPW4j);I_pEh5vx^vpT|r%L+@s9rJ-h9%jRmv-(3c zwwe3%W$zrWP%&)@6~-Hru|saRIyvzI;W{8pQ)YrFKsy@AJ0jPpGNJ0nyzAWK9!+l~ zAL*ONW$-L(FyJ`%DQ*ibM{0H-XR`e|=^kU5^wJTEaNz|P|NhWdrh-?CW73$!n0eJo@rL~?B;K7ajuqe? zUmW0dV%u~v51)!i5i6^SI&CH@J#_JSY{ZxTnCG!-%?-XMJ{zM_Prh#r#)mMLB1&qO zJ5K!{7&lu=Q$h(%^BbqmG0y`U_ZS0xCOjV_n!tC_DZ|KjrNzGl zlBW%voM)lOBFVI-&f*0?olB+kHF6bRs=)7#<&em!D`Ts*r@0MaZ6M5~zK2>9q7hel zd`6e46VxkaBleka@I|bp=|3U*2 z%Zahb4eG);>>feok@nbzQQDSPfBu-6SNDqljziEDCADu$_vhM|xX)GqC^6Egi2HyS z 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 ICDdR3KX#a=%>V!Z delta 22324 zcmXuJb9i6R^FAEgP8v71ZQD*`H@16Xt1%ikww*N2tFdjHjq&9D`98n%$DV8F?6tG! z-r1ddW_NiDqI?SiNktwK3JVMj4h$@S>nD;L#Aj*D^;ss7L6HBv!uhYB&hbAfd6F?W z)_-5%!2c5@d4Ti(?<;xIJUGVx-vSZhe=W!$cs>OU`VfNP|Fz77WCT1`2Mu@fP8Zxo zlA;?2Yb%0^tusm~5GaVKy9hk$9+tk`xp4c2-^F^!{H&*tkJ_1YV4=3AyWtN%^gEQs z+TWe6pzvUV$4xGxzHmZoMUiDiv?0iDb=>T{id&mq)*iO2%S%@f57UO1Eu!9YR|tXZ zD@&)6D8Td_oTU{HiUMq+FvyEBly#-l=-JkdOMEh3`Lx%xSJG7zjcU8=waM>s#`+mR z3BPY!3&L2Z8j{(vp1TvraS2$6p9)F6&JGuG{IO^6`~!_@7K8ukn1v^S1{ND|2zDUS zs=O*y$?jzpl5P4(P{O(gzpK5p7xr4Kpa&{y6NoggotKRK2vaQv zE#_ADM@uRFydu3E4>?;I#@UzAU#W$t@ptRD@W)@IWrIg;iz>{Oyd3KjB=iHrz8QE@ zoo1@bdcnu>Z{rPmsmHy^quUW^${aHlMAnE(ju_7?4&9U1lBB#c1@Yit;lS?(m7D zsYCuO=W`}59?EvjM5`-IS1%t?XP4;Zx?RDm><;`XxVHQShmBR{81%NrJi14b zu9D_ZZ02cs`3n)oa~!&F01-ZJ@QjD~)N~0{Gap5L;Yz`RK!j>O8tkfaTb{zTvQjNCW^!6{jyv4CVlfRg{1iO32Mp)( z(|4TN9B_cafn_Allfj>nLiVEJ9)Iu`d~?FY6mRpXqKzxA<2)@CY&rNE}WE{RyZ zNX61wZ>6PKi9;PRmGhaNR~Sze&)-x-82>OQS(DvVWpIMV+A+kk1RBj3mZM{3r+PAl zc~Em6S0iN+jvYZEhh9FM<&zw$v2|%;us^QjdOLuCDu-O8C_2ScG1@1@a2})jojNDi zu|lgOH2vFreW{AB0<(>Q4eP(twm22Ye+|2@mJS!kDPDVPzhE7Z_tGmuira6cNpWW) zx&}Y;|<`(fbMP+)-TfX^Wu%LnoqHSu$fL6{+s?lLB8VeaS8m;mA^4(lviaK zq^uMW%@xJ}xdmw@Hj%ExtfcfU)@~a{`fENi$At19b6K9N?c$vhT&hQjUftP<3$FuK zv^hyBdqr;#fikSIHK?>npkCQ0bRq$HEFwYp-q!2t4rQ?);sWdL)VkFBqP+L)hcP7G zU#*2-27K~`9}4yyd{3?Lf=i4Jewti5xC^lE1rU+oA=z~71)1!Kv^g!_EKM!kl$uzt zp3CkMH?EriFOoK2JZHFsIPCM^?>vFMpoojvaB)w_4t3$Nux2|A&&_LFSnmV1sw7g` zIxA`iK~;jLY?@Fg^${`D88}Sm9kKD0iOhDZOFxX1vRU>K?dHV!;5i2TcI3QsOo@MS z2+c@_ePRjGZPbTZE(RD_3uzo?h+bSF!t)BMLJW#vTcX-T#wR8NU(+K&VzGcWY@4XI z^r3>>Ka8(5N}_Kb(J{2)Eo$|Zy#wXE?^;Mc0}gk>Q3g*}W*lAu%Y;9Y<+#O7-W9`* z(U9URHTqK-RD_}VDWNnpC7N%{M`y!xWl)oARvT6v?TanRMGI6^J0)0y<xC0G@AW zNw`TI-@Bd;XN|Z?h}iSLjbuIASuZlh+Gm)}Ye7ue#Ptjw+jAJD*J!xa3aps&_Uup; zFeu-4VC14cHaOmV$kOeyarC@N+C1Q;-nX&sH%DHa`RqjhSxY&-FxY^m+_u6%xA zxtWuiWJWxCaBl$pW=M!Xr>%KAsNUfQ#2xNQRODgdAn(3fZoq(nnNWj){hvpLgM<6@ zsG=HR|Mvj@dwqIYFnbF(6DBWvyVxZ8q+}MX(1&*fy7o}CK6dD_377mL&HLnwcG9+3 zRlZ}nK9+Z1@B2GzX7jYHTjz-`+`r+6u9t#=b!rs|KS?EsX{tjt3_^)fFW(3S=N#qy z`D9TPtc8Aw@_ryyUsGx5F5r_rBfL3X^sx{F!>o8Vd5YnMEWca(3!Gy=C`|mKxlF_8 zIq(ME%!(|^d4nzD*!{tq^lNb$^-Ze|IY&Nb^w0DSPi+_Qb+COm@M;bX-qz&*ofN{OzM!+GsP1(GP>hsh;yjD0||B zKggdJ$M;DFZ4*8Y1ef?eeV#y;m{F7!;q3dx6Ki+cUqo}dQ47>aVnG6 z^iQg7e6QMwlPl09ZGVbyUUG`n+tHtTDAgNRR1G8Zw6$5%Lxz8#)JCrC6E1^B;bU~V0Z{>CU9UVAtAdq^g8w@ z&Bs8({Ft4k$1PYxhIepv*~v+DPG*iasUt^XET))~SWNb+!FU!|5pQnK z7u2dMemj0D%Hg)15-|rv%-9nu);L%Drgs1Imy5lu$;M4?&Tk842gs~|a|_W~du3$9 zU^`|B;fBzJHy5q?Ub<379+}7AYOUh03Iz`PPYe6TwYtbf!)<}5aeto#F43AFCG5W% z(P4Sqn(%%XY*ui2S=xAbQ+`*PYW8w-OGdqrQsk6-F0P|9GdWGD!%uQ8SO#TFxI`2K zH{J`BopxDF#4gKrObF&5;H!_$v$JV-!rOA?Z-+|XT`E> zYqHy}@024Q0h7*~<1kNu=hl1Kj@Gk-XSP?aIPD06iz;zZ zbe4?XlY@j5%+5e`gl0X}%(cg@Tq@Y)eO9X$Jah<@b}vU`kxRIX>nyX$lRT}imG zBH;J9dN+Iwln4vI`a}C;39jbfQ@SgpW%U1JTPC6Ot)BeZF`9ttktn)YYQLerLtepI zuh1gu-ucJ@GiNBiTX&wRr*(w5CXFFCYkK%J2}Z)P*x3)>9u$H8HAju@Dq=IaO9!fA zpe>!#dG_A{dbtQ-kcN`xvlg<`mG4%{mad_h8SIg;&sY%F-I1UHH}Yp~u{)|e7p;>s z@4d{Psr{O`2uF&-b7zHE$(l&QtZ$$_YWMB-aemCaJaVdBnvOMqlm8r__g1 z=#}qn^6t>hRLptb`1K-BWo;cQR8eIKDwIOh1o@#W5*`5lq+it>e=ISFkraRAygy%Q zzh{{|%ky26^iGOvNvCyq`ndPRP| zsIf;KpgTV=xzb@rlSAf>adnizI$30ysmmTGtpXony5+>rTg*nBY*Gl)Pcn(uQ$l2x zdene{=ja|mtyCYd7XBL2#K2AHfWX=^7L{$9k z+E+RBceNY(k0;a^&TV}|W$sG_>eRR7KWXf_fQGx67haZ5NljKlLr5n_>tbS!;oIn&+1_S*qh=V0~_vCGwawK0advI{ltO>fIn-}3L4!l|s&_WWi?y2J9u zMU~J~pDG(0@zEKopt0(lA1fJuw5c+Ftpmp;kn-%I#V)H(Urx?jRp*ha<}&gsCf>fy z(u2WQ$B1d9g26EUm|xD7Qf)hW6n%Rjofl;f;V%URh}7n3h4aBFCbW~jY>7z*A>t3I zfE)WGm2z%L;ZQmGjMhAmLNt;wJRp$~sGu!b!G?%IcWa8mXmy6>Z(|Lp;|ICSqXCE2 zG3@Y}B$OlWM`~rK_8;Ea*PT3pr|qP|2JBzG?*rTD-JVFO9PPDIaULrXMYCsOzw2fQ zOWs>J=)JO@i)xTvM4eSoNu*=PPM${D{6%aR7^(U5grZJOgD*sq?Q}7@q%AvVX)%q4 zU(?;|CBUt;>@N*hJo4zUKthdw_XU9TKEah2b80{AR6B)MQW#^>5iHa>&D8dvbzLim}JdK*-S}rGKzGcsaIjjXkt;^59#K z1?LX_B8_^W_9!#02EXhXu#GCp+A2gWhWhy2Ho7>DOKL&dk8FR0ZR)cGag3&c#+1Jj z>dGrA7;|>WiZaPi=mY0Y(hUSOB9=3|<*k58T3XbBFLqBUTU{aB(^w?7PjRJZ*Q)%z zyGIy+C=FA2S+S#}%13e8E?rJ7KR*qcv60_B(fn6hhLik#5SQXj&&i=0cHB_5j;T9_ z$uVqwx2buaX&P=-GYci{qNd2%4rblNeGAzaDnpB)Bk|f%N~>(0-5nspbPlll-6mjL zf8m>W7=cIZ<2~ovyl>+Rj|#6IA5Rio-iVn4NH#}~nEF_RWda>N0mw`M3^Sr8mOu52qrwYg*kDp6-~OQg zn$C%c2ve_{f<`Qm(FRy%XzLPx#e4Dlt7ml4Y?@9AC5g+57TnFB9kp-aQjDyb^UEY) zOx}0)hqPL+AygXlzU@nS)?P&Kf7)=~cMrRL@eQ^Tz8{oNoNuuGPq+O>ru7L%`$Qx2 zJaN2*SM!@wy0I_mEsP8NBE-I>bRRppc6+<;ZzG@&@c%dh-WLokj!RfDus;(2k0ksb z9c-Ysbo*aMB-@GsaBAq7U7rI^;# zk@#gK0+W;k;%mfLYT*D`2KiLl6Xvn^LjCpI1;KR#&64N2GP(hTTNee1)clE9cJX`^tx0~I<-Z$o6Ico$8 z6U@ws*E>gkY=*S}N$t$;Q&qG%`le9luUJRLohPRswuD9$xBAhy`bjoy8_8`=zV})S z6DK{|oTI6R4_~$4K@!bp)VI^qN${u7gB*rPB=HFI3RIOjR?&lZ3m{oNkNK%<^ZUC2 z$EFqPijNII;0jsKMYsziZtT!!}0r{5uq>7=ECF6jx$>lmsV$lJmz@q z^Do4O!-j40jD2F^L!lqU@e`h-sy}G!g`S`buW(f_DSWN@Eh^`UOs$k#vPP3Y`{}V+ z_A;mUNy^0_yYzRg_RUO^O{@_8}Pn6G*3M1H_chrE3ci!0YLq;_sf-^ivGV3pG#QOiCjwD>x=FDM-$7( zCvxITu78bP%6n8yL}TVx=D@}M*b}H>a1bbcPnH4J1)klw@HB+}J`?_`#SA`&lqNw< zIt1zsgl@fSOX;q!`jhTj3f-bNa~NiI*_8QvM&i8Np2pL3k!|f02@T*-HkX}(u?Y{T zSA_*k2)B=9{c;GA6K|(qvoCA7>d$jgwLY>vw(qysy?zj*hF$miCSC7c1)Sey!2--- zg}5!K9~?PK2adQodT+;9Ax77zVRjwkLrzzu#FMra8@>((PonuJcTa^Spmfo|^U~YH z{-@5X0k>8jtLT5bUR+}ye4>jNwZl@_L@Te^vv<)?aU1%XT*wh1eV)SCHpYR?&M?rHYUY?%fyKoOkxE+~*DV`-qUE;0pC*!%# zOaIDGxD<3nZhSbR6n^i#gdC9lm7h4z=_~&iy|d16CXM#~eD|}KKi2ySI^zi+k`tz_A=<2vZ5~iF*F!Pb9`xmuz(y^%*dVJhX z5pKh%ME7QNYx`!Fu;G9LFdkQYJ-cVExnp=k(M`yB50mm`>Lk&H<(IPbb+kLM&{U)y z*?&D-7!3-T=g1^tBu?vSZ=db_=f#FkdHqe7E`o+OqY@7qoeT7xL5YHW>l9ox` z$s6PJr`?=ca$~}RgN1D@K3X8xgc$0N2^DqP#tUKFV5!rhr=7-pt|^Gellqj8H{)?8 zEt5t|Cbfu|GAmxEb_O}hGI%679ONC^IXYyRCzf&>h{tmWf#5lHwUd+mbY13CM-!H; zlbo7|eMSEiO6@PEC$L0u%+zVO1&qR}-sQ%1?bM1jP1r&$JqL`5>^O(u;?Ye4VQZJ} zg{9sUSyg+c&kTkpjdOn(@R5_Kv1L{v@*U>wNOWq(D%;Nh@#ZW&TG__Uk^2Uv9~?qG zASsm+brz&-AXrj>K*++++J#qsGuDgk)m;6FA%p7r{w@04l96D${chMs{xIf;<-boK zfQJI(Z3KSm^Xi79oO`b8xL7g=Q#Ole+Q9cT=d^%dvgcG0Zc#k~L#CV|_oHx!b-!t$ zB>6Q`wFUYthvpJo4c2a)b%b{{l=}CUHQld?hS8m6;B`CxWFouAN6YnO&A;bI1;ACg ze)Mvgrkv>>Yw@AA9;tEPygxZTFR)0gUX&X;O!o2nC!b5(a0aE-ylfST<6HkOXlro7 zQ^2CYn*~Uvi1zI6Q7b$iB}yx_1OJ>0NjfoZF?a35q-`%Jjwll9!Y7>73M;iLLHV3| z0!wKCL|sPD@2;yY_|K1r;MZ_NuOIb*wy@>LH{sS5%+!x|zqZ$tlfzNwn)l6{(fyXu znwlR?Wpq89MHpQwqtD+9cc#aD+ZHw}kR9C_G|oe)XWX9&PLMd}mKRj4O7kaV#IuQz z-90$xmS|1Z|c>$n$iG}oj z2zyyFyz(6RDy*%%NiUH7ahOZ8Ca-m=P;#lZsO6-k-}~`)JKwXd{*70rIRzU=y$*5F zvlHB!EBNPLl~g-Zz^*0SHy!fCqW0VK9^VAai6nvT&QsCfiM>vNqJS6{EoFlQ<`c4liBnG&8FNR zOyl|cX6Dtla9Leib6Yr8#v|+@TbX-)_fd{!67sZN?Om^zGBoo4>k$RGeLV8Me1-7b zor?mk^Kf-)tyPWlmT2OzxhY+@eL)q$ac$v>=(v8^3|othho`$ZSezwpo`=*$B@CpQ zi~WwI#L~i*&<34oWosPJRy3V5#7y|lIPBN>R}Csh`Xm}J7DQ-Pns4KH)+R$GPWePw z6Y!{1!&(#?v9x>IqnAs-=1gXf7Ma~30gJW%2ycOAYHg629EjmW={F45K=F67i1KUC z)i90Ncu2Z(9F3`8ebsR%=#1pxp(QrN0a(A!No~jyem7AnPu~9{wb9v_j%cuvP^2Z8 z}=b`2C^zcb>x9KI~o+#PB@usF%TwCCovW(D0pT2>}z&066%rYdP?7xCudiQByR4e z``MPKlCR2ty}wrX^Y&=sxQiR%5cC9h zKUVEkkqWfgQS@rBBMm1p3J&WpQ_cFnK(tZ@2u`rp)Nf_AO}ZtBmiCOwnJz)1i@!5% zB;ehki%TN$`_UE64p*d*C&rCR)-ORO4p#3yt#=8Tqk~>fn|M}{UeE&>>7D|(DOp=h z*I5AT-XZGf%6P3>$r8a{fv+1=gNz0Y)lXfsMmFQzt|K<2F~+!=DIs+{s$xSlE2Cdr zq|oh3bfr^=K2xjHmmN~$W4#EfC*}oi>D75!X{C>GyW?prpF#fKikBh*4 z=M~=hcO|UjGLt}lxj)QI*A3^WS0~Td)8Q`!G+4fAU>BPKT@GYA%D$d)9*gj}IJoIL zM)P6sQVuo#$0mD%WgpaP{|%*YCj(}VOJ*c;cVNz*A1hW4>|fS=L^FsSEBQqDw6_u9 z^OvuB1U`0)N>ubN$6wv_T1n?JENPjcD4WqP_7uJI!FVJ(rz%DmehPECJtZ}{`ec;kOb*5X{#E^#2WFw#@EEx;7gK|!51TuZ)!7ZH_wq;oM&ZuSEdN}QqT zRAh4Aon;EwFic?;j<#hj^{$X8?pP$wrq%{KNpEvpl;R1y1BrLL5^0iAk{85rm!Og- zQag#2_+yc&Uu&~YuGxfWs_raNc+6K|-GAyzgPXL8O1yZeBhY{$VnbKT)YN&39NnOv zk_RV$b&17+P>=9R#3vSjq?G`Wro|X0S(vrDN`6UEz`CWow(6jTVg|WH9*JcJVCp3* z4A_6vZrhQ2xQZFBz!kY~j4g+a!uP(jobr${^hQ`OI{bx)HqPG(!Oq}~It*sgu4R&w z;UQhbBV*Z(pw7VTV^472GhvfsN*o-UU+W=e?*7!|Wp0bp`r+9_g8(o??UPQ2a)UEB zQou)kxiIQqmijRY^CW%$QL_}#(Dit7nOrcM{9SY#=xoH0vn9B2SLap<{?j>L898xl z94RHi@2s9f4F-)pSs^oB*RyNp1JH{E_FXihiWBUnI`J9jpewT-2V0R&M&K)jAH3{` z);}aS#GFkbyS?Ec767%pDn952GMKfz`Zv)$=TDqDUIUh?!=rThjT2dI3kmon0yEVX zXQ-)wM58UY1pra2Qr8nzNi=vXnzpNri%LP5U>k#$9yO3OhO&(>BWW6jZrbMWO?D=@ zuRy_{-rw0B>O$j&mK-91I|k)8mB>Kh!0#VhLROc7a^oUP1618uI&gmDD@Bu7WaEPy zFdAMh-F$5@7iSzSwP?F5zIst1UR#G#tu@ zJV{R8Ujci3EK}IO5Cw>O5T;i0IB03>U7t%Bty^Gwml9CXJ0AaKt2aV2hi*xW9%6xv ze!i_3nFq$BAyG>{KXgAbwGX}^4{sy2N5uoEKSAcKtgEqI2{@xXev7pd2fRX&4^!7;)b z*6}YA^dBNiiU7wxI6O2u2;x=h_WSj{UErbk;Y->v1rau zWk}09lH=UJ=p)5&MBBvO0u@DY7(qlkVZf48Tmqojvbeu!XC!4Fz9XkH$m!F~2{oN4F&xqF>gmdcz{42&o7=|ihoDO9LA8w?uk6ab9-L;Wl+fVNlz?S0| zVMoo^iYr4~Ty%(om-i-LInQ!Y_*BAUDH)XT3Mv?FQIuc>NgeX^Llui%1C*E=k1%Ta zuj!h5XgU(P%<3BwtLB5Wj2Prb&*G)_v zu%E2nZlv(2=Qj+4FXCJuyA2(__;W#1u|&jx9BFOk@b?0WG~d({TbG}UI*>`Z62(QD z4T-)j`;7IpWiRMQ?Vi$kfmbPo>pSx}~Hgrpbk*c)=XRN<4vP1>Q@(_P5Wlzvr znD-igqm+e2V#z2G0IH0J_b^4AaNRAX_!KMl_;%3wNmM%ZDAPGh$sF*-Sz#P?22~?m zTrVs;_Bx1x*ywkz;cD{Ljm99(*VJ!zi1%w*m5t1QzJs~G+k?NdslS#1ctTK=x0LI4*68xs(VicJUbYgoc zkuVp~7$_t&>x!#KDq!+b+bw%LJhg{1%b@k?eZOtX#_a&yK>?LWSk`5n3cO&-T0ezKl?cV|opA3405w9B*mF#lKN`P5_d z?!b9eVI-Sb(JX*~xEs2utv7nrP*)b1tjt9?TF}6u1N?xQc34X;f(H{DoQe8L?D8T^ zC0_vzg<$&?F9@oc(Zsoy5b1|JlQEcYTSmE^B^e6wbx{gU5+YT*)^8)XLOvyWw zYzQz_*T9k7_DbMDTDhXy^5V9^1N$~1LJ$TRyn8&^+PKzQsqzpoLv+tPCufvHZW)7< z?DjJT0~2+|v?vn%=IU{j>Be+%nn;5xZJ6RlmgNIj2w5{5%YvPHeObn|@UN+BEw5*7 zr+rzqhBByLtmTlO*Qk8)QUT7cf=?_OY3Xh67K2I_7=>e7XawULTGH}xurv^fObeN|zC6n!37VKO9iE5b(fJmo0*riOxx zNQ27&)@{vfFV_ZzsVvz>PV6aqPqM?x)NZ&c+iDDc`lcm)Lvc2R$#kEFYME5h@Ytsb ze2_B7xa48n`Ajl7!J3pYAUp+y)GosCfP^mY3q|85me>yp72;K+2 z`KQ7gj_@lMd{-&OXa3PP)1G<@PL=_;*C*OU&F35(+Jt*PtQeUEhNCf1rCuyjWZzT9 zuLgyP#Z&^2-te@9Z1e`Lzf@K4>8^GGTz4qru^_|>!cwT=4OpJ3_%>~f&?V8nOK2Q50*pU@~ckG5C%Ra-eR zc-rtiLf#PQzYqF?pxbs&`w_C#mK5A%UKRMNu6Vcfj;2pOhA$>|Xe*u>fWHBROh_At z!H6Ap3?O-5Pp4?{t$7#!#FuO9IkOC_b$Twy?x1D=PXYdYD+j`Io4gnjy!0L+^I4x) zJ~ck)dSUFJ-0@>r)~t!Pig#nfrDG9FB(Di7CnKkPLIheU=)*;5c5vE8N}e9fAI6NL zkCH>rY@@0-Cnv6&#Om7M2*CF4pog|zzY7XCR6~H!ns^-+Nz*cT;r4#Q??v&tyd{%sCuN%HG5twQ+u|bgVbrlz* z4uZqZzx|Gn{+?E?S4K21vPR}@Z(I(k%*N6soptgD3nYFs+3XG8zDh?nce@n!Wa$~I zf=5hq9?0YdkGG+?0tppnMS321juelJYhLm+8V~ z8}%j^|-j>W8fNHO$*ph6fpmJKtvLQ7I)a@RKwykMY+O8(Ux}eyt zuM3gx#rP88F;grc2L?t*JkNxQWrs__R5-I?;@gJJ(i=#P@3B#+=p-^xRr@WflV{C7 z1@0K%tH?hx3n)>Iz@`BLnMmOyQYfDg*F4AxMvRP8b*}rC>8sRQ zc{ox>Iriv$OnRLKh-u=LWS##uEFJ9K58Rfs;)$M_*FqI~f58LNMGP0{F|94xu(${7 z2JCcFZEGe`LxrolX|H`BDXytnjGgZ4N2j=1&sR`^B^+0gLE( ztw2;K>AZbP-tHF~d46nHXcaGfn(P2333#sz%44XtdwK#HYGYjHUC97#y$&Z>G%Dt# zn>C%GQDa(gi4J>pLn<&RZ01ufmoMgvg~WP*)Rg;+Ei8mdLi=lhap?;u=2XO zMJL#_eM-Qlt(l0x5>UypaN6eY42^F6ZXx5WE6)rB z!293gF;}M_r9Ae&t;BY8r^=O_t%mPf23eR4P?fr+9(+pzcTqe^t6toSm5_2V;*xa#VGf)K>9=P z-3EboR#!dS7_rkZd_{FF;(9;AUeI0J$UKYu@8s}U36W*G83_gw$-8d%(>nsM?lhX> zG*WunO{84Wh$ga75*@bUIMfgj*wOSu8C9W$A_09W$uaU&x5@mwlsY9wdcNukh*xF+^u|R{P`lR z@WUfx>>xV4;qkQuG$so(6s<~BE`hkojt~-+f>7YZrXm4+#=A~z^5oAQ;~*r7X8>e= z`M-?v@e40~i}>@(-xfQ+9=?(HhOPL71Ny5d)g>b4-<>lKV8V7lQ-;P9*t`JlkpOyX zk%$`v$9^P)jOz7(alCWN1c5>yoHPgEcAi&6{XqAOXCwdF-7#TIgjDg z0n8vGH||Z4Z#dodVhav9^siOsP%%MKS{E~G!g&&?*S6q03R&GU>hX`YI<^u_qGI44W#xw9nZ0rHbS#Etuk^?tlw>w4QbU)8L@zU;vaij9C z#8rmiKZDyVad|eS)^l&JgvdV4A0zSxd5trghKDm_sFX&d^|>T{^@b51*Tt_YU_^93 z@a7X}fx9#m&=DCZg3u!TPbGf0c@ShSm+er$dGa@k=w(E1W;Ac-HSv^@7kytaCbVb^ z6*zJl&oCxyc(@(K3nZu@Yf{f4$CTYg&18xEADwRSaus+#4htNx_B#@a7bK|NYY7Po zx>{(F;--(6Mh0eBP0gPAKzc9O@&HjZX?FDt@$Lx!+J zhmF%~h^}zD{HIZmpFLX@OwnR{A|Ng|Q6-T*heUf)G+sy$*SnB^N~V3Y5p&OXj1(OW zWQ4(83&YQ}-<2;Wg)8l*L*5F0_G>SOd&K=^@t!gmF5S&y6_s+R8N}^(WhitkDH(nm z!24BS3^NcU=m*k360&!RKX2TK#=Q=Hys682@a?3z&XdO1&AyMyE{-qo}pLsKJ1@R6S+b(qr}L(X^E2WAs#7X zan$LInyi08y7|D5qL8mVWX;Hb2E|8!MNMWTb{y^)zZ9Oa$_Ujtn&x5{VbI5HwcTf{!8jxNmVaun%oGcPI#|FMIm&k4I9$jk*q#`Z+Nm~ z4~WMuH2llt_7Ueu&pwyv2#>eoPIWL!@(uh(sNYCWT1hz`GjUVS3-Dtc7%~SyD4aEW zEY_hHA0fZ@HvV0L( zn|M)9$9L8dtASCo{6>>q_@FC z6gC>dWRHZC(|!~J0&w+es6<|X4Pqsk-qMCl;@CtkB>fm-?f= ztbpK+J#*2mJQ$byPFcd_v?*~L?kV@skUmj#W*@ulyxLcmg7qF+SnNNMQNhm;K9+kJ zSQ$Zyans%~2xEenGL}&A)~=JU>GRtM>(tDfBEJ*O$T^|6+Ff6G5IO)Ti?r!bO7MNv9TjGVG#7zjp_Mk59*kj(+eUvn=>yI6Vgk4>5qLlP+V6G;@8UIX z*v!#VyAM|dV#T^eo-_eBa9NRV22jn;{d`VfC;fc_vtcIEXHe6#@aLW$sp4dod1Ex~##E%1+!?B95gCDFG(8hy!#{xG_b2Qx%gkIT5y~kv zQJ-F$BQ9-2%x1j*l3hiy#E&t*_u%L^YAU{DV=gzPKg5yB&+b}@+$d?-gZV5%85JF} z_1Zk!KNu@;V+j~Cmi3?3^gF#UR!7^j^YQto+(iiaf~cogs42}a^kha!+##r6*Hrol z5LO%sjDwmJBl3WEe&f#e1Ir3;;hcXI;xF`6M#;u3?){igP0m9R;?)U`Nbs~@mrDsP zV*XUp2AY454&bttD8+&C!|#5#4ogvr+nPDkJWXi``VfFzEP}XwggFAi;fBi{a$42ugi9l9=KM zVQEYW53HC{lT_mff%*P*PpCbWq45JK)sTI2^z&oI$O13{4T-wZe66K!OS!)?+)Ub_ zuPp5Hq#0CS^Tx+a;{;5-v%GtszNSbZN!A8;j(;LHhMpYtA7W$Ei5d(JzFEk>O`X$t zZ`dqps=Qlqm4#iCU0Qg12~Cc*B=~*Q4`{$pv0cxc@o<3p;fzF{MC9lw?t>3C9lTS{ zx}CVnhniWtpm6L?7xXl*eRDT&)@rXiza8%^Iv7yWqf6rmpGPuqv~d#N|K|R;Y;IB2 zCa-X&IZjTTC`BquZa57$K56-R`DyyUyA0&`YeHD@`vTWwiXKNY8?yQ)^J3E#9fF{9n&HKi_JJ~E>x6#jwySL`|WM4x5g4Mp< zn6UjtnODqBex|Z*kNfUfVdW?kJG|TH(DWlfl;@#BTX==&IsxzUX>Zp&6)A2{6kCI6 z_b^g>p&om;3|6o9cs3~B{>94A z^Fc>9`!%$a2CwwK7Q%>^c8 zyWRaOO1t|m>N4g8-?3OL!#oyw6$9g|UQ>EMVHg86=Wp%QW_Dcyy3rXGt<>fs^RgU7 z16nfN9oM)-XNr(-*8H{)^bu~Q(M^jSQWSe<0Rv@82}f#T1@ct?RdfM$85MY5{;_#( zQ>K0~6r87|&#@(s90zlYP3V1?4xqdI`s4ASQGkiVOTW~UPH&|&l3~AY@?i>v>yjDt zCH0>s>5R6{yQGS^Pw2OF_%<2c5y^TnCXQnxB)JV?lI0$q^&s94(~!wLIdw)d`LC;- zGAd+gt0 zk)$+)BAw-8YO|pZpRAX+odMDijP2-iOdYO~r@-QO$}gpDwaGYZfqu5HaJ%ps(m5Hc~JCA8sJO+-+Y+_{0m%$@vixWsq=d3)^Psh+* z|NZ|%Kt$8gux&;St%soKL?`v&A8scE?}G>VC{u1YKsTu0C7dH|4Ua&UlGJdMPy|Hs+yPb_@&umJmI`BSfW!@mI_R{ z8LV;|=#Vw=wR0GJVv;$5@;^u-Ffh&|oS{%D4o&^v{J$QsRqA)BtP_Av7LJe? ztAaI+#i{)*1>?-mohfXUb?d9Epgq#|N2f<640`FyI?V-Jh0auu`%9JT_DcxG34#b_ zDiAs{=+0;>`f@7i&Q>nIoC4byIxcW~U{xsYDFAe?Qtm4uu z9K+k5rN%6D%$RjW?nK1w#QV|(zb$E4ie#HUxg3~>EiVw=2V-wj zP`gE0xY1?D$pjel_KF}MYw~p|9J73>kjs9fty<(0Od_sT0tsUSWWImO^;r(V%`k%} ze*aBk%wJb?T4vnf!}gKWr|HWaiWtaZEah>>z^)=DqnjCucr|X$+o@!wD>W}?#5v8X zOE)R{3xk|oZlGJX;@@9%f|aO?Rin!gpMH2fS3ay>kyEd?zKnE+yGk!tL*S_&(Xdgs z(aXPRDY|NR#Nn7jtG<{tSb*$0KuJ^h#A2hqRYn)ae8VZ_(le_;pt)Fu~ z)~-($*eH2gY7-;ps2dbDJ5-u?leTPH$F9w=&@yQ1&yK@hB`Hvfa}4_ab0Zd~ZpHQB zwlQLImRu+dCy;OQK8j$Te29Om9(P=ON?a&~_(awki$R(IXk;As8PPu`GcrJZn(-N7 zKUO?V@iQK(Cd(t8h54s4*I9(*cz10den9-jp(()xn;8`qT5lt0O32; z9D20BW9bU8CS55O9>yt@!63+SlB$&(RwxNNkcH=|f>&80ERdmQ8I;d-=k#Ni_&#=I4 z#yac66mY_;tTpM)?Ss-H%3)-lRdTo@Ah_sIe3%Cqj@Xk0`%F09GQAM5B1Bay799yx zFNodnLFi3a9tEWo*jCWDH#Zg_B0YamkH+l^G(=q7)R_$u1Z61r0@4D65<5xpy|cui!v{WXfxVxd4=o{HS0*r2>~0E~1EO zZe*KifR|#~^b6}G2dKuE>g5G|NKOQTh1mPtv0yx!D_(^EzA>^tZV~6h(ih+&RVpyt zA97rW)h^prm_HBn`6F?kNhOx#dMqH$Oj_>hwcDThK(3>UHh;Q`wss-YN!RQ8n3c%l zgsTjiD)jnqxz2Ey-n-IvT)c|MI>ei~tNls9$Mff)m(s!}6;bxry+Q2v?h(pvsx&4T zrsy)2%RWzX(|Tt4nRJpx7d#s6uE0ZjYn?0qP86xYgMhvhWlb&wEK=YZl7ANw9d$oP zUcs`5561`iN`c99?a}tS^KoV`F%7_MrKT5lg1%Lg6i&g{QChkb1xN;W9|s&>p(2a^uZf(r)@wj|{_!G?qR z`1i^5$BIpzHX_v;rpCHR!5Wvhnbak9s&*D+F~e~|!dz5!?ij8%@Dow>0K{6HJjor{F50yy+1wkz)I_is}Lov!1 zqU$|Y!zN5-QQsN2!zSiw;rg+$ng^TFoM;6K~v<53jpuI{kG{uP-Vlr~& zVfEXy=i@j=po0;Z=n4Qy{gQ@(QRI(FoHa+z&en+g2bG@?5Nn_1W!T5*wFLw()2 zlzDs|&i$?J)L)Kh5*?9aS)!*kwD!!_8=p(Bx5jk$&NPNDc#D1z4HfUp(jy!Ue!P~` z?q}^Kzn`1lS-d-#^TMIMt?m=HFRa<(1I$!bfce12p*$WFYreWL^_D;Qs<1vXxUafe z0g~r>5@Pb~if;C-K*Q&Eg~>_35hTy`2tfuPyk}rt{kARF%AK~L)uT8Ux?!H5uGlu+ zD&?pJD=j^iV7ASf3sc%qE|uQie1lYM-+Xx@#yTgU38oFwFJ!ban4PjPsEM{q2?}+= z=&Q7Xm9DBRcLg6_OYv!}M6Z?LeHt13%mBYbuc0JoCws#iNdppI0)!+VD$W|iJ-OC_ z&^1swnrZaIp;A=rj0D2=T9M!WcAG*k5iqC^x#HPSmfVN5MLc6LpM$s8;8UBJ z9bx5M%p1e)bv!KLAw&JIlMO562vx(?=kolLbTvEI7u^6$5W}4C3}qO7*DHcYwe>;= z2otk`I?9>zcx5<6-<{QsJ*^-50H@hu?BU*G0nLdBwy~xC*4BZq4H~X)G6(O%72pYm zA~<-FJ~CC0FY;QFw|0fmO-%&Z$t{)JusyeW!=(P&n;(F4#g;LmczLeB{8DM()UO1S zkOi=o2w?5h=Tc;B+hdQDkdK&Cgb1UHKym=QKb6N+1b)!~?BvRRiq{mo)*j=!P#7E? zI45mxX6ogCdBUQRk;uQyuE*r7&6L8ON|7}GOMwFyMQqWue(J#j5*v^fFuAAhACmpi?_}mBm!t&ge{|(=3WJb8ARLcGw6jr29^Pt(*_DtJ0+zBpqF#5%PT%< z59RK_5QiQNkddgy0110o5 WZTN5ca8mv^eTXQg1=%H?{4)4p0C6iP%&KSdBuPH< zThd{DetDt6_wgkUWqbO`o;-66(Cm9ifsoGj<>BsdlAR*)Y6W^}2rxG~mLM|eEEE1HxylCw7sX-s=J5pA$9Jj$uXB2Pv z8r?3~_DLzyClT-vyIBncS={YqH#SAaeqQkWCD!-ez+hnLC?4uf%a-*meSNwsUZ)76 zKY<{xRDiTFHcIfQ`vc6<_J~E%QBFwwykrwG`sxXtaQj`3N>#e7{X&zKNqe4cP8efj zg?w~2y~odHMK%6#a%Q+o5Li6DvtuPBzW=HL?)&m5u}9yxjMT(~CGKkR4vClnW!WRT zbbbuF|5_&MWJA*PcAtjs;)K5h?Su336+|1H0i+fnL>Q6>{~#_UR)g6$f}6bz=0IdO z2Xe>s4+|AR&in6sWHOT+T1$@k=`R@C#hBU%fe90$HXROMey>kgI9AYQMmViT(P0OQ z%+INph%kbO!0SvHaP>>lKzX?nL?WKdWz;P835I6`uvyCy2%onrvUon};MPWaB0vh9 zt${=*X~r>QIA<}y*Ht5PR0y=VCQJM(1d#lbT5idbGK7mgiZ?fwx0Qs1OAf3)>a(ZD zfqMctJGbi!W(mu+#JbSTxm6H+;G-(d_bQCl48jw-Ms%&YblED512?w@f@hiL?bQ1{ z+PwEfWN*T@t7N}kZ(dN>W*4VeF>q7!Q}AMeh=16ShT>;3aw>RHc9hT?4md7S6Tss+ zaY&^Ex)iW>7f8$J0BhG7%@UPi52738j#$f1|D!ouN6XP2m7SC&xfaa50^bMjJC+B! zEe+ZXxXkZUCt9WMgNHy1CtQWzUDonqfFpXQi!SHZC<27MKkb09F=yGIme)H~g#d1> zbIzY$rYO$_)k59-E1g!FjaVNqv;(-8fiiVnzCMw{jtmMI0rHUKRELL;J%TY&1m(G z=BJE5J?SB3^-W*kGuC)6>8RIHhIEmWY?CVwMUGD*I%SW)(VK5BmOU35 zUXa*rX~}QF+=)1CuEq=mevT`rx3GwwQ{ zZ0z}@lFd{(pw|ssFD7U8`tQ)&D#F@&S`>8Q`c-(bd|8IIpPXku6u@7Ic|TMTxzCx3 zcGi{PwTN1HTjbM}%~ede4^4Krg<;|Xyr)OZ=t2EcZ;Jpn8Fy6Mo*5fC%8&m`k1{wm zI1%lNGkjlZo+|n4a;EBzF#<1XS;yq;=EZ(5y}&xMH-Wv{_*Gi|g&9axiagG9Hd!5> zfnpgE9f@+E?GCDRuxRVflaaGm>wo1?ck0QPq%e$YOZdQ@@=@Zq(M0)j#~wb=P|Z

HCJb)_2Yzay)&zD znv|F;bsQhe3A>&R&vAJ$Q^ZZQaj-$1gfQ&H&{gx12ra0ADQ%cE25^R3b3^hObsz+| zS0dx)DFUa-5zVTUHtWg{@u0fuc^G}F>Tg$&V+*-O>;@tTD%ZZus%tex_G7tKrMRok&&yA+v_$+o3_LzzQ zaMnd0(P-rpC}71Xx|;`{aRCUX$K!w-Y3Yvgz}Kl98w&P1rQ`NVNrl$i`GyK@_|;YS z*S8|7!u zpCXud{`Tg&Bu46@K(^ekMS*MEuD|J)43xd7{-OUHq;-PMpMOX#kqGAgYqTR^o|NkL~s{kwBT}#K0{574gECshtt#J;zELXf5q_n ze~lmRtBCT5JrMpd2JDHI5@K-&$kJ|t@&5dzFy2vkbjt^IxV4*FrPg&rw|RJHY!v;rDB}FvxC78eKPTOETt4k<2UT zT;;~(i1kNE@v<^V&EH&e_lxkf?o&{9ofc9#Vv-lwNVT-`&lbBS_I6)385&B|)q9`5 z*;kn@@hqGP;&gn%Q>-wR^|EFsCs$#9em$UfsQVi6NmGa#21fp3)*+|xpOO3L?P$O9 z+p)Z#e=LE8*&=VGkbEo!*{K+gk>qxG#l*s_YD`% z6uw2mwy4|JSg_C6rWfLU8BGSl`BcvCeDXFQ4EpFUIwBqZDH9Rn50_*sZ|pno|7w^; z1xy|@nN%|w))5nyQ&Htgnu0jG22ecL25BjPu7EUmW4xH5Z*x!<7gjt zr)-bCdUkJ5&E@dHQ)Aji$qbgCj_!72*MlYQJoET=kdSusQ2oJyFdw3U%Hc8tLap+ZeOkH;DFf=P%~|}8t^vP$Telou;<3$%MZ|&q-PD7fA6FL zlTTBup^<34os_05lv&miImt^!ojul-&{8|oCX+72OR+`4+R5yec#h(M&XiHRikD}{ z^`v)oNFx{Q*&?;oX)#$#db9hxtHlDJ;T$F@ca#qlLQE%yi!q;iYJwo{E*}VuPCc8x z?U>qr|8s)f!E+MR;KhLug+2L^?V+5z*7m-V*KaPbSJn1nFU!_q8o~<}H&$g}j+hrV zTv-mg+k??QpSOSF>r1|RUumAzU#3WdbLV2>(V`4`t&%}l^u|$A&quM@_gbS?+Tw? zDO$O5J!9e(+T4wlrdi-P?%ham<>FwUB5vHlgkI#YAB64?IQfMKCC2jV5s`zG(d|R3 zdPrhziSCRJ4NcQodO&gP*l})}fAm?g3&p>bS1*^I#%h#6sA^+nC8x2GCEVC=C4AK8 z&63l{-eDh=NKzZr(|Ag`vA0U8GOpC`jw>C*@|A+At*FwgzYk)6luG?`x(exky<$kR z)T5;&)ss{myI%@-*d-G5I<@uxDri(uyMG_KO#e#U{b{`x{GAn#7SxP}hWg_B_b0%o zXsjPu(uUge|4XN^{Bh2*Jq?Y&8yb!D@$jb#=>60CKT3OzM(xe#0A)5=IvN_#AHU?o uu9C%dsJ;LH*fRfd&JzzB8W&$5w3`q5sB?Ni&X0zM19-Xt9g>Twt^We%H{!hj