From 19836c17e2180b1b0b729824bf6da1383b76b6fb Mon Sep 17 00:00:00 2001 From: Vladislave Date: Sat, 4 May 2024 00:40:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20=E2=84=965?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectBomber/Entities/EntityAirBomber.cs | 5 + .../ProjectBomber/Entities/EntityPlane.cs | 5 + .../ProjectBomber/FormCarConfig.Designer.cs | 359 ++++++++++++++++++ ProjectBomber/ProjectBomber/FormCarConfig.cs | 167 ++++++++ .../ProjectBomber/FormCarConfig.resx | 120 ++++++ .../FormPlaneCollection.Designer.cs | 13 - .../ProjectBomber/FormPlaneCollection.cs | 53 +-- ProjectBomber/ProjectBomber/PlaneDelegate.cs | 9 + КУРСАЧ.docx | Bin 0 -> 16838 bytes 9 files changed, 678 insertions(+), 53 deletions(-) create mode 100644 ProjectBomber/ProjectBomber/FormCarConfig.Designer.cs create mode 100644 ProjectBomber/ProjectBomber/FormCarConfig.cs create mode 100644 ProjectBomber/ProjectBomber/FormCarConfig.resx create mode 100644 ProjectBomber/ProjectBomber/PlaneDelegate.cs create mode 100644 КУРСАЧ.docx diff --git a/ProjectBomber/ProjectBomber/Entities/EntityAirBomber.cs b/ProjectBomber/ProjectBomber/Entities/EntityAirBomber.cs index 4c514f4..7de84a5 100644 --- a/ProjectBomber/ProjectBomber/Entities/EntityAirBomber.cs +++ b/ProjectBomber/ProjectBomber/Entities/EntityAirBomber.cs @@ -10,6 +10,11 @@ public class EntityAirBomber : EntityPlane /// public Color AdditionalColor { get; private set; } + public void SetAdditionalColor(Color color) + { + AdditionalColor = color; + } + /// /// наличие двигателя /// diff --git a/ProjectBomber/ProjectBomber/Entities/EntityPlane.cs b/ProjectBomber/ProjectBomber/Entities/EntityPlane.cs index 8e60d5b..bf3d6af 100644 --- a/ProjectBomber/ProjectBomber/Entities/EntityPlane.cs +++ b/ProjectBomber/ProjectBomber/Entities/EntityPlane.cs @@ -23,6 +23,11 @@ public class EntityPlane /// Основной цвет /// public Color BodyColor { get; private set; } + + public void setBodyColor(Color color) + { + BodyColor = color; + } /// /// Шаг перемещения автомобиля /// diff --git a/ProjectBomber/ProjectBomber/FormCarConfig.Designer.cs b/ProjectBomber/ProjectBomber/FormCarConfig.Designer.cs new file mode 100644 index 0000000..55bedea --- /dev/null +++ b/ProjectBomber/ProjectBomber/FormCarConfig.Designer.cs @@ -0,0 +1,359 @@ +namespace ProjectAirBomber +{ + partial class FormCarConfig + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + groupBoxConfig = new GroupBox(); + groupBoxColors = new GroupBox(); + panelPurple = new Panel(); + panelBlack = new Panel(); + panelGray = new Panel(); + panelWhite = new Panel(); + panelYellow = new Panel(); + panelBlue = new Panel(); + panelGreen = new Panel(); + panelRed = new Panel(); + checkBoxBomb = new CheckBox(); + checkBoxEngine = new CheckBox(); + numericUpDownWeight = new NumericUpDown(); + labelWeight = new Label(); + numericUpDownSpeed = new NumericUpDown(); + labelSpeed = new Label(); + labelModificObject = new Label(); + labelSimpleObject = new Label(); + pictureBoxObject = new PictureBox(); + buttonAdd = new Button(); + buttonCancel = new Button(); + panelObject = new Panel(); + labelAditionalColor = new Label(); + labelBodyColor = new Label(); + groupBoxConfig.SuspendLayout(); + groupBoxColors.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)numericUpDownWeight).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownSpeed).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxObject).BeginInit(); + panelObject.SuspendLayout(); + SuspendLayout(); + // + // groupBoxConfig + // + groupBoxConfig.Controls.Add(groupBoxColors); + groupBoxConfig.Controls.Add(checkBoxBomb); + groupBoxConfig.Controls.Add(checkBoxEngine); + groupBoxConfig.Controls.Add(numericUpDownWeight); + groupBoxConfig.Controls.Add(labelWeight); + groupBoxConfig.Controls.Add(numericUpDownSpeed); + groupBoxConfig.Controls.Add(labelSpeed); + groupBoxConfig.Controls.Add(labelModificObject); + groupBoxConfig.Controls.Add(labelSimpleObject); + groupBoxConfig.Dock = DockStyle.Left; + groupBoxConfig.Location = new Point(0, 0); + groupBoxConfig.Name = "groupBoxConfig"; + groupBoxConfig.Size = new Size(667, 318); + groupBoxConfig.TabIndex = 0; + groupBoxConfig.TabStop = false; + groupBoxConfig.Text = "Параметры"; + // + // groupBoxColors + // + groupBoxColors.Controls.Add(panelPurple); + groupBoxColors.Controls.Add(panelBlack); + groupBoxColors.Controls.Add(panelGray); + groupBoxColors.Controls.Add(panelWhite); + groupBoxColors.Controls.Add(panelYellow); + groupBoxColors.Controls.Add(panelBlue); + groupBoxColors.Controls.Add(panelGreen); + groupBoxColors.Controls.Add(panelRed); + groupBoxColors.Location = new Point(338, 12); + groupBoxColors.Name = "groupBoxColors"; + groupBoxColors.Size = new Size(314, 152); + groupBoxColors.TabIndex = 8; + groupBoxColors.TabStop = false; + groupBoxColors.Text = "Цвета:"; + // + // panelPurple + // + panelPurple.BackColor = Color.Purple; + panelPurple.Location = new Point(230, 80); + panelPurple.Name = "panelPurple"; + panelPurple.Size = new Size(49, 48); + panelPurple.TabIndex = 1; + // + // panelBlack + // + panelBlack.BackColor = Color.Black; + panelBlack.Location = new Point(157, 80); + panelBlack.Name = "panelBlack"; + panelBlack.Size = new Size(49, 48); + panelBlack.TabIndex = 1; + // + // panelGray + // + panelGray.BackColor = Color.Gray; + panelGray.Location = new Point(80, 80); + panelGray.Name = "panelGray"; + panelGray.Size = new Size(49, 48); + panelGray.TabIndex = 1; + // + // panelWhite + // + panelWhite.BackColor = Color.White; + panelWhite.Location = new Point(6, 80); + panelWhite.Name = "panelWhite"; + panelWhite.Size = new Size(49, 48); + panelWhite.TabIndex = 1; + // + // panelYellow + // + panelYellow.BackColor = Color.Yellow; + panelYellow.Location = new Point(230, 26); + panelYellow.Name = "panelYellow"; + panelYellow.Size = new Size(49, 48); + panelYellow.TabIndex = 1; + // + // panelBlue + // + panelBlue.BackColor = Color.Blue; + panelBlue.Location = new Point(157, 26); + panelBlue.Name = "panelBlue"; + panelBlue.Size = new Size(49, 48); + panelBlue.TabIndex = 1; + // + // panelGreen + // + panelGreen.BackColor = Color.Green; + panelGreen.Location = new Point(80, 26); + panelGreen.Name = "panelGreen"; + panelGreen.Size = new Size(49, 48); + panelGreen.TabIndex = 1; + // + // panelRed + // + panelRed.BackColor = Color.Red; + panelRed.Location = new Point(6, 26); + panelRed.Name = "panelRed"; + panelRed.Size = new Size(49, 48); + panelRed.TabIndex = 0; + // + // checkBoxBomb + // + checkBoxBomb.AutoSize = true; + checkBoxBomb.Location = new Point(6, 177); + checkBoxBomb.Name = "checkBoxBomb"; + checkBoxBomb.Size = new Size(132, 24); + checkBoxBomb.TabIndex = 7; + checkBoxBomb.Text = "наличие бомб"; + checkBoxBomb.UseVisualStyleBackColor = true; + // + // checkBoxEngine + // + checkBoxEngine.AutoSize = true; + checkBoxEngine.Location = new Point(6, 116); + checkBoxEngine.Name = "checkBoxEngine"; + checkBoxEngine.Size = new Size(163, 24); + checkBoxEngine.TabIndex = 6; + checkBoxEngine.Text = "наличие двигателя"; + checkBoxEngine.UseVisualStyleBackColor = true; + // + // numericUpDownWeight + // + numericUpDownWeight.Location = new Point(48, 68); + numericUpDownWeight.Maximum = new decimal(new int[] { 1000, 0, 0, 0 }); + numericUpDownWeight.Minimum = new decimal(new int[] { 100, 0, 0, 0 }); + numericUpDownWeight.Name = "numericUpDownWeight"; + numericUpDownWeight.Size = new Size(75, 27); + numericUpDownWeight.TabIndex = 5; + numericUpDownWeight.Value = new decimal(new int[] { 100, 0, 0, 0 }); + // + // labelWeight + // + labelWeight.AutoSize = true; + labelWeight.Location = new Point(6, 70); + labelWeight.Name = "labelWeight"; + labelWeight.Size = new Size(36, 20); + labelWeight.TabIndex = 4; + labelWeight.Text = "Вес:"; + // + // numericUpDownSpeed + // + numericUpDownSpeed.Location = new Point(88, 35); + numericUpDownSpeed.Maximum = new decimal(new int[] { 1000, 0, 0, 0 }); + numericUpDownSpeed.Minimum = new decimal(new int[] { 100, 0, 0, 0 }); + numericUpDownSpeed.Name = "numericUpDownSpeed"; + numericUpDownSpeed.Size = new Size(80, 27); + numericUpDownSpeed.TabIndex = 3; + numericUpDownSpeed.Value = new decimal(new int[] { 100, 0, 0, 0 }); + // + // labelSpeed + // + labelSpeed.AutoSize = true; + labelSpeed.Location = new Point(6, 35); + labelSpeed.Name = "labelSpeed"; + labelSpeed.Size = new Size(76, 20); + labelSpeed.TabIndex = 2; + labelSpeed.Text = "Скорость:"; + // + // labelModificObject + // + labelModificObject.BorderStyle = BorderStyle.FixedSingle; + labelModificObject.Location = new Point(495, 177); + labelModificObject.Name = "labelModificObject"; + labelModificObject.Size = new Size(135, 54); + labelModificObject.TabIndex = 1; + labelModificObject.Text = "Продвинутый"; + labelModificObject.TextAlign = ContentAlignment.MiddleCenter; + labelModificObject.MouseDown += LabelObject_MouseDown; + // + // labelSimpleObject + // + labelSimpleObject.BorderStyle = BorderStyle.FixedSingle; + labelSimpleObject.Location = new Point(344, 177); + labelSimpleObject.Name = "labelSimpleObject"; + labelSimpleObject.Size = new Size(135, 54); + labelSimpleObject.TabIndex = 0; + labelSimpleObject.Text = "Простой"; + labelSimpleObject.TextAlign = ContentAlignment.MiddleCenter; + labelSimpleObject.MouseDown += LabelObject_MouseDown; + // + // pictureBoxObject + // + pictureBoxObject.Location = new Point(26, 58); + pictureBoxObject.Name = "pictureBoxObject"; + pictureBoxObject.Size = new Size(293, 177); + pictureBoxObject.TabIndex = 1; + pictureBoxObject.TabStop = false; + pictureBoxObject.DragDrop += LabelBodyColor_DragDrop; + pictureBoxObject.DragEnter += LabelBodyColor_DragEnter; + // + // buttonAdd + // + buttonAdd.Location = new Point(686, 267); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(94, 29); + buttonAdd.TabIndex = 2; + buttonAdd.Text = "Добавить"; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // buttonCancel + // + buttonCancel.Location = new Point(885, 277); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(94, 29); + buttonCancel.TabIndex = 3; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + // + // panelObject + // + panelObject.AllowDrop = true; + panelObject.Controls.Add(labelAditionalColor); + panelObject.Controls.Add(labelBodyColor); + panelObject.Controls.Add(pictureBoxObject); + panelObject.Location = new Point(673, 12); + panelObject.Name = "panelObject"; + panelObject.Size = new Size(344, 238); + panelObject.TabIndex = 4; + panelObject.DragDrop += PanelObject_DragDrop; + panelObject.DragEnter += PanelObject_DragEnter; + // + // labelAditionalColor + // + labelAditionalColor.AllowDrop = true; + labelAditionalColor.BorderStyle = BorderStyle.FixedSingle; + labelAditionalColor.Location = new Point(238, 15); + labelAditionalColor.Name = "labelAditionalColor"; + labelAditionalColor.Size = new Size(81, 35); + labelAditionalColor.TabIndex = 10; + labelAditionalColor.Text = "Доп. Цвет"; + labelAditionalColor.TextAlign = ContentAlignment.MiddleCenter; + labelAditionalColor.DragDrop += LabelAdditionalColor_DragDrop; + labelAditionalColor.DragEnter += LabelAdditionalColor_DragEnter; + // + // labelBodyColor + // + labelBodyColor.AllowDrop = true; + labelBodyColor.BorderStyle = BorderStyle.FixedSingle; + labelBodyColor.Location = new Point(26, 18); + labelBodyColor.Name = "labelBodyColor"; + labelBodyColor.Size = new Size(81, 35); + labelBodyColor.TabIndex = 9; + labelBodyColor.Text = "Цвет"; + labelBodyColor.TextAlign = ContentAlignment.MiddleCenter; + labelBodyColor.DragDrop += LabelBodyColor_DragDrop; + labelBodyColor.DragEnter += LabelBodyColor_DragEnter; + // + // FormCarConfig + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1039, 318); + Controls.Add(panelObject); + Controls.Add(buttonCancel); + Controls.Add(buttonAdd); + Controls.Add(groupBoxConfig); + Name = "FormCarConfig"; + Text = "Создание объекта"; + groupBoxConfig.ResumeLayout(false); + groupBoxConfig.PerformLayout(); + groupBoxColors.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)numericUpDownWeight).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownSpeed).EndInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxObject).EndInit(); + panelObject.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private GroupBox groupBoxConfig; + private Label labelSimpleObject; + private NumericUpDown numericUpDownSpeed; + private Label labelSpeed; + private Label labelModificObject; + private NumericUpDown numericUpDownWeight; + private Label labelWeight; + private CheckBox checkBoxEngine; + private CheckBox checkBoxBomb; + private GroupBox groupBoxColors; + private Panel panelPurple; + private Panel panelBlack; + private Panel panelGray; + private Panel panelWhite; + private Panel panelYellow; + private Panel panelBlue; + private Panel panelGreen; + private Panel panelRed; + private PictureBox pictureBoxObject; + private Button buttonAdd; + private Button buttonCancel; + private Panel panelObject; + private Label labelAditionalColor; + private Label labelBodyColor; + } +} \ No newline at end of file diff --git a/ProjectBomber/ProjectBomber/FormCarConfig.cs b/ProjectBomber/ProjectBomber/FormCarConfig.cs new file mode 100644 index 0000000..a4265a4 --- /dev/null +++ b/ProjectBomber/ProjectBomber/FormCarConfig.cs @@ -0,0 +1,167 @@ +using ProjectAirBomber.Drawnings; +using ProjectAirBomber.Entities; +using System.Windows.Forms; + + +namespace ProjectAirBomber +{ + public partial class FormCarConfig : Form + { + /// + /// Объект - прорисовка автомобиля + /// + private DrawningPlane? _plane; + + /// + /// Событие для передачи объекта + /// + private event Action? PlaneDelegate; + + /// + /// конструктор + /// + public FormCarConfig() + { + InitializeComponent(); + panelRed.MouseDown += Panel_MouseDown; + panelGreen.MouseDown += Panel_MouseDown; + panelBlue.MouseDown += Panel_MouseDown; + panelYellow.MouseDown += Panel_MouseDown; + panelWhite.MouseDown += Panel_MouseDown; + panelGray.MouseDown += Panel_MouseDown; + panelBlack.MouseDown += Panel_MouseDown; + panelPurple.MouseDown += Panel_MouseDown; + // TODO buttonCancel.Click привязать анонимный метод через lambda с закрытием формы + buttonCancel.Click += (sender, e) => Close(); + } + /// + /// Привязка внешнего метода к событию + /// + /// + public void AddEvent(Action planeDelegate) + { + PlaneDelegate += planeDelegate; + } + + private void Panel_MouseDown(object? sender, MouseEventArgs e) + { + (sender as Control)?.DoDragDrop((sender as Control).BackColor, DragDropEffects.Move | DragDropEffects.Copy); + + // TODO отправка цвета в Drag&Drop + } + + // TODO Реализовать логику смены цветов: основного и дополнительного (для продвинутого объекта) + + + private void LabelBodyColor_DragEnter(object sender, DragEventArgs e) + { + if (e.Data.GetDataPresent(typeof(Color))) + { + e.Effect = DragDropEffects.Copy; + } + else + { + e.Effect = DragDropEffects.None; + } + } + private void LabelBodyColor_DragDrop(object sender, DragEventArgs e) + { + if (_plane != null) + { + _plane.EntityPlane.setBodyColor((Color)e.Data.GetData(typeof(Color))); + DrawObject(); + } + } + + private void LabelAdditionalColor_DragEnter(object sender, DragEventArgs e) + { + if (_plane is DrawningPlane) + { + if (e.Data.GetDataPresent(typeof(Color))) + { + e.Effect = DragDropEffects.Copy; + } + else + { + e.Effect = DragDropEffects.None; + } + } + } + + private void LabelAdditionalColor_DragDrop(object sender, DragEventArgs e) + { + if (_plane.EntityPlane is EntityAirBomber _airBomber) + { + _airBomber.SetAdditionalColor((Color)e.Data.GetData(typeof(Color))); + } + DrawObject(); + } + + /// + /// Прорисовка объекта + /// + private void DrawObject() + { + Bitmap bmp = new(pictureBoxObject.Width, pictureBoxObject.Height); + Graphics gr = Graphics.FromImage(bmp); + _plane?.SetPictureSize(pictureBoxObject.Width, pictureBoxObject.Height); + _plane?.SetPosition(15, 15); + _plane?.DrawPlane(gr); + pictureBoxObject.Image = bmp; + } + /// + /// Передаем информацию при нажатии на Label + /// + /// + /// + private void LabelObject_MouseDown(object sender, MouseEventArgs e) + { + + (sender as Label)?.DoDragDrop((sender as Label)?.Name ?? string.Empty, DragDropEffects.Move | DragDropEffects.Copy); + + } + /// + /// Проверка получаемой информации (ее типа на соответствие требуемому) + /// + /// + /// + private void PanelObject_DragEnter(object sender, DragEventArgs e) + { + e.Effect = e.Data?.GetDataPresent(DataFormats.Text) ?? false ? DragDropEffects.Copy : DragDropEffects.None; + } + /// + /// Действия при приеме перетаскиваемой информации + /// + /// + /// + private void PanelObject_DragDrop(object sender, DragEventArgs e) + { + switch (e.Data?.GetData(DataFormats.Text)?.ToString()) + { + case "labelSimpleObject": + _plane = new DrawningPlane((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, Color.White); + break; + case "labelModificObject": + _plane = new DrawingAirBomber((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, Color.White, + Color.Black, checkBoxEngine.Checked, checkBoxBomb.Checked); + break; + } + labelBodyColor.BackColor = Color.Empty; + labelAditionalColor.BackColor = Color.Empty; + DrawObject(); + } + /// + /// Передача объекта + /// + /// + /// + private void ButtonAdd_Click(object sender, EventArgs e) + { + if (_plane != null) + { + PlaneDelegate?.Invoke(_plane); + Close(); + } + } + } +} diff --git a/ProjectBomber/ProjectBomber/FormCarConfig.resx b/ProjectBomber/ProjectBomber/FormCarConfig.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectBomber/ProjectBomber/FormCarConfig.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectBomber/ProjectBomber/FormPlaneCollection.Designer.cs b/ProjectBomber/ProjectBomber/FormPlaneCollection.Designer.cs index 11c27f5..65d20ef 100644 --- a/ProjectBomber/ProjectBomber/FormPlaneCollection.Designer.cs +++ b/ProjectBomber/ProjectBomber/FormPlaneCollection.Designer.cs @@ -33,7 +33,6 @@ maskedTextBox = new MaskedTextBox(); buttonAddPlane = new Button(); buttonRefresh = new Button(); - buttonAddAirBomber = new Button(); buttonGoToCheck = new Button(); buttonDelPlane = new Button(); comboBoxSelectionCompany = new ComboBox(); @@ -72,7 +71,6 @@ panelCompanyTools.Controls.Add(maskedTextBox); panelCompanyTools.Controls.Add(buttonAddPlane); panelCompanyTools.Controls.Add(buttonRefresh); - panelCompanyTools.Controls.Add(buttonAddAirBomber); panelCompanyTools.Controls.Add(buttonGoToCheck); panelCompanyTools.Controls.Add(buttonDelPlane); panelCompanyTools.Dock = DockStyle.Bottom; @@ -111,16 +109,6 @@ buttonRefresh.UseVisualStyleBackColor = true; buttonRefresh.Click += ButtonRefresh_Click; // - // buttonAddAirBomber - // - buttonAddAirBomber.Location = new Point(3, 207); - buttonAddAirBomber.Name = "buttonAddAirBomber"; - buttonAddAirBomber.Size = new Size(235, 59); - buttonAddAirBomber.TabIndex = 2; - buttonAddAirBomber.Text = "Добавление бомбардировщика"; - buttonAddAirBomber.UseVisualStyleBackColor = true; - buttonAddAirBomber.Click += ButtonAddAirBomber_Click; - // // buttonGoToCheck // buttonGoToCheck.Location = new Point(9, 131); @@ -276,7 +264,6 @@ private GroupBox groupBoxTools; private ComboBox comboBoxSelectionCompany; private Button buttonAddPlane; - private Button buttonAddAirBomber; private PictureBox pictureBox; private Button buttonDelPlane; private MaskedTextBox maskedTextBox; diff --git a/ProjectBomber/ProjectBomber/FormPlaneCollection.cs b/ProjectBomber/ProjectBomber/FormPlaneCollection.cs index 4125e8f..b8299f7 100644 --- a/ProjectBomber/ProjectBomber/FormPlaneCollection.cs +++ b/ProjectBomber/ProjectBomber/FormPlaneCollection.cs @@ -33,33 +33,16 @@ namespace ProjectAirBomber panelCompanyTools.Enabled = false; } - private void CreateObject(string type) - { - if (_company == null) + + private void SetPlane(DrawningPlane? Plane) + { + if (_company == null || Plane == null) { return; } - Random random = new(); - DrawningPlane drawningPlane; - Random rnd = new Random(); - switch (type) - { - case nameof(DrawningPlane): - drawningPlane = new DrawningPlane(rnd.Next(100, 300), rnd.Next(1000, 3000), GetColor(random)); - break; - case nameof(DrawingAirBomber): - drawningPlane = new DrawingAirBomber(rnd.Next(650, 700), rnd.Next(15760, 16130), - GetColor(random), GetColor(random), - Convert.ToBoolean(rnd.Next(0, 2)), - Convert.ToBoolean(rnd.Next(0, 2))); - break; - default: - return; - } - - if (_company + drawningPlane != -1) + if (_company + Plane != -1) { MessageBox.Show("Объект добавлен"); pictureBox.Image = _company.Show(); @@ -70,29 +53,19 @@ namespace ProjectAirBomber } } - private static Color GetColor(Random random) - { - Color color = Color.FromArgb(random.Next(0, 256), random.Next(0, - 256), random.Next(0, 256)); - ColorDialog dialog = new(); - if (dialog.ShowDialog() == DialogResult.OK) - { - color = dialog.Color; - } - return color; - } /// /// кнопка добавления самолета /// /// /// - private void ButtonAddPlane_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningPlane)); - /// - /// кнопка добавления бомбардировщика - /// - /// - /// - private void ButtonAddAirBomber_Click(object sender, EventArgs e) => CreateObject(nameof(DrawingAirBomber)); + private void ButtonAddPlane_Click(object sender, EventArgs e) + { + FormCarConfig form = new(); + // TODO передать метод + + form.Show(); + form.AddEvent(SetPlane); + } /// /// кнопка удаления /// diff --git a/ProjectBomber/ProjectBomber/PlaneDelegate.cs b/ProjectBomber/ProjectBomber/PlaneDelegate.cs new file mode 100644 index 0000000..2329836 --- /dev/null +++ b/ProjectBomber/ProjectBomber/PlaneDelegate.cs @@ -0,0 +1,9 @@ +using ProjectAirBomber.Drawnings; + +namespace ProjectAirBomber; + +/// +/// Делегат передачи объекта класса-прорисовки +/// +/// +public delegate void PlaneDelegate(DrawningPlane Plane); \ No newline at end of file diff --git a/КУРСАЧ.docx b/КУРСАЧ.docx new file mode 100644 index 0000000000000000000000000000000000000000..959bf19ffdd35be0543f24f746e6c681725fc009 GIT binary patch literal 16838 zcmeHuV{~Q9+U|-wwmY`1j&0kvZ95&?9osfK>e#kB9lPV3z0cX--n-AfcZ~b{J2Ru^ zSaVf9Pi5A6->Q01a*`mRC;)K42LJ#-0N_y&`)&^e02F`$0LXw3z?y=#HcrMiPP$6& zcE*m{v~Jc`_<5kf>a9)ftwi(nq zPJhb`M<5To$f8tJmp*SnJ`$4uROBiM}n+O@z2YHT+TK*MNNVOve<3r4+)UKN| zbtL&EEi+RBL(MQNuC^{LnPyxA0Sj!VCcYc^Owm>Vk--lxwK5c141XsW$FtyPB*(4h zmsgyW2|~3K{b9ZQZDbUKQU>>psq;_b037uzHMV3OOymtq5-^3VYOB}L!e&P?arN8& z;H%3JEDT#`a;i{Rmo_#mX*mvJWW)<)j2}Ce=nmPOt;_{dF@_orZFzD?Sl;5-z2aeU zCN@qhN|ACdU%F{RwM3i_X3eS)#)#SRAjpQyb4cKUDa}mW?9dRKv34HF~jf#N_@ zKGYDoim3ISyckgU^l%2E>~W$p!5+p;=Wq(*TLYDJ7xR9DavY2QRNgGBN%FkA^3*6_ z=J_fc(`8S5GkhQDK(rs*>~?K26y5c%k8f`v0J*Q%%g`B4tzs-ge9#n^LS9|6SbTlq zT3Q0uKGGK*otaIT@^H))ao$SQzQ9UWhK=ZiTzJsw(|qc110)4^6f(Fi*zLe%9Nd|_ zj1Y-aj0ApGM~#@o0+0I{mO9>pyiX}~w_glxPDn91XGmP1pKY(ac%SOSl#|9VzhEJz z=?PKBE!-7?(>8(W17*Tno5DmB8}oIePP<>}M?wo@lm*2tHI@}U9Z6=KK?M}nMaT3H zkNoc9f$(5z$Xv*9x+gCaEhLTC!-xY+UeYFg=QS{=7&et=gHGU70BL{_9y`F}38+D6 zRf9x6=R5hb;x5WKD|%E0bh3%$0_i%~w~!X`wHEswzysJE@5((+d^~ylOzs)&K@*bg zA?N0c3*0u-8eE2dMd3x4p_$GyLT%A`sw2d<3e?Ojbi3E1|tb z;DiTrnMh#$(tr=-drRcxJS^lCp=!baNMs=33c}d_Vf+CEGHLMe&jRsef&HQc6bbwh zC5l94TPmYgU&nDqZ7|?6SK3=c^nL3#H9&f3`bw=Af3O^4^%xZZBIPZ87=c9S%OG-l zRTTwe9bwBY79K1B11sOoR>wPdeJa^-w#Zu*C*cHmdXCF7HNhnG>Sf`VP@bF>XcrUa3 zz&*$(sDlY+MijCIg@xMY0FlDV>3s<&GZ+Urs!JRq1GWeO1rg$y)W8@K@Iedb_NS+WFSCzS^sx{sfUO+~sADhE#mX@u} zxgiETqfykg9tqIVUY7K|?V0yI!Sj9P(^BW5k6@Q=d&~vFkf+lcHBTXt3BNNzpC1#= zs#V4vDpPx!I0FPM3H&jmq%`*{e`>Awikvk#q1u#UZ+;r9S( z_ee4wsd!Jk%X5w!Q1^^T>j!KcQrcJC)=ZuWI-0UnHxmBY0jWz@PkB?2mMyj07YgX2 z`pkFDbjy1hI=>HWC_?~e4>g?BRcy%(SbnD@C21dg;^5TJQdL_-F#yU(G{d26edC=uIN3d*U;hHNF z0=!Cku9IS7Nd*jLeH3E7OA@5$lEoVEeI*k12RA%PzUwl1d#*j zr4JwE@6Yk?Izp_#38_Su&iJ7mua4UhFN)cg%`QkCovxmG!KmwxO@inZF67lJbIJwy zRnYYsy=Rh3QRMM3lp`QwZQ}YrDkh>ThJij0QGyo0-LE(EEpQ;*f`54acva^(w%Q(g zbTvGTpoY7@ejKZ5kmaz`b%Z+;%$QqI-_hY`hH%KL+5>!sl$;yU;W)Wh#cA;Kw z03MTb^OK3Z&$1duiwMm=A_+>1J$N^VP+Z-d0)3o*%{6EVy#T=zfg~BM zMtSHuB{iY1Z15A3!YYPtQXlDXue8*sBhq`Qp&!huawh_)i?p^dv~~R`LLcwAt{B!0 zR`0%b5a-k(Lp8moLQ0H6oFUH$UaClD2OCg~f1Gyyax`1=GtG=qKx_B`%FO))H+XC4 zI7ka20!$ru0%|T^ZOd8K?piVjj2AgWABsDIDW|iL6St1?(2PJ<7uz^nyfM|Zn zZCTzz-0$4jGi(|XBSx0aRuJi-%o9Yl>Ec^CM|*S4!`p=B6(QFi9M&XK20Z#XrGEU2Q56|9VDm&=(qLEo;ruq8YMkUGg?ZG78O zc?`Q@1Idh_`#L-s^T&={?qk3AVNwWuCHaP-sb;XvAqLEf9R`&U?|^b*gb(gvkx&N0)9 zC@7d+Y#}9fnBcf*W9JVa5J^`~C4crGOrtwR@WK=ndlno!Nf3hCM6o|BW69FvF1x!0 zd=PB=f;i4I01#{Jps^Fqk}m|SSe#1!&>3ZuD1jo2PG=FJKrNx)MqF6&%>jrL1Dc7R zUk{`sP&B0-_%_EAj4a|^#b zo)khasClK$+@t2h1rbCv+5sbVG9+S&m}s76hQ$^5*(V%gNZ$QyF~L2|&mAH|7v?E6Qovq_Q+`)Q)LpRXq=1Qiao_Np^rB44*$2vj>kl@D0#fy#9Zu|2iq zmKdgazatUz5;z7_lZRsl5ts42A#uWvo`DZ$#6H0m+*FH~qp!ji_b#}Nz#c0$jhh%p z)AhdjWVZ>kH@j?(k=ZUMH!3zwcXKRi;P<$URxCDu?7L$zOHX6XU2*rvqVI3}DLy)G zF_ze;+{k;Gx%M2EMppHBR@n}}c$m+1sgo$L-bgL^eAQV(Oy!RyyGmwkykT1+v@9}9 zChhi#-r?I9-|wpI=549du*OVg2GKoex@!a!{8B~T5@sHr9Gi%nX%V^8uDWRbQ%<&4 zJ zovl5|BM~FjQ=D}1bT$&AA7#;06FH(O=#H{d#M}_U2(*C`N-CybSF{yoi#&w==^cod zz$)Vs(8FxoinrHkF9}h>#HXOYUX*Wp$eWBB?Jnv)GMk=V4Q24)wa z-yA#@JLx#2b1gkdGEAz)o==*ne~%L4JhEkUVC67z+sZk3%;*o0)ZryxpJ0%|@K+xw z(_|;WEI)>MhJDhPbsnrPA3yDE;x|}BKW47tN0n^*I%TzvVQ^u#NZ<2Q$d{C>*noJ58!My`U>gEu`ZY%)`J3_K9(2~(1CAH!ms!hkwE=qo3oteF0JLhwky~n znIh|l)vY7byo9vJ0Pbi5m{2Bh=64lJ@U*0lfhNdyB8E*rF_;;Okvt~p7Wx$X+sSmm zMCz2PJ*X$SMuw)6|fK%+TSCxb*DygH>pOKo45LI`^SPnl7P)kd}k?Ra< zrS0;MNqTZK*4m`YIL_DQm19Z!>WxI&-^73wUb{hRq^(%*&~Mg^9pGg{s~uW>?WfNADP^>hon4T z78gp5-A}C>6YSuF%D|?`_3S5E1H9@a40!{SE>VL)737!>wPZD6I@nWsQ~dAsZ6Th* zPv4lpioWU7*-vT3Q$X?ZVDxb5XP_QBeEUeTW!sD2F_J67^sIj) z;{(qkN?^+w2&=*$>Eqkc_+%OQZNXxDmskLz`YUC&hOK6_AgR>UMUoIDm%T)G>uzg!oO0M?P6_<(Hb-mNvy$C`# zChrd(-&}*n-~Q1++H90+f_ks%1_1y*0zLr!ZXo^3i||)7=?{+r(7Vs?z4ia@t0F;K zvY#Fy zc!k8XIrE7>akaThy=u~TF)WrXuX8OEKQn8O(3|l245DNx@Gm7c<45EUz14UtH-dlZ zSXOuP$`wFj9LkV4`XNU|#ZD}4v8~^|&002 z;3?IZv#gI_o?Wgk_I^%7OufQ(@h;T$*{gepr+pxIg+sJ%t+|QCIo;))aVAGXBGs@F ze`_76lpH8TNWwO9bnt#*OUZzS8A7EQ>I*E)IegHm?3}9xQmWeZxYemt)%-CFV8-Z~ zP^2xI@F2N3So%nAt>NT)yl%1Fb9ke=cww#U4buT$C~XV7c@B{V>zLDURK5KoQ$Ndc zYbm!mJq zyVvLK(QaHXi=oe4uSc$UJTLqAzKV3P8eedDz1^Pou47(*-uZ)V9DK)z-y~x|n_%(U zThn8(nyLfvY|)X{;t|BBn33i3K`Jn!ImwEEKd!*Y8}&NZm=9@woC$^fd3V#q??$(y zC{Eo|E^h^J#mL7Qtn_RvTNu&QPY=2qcwmlc_n*qOKGho-?K}dV0IDs8A+(xWE8KEG z*#VUl9j|2=M6133z;Mzg2%ZVa8b9ILe}r$qGR(t4pGSe*CS`CjIwpefY`tW1m^`aL zSJd?xUYa-)R>+!?fo1F`Yq|uACT4!>LENgC2y4726AwKMEwS6D{zQ&W0<^EBj#-m1 zZK?$0OY2>NrnTXF@sZZwtozk)myLJv1upwX(un18pQ14Y!w5}N#Hk=nvJvJXcyo;M z+iel8TAr3opGXS`JpD@2D4KB~$HuPN^NE72M^?F56|6FlEuEZ-auHWnF%+GGLNGYl zHfy(+`)k}q9wk84_Zgd(51<$gm2Z)$Yw|zid^QZH7jS_OwF3E)wJfodmP;(+m2hBb z$YkVUH$Sl8Rv1_tCjqG%x*)UD78dnlJ=ca!KvbcmyR_>(2>Zr8i3yUnN=Fc=s|Jqr z#t3hH5V9jNjhwKThB_s2y8Fh~7$dx6 zRffxX!F)SWlvt;+Z}qiuffZ<1@ai#zRhwDbg<*{p?Yq0Nqt5d4IaP-A;X_9@N44q1 zF=qQWsuI&WBoST=4X)Q|jh#auG-krYvti7ERRMHCV29os_`tUOBx*ciX+pD!6gE2o z(Y8}N(oGV^mCsY4$u!5P0t~7+P^Mo&6BRv{$~2{?%scu*j?7v++#Vr;#Y}ePqG<+m z-4c$>Dzmu{G|Lt{<#@BT5#;LV1PGf`#q%r(iF_gYbfW$~{md>AKyIad!@<9yC!UpR%AX)?YU86QbLYhHGJn*rip#eW|U^ zNRx#17(qE^{t>0RZJDH`;s7E&mhA{?TJ<9^9VoqF4e>cPz=R9PTfmrBsIOojZf|Xh zEl-bSJk+e>(W@aLgDZJB!NRpoj`(1uR%tnRSJ7U2;o_vjBh|SP7uL4_8hyO8 zKCQAr7B`8S^Ad{Kxo{uRp`XkHENIBpv9WOv0iuKXIKg)7)R0dj=T^V zV)`cegHiTZXHRjmX83U@XH^s5uCzcoj-$Eev-;pUAzE{r7QVSk^GUqwv-ru{k*ls= zO6m3T)~eQT&KWl0v$`KRES3$xSq7E_Xs}sIv-J66HEl4{GtR>5yI@uFRkRU4e^R_( z&~vhmj8{M_UUNF`{$*s={5SRhu3MLZwGlN9gLcm(WADHJoItO z>wd)L46pa%`ANC^B7t7oy=9V5{mRK4)VM{v?nPUcNG|5wr(heJ64$5o9$V%oSM5W& zz)lyI3yV&XTot&0097iA$0(EBGi6Ha>J6Klj=S~NO8vvn=fUnQ)s?>gxK6@M;O}&R z0s!r>e{o7X8ap|e+n753wnjFnt~#u;B6y!mz47-Q&g`r+VsqqMob$;NC6>+j=pJB?#d7VU(gJDO z_r?au)}ApDpB;~kbCkytV&)2+KKUP#$Vm2u%Fv876xv}9gQa*CHi(a?QpNAyeQ89f zzFbX}a@S$fqTH>eqYuV#qhKqDPmX#a$M(aPtb5rYZHmGj2pq8dIt!k( z#gU8z7bcI5Pr*4f4V@Qw&UCSEGcD)edY(3KzjwL%ApjjzJQ{Cfkim@OQO|u$FrxXA z7y@^OWI@)4I+X}my~N;}G`Z)XvD!LL0Gk+Ixd8KWH6Q}s$#Y>}Y-UkO8e~0I3V(WS zxXDN@Tc=u*R!)TABY75Xrq85M@tXkBEpL54yhzpcmX<(_+g|3ai+Qjx96A_Q{rJ*|dX4o<2UQbEg30N0fQ zL0g3!oIv@>Q)P3&w}?FNV)oMt)2Wxc1wyyHH!`${y|?l#+gQHVuX)bAKDyx9GSs z0?+fkv5!-k@fQ3+TRUykIVzjunCg`^00>YEUm!3U(9JY1U45k^vz#(rOa#+$GU zxUyTHv80_73temcMPAqVgZSH+a;$9R;D*nd6Z8D@86vMi$AxKDbW%wXV@Rl`w#12`MaObqbq+jY&@=S0dp?iXBNlhAN9FVgiz-#=d zL4N)H%2_ zlknWxDVz2qhB!++C~VeH6z4;pFeb&;EB-d^D$!V}+7HVh^r^#))zr$DT)|fGc4U&()bot7zjp(N zTyrynx6fUn7AKzD+0Sp&2}vXEfh)VMNI8=8ZG2d{r1e}y;q4g(pbPcNMn#~&aDNXK zh&8)b!46@lo=4V>GT;9}5$Ge-SXuMdzoZplTKip9L?%Zs#WUF%`Kg)IPJ*~$8Y-lH z=c_?C_E^kJz~SQKHZseV(GT7Je7lvNT6YxkS@T=Hp>l@!7BdD*EVd$F2!FOqGN11u z==EvX(zFL>Zn&g2C`#0W9#1y0{lE;0C^7nd!zsNRT0Y%7x12GP%YpAh@e$N=!yNVBAwpipg01M zUcsD+2Di1H{|>1obMTV#pm?rwUdI_^28mre3>_!Dz-}h`A&L*Fz3GffxLFV1Bz#cq zHYznOMPkIvbZvsxLb;jzEHq{)cC!T&xDnO3ztcg`P#Y+qDU4$s$+x zD&5kPWvhs0<}2NP9$i9F@38wbsEX7wteX0kT`0RKLWzgw7& zPVQF5zptAoS>q17Er>(sr6Zg*P7-jq>aVe;+Q-XRLsBOitGhVMX-q-_XbZ%-v5CA6 ztKQ*jS1_do4&MsmO)om+0SJlsZ2YzS6$yfHOvz$*G5D|Ru*?H7w%wjmJ6qW%9J@#S zwihP#=u^ylh?2JO9&C$vtQ&Xljx=*2gY22W4dijp&CaLW>Mrl4$x{rxD6hN#5A7tkbJo+|pIm-Kk$XjW2 zpWtRATrJGaO@Pb@7rpg4UEBDv{I%%SYs)+i0{)2@9pLv`|0qXzLCDx-A| zgT>hO_7L3ZHfxc4d9_RP{4qw@`GUsmOUp6KG!zGEVlY=3gozJCpQ8sZXNL@A3|j4V zU8NotzgI1f+Lk3TAu-OAGg6d@AqQ?3S@DkvT%AW*@1Sm+vTk1s0^x{=N-@SkVc-h4%rUZVI+n2v>Aq=+^> zshGa8$E-p7wjC(J?ZN-;u=Hm~C!3NE%Hj0WQ0#;eA+n_+Axmc>ckTz?#M1I(=-d|mJt0vFipN`g|+Ic+N?H9=`xtcRA zz)T6pX7U^prP=8ebf)-ZJUC~?DAmgPZ~GDgamPD87C=a)E#L61rJ*6+dUuAF;5*|@ zLaS4Ndm%|JRZ_cuV#_SLXFg!UiX}(lis^}r$Qzp>qUFh&h8#D;Quq>m3QtMZi=Rbi z2;ap))V!g_9L43TD|{1=f(A$P7ch18Ofx>bC&%w8E-;;qqCZrm_2=n;kLi+ zX4fEMzLQlh^{mkUt5Y=$N|C3&p4mb9XXbH5S@ZN_xLIb|7nR52YM*T81LA~!HyKefihrp!ws zXZ}M=Nz~CD92?2jBWL*X z6!l@tYvvh2Dnr~279(@eA2;SAO!AHE&ZOR3_G5Tvdok>kj5?3$m{*z-@hSvwJZaM6 z6G{|~0cO0&B~>mTXunll18ENg75X@NcE=&0LA;V;6fdG5_Og5#rc`o?#M?rogUWU@ z{DBj%#%Y2Jo)+IvBumTyZA@{^7(%&me`7u-j`onN zZQRh&Q<9S%Mif6bA|4vLgyeq7zlR53PcZPrJ)FvAy+>72)!7qSAMxPzOa$9r+$M?Z z#$kVBuTwIcU{O|H@v_|}i>zX|Ui?8qnt@B~?bfb_s^tu#J>c58W{6?f(c~p~KJD<> zjw<_n_f+TE95=?DHErniQw^}kaWB;ON@#a3*_pLNM5^o|5EZV?q2p;|l*v9!&VeWG zK|)&t@>Dt!l(7^Tr~^q5uxm=bduTTpwfpklZj$a2sl^n2K-c@GI-$O@yug_Bx;{mE zUC&azUJq#j4_Ec434Su921qBiVGOZdUK4ze*k&^Uq)gdyC&S2B-cq*Vp~wX!r3`mUfNW`yY@Vm~cET(~TaiQbL*Xh@&~~oouW*w#Y~4C07^HO0k7M zv29b55@cPm=cVnZo;2m@;3m0RcUW~3vh*)JS!3N)Jz%;L7Q^n{oRGp2O)9XwSt5CaYYJByEThydA9i~e5q@mg7 z*=%Z1vTrk3Mu8_IZZCHZ>Lh(rpL0VyT(!K)3${PC$@plluYMTdDXr6hMA@s4F`^5d z^Xb%J&}Ng??c^?%yiSpR+o-r9nu;@zqK9YNlT_42YDVcvQ%eizsw-Wnc_fo}%-wy% zXCI>Y?%pdaJX|q-HYd4${WY{aiQ4ddXyIru+APcUBy0ilTeMkHc*Q|U;yd4jw2RO& zv9V}QJ?ck9yJe`A-8$3;*I|{|o%qU6W5DmtXMs3@aY_*U;pX6&z&L?XOM2EQyq6phRKh8LD8%o4!5^G*1VBH@;T+znI2Q8-qx|cU z;GNN;Yl%QEmz!2Dw^K4lAmY71eUkgF;=QZid4+zXk@JTd%K}DK_>(T#m9PzhvSA2} zvcVNnNzDGe@Iz4k-uTZ(0-%)dCaB`yIByO0L-~U5THXt-KNQ7p<0P1z zqe~C&CXlMZl)HCFDfu33F?QIb=jf7O5;7 zO>c!`F~w7QvL42oxkMW!ZTV+~eml^}jG0J%u9{RfW6QpeF7}GitT6iUY{n*i2rhPt zJghLTAZeMp8s|+X#oIfN3Vdb`qJcH0WX!E3b7c}k^z8%xp zkeikgj7VFsC+h!R6YH1Mw(Dm#@F&L3Av6gKsYXE%Sj9r@?;tsn{69cgNSOuT7_RSJ z>K0)Z@fume>Ty_wHTuyRL6{*eK+E*~B&K~+xf+ZWIOQaPTWU1?m6YT5^YIkvSyL+9 zoVk^eF2EA9RN!3DoeVQ+RrOw z&9zvR%2?d*S&^}e|4|dAuvcbmHZq5emL_s-RS z>-V?HLXr2*XM*YVadClIB*aueU$fC&C9cf*+juiCNXN}4c0IAceBf_CIw!t_CN&$1 zH+kHCS?WUYCdG@jS*t=xf)AVLYurx5N4yQ7S`OpuR+Z{rlxS3bQz+*#Z6zP^E914^s{o`cyqh*P@Px%>W;VV;OhE_@hzSC z`}BMpr(A8UxKkPDNpJ!9(BXBNYB8MpA?5Mi$eh-p)T-5Bo)WE<0?cD&?a0~G%{f!! z4T+?rBg)C&&zaFF(b#9CZ?mwDff z)q&p10tu!vNpyd?Va|Xyp+kDr;A2V_El+0YlG~Jejg{U_NtRdzZ;`zh|48M-SeLmJ znQ*I1O=-5lmBCAk7k=@)&Oi>%l&-bZL!{pSuzUZOr474#PdF5EN|BRf0Ae`|ecO z!kDi(`pi*g#%VXl>-!?^R_LVg@WvZZ&CC1t@-VvirRz2FUNx`Uy5Vm8Ew7Jtvc9q` zN4w!MvHR&ai|Rk4dgo9SGBWSxs?U3b808O}%hlLG@h=X`%voK_uk;9ji~HU#!Qu9z z5flm)eV8GgLA_Oou%r19lGgao6732IC z)iAn;2cA|f=#e3X_o0oa1!?d23|d<{)7aEOj#b0rWEH+f6ptNgDKRXhB^FTGMTDpY z9*!dgD#jJ-6Js>vr8B6^aNR=P)p`-1Klq8$7pxJ=&1|ICY2tQ zuq>LvhUCGO_=g?a-wipA{6uDIYxm2X27(-A-!p*2bVdn{nX%bBp`$;7h@|r?4bkQ` zbfG5}&E_onekdgyO)-)AM&bxAhxoZHg^_2Y+{#c{DJk!VR*;Xlw9MK@qwAj2UBe~D z+)7=4b@oLc3C>!RmhY;w;F9yPHKai=9`LbQ=0gB#$dex|f9z>p9a=`pp=kCu-fol2 zcgyxa$Nzc^cFEv9y?^Q5p@8(q_?x^R$WhWaurmJ5UA&jLZm~*_;&%?=36cLaSa&^3 z%}gP#(WiG~;8de2tYW|*$rz7B7E=?t41Hn}GrRab&dSt8T#b84j~PgmNA%HQ!c?8D z*)tA;vj|qzAtDb~1SmnNP|K$1`>de@i->=%P!X|ey!5m`rW2><(?L;YMN$K)-|dVP zXjb0XiUCqch=~-!tRh%KtQHkbSg>X%B-pfW(*UY+9)5DQ+r%kBBm-_PR=%!){4q=M ziOh7R-pu1|t_cT15;G>9lpvL^09BFiIXL&ST7XZHIH)U51(8cT0r)l zKhlhYw{=ud!oqio+~;-TZi8T^8M(^ ze-lOCRW&l6U*`A2QDSQZS3J%$i2-@cNq|~l$Z$dgPD9zx1oqUc2yKDb_%gs@U`Sz1 zso2}Z))Ju5F1}p8*+Wb+gU#*->wYsG2t+7%zO~2)$w|A24z` z%$Q{s7m+9pHOSeOf4Ojj?Z9q~C551g^Jx@x$}7O>BM1UN22Hb{1iS6Chta?NEf_s8DFMHcsVj>Jw2$^5IO&ZADOLdgk#nTOHk-p1nmrjXa zBvZIz~65y^*UW8MR%z+IejhZrO-P~I1 zxV45keb7_sIpS|U`R4d=o)?k76{6}(jx!g{Duo7Zjs1l#-TUX6jlOI^#2i z_p`SLJ~V+oEMNa4sHyT~)*~vtF7pN6&H-`cj#<8>7I1p4Gq2<0KTfabtGhrq@4~$I zF3bpj6=r=qyWb|)|H|^aAirOk3B5L}^e`dkAa`&f=TY$$;{ks13Ck#ESck^hjuahio=Tfuf}e{uB&zo@ZOru%#C-TT?cyQx#7STWIl&I z3y#e7ctD`ALTQ&^Jq$c&0(U}M)(-R(_k04nUr6znEppV$3YwR3BOq#w>Gp93veN6r zK5U35R4{z-Bm%Z0Tgvgep~U@(u{0IrI)cyxqed1s_PG+>MwA`0 zx>=7Xco20xOH}{@^lk`fk$gsLQGle&TkAw#--1s3iw8cRED`9T$e68H+q&0>;OZ@t`@ z4$Uw)w*XTym*>IyGAd0@{gU|#)w$!C?FH03%G2R)g5U&<(VnPzo35?}dRS_rkr+$r_dK+CtX1q>@L8t1=hD& zRvH1>W_dg7yZ$~S{%i3E0;YN2`v3Fk@V~t3?;ro+thk)y-wFPHX!WlIW$#`78oq5WU-9)G3yH3{TT z3SFE(0$YEvuzrRAJ+S&G7yytUd_V5^pJCQt3H~05{40S5(XRx5#wCAc`86Q-Cr=vj zA8+wL;kjSIzgm`mf?*l|4gST>{FUKX+vrb*D5ifi{LNDO76130?4M`=0FM;__>X<< zukgR`9sUYGVgC#K-#dw4(SM&$|B6QA`s*+7PqV9>B-p#e0|0REe~Ir(^O5Jbr~d;R Cw6nGV literal 0 HcmV?d00001