From fb33f426d3a457371764e39ca69f29ccbc4dfd5a Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Fri, 26 Jan 2024 20:43:51 +0100 Subject: [PATCH] Binding UI --- app/AppConfig.cs | 2 +- app/Extra.cs | 1 - app/Handheld.Designer.cs | 1234 +++++++++++++++++--------- app/Handheld.cs | 131 ++- app/Mode/ModeControl.cs | 2 + app/Properties/Resources.Designer.cs | 10 + app/Properties/Resources.resx | 7 +- app/Resources/ally.png | Bin 0 -> 26177 bytes 8 files changed, 913 insertions(+), 474 deletions(-) create mode 100644 app/Resources/ally.png diff --git a/app/AppConfig.cs b/app/AppConfig.cs index 725d5151..8de91e6b 100644 --- a/app/AppConfig.cs +++ b/app/AppConfig.cs @@ -321,7 +321,7 @@ public static class AppConfig public static bool IsAlly() { - return ContainsModel("RC71"); + return true || ContainsModel("RC71"); } public static bool NoMKeys() diff --git a/app/Extra.cs b/app/Extra.cs index 5e75cb85..baf171fe 100644 --- a/app/Extra.cs +++ b/app/Extra.cs @@ -13,7 +13,6 @@ namespace GHelper { ScreenControl screenControl = new ScreenControl(); - ModeControl modeControl = new ModeControl(); ClamshellModeControl clamshellControl = new ClamshellModeControl(); const string EMPTY = "--------------"; diff --git a/app/Handheld.Designer.cs b/app/Handheld.Designer.cs index 1c50b22e..3c7086b1 100644 --- a/app/Handheld.Designer.cs +++ b/app/Handheld.Designer.cs @@ -28,95 +28,113 @@ /// private void InitializeComponent() { - panelController = new Panel(); + panelDeadzones = new Panel(); + panelRight = new Panel(); buttonReset = new UI.RButton(); - panelVibra = new Panel(); - labelVibra = new Label(); - labelVibraTitle = new Label(); - trackVibra = new TrackBar(); - panelVibrationTitle = new Panel(); - pictureVibration = new PictureBox(); - labelVibraHeader = new Label(); panelRT = new Panel(); + pictureBox4 = new PictureBox(); trackRTMax = new TrackBar(); labelRT = new Label(); trackRTMin = new TrackBar(); labelRTTitle = new Label(); - panelLT = new Panel(); - trackLTMax = new TrackBar(); - labelLT = new Label(); - trackLTMin = new TrackBar(); - labelLTTitle = new Label(); - panelTDeadzone = new Panel(); - pictureTDeadzone = new PictureBox(); - labelTDeadzone = new Label(); panelRS = new Panel(); + pictureBox1 = new PictureBox(); trackRSMax = new TrackBar(); labelRS = new Label(); trackRSMin = new TrackBar(); labelRSTitle = new Label(); + panelLeft = new Panel(); + panelVibra = new Panel(); + pictureBox5 = new PictureBox(); + labelVibra = new Label(); + labelVibraTitle = new Label(); + trackVibra = new TrackBar(); + panelLT = new Panel(); + pictureBox2 = new PictureBox(); + trackLTMax = new TrackBar(); + labelLT = new Label(); + trackLTMin = new TrackBar(); + labelLTTitle = new Label(); panelLS = new Panel(); + pictureBox3 = new PictureBox(); trackLSMax = new TrackBar(); labelLS = new Label(); trackLSMin = new TrackBar(); labelLSTitle = new Label(); - panelSDeadzone = new Panel(); - pictureSDeadzone = new PictureBox(); - labelSDeadzone = new Label(); panelBindings = new Panel(); - tableBindings = new TableLayoutPanel(); - labelPrimary = new Label(); + buttonView = new UI.RButton(); + buttonLS = new UI.RButton(); + buttonLT = new UI.RButton(); + buttonLB = new UI.RButton(); + buttonDPR = new UI.RButton(); + buttonDPL = new UI.RButton(); + buttonDPD = new UI.RButton(); + buttonDPU = new UI.RButton(); + buttonM2 = new UI.RButton(); + buttonM1 = new UI.RButton(); + buttonRS = new UI.RButton(); + buttonMenu = new UI.RButton(); + buttonRT = new UI.RButton(); + buttonRB = new UI.RButton(); + buttonB = new UI.RButton(); + buttonA = new UI.RButton(); + buttonY = new UI.RButton(); + buttonX = new UI.RButton(); + pictureAlly = new PictureBox(); + panelBinding = new Panel(); + labelBinding = new Label(); labelSecondary = new Label(); - panelBindingsTitle = new Panel(); - pictureBindings = new PictureBox(); - labelBindings = new Label(); - panelController.SuspendLayout(); - panelVibra.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)trackVibra).BeginInit(); - panelVibrationTitle.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)pictureVibration).BeginInit(); + labelPrimary = new Label(); + comboSecondary = new UI.RComboBox(); + comboPrimary = new UI.RComboBox(); + panelDeadzones.SuspendLayout(); + panelRight.SuspendLayout(); panelRT.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox4).BeginInit(); ((System.ComponentModel.ISupportInitialize)trackRTMax).BeginInit(); ((System.ComponentModel.ISupportInitialize)trackRTMin).BeginInit(); - panelLT.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)trackLTMax).BeginInit(); - ((System.ComponentModel.ISupportInitialize)trackLTMin).BeginInit(); - panelTDeadzone.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)pictureTDeadzone).BeginInit(); panelRS.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); ((System.ComponentModel.ISupportInitialize)trackRSMax).BeginInit(); ((System.ComponentModel.ISupportInitialize)trackRSMin).BeginInit(); + panelLeft.SuspendLayout(); + panelVibra.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox5).BeginInit(); + ((System.ComponentModel.ISupportInitialize)trackVibra).BeginInit(); + panelLT.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox2).BeginInit(); + ((System.ComponentModel.ISupportInitialize)trackLTMax).BeginInit(); + ((System.ComponentModel.ISupportInitialize)trackLTMin).BeginInit(); panelLS.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox3).BeginInit(); ((System.ComponentModel.ISupportInitialize)trackLSMax).BeginInit(); ((System.ComponentModel.ISupportInitialize)trackLSMin).BeginInit(); - panelSDeadzone.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)pictureSDeadzone).BeginInit(); panelBindings.SuspendLayout(); - tableBindings.SuspendLayout(); - panelBindingsTitle.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)pictureBindings).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pictureAlly).BeginInit(); + panelBinding.SuspendLayout(); SuspendLayout(); // - // panelController + // panelDeadzones // - panelController.AutoSize = true; - panelController.Controls.Add(buttonReset); - panelController.Controls.Add(panelVibra); - panelController.Controls.Add(panelVibrationTitle); - panelController.Controls.Add(panelRT); - panelController.Controls.Add(panelLT); - panelController.Controls.Add(panelTDeadzone); - panelController.Controls.Add(panelRS); - panelController.Controls.Add(panelLS); - panelController.Controls.Add(panelSDeadzone); - panelController.Dock = DockStyle.Left; - panelController.Location = new Point(10, 10); - panelController.Margin = new Padding(4); - panelController.MinimumSize = new Size(560, 800); - panelController.Name = "panelController"; - panelController.Padding = new Padding(0, 0, 0, 18); - panelController.Size = new Size(560, 912); - panelController.TabIndex = 45; + panelDeadzones.Controls.Add(panelRight); + panelDeadzones.Controls.Add(panelLeft); + panelDeadzones.Dock = DockStyle.Top; + panelDeadzones.Location = new Point(10, 10); + panelDeadzones.Name = "panelDeadzones"; + panelDeadzones.Size = new Size(1130, 372); + panelDeadzones.TabIndex = 0; + // + // panelRight + // + panelRight.Controls.Add(buttonReset); + panelRight.Controls.Add(panelRT); + panelRight.Controls.Add(panelRS); + panelRight.Dock = DockStyle.Left; + panelRight.Location = new Point(560, 0); + panelRight.MinimumSize = new Size(560, 0); + panelRight.Name = "panelRight"; + panelRight.Size = new Size(560, 372); + panelRight.TabIndex = 48; // // buttonReset // @@ -126,115 +144,44 @@ buttonReset.BorderColor = Color.Transparent; buttonReset.BorderRadius = 2; buttonReset.FlatStyle = FlatStyle.Flat; - buttonReset.Location = new Point(20, 840); + buttonReset.Location = new Point(310, 296); buttonReset.Margin = new Padding(4, 2, 4, 2); buttonReset.Name = "buttonReset"; buttonReset.Secondary = true; buttonReset.Size = new Size(239, 50); - buttonReset.TabIndex = 54; - buttonReset.Text = "Reset"; + buttonReset.TabIndex = 55; + buttonReset.Text = "Reset Deadzones"; buttonReset.UseVisualStyleBackColor = false; // - // panelVibra - // - panelVibra.AutoSize = true; - panelVibra.AutoSizeMode = AutoSizeMode.GrowAndShrink; - panelVibra.Controls.Add(labelVibra); - panelVibra.Controls.Add(labelVibraTitle); - panelVibra.Controls.Add(trackVibra); - panelVibra.Dock = DockStyle.Top; - panelVibra.Location = new Point(0, 676); - panelVibra.Margin = new Padding(4); - panelVibra.MaximumSize = new Size(0, 124); - panelVibra.Name = "panelVibra"; - panelVibra.Size = new Size(560, 124); - panelVibra.TabIndex = 46; - // - // labelVibra - // - labelVibra.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); - labelVibra.Location = new Point(408, 14); - labelVibra.Margin = new Padding(4, 0, 4, 0); - labelVibra.Name = "labelVibra"; - labelVibra.Size = new Size(124, 32); - labelVibra.TabIndex = 44; - labelVibra.Text = "100%"; - labelVibra.TextAlign = ContentAlignment.TopRight; - // - // labelVibraTitle - // - labelVibraTitle.AutoSize = true; - labelVibraTitle.Location = new Point(10, 14); - labelVibraTitle.Margin = new Padding(4, 0, 4, 0); - labelVibraTitle.Name = "labelVibraTitle"; - labelVibraTitle.Size = new Size(209, 32); - labelVibraTitle.TabIndex = 43; - labelVibraTitle.Text = "Vibration Strength"; - // - // trackVibra - // - trackVibra.Location = new Point(6, 48); - trackVibra.Margin = new Padding(4, 2, 4, 2); - trackVibra.Maximum = 100; - trackVibra.Name = "trackVibra"; - trackVibra.Size = new Size(546, 90); - trackVibra.TabIndex = 42; - trackVibra.TickFrequency = 5; - trackVibra.TickStyle = TickStyle.TopLeft; - trackVibra.Value = 100; - // - // panelVibrationTitle - // - panelVibrationTitle.AutoSize = true; - panelVibrationTitle.AutoSizeMode = AutoSizeMode.GrowAndShrink; - panelVibrationTitle.Controls.Add(pictureVibration); - panelVibrationTitle.Controls.Add(labelVibraHeader); - panelVibrationTitle.Dock = DockStyle.Top; - panelVibrationTitle.Location = new Point(0, 616); - panelVibrationTitle.Margin = new Padding(4); - panelVibrationTitle.Name = "panelVibrationTitle"; - panelVibrationTitle.Size = new Size(560, 60); - panelVibrationTitle.TabIndex = 53; - // - // pictureVibration - // - pictureVibration.BackgroundImage = Properties.Resources.icons8_soonvibes_32; - pictureVibration.BackgroundImageLayout = ImageLayout.Zoom; - pictureVibration.ErrorImage = null; - pictureVibration.InitialImage = null; - pictureVibration.Location = new Point(10, 18); - pictureVibration.Margin = new Padding(4, 2, 4, 10); - pictureVibration.Name = "pictureVibration"; - pictureVibration.Size = new Size(32, 32); - pictureVibration.TabIndex = 41; - pictureVibration.TabStop = false; - // - // labelVibraHeader - // - labelVibraHeader.AutoSize = true; - labelVibraHeader.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); - labelVibraHeader.Location = new Point(45, 17); - labelVibraHeader.Margin = new Padding(4, 0, 4, 0); - labelVibraHeader.Name = "labelVibraHeader"; - labelVibraHeader.Size = new Size(121, 32); - labelVibraHeader.TabIndex = 40; - labelVibraHeader.Text = "Vibration"; - // // panelRT // panelRT.AutoSize = true; panelRT.AutoSizeMode = AutoSizeMode.GrowAndShrink; + panelRT.Controls.Add(pictureBox4); panelRT.Controls.Add(trackRTMax); panelRT.Controls.Add(labelRT); panelRT.Controls.Add(trackRTMin); panelRT.Controls.Add(labelRTTitle); panelRT.Dock = DockStyle.Top; - panelRT.Location = new Point(0, 492); + panelRT.Location = new Point(0, 124); panelRT.Margin = new Padding(4); panelRT.MaximumSize = new Size(0, 124); panelRT.Name = "panelRT"; panelRT.Size = new Size(560, 124); - panelRT.TabIndex = 50; + panelRT.TabIndex = 51; + // + // pictureBox4 + // + pictureBox4.BackgroundImage = Properties.Resources.icons8_xbox_lt_32; + pictureBox4.BackgroundImageLayout = ImageLayout.Zoom; + pictureBox4.ErrorImage = null; + pictureBox4.InitialImage = null; + pictureBox4.Location = new Point(16, 18); + pictureBox4.Margin = new Padding(4, 2, 4, 10); + pictureBox4.Name = "pictureBox4"; + pictureBox4.Size = new Size(32, 32); + pictureBox4.TabIndex = 43; + pictureBox4.TabStop = false; // // trackRTMax // @@ -278,130 +225,42 @@ // labelRTTitle // labelRTTitle.AutoSize = true; - labelRTTitle.Location = new Point(10, 16); + labelRTTitle.Location = new Point(56, 16); labelRTTitle.Margin = new Padding(4, 0, 4, 0); labelRTTitle.Name = "labelRTTitle"; - labelRTTitle.Size = new Size(151, 32); + labelRTTitle.Size = new Size(276, 32); labelRTTitle.TabIndex = 17; - labelRTTitle.Text = "Right Trigger"; - // - // panelLT - // - panelLT.AutoSize = true; - panelLT.AutoSizeMode = AutoSizeMode.GrowAndShrink; - panelLT.Controls.Add(trackLTMax); - panelLT.Controls.Add(labelLT); - panelLT.Controls.Add(trackLTMin); - panelLT.Controls.Add(labelLTTitle); - panelLT.Dock = DockStyle.Top; - panelLT.Location = new Point(0, 368); - panelLT.Margin = new Padding(4); - panelLT.MaximumSize = new Size(0, 124); - panelLT.Name = "panelLT"; - panelLT.Size = new Size(560, 124); - panelLT.TabIndex = 51; - // - // trackLTMax - // - trackLTMax.Location = new Point(272, 48); - trackLTMax.Margin = new Padding(4, 2, 4, 2); - trackLTMax.Maximum = 100; - trackLTMax.Minimum = 50; - trackLTMax.Name = "trackLTMax"; - trackLTMax.RightToLeft = RightToLeft.No; - trackLTMax.Size = new Size(280, 90); - trackLTMax.TabIndex = 30; - trackLTMax.TickFrequency = 5; - trackLTMax.TickStyle = TickStyle.TopLeft; - trackLTMax.Value = 100; - // - // labelLT - // - labelLT.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); - labelLT.Location = new Point(363, 13); - labelLT.Margin = new Padding(4, 0, 4, 0); - labelLT.Name = "labelLT"; - labelLT.Size = new Size(176, 32); - labelLT.TabIndex = 29; - labelLT.Text = "0 - 100%"; - labelLT.TextAlign = ContentAlignment.TopRight; - // - // trackLTMin - // - trackLTMin.LargeChange = 100; - trackLTMin.Location = new Point(6, 48); - trackLTMin.Margin = new Padding(4, 2, 4, 2); - trackLTMin.Maximum = 50; - trackLTMin.Name = "trackLTMin"; - trackLTMin.RightToLeft = RightToLeft.No; - trackLTMin.Size = new Size(280, 90); - trackLTMin.SmallChange = 10; - trackLTMin.TabIndex = 18; - trackLTMin.TickFrequency = 5; - trackLTMin.TickStyle = TickStyle.TopLeft; - // - // labelLTTitle - // - labelLTTitle.AutoSize = true; - labelLTTitle.Location = new Point(10, 16); - labelLTTitle.Margin = new Padding(4, 0, 4, 0); - labelLTTitle.Name = "labelLTTitle"; - labelLTTitle.Size = new Size(135, 32); - labelLTTitle.TabIndex = 17; - labelLTTitle.Text = "Left Trigger"; - // - // panelTDeadzone - // - panelTDeadzone.AutoSize = true; - panelTDeadzone.AutoSizeMode = AutoSizeMode.GrowAndShrink; - panelTDeadzone.Controls.Add(pictureTDeadzone); - panelTDeadzone.Controls.Add(labelTDeadzone); - panelTDeadzone.Dock = DockStyle.Top; - panelTDeadzone.Location = new Point(0, 308); - panelTDeadzone.Margin = new Padding(4); - panelTDeadzone.Name = "panelTDeadzone"; - panelTDeadzone.Size = new Size(560, 60); - panelTDeadzone.TabIndex = 52; - // - // pictureTDeadzone - // - pictureTDeadzone.BackgroundImage = Properties.Resources.icons8_xbox_lt_32; - pictureTDeadzone.BackgroundImageLayout = ImageLayout.Zoom; - pictureTDeadzone.ErrorImage = null; - pictureTDeadzone.InitialImage = null; - pictureTDeadzone.Location = new Point(10, 18); - pictureTDeadzone.Margin = new Padding(4, 2, 4, 10); - pictureTDeadzone.Name = "pictureTDeadzone"; - pictureTDeadzone.Size = new Size(32, 32); - pictureTDeadzone.TabIndex = 41; - pictureTDeadzone.TabStop = false; - // - // labelTDeadzone - // - labelTDeadzone.AutoSize = true; - labelTDeadzone.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); - labelTDeadzone.Location = new Point(45, 17); - labelTDeadzone.Margin = new Padding(4, 0, 4, 0); - labelTDeadzone.Name = "labelTDeadzone"; - labelTDeadzone.Size = new Size(228, 32); - labelTDeadzone.TabIndex = 40; - labelTDeadzone.Text = "Trigger Deadzones"; + labelRTTitle.Text = "Right Trigger Deadzones"; // // panelRS // panelRS.AutoSize = true; panelRS.AutoSizeMode = AutoSizeMode.GrowAndShrink; + panelRS.Controls.Add(pictureBox1); panelRS.Controls.Add(trackRSMax); panelRS.Controls.Add(labelRS); panelRS.Controls.Add(trackRSMin); panelRS.Controls.Add(labelRSTitle); panelRS.Dock = DockStyle.Top; - panelRS.Location = new Point(0, 184); + panelRS.Location = new Point(0, 0); panelRS.Margin = new Padding(4); panelRS.MaximumSize = new Size(0, 124); panelRS.Name = "panelRS"; panelRS.Size = new Size(560, 124); - panelRS.TabIndex = 49; + panelRS.TabIndex = 50; + // + // pictureBox1 + // + pictureBox1.BackgroundImage = Properties.Resources.icons8_joystick_32; + pictureBox1.BackgroundImageLayout = ImageLayout.Zoom; + pictureBox1.ErrorImage = null; + pictureBox1.InitialImage = null; + pictureBox1.Location = new Point(16, 14); + pictureBox1.Margin = new Padding(4, 2, 4, 10); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new Size(32, 32); + pictureBox1.TabIndex = 43; + pictureBox1.TabStop = false; // // trackRSMax // @@ -445,29 +304,199 @@ // labelRSTitle // labelRSTitle.AutoSize = true; - labelRSTitle.Location = new Point(10, 16); + labelRSTitle.Location = new Point(56, 14); labelRSTitle.Margin = new Padding(4, 0, 4, 0); labelRSTitle.Name = "labelRSTitle"; - labelRSTitle.Size = new Size(126, 32); + labelRSTitle.Size = new Size(251, 32); labelRSTitle.TabIndex = 17; - labelRSTitle.Text = "Right Stick"; + labelRSTitle.Text = "Right Stick Deadzones"; + // + // panelLeft + // + panelLeft.AutoSize = true; + panelLeft.Controls.Add(panelVibra); + panelLeft.Controls.Add(panelLT); + panelLeft.Controls.Add(panelLS); + panelLeft.Dock = DockStyle.Left; + panelLeft.Location = new Point(0, 0); + panelLeft.Margin = new Padding(4); + panelLeft.MinimumSize = new Size(560, 0); + panelLeft.Name = "panelLeft"; + panelLeft.Padding = new Padding(0, 0, 0, 18); + panelLeft.Size = new Size(560, 372); + panelLeft.TabIndex = 47; + // + // panelVibra + // + panelVibra.AutoSize = true; + panelVibra.AutoSizeMode = AutoSizeMode.GrowAndShrink; + panelVibra.Controls.Add(pictureBox5); + panelVibra.Controls.Add(labelVibra); + panelVibra.Controls.Add(labelVibraTitle); + panelVibra.Controls.Add(trackVibra); + panelVibra.Dock = DockStyle.Top; + panelVibra.Location = new Point(0, 248); + panelVibra.Margin = new Padding(4); + panelVibra.MaximumSize = new Size(0, 124); + panelVibra.Name = "panelVibra"; + panelVibra.Size = new Size(560, 124); + panelVibra.TabIndex = 46; + // + // pictureBox5 + // + pictureBox5.BackgroundImage = Properties.Resources.icons8_soonvibes_32; + pictureBox5.BackgroundImageLayout = ImageLayout.Zoom; + pictureBox5.ErrorImage = null; + pictureBox5.InitialImage = null; + pictureBox5.Location = new Point(10, 14); + pictureBox5.Margin = new Padding(4, 2, 4, 10); + pictureBox5.Name = "pictureBox5"; + pictureBox5.Size = new Size(32, 32); + pictureBox5.TabIndex = 45; + pictureBox5.TabStop = false; + // + // labelVibra + // + labelVibra.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); + labelVibra.Location = new Point(408, 14); + labelVibra.Margin = new Padding(4, 0, 4, 0); + labelVibra.Name = "labelVibra"; + labelVibra.Size = new Size(124, 32); + labelVibra.TabIndex = 44; + labelVibra.Text = "100%"; + labelVibra.TextAlign = ContentAlignment.TopRight; + // + // labelVibraTitle + // + labelVibraTitle.AutoSize = true; + labelVibraTitle.Location = new Point(77, 14); + labelVibraTitle.Margin = new Padding(4, 0, 4, 0); + labelVibraTitle.Name = "labelVibraTitle"; + labelVibraTitle.Size = new Size(209, 32); + labelVibraTitle.TabIndex = 43; + labelVibraTitle.Text = "Vibration Strength"; + // + // trackVibra + // + trackVibra.Location = new Point(6, 48); + trackVibra.Margin = new Padding(4, 2, 4, 2); + trackVibra.Maximum = 100; + trackVibra.Name = "trackVibra"; + trackVibra.Size = new Size(546, 90); + trackVibra.TabIndex = 42; + trackVibra.TickFrequency = 5; + trackVibra.TickStyle = TickStyle.TopLeft; + trackVibra.Value = 100; + // + // panelLT + // + panelLT.AutoSize = true; + panelLT.AutoSizeMode = AutoSizeMode.GrowAndShrink; + panelLT.Controls.Add(pictureBox2); + panelLT.Controls.Add(trackLTMax); + panelLT.Controls.Add(labelLT); + panelLT.Controls.Add(trackLTMin); + panelLT.Controls.Add(labelLTTitle); + panelLT.Dock = DockStyle.Top; + panelLT.Location = new Point(0, 124); + panelLT.Margin = new Padding(4); + panelLT.MaximumSize = new Size(0, 124); + panelLT.Name = "panelLT"; + panelLT.Size = new Size(560, 124); + panelLT.TabIndex = 51; + // + // pictureBox2 + // + pictureBox2.BackgroundImage = Properties.Resources.icons8_xbox_lt_32; + pictureBox2.BackgroundImageLayout = ImageLayout.Zoom; + pictureBox2.ErrorImage = null; + pictureBox2.InitialImage = null; + pictureBox2.Location = new Point(20, 14); + pictureBox2.Margin = new Padding(4, 2, 4, 10); + pictureBox2.Name = "pictureBox2"; + pictureBox2.Size = new Size(32, 32); + pictureBox2.TabIndex = 42; + pictureBox2.TabStop = false; + // + // trackLTMax + // + trackLTMax.Location = new Point(272, 48); + trackLTMax.Margin = new Padding(4, 2, 4, 2); + trackLTMax.Maximum = 100; + trackLTMax.Minimum = 50; + trackLTMax.Name = "trackLTMax"; + trackLTMax.RightToLeft = RightToLeft.No; + trackLTMax.Size = new Size(280, 90); + trackLTMax.TabIndex = 30; + trackLTMax.TickFrequency = 5; + trackLTMax.TickStyle = TickStyle.TopLeft; + trackLTMax.Value = 100; + // + // labelLT + // + labelLT.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); + labelLT.Location = new Point(363, 13); + labelLT.Margin = new Padding(4, 0, 4, 0); + labelLT.Name = "labelLT"; + labelLT.Size = new Size(176, 32); + labelLT.TabIndex = 29; + labelLT.Text = "0 - 100%"; + labelLT.TextAlign = ContentAlignment.TopRight; + // + // trackLTMin + // + trackLTMin.LargeChange = 100; + trackLTMin.Location = new Point(6, 48); + trackLTMin.Margin = new Padding(4, 2, 4, 2); + trackLTMin.Maximum = 50; + trackLTMin.Name = "trackLTMin"; + trackLTMin.RightToLeft = RightToLeft.No; + trackLTMin.Size = new Size(280, 90); + trackLTMin.SmallChange = 10; + trackLTMin.TabIndex = 18; + trackLTMin.TickFrequency = 5; + trackLTMin.TickStyle = TickStyle.TopLeft; + // + // labelLTTitle + // + labelLTTitle.AutoSize = true; + labelLTTitle.Location = new Point(60, 14); + labelLTTitle.Margin = new Padding(4, 0, 4, 0); + labelLTTitle.Name = "labelLTTitle"; + labelLTTitle.Size = new Size(260, 32); + labelLTTitle.TabIndex = 17; + labelLTTitle.Text = "Left Trigger Deadzones"; // // panelLS // panelLS.AutoSize = true; panelLS.AutoSizeMode = AutoSizeMode.GrowAndShrink; + panelLS.Controls.Add(pictureBox3); panelLS.Controls.Add(trackLSMax); panelLS.Controls.Add(labelLS); panelLS.Controls.Add(trackLSMin); panelLS.Controls.Add(labelLSTitle); panelLS.Dock = DockStyle.Top; - panelLS.Location = new Point(0, 60); + panelLS.Location = new Point(0, 0); panelLS.Margin = new Padding(4); panelLS.MaximumSize = new Size(0, 124); panelLS.Name = "panelLS"; panelLS.Size = new Size(560, 124); panelLS.TabIndex = 48; // + // pictureBox3 + // + pictureBox3.BackgroundImage = Properties.Resources.icons8_joystick_32; + pictureBox3.BackgroundImageLayout = ImageLayout.Zoom; + pictureBox3.ErrorImage = null; + pictureBox3.InitialImage = null; + pictureBox3.Location = new Point(20, 13); + pictureBox3.Margin = new Padding(4, 2, 4, 10); + pictureBox3.Name = "pictureBox3"; + pictureBox3.Size = new Size(32, 32); + pictureBox3.TabIndex = 42; + pictureBox3.TabStop = false; + // // trackLSMax // trackLSMax.Location = new Point(272, 48); @@ -510,148 +539,488 @@ // labelLSTitle // labelLSTitle.AutoSize = true; - labelLSTitle.Location = new Point(10, 16); + labelLSTitle.Location = new Point(56, 13); labelLSTitle.Margin = new Padding(4, 0, 4, 0); labelLSTitle.Name = "labelLSTitle"; - labelLSTitle.Size = new Size(110, 32); + labelLSTitle.Size = new Size(235, 32); labelLSTitle.TabIndex = 17; - labelLSTitle.Text = "Left Stick"; - // - // panelSDeadzone - // - panelSDeadzone.AutoSize = true; - panelSDeadzone.AutoSizeMode = AutoSizeMode.GrowAndShrink; - panelSDeadzone.Controls.Add(pictureSDeadzone); - panelSDeadzone.Controls.Add(labelSDeadzone); - panelSDeadzone.Dock = DockStyle.Top; - panelSDeadzone.Location = new Point(0, 0); - panelSDeadzone.Margin = new Padding(4); - panelSDeadzone.Name = "panelSDeadzone"; - panelSDeadzone.Size = new Size(560, 60); - panelSDeadzone.TabIndex = 43; - // - // pictureSDeadzone - // - pictureSDeadzone.BackgroundImage = Properties.Resources.icons8_joystick_32; - pictureSDeadzone.BackgroundImageLayout = ImageLayout.Zoom; - pictureSDeadzone.ErrorImage = null; - pictureSDeadzone.InitialImage = null; - pictureSDeadzone.Location = new Point(10, 18); - pictureSDeadzone.Margin = new Padding(4, 2, 4, 10); - pictureSDeadzone.Name = "pictureSDeadzone"; - pictureSDeadzone.Size = new Size(32, 32); - pictureSDeadzone.TabIndex = 41; - pictureSDeadzone.TabStop = false; - // - // labelSDeadzone - // - labelSDeadzone.AutoSize = true; - labelSDeadzone.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); - labelSDeadzone.Location = new Point(45, 17); - labelSDeadzone.Margin = new Padding(4, 0, 4, 0); - labelSDeadzone.Name = "labelSDeadzone"; - labelSDeadzone.Size = new Size(199, 32); - labelSDeadzone.TabIndex = 40; - labelSDeadzone.Text = "Stick Deadzones"; + labelLSTitle.Text = "Left Stick Deadzones"; // // panelBindings // - panelBindings.Controls.Add(tableBindings); - panelBindings.Controls.Add(panelBindingsTitle); - panelBindings.Dock = DockStyle.Left; - panelBindings.Location = new Point(570, 10); - panelBindings.MinimumSize = new Size(700, 0); + panelBindings.Controls.Add(panelBinding); + panelBindings.Controls.Add(buttonView); + panelBindings.Controls.Add(buttonLS); + panelBindings.Controls.Add(buttonLT); + panelBindings.Controls.Add(buttonLB); + panelBindings.Controls.Add(buttonDPR); + panelBindings.Controls.Add(buttonDPL); + panelBindings.Controls.Add(buttonDPD); + panelBindings.Controls.Add(buttonDPU); + panelBindings.Controls.Add(buttonM2); + panelBindings.Controls.Add(buttonM1); + panelBindings.Controls.Add(buttonRS); + panelBindings.Controls.Add(buttonMenu); + panelBindings.Controls.Add(buttonRT); + panelBindings.Controls.Add(buttonRB); + panelBindings.Controls.Add(buttonB); + panelBindings.Controls.Add(buttonA); + panelBindings.Controls.Add(buttonY); + panelBindings.Controls.Add(buttonX); + panelBindings.Controls.Add(pictureAlly); + panelBindings.Dock = DockStyle.Top; + panelBindings.Location = new Point(10, 382); panelBindings.Name = "panelBindings"; - panelBindings.Size = new Size(700, 912); - panelBindings.TabIndex = 46; + panelBindings.Size = new Size(1130, 480); + panelBindings.TabIndex = 1; // - // tableBindings + // buttonView // - tableBindings.AutoSize = true; - tableBindings.ColumnCount = 3; - tableBindings.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20F)); - tableBindings.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 40F)); - tableBindings.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 40F)); - tableBindings.Controls.Add(labelPrimary, 1, 0); - tableBindings.Controls.Add(labelSecondary, 2, 0); - tableBindings.Dock = DockStyle.Top; - tableBindings.Location = new Point(0, 60); - tableBindings.Name = "tableBindings"; - tableBindings.Padding = new Padding(5); - tableBindings.RowCount = 1; - tableBindings.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); - tableBindings.Size = new Size(700, 52); - tableBindings.TabIndex = 49; + buttonView.Activated = false; + buttonView.BackColor = SystemColors.ControlLight; + buttonView.BorderColor = Color.Transparent; + buttonView.BorderRadius = 5; + buttonView.FlatAppearance.BorderSize = 0; + buttonView.FlatStyle = FlatStyle.Flat; + buttonView.ForeColor = SystemColors.ControlText; + buttonView.ImageAlign = ContentAlignment.MiddleRight; + buttonView.Location = new Point(175, 8); + buttonView.Margin = new Padding(4); + buttonView.Name = "buttonView"; + buttonView.Secondary = true; + buttonView.Size = new Size(147, 55); + buttonView.TabIndex = 36; + buttonView.Text = "View"; + buttonView.TextImageRelation = TextImageRelation.ImageBeforeText; + buttonView.UseVisualStyleBackColor = false; // - // labelPrimary + // buttonLS // - labelPrimary.AutoSize = true; - labelPrimary.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); - labelPrimary.Location = new Point(147, 5); - labelPrimary.Margin = new Padding(4, 0, 4, 0); - labelPrimary.Name = "labelPrimary"; - labelPrimary.Padding = new Padding(5); - labelPrimary.Size = new Size(115, 42); - labelPrimary.TabIndex = 41; - labelPrimary.Text = "Primary"; + buttonLS.Activated = false; + buttonLS.BackColor = SystemColors.ControlLight; + buttonLS.BorderColor = Color.Transparent; + buttonLS.BorderRadius = 5; + buttonLS.FlatAppearance.BorderSize = 0; + buttonLS.FlatStyle = FlatStyle.Flat; + buttonLS.ForeColor = SystemColors.ControlText; + buttonLS.ImageAlign = ContentAlignment.MiddleRight; + buttonLS.Location = new Point(20, 385); + buttonLS.Margin = new Padding(4); + buttonLS.Name = "buttonLS"; + buttonLS.Secondary = true; + buttonLS.Size = new Size(147, 55); + buttonLS.TabIndex = 35; + buttonLS.Text = "LStick"; + buttonLS.TextImageRelation = TextImageRelation.ImageBeforeText; + buttonLS.UseVisualStyleBackColor = false; + // + // buttonLT + // + buttonLT.Activated = false; + buttonLT.BackColor = SystemColors.ControlLight; + buttonLT.BorderColor = Color.Transparent; + buttonLT.BorderRadius = 5; + buttonLT.FlatAppearance.BorderSize = 0; + buttonLT.FlatStyle = FlatStyle.Flat; + buttonLT.ForeColor = SystemColors.ControlText; + buttonLT.ImageAlign = ContentAlignment.MiddleRight; + buttonLT.Location = new Point(20, 70); + buttonLT.Margin = new Padding(4); + buttonLT.Name = "buttonLT"; + buttonLT.Secondary = true; + buttonLT.Size = new Size(147, 55); + buttonLT.TabIndex = 34; + buttonLT.Text = "LTrigger"; + buttonLT.TextImageRelation = TextImageRelation.ImageBeforeText; + buttonLT.UseVisualStyleBackColor = false; + // + // buttonLB + // + buttonLB.Activated = false; + buttonLB.BackColor = SystemColors.ControlLight; + buttonLB.BorderColor = Color.Transparent; + buttonLB.BorderRadius = 5; + buttonLB.FlatAppearance.BorderSize = 0; + buttonLB.FlatStyle = FlatStyle.Flat; + buttonLB.ForeColor = SystemColors.ControlText; + buttonLB.ImageAlign = ContentAlignment.MiddleRight; + buttonLB.Location = new Point(20, 7); + buttonLB.Margin = new Padding(4); + buttonLB.Name = "buttonLB"; + buttonLB.Secondary = true; + buttonLB.Size = new Size(147, 55); + buttonLB.TabIndex = 33; + buttonLB.Text = "LBumper"; + buttonLB.TextImageRelation = TextImageRelation.ImageBeforeText; + buttonLB.UseVisualStyleBackColor = false; + // + // buttonDPR + // + buttonDPR.Activated = false; + buttonDPR.BackColor = SystemColors.ControlLight; + buttonDPR.BorderColor = Color.Transparent; + buttonDPR.BorderRadius = 5; + buttonDPR.FlatAppearance.BorderSize = 0; + buttonDPR.FlatStyle = FlatStyle.Flat; + buttonDPR.ForeColor = SystemColors.ControlText; + buttonDPR.ImageAlign = ContentAlignment.MiddleRight; + buttonDPR.Location = new Point(20, 322); + buttonDPR.Margin = new Padding(4); + buttonDPR.Name = "buttonDPR"; + buttonDPR.Secondary = true; + buttonDPR.Size = new Size(147, 55); + buttonDPR.TabIndex = 32; + buttonDPR.Text = "DpadRight"; + buttonDPR.TextImageRelation = TextImageRelation.ImageBeforeText; + buttonDPR.UseVisualStyleBackColor = false; + // + // buttonDPL + // + buttonDPL.Activated = false; + buttonDPL.BackColor = SystemColors.ControlLight; + buttonDPL.BorderColor = Color.Transparent; + buttonDPL.BorderRadius = 5; + buttonDPL.FlatAppearance.BorderSize = 0; + buttonDPL.FlatStyle = FlatStyle.Flat; + buttonDPL.ForeColor = SystemColors.ControlText; + buttonDPL.ImageAlign = ContentAlignment.MiddleRight; + buttonDPL.Location = new Point(20, 259); + buttonDPL.Margin = new Padding(4); + buttonDPL.Name = "buttonDPL"; + buttonDPL.Secondary = true; + buttonDPL.Size = new Size(147, 55); + buttonDPL.TabIndex = 31; + buttonDPL.Text = "DpadLeft"; + buttonDPL.TextImageRelation = TextImageRelation.ImageBeforeText; + buttonDPL.UseVisualStyleBackColor = false; + // + // buttonDPD + // + buttonDPD.Activated = false; + buttonDPD.BackColor = SystemColors.ControlLight; + buttonDPD.BorderColor = Color.Transparent; + buttonDPD.BorderRadius = 5; + buttonDPD.FlatAppearance.BorderSize = 0; + buttonDPD.FlatStyle = FlatStyle.Flat; + buttonDPD.ForeColor = SystemColors.ControlText; + buttonDPD.ImageAlign = ContentAlignment.MiddleRight; + buttonDPD.Location = new Point(20, 196); + buttonDPD.Margin = new Padding(4); + buttonDPD.Name = "buttonDPD"; + buttonDPD.Secondary = true; + buttonDPD.Size = new Size(147, 55); + buttonDPD.TabIndex = 30; + buttonDPD.Text = "DpadDown"; + buttonDPD.TextImageRelation = TextImageRelation.ImageBeforeText; + buttonDPD.UseVisualStyleBackColor = false; + // + // buttonDPU + // + buttonDPU.Activated = false; + buttonDPU.BackColor = SystemColors.ControlLight; + buttonDPU.BorderColor = Color.Transparent; + buttonDPU.BorderRadius = 5; + buttonDPU.FlatAppearance.BorderSize = 0; + buttonDPU.FlatStyle = FlatStyle.Flat; + buttonDPU.ForeColor = SystemColors.ControlText; + buttonDPU.ImageAlign = ContentAlignment.MiddleRight; + buttonDPU.Location = new Point(20, 133); + buttonDPU.Margin = new Padding(4); + buttonDPU.Name = "buttonDPU"; + buttonDPU.Secondary = true; + buttonDPU.Size = new Size(147, 55); + buttonDPU.TabIndex = 29; + buttonDPU.Text = "DpadUp"; + buttonDPU.TextImageRelation = TextImageRelation.ImageBeforeText; + buttonDPU.UseVisualStyleBackColor = false; + // + // buttonM2 + // + buttonM2.Activated = false; + buttonM2.BackColor = SystemColors.ControlLight; + buttonM2.BorderColor = Color.Transparent; + buttonM2.BorderRadius = 5; + buttonM2.FlatAppearance.BorderSize = 0; + buttonM2.FlatStyle = FlatStyle.Flat; + buttonM2.ForeColor = SystemColors.ControlText; + buttonM2.ImageAlign = ContentAlignment.MiddleRight; + buttonM2.Location = new Point(330, 8); + buttonM2.Margin = new Padding(4); + buttonM2.Name = "buttonM2"; + buttonM2.Secondary = true; + buttonM2.Size = new Size(147, 55); + buttonM2.TabIndex = 28; + buttonM2.Text = "M2"; + buttonM2.TextImageRelation = TextImageRelation.ImageBeforeText; + buttonM2.UseVisualStyleBackColor = false; + // + // buttonM1 + // + buttonM1.Activated = false; + buttonM1.BackColor = SystemColors.ControlLight; + buttonM1.BorderColor = Color.Transparent; + buttonM1.BorderRadius = 5; + buttonM1.FlatAppearance.BorderSize = 0; + buttonM1.FlatStyle = FlatStyle.Flat; + buttonM1.ForeColor = SystemColors.ControlText; + buttonM1.ImageAlign = ContentAlignment.MiddleRight; + buttonM1.Location = new Point(650, 8); + buttonM1.Margin = new Padding(4); + buttonM1.Name = "buttonM1"; + buttonM1.Secondary = true; + buttonM1.Size = new Size(147, 55); + buttonM1.TabIndex = 27; + buttonM1.Text = "M1"; + buttonM1.TextImageRelation = TextImageRelation.ImageBeforeText; + buttonM1.UseVisualStyleBackColor = false; + // + // buttonRS + // + buttonRS.Activated = false; + buttonRS.BackColor = SystemColors.ControlLight; + buttonRS.BorderColor = Color.Transparent; + buttonRS.BorderRadius = 5; + buttonRS.FlatAppearance.BorderSize = 0; + buttonRS.FlatStyle = FlatStyle.Flat; + buttonRS.ForeColor = SystemColors.ControlText; + buttonRS.ImageAlign = ContentAlignment.MiddleRight; + buttonRS.Location = new Point(962, 385); + buttonRS.Margin = new Padding(4); + buttonRS.Name = "buttonRS"; + buttonRS.Secondary = true; + buttonRS.Size = new Size(147, 55); + buttonRS.TabIndex = 23; + buttonRS.Text = "RStick"; + buttonRS.TextImageRelation = TextImageRelation.ImageBeforeText; + buttonRS.UseVisualStyleBackColor = false; + // + // buttonMenu + // + buttonMenu.Activated = false; + buttonMenu.BackColor = SystemColors.ControlLight; + buttonMenu.BorderColor = Color.Transparent; + buttonMenu.BorderRadius = 5; + buttonMenu.FlatAppearance.BorderSize = 0; + buttonMenu.FlatStyle = FlatStyle.Flat; + buttonMenu.ForeColor = SystemColors.ControlText; + buttonMenu.ImageAlign = ContentAlignment.MiddleRight; + buttonMenu.Location = new Point(805, 8); + buttonMenu.Margin = new Padding(4); + buttonMenu.Name = "buttonMenu"; + buttonMenu.Secondary = true; + buttonMenu.Size = new Size(147, 55); + buttonMenu.TabIndex = 22; + buttonMenu.Text = "Menu"; + buttonMenu.TextImageRelation = TextImageRelation.ImageBeforeText; + buttonMenu.UseVisualStyleBackColor = false; + // + // buttonRT + // + buttonRT.Activated = false; + buttonRT.BackColor = SystemColors.ControlLight; + buttonRT.BorderColor = Color.Transparent; + buttonRT.BorderRadius = 5; + buttonRT.FlatAppearance.BorderSize = 0; + buttonRT.FlatStyle = FlatStyle.Flat; + buttonRT.ForeColor = SystemColors.ControlText; + buttonRT.ImageAlign = ContentAlignment.MiddleRight; + buttonRT.Location = new Point(962, 70); + buttonRT.Margin = new Padding(4); + buttonRT.Name = "buttonRT"; + buttonRT.Secondary = true; + buttonRT.Size = new Size(147, 55); + buttonRT.TabIndex = 21; + buttonRT.Text = "RTrigger"; + buttonRT.TextImageRelation = TextImageRelation.ImageBeforeText; + buttonRT.UseVisualStyleBackColor = false; + // + // buttonRB + // + buttonRB.Activated = false; + buttonRB.BackColor = SystemColors.ControlLight; + buttonRB.BorderColor = Color.Transparent; + buttonRB.BorderRadius = 5; + buttonRB.FlatAppearance.BorderSize = 0; + buttonRB.FlatStyle = FlatStyle.Flat; + buttonRB.ForeColor = SystemColors.ControlText; + buttonRB.ImageAlign = ContentAlignment.MiddleRight; + buttonRB.Location = new Point(962, 7); + buttonRB.Margin = new Padding(4); + buttonRB.Name = "buttonRB"; + buttonRB.Secondary = true; + buttonRB.Size = new Size(147, 55); + buttonRB.TabIndex = 20; + buttonRB.Text = "RBumper"; + buttonRB.TextImageRelation = TextImageRelation.ImageBeforeText; + buttonRB.UseVisualStyleBackColor = false; + // + // buttonB + // + buttonB.Activated = false; + buttonB.BackColor = SystemColors.ControlLight; + buttonB.BorderColor = Color.Transparent; + buttonB.BorderRadius = 5; + buttonB.FlatAppearance.BorderSize = 0; + buttonB.FlatStyle = FlatStyle.Flat; + buttonB.ForeColor = SystemColors.ControlText; + buttonB.ImageAlign = ContentAlignment.MiddleRight; + buttonB.Location = new Point(962, 322); + buttonB.Margin = new Padding(4); + buttonB.Name = "buttonB"; + buttonB.Secondary = true; + buttonB.Size = new Size(147, 55); + buttonB.TabIndex = 19; + buttonB.Text = "B"; + buttonB.TextImageRelation = TextImageRelation.ImageBeforeText; + buttonB.UseVisualStyleBackColor = false; + // + // buttonA + // + buttonA.Activated = false; + buttonA.BackColor = SystemColors.ControlLight; + buttonA.BorderColor = Color.Transparent; + buttonA.BorderRadius = 5; + buttonA.FlatAppearance.BorderSize = 0; + buttonA.FlatStyle = FlatStyle.Flat; + buttonA.ForeColor = SystemColors.ControlText; + buttonA.ImageAlign = ContentAlignment.MiddleRight; + buttonA.Location = new Point(962, 259); + buttonA.Margin = new Padding(4); + buttonA.Name = "buttonA"; + buttonA.Secondary = true; + buttonA.Size = new Size(147, 55); + buttonA.TabIndex = 18; + buttonA.Text = "A"; + buttonA.TextImageRelation = TextImageRelation.ImageBeforeText; + buttonA.UseVisualStyleBackColor = false; + // + // buttonY + // + buttonY.Activated = false; + buttonY.BackColor = SystemColors.ControlLight; + buttonY.BorderColor = Color.Transparent; + buttonY.BorderRadius = 5; + buttonY.FlatAppearance.BorderSize = 0; + buttonY.FlatStyle = FlatStyle.Flat; + buttonY.ForeColor = SystemColors.ControlText; + buttonY.ImageAlign = ContentAlignment.MiddleRight; + buttonY.Location = new Point(962, 196); + buttonY.Margin = new Padding(4); + buttonY.Name = "buttonY"; + buttonY.Secondary = true; + buttonY.Size = new Size(147, 55); + buttonY.TabIndex = 17; + buttonY.Text = "Y"; + buttonY.TextImageRelation = TextImageRelation.ImageBeforeText; + buttonY.UseVisualStyleBackColor = false; + // + // buttonX + // + buttonX.Activated = false; + buttonX.BackColor = SystemColors.ControlLight; + buttonX.BorderColor = Color.Transparent; + buttonX.BorderRadius = 5; + buttonX.FlatAppearance.BorderSize = 0; + buttonX.FlatStyle = FlatStyle.Flat; + buttonX.ForeColor = SystemColors.ControlText; + buttonX.ImageAlign = ContentAlignment.MiddleRight; + buttonX.Location = new Point(962, 133); + buttonX.Margin = new Padding(4); + buttonX.Name = "buttonX"; + buttonX.Secondary = true; + buttonX.Size = new Size(147, 55); + buttonX.TabIndex = 16; + buttonX.Text = "X"; + buttonX.TextImageRelation = TextImageRelation.ImageBeforeText; + buttonX.UseVisualStyleBackColor = false; + // + // pictureAlly + // + pictureAlly.BackgroundImage = Properties.Resources.ally; + pictureAlly.BackgroundImageLayout = ImageLayout.Zoom; + pictureAlly.Location = new Point(185, 79); + pictureAlly.Name = "pictureAlly"; + pictureAlly.Size = new Size(767, 354); + pictureAlly.TabIndex = 0; + pictureAlly.TabStop = false; + // + // panelBinding + // + panelBinding.Controls.Add(labelBinding); + panelBinding.Controls.Add(labelSecondary); + panelBinding.Controls.Add(labelPrimary); + panelBinding.Controls.Add(comboSecondary); + panelBinding.Controls.Add(comboPrimary); + panelBinding.Location = new Point(372, 156); + panelBinding.Name = "panelBinding"; + panelBinding.Size = new Size(400, 186); + panelBinding.TabIndex = 37; + panelBinding.Visible = false; + // + // labelBinding + // + labelBinding.AutoSize = true; + labelBinding.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); + labelBinding.Location = new Point(2, 11); + labelBinding.Name = "labelBinding"; + labelBinding.Size = new Size(183, 32); + labelBinding.TabIndex = 31; + labelBinding.Text = "Binding: Menu"; // // labelSecondary // labelSecondary.AutoSize = true; - labelSecondary.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); - labelSecondary.Location = new Point(423, 5); - labelSecondary.Margin = new Padding(4, 0, 4, 0); + labelSecondary.Location = new Point(2, 122); labelSecondary.Name = "labelSecondary"; - labelSecondary.Padding = new Padding(5); - labelSecondary.Size = new Size(144, 42); - labelSecondary.TabIndex = 42; + labelSecondary.Size = new Size(125, 32); + labelSecondary.TabIndex = 30; labelSecondary.Text = "Secondary"; // - // panelBindingsTitle + // labelPrimary // - panelBindingsTitle.AutoSize = true; - panelBindingsTitle.AutoSizeMode = AutoSizeMode.GrowAndShrink; - panelBindingsTitle.Controls.Add(pictureBindings); - panelBindingsTitle.Controls.Add(labelBindings); - panelBindingsTitle.Dock = DockStyle.Top; - panelBindingsTitle.Location = new Point(0, 0); - panelBindingsTitle.Margin = new Padding(4); - panelBindingsTitle.Name = "panelBindingsTitle"; - panelBindingsTitle.Size = new Size(700, 60); - panelBindingsTitle.TabIndex = 44; + labelPrimary.AutoSize = true; + labelPrimary.Location = new Point(2, 63); + labelPrimary.Name = "labelPrimary"; + labelPrimary.Size = new Size(94, 32); + labelPrimary.TabIndex = 29; + labelPrimary.Text = "Primary"; // - // pictureBindings + // comboSecondary // - pictureBindings.BackgroundImage = Properties.Resources.icons8_next_32; - pictureBindings.BackgroundImageLayout = ImageLayout.Zoom; - pictureBindings.ErrorImage = null; - pictureBindings.InitialImage = null; - pictureBindings.Location = new Point(10, 18); - pictureBindings.Margin = new Padding(4, 2, 4, 10); - pictureBindings.Name = "pictureBindings"; - pictureBindings.Size = new Size(32, 32); - pictureBindings.TabIndex = 41; - pictureBindings.TabStop = false; + comboSecondary.BorderColor = Color.White; + comboSecondary.ButtonColor = Color.FromArgb(255, 255, 255); + comboSecondary.FlatStyle = FlatStyle.Flat; + comboSecondary.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point); + comboSecondary.FormattingEnabled = true; + comboSecondary.ItemHeight = 32; + comboSecondary.Location = new Point(133, 121); + comboSecondary.Margin = new Padding(4, 11, 4, 8); + comboSecondary.Name = "comboSecondary"; + comboSecondary.Size = new Size(254, 40); + comboSecondary.TabIndex = 28; // - // labelBindings + // comboPrimary // - labelBindings.AutoSize = true; - labelBindings.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); - labelBindings.Location = new Point(45, 17); - labelBindings.Margin = new Padding(4, 0, 4, 0); - labelBindings.Name = "labelBindings"; - labelBindings.Size = new Size(114, 32); - labelBindings.TabIndex = 40; - labelBindings.Text = "Bindings"; + comboPrimary.BorderColor = Color.White; + comboPrimary.ButtonColor = Color.FromArgb(255, 255, 255); + comboPrimary.FlatStyle = FlatStyle.Flat; + comboPrimary.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point); + comboPrimary.FormattingEnabled = true; + comboPrimary.ItemHeight = 32; + comboPrimary.Location = new Point(133, 60); + comboPrimary.Margin = new Padding(4, 11, 4, 8); + comboPrimary.Name = "comboPrimary"; + comboPrimary.Size = new Size(254, 40); + comboPrimary.TabIndex = 27; // // Handheld // AutoScaleDimensions = new SizeF(13F, 32F); AutoScaleMode = AutoScaleMode.Font; AutoSize = true; - ClientSize = new Size(1286, 932); + ClientSize = new Size(1150, 888); Controls.Add(panelBindings); - Controls.Add(panelController); + Controls.Add(panelDeadzones); MaximizeBox = false; MinimizeBox = false; Name = "Handheld"; @@ -659,90 +1028,103 @@ ShowIcon = false; ShowInTaskbar = false; Text = "Controller"; - panelController.ResumeLayout(false); - panelController.PerformLayout(); - panelVibra.ResumeLayout(false); - panelVibra.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)trackVibra).EndInit(); - panelVibrationTitle.ResumeLayout(false); - panelVibrationTitle.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)pictureVibration).EndInit(); + panelDeadzones.ResumeLayout(false); + panelDeadzones.PerformLayout(); + panelRight.ResumeLayout(false); + panelRight.PerformLayout(); panelRT.ResumeLayout(false); panelRT.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox4).EndInit(); ((System.ComponentModel.ISupportInitialize)trackRTMax).EndInit(); ((System.ComponentModel.ISupportInitialize)trackRTMin).EndInit(); - panelLT.ResumeLayout(false); - panelLT.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)trackLTMax).EndInit(); - ((System.ComponentModel.ISupportInitialize)trackLTMin).EndInit(); - panelTDeadzone.ResumeLayout(false); - panelTDeadzone.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)pictureTDeadzone).EndInit(); panelRS.ResumeLayout(false); panelRS.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); ((System.ComponentModel.ISupportInitialize)trackRSMax).EndInit(); ((System.ComponentModel.ISupportInitialize)trackRSMin).EndInit(); + panelLeft.ResumeLayout(false); + panelLeft.PerformLayout(); + panelVibra.ResumeLayout(false); + panelVibra.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox5).EndInit(); + ((System.ComponentModel.ISupportInitialize)trackVibra).EndInit(); + panelLT.ResumeLayout(false); + panelLT.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox2).EndInit(); + ((System.ComponentModel.ISupportInitialize)trackLTMax).EndInit(); + ((System.ComponentModel.ISupportInitialize)trackLTMin).EndInit(); panelLS.ResumeLayout(false); panelLS.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox3).EndInit(); ((System.ComponentModel.ISupportInitialize)trackLSMax).EndInit(); ((System.ComponentModel.ISupportInitialize)trackLSMin).EndInit(); - panelSDeadzone.ResumeLayout(false); - panelSDeadzone.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)pictureSDeadzone).EndInit(); panelBindings.ResumeLayout(false); - panelBindings.PerformLayout(); - tableBindings.ResumeLayout(false); - tableBindings.PerformLayout(); - panelBindingsTitle.ResumeLayout(false); - panelBindingsTitle.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)pictureBindings).EndInit(); + ((System.ComponentModel.ISupportInitialize)pictureAlly).EndInit(); + panelBinding.ResumeLayout(false); + panelBinding.PerformLayout(); ResumeLayout(false); - PerformLayout(); } #endregion - private Panel panelController; - private Panel panelVibra; - private Label labelVibra; - private Label labelVibraTitle; - private TrackBar trackVibra; - private Panel panelLS; - private TrackBar trackLSMax; - private Label labelLS; - private TrackBar trackLSMin; - private Label labelLSTitle; - private Panel panelSDeadzone; - private PictureBox pictureSDeadzone; - private Label labelSDeadzone; - private Panel panelRS; - private TrackBar trackRSMax; - private Label labelRS; - private TrackBar trackRSMin; - private Label labelRSTitle; + private Panel panelDeadzones; + private Panel panelRight; private Panel panelRT; + private PictureBox pictureBox4; private TrackBar trackRTMax; private Label labelRT; private TrackBar trackRTMin; private Label labelRTTitle; + private Panel panelRS; + private PictureBox pictureBox1; + private TrackBar trackRSMax; + private Label labelRS; + private TrackBar trackRSMin; + private Label labelRSTitle; + private Panel panelLeft; + private Panel panelVibra; + private PictureBox pictureBox5; + private Label labelVibra; + private Label labelVibraTitle; + private TrackBar trackVibra; private Panel panelLT; + private PictureBox pictureBox2; private TrackBar trackLTMax; private Label labelLT; private TrackBar trackLTMin; private Label labelLTTitle; - private Panel panelTDeadzone; - private PictureBox pictureTDeadzone; - private Label labelTDeadzone; - private Panel panelVibrationTitle; - private PictureBox pictureVibration; - private Label labelVibraHeader; - private UI.RButton buttonReset; + private Panel panelLS; + private PictureBox pictureBox3; + private TrackBar trackLSMax; + private Label labelLS; + private TrackBar trackLSMin; + private Label labelLSTitle; private Panel panelBindings; - private Panel panelBindingsTitle; - private PictureBox pictureBindings; - private Label labelBindings; - private TableLayoutPanel tableBindings; - private Label labelPrimary; + private PictureBox pictureAlly; + private UI.RButton buttonX; + private UI.RButton buttonRS; + private UI.RButton buttonMenu; + private UI.RButton buttonRT; + private UI.RButton buttonRB; + private UI.RButton buttonB; + private UI.RButton buttonA; + private UI.RButton buttonY; + private UI.RButton buttonM1; + private UI.RButton buttonM2; + private UI.RButton buttonLS; + private UI.RButton buttonLT; + private UI.RButton buttonLB; + private UI.RButton buttonDPR; + private UI.RButton buttonDPL; + private UI.RButton buttonDPD; + private UI.RButton buttonDPU; + private UI.RButton buttonView; + private UI.RButton buttonReset; + private Panel panelBinding; + private Label labelBinding; private Label labelSecondary; + private Label labelPrimary; + private UI.RComboBox comboSecondary; + private UI.RComboBox comboPrimary; } } \ No newline at end of file diff --git a/app/Handheld.cs b/app/Handheld.cs index e8619ad3..17ce2cb5 100644 --- a/app/Handheld.cs +++ b/app/Handheld.cs @@ -6,6 +6,9 @@ namespace GHelper public partial class Handheld : RForm { + static string activeBinding = ""; + static RButton? activeButton; + public Handheld() { InitializeComponent(); @@ -41,80 +44,120 @@ namespace GHelper trackVibra.ValueChanged += Controller_Complete; - FillBinding("m1", "M1"); - FillBinding("m2", "M2"); + ButtonBinding("m1", "M1", buttonM1); + ButtonBinding("m2", "M2", buttonM2); - FillBinding("a", "A"); - FillBinding("b", "B"); - FillBinding("x", "X"); - FillBinding("y", "Y"); + ButtonBinding("a", "A", buttonA); + ButtonBinding("b", "B", buttonB); + ButtonBinding("x", "X", buttonX); + ButtonBinding("y", "Y", buttonY); - FillBinding("du", "DPadUp"); - FillBinding("dd", "DPadDown"); + ButtonBinding("du", "DPad Up", buttonDPU); + ButtonBinding("dd", "DPad Down", buttonDPD); - FillBinding("dl", "DPadLeft"); - FillBinding("dr", "DPadRight"); + ButtonBinding("dl", "DPad Left", buttonDPL); + ButtonBinding("dr", "DPad Right", buttonDPR); - FillBinding("rb", "RBumper"); - FillBinding("lb", "LBumper"); + ButtonBinding("rt", "Right Trigger", buttonRT); + ButtonBinding("lt", "Left Trigger", buttonLT); - FillBinding("rs", "RStick"); - FillBinding("ll", "LStick"); + ButtonBinding("rb", "Right Bumper", buttonRB); + ButtonBinding("lb", "Left Bumper", buttonLB); + + ButtonBinding("rs", "Right Stick", buttonRS); + ButtonBinding("ll", "Left Stick", buttonLS); + + ButtonBinding("vb", "View", buttonView); + ButtonBinding("mb", "Menu", buttonMenu); + + ComboBinding(comboPrimary); + ComboBinding(comboSecondary); - FillBinding("vb", "View"); - FillBinding("mb", "Menu"); } - private RComboBox ComboBinding(string name, string value) + private void ComboBinding(RComboBox combo) { - var combo = new RComboBox(); - combo.BorderColor = Color.White; - combo.ButtonColor = Color.FromArgb(255, 255, 255); - combo.Dock = DockStyle.Fill; - combo.Name = name; - combo.Margin = new Padding(5, 5, 5, 5); combo.DropDownStyle = ComboBoxStyle.DropDownList; combo.DisplayMember = "Value"; combo.ValueMember = "Key"; foreach (var item in AllyControl.BindCodes) - { combo.Items.Add(new KeyValuePair(item.Key, item.Value)); - if (item.Key == value) combo.SelectedItem = item; - } + combo.SelectedValueChanged += Binding_SelectedValueChanged; - return combo; - - } - - - private void FillBinding(string binding, string label) - { - tableBindings.RowStyles.Add(new RowStyle(SizeType.AutoSize)); - tableBindings.Controls.Add(new Label { Text = label, Anchor = AnchorStyles.Left, Dock = DockStyle.Fill, Padding = new Padding(5, 5, 5, 5) }, 0, tableBindings.RowCount); - - tableBindings.Controls.Add(ComboBinding("bind_" + binding, AppConfig.GetString("bind_" + binding, "")), 1, tableBindings.RowCount); - tableBindings.Controls.Add(ComboBinding("bind2_" + binding, AppConfig.GetString("bind2_" + binding, "")), 2, tableBindings.RowCount); - - tableBindings.RowCount++; - } private void Binding_SelectedValueChanged(object? sender, EventArgs e) { - if (sender is null) return; RComboBox combo = (RComboBox)sender; string value = ((KeyValuePair)combo.SelectedItem).Key; + string binding = "bind" + (combo.Name == "comboPrimary" ? "" : "2") + "_" + activeBinding; - if (value != "") AppConfig.Set(combo.Name, value); - else AppConfig.Remove(combo.Name); + if (value != "") AppConfig.Set(binding, value); + else AppConfig.Remove(binding); + + VisualiseButton(activeButton, activeBinding); AllyControl.ApplyMode(); } + private void SetComboValue(RComboBox combo, string value) + { + foreach (var item in AllyControl.BindCodes) + if (item.Key == value) + { + combo.SelectedItem = item; + return; + } + + combo.SelectedIndex = 0; + } + + private void VisualiseButton(RButton button, string binding) + { + if (button == null) return; + + string primary = AppConfig.GetString("bind_" + binding, ""); + string secondary = AppConfig.GetString("bind2_" + binding, ""); + + if (primary != "" || secondary != "") + { + button.BorderColor = colorStandard; + button.Activated = true; + } + else + { + button.Activated = false; + } + } + + private void ButtonBinding(string binding, string label, RButton button) + { + button.Click += (sender, EventArgs) => { buttonBinding_Click(sender, EventArgs, binding, label); }; + VisualiseButton(button, binding); + } + + void buttonBinding_Click(object sender, EventArgs e, string binding, string label) + { + + if (sender is null) return; + RButton button = (RButton)sender; + + labelBinding.Text = "Binding: " + label; + activeBinding = binding; + + SetComboValue(comboPrimary, AppConfig.GetString("bind_" + binding, "")); + SetComboValue(comboSecondary, AppConfig.GetString("bind2_" + binding, "")); + + panelBinding.Visible = true; + activeButton = button; + } + + + private void Controller_Complete(object? sender, EventArgs e) { AllyControl.SetDeadzones(); diff --git a/app/Mode/ModeControl.cs b/app/Mode/ModeControl.cs index c7406ed9..cb43f672 100644 --- a/app/Mode/ModeControl.cs +++ b/app/Mode/ModeControl.cs @@ -415,6 +415,8 @@ namespace GHelper.Mode return; } + if (!RyzenControl.IsRingExsists()) return; + try { SetUV(AppConfig.GetMode("cpu_uv", 0)); diff --git a/app/Properties/Resources.Designer.cs b/app/Properties/Resources.Designer.cs index 9d5597ff..c07f6574 100644 --- a/app/Properties/Resources.Designer.cs +++ b/app/Properties/Resources.Designer.cs @@ -60,6 +60,16 @@ namespace GHelper.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ally { + get { + object obj = ResourceManager.GetObject("ally", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/app/Properties/Resources.resx b/app/Properties/Resources.resx index 750793a1..245016f9 100644 --- a/app/Properties/Resources.resx +++ b/app/Properties/Resources.resx @@ -130,6 +130,9 @@ ..\Resources\icons8-microphone-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\icons8-controls-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\icons8-maus-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -319,7 +322,7 @@ ..\Resources\icons8-charging-battery-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\icons8-controls-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\ally.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/app/Resources/ally.png b/app/Resources/ally.png new file mode 100644 index 0000000000000000000000000000000000000000..f1f7ba82094c99c2358e613bdaafce221df12b03 GIT binary patch literal 26177 zcmaI8dpy(aA3wfMx4ILR?j)yMZn|@8%K13=oo>2g6iH+bF>)9(h8Vgl>dqlK40E_u zNY0bfmP0A0nHAccW{Ej%C}U$Y`@Y}$e1G5juiqa%dbIcJx~|vtdcCgK^?V(!9$vDw zI`HH1A0ZIPfxj-Cw}(LX)IcCRukHN-_@(Y<`zY|&zK{#fXb9w}8u(|&U-rLz1%BLt zwzoP5sp?ml2mZ0!_Ye3V5J+w6{!Pz45D1d?*ZDuLMDE~-PDiRajY4n23Q4~k5GYdU zBl1_BIcE}`m8Ugn$@cFPM&A2e>b?0dO8>6C<>1``%TkF`NhLXh70wCHI;3H_D=l={ z0bHodKlS1p%MXV6SVXXfL%?tKam4}V-#STKrz_xfWvLUw^`5)+iONi|33niP;kE-4 z-~p2DLMp>WDCeXyC(55PhqUm5wWTT1D89y6d^BqgmK}?6Djdgd&Q)E*!Tt^e2VCsA z(wg%5_Gy8H-k=tH}QxehzovvPkgP*p2tQU!34S%)+Np!P6Oi{7~5;NF?TdA+~Bje78= z_^8jH@n+JCC9oFZ@DB}x$h`z1KnT(MJD}ksa;|^rY1HHW^q>X2WXFuScxcC(hVj}C z2;}oAwTf6dxunsS37>96@2lNSdt*Ibo?<)h9sve_{opu#X2H<0z^eL0pHJ~9oZ;iF zb+LZ@_D_H41D|n~ln-X4d;D+yQEU1uvR6OHR@q0Lql*44r8x!bgb59R1>(scEoF*~ zQH-F4KRy0P+IJcKvT!Fjwn+Cdbl!~Q;?zPp=xs3hV(UoCyav%NN0y|q3jzr_1(V9N zt1H99*CLeLNJ0|{L1Ty{D&aGc;unq=L^%Y1+4E*9mi%=Sm@B?M;Az?8uFN0W2peBY zjTq?X%%MiSKt05g)gunKjW&LZN^rOlMg!Mv52^|sHJT6hvgG{{=CNE&@r#ge=?Pi* zL)I|G3FH^KuF(&hZOVlsX2T{|;HIhk6YUdJvZUSDvdnMN{L43 zbsTOh>y3-4zBk9_ugYl84p2zeD(yc0l#oO|{$4wa>Wb zN-B;x{6Hz*Pny1)>!PgEuH-a>a7P-mbaz;c8Oi=%9%sgLZA^-as9#N&JC^s>DDy8T zoSd$+d8Pp0xSqnj+vrNyA4E9O$fqJh z2L8IiVlct2#V=-htdA+c>ZJ#|1M}5<`(wgbh}bPg;=lSBkokjS7Ml(SlJ{7p6)5d4=>sOX&WiGB(gIs`Ix@i8`>|4mHlpoizgs$=BT24>&7hQ=c> z`$TQX+-mNqBeA8iQ|8@7q_RCJ*#yaqXU+`I)R6pN8_d>tvyB41JB&~rLrlWTC0 zF1~qQ#~Uk>a!2PEMPYu#V%lJjFb@@n;R(%jW!5_8Ks8xr0}oO{&|&8C!oQ|MT5!go%|3>27;Czu`xX4_?qgCc z6t3;2|4~+dRR*B#U(_ex)+!q^^0!stRnfi9!ny^FnWk38P@%yZcssxj`x z(B}V$qP~yF7?K@n3uuZ#_?>9!S*3@Mjh4y?7rL2o;fUdYu*?o+4q@X)I^(tJTfXDM zK>0pk7qb{VvITdA{L;xNmLHa0#9c>)J{dc6Rd{chy41RKj43wmn;28z{mk^?tN!FZ z`}HKw{$f1fZ_Y?;E1*7!NLgJL;uYc=R$=wQ4@A5R%J%%jrJ?oVng;v>YvB=ZRsF zX$)N>Q}ob%GY1qe?oxFfUj1!Aamfo%8F^!qLFJ}JRlCT8!3!iC-$LaEVE3+726%zW;7x+iGD^X& ztt`%4?xF!Yy~uOTwQ9MlgBh`zdjn@$(sRc0`F`I|J|tBsc`_quO7rnt1!GEpdo;Us*A?)11nV8p%GhkX=^Jx ziM_mBNxN)c@XSCu$Gsa{W@db#lhNr#MGb&E5d@mwx={<5`QDm<$+hqXx;OtMh)N-@ zFN-nmOtyC60VzC3`9@or>r$QO(D9ud-a{%*PM<#Fw(sqII!IZQuT0=9v7^nsVYwWb z;#2AwTkk-r4R^vNU{YlgS6twkz0t6gSPUW^2&CbgF*_uEk>77}UntrrSmq(cFw2dy zl=b&1)@~N@4Ab@KsHd6F4j7C~$jZ3|K2r3S0*CpYDeY%jWZ2Z||2;Ky@v5^nS*s4u zHdVTT6Ib`_JZ;t<+jPgPQ04UmtB0pe3isc>H9E%UjKWVV`&W5x(&e=K5U#%2QKGG> zy6&?lfQtrCO2sxXZ*kqCK38v(a~8TPtZ^H}{v{O*u4tq&?rXET?;YAf4_pcx(ZO~) zugE3)Wv#M+3DzTNQUlUL{3VRvDq`*h^=g{WHy5c)ud=~~W(&8g>4 zaciu-mY~raYjVc5ZOL-OzP04EGLR(hhyV#dt7eE zw^XWk>>2}35ny3Mx%wfm8#Ag_2L8Q%JRHxNQQsf7ZwDso_wPz*chPNr+=pJ=fsy}y zWz@jn2^{n%)pWXoM_YF+*8`j-p3L>kD(!iE2S&YEsn;HxbH6`q+nMgUNq||S?wzI! z!xNH^JNYK>!0fC3E)*MNvV(LM?4K#Nq z^Y+(PYdfG1)UaqzXzi%0LTu4Lg+;~!%sXFXor_E>0orw4qnH`CsE176(}=sp|oN- zV_U%4b?WTV?pr8D)}K8#jR&5`wF-y5eN=dPJ2`vW5xFuFpASm|(4ltWxk$axm0blWg$enlnt42~LpHu5JF z7)^}b)R~U6)04t=eXUJlhd%zIK6Rig-N-kdF+IQ9N^a7}m6L0JyNSD9D)17d)vxS^ z{(-?y4m|`xIOI&#y#hr4kr1WN#<<2VH>2SY?mL$_CrWf-TVau?(KQ^(*0v zGVYBu4SrX-q+OLm#04hxcv~|`$-0?3MEd{pik!M95ko%C{N>sO$4*943<|%0V0zx< zDTesQz?qhQgGr>28n&97dTWGp_DdFO?SObpcC#MncZ81mn22QShKzK6vi9taAjAV$GS1MPRk2QvwVTA+8PT+yk}N>jLD>-`M6?TY1k_Q|%NzaPkKFJH0vmr$#HRfSAW8=gpc> zAlWz-`)V&Z3Rm8g;o4#^udfl=32VaZo}|+k?EA(ICP43MogrBsNHm?8QgwG zJ>xRHeD*465}%*wma%{>vLaM2N+YURO{ip(TT;Ei`yMw8gvy%5r0qJ+xut?;OJaoXes z>Oj~1z;fz`WJD0Zc-#l%bZgGo;_>*j?!|T&%Y;6xMGsnFjcn1koQ|@c&e(yu?p&=V zL}isxKZJ|mP={s)i^m83&S(3~nW2GXk;dTtUbUv!C_XkxQjUI=7FSgfS0JP-W2^%d4o3?oW3Bm9_W9B`Im2zNuvp5v%!{Pl^_lqU zLj20k*S&t3!qOhn$!KmjvR4!-zEKw5Vpn9^c~Wt;|GD{vTm@#~GcO>p`aIq{cVEAY zf4ziqBDcc5S=`DTN|k%dj1_8$_+77dk2>X0noVT(A87*7P7;4k_loErjdrzm9RiTfg5(ZDW z`R*;@H&?OPLCaNW{9sc*LCG$B)E@}f+na%m!?K!IQIL-A9;Na(bv+;Um^F@V3^GvI zOce`ab?_3*iN>eAvHferAHKwA*YN!L@xrBV z8iOsD;#!2_Ql)pX`8J`VPb>d{X0GTK$}4yxJRv0V6u(P>tv_gPY0&ernqS__Z-I-N zn~xV;L~=T}u51X{ecYanScLC!{;oMYY}h=iM6n_+f7<?|G^WXJnLb`V{X5+# zU!BY8E&%3Uh5sw97s2Fa)8qQ|CG>ME&M&5jT36QUAu&>V?_cB8xf^c)4oy{ppKMx} zN&E+6R#jfC^G)aento))_^Fqz<4P}jksgsh#Yj0jX7g#?^tVe&-J=I8@3)yF8%?%` z!tqlY{1JLjPn8(DrqLzdaT}k<5tMKI2SqoRXc&z&|NSu%VPjqoFZ(h2x{2z$wYK`!P<#q>5 zR6iL(AYr)*TgMQ|o8mEDb-H?h=3D*BnZ<6pIXNgoP*(T~p7N|`CDv$srm2xRf9mCx z|A*|G6Nvqr84&bR`XO6qsbR4KAzXR?m9#19&NVEImZ1|B2cKJ zeC_y`LU<(?Tcqf94O=+51^S34T{W5J{>{yXvNo3C27N$eHYGRHyowiSc6imN+S!Z6 zUAoS94u_-^ueM!njm1kXp@+&9y2v(h2)oN#XoWFO&`TQPKU#cJ-e54UpxeyRnXT4| zL-9x`bH^*@;X;;%zMl8Nkju{%05oY*@F zz&wUKn1qB_hgP(FvYj`^=}8NX$)pycZi3Qr4}+W!Lpyl-lU%LLHFa+2+-01$&y)rm zliAVrFhh3CKIL~XTgG`x)t=F4tM=9tcO#p6CgBycAAI?ngtE;zy>#0T*#HXIe+u8% zRboi5kVbA@OSC@ zD%7G~(S5GQH9`d%7NM^f7@E`T71>>qLaYHicD&xkS#}Mrqyxr2mS(^5Du_&`8NU$r z-cARl9M|+7nRU<>Gtwp$JW|lN^g1xgF&AE!1sAJ1ipVm{{Za&F4*2>5{eE`~jBoiNQ4-bG&q|Ssa*sOP))$L0Vu6>7N7aNkBDPNu=A8PZZ0)*h zmHwYo6*9UruwBtoZocM}61RJa7Y%Nwi(hfE*9_1mZ zRw((nJU7gP$}B60s6YEl^xz${ASOg;oYdSK8w3*6*kEbCsG`l|(%P#=$)lE!qh&l& z$098IN4J`WCZKm95@#w z?_#=6u6BD+!|U;D@!0-nN-aAF7&c#yO|P})6$2%ccG9w;yV$F-$*&1gAX;YAIUcYbFl4) zu}{|g2vD5hm`Iy|;Z-cgcBhTIt9a?KZ{rwe(zz zc+q6{Xt0sp1BS18VFH3vm*!QpUml>omV20|?~K!D6N0bm`NjbwyqvG6Zv*J)8>>bw zg>{8`u%6Oa!Joy}068SfmudE9#vet=WBuGQy3&GqM4oG}x~ahyCiEoE)sa$fY^_!C zTBrh$Skn%_c9YQW)2|2UwGj}I1aCyzz7HwW<>M_*r(R6L{hyd!7DQf;%~&lhr3{J+N40Q<5AYI@2AU z=w=oxR>66!SO!ZF2G}YNd*Q??ATKpiV+oJYL*6Y@7E76VD`ZW&V*~!^WqeF6d1NPC zT^k1>9b>)MxHv9H@0R?z7q%cO~IjrQU?DxmGA9e-G?0Sul{ITGEKeo_LVd3 z*ED?+f~owQm|m4@;{nAR9!1UQNQ`yaI>Rb5@6q2Y^6(mO2Y05w=$GSmWS2lkJ3j%~7?VQ98jaWBq2=YMtdVcLD(+ zeP(FJy>W!mmD8TFg9m#k9G1)ZpJ1YD%i~fxwqOztQt{Wm3$vrF>zxUjeo382 za{C&0VGF+!*JHg=g&XvqomLMxXw?984Joe^MsJZ84xd~P-afNRe3j|(bDYC&?uk!9 zaBfjx;FaTw7gfZ{bUm$%K~&a@uH|x;8jqYzN>p~{y1MPtpbIBmNPW78pT zAlsWR>R>~=3gZx(K|kWG1vbxpeILsN`8|dYqaEbMSGxJf&Z;Kc~xYp zqvIHlolDD|RShW3z02@1H@}DC2n~PyZuo=Vd$p}E2#gc=6r&R4##rLRuF7EH>oq$! zu0T{TN1R+1SL=5 zaZ@TO=BTFc`R?Ei(et~hggka^W(3{?Bd3HHcFl># zK8-u}Scsnp!v3)cR}EM^)EcoNcxL+|J0Kq6@~La4IYV`iySEG9E(@{z)gZ#XE<<+6 zXmzB`p#?NK$osmAslc@-#hE@`hdXhBmDIr;*X9;@Lekt|pP1K}V^{FWH|E|2e21c0 zd%=_>M_3Jnl6Ge;y_uAq2!b@B=&Q@<_{@dhom7M^We9;Y6S>#bE+*7Uj8eb(hYIT>Y11I{0rQ)+su zb-y&jTl~!39gM)^i<=A4jM-NgFS)HeZ~M~#b6LJ8CTWBI{^Kr=Ir4ZH@u}K|c;;a} zv_t0B0$eo8X^ZxWN{dmFmp+Q+Ew@5b)=m(0DJ4}P_uLQOM1Gl7VGH@ql7WwDDPhuU zUvMyb#FrmuPM}Rks-8c}HI5;b#VHmA{l=VKOKY{Otg36%vI`MqT}lkQ5k4jup_ms=bJWJjdtzsB3CuG(8-8UX8AzZD8*$Z?jNJ!_dvnn5i#s>L~|gb zVCgxtlML_zsX0>2C6ZsS8c}~uH=5IiA--JWRzFg=(*H9a+jmQjCHA+Xb-6H8%Un|} zj31C6@s8|Tn0-MF5%R--Qfvliu>O{s2dx`(EF??T2Ef}3XCjZ*KAftp_BH{0M3`NZ z1rfk?N54RwH;O*_#u2wmP+3KsI83+mdg+JRl~7`kcV*8lyp`-B4+EpB(L?bL$%l+y z?I$Tj8GFlgsA)9vAFBpAeZ+zmU9%f2HD{IM zwA%LdA*+kI@Rq*Gi@0wtZojZF3eN%r{tjB8Wwjq3_a3>}K8DOE_6lZmEYnqUPqc6S zGI&g0)xO|n8|&4@Ytc#nuHANsBZsD5$rQG@irETPJ-4JJL0-?a;5A7?!GsH`CIH@s zI_hys_544zXHTe|R}4rj>@_gzKXiY^TcAlc8689|R2#WT#K>td!O$*V?HXAr7-7p) zi2kvDgYMuLdfr-2#on~KLi~8}H!pY)I?rx-J`6m*$eT z-NLQRm>1;Rd8*g*?EQF)R;-0%+G<-s+pK9m%%1>@j88!3>)%Vqr= z3FIDep03?Y^tiCuw4_V2100?0h6|r3K)qDs@HQsm1H@_+(1;*47rGnyQg$dfsL?D1fiGWQKFCV$HQpbtIeiHmAS8}Da zT2DhbetQ0F;6mgKKuyM-jSV_>`>gN7~yTz)53oAn5 z(-^96gtB?h6xXL$X09-*QD(j@HLG4O_SoF(?F6LlR!;bwCG8?+*xSX5BFZ}E5$EEp zWfE9m(hluSOHuD)u7=p4S}D!gL-P9Drg%k=lzPw)eH@;m`vmC+A~2RPX|X2CA6d|6 zclL16y7AipVCRr*dne~=Jqc=m?Jka8=y9)zFr&9;N>x_ifVun$bx8LNx{Bg$mt*n< z%LtTHpK_ze@&Lrd0vYY)S!d%}ZP401C|h~qeuPcSKIPxorKWQqrZ1!@0 ztdrc|6F6t9#|)o2sFu9m0uhwqwZ{5z53Lp<@mRpZ=_mw#(8vWA*#{906(O%X7Xq;@ zA2G|gmZnY~^l92^Jj(`a9iQ#t}AgMwFt38Yc3q}QJp z_rA{fc!Krk=_YWECY#cwxqO$?0ePg+^~Vkpt95yIunSV0RPC)38!+STccF!*q&;WSn%{ zSLe4)ktmG7O=2=rgG0wD8s^}Y?%?1Z(eLv|wNel&_20gEBU^bXH*ULHWY{06o+{lI2W)hI#NMjJ~18*DA3ja z^jCAxFo3?YeHYx3&KKue6PDP}sj2Iud3NclhCV5u$n%d1! zIR^cGDS))CY7!u%NEmQm?yb8DQp8_&_uUe{(!&!ew|RYROIj}~ur8$Q#~P|AzA-c0 z>pV#0al2ZF88xidk;h#dbCgpYNUmr!ss<*@f{U3Vv_@ri&Mx znq>~x_Jo+xj=ITu0Sznt%&_t4y|g19^pszRTo$$^Ii(?Q(%KvKc1TP69vx1brIZNL z*7RrT0G;-^=Qnkfo=1Rm5ZgtKj=ia}M#;Vr%w>Gvvu~ImgEiQNzG}1~;2sY5jF7W@ z2+~1HKLsuTg#sPKW5zf(bs(JK!)PrBw%Mj`6;c5a{%Uej>5XsZnlk8eAbHm5K8{~Fu#VT5VEzG~0V~x1Xxt5OqI#LVC^g z+^qTQ>%gZHn@u(DNAH-ro|k}MkY(-dFtDp&MD*(4DP@QsYf6~*O5cNZIkj3vI58)% zKuUG9#r$s&#)dq+NE=Ql4Fh6D(sHiCO%&)`kqm`EfUoRlTeGB8wQEagV?@Fs!?+fb zRO!|hxTC)7g@R4Ck&&SR%o1SR4OUqZryN-tb}p{IELGYBx_@B4}b0boRDx2PC+;uC#hWsY`mMvzG+svdMsl)OH!L=9l7A zjmpl!IzV#y6%9h7tjAQ~%4oB7ZJ!{M9?(e6vMM(3Esq&o4lm$ovbwFvgHP2r6ExcnEQLku73h9B7wKdgl0)1JK&rO}3 zKWj}^h@{c+^${Mj^`EH<9CE|GWQDO~+vg?ZAu-AB@lBmLxYXBDg_5342K7zs!X4=8 zb@xPTy;((<qq41B-Suf` z$g`ex+p1Zg7|=*H>3E4XpgAgWGMpk(3g#<|pCFTxKN}K(`fnbvqy(kC^_~>x>F#&~ zRW|EFr|hJCy+)UqngO0CJbGMsTo=g?O+LqSK~s@fdO3z&v@=BUvCx zEh^RYB>aAh23Iie(H_zdtyrAyAyS$_Hm#UHPk^lc%crCD20*MFJTjG*!~Vc zt-h6sobb)5!&ed9$fmQ;dkVJqL9>lZdgiG~&r7{}+B4-4Foo;WCu-Qth@!Pdqu|yd zR;s5yndV5t>0&U;P>#hejyn15QTr@qsMq3p#h6H;thu?@v>J4#u7n@}ULSOI_bq^@ zAtvsR5D7RoVD#!_01GciIPO|m8WM40VI4C<6YT=76D^7a0sIz;7 zWgPd@AG{|SK4Y=KrB8^-Geg+NGki7$xp%Q6Ge!6mz?S=r!wFj)p@QLHsj$=(C3~2QCvLtHv~D3a{C+;wru%m)wAE9(tye; z21Ky024{$GJo=;YPCaF8g2Vo;(;Zs>wE0HHl;k?X8jJW^p)o879OvoqFf=a9{i+zl z|M&(>p+=TYORJ?e^&2yF_;M@pap%>~Sn=ih9Y!^^@S-!mAA%O#_m?+L8O$?Ne?QG? zsAzFx`LXtl1}!{-xAcE)Qksg^&q-A8YBpoVp5l8o7y8RPPAJVsSIvV?xXBxRyD)M= zppGl<`9}CDJnv<=yF2x>v64_9{v|3a!Yb3>GHB3Bhgg7fBlUmt(>6Ux*2)<(YnyeP znbaV;^WAmEmqLYPQ4RZY6PpuJ2)_)TE1+*m2@PGAv2zTrdtEEp6_$@Qa|@`Fm5VS* zXE$4mGIW}HSC(GbyZekU+EmRJ)6d%8y~(Yz7M7lFoqg12F`os!vpO7px^dPqf$o{! zQJ+Kg0)rs1>nvvCWWm#3AxAx9ydvwb7xU#kgIS~TLVe$meB^|4K;Rqq>kOac{AX5G z%dK725o;&7LN(xmQ|}O6uJYP9X?=|8LzJ^ZZ|wPAV*G6xKl@eb+mY~eZn+l?^o-G_lVk_2y&oL#jjxn&M%i~ic2s!gT*D3D})q8l-)+L7sf z+o2(Ds$6op#f~+C(8CLUv4DP@<{OO#OE2IgJy)o5D|cXnY=brDguBP!hV?+zf7ZDw zeKy3v`RZG7&1e$(<-4fzeX}1rr=$Us`>fB6Of^Izd~c%?EPKWjP6pq`Piij8=4^@3 zGWo-^FZ8D-`ac^lU5DFp^vNxCRXR&Eee~rgY?L7`^hltTL~t&k2cRo7$IAAMBf{6X zxI=)ny-B^J4y+G!G0vpPDAdLF-pafs)d-e!tJbu;4oH$0>x0K%t!YkWgH)|-8)yj(HcC1CV_d$)JYC~00!yy6 z<8Dk+&!kENlruG_!A8-Z^`t<764T|eH-pF02G`a4{sOzzuT@b)v#aZtz6#vtpTfKw zLL1A1J5>CIZ|j}ybZ*shQ6mQJ69HY_IWOx!%d2Xe$@}!Db^)uz7ZZCtlbw+romyzQ zi`m!oF@c0O_V9;q2LYIkqOsCBa|3|x;hpZ!)w;PS@~$e+l%&pr5db-?``ROY_DIdG z>uR&n`66!X6Xm(L6HIompwt(adUsF zZ8?qPIa#K4AL8lI?jW>>_1U3>Lni|E*NpWNjfMvWdVQC-HbLJ`m39uRY3Zj{eI`v6_&$W_7?BLGCMy7zpe7;Ru}qWF%#Es z6+)s>4EmpyicEz-=*Q#kY+ytMU1i6D%9IZ6dC!*owJc7>e$sj?p|t@>iT>r|QLQ)R z{~NpWLC9ad>`iBY+(S;lQ7*{(O5De9?cU;dsi?X_;itc9HQS`GZTw;~da^x;VB7hi z-DEo{kTp%>l=hr~-HW*BFxIL#kFYsAd=(XQ0UvHWqMi~ktzigQ%k61)1+Jd8xT(9=W;Gc@RpMgSQ>Qs8vC54Qjhy;0;X7Fi(Dqa zgv~$N0fkZBJ3+JdKs79%@cRzl@~3m8QJF_T@oTme?99{bXpN#cz7{Jw_;@a-kA$7I zd|pCb{{yHR>PN-5_)vdiBeKuQ%)I*{1tjiiRczCGoBc%E6$#W5&I0%?>oPQ7inA-j zq*~E=`ODscE4gQ6zi;sdGp!mz-KJ#N=&F6i-?8?OxQ< z)=@wtYa#gO3&CB?2s@53$d`p>`w{O76HS0?$ zr%L}^7IQ2j?@w7J2mDgVJ_#rF!aLY~&y+gdvRQk3T1!j6zN$|xasKD9oBS*QrQ7W{ zpD_H!N8xx8hdb>0cNJm6M+6&Zz1_*_!d`V|@>h=(%;36AUjYJ-XAPJ3)Epq)B)BWR z*s+=_NMdTCpsLaNVLd@0});NjN8w)#6pBbotM<6*`-a6x<+Q*YHihkNJ%FndO>3DzIHhY%T&((^@^D^Kz4kMBR3e+T=Q zBB5SYDdmKsyL^9HG8FVAS+r}R_jgCUG0GQxJ! zsCv75KtULI_{FUNa}yMi9}ne303uXILCLi0KX>p3{dICEZ(yy~Ib0p5`n%ioVLLe@ z-H}v?FyBQd5Kq>22EzW(43k?GsJ2uGm6XcySyV~5*sOJUhz)P)HqB&5;U|rO7Atn8dt@iGM~B=$kZvw* zQ4jaW=9(wGVli2_^2QFmSs4#d-V_yS$F(qrs8JDuo+6!*@HWsP>Jp>ve3>>MymaSu z3K$tNFME(1zg(Yj-pK)yjLOKQ2M}RXuP7>CG#=rE)8M`e@bdUay<^I>F=vLV5m0<_ zZgXV`4Mw!}KrkAUz8H5oQVA4&mwLMrP^#9)%}$}TngZfQe?iGuh+yc^BJAg|p_pmFwV=MI&s=dtUfl|1;;qYN}Lo~NZ(y7)E=kt?=F@b-UnO2BS%~Rc-0s9 z!I7qQ%bn0;`M~vQIULJ5#oOjSeP<2kxtBwAJt!_dXw)i4_4{fIIdr4Ekc-NX63b0jWRhiNe4q z5aE-0xi$w<&3Ux>m)mV=ssQCzD`jNc*`JJSA{>?$q8{ zs2|*sT?*y;s#*cmk)tpbKUqvI&;x53qG%n9y^4t!OhP06+U|l zPW%eHlLPCIoOs`wXUbK?CcVoZmdG)VR z$d>)qxA3f*ZBdw_m^G_om$+~q8X(gT9#4Tp??iPjOOzIBc0D=gDQ^UNxk3K}iFP9f zc`Zi}yfF^p;nEj+<{GxJE`ZykFMHTyIf%2@9>|i-6j2GbGKW1tJr7>IMzjl3>yqO; z@&0$sb(O}7QD@#{Q{I%_p5EMh|smV1*US0475(dkY=DSZ5GA-W$QcJd+ zjHc+zj_S8#N?X08ctFFHl7uBF2R~to_uL6`R9`r6@O;FrMH_)N^Ycm(Ad7u95p?g( z{>2-zW6jsUTu1@0^>&9*PNBQV%=8K`QV10`OVtaP1`L|UM;dluWRzYip4w39bH=gG zN`SFkCpJg4diLUUQJi<&+mUbMWe*QPmHiu#kMYa!y~d^4tH zw>aC*U-ry7@3G3K0$Yo<-$P1I_09?5a4N$_&8;hYr(m$LU5FkeOb=B_= zl=p}`HUS9p{m7qP9ED8Pe}HFej#=M2>M3V<)AaQ}z~sucy?o zV;fG97mW_nlPhpPUpcwBlKJdrF_34JH2*iQS?C(a|0a4CNV%I@+^ewR8{xRMSdmaF zGQ!n611X1g1%{6q;#nMJ(znMz&X^c5nNjLwSaX+I?V+aPygo`T2C#|=&JVwaq?tyzr(mhmw!!6!JzA`8l%yxfHHj>y0$gu z|3icA$6G*@RgMB*tV3){dM3Fw%Lw1OhQ&Gspa~Q)_hY4^sopIWPFuLV)Z28WY$Q01)cX7(i%nQsGTJ@De-qver5i1skJk(IFuD(&;-lpoZiU37e!w6W z_XKX|N82|Tsc#H@zLyf?@Pqx`OZsb#HZrcV$kkrlx>=ljPMx#B<#x0g{387Obj2}O4W_7$poH|nid10V~PHm z^^m}Cc4Yx?^+%J;{m6%MzE_o-8HvMcn`W5ym})Yq;ziHFY~T?$nZakO|E^UORyb*# zCD>S+I^ww|yhooBB$-F_PL16|#h5lU!Q(}q!D z1m!(!@}? zD@N+-Id+-P-Rh6209*-Vr`G}~?$$QuQwM|F&!$z{Nk{yEcCg_w>y||!& z9?!Uk0`4!m?P+kb&oMylolne+%?#f&f|>|Nkhd^& zU(@!W8&BU~{sdSl=OyOe`(t22GM?4cdvHBA2N|F}o??$0c5-qK?x@PGeUI|-sKe_| zSyfMX$8?*3Q*s9a7udk-axFqd2^HgDAXgPFFZIchW-cv^)VBL{$1J&)qF@~W%Lv7^){{`6#1mMi}4Jvr&(~ z-CXAGb*1|VQBtR-aKN&FsI`Ol5D*mpF6i-Vq)-#db4}89g)ChdP%>wlu5Z!P=HbQQ zO}{&8G@UwPj-+aN4~e8xmmaQdRe>oXpkWt~ff-+}vm1jK7QIEL8Jjd90p#KAz)GZ4hV2|Wn((U2Q>pMAHRlQ8WGsVble4|RZ zJ7stXIwZt)GW})1s~P%qSUz9&PYGUFZ^|=fQU&hpiEYRgPrgiO@I4d;{YVAOL*Xf~ zhW;)*(B)+g2}v5fRo~sq-y!5({}CUFdSq!;W1C z6q-SfATt%ZMLeKGCFurisLSs3F%|7f+03^nEt8(VI zw?E}MRqk6G40$nAcE1*KeN1@k)&E!VE9iw`7~Qwizx{Bvp^mPe0vOVZ#ozst_HIv^ zPLa2>h{sy8_Vx{9ofF!{Kp+SRCdkc+7CdEO7;n}xssOYS{*Q43;~G2PSqN!g zm;KnoAq6ne0LjJ;gpHRy^UHI*p5lG(d z_bJ!b{6N=`DX*s%B1{jl`EJ+k+8J0jF>OtKN;q-r7v*~nXDzpDq*-rfl1u5PyuVb> z+mNGl7UOK}FZ zw;>B;rcyTt6tH)x!}@xy9qcEMXh_Lrllp)6gVTlB)-SPL(lvx5WxKA&ni7!lP$G0ijxiq ztXiQ+PX6Nn=rtgQi2xdOL2D##SOoe1z?;t$VmP{YNBy=vPrGiIM)g z-M8hP=Z$ow#VYLu659z#$mdu740?TugYECYf5-yw^i2g=J-%&}oD!NYz-r>mq`A`m z8uNX#9^ciTXE_p4CGQ-p-5RVoxbbz;9JUwj`M*yI6!}^9RH7IFn6TbM`L)7U$xQL~ zCDC5Aed0>;9zddDy&@RK<=p=jv0;W3XTx7Y`L+4685>Lznm6p3cG z2y<8|${Zuc9CMh%oSXCP`+9HPzsK(%f9(A_T(86RybiDHy5wA$tRm_qYri`WT5|!5 zvf7>3wZ?Stclb9+wiDp_4$2%p?491mdbAX@O<}iw$$=E(=ozcJUnx<%otWl0tpm^o zX~qEOOr))ra4^0*TJcOEB~QR`?6*Mdr&uK0FU%^sVw&3+Y3ct#11Z0IODs0&59L#% z;}poN2#rHZg#!w6-#?3M`U`XsVh7#5Xsa*aMSrWwD*S#|^DyJ{Be!LlQ}3IXTltd@ zEV-jzW=59XoaP;%WfXQxDgF*$I37~F^xQ+c??QcYg(3j-(JcSZb%HCxu!N*r+PZl* zN7Rwn9UbtQplnvn=eRd{diU}BM~A<`m}1X@ZL>H+!b$e|rCP{Uc29O2*%ck?j!<8L5-qrIL0#zRu}`DtDj z_|P3K`D{iT8NsIse&yZD!s#SE1qS^Bv!RF&OtV!*bJSuk%OEpu2I?W_?sUric%ERW zacyMTiyeNPL9W9c%u&;K!b|}GFIQe`b35WUbT4JCdW>ct**z{ka^{jCe8V0*zN3sW zTR;c%>$W^Ch}aXY-V=>qS1C8g&>~>+Imq^fe!l>@YZ`399)Vvk#%>GI1))Uu)cAoZ zc8_O(jCH-}`qL43a+0X|VCkBIFaLlb&60lkg_Z;pFw2wQ_lnpt+!gsH5JZFR86|?$ z%Qa{QnoBU+Hgvx#0vlQiFp;ihD#UgHHtt)6ThPXa6>A}#(JAv$u;AqSXIVvc1>*Voe9#HA zm@g-L-TNxk_4#%(kT&CA@BYWF@F)p3Ze?jp-x}aQiv?R3ZWKf;&1H;_;#v=G+(K%E zg3}<%JjV%`xpWT@IxNR$V3Vv3Z?wl20F0U7V+>?_G*;VZ#L*RxkqGbJ73|}KHLaTi zG40I(bXI@NPA#4b^w{;^ClG*v&`5*@cL9Ce-y6ZV?|a$9)iy<&yS9>+=ii**SnmwBQk@-*eq&^!Ql0pfRzM*)eu z62IbJ4-r-9zc)f~vISSL8#wSGc{ir;zThXjlnr9WyhZ@JLIcP&1tjq4@IeO$^s?G0 z4F_eKeU$2ud3<@aBn2{&!(OidKJr*~-sJhSbbqn(*7zux}s`p0w>4sWZEASuF`J&>~0@z>!}YRZvsiOhfSQ8rRl7Oqg9oLE~Un?qD3m zHZ7LlyJq`43B^+Yq}t6t04Sr~_Zi~()rf3LuEmdDv3Vl7nK5}ORs%44NNt=YL_7!- zc+Tlg5K0^x+68zW<&I|jp7$~Ur=VczAl6%OyqVn+`TzY6occTRZ|tt)+ydc&dCYdc zfC?MQ({t-cIc_VvY4Mnx;9U2{j9f$A!4#sLBEBB`5v$AhPKCMT>A93R;zSse?XDG+ zJ^^nhj^bQ;m!JNj4y0tqP0#2v$>F_xuuB}O11wko-~LKCxDwn8fpSf|bSHJfyyHRV zVHKKvVfT{`0ca*>bwnSc+2@`=3z*j?TU(e4Oc8w!U(44F1#}}~!XA7NukCk#jfC!V9!o3&PyDO;{Ua9nw+L)VaE{w8y_C zu%EA$ZK%}M^I;)|L=c+#TTj$ftc}7%eBCTiH^W{FSatA#80n~a>YUeFDs*>fMm?81 zVkFCU3bE5Vh3S36U^7<=C!Gzne-H7mO_Jd2HcZSr;Dm@jlQX}q};UcRtp8(HLhW7Scw*O)%R#LyiLKMLp z407oeT<_R-%`HYN396i)$DGx&^@~Dm{lV|gm2I6;4FzhT0TGxF`{1??8!h1|kQA8@ zYSGA#L*NIiTL6ORiO;u<%DGkimXe*R-LA0?{JRdG&WF~B#?-@bko--9ulkI4x9j`e zc>!s#VNP$R$`)NpomHaN<0RNWStml&Ha_roz2;Y5Ts~LVj?80xxG0K{?E1ZCP>HP& z@gu^bqn|f|q~UinymaaW2H#pfwr}}>T{$mF_5f`(q_|N&hOe|?9Q5Tfw*Z|#69KQu zRzBs~V&0llmF&bnbOsu`P&-Le-sImZx&?F*SP|@;xW;{XhX*;Ky4Ov_NgfopQhD&v zI}55201NB214P_dFzeeF!2M{o-R?aW;it<_c?`pH@-lz$v}f%J8=~ir_{_OeD+PPU zuq4dstTM-{TxS<*LMu#!nKok6#`I;^*pV`Ur880Ww!mR?WW(GysRNI+4y@Zxy^raZ z7PJKioaE0m_3}W@)cocKjXlMa>Kw%U_NEU!;{uULCQ0Cfc3+Ltx1}a%K}v@ zHpsro-h3OQx-%Dvd{rX4kB}YAj#o6AFH;n*woWy@6F)cr2_aYyl?Y7PkjCRCz&@=L zV#8;HLB%}<+oOZUaK5=a%>iG%_NR*s;aZFa475m+7Jh zlKy3yGVfvpeMIEha4On+}=CYb4b*`sL>e=G9XM&6fPA$I@#XJVXP1)@eWC3ox- zWUiLll^1sXh;w?P7+t{K8JH#@qAviroY`J?(m0}PcqN%Bb$+%qY}pw6`gZtXFJp5p zc#s(~KUeB0_)^O6FkRQZ8Tkfi7@w?&S%NcAD(whqMA~=4FKj2pNI5nj(2Njh?`$YD zS!*fW%lqDVZ1R_J`ZKWm$^@EGoDD^xz%;Bg?*`zo=^(k~3A;=hBUAfOa})$Hpw#a( zAQrJH0Ne;DG@1sl6WHCDfbd-7{>#_PqWRQ^amIC`CFT4S0_||ZbvIIB)P|1;vk0wX zTLxNQjNd=?cYh*1F_;Ag0M2gIz%4AGAT&-`2_nJccKqEXPCjkOtE6%OvB}?20-;w7 zXXCB<`9{9po0#azvz3F-=*2&lpWa}?)>Ji#C~m@2Z}LbUGzF~T>ej-wdKdS`SUaNj zRCfR3C*~H0%P&(IS!Vk9@DWprMK2*}qkZprRdss^cgJDj zJ^XmAY@Z4ZEE<~tXLn0bLMHBSK$9iKAvs1Y+lk;;x4XQ^*=Qm5Ct0ZyfC+TZWLz5r zT45@smX&^sI82Y_km+NzFgsP2OY=V~vuOUDp0Go~I1{vijZUd@T9pu9uX5yf_ zRa@Kj=MU_h#R-t^G z$*(mRDgEl3kH2v{JN+OCZICfTlAd7A9^KKB+y}_SNSvh%y5$8l>{a-LSQYQ;w_n^r zqRJ|N@+y&2@l6-bXn+NoU(u+ z*lqLFEiXCiwPR*cq{>wJv8OQVvJxp(TXYS<31al-Y(NqYmeb)z z)%i&eWU#`g5?E~?SLR-BT0}+P#RQ-tvvGQ_udlt3Cv+k@Lq>d6N~K^`GCCNd z-!%>Ub`@j{FdLqk>iwqlweukdub?iFl)QP-uRU$qhChYG59bdc%L|&}#pp~IUbSd8 z#WZ1M0v$V+1Rx~U(6?08^dXe0p19*rp7f9hXb9VHr5#`GDm#9m&H1Y{QD|*V)!e@U zMkOUH*R^;~aB}RuZg+iOsh+CkBR(Okd8d7K*H1Dka<+U2C}|<$loO|b=|82fQRkOF zb&@@Q-{v8tqiHf!4&Tz}Se5J>-{w?)Zh!&R7pvYO-;9g&0!d|rNoD?W)f7lf*Z(;< zk5v#y;G~#B?Qkbi#+O!Bn$KLl5gQvTvM7f?;qB)x4u+(4C&1>^nW!^rZk6;ogT&Nx z?Ka0whoSBNL=Tjvh?|R~){m@;FQmsJy&>U)$vL}!X-V9T+?n7tX?@*Zx^Hi2TF-LFY^FQh>7O>!bRGm^g2Q1qLNfDq)U?aP(3>su2k+9 zjCF`=Q+Td8$@_q=^R>>@yXmWzW&LhRPkQ;ZuK0Hq%smlL?<`&yS)9YFB3uBSc;V8( zW=gNrXCzbcIW$~SHX7lfQQtM$FOstmqKd#li!Uc7UyC0+bHl34F7xH?;CUIy?@W8f z>B3WLzhk-TyPH)M-g@h++*jSAqxguQ0CQEKyP z?=Al=1a&=REUgAE*SCJr-W|+rRN(P7%AmuIFPX8YLlTuL@X|>gC`;Y9OM5o?j|ZmT zIe0d(nUho1_tSS|;IUx5GWEs)2Un_8YgRt1 zfKXV2>DB@Z`=Tl5`@V=(R3xR%(H(7>^g3OgHa)$~a(v@`a*l5q5)lBcfApm;^Lbhp zC@qTc7?!sz|Ih<%d`?iB>F(6ykg7?)P&?}toD;Y^RnPY>+Op@(Jy1vhoMDqwCs;P3(#X%SJi^?Ez;j=fyKQ#bLF>89= z?2}0Q8&uSq&f1>3(CzP6hpag&=?AfLSYAR&!%lLCe_R<~CMd)ipm4?ugpuq)VAP zI0qTlHWGF0lPl6c`3V~T?H&a3VZ8}3ALcWq)5!tcW20z4d}rAOkl^^bJ$eE=;a4;h z5>z``w)p?0=(6mYvD*(#v(QIJO7d`>%(SkuW27f=aM1{=rUw`4N8oFXIUDlIr=h`f zIdbL1YCy&7qNWOu(cxomi=eh$@`K(jqa(*^TASwA*RjLCA${Ckcco%q^P~D4y3Xf& zb}Ta!2}iq5ev^$BcZ8Rx-CpEWhSFDh%^o%yfxA0Y>#N>^Nc{^s)yb(H-Prgm-QPTYN>A!Mz zqNC%gI^$JvsP*~>adbWwQ?=2Sli@wVYBy!?^5;DrG~{MNt17q{#B&%G;T2xDuhRA2 z=oF9f*0iR8uE?+V60$E-%A5waq9WUZAppi(g*N)^ff(C{psoF?VrJ$;1&FuK%nFYW zI&63~Q!be<_AJ;s_3j@wk?@-FJzQx5_68BEa#QeErjq2C|8mMvGV`I7K@_q^ZgYsM zGbkSN1?3++S7TT#cXAvQQ(2UYt;h3Kf;{kENvDk9VmA28NtMOLDokS!3)%Ju2E~jK9AW8 zN@gd63f|nnwC+>kl$8$+OlDv!#g3b^kvMf;%Uz$Np0NP>_`p>@ANC8Y?jQ6xt8+cb zq;N7tWmO$KoKW;SCD_3(;x$(=$@ND`yvg2vk9|hcA(6e&^zheEh$8LK^QB>`Zq^@w z`6hEV{4hZvlV-&>H5jB~`3Go9hbR@1n(QUH$Z!X2T0RS+=rUZgq&gmC>lw! zQ^}vu_EU7;AnFXsX^>v4)|^QrfZNmG?x3?SGzAIhb1$RMtIbqX6{>Q2+s{kcQ#|!; zPXwYhUJ6r7>oqOJI$ktS_cBHZSvnA=gNz_{pKi`%O7R%wIs$jqVvGj&B0p6YB0W&0 z1~?HMVnh4d`F_U5A8umP{yS#6$I4xeiIf*Q8-(xSXk9t{g?oE!;*eC{cMa;^(DXq) z2$NW`Qs_NL8cp!SxDSlixQ z!WDsZfc3DIL*?hn#KE;xUsE{bp&ik6^ye9fj>#4mvEj3woT`twThSoSbB1(P<$QV5 zKSw~_)f9215=C9R$G)e^Q@%#{#(gRFd)rE?ITWZ_fKOjLP39f zKSkREfY621L9uI zc$U&URH*?~xjUS8p{N#|mrhZ&#O#IS-Mpcks%D>K-<+EMz${5_RC$-SvdHT?lgEdK zJHI;20b!o}mT&cx3(d85udweNL67h2T6 z<$vB&bdQ!nRGl)tww)xZQoD0)XWCg*GyO!6J;kwG4x<11*$Iyse7ONdB=`FlgCKOa z){!j?3Y8>t{5-tyUDuoOf?IB&9W1s8(Tl$1z}%hD{C=XOFzV)I`liJfpJkmL>K5Dc zSeUNQ(4?^7%a?dwdiC}vXW@I(%kAAk;U4raTwCXrv^uT$=CbXX5dIB#pPeui;Yr31 zpdFU1yfa{HlwD3qA%@0^(*3?Zc2=P=h535EGLWtTa-E;Ihx+|J+Pz|%K4DnfQog;f aaudd;$Kd!8$-kf(|2}Pbig*(9&;J3Cqptq| literal 0 HcmV?d00001