From c1386fbb5a2e53137e89318cafe4bcf20c98754e Mon Sep 17 00:00:00 2001 From: tcfshcrw <48719709+tcfshcrw@users.noreply.github.com> Date: Wed, 24 Jul 2024 12:14:21 +0800 Subject: [PATCH] Rudder first implement Rudder first implement --- ESP32/include/ABSOscillation.h | 63 ++++++++++++++++ ESP32/include/DiyActivePedal_types.h | 7 +- ESP32/src/DiyActivePedal_types.cpp | 1 + ESP32/src/Main.cpp | 89 ++++++++++++++++++----- SimHubPlugin/DataPluginDemo.cs | 75 ++++++++++++++++++- SimHubPlugin/SettingsControlDemo.xaml | 2 +- SimHubPlugin/SettingsControlDemo.xaml.cs | 77 ++++++-------------- SimHubPlugin/bin/DiyActivePedal.dll | Bin 188928 -> 189952 bytes 8 files changed, 236 insertions(+), 78 deletions(-) diff --git a/ESP32/include/ABSOscillation.h b/ESP32/include/ABSOscillation.h index e41e725a..4ec39552 100644 --- a/ESP32/include/ABSOscillation.h +++ b/ESP32/include/ABSOscillation.h @@ -431,4 +431,67 @@ class Custom_vibration { } +}; +MovingAverageFilter movingAverageFilter_rudder(70); +class Rudder{ +public: + float force_offset; + float force_offset_filter; + float Force_Range; + float _rudder_value; + float basic_support_force; + bool rudder_status; + float min_force; + void offset_calculate(DAP_calculationVariables_st* calcVars_st, uint8_t pedaltype) + { + force_offset=0; + Force_Range=calcVars_st->Force_Range; + basic_support_force=0; + rudder_status=calcVars_st->rudder_status; + min_force=calcVars_st->Force_Min; + if(rudder_status) + { + _rudder_value=calcVars_st->rudder; + basic_support_force=0.5*Force_Range+min_force; + if(pedaltype==1) + { + // if brake + if(calcVars_st->rudder>50) + { + //offset=-1*(calcVars_st->rudder/100*calcVars_st->stepperPosRange-0.5*calcVars_st->stepperPosRange); + //offset=calcVars_st->stepperPosRange-calcVars_st->rudder/100*calcVars_st->stepperPosRange; + force_offset=-1*(_rudder_value-50)/100.0f*Force_Range; + } + if(calcVars_st->rudder<=50) + { + force_offset=0; + } + + } + if(pedaltype==2) + { + //if gas + if(calcVars_st->rudder<50) + { + //offset=-1*(0.5*calcVars_st->stepperPosRange-calcVars_st->rudder/100*calcVars_st->stepperPosRange); + //force_offset=calcVars_st->rudder/100*calcVars_st->stepperPosRange; + force_offset=-1*(50-_rudder_value)/100.0f*Force_Range; + } + if(calcVars_st->rudder>=50) + { + force_offset=0; + } + } + force_offset_filter=movingAverageFilter_rudder.process(force_offset+basic_support_force); + } + else + { + force_offset_filter=0; + + //rudder_status=false; + } + + } + + }; \ No newline at end of file diff --git a/ESP32/include/DiyActivePedal_types.h b/ESP32/include/DiyActivePedal_types.h index 88d483fb..df6bb086 100644 --- a/ESP32/include/DiyActivePedal_types.h +++ b/ESP32/include/DiyActivePedal_types.h @@ -3,7 +3,7 @@ #include // define the payload revision -#define DAP_VERSION_CONFIG 137 +#define DAP_VERSION_CONFIG 138 // define the payload types #define DAP_PAYLOAD_TYPE_CONFIG 100 @@ -35,6 +35,7 @@ struct payloadPedalAction { uint8_t impact_value_u8; uint8_t Trigger_CV_1; uint8_t Trigger_CV_2; + uint8_t rudder_value; }; @@ -126,6 +127,8 @@ struct payloadPedalConfig { //Custom Vibration 2 uint8_t CV_amp_2; uint8_t CV_freq_2; + //rudder + uint8_t rudder_flag; // cubic spline parameters float cubic_spline_param_a_array[5]; float cubic_spline_param_b_array[5]; @@ -245,6 +248,8 @@ struct DAP_calculationVariables_st float Force_Max_default; float WS_amp; float WS_freq; + uint8_t rudder=255; + bool rudder_status=false; void updateFromConfig(DAP_config_st& config_st); void updateEndstops(long newMinEndstop, long newMaxEndstop); diff --git a/ESP32/src/DiyActivePedal_types.cpp b/ESP32/src/DiyActivePedal_types.cpp index 58fa00c6..493f4190 100644 --- a/ESP32/src/DiyActivePedal_types.cpp +++ b/ESP32/src/DiyActivePedal_types.cpp @@ -59,6 +59,7 @@ void DAP_config_st::initialiseDefaults() { payLoadPedalConfig_.WS_freq=15; payLoadPedalConfig_.Road_multi = 50; payLoadPedalConfig_.Road_window=60; + payLoadPedalConfig_.rudder_flag=0; payLoadPedalConfig_.cubic_spline_param_a_array[0] = 0; payLoadPedalConfig_.cubic_spline_param_a_array[1] = 0; payLoadPedalConfig_.cubic_spline_param_a_array[2] = 0; diff --git a/ESP32/src/Main.cpp b/ESP32/src/Main.cpp index c347dd11..26440558 100644 --- a/ESP32/src/Main.cpp +++ b/ESP32/src/Main.cpp @@ -93,6 +93,7 @@ WSOscillation _WSOscillation; Road_impact_effect _Road_impact_effect; Custom_vibration CV1; Custom_vibration CV2; +Rudder _rudder; #define ABS_OSCILLATION @@ -765,26 +766,32 @@ void pedalUpdateTask( void * pvParameters ) float absForceOffset = 0; float absPosOffset = 0; #ifdef ABS_OSCILLATION - absOscillation.forceOffset(&dap_calculationVariables_st, dap_config_st.payLoadPedalConfig_.absPattern, dap_config_st.payLoadPedalConfig_.absForceOrTarvelBit, &absForceOffset, &absPosOffset); - _RPMOscillation.trigger(); - _RPMOscillation.forceOffset(&dap_calculationVariables_st); - _BitePointOscillation.forceOffset(&dap_calculationVariables_st); - _G_force_effect.forceOffset(&dap_calculationVariables_st, dap_config_st.payLoadPedalConfig_.G_multi); - _WSOscillation.forceOffset(&dap_calculationVariables_st); - _Road_impact_effect.forceOffset(&dap_calculationVariables_st, dap_config_st.payLoadPedalConfig_.Road_multi); - CV1.forceOffset(dap_config_st.payLoadPedalConfig_.CV_freq_1,dap_config_st.payLoadPedalConfig_.CV_amp_1); - CV2.forceOffset(dap_config_st.payLoadPedalConfig_.CV_freq_2,dap_config_st.payLoadPedalConfig_.CV_amp_2); + + _rudder.offset_calculate(&dap_calculationVariables_st,dap_config_st.payLoadPedalConfig_.pedal_type); + + + absOscillation.forceOffset(&dap_calculationVariables_st, dap_config_st.payLoadPedalConfig_.absPattern, dap_config_st.payLoadPedalConfig_.absForceOrTarvelBit, &absForceOffset, &absPosOffset); + _RPMOscillation.trigger(); + _RPMOscillation.forceOffset(&dap_calculationVariables_st); + _BitePointOscillation.forceOffset(&dap_calculationVariables_st); + _G_force_effect.forceOffset(&dap_calculationVariables_st, dap_config_st.payLoadPedalConfig_.G_multi); + _WSOscillation.forceOffset(&dap_calculationVariables_st); + _Road_impact_effect.forceOffset(&dap_calculationVariables_st, dap_config_st.payLoadPedalConfig_.Road_multi); + CV1.forceOffset(dap_config_st.payLoadPedalConfig_.CV_freq_1,dap_config_st.payLoadPedalConfig_.CV_amp_1); + CV2.forceOffset(dap_config_st.payLoadPedalConfig_.CV_freq_2,dap_config_st.payLoadPedalConfig_.CV_amp_2); + + #endif - //update max force with G force effect - movingAverageFilter.dataPointsCount=dap_config_st.payLoadPedalConfig_.G_window; - movingAverageFilter_roadimpact.dataPointsCount=dap_config_st.payLoadPedalConfig_.Road_window; - dap_calculationVariables_st.reset_maxforce(); - dap_calculationVariables_st.Force_Max+=_G_force_effect.G_force; - dap_calculationVariables_st.Force_Max+=_Road_impact_effect.Road_Impact_force; - dap_calculationVariables_st.dynamic_update(); - dap_calculationVariables_st.updateStiffness(); + //update max force with G force effect + movingAverageFilter.dataPointsCount=dap_config_st.payLoadPedalConfig_.G_window; + movingAverageFilter_roadimpact.dataPointsCount=dap_config_st.payLoadPedalConfig_.Road_window; + dap_calculationVariables_st.reset_maxforce(); + dap_calculationVariables_st.Force_Max+=_G_force_effect.G_force; + dap_calculationVariables_st.Force_Max+=_Road_impact_effect.Road_Impact_force; + dap_calculationVariables_st.dynamic_update(); + dap_calculationVariables_st.updateStiffness(); // compute the pedal incline angle //#define COMPUTE_PEDAL_INCLINE_ANGLE #ifdef COMPUTE_PEDAL_INCLINE_ANGLE @@ -934,12 +941,15 @@ void pedalUpdateTask( void * pvParameters ) //Add effect by force - float effect_force=absForceOffset+ _BitePointOscillation.BitePoint_Force_offset+_WSOscillation.WS_Force_offset+CV1.CV_Force_offset+CV2.CV_Force_offset; + float effect_force=absForceOffset+ _BitePointOscillation.BitePoint_Force_offset+_WSOscillation.WS_Force_offset+CV1.CV_Force_offset+CV2.CV_Force_offset+_rudder.force_offset_filter; + + // use interpolation to determine local linearized spring stiffness double stepperPosFraction = stepper->getCurrentPositionFraction(); int32_t Position_Next = 0; + // select control loop algo if (dap_config_st.payLoadPedalConfig_.control_strategy_b <= 1) { @@ -950,6 +960,19 @@ void pedalUpdateTask( void * pvParameters ) { Position_Next = MoveByForceTargetingStrategy(filteredReading, stepper, &forceCurve, &dap_calculationVariables_st, &dap_config_st, effect_force, changeVelocity, stepper_vel_filtered_fl32, stepper_accel_filtered_fl32, d_phi_d_x, d_x_hor_d_phi); } + /* + if(dap_calculationVariables_st.rudder_status) + { + Serial.print("next:"); + Serial.println(Position_Next); + //Position_Next=Position_Next+dap_calculationVariables_st.stepperPosRange*0.5; + Serial.print("positionnext:"); + Serial.println(Position_Next); + Serial.print("stepper range*0.5"); + Serial.println(dap_calculationVariables_st.stepperPosRange*0.5); + + } + */ @@ -982,6 +1005,8 @@ void pedalUpdateTask( void * pvParameters ) //Adding effects Position_Next +=_RPMOscillation.RPM_position_offset; Position_Next +=absPosOffset; + + Position_Next = (int32_t)constrain(Position_Next, dap_calculationVariables_st.stepperPosMinEndstop, dap_calculationVariables_st.stepperPosMaxEndstop); @@ -1045,8 +1070,18 @@ void pedalUpdateTask( void * pvParameters ) else { //joystickNormalizedToInt32 = NormalizeControllerOutputValue(loadcellReading, dap_calculationVariables_st.Force_Min, dap_calculationVariables_st.Force_Max, dap_config_st.payLoadPedalConfig_.maxGameOutput); - - joystickNormalizedToInt32 = NormalizeControllerOutputValue(filteredReading, dap_calculationVariables_st.Force_Min, dap_calculationVariables_st.Force_Max, dap_config_st.payLoadPedalConfig_.maxGameOutput); + if(dap_calculationVariables_st.rudder_status) + { + //filteredReading=filteredReading+_rudder.force_offset_filter; + filteredReading=constrain(filteredReading,dap_calculationVariables_st.Force_Min,dap_calculationVariables_st.Force_Max-_rudder.basic_support_force); + joystickNormalizedToInt32 = NormalizeControllerOutputValue(filteredReading, dap_calculationVariables_st.Force_Min, dap_calculationVariables_st.Force_Max-_rudder.basic_support_force, dap_config_st.payLoadPedalConfig_.maxGameOutput); + + } + else + { + joystickNormalizedToInt32 = NormalizeControllerOutputValue(filteredReading, dap_calculationVariables_st.Force_Min, dap_calculationVariables_st.Force_Max, dap_config_st.payLoadPedalConfig_.maxGameOutput); + + } } xSemaphoreGive(semaphore_updateJoystick); @@ -1347,6 +1382,20 @@ void serialCommunicationTask( void * pvParameters ) Serial.write((char*)dap_config_st_local_ptr, sizeof(DAP_config_st)); Serial.print("\r\n"); } + if(dap_actions_st.payloadPedalAction_.rudder_value>0&&dap_actions_st.payloadPedalAction_.rudder_value<102) + { + dap_calculationVariables_st.rudder=dap_actions_st.payloadPedalAction_.rudder_value-1; + dap_calculationVariables_st.rudder_status=true; + //Serial.println("action:"); + //Serial.println(dap_actions_st.payloadPedalAction_.rudder_value); + } + else + { + //dap_calculationVariables_st.rudder=0; + dap_calculationVariables_st.rudder_status=false; + } + + } diff --git a/SimHubPlugin/DataPluginDemo.cs b/SimHubPlugin/DataPluginDemo.cs index 392d0c7b..d96ee03e 100644 --- a/SimHubPlugin/DataPluginDemo.cs +++ b/SimHubPlugin/DataPluginDemo.cs @@ -8,6 +8,7 @@ using System.Runtime; using System.Runtime.InteropServices; using System.Text; +using System.Threading; using System.Windows.Controls; using System.Windows.Media; using Windows.UI.Notifications; @@ -23,7 +24,7 @@ static class Constants { // payload revisiom - public const uint pedalConfigPayload_version = 137; + public const uint pedalConfigPayload_version = 138; // pyload types @@ -59,6 +60,7 @@ public struct payloadPedalAction public byte impact_value; public byte Trigger_CV_1; public byte Trigger_CV_2; + public byte rudder_value; }; public struct payloadPedalState_Basic @@ -284,6 +286,9 @@ public class DIY_FFB_Pedal : IPlugin, IDataPlugin, IWPFSettingsV2 public string simhub_theme_color = "#7E87CEFA"; public uint debug_value = 0; public bool Rudder_enable_flag=false; + public byte _rudder_position = 50; + public bool flag_clear_action=false; + @@ -544,6 +549,7 @@ unsafe public void DataUpdate(PluginManager pluginManager, ref GameData data) tmp.payloadPedalAction_.impact_value = 0; tmp.payloadPedalAction_.Trigger_CV_1 = 0; tmp.payloadPedalAction_.Trigger_CV_2 = 0; + tmp.payloadPedalAction_.rudder_value = 255; if (Settings.G_force_enable_flag[pedalIdx] == 1) { tmp.payloadPedalAction_.G_value = (Byte)g_force_last_value; @@ -744,6 +750,7 @@ unsafe public void DataUpdate(PluginManager pluginManager, ref GameData data) tmp.payloadPedalAction_.impact_value = 0; tmp.payloadPedalAction_.Trigger_CV_1 = 0; tmp.payloadPedalAction_.Trigger_CV_2 = 0; + tmp.payloadPedalAction_.rudder_value = 255; rpm_last_value = 0; Road_impact_last = 0; debug_value = 0; @@ -782,6 +789,7 @@ unsafe public void DataUpdate(PluginManager pluginManager, ref GameData data) tmp.payloadPedalAction_.impact_value = 0; tmp.payloadPedalAction_.Trigger_CV_1 = 0; tmp.payloadPedalAction_.Trigger_CV_2 = 0; + tmp.payloadPedalAction_.rudder_value = 0; DAP_action_st* v = &tmp; byte* p = (byte*)v; tmp.payloadFooter_.checkSum = checksumCalc(p, sizeof(payloadHeader) + sizeof(payloadPedalAction)); @@ -805,8 +813,73 @@ unsafe public void DataUpdate(PluginManager pluginManager, ref GameData data) _serialPort[1].Write(newBuffer, 0, newBuffer.Length); } } + if (Rudder_enable_flag==true && flag_clear_action==false) + { + DAP_action_st tmp; + tmp.payloadHeader_.version = (byte)Constants.pedalConfigPayload_version; + tmp.payloadHeader_.payloadType = (byte)Constants.pedalActionPayload_type; + tmp.payloadPedalAction_.triggerAbs_u8 = 0; + tmp.payloadPedalAction_.RPM_u8 = 0; + tmp.payloadPedalAction_.G_value = 128; + tmp.payloadPedalAction_.WS_u8 = 0; + tmp.payloadPedalAction_.impact_value = 0; + tmp.payloadPedalAction_.Trigger_CV_1 = 0; + tmp.payloadPedalAction_.Trigger_CV_2 = 0; + tmp.payloadPedalAction_.rudder_value = _rudder_position; + DAP_action_st* v = &tmp; + byte* p = (byte*)v; + tmp.payloadFooter_.checkSum = checksumCalc(p, sizeof(payloadHeader) + sizeof(payloadPedalAction)); + int length = sizeof(DAP_action_st); + byte[] newBuffer = new byte[length]; + newBuffer = getBytes_Action(tmp); + for (uint pedalidx = 1; pedalidx < 3; pedalidx++) + { + if (_serialPort[pedalidx].IsOpen) + { + // clear inbuffer + _serialPort[pedalidx].DiscardInBuffer(); + + // send query command + _serialPort[pedalidx].Write(newBuffer, 0, newBuffer.Length); + } + } + + } + if (flag_clear_action) + { + DAP_action_st tmp; + tmp.payloadHeader_.version = (byte)Constants.pedalConfigPayload_version; + tmp.payloadHeader_.payloadType = (byte)Constants.pedalActionPayload_type; + tmp.payloadPedalAction_.triggerAbs_u8 = 0; + tmp.payloadPedalAction_.RPM_u8 = 0; + tmp.payloadPedalAction_.G_value = 128; + tmp.payloadPedalAction_.WS_u8 = 0; + tmp.payloadPedalAction_.impact_value = 0; + tmp.payloadPedalAction_.Trigger_CV_1 = 0; + tmp.payloadPedalAction_.Trigger_CV_2 = 0; + tmp.payloadPedalAction_.rudder_value = 0; + DAP_action_st* v = &tmp; + byte* p = (byte*)v; + tmp.payloadFooter_.checkSum = checksumCalc(p, sizeof(payloadHeader) + sizeof(payloadPedalAction)); + int length = sizeof(DAP_action_st); + byte[] newBuffer = new byte[length]; + newBuffer = getBytes_Action(tmp); + for (uint pedalidx = 0; pedalidx < 3; pedalidx++) + { + if (_serialPort[pedalidx].IsOpen) + { + // clear inbuffer + _serialPort[pedalidx].DiscardInBuffer(); + + // send query command + _serialPort[pedalidx].Write(newBuffer, 0, newBuffer.Length); + } + } + flag_clear_action = false; + } + this.AttachDelegate("CurrentProfile", () => current_profile); pluginManager.SetPropertyValue("SelectedPedal", this.GetType(), current_pedal); pluginManager.SetPropertyValue("Action", this.GetType(), current_action); diff --git a/SimHubPlugin/SettingsControlDemo.xaml b/SimHubPlugin/SettingsControlDemo.xaml index 4b042991..1d4f3c9c 100644 --- a/SimHubPlugin/SettingsControlDemo.xaml +++ b/SimHubPlugin/SettingsControlDemo.xaml @@ -843,7 +843,7 @@ - diff --git a/SimHubPlugin/SettingsControlDemo.xaml.cs b/SimHubPlugin/SettingsControlDemo.xaml.cs index 5f26f7ef..3bdfeb46 100644 --- a/SimHubPlugin/SettingsControlDemo.xaml.cs +++ b/SimHubPlugin/SettingsControlDemo.xaml.cs @@ -474,6 +474,7 @@ public void DAP_config_set_default(uint pedalIdx) dap_config_st[pedalIdx].payloadPedalConfig_.pedal_type = (byte)pedalIdx; dap_config_st[pedalIdx].payloadPedalConfig_.OTA_flag = 0; dap_config_st[pedalIdx].payloadPedalConfig_.enableReboot_u8 = 0; + } @@ -2084,54 +2085,7 @@ unsafe public void SendConfigToPedal_click(object sender, RoutedEventArgs e) { Sendconfig(indexOfSelectedPedal_u); - /* - if (Plugin._serialPort[indexOfSelectedPedal_u].IsOpen) - { - - // compute checksum - //getBytes(this.dap_config_st[indexOfSelectedPedal_u].payloadPedalConfig_) - this.dap_config_st[indexOfSelectedPedal_u].payloadHeader_.version = (byte)Constants.pedalConfigPayload_version; - this.dap_config_st[indexOfSelectedPedal_u].payloadHeader_.payloadType = (byte)Constants.pedalConfigPayload_type; - this.dap_config_st[indexOfSelectedPedal_u].payloadHeader_.storeToEeprom = 1; - DAP_config_st tmp = this.dap_config_st[indexOfSelectedPedal_u]; - - //payloadPedalConfig tmp = this.dap_config_st[indexOfSelectedPedal_u].payloadPedalConfig_; - DAP_config_st* v = &tmp; - byte* p = (byte*)v; - this.dap_config_st[indexOfSelectedPedal_u].payloadFooter_.checkSum = Plugin.checksumCalc(p, sizeof(payloadHeader) + sizeof(payloadPedalConfig)); - - - //TextBox_debugOutput.Text = "CRC simhub calc: " + this.dap_config_st[indexOfSelectedPedal_u].payloadFooter_.checkSum + " "; - - TextBox_debugOutput.Text = String.Empty; - - try - { - int length = sizeof(DAP_config_st); - //int val = this.dap_config_st[indexOfSelectedPedal_u].payloadHeader_.checkSum; - //string msg = "CRC value: " + val.ToString(); - byte[] newBuffer = new byte[length]; - newBuffer = getBytes(this.dap_config_st[indexOfSelectedPedal_u]); - - //TextBox_debugOutput.Text = "ConfigLength" + length; - - // clear inbuffer - Plugin._serialPort[indexOfSelectedPedal_u].DiscardInBuffer(); - Plugin._serialPort[indexOfSelectedPedal_u].DiscardOutBuffer(); - - - // send data - Plugin._serialPort[indexOfSelectedPedal_u].Write(newBuffer, 0, newBuffer.Length); - //Plugin._serialPort[indexOfSelectedPedal_u].Write("\n"); - } - catch (Exception caughtEx) - { - string errorMessage = caughtEx.Message; - TextBox_debugOutput.Text = errorMessage; - } - - } - */ + } @@ -2909,31 +2863,41 @@ unsafe public void timerCallback_serial(object sender, EventArgs e) else { //Brk move - + Plugin.Rudder_enable_flag = true; + double Rudder_axis_value = 16384; if (Pedal_position_reading[1] > Pedal_position_reading[2]) { - double Rudder_axis_value = 16384; - Rudder_axis_value = Rudder_axis_value - Pedal_position_reading[1]; + + Rudder_axis_value = Rudder_axis_value - Pedal_position_reading[1]/2; joystick.SetAxis((int)Rudder_axis_value, Plugin.Settings.vjoy_order, HID_USAGES.HID_USAGE_RZ); // HID_USAGES Enums + //rudder movement code + //TextBox2.Text = "Rudder:" + Rudder_axis_value; + //TextBox2.Text = "Rudder:" + Rudder_axis_value + "/"; + + } else { if (Pedal_position_reading[2] > Pedal_position_reading[1]) { - double Rudder_axis_value = 16384; - Rudder_axis_value = Rudder_axis_value + Pedal_position_reading[2]; + + Rudder_axis_value = Rudder_axis_value + Pedal_position_reading[2]/2; joystick.SetAxis((int)Rudder_axis_value, Plugin.Settings.vjoy_order, HID_USAGES.HID_USAGE_RZ); // HID_USAGES Enums + //TextBox2.Text = "Rudder:" + Rudder_axis_value; + //TextBox2.Text = "Rudder:" + Rudder_axis_value + "/"; } else { joystick.SetAxis(16384, Plugin.Settings.vjoy_order, HID_USAGES.HID_USAGE_RZ); + //TextBox2.Text = "Rudder:" + Rudder_axis_value+"/"; } } - + Plugin._rudder_position = (byte)(Rudder_axis_value / 32768 * 100+1); + //TextBox2.Text += Plugin._rudder_position; @@ -5383,13 +5347,16 @@ private void Slider_VFgain_ValueChanged(object sender, RoutedPropertyChangedEven private void CheckBox_rudder_Checked(object sender, RoutedEventArgs e) { Plugin.Rudder_enable_flag = true; + Plugin.flag_clear_action = true; } private void CheckBox_rudder_Unchecked(object sender, RoutedEventArgs e) { Plugin.Rudder_enable_flag = false; - + + Plugin.flag_clear_action = true; + } private void CheckBox_RTSDTR_Checked(object sender, RoutedEventArgs e) diff --git a/SimHubPlugin/bin/DiyActivePedal.dll b/SimHubPlugin/bin/DiyActivePedal.dll index a40825e72d97e478c8f0a269856a5094199e355b..6d48037ce23c1777cb11d734d6d2126c109a7a71 100644 GIT binary patch delta 57706 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 delta 56728 zcmeFa33yY*`aeD=Nz*oMO4F94`@SzMZ7D5V%f3TFPzuVTs4Ue$LA@GcK)5K1vK+L6 zh=4nypyG-O?)w6+co9Lp?uw|_70d7QzH^eCq)E~5_kQnv{?GHr$G7wD@4Pc-&di)S zCyQT+S^P}Q>ML@8_}BI42<_itk((W(bQ9uzgAis(yztjG+fI$k|J5MIGQlVwHm=D@ zjLkNRSP;Jc*&xze_kCa}SDTa~%k>AKnGO2;>Xk~Fa!`FxDN+urhm_o+NiaeGhT(sM zh!FD%6><85LMTiX;+2Dn$WBwpR*BkZSg5>s|Feddjh0p+Or^O7qq|kzVBTuTwW$3f z2U;!zwJg%$a9^fg6*fpEMJ17g!72|x@kuEp&r+M?Gvsyb^<46X}7+V747EVF6E?8Ouq zkuBajoB-#awZ4ckydul0Mp*6Yv{ z{8V*GjNP*qJcCO@73JdIaF!UG5L?^_g+g0omZckvxi&pQJoXLxkuWWqmB!6=rL6VW-aJjq?DsgnO5$1Ojim^CRY_ihLuc) z5MNXz8dW|$!E!i}I_E64%$ibuHf*$|ThKGFMzWN|ID^en48vxWeAjS)?hEVGdDe8# zbHATBQHy~Fm-yeve?uyj?QTL6It5?ilHk3>JLxZRFTz*1MEsW^EXmP;FLy73tG%9_ zNETo2UW6}qJ70PThTGlF&7RQdaAG`kW+6UvlpZ4 zB_tkBOoH86sae0y`c$ezvQ~v0Sp}e44VY)^Y`1m3X0~&HY(vl-f$~88@{SF9 zd38uaLG0yFaSnmDvE^oUdV)RUULocgiU+ej?%UKmweGh?-IkC(m#H*-dZ{R`Te%4R zOEdIqu!-9{5YAJA{LxV6wXAkeOt-N=8ijn+sfp>zm8vT-E%_>tHLs8B3@uadNlZ(j zabcy~8&_$jVL^9v{Zb)RqbFy!TsvG9riF$h^UMI#h~r`I^fMd^DQPRKyru z*OItnV_B9~v~Mg+@)kWC%c8yIjb_Iri#cUb{)rPO42u>*Ytd|gteHIL(NX-)P(OnosndvSH zq}biXo?uEzAR*0N8c0Ak$^t2NcX=?OB9M^%DrOb#EIgn^~;~LUS+1f(%K&kxk3_-D`-J<}WHnj-aTx@)>GA+2Otc2T*d$|UBwm->rz$I_@* zaIuaA=%%c#bguCiSNV&pWl?R*$Wr@d4&hsXA?0f5DQ+5j4aG=<1vhLL`6}IyIo~oO zJKQVO9hoT}8NpfPi`+uM;S&H}j8?X^%m>?vrnMMa-2Sk+s3|44SGvlt)aqB_qNbGM zUWQ47jAcxgH=wvq61y1%=70Rp;G!f}L>r{9vN+rfiQ;H#@4Lk4OJ0@F7_5-J25C;PIxa`YB&pBF z(rO}gt>p`DxZmDHpFJ{$tCauA8+Cze3k5XEO@Fj|Hx-j>VkKsm9CQTDwE9VQf``+= zv7zO4=Ga;VmO3;&NoLiu!~joC!S*aI7x+W{dqAk@?0Va`_(Du$KkF*0wTS&3*A{hk zP8!EoRvCf|6ZTEA`S!q<)?Husx}^>eky5T&ko(|?p3i#_!?CH@!`H)yeh1%p9r%I@ zQt}4%yI&{9to5mYpso+h3AbLuauBu3-cCu%mTPlj`jf;QjiJ7no0dY2=!++S`$ult zAmVyGQ@;tyM(`Zfmkm8bJv}eTO#pXwUfN*2n^0N5gTe?^9X&(+PP62zj-Cq(zVsre zTAQat2Br5)s;%0XpCYU7x)OShswiAsR4N6R|I#IC7DYy_Yhtp6CNW_!U4+53z>%`4 zAUS=Ld%b#hex9;H-3NGs`mg-FVH^EY?oG1HWByG#`c{9r;Efk(`GT8~#eK7%?7l_q zUSQ90a~`EnH#ePD=6XBa+tk*ApUUqdz4Vj?xI0@>@Gjq{eUb}X50^|bx+aFp64KxO=Fy)7_QB-t+#=g)y+8%krx_xg&10-`^iNrI~Ey2o~k;QA(85i zMbx5_toY9$=$wz3Bb%pS{QOKkwWLb{jet3&y#P-y?NadygzepjW5>6w zm%(*{RFNo)^HPBFTpfjq>O-X&SoXeMng{J)OLG9z%K90=m{L|mf0mUEpg%8^H7O_H zq-O;D1D{%60JUZ1MY+4-pdzYe2|9qKEZg8B9NoL+aVB&EL4CD+aOM*rOJ-EG6CK`i zYYbZE76JxWSG8M3zS32lSh3904J~eVu7*S@4G&M5wF|=aJS-UP8x1ZpWn4v?0gJR? zx^AhaXU&1OcYW55-stvZaiBUMte~ycf)(uUoKWK0LM~X^yPRuB*A{g|_js$uZnd>t zI|Xfp*N(2O^MdJE?S&4LmwW-z9tdhHzW_SO2)`_}8D0eji`(7277QlqR)pvWLeN%6={l zJno^Pyhzrt@GM?22Ro8lBf@Kq1k2N|N>Ys%(V;Dl4sVgy)1kF^Ro$M2>tDDr&1|3A zT>lcgy_#>K9fAdeSZ;?f$O+~(w_nR+SfnN2yY%++BuiU>2a|Qn@L-m<7;jIW);=us zf4h5ndpeDZGeVJ#`{gRVz4fy~iQC;XK`y1)UWC|b5F$OE?JaYo#JsKUeKcX3v|mc` z6zUzFHn!Zz64T$4{)c);k9=!C+`}EtwYY~HT-()S zJ@WeArK9xGmHX<-19jy=y7FK(Yl}m@cuTCcTt}@^XV*M!eSt!ZTCg6j+%KwiJ_tk6{P!pd`#xpEon%K0c zFSo*3;jQ)7MS3O~8yenNZ><$(gg4g<=BO237~pG#>16eSuvT5Y)cS^e=jq{X(o>0M z=Y!m(I}od3v4>b}3i-S_tj|R?R1<8%PA0j#L(8d$4`ejDCWViywtZbsBYO{pwg+if zE!B0{xbQYhxf1g7Z6sqKgf+IPlq!Mg(b(|jXn7KJQ5**;jo&eNxOarJ{=hS0eJZq8kr0)u{uz8vYRK zl7mUMcFO8Y|41!wM@3AoFecUbgLc(9Ak*_JghB`E%J$dQ)qz+Ji^Zr3NRgE2J$@vAsEqO><=s*@_tMdn@Nhc%3nojGYK=Ox=y3t_yGH6rG)G$&M{HTvv6SqFys3 zYxMQujnN9n+n-v=SYCKzEbCCqhoq>9Lv6*^LDj{(ojh4uQ;x~yPM8Rqx9(K4nzRFK z4?{zaBrN=Bdto94Ohg|5L4Ui)b*-6L=MDQI5(zb{GP!6m&ttB~KNEQ*y!ar9d#&yX za{Nep$4`d0MB4)T!QO-U!PDWzX}iGdco)Q4Mp7&2W;y<9uUdrl5>G(&6U7HfX>RzY zQwGxf3J264Cc#x<1s4sX8`&hJGgK7*9E6Ty?@6KoIVS<&uNXn zL7RQ=4wAsg9wZU+E<~GuiLtiWa*Hk2(PdOE)}Xj)j-jyb_vR*1Go-uel_CDZoItVA zQc3E;5q3{V-_`KV3$f8~7j&%PQHV>Mgf)oZqt?^WmM)XE?Jq_up#wbXc0^G4U;wfF;D z{P9m(#ER4(Uurz5X%?e2i#6pZ&st%C74`8^F%j|JfYgsh<@^Z~MS&)UkB*5*@|ie) zbXrEp=A!j(R(6+E^}KP(UCNRTuA?A$w@tp&m5Huve+W|hMoRKg_1>|m9uk)Zis8#r z{5Y=*bksdeAQkRdO~sG-Bw7yOdUWn({2K^h-5xUD9^f@M*-VoSE)ruqTE5kr#>RMv z=xtGiIXC&j=Zx9Cz?wk*Z_YHoz!6Z<*}Na#_BV z^0qfgdCOm^_l&c9Mqq3R(-P$n=KUu=Dk%)EQQ>7Pf@R&|WoPJQ&pSke##P~kr|5(a z39aFq8WM3B-k0KLn|Vqi-Uav>vMrI;uyd$7b?5lZ!fzoJrp9$(HQOT4^}fXrksV8- z+|!AWeM)Kqc?jr0KdYlo$*Ne#WNJluP&5$-@VlW-wn*nw+y%MPrt+3au%(CBY+0RD)mO~JeZ_kvkgm7Px=ydIOrWEx+2EQ<-kr}- z+`8%9?NHTcnWgmmuS96M%WJQ!Q5y2-gJIJx2YfOWQpPTwF}DM8eKg3bKN{@Bd;z>A zx|46*C7hGwv6NvClu)hSx+-l3wE`=EiGk^+o$FHrNqX1Yp=EGk=r!4kpGA@!RX7%~ z3G#ZOySze`kixdFcX#y0K)cjgNR`ifXd9?E(&FQ6Ua9z9IsC4+hI3_d=sj&|?};?^ zp0#bgO?sbsJ|!yIPU_*+JS!K9K_YLCBlKSun(t z(o5T0AW}OEU1az5-+o*(y(T>EO?W8e5^e@;*!w#hLcXBA^aUg>mzTSI(!63E&|Y|e zKO0+p!W}*72&_vpEb9B(-LRppEiMdV-Q#C1Czfs^;?d<{D#Y-TmHukJJV;z8J*~a; zity6Y+e_DxbfxY>q$efveUv+SwA@GnI{r@ZamlGOCwn^i?uC(4thhm`-%p+tdeOqO z_buiydx$RFU`@?i%$O#I>|H#&-eOJ(!{({-7IP}IE4ALC%Mnk4x0vy^Oi1fR>hDv! zgbdpjXdU=cus0==EWc5+FB4ZsZcp|m8v;Y6YU{cW$K8j*`ZnG>f))(!?Dt* zovRF2mrbkfF*PV4#!nJZZ}r%;Fah;aQ>WjgOj947-mAx)Ak&PW#B@XWy4JJlx$5^b z#(VHila@wD6B3DOA5+LU%}Mc2Y{+!gpn;kb!>xdNGS~ZNacM&$UNH)3rdECW%n!#+ zKnymk^ELP^eGSLl4np1e1~BmkK-8>Das6HA&saHytax;0t_ht2 zlk;u3n#-?bl%7OpJc2x#4DHDJWGaHzWnO0!NJwU_AF}4)tktXaXJ;jcY9{l3_vz|| zXEzPkuM+UQ(Ngyiv=c<|YowCkeT`ITuaR2dG(jAWfjnOMoSlJJKChmg(O0&v-g1A= zJ;re}zp*O^vJFx8DDAb+LrKn+5W!udtGfD}Qk;j}ea>mVXY48Grl)W_4vg2@Q7=E{ z+`hbWG0H_tokgM58&z6&QZmem$k~wczUdaM;*hVlN%GAxFp92qSnKwh>ABFy-7gar zi)>3bL8dJ|3UHDW(Cj{&*r-zRtn@w{5SuB+y3`!2-83mnh&(7kpnRlDnYwsZ3Uabx zR*&4E$);JG0y+%l;sG#A-j2;mRd%bfv$F>^V8p zUdOd+T!`MF#F(>BATIYCpx9$^`qtldqU5SIQoiJfk-&l%S_9Zrt@2276l+I0CdEdj zR6b#Ly`gTNQ?2Y%-=0$%xu0SJ#XL86(wp#M!|+BlTeOQ%7x~>_i{ia*_kJMl**rJi z3I$?2F{QCYHw;G?EB+isBCCt%c2nL_@15J=c?%-8I2ZLQml+^yW>plnfZa@wwY%RY z4_pUZr}o_in$(|M)N7=kl>dSp#k$^svW$8kN(B{N3iU)PCwnE@%-^FgEcg3 zR|_Kli0nAA|K=mBi_c4&DJ}CsEGITVeN0pqrs9jB^P`{4-JE9J#&wwOYHpc$6A`ba z?+nzfLD$iVXWdp2La9tzKD9 z=_aB(HW^$`vOqbe%Ch9#LXuu&vmfCzT3f+UcRG_jQrIY$1wZ+vHe|(X2edSESWsfZ zCy!{kFgKvl+ z+++$WYE9jT{w~BeZ&Yuc-(vlmcAD4WO5BHHe1IssL@+$ z@0Ro=s&o`8EgN5EMV;G{(o8kYegTo;-L+({w|wJ@f~9}nR_wTOpMn+VW^O?)Zb2~{ zM-PSmSlv4HyB51VQTQi1BP>$?)b%;pGf#5MV>Kr>)7tk``zBOP{riIRJu4tphsTC^ zkwPY983@GyW{KPR)iXK8)Ta#9lAFk0vE?AhvcZKUnw(guTeNpT`7+~7lbXdm7{ew$ zW+X(C+On|osh5LTmMfK8>d}sFro?NMkzR_NdP=HmF_autIO;c07b_7rQiG^ri1ZQhvC_Vo!{*Ct7Qlsiq4DmJ+?q zFuhkLW=cN27@Ngziz_xLxZ}mOrDK|6XsA)=Uzn^kt5;sw)pI_SK=&eUZ&DsajH!VCm$%Tz3x=|HO0a&U5>aGh zNt!W_uJT@M*u^KA(C?CILXo`^%v9&y5Io;Jr@;iwftfU>P}*KE*XHnvqYa6jb&oP^ zou?$?c-3bR<9&e=B4C&3SrF==43qR&&*tzZG7(rao|GJ=hpBnQ(_6E9#gbU8Nqd_3 zzj}fgU=rbJ&C=8`x%gqarjiqqi!nl3TE^jAs611#7ijH!v{;bQCxi??SY`drZieyMj;6#ETMBkgQth^sth0)ZxKN5s0EsCETdMnIu5eJb4X$TEwxz81*0-PT z*(g>ef9;8BLaO@8B|SW832BED)9r~FwltTMVnmCYvM)oERN>0ZuqS59?q^H)&T}JC zU%4!T%6wAcc`l?gZ5g)AX?6J+Q~h0Jx{c)Ulyo6GDhD}}UGI^*s74INI z9d5D3OHoS9vSk%xuffu5HA1mvITl1vadLddWe*wkA}BwvEB}Gl4cOVCSX*{^q%GTd7(pHM1(bsu`r8QKF=vvS{@Sn+Pk)_} z6ktxv7d~4#$kse?Ty|nd>DV5wjE|2MzsVV`;|H>nJ7%YJ%uXdX7S{UMJV3m`rG?<@ z*clzO)4`tGtX({*t}F}^%qOZHgGWH}F{`dqU-76jzPWY#*65L-&oO#Lzc zpns$BsjN3WopY|l2z3c?69yv8EBGJH;!=U*3APxiMla5+xefxZn*ijfLyIEXxRIFu zp@GD`uRnFi=48p>bv`+{5!DN`Q+mUfhpFMXw`+A-fx2j`9C~uD-^+AWsxL22E8`$& zQRWTeg9-$QT+*~I%0H{aqj%M|#4ZQIk?esi>i0F}{^y-Om-=;s&w+1A6;yj4{aU{$ z)?1bE(c*i&UrV3wz(o=4S*y4Vivn-?CMb#ktA8~xT@;a+%;CbTQM=xiiFdT&SRH#= zPkx))`7~GySEBEEml46ORMAa8Puk$CD84!>L((ajc?&^n#!g9rOE$l%T>q&NOFLoD zuJh80ZlQY+W|?wJd_R9mO54(;5kzfS+AWL{9ZKPS^!@y;BfV0WWtr-COXI>Qy8VhX zP{}~W?peB82J8=LboJ6@$$FV~>p4pL1Iw13!9D0M&f;T$_UK}GL!CCky*|-85#94? zT_@P?x8W#G!B}E&-Kbvo_o84A4zGtl_pCjn2Zz_g7BzKwQP-e4BzryF7P=1Vyycx! zSjQi8ve)9R>Zavq%e?_zm3dF`-;f!*FEcYQFADbJ(0lpcWXJ1ei~9BDg;l}X(R=wT z8S+}aRb6mJS+Ah{Y1`TjGkBIv*N>S8U)LNI@da88_1Z%0F7>@D8kF}{<(i7l@1ub( zCE&_JhvCwt2h=GmdUifQ90IOf;xPK2x@A?5&hHV2fUAHwjJ~TLThSx_UE&asoOjh} zD^u0RE6bG+RQHvIoj)Kp0aq7NWb`1Jj5$ag08htBGRoqlvc?XhYd4`rQ;0ohY`0V7lm{u|HYwlYPSd@N-%j&PZgHA3birISlw+yloqL3maCM;;&kj=eXzqi* zLeVaSuA#KO%2-_KKU2|8xf>~ChS)wXyj~vgC5v{d-8=G&8J_k%#1N*b3xxH{Zo!_Q zT}kcyR&}JReK3Qk|Jt4Zl+L~hT($bgx*hG#5zL0c>=o)$*H%VqX;6Q^c94xHL7(ZB z8?QShpQndBOVW*M{uwCEZoAXW#)HF#!E-D*y9=II@mRVEG02)?nvT_FXw?k6w<=u0 z(ti3Sw_~FopMtyjMw(dDgZXjzOaDT(Gp4litCTXj(|j(%9}QObw5APi-(%oWZ|R~y zOWwng-=L=6@>gos_352o2gP_nEzkP!SfK&qv-=IT@%rdD{kdxY&e=AwCDSv2N`>cJ85wb|k6_naG3a=wD>pE@I7NRn9aQQ!2Q$tRNT z1q9;aU4~>EJ*P2=t5M@}KD6<=`t*%Oo&6osoM0|))H>ve8||sg!3G+2MRXVXm){VL zP0w%DuA6d|Z`JXe3Y)$qXC$Oah=wVX@J3CTQ&hHy{q8zw{F&40`!*G5C(g;o$q%9@ ztD|m8$mUkXV#0gL;S+E~GCRjn&0L?Wm)>-q@`C#HO_}z7xNCb4O>g&=RoCWJWw1JJ zv)$twCThrjYkUP^39e=4J z)HgO~w*SmW%3w%&hoOPG@*wRK9x)!fE+(%e#pEqhOx`lZu^u&P`4wl!#$lodK=EP{OnBW2;Icq;l7c) z=}C4;I!7m^`|5^cQ)w6u9!%W^9qfQ=Yld53S>79Ie`l!r?N<9NzG?ayblV+@ytepW z1YjFJ6SoGKK+bh9ErgRKo8#5yoAdbDsl$zJi-0xpHsJXD$?fQLx{r{U^&cTIxcYO) zcm^`1pXw4}m)7`EjE?LgoBY9dsVR@|drI+;(IkGyDoCsV`rzvIQ{y zg=zsx)G!{v|Nq9pg%{A()PZ*<_6T*=JLD(a`AsD6O_=WU-trmhRd;5EJPq&t1mDk) z_THID(_21+MgreEOr>MIJL9FaZ!K3JG)ntMSPX;Oa6#kdOw#tgjg)B#9Af>VG@j2? zhi=PKuAwzkcF+6Jf2R3N}-jy zsNKDp>v1Ykcw^te6jZ?Ax&f7vhoWh(R90TTuH;^(-hWqZEO&BkS5f`>uDn1(;r3jI zUII3>eaBLD&t2v6H%I(?l6Jd#{I1Mks>809ZO`ZuY)9_S$s1$nU6-OS`M=wG%hsfW*2xJy(ojmId z`CAx)TrU%!OI34r=KSSgv&uS(c5p}0P7D!kiT9Gsns%~izucMqm!nPZC|FxZ!RCYr zR`^oe`((lXk5a4sA${H5MQ=|V7xwG;a&QT+w>5HoD`)m<45dl;VbKt_6MXdav{s#G`a zN>0xVFVKYq9C$bq(sOrsE)2t4zbnI2LOfk|?}txEF-Bd>N+)*VI{NZqSBN%a2SDF* zy&cy@JHpN3UNpj%uBjOh#h(z36g7?U{_e(K0&B+mBq8l~A=O0Mpb5$Drsh02t~n$t z3z}iHGQnzUo~-R2G&M{yxLzhdlcV*dkXAF*Ll2HOvj^sFH!7z3KohcI;>}gQ5#P2nbj?irP>M8 zKEzJ@b2bM~rI{6V&DfM!99}ZvNM~mx4i9l2OH>a%YDprZUOoYQb<3lU&d}683<4uF=j@;4pIS?u;0mrP9=*Sna0W@eZQt)S{$#)Y{!SQMSZD7s)sd zrI)oO`EBRLFppx_Hpqw&@VSi`b>8Eh>1YsaP_UXD6@&Nf46ay8-3*=Z9$wcFLARr5 za9P0#E0 zszs~WPdJo#O0d!3N}zfqY8w%BzJD+eE61W>gCb429D<*NvjC{hDs8NHJ6ubJy z-u%pD*3ng*iZV!pE18TG7+f?y1|&mjarR{(QL3`1vzg^u)V@zRx=qp&l+N~b?c{6P zN#3qS*Lym7>S}P&K+B%|Om73|EJ>fyTLGtb7OFEyI}ON1bECQkH~B; z{-!4Al%#PB88_t0#OBLNsLgvbm3)#<)F_|_w1iSfN%aWOZFc8E_%yf((Ont1`kWW| z7<|>*?31(&(_mS;W}8UkBGyp!b_oe-SD_dE>9Y3Q4IwKn8d%gkNt2cl6EURaAn6M^ zs32)v`91V88$)>@qRs=47Ha&HdDSN{^znsh3#z&a8op%7Fo{G))Jvaoq%ofc8h@pI z{GCrZhT=4$YX6mXjMN4;H01w5JJPg|+L8WhlXI;d|I3wa8uRb%wCbu?=)GQa(Em=w zqI}IbYtp~{YNYu&wIcluY{mcZ)!6mLfA`hMRm0WTzH0xacJwYWzMEA~U)Q9J2M@vj zSM21hJ;N<*352yA;_yj))xD6v3=&@lGrla%h7H4asqVaj7 zFh^|Uh7`|gOX=6TLtUwn-uc}|%zf#n*}JaYpQM)W%MBedPhS%wZRX~%-}I4jhr6}Q zxGe@-B;EvywuRe;s}fbd33*}Y$ZcltY)uz>O-Et##$AZp6wUdX6RozG=0yDFX{apm z>DK1NP6k`7&1#FY;dk~ziv5|eW4!lpUD!$L@%_2uLzg0fb#-8(oM zC+W5SNtxa6bnUPz{aE>2Qts&2WYmgxb2_xsm+hQQb~^mwn3JWpH`_Ur?40a3W7O;4 zvj@LCuxO6D=e^EFz1YfhveMyi#QgqVp1R?^P(S-YR&c5p-Q_g0(&4YK{Qh3gexaKf z^+5OS$#(FdsiR+osSJ}|X`+TrOd%5|`vDp?{eV4;t+%oLwBL=JF{*{fKqvnl78)_UBJ-ME|Hv=Q96Q*(ccgd??$8&)CQ-(h6&&Bc^QUQQPBV$K5eEGWee>|9DccuDc`t+O z7hos*AsL6d`h$cJ7i9ehf9@w{NIy!AJ!CmMbo0sHTTF39*!|zx+v_-G^ z7+fpKR!2WFgMr$i9{jK)TXWqL+17fp)!}c-lpOBfK}_t2MzXA8V93iC3?^MFqz z*zBL-@EbO?w5B5k^iTQ;eYPo7G#*PpIDVgGnQj{MVYEjF< zs?L8pJR}ji7yM~E@aOFWxS;r-K1ujU4aPFM9{kyS!kf*+5RxZN=Mc8|)Jf7wzs6G% z^9-cQl~Vi~>@)X2@ad1n$b+nWP~G`uhUWv6OAV%lSj{T#Lwe*x4Z#XZaUa%@YC?`^ z2o`0E`y(I*7sEC)rsn1am=s%_=KzphTn~!-W0qmqW?n-wn1EZHv+%-)`!`GEC(Qmt zJ>#p4NKCw7?w{(CuQG;y%4LRa=GA&NHqC*31{v~GLw-KjBVTApPxXnfQc`P)Pp>hN zFeBdpp|^6-_wi|%V_%1!_TjqQ#Ip3;_!2tq}?Wksey?qBnZTh-Gz3!WM z^}4TfVeNaV^S!$I8@mArS^I&l{UA9%Fb4=Y>T6#g8^o4=*39BPA;tZRhV&xjS5{`& zW`2@Va6V-Yiy!PLXym=>n4@;}(Qk{?nxpZ`adqg?47JnIs2<#;ZJISs7Ck$q`g1D^ zbPFFskAE3aFF9Hj%lVO~NzCfuqjtrt)*mA{{kx3FNQmNG1=Ay$9?5h%7GQ8iF+Gau zQAAe{9K9)zD@Nxu$Oj{IzQTvl$q9ANvCLSkh7`9v!w|2||Cb%78&-dxQAXR3auX6i zSi7lRN5EQ4am$lk3F;frN>IB)i}nExE{1L9o7!oyFM0GKiG3xpFWNCQxEQvXH@DMb zU-G0Fjz_?koqf^XqQS+m&Ag?Z7WjGJ--4UV*ljAZG;-|R{nNy3%QJw4zOIv zy0kTFa22UBKV?J~bGcaU`cp0T z!#1lwwcch64A)#tMR|sGkdZm!#48;L6SXH&o3EqwJgH0 z&HT64Es=_SY#nI6ob+M=hHd7HeKs(3@)*cL_huP}ZDy=?wBc0--COPSYettonoUk# zUk%}2*-t|_ll5$=o*S-So&Re_W&=|gwwX^4vfZF=|1~4BKa2EN-}u!Y#pO2hD^&mC z1DL_E&HQSRu13ZhQ49AHtxDWj16h?}o4G-q|C>E>5R(R}bAHQ+9L(jx>NUS*3>d;? zhHd6WK63#X8p<*Z+sv4z1!QQb`ps_{Il~}AS;vA^aSzuJ?olIHd4yW_dylk{dd4Vb zFl;klbnQ{ao;jLH4BO08gB*=kcl@4_M6Yd;qXFb-EX$8o4}(EF6h6i{W{gv9$1^hN z6*&1@JsAEL1Q{K#jyj%^bBdESjL{^@t-g7)TmIf1i!UoT%eb%oT*)Z7l*DyFQ`QC2f$HBmB>)&TM4W-W8pw%$V= zRnJ++oOP`q66aby=Q`$G*BWmEr&Z6no;laI_6O(m^?J?*<}hqCKS#9>=nlM&xPfID zwwafZOu#yVFQttvv$6G2c!<1_ksDhNnG|~zBW>oTd}XI?0*fli9s4GhW7uXsm2V}R znY6ieL3g>vu4f zbC1U1obS*O?xH(cY-ej1%t4|UX*2I@#b+_?t=32-Dv@p7$3hI-%&&8#_cQ7K)(w&9 z5W6&s+*2Q5&I7G46X!ua=ON}i)Owsa59>LPFz1ohiYPSAql`S-Iu1c7kG9SNEp4|Z z&EY)80u0;C2RNL^ne=$;;}A}ILKEh2_AqBp>$k+&tLHq)oF`keqQQAe&v}|TPq#Kk zE6Ih=5a(3>p8nzkSW59%{ujSbizp3l6Bg%kiC>ZY3ilV(VtAi zV*Wd)_y`)Xr6OI-V}=uBnPnm7kxFT)vDx5y5yF#8yDY$3*1Y&7Hn1QU<r@gn{t;5y@mhb+wCO8lGH2YcP{ah z1t_=s)@6XG$K;Hot_L%;?RA;Y;9F2F$47?WA;UfuJ}nwdlpnC64}BUIky^WNeFoZK zaqp);&G^`%VbR;IWid)!-()OS^KheIhQFi6p?u21mf7c@i)j)*;JiYJVdOFqF%^NPlq z#SOzpSDVG}`G-AFXf+d3z_2lb%Kh>vln1j%S6js0`CEoq#6KBY8NSwoC`TBcW1@1- zV1gBWwhS?gx3Wf8$BFYsjUSdEE=iwfjT1i(d?w2-HdsGJ(3`7ASEq`i>ba0S*mHEX z$1FZK5UH(d?vPAzdcCbzuK20%${~f~v_`cqL8O+?vzCheBkvoQDt>@Wsu&FARPkdy z!3(oT4zh@I8gCnzDlC;mae^%YWM%F#MmSnCUOK=rIk64aB7BQ}t zOx)6&7?T-JhiIiZZ{&pP8Zoh^d}yxdJ@PSpH~61}7mw~GZtM3mYSXp)0gG9zG^%k4 z;^Thv@P*-)p7X4!V(#F%LlVRzgYO$=7Du^yXBw#jw=ms0Wbx=YapBlw$bqN4-vgF7 z@#5g|5X~}D^1BbA1m0D)bU?0HRJIaA57&|>Y?c&)SYVWC|NM8?&e=b&TmHp6vHzjal?S z&qxrqan$Ok)ZUHGIJo}qL2+Wu$X-=uv9B+6`D}D#^#3u9bTwa_MX<7l7;oj=J;*FB zW~1M8@&^wcU0o_JA8slw6+iSbA=Q7&C6|fZK*xJic?5b=s`wXlbH!rxm0WQZ!`P84 zhl~-EN2S!7#T$c0^&Bq_)XwTXUVJbJ&?8p$p4GdbxV-n_0prELKnsxLoIt#je7wmh-sXy8-`MbI-@hjiLYy^>unuM@WnK$%(*p` zgM_|xMa=F?U5OGwuhY#fyaH#ETWE#Axx7 z@)`54#AkPazM_1IpR9-%5xCKe7OyH_GZWh#z+P95F;-?EY`^jYV{1%=y`}t1EQO1Q zA_;p}`I)gD?EVO_LpxHMGTV|9vezB_f!!q zZX|dg>t5ukCFHgd1kbdRvtJn+I#K!ON`j*qo>xWXhx(A@LayJ@UR3^w;q(|Pt4x2k zj>?;uzMbW7E+@*mYu3+xx%ss~3ikg!#f!6?osFg`&vdKnUK3Si$7f?35xDP`D$ zVFSaA63{)OH1jmDKV_1V^-%=wBx6b8y$W(>Dj~SKlIW>D3I0$_l#f{Ei+)78oL$}n zx*{^NrvOf2_+1v2tGOJ(a0nnq`%%*Y&lzU_Yc(enX~gDwC} zW_V~Im2WH|?#;u9JCSQP8W%0((+D<}5ItoiL02)sxeTvjxPjr549{dcPxdCQZ#<B z>KJl!=kSb}95E{GDwN+DwF(vfp@4jCFY%Cx<9*iwCiU9@#>RSb{7mdkfR#wTQ7Dx+ zqr5ot9B?D+?*KgBkKko!4n_Qudp^o|Zg@W5Wmdbx{uQqM zwxLwMt1coI{r@7a&1qbl6Qz`obWU<9!&mx{@&|oLVKckAo83IiZr)@!UkoERS!JYK z$66y99%08nvg4!d_!)NmKpExfF3OWfbmlf|EhRU%mXe#@xm12Jm&#v{rm`}I$~{@~ zF;4Fi?&05ac}N|}+|`?m9%cG3(Imf%^O_hzd5tm?v~w>AIxwg)8A$K^Yui3 zlcCL%MaXxV1ee!S|J+?kamDo}%Dj4VHklnCQz*&La|3;@5I4d=@Jw!?h1@_kZlEk~ zpdxOd8g8IrCenSMb?Z%}bvnb#`*_INdRFej%6(XQ2rEy7vLeQI8jituWpzrdO>D`@ zjIC1oM&|+Et`x;$(vjX6QzIUVDvPy?2Sis;R^leEh#t6&DPk$#%z6)@Tl`n4bY~f3 zsD;cEOy6qk?*a0WmG0=TGjv4^hM`JjIN)3Z!Iw-^0N;!_4{(Z^D6cYH8F?wnJ0pqm z4#O9tR-ydYbUlH}SVhCcP3-;?i;mdy$Ex9Et77eKs~i9A<2dSTy#% z*eG#zKJk`EIr@AS8zZh|?9=FyKHmV_q+yXYKgPz2yELpKYr7%VBX&te@owC2U>?`7 zLp2IEduj{F=%-3UZj`l?IH#+`EY)}eM9kB$N7KHEO%UN9{UNgM0_l^8#)V5nTBQ<(yg7vbPZc-O1C=1wHo$pM7lLa zyrf~H&FR)OaYDoP0Lu{7ST~ZbSo<35s zNTgef#4-(At)yE^#9n5#KNFCNyg8G{B}8}PMuDY<;mC~JQ)Okyy4igkd< zK2_tDn8iTR=R(4kh}o#bKr!rMiIwB38z_=p`0*iPeuX`VfueDdWX@vd6>f=L%DfuR z(-M)F)MOnfnq}6+=I%4BgGJ$Dl3Xqo(yOS1L#|qODpuo0`USu671~Il=EQE_wL^W?vFBcPlO%!4&NiG-9mK;}36AjBG zHfXe2OcJX!?0B~s)=6TshE>)bS0;;jf0vS9)$NFwB5r2Pvs`=x(bL5)MwbXj+A`}@ zvH1!q8dY&znJ(g2O6<$-E3Gp`_B9eK0PidjyNa+iLJVAIohfE9wp@(N#iU+LUo9nX zt6XV4SDb!>#F9{n+2Y|F8S{wOfzB0sB`WHX;Pb?yO;U6+FsC@EVZ%B%S?7z|noBb}>l9HX^ip#Q7Tb zapxJssDqeMLk)FM0Ps?=^9UhSekNH^i_Ph__tqOFypc7c*a!l5fEM zn_{zuU5&8c_K5E^v}*k{5s=oN`R1M~|KOPhY^Uhe|?O6=FL38>RI z;yVp{5`i8Saj!{9CwRw1xrV(D-Vb7ghD}E>{}QKZSUwu&XE9&H_CW7fag|3yFM{ar z;yDdl1?&%TT*Iny$(#@qUY8EHjluqqGV74UPOEs-swkgp*u!0BSk21UA4=X!z@n7z z4omC4=aBN96bELQpDBacK4sBfHd{9}nF0gG4o4Jzb9g=m6e`c(361(u{leI~IY zNZOTU8de7^SrMO0o(+{qRaR!$1lhWalNWl*eC^1qkN5x}aID>Q5sL~E2EHS9W=sa0nFASHk7G~3!s z`CP-^1J*}r{!#KCN_-lh!9S>B1;84VQU8*>`(R~&@)%)s|LX)7gOr^=N#;t34pCPA zEV17bp0*BCX8j_uH-L>$4r3f?^zJj2^EK=QMvs}w6&iLKF70!atrGKyiRe(XltUWx8i>wOe$lWZh&C%pZPLX| zNS?1WYuIC`#XRL}4ciQ?MQJ`ECBH)03zb(i>~vrkDn01Y0J8l&Jp4@=t6`oYaB+z; zTSFJZ#UkYn4O?W=76m zFIQ{@zRrRxV`TQZdo+z4dB6&m*o; zR%^@{1<&O5OkjsK-YygIsCDU|BAy(Ew|~SlfJR}#QzJ#ZQ9_h=0F5G=7bjBkg|S2* zI*w#sEhPAel_+PGQ@QXtuocm}50Qu=%U-xLOHx`_mn+*_Hvgc15k|FBdn=2@Yo4Klby1v|AOH$NyszzQqMopt= z;vDGJ{$pkO_})ZL{(sD6KqKP7&wt0U=GXJ@>q>vRC+REf(Ifwba{K=OpY09k|Nqq< zfFG;-3q9cXD7tD>qUoZ&6woAo0VP6QT=hS#hUc%i|3By-p8xLUCp`bQk^Fyj`OWbB zdv7OyIf(yn_5W}k@RK;YE=otxRUl^uG*?i>9=_>+iLybXORj`##>9!%K|PctPi?&- zY=U-GQvfZZ1TbE7XIRIuKf~b+$1!YTI0LY=n9XJE=s@dYhARM5v6)0Rw*Y2~C%L>2 zFkT#Bc!c2$tvBH=#x)Jc@^cnb3@7nr>C~qBp z380~IgGdq^jrRjOBOU^*H18Jaka-0^WD*(?cCAb!oz3$3Rz$cBSqP2iO7ZTiLxejpY5Q3(1 zf>jfLu%zc^rB1nPz;#NBa%c4lWr@)Fbp8dWOtxPFAtn4%PAN-9nUwJP2xN^++P@`h_)p)Qm(oija z7`ayY)i}H;9u~R{$}#j|3n`{^hE*7HOgD^dFqD{nsU2b%q*?AV_!L95(s$fhhEYuM z>@$8_v&4|1*fKT)9?0knLoWmNH{DuyJ1CwkGTnl0euP-R)36?DILl-De(d9h2`Ik~ zm^I>U!|7Z;X52IKJ423PV%D#QnW9g1v@yqUb9yJ^3e(0kyRpPjTc2gLDVqlr8rPd1 z9Z_M#CTwkeJs2Nk4F-%Wju*#_ZGFZWx0sA$CmH7}gNIBr-fJ3!^xkV)J>oiL3xYtm zQaTwfGHy}q3@VGhbib`o}~Jb;tSKwjSm`UnBE`uD8s$RW2S~NFBlIPt219U_D9t37?p@Ukskow zFz93Ba8SN5Mn_B?e$@DdQa&bL3|ID~Z#OLD+^jGrjEFNW6eBy;BlM+Xh8UVS=zS*Z zxGGbB<)^e>ri+!g`!$%F3~za2hTxCELNGm=;JmmIVAs}9Fi|g^1305`KHw!emzb7u zwsIowbgVX&MD!Y~i0%=&*rlDV{7^@ba#I&U*T`&TRF@5=*-AVP6VFykMw!KY=FV4k zM{hCpkGOy25X10@0gavqO~WJRWIbjY7ty8WDbsqft8}|zhUtgK7ffFmW%>PKubGa> za>TO*NV1RqmT7hb$?Q|&3Xy8%1h`9#-=&Qd7i;p1t0mcN7(sCHh%W#? zsQbcWx|b7pujz&n7a2<;juZ?rltjE<@SSO&>A}>_;&hQV;z!d2z~4;id`+kGHJz?q z>$jMbBW9pE%wh@ZmyYttPPq|}C_{&pL@Y5rTRjpF;fu$vRdOP3a4e5lCiab31(;E| zLRltu7p#i#tQ36Vf*c^=pG>7#KaL}Cedgx)utuW8ATJT83+5@)i#j4 znfvVTefPKf_TBz=-+Ra2!HUg`N|0U6Pt=|l@sBeat4(ldFUXz~wo981@k>2O-x46x zp$Q2rBcmLZgp6g#rbIC;Ur!ggf5N4n0nlcb;1G?+XxJ^oaJLM=0F0$y!|t1x{Eilu z?^BqHXsA=o>Ju8U_FbM2u(~+gM_Q+Hy7V)xht*b(Xh9{Ma}#M)-PC%p*d48xiE|aC zy5JoU)TIql->B56A{v0bl@X!$vDe~6Q^a5kQxTqFdU{5b{+?{a087DnWq<|R3qj*{Ahf8sCciJFf~`vYV)NGma}Nd1b`|1I^erSi2@?nvdFJU=l*Xe3E<7aTG;3wVzjbF`RD zjZ9{ii|S5oe&KP$tsRIv*iJ{)iprCQo4)QkZw#r~$(>NA-o@cJDytZ!&6yjOQM$f# zqvF*ZDVL2=I$W>!poRD zr1m9YBWNs^6`n5ME?ixF13Xu{fP=C%vy3MxJ2DT_8f>GT)M;}ns`&^Q;u58a-VG|X zi_3B1e433J+u=4|Cl|8)<=51pvJ&+=_GW4qaAiSS7bM|DJj6F>ZRLOAZCG0i4#mir z6FeyGPOaicr}*}Exih40p8qj_;l3S}et{3EKXHG|d+sSv5q+5t!I3DW+EO5LKT5m6 zd++=IZpl}?PuhL#$(T_dmiB-aOuogFSY_-fFM#1}^ zSWI?$XPR~Dl9Du2EEN7J(jWn31ZhOtNi#Brw3@TXRuW}T$4{$tn}a++9*lJ0V&d7z zIIdFQQPXwDn9C z8QpQB)!lK&NQ7-r+JpD)lO)U5ogjP$B`-;mnL_Dt3x*{PT=D%2YjP2!wvRwOy+WT* zx|BaCH!-T293pN!T++xo}d>fQSuZ` z%~Ctn=UJNeq_#zWMSoxaOuw#=>2r;TjS8dI_?6LR+~pm&DXtLTf_xX$4sq8%e*5`D z;wkyN&0)6TLGO9}J-KSdy_}vByfgm3mhZ)Wj!uSFXbG0lmUh|qY z))3a;@K}a$r}(l71GiXml zDzurp(T5Q0Ofh7G)6zT;fLyD|15*UFXt&Ro>-1%jd~ai*rC^QNv!3!mjP)A2fXjN< z1N*RC(<87=ar&HAH_D;t66gk0`xnC@R3DP6)m933QEc-<1}1yG&}zpLITNbREQ2*d z&7GjWSOzn&$UqtFNp<@2NPfXnK9PLaCZE$ae%A_?Ln@ZoUk=y78Tx$%e3%ew`5FA$ zZcW+*M?#-&g27ySXx;H|*Lf#-`s>f+v;2nhp#yzT2THmgYegJ})KKAJ_)1kO^?6q2 z8!#ud;tlwl0-d3_qwpc4WRf)!hHqeMX!sqN_KZF1`rU})ruAzAjgKcTYz;J9&PwXH z{PmPsujbIDp??+9A}f^o3AJgNH@?|fFFI2MNIdqUaf=e;JSEGPdzP=*c4NkHYgdW2 z^z@G#op9UoU!?Q3?0H!(r^|ZrB7Hxq0>|3_wt8VFZcmD(D{ouB{hT^vI9h|B(`Q4G Tm*}?&ZFPqxU!hlFdzSuR#m2k#