From 2079fe770769133a5deb4cc620c31aad65a4cc34 Mon Sep 17 00:00:00 2001 From: Emmanuele Sassi Date: Mon, 20 Jan 2025 17:27:45 +0100 Subject: [PATCH 1/2] - modifiche per allineamento a versione DoorArreda - miglioramento grafico --- Effector.Plugin.FiveLakes.sln | 14 + .../Constants/ConstIni.vb | 7 + .../DoorListPage/DoorListPageV.xaml | 275 +++-- .../DoorListPage/DoorListPageVM.vb | 478 ++++++++- .../DoorListPage/DoorListPageVM.vb.bak | 977 ++++++++++++++++++ .../Effector.Plugin.FiveLakes.vbproj | 35 +- Effector.Plugin.FiveLakes/FiveLakesUI.xaml | 15 +- Effector.Plugin.FiveLakes/FiveLakesUIVM.vb | 1 + .../MainMenu/MainMenuV.xaml | 12 +- .../ProcessManager/ProcessManagerV.xaml | 122 ++- .../ProcessManager/ProcessManagerVM.vb | 1 + .../Resources/DoorListPage/Add.png | Bin 0 -> 542 bytes .../Resources/DoorListPage/Copy.png | Bin 0 -> 484 bytes .../Resources/DoorListPage/Delete.png | Bin 0 -> 608 bytes .../Resources/DoorListPage/DeleteCsv.png | Bin 0 -> 773 bytes .../Resources/DoorListPage/MoveDown.png | Bin 0 -> 358 bytes .../Resources/DoorListPage/MoveUp.png | Bin 0 -> 328 bytes .../Resources/DoorListPage/MultipleCopy.png | Bin 0 -> 547 bytes .../Resources/DoorListPage/NotProduce.png | Bin 0 -> 730 bytes .../Resources/DoorListPage/OpenCsv.png | Bin 0 -> 626 bytes .../Resources/DoorListPage/Produce.png | Bin 0 -> 452 bytes .../Resources/DoorListPage/ProduceAll.old.png | Bin 0 -> 767 bytes .../Resources/DoorListPage/ProduceAll.png | Bin 0 -> 390 bytes .../DoorListPage/ResetProduction.png | Bin 0 -> 175 bytes .../Resources/DoorListPage/SaveCsv.png | Bin 0 -> 685 bytes .../Resources/DoorListPage/SkipDoor.png | Bin 0 -> 237 bytes .../Resources/DoorListPage/Verify.png | Bin 0 -> 668 bytes .../Resources/Fonts/Roboto-Light.ttf | Bin 0 -> 162636 bytes .../Resources/Fonts/Roboto-Regular.ttf | Bin 0 -> 158604 bytes .../Utility/Dictionary.xaml | 287 ++++- .../Utility/Dictionary.xaml.vb | 182 ++-- .../Utility/ExecProcessManager.vb | 1 + 32 files changed, 2116 insertions(+), 291 deletions(-) create mode 100644 Effector.Plugin.FiveLakes/DoorListPage/DoorListPageVM.vb.bak create mode 100644 Effector.Plugin.FiveLakes/Resources/DoorListPage/Add.png create mode 100644 Effector.Plugin.FiveLakes/Resources/DoorListPage/Copy.png create mode 100644 Effector.Plugin.FiveLakes/Resources/DoorListPage/Delete.png create mode 100644 Effector.Plugin.FiveLakes/Resources/DoorListPage/DeleteCsv.png create mode 100644 Effector.Plugin.FiveLakes/Resources/DoorListPage/MoveDown.png create mode 100644 Effector.Plugin.FiveLakes/Resources/DoorListPage/MoveUp.png create mode 100644 Effector.Plugin.FiveLakes/Resources/DoorListPage/MultipleCopy.png create mode 100644 Effector.Plugin.FiveLakes/Resources/DoorListPage/NotProduce.png create mode 100644 Effector.Plugin.FiveLakes/Resources/DoorListPage/OpenCsv.png create mode 100644 Effector.Plugin.FiveLakes/Resources/DoorListPage/Produce.png create mode 100644 Effector.Plugin.FiveLakes/Resources/DoorListPage/ProduceAll.old.png create mode 100644 Effector.Plugin.FiveLakes/Resources/DoorListPage/ProduceAll.png create mode 100644 Effector.Plugin.FiveLakes/Resources/DoorListPage/ResetProduction.png create mode 100644 Effector.Plugin.FiveLakes/Resources/DoorListPage/SaveCsv.png create mode 100644 Effector.Plugin.FiveLakes/Resources/DoorListPage/SkipDoor.png create mode 100644 Effector.Plugin.FiveLakes/Resources/DoorListPage/Verify.png create mode 100644 Effector.Plugin.FiveLakes/Resources/Fonts/Roboto-Light.ttf create mode 100644 Effector.Plugin.FiveLakes/Resources/Fonts/Roboto-Regular.ttf diff --git a/Effector.Plugin.FiveLakes.sln b/Effector.Plugin.FiveLakes.sln index 781f5b1..dfa3a56 100644 --- a/Effector.Plugin.FiveLakes.sln +++ b/Effector.Plugin.FiveLakes.sln @@ -9,6 +9,8 @@ Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Effector.Plugin.Interface", EndProject Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Effector.Plugin.FiveLakes", "Effector.Plugin.FiveLakes\Effector.Plugin.FiveLakes.vbproj", "{7C77F537-8235-40AB-B24A-4E71CFB96D2C}" EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Effector.Plugin.Lib", "..\Effector.Plugin.Lib\Effector.Plugin.Lib\Effector.Plugin.Lib.vbproj", "{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -55,6 +57,18 @@ Global {7C77F537-8235-40AB-B24A-4E71CFB96D2C}.Release|x64.Build.0 = Release|Any CPU {7C77F537-8235-40AB-B24A-4E71CFB96D2C}.Release|x86.ActiveCfg = Release|Any CPU {7C77F537-8235-40AB-B24A-4E71CFB96D2C}.Release|x86.Build.0 = Release|Any CPU + {E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Debug|x64.ActiveCfg = Debug|Any CPU + {E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Debug|x64.Build.0 = Debug|Any CPU + {E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Debug|x86.ActiveCfg = Debug|Any CPU + {E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Debug|x86.Build.0 = Debug|Any CPU + {E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Release|Any CPU.Build.0 = Release|Any CPU + {E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Release|x64.ActiveCfg = Release|Any CPU + {E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Release|x64.Build.0 = Release|Any CPU + {E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Release|x86.ActiveCfg = Release|Any CPU + {E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Effector.Plugin.FiveLakes/Constants/ConstIni.vb b/Effector.Plugin.FiveLakes/Constants/ConstIni.vb index fab97d5..70bcd17 100644 --- a/Effector.Plugin.FiveLakes/Constants/ConstIni.vb +++ b/Effector.Plugin.FiveLakes/Constants/ConstIni.vb @@ -15,10 +15,12 @@ Module ConstIni Public Const INI_FILE_NAME As String = "Effector.Plugin.FiveLakes.ini" Public Const S_GENERAL As String = "General" + Public Const K_CAMEXEPATH As String = "CAMExePath" Public Const K_BACKUPDIR As String = "BackupDir" Public Const K_RESOURCESDIR As String = "ResourcesDir" Public Const K_DDFDIR As String = "DDFDir" Public Const K_GENDDFDIR As String = "GenDDFDir" + Public Const K_CSVOUTPUT As String = "CSVOutput" Public Const S_CSV As String = "CSV" Public Const K_DDFNAME As String = "DDFName" @@ -26,6 +28,11 @@ Module ConstIni Public Const K_HEIGHT As String = "Height" Public Const K_WIDTH As String = "Width" Public Const K_THICKNESS As String = "Thickness" + Public Const K_STATE As String = "State" + Public Const K_PROGRAMSENT As String = "ProgramSent" + Public Const K_PROGRAMSTART As String = "ProgramStart" + Public Const K_PROGRAMEND As String = "ProgramEnd" + Public Const K_MANUALADDEDDOORNAME As String = "ManualAddedDoorName" Public Const K_DELIMITER As String = "Delimiter" Public Const S_DEBUG As String = "Debug" diff --git a/Effector.Plugin.FiveLakes/DoorListPage/DoorListPageV.xaml b/Effector.Plugin.FiveLakes/DoorListPage/DoorListPageV.xaml index 8382235..3034b84 100644 --- a/Effector.Plugin.FiveLakes/DoorListPage/DoorListPageV.xaml +++ b/Effector.Plugin.FiveLakes/DoorListPage/DoorListPageV.xaml @@ -1,103 +1,246 @@  + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:local="clr-namespace:Effector.Plugin.FiveLakes"> + + + + - - + + + + + + + + + + + + + + + + + + + ScrollViewer.VerticalScrollBarVisibility="Auto" + ScrollViewer.HorizontalScrollBarVisibility="Disabled" + HorizontalGridLinesBrush="Transparent" + VerticalGridLinesBrush="Transparent" + ColumnHeaderHeight="32" + HeadersVisibility="Column" + FontSize="12" + FontFamily="/Resources/Fonts/#Roboto" + FontWeight="Regular" + RowHeight="32" + BorderThickness="0"> + + + - - - + - - - + Width="1*" + MinWidth="100" + IsReadOnly="True" + ElementStyle="{StaticResource DataGridTextColumn_TextBlock}" + EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/> + Width="Auto" + IsReadOnly="True" + ElementStyle="{StaticResource DataGridTextColumn_TextBlock}" + EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/> + - + + + Width="Auto" + IsReadOnly="True" + ElementStyle="{StaticResource DataGridTextColumn_TextBlock}" + EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/> + + Width="Auto" + IsReadOnly="True" + ElementStyle="{StaticResource DataGridTextColumn_TextBlock}" + EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/> + Width="Auto" + IsReadOnly="True" + ElementStyle="{StaticResource DataGridTextColumn_TextBlock}" + EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/> + Width="Auto" + IsReadOnly="True" + ElementStyle="{StaticResource DataGridTextColumn_TextBlock}" + EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/> + Width="Auto" + IsReadOnly="True" + ElementStyle="{StaticResource DataGridTextColumn_TextBlock}" + EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/> + Width="Auto" + IsReadOnly="True" + ElementStyle="{StaticResource DataGridTextColumn_TextBlock}" + EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/> + Width="Auto" + IsReadOnly="True" + ElementStyle="{StaticResource DataGridTextColumn_TextBlock}" + EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/> + Width="Auto" + IsReadOnly="True" + ElementStyle="{StaticResource DataGridTextColumn_TextBlock}" + EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/> - diff --git a/Effector.Plugin.FiveLakes/DoorListPage/DoorListPageVM.vb b/Effector.Plugin.FiveLakes/DoorListPage/DoorListPageVM.vb index 5f5e3f7..2a710a6 100644 --- a/Effector.Plugin.FiveLakes/DoorListPage/DoorListPageVM.vb +++ b/Effector.Plugin.FiveLakes/DoorListPage/DoorListPageVM.vb @@ -3,6 +3,9 @@ Imports System.IO Imports Newtonsoft.Json Imports System.Windows.Threading Imports System.Text.RegularExpressions +Imports Effector.Plugin.FiveLakes.Door +Imports System.Globalization +Imports Effector.Plugin.Lib Public Class DoorListPageVM Inherits VMBase @@ -41,9 +44,38 @@ Public Class DoorListPageVM Private m_nBackupindex As Integer = 0 Private m_bWritingBackup As Boolean = False + Private m_sCSVOutDirPath As String = "" + + Private m_nExecIncrement As Integer = 0 + Private m_nExecutedArgsCount As Integer = 0 + Public ReadOnly Property dExecPercentage As Double + Get + Dim dExecIncrement As Double = If(IsNothing(m_ExecProcessManager) OrElse m_ExecProcessManager.nArgsInQueue = 0, 0, Math.Min(28, m_nExecIncrement) / 34) + Return If(IsNothing(m_ExecProcessManager), 0, (m_ExecProcessManager.nExecutedArgsCounter + dExecIncrement) / (m_ExecProcessManager.nExecutedArgsCounter + m_ExecProcessManager.nArgsInQueue)) * 100 + End Get + End Property + + Public ReadOnly Property sExecPercentage As String + Get + Return DoubleToString(dExecPercentage, 1) & "%" + End Get + End Property + + Public ReadOnly Property ExecPercentage_Visibility As Visibility + Get + Dim x = If(Not IsNothing(m_ExecProcessManager) AndAlso m_ExecProcessManager.ExecutionThreadStatus = ExecProcessManager.ExecutionThreadStatuses.RUNNING, Visibility.Visible, Visibility.Collapsed) + Return If(Not IsNothing(m_ExecProcessManager) AndAlso m_ExecProcessManager.ExecutionThreadStatus = ExecProcessManager.ExecutionThreadStatuses.RUNNING, Visibility.Visible, Visibility.Collapsed) + End Get + End Property + ' Definizione comandi Private m_cmdOpenCSV As ICommand + Private m_cmdSaveCSV As ICommand Private m_cmdSkipDoor As ICommand + Private m_cmdNotProduceDoor As ICommand + Private m_cmdAddDoor As ICommand + Private m_cmdCopyDoor As ICommand + Private m_cmdMultipleCopyDoor As ICommand Private m_cmdMoveUp As ICommand Private m_cmdMoveDown As ICommand Private m_cmdDelete As ICommand @@ -58,6 +90,7 @@ Public Class DoorListPageVM Sub New() ' imposto riferimento in Map Map.SetRefDoorListPageVM(Me) + ' leggo backup Dim sBackupDirPath As String = "" GetPluginPrivateProfileString(S_GENERAL, "BackupDir", "", sBackupDirPath) Dim sBackupFilePath As String = sBackupDirPath & "\Backup.json" @@ -67,6 +100,16 @@ Public Class DoorListPageVM m_RefreshGraphicsTimer.Interval = New TimeSpan(0, 0, 1) AddHandler m_RefreshGraphicsTimer.Tick, AddressOf RefreshGraphicsTimer_Tick m_BackupTimer.Start() + ' verifico path salvataggio CSV + Dim bStartWriteCSV As Boolean = True + If GetPluginPrivateProfileString(S_GENERAL, K_CSVOUTPUT, "", m_sCSVOutDirPath) = 0 Then + bStartWriteCSV = False + MessageBox.Show("Path di salvataggio CSV non impostata! Impossibile creare file CSV!", "Errore!", MessageBoxButton.OK, MessageBoxImage.Error) + End If + If bStartWriteCSV AndAlso Not Directory.Exists(m_sCSVOutDirPath) Then + bStartWriteCSV = False + MessageBox.Show("Path di salvataggio CSV impostata non esiste! Impossibile creare file CSV!", "Errore!", MessageBoxButton.OK, MessageBoxImage.Error) + End If m_RefreshGraphicsTimer.Start() End Sub #End Region ' CONSTRUCTOR @@ -103,8 +146,15 @@ Public Class DoorListPageVM Dim JsonDoorList As List(Of JsonDoor) = JsonConvert.DeserializeObject(Of List(Of JsonDoor))(sReadedFile) JsonDoorList = JsonDoorList.OrderBy(Of Integer)(Function(x) x.nListIndex).ToList() - m_DoorList = New ObservableCollection(Of Door)((From JsonDoor In JsonDoorList - Select New Door(JsonDoor)).ToList()) + Dim TempDoorList As ObservableCollection(Of Door) = New ObservableCollection(Of Door)((From JsonDoor In JsonDoorList + Select New Door(JsonDoor)).ToList()) + For Each CurrDoor In TempDoorList + If CurrDoor.nState >= Door.DoorStates.READY_FOR_PRODUCTION Then + CurrDoor.SetState(Door.DoorStates.VERIFIED, False) + End If + Next + WriteBackup() + m_DoorList = TempDoorList End Sub Public Sub Write(FilePath As String) @@ -190,9 +240,20 @@ Public Class DoorListPageVM WriteBackup() ArgumentsResult = m_ExecProcessManager.ArgumentsResultDequeue End While + ' aggiorno grafica + If Not bExecButton_IsEnabled AndAlso m_ExecProcessManager.ExecutionThreadStatus = ExecProcessManager.ExecutionThreadStatuses.RUNNING Then + NotifyPropertyChanged(NameOf(dExecPercentage)) + NotifyPropertyChanged(NameOf(sExecPercentage)) + End If If Not bExecButton_IsEnabled AndAlso m_ExecProcessManager.ExecutionThreadStatus = ExecProcessManager.ExecutionThreadStatuses.STOPPED Then SetExecButtonIsEnabled(True) End If + If m_nExecutedArgsCount <> m_ExecProcessManager.nExecutedArgsCounter Then + m_nExecutedArgsCount = m_ExecProcessManager.nExecutedArgsCounter + m_nExecIncrement = 0 + End If + m_nExecIncrement += 1 + NotifyPropertyChanged(NameOf(ExecPercentage_Visibility)) End Sub Friend Function GetNextDoor() As Door @@ -205,13 +266,14 @@ Public Class DoorListPageVM Return NextDoor End Function - Public Sub ResetProductionQueue() - For Each Door In m_DoorList - If Door.nState = Door.DoorStates.READY_FOR_PRODUCTION Then - Door.SetState(Door.DoorStates.VERIFIED, False) - End If - Next - End Sub + Friend Function NewDoorId() As Integer + Dim nId As Integer = 1 + If m_DoorList.Count > 0 Then + Dim nMaxId As Integer = m_DoorList.Max(Of Integer)(Function(x) x.nId) + nId = nMaxId + 1 + End If + Return nId + End Function #End Region ' METHODS @@ -281,7 +343,7 @@ Public Class DoorListPageVM For nValueIndex = 0 To Values.Count - 1 sLine &= Values(nValueIndex) & If(nValueIndex < Values.Count, ";", "") Next - sLineErrorList &= "Quantity not readable in line " & sLine & ". This line will be skipped" + sLineErrorList &= "Quantity not readable in line " & sLine & ". This line will be skipped" & Environment.NewLine Continue While End If End If @@ -304,13 +366,7 @@ Public Class DoorListPageVM End If End If For nQuantityIndex = 1 To nQuantity - Dim nId As Integer = 1 - If m_DoorList.Count > 0 Then - Dim nMaxId As Integer = m_DoorList.Max(Of Integer)(Function(x) x.nId) - 'If nMaxId < 100 Then - nId = nMaxId + 1 - 'End If - End If + Dim nId As Integer = NewDoorId() Dim NewDoor As New Door(nId, nLineIndex, Values(nDDFNameIndex), Path.GetFileName(sCSVPath), 1, dWidth, dHeight, dThickness, Headers, Values) m_DoorList.Add(NewDoor) @@ -392,6 +448,161 @@ Public Class DoorListPageVM #End Region ' OpenCSV +#Region "SaveCSV" + + Public ReadOnly Property SaveCSV_Command As ICommand + Get + If m_cmdSaveCSV Is Nothing Then + m_cmdSaveCSV = New Command(AddressOf SaveCSV) + End If + Return m_cmdSaveCSV + End Get + End Property + + Public Sub SaveCSV() + ' leggo nomi intestazioni da ini + Dim sDDFName As String = "" + Dim sQuantityName As String = "" + Dim sHeightName As String = "" + Dim sWidthName As String = "" + Dim sThicknessName As String = "" + Dim sStateName As String = "" + Dim sProgramSentName As String = "" + Dim sProgramStartName As String = "" + Dim sProgramEndName As String = "" + GetPluginPrivateProfileString(S_CSV, K_DDFNAME, K_DDFNAME, sDDFName) + GetPluginPrivateProfileString(S_CSV, K_QUANTITY, "", sQuantityName) + GetPluginPrivateProfileString(S_CSV, K_HEIGHT, "", sHeightName) + GetPluginPrivateProfileString(S_CSV, K_WIDTH, "", sWidthName) + GetPluginPrivateProfileString(S_CSV, K_THICKNESS, "", sThicknessName) + GetPluginPrivateProfileString(S_CSV, K_STATE, "", sStateName) + GetPluginPrivateProfileString(S_CSV, K_PROGRAMSENT, "", sProgramSentName) + GetPluginPrivateProfileString(S_CSV, K_PROGRAMSTART, "", sProgramStartName) + GetPluginPrivateProfileString(S_CSV, K_PROGRAMEND, "", sProgramEndName) + ' recupero nomi csv presenti + Dim CSVFileList As List(Of String) = DoorList.Select(Function(x) x.sCSVName).Distinct().ToList() + Dim sCSVName As String = "" + GetPluginPrivateProfileString(S_CSV, K_MANUALADDEDDOORNAME, "Manual", sCSVName) + CSVFileList.Remove(sCSVName) + For Each CSVFile In CSVFileList + Dim CSVDoorList As List(Of Door) = (From Door In m_DoorList + Where Door.sCSVName = CSVFile).ToList() + Dim sCSVOutPath = m_sCSVOutDirPath & "\Output_" & DateTime.Now().ToString("yy-MM-dd-HH-mm-ss") & ".csv" + Dim sCSVFileList As New List(Of String) + Dim sHeaderRow As String = "" + For Each Parameter In CSVDoorList(0).CustomerParameters + ' evito di scrivere la quantita' + If Parameter.sHeader <> sQuantityName Then + sHeaderRow &= Parameter.sHeader & ";" + End If + Next + ' aggiungo titoli per tempi di produzione + sHeaderRow &= sStateName & ";" & sProgramSentName & ";" & sProgramStartName & ";" & sProgramEndName + sHeaderRow.TrimEnd(";"c) + sCSVFileList.Add(sHeaderRow) + For Each Door In CSVDoorList + Dim DDFNameParameter As CustomerParameter = Door.CustomerParameters.FirstOrDefault(Function(x) x.sHeader = sDDFName) + If Not IsNothing(DDFNameParameter) Then + DDFNameParameter.SetValue(Door.sDDFName) + End If + Dim HeightNameParameter As CustomerParameter = Door.CustomerParameters.FirstOrDefault(Function(x) x.sHeader = sHeightName) + If Not IsNothing(HeightNameParameter) Then + HeightNameParameter.SetValue(DoubleToString(Door.dHeight, 2)) + End If + Dim WidthNameParameter As CustomerParameter = Door.CustomerParameters.FirstOrDefault(Function(x) x.sHeader = sWidthName) + If Not IsNothing(WidthNameParameter) Then + WidthNameParameter.SetValue(DoubleToString(Door.dWidth, 2)) + End If + Dim ThicknessNameParameter As CustomerParameter = Door.CustomerParameters.FirstOrDefault(Function(x) x.sHeader = sThicknessName) + If Not IsNothing(ThicknessNameParameter) Then + ThicknessNameParameter.SetValue(DoubleToString(Door.dThickness, 2)) + End If + Dim sDoorRow As String = "" + For Each Parameter In Door.CustomerParameters + ' evito di scrivere la quantita' + If Parameter.sHeader <> sQuantityName Then + sDoorRow &= Parameter.sValue & ";" + End If + Next + ' aggiungo valori per tempi di produzione + Dim sState As String = "" + If Door.nState < DoorStates.MACHINE_1_START Then + sState = "DaProdurre" + ElseIf Door.nState = DoorStates.MACHINE_1_START Then + sState = "InProduzione" + Else + sState = "Prodotto" + End If + sDoorRow &= sState & ";" & Door.sLoadTime & ";" & Door.sMachining1Start & ";" & Door.sMachining1End + sCSVFileList.Add(sDoorRow) + Next + Try + File.WriteAllLines(sCSVOutPath, sCSVFileList) + 'MessageBox.Show("Csv salvato in " & m_sCSVOutDirPath, "Info", MessageBoxButton.OK, MessageBoxImage.Information) + Catch ex As Exception + MessageBox.Show("Creazione file csv fallita!" & Environment.NewLine & ex.Message, "Errore", MessageBoxButton.OK, MessageBoxImage.Error) + End Try + + + Next + + + + + 'Dim CSVDoorList As List(Of Door) = (From Door In m_DoorList + ' Where Door.sCSVName = m_SelDoor.sCSVName).ToList() + 'sCSVOutPath &= "\" & m_SelDoor.sCSVName + 'Dim sCSVFileList As New List(Of String) + 'Dim sHeaderRow As String = "" + 'For Each Parameter In m_SelDoor.CustomerParameters + ' ' evito di scrivere la quantita' + ' If Parameter.sHeader <> sQuantityName Then + ' sHeaderRow &= Parameter.sHeader & ";" + ' End If + 'Next + 'sHeaderRow.TrimEnd(";"c) + 'sCSVFileList.Add(sHeaderRow) + 'For Each Door In CSVDoorList + ' Dim DDFNameParameter As CustomerParameter = Door.CustomerParameters.FirstOrDefault(Function(x) x.sHeader = sDDFName) + ' If Not IsNothing(DDFNameParameter) Then + ' DDFNameParameter.SetValue(Door.sDDFName) + ' End If + ' Dim HeightNameParameter As CustomerParameter = Door.CustomerParameters.FirstOrDefault(Function(x) x.sHeader = sHeightName) + ' If Not IsNothing(HeightNameParameter) Then + ' HeightNameParameter.SetValue(DoubleToString(Door.dHeight, 2)) + ' End If + ' Dim WidthNameParameter As CustomerParameter = Door.CustomerParameters.FirstOrDefault(Function(x) x.sHeader = sWidthName) + ' If Not IsNothing(WidthNameParameter) Then + ' WidthNameParameter.SetValue(DoubleToString(Door.dWidth, 2)) + ' End If + ' Dim ThicknessNameParameter As CustomerParameter = Door.CustomerParameters.FirstOrDefault(Function(x) x.sHeader = sThicknessName) + ' If Not IsNothing(ThicknessNameParameter) Then + ' ThicknessNameParameter.SetValue(DoubleToString(Door.dThickness, 2)) + ' End If + ' Dim SwingNameParameter As CustomerParameter = Door.CustomerParameters.FirstOrDefault(Function(x) x.sHeader = sSwingName) + ' If Not IsNothing(SwingNameParameter) Then + ' SwingNameParameter.SetValue(If(Door.nSwing = SWINGTYPE.LEFT, "S", "D")) + ' End If + + ' Dim sDoorRow As String = "" + ' For Each Parameter In Door.CustomerParameters + ' ' evito di scrivere la quantita' + ' If Parameter.sHeader <> sQuantityName Then + ' sDoorRow &= Parameter.sValue & ";" + ' End If + ' Next + ' sCSVFileList.Add(sDoorRow) + 'Next + 'Try + ' File.WriteAllLines(sCSVOutPath, sCSVFileList) + ' MessageBox.Show("Csv salvato in " & sCSVOutPath, "Info", MessageBoxButton.OK, MessageBoxImage.Information) + 'Catch ex As Exception + ' MessageBox.Show("Creazione file csv fallita!", "Errore", MessageBoxButton.OK, MessageBoxImage.Error) + 'End Try + End Sub + +#End Region ' SaveCSV + #Region "SkipDoor" Public ReadOnly Property SkipDoor_Command As ICommand @@ -411,6 +622,114 @@ Public Class DoorListPageVM #End Region ' SkipDoor +#Region "NotProduceDoor" + + Public ReadOnly Property NotProduceDoor_Command As ICommand + Get + If m_cmdNotProduceDoor Is Nothing Then + m_cmdNotProduceDoor = New Command(AddressOf NotProduceDoor) + End If + Return m_cmdNotProduceDoor + End Get + End Property + + Public Sub NotProduceDoor() + If Not IsNothing(SelDoor) Then + If (Keyboard.Modifiers And ModifierKeys.Shift) = ModifierKeys.Shift Then + If (SelDoor.nState <> Door.DoorStates.VERIFIED AndAlso SelDoor.nState <> Door.DoorStates.NOTPRODUCE) Then Return + Dim sSelCSVName As String = SelDoor.sCSVName + Dim SelDoorState As Door.DoorStates = SelDoor.nState + For Each CsvDoor In m_DoorList + If String.Compare(sSelCSVName, CsvDoor.sCSVName, True) = 0 Then + If CsvDoor.nState = DoorStates.VERIFIED OrElse CsvDoor.nState = DoorStates.NOTPRODUCE Then + CsvDoor.SetState(If(SelDoorState = Door.DoorStates.VERIFIED, Door.DoorStates.NOTPRODUCE, Door.DoorStates.VERIFIED)) + End If + End If + Next + Else + If (SelDoor.nState <> Door.DoorStates.VERIFIED AndAlso SelDoor.nState <> Door.DoorStates.NOTPRODUCE) Then Return + SelDoor.SetState(If(SelDoor.nState = Door.DoorStates.VERIFIED, Door.DoorStates.NOTPRODUCE, Door.DoorStates.VERIFIED)) + End If + End If + WriteBackup() + End Sub + +#End Region ' NotProduceDoor + +#Region "AddDoor" + + Public ReadOnly Property AddDoor_Command As ICommand + Get + If m_cmdAddDoor Is Nothing Then + m_cmdAddDoor = New Command(AddressOf AddDoor) + End If + Return m_cmdAddDoor + End Get + End Property + + Public Sub AddDoor() + Dim nId As Integer = NewDoorId() + Dim sCSVName As String = "" + GetPluginPrivateProfileString(S_CSV, K_MANUALADDEDDOORNAME, "Manual", sCSVName) + m_DoorList.Add(New Door(nId, 0, "", sCSVName, 1, 0, 0, 0, {}, {})) + End Sub + +#End Region ' AddDoor + +#Region "CopyDoor" + + Public ReadOnly Property CopyDoor_Command As ICommand + Get + If m_cmdCopyDoor Is Nothing Then + m_cmdCopyDoor = New Command(AddressOf CopyDoorCmd) + End If + Return m_cmdCopyDoor + End Get + End Property + + Public Sub CopyDoorCmd() + If IsNothing(SelDoor) Then + MessageBox.Show("Nessuna porta selezionata!" & Environment.NewLine & "Selezionare la porta da copiare", "Errore!", MessageBoxButton.OK, MessageBoxImage.Error) + Return + End If + CopyDoor() + End Sub + + Public Sub CopyDoor() + Dim nId As Integer = NewDoorId() + m_DoorList.Add(SelDoor.Copy(nId)) + End Sub + +#End Region ' CopyDoor + +#Region "MultipleCopyDoor" + + Public ReadOnly Property MultipleCopyDoor_Command As ICommand + Get + If m_cmdMultipleCopyDoor Is Nothing Then + m_cmdMultipleCopyDoor = New Command(AddressOf MultipleCopyDoor) + End If + Return m_cmdMultipleCopyDoor + End Get + End Property + + Public Sub MultipleCopyDoor() + If IsNothing(SelDoor) Then + MessageBox.Show("Nessuna porta selezionata!" & Environment.NewLine & "Selezionare la porta da copiare", "Errore!", MessageBoxButton.OK, MessageBoxImage.Error) + Return + End If + ' apro finestra quantita' + Dim MultipleCopyWndVM As New MultipleCopyWndVM + Dim MultipleCopyWnd As New MultipleCopyWndV(Application.Current.MainWindow, MultipleCopyWndVM) + If MultipleCopyWnd.ShowDialog() Then + For Index = 1 To MultipleCopyWndVM.nCopyNumber + CopyDoor() + Next + End If + End Sub + +#End Region ' MultipleCopyDoor + #Region "MoveUp" Public ReadOnly Property MoveUp_Command As ICommand @@ -466,7 +785,13 @@ Public Class DoorListPageVM End Property Public Sub Delete() - If IsNothing(SelDoor) OrElse SelDoor.nState >= Door.DoorStates.READY_FOR_PRODUCTION Then Return + Dim sCSVName As String = "" + GetPluginPrivateProfileString(S_CSV, K_MANUALADDEDDOORNAME, "Manual", sCSVName) + If m_DoorList.Count = 0 OrElse IsNothing(SelDoor) OrElse String.Compare(SelDoor.sCSVName, sCSVName, True) <> 0 Then Return + Dim bReset As Boolean = True + If Not LuaGetGlobVar("bReset", bReset) OrElse Not bReset Then + If (SelDoor.nState >= Door.DoorStates.READY_FOR_PRODUCTION AndAlso SelDoor.nState < Door.DoorStates.MACHINE_1_END) Then Return + End If If MessageBox.Show("Are you sure you want to delete the selected door?", "Info", MessageBoxButton.YesNo, MessageBoxImage.Information) = MessageBoxResult.Yes Then m_DoorList.Remove(SelDoor) WriteBackup() @@ -487,12 +812,29 @@ Public Class DoorListPageVM End Property Public Sub DeleteAll() - If m_DoorList.Count = 0 Then Return + Dim sCSVName As String = "" + GetPluginPrivateProfileString(S_CSV, K_MANUALADDEDDOORNAME, "Manual", sCSVName) + If m_DoorList.Count = 0 OrElse IsNothing(SelDoor) OrElse String.Compare(SelDoor.sCSVName, sCSVName, True) = 0 Then Return + Dim sSelCSVName As String = SelDoor.sCSVName + ' verifico che tutte le porte del csv siano in stato prodotto o da non produrre + Dim bAllProduced As Boolean = True + For Each CsvDoor In m_DoorList + If String.Compare(sSelCSVName, CsvDoor.sCSVName, True) = 0 Then + If CsvDoor.nState <> DoorStates.MACHINE_2_END AndAlso CsvDoor.nState <> DoorStates.PRODUCED AndAlso CsvDoor.nState <> DoorStates.NOTPRODUCE Then + bAllProduced = False + End If + End If + Next + If Not bAllProduced Then + MessageBox.Show("Selected CSV delete impossible!" & Environment.NewLine & "To be able to delete it all the lines needs to be in state Produced or NotProduced", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning) + Return + End If If MessageBox.Show("Are you sure you want to delete all the doors?", "Info", MessageBoxButton.YesNo, MessageBoxImage.Information) = MessageBoxResult.Yes Then - For nDoorIndex = m_DoorList.Count - 1 To 0 Step -1 - Dim Door As Door = m_DoorList(nDoorIndex) - If Door.nState >= Door.DoorStates.READY_FOR_PRODUCTION Then Continue For - m_DoorList.Remove(Door) + For CsvDoorIndex = m_DoorList.Count - 1 To 0 Step -1 + Dim CsvDoor As Door = m_DoorList(CsvDoorIndex) + If String.Compare(sSelCSVName, CsvDoor.sCSVName, True) = 0 Then + m_DoorList.Remove(CsvDoor) + End If Next WriteBackup() End If @@ -518,6 +860,7 @@ Public Class DoorListPageVM Public Sub ProduceDoor(DoorToProduce As Door, Optional bWriteBackup As Boolean = True) If IsNothing(DoorToProduce) OrElse DoorToProduce.nState = Door.DoorStates.SKIPPED OrElse + DoorToProduce.nState = Door.DoorStates.NOTPRODUCE OrElse DoorToProduce.nState = Door.DoorStates.VERIFICATION_FAILED OrElse DoorToProduce.nState >= Door.DoorStates.READY_FOR_PRODUCTION Then Return ' la sposto dopo l'ultima da produrre @@ -567,6 +910,14 @@ Public Class DoorListPageVM WriteBackup() End Sub + Public Sub ResetProductionQueue() + For Each Door In m_DoorList + If Door.nState = Door.DoorStates.READY_FOR_PRODUCTION Then + Door.SetState(Door.DoorStates.VERIFIED) + End If + Next + End Sub + #End Region ' ResetProductionQueue #Region "Verify" @@ -623,6 +974,7 @@ Public Class Door VERIFIED = 10 VERIFICATION_FAILED = 11 SKIPPED = 20 + NOTPRODUCE = 21 READY_FOR_PRODUCTION = 30 ON_LOAD_STATION = 31 MACHINE_1_START = 33 @@ -853,22 +1205,22 @@ Public Class Door Select Case m_nState Case DoorStates.LOADED_FROM_CSV Return Brushes.White + Case DoorStates.VERIFIED + Return Dictionary.Effector_Green_Status Case DoorStates.VERIFICATION_FAILED - Return Brushes.Red - Case DoorStates.SKIPPED - Return Brushes.Orange - Case DoorStates.READY_FOR_PRODUCTION - Return Brushes.LightSkyBlue - Case DoorStates.ON_LOAD_STATION - Return Brushes.SkyBlue + Return Dictionary.Effector_Red_Status + Case DoorStates.SKIPPED, DoorStates.NOTPRODUCE + Return Dictionary.Effector_Yellow_Status + Case DoorStates.READY_FOR_PRODUCTION, DoorStates.ON_LOAD_STATION + Return Dictionary.Effector_LightBlue_Status Case DoorStates.MACHINE_1_START - Return Brushes.DodgerBlue + Return Dictionary.Effector_Blue_Status Case DoorStates.MACHINE_1_END Return Brushes.Yellow Case DoorStates.MACHINE_2_START - Return Brushes.DodgerBlue + Return Dictionary.Effector_Blue_Status Case DoorStates.MACHINE_2_END, DoorStates.PRODUCED - Return Brushes.LightGray + Return Dictionary.Effector_Gray_Status Case DoorStates.SCRAP Return Brushes.MediumPurple Case Else @@ -893,6 +1245,18 @@ Public Class Door End If End Sub + Sub New(nId As Integer, nCSVLine As Integer, sDDFName As String, sCSVName As String, nQuantity As Integer, dWidth As Double, dHeight As Double, dThickness As Double, CustomerParameters As List(Of CustomerParameter)) + m_nId = nId + m_nCSVLine = nCSVLine + m_sDDFName = sDDFName + m_sCSVName = sCSVName + m_nQuantity = nQuantity + m_dHeight = dHeight + m_dWidth = dWidth + m_dThickness = dThickness + m_CustomerParameters = CustomerParameters + End Sub + Sub New(JsonDoor As JsonDoor) m_nId = JsonDoor.nId m_nCSVLine = JsonDoor.nCSVLine @@ -913,6 +1277,16 @@ Public Class Door m_dtUnloadTime = JsonDoor.dtUnloadTime End Sub +#Region "METHODS" + + Friend Function Copy(nId As Integer) As Door + Dim sCSVName As String = "" + GetPluginPrivateProfileString(S_CSV, K_MANUALADDEDDOORNAME, "Manual", sCSVName) + Return New Door(nId, m_nCSVLine, m_sDDFName, sCSVName, m_nQuantity, m_dWidth, m_dHeight, m_dThickness, m_CustomerParameters) + End Function + +#End Region ' METHODS + End Class Public Class CustomerParameter @@ -930,10 +1304,48 @@ Public Class CustomerParameter Return m_sValue End Get End Property + Friend Sub SetValue(value As String) + m_sValue = value + End Sub Sub New(sHeader As String, sValue As String) m_sHeader = sHeader m_sValue = sValue End Sub +End Class + +Public Class StateToSelColorConverter + Implements IValueConverter + + Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert + If Not TypeOf value Is DoorStates Then Return Brushes.Aqua + Select Case value + Case DoorStates.LOADED_FROM_CSV + Return Dictionary.Effector_White_SelStatus + Case DoorStates.VERIFIED + Return Dictionary.Effector_Green_SelStatus + Case DoorStates.VERIFICATION_FAILED + Return Dictionary.Effector_Red_SelStatus + Case DoorStates.SKIPPED + Return Dictionary.Effector_Yellow_SelStatus + Case DoorStates.READY_FOR_PRODUCTION, DoorStates.ON_LOAD_STATION + Return Dictionary.Effector_LightBlue_SelStatus + Case DoorStates.MACHINE_1_START, DoorStates.MACHINE_2_START + Return Dictionary.Effector_Blue_SelStatus + Case DoorStates.MACHINE_1_END + Return Dictionary.Effector_Blue_SelStatus + Case DoorStates.MACHINE_2_END, DoorStates.PRODUCED + Return Dictionary.Effector_Gray_SelStatus + Case DoorStates.SCRAP + Return Dictionary.Effector_White_SelStatus + Case Else + Return Dictionary.Effector_White_SelStatus + End Select + End Function + + Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.ConvertBack + Throw New NotImplementedException() + End Function + End Class \ No newline at end of file diff --git a/Effector.Plugin.FiveLakes/DoorListPage/DoorListPageVM.vb.bak b/Effector.Plugin.FiveLakes/DoorListPage/DoorListPageVM.vb.bak new file mode 100644 index 0000000..2e27f60 --- /dev/null +++ b/Effector.Plugin.FiveLakes/DoorListPage/DoorListPageVM.vb.bak @@ -0,0 +1,977 @@ +Imports System.Collections.ObjectModel +Imports System.IO +Imports Newtonsoft.Json +Imports System.Windows.Threading +Imports System.Text.RegularExpressions +Imports Effector.Plugin.FiveLakes.Door +Imports System.Globalization + +Public Class DoorListPageVM + Inherits VMBase + + Private m_BackupTimer As New DispatcherTimer + Private m_RefreshGraphicsTimer As New DispatcherTimer + Private m_ExecProcessManager As ExecProcessManager + + Private m_DoorList As New ObservableCollection(Of Door) + Public ReadOnly Property DoorList As ObservableCollection(Of Door) + Get + Return m_DoorList + End Get + End Property + Private m_SelDoor As Door + Public Property SelDoor As Door + Get + Return m_SelDoor + End Get + Set(value As Door) + m_SelDoor = value + End Set + End Property + + Private m_bExecButton_IsEnabled As Boolean = True + Public ReadOnly Property bExecButton_IsEnabled As Boolean + Get + Return m_bExecButton_IsEnabled + End Get + End Property + Private Sub SetExecButtonIsEnabled(bValue As Boolean) + m_bExecButton_IsEnabled = bValue + NotifyPropertyChanged(NameOf(bExecButton_IsEnabled)) + End Sub + Private m_nModifyIndex As Integer = 0 + Private m_nBackupindex As Integer = 0 + Private m_bWritingBackup As Boolean = False + + ' Definizione comandi + Private m_cmdOpenCSV As ICommand + Private m_cmdSkipDoor As ICommand + Private m_cmdMoveUp As ICommand + Private m_cmdMoveDown As ICommand + Private m_cmdDelete As ICommand + Private m_cmdDeleteAll As ICommand + Private m_cmdProduce As ICommand + Private m_cmdProduceAll As ICommand + Private m_cmdResetProductionQueue As ICommand + Private m_cmdVerify As ICommand + +#Region "CONSTRUCTOR" + + Sub New() + ' imposto riferimento in Map + Map.SetRefDoorListPageVM(Me) + Dim sBackupDirPath As String = "" + GetPluginPrivateProfileString(S_GENERAL, "BackupDir", "", sBackupDirPath) + Dim sBackupFilePath As String = sBackupDirPath & "\Backup.json" + Read(sBackupFilePath) + m_BackupTimer.Interval = New TimeSpan(0, 0, 1) + AddHandler m_BackupTimer.Tick, AddressOf BackupTimer_Tick + m_RefreshGraphicsTimer.Interval = New TimeSpan(0, 0, 1) + AddHandler m_RefreshGraphicsTimer.Tick, AddressOf RefreshGraphicsTimer_Tick + m_BackupTimer.Start() + m_RefreshGraphicsTimer.Start() + End Sub +#End Region ' CONSTRUCTOR + +#Region "METHODS" + + Friend Function ExecCAMProcess(sDDFName As String) As Boolean + ' lancio esecuzione programma + Dim sCamExePath As String = "" + GetPluginPrivateProfileString(S_GENERAL, "CAMExePath", "", sCamExePath) + Dim sMainLuaPath As String = "" + GetPluginPrivateProfileString(S_GENERAL, "MainLUA", "", sMainLuaPath) + Dim sGenDDFDirPath As String = "" + GetPluginPrivateProfileString(S_GENERAL, K_GENDDFDIR, "", sGenDDFDirPath) + Dim sDDFFilePath As String = sGenDDFDirPath & "\" & sDDFName + Return Map.refSupervisorFunction.PlgExecProcess(sCamExePath, sMainLuaPath, sDDFFilePath) + End Function + + Friend Function ExecCAMProcessAsync(sDDFName As String) As Boolean + ' lancio esecuzione programma + Dim sCamExePath As String = "" + GetPluginPrivateProfileString(S_GENERAL, "CAMExePath", "", sCamExePath) + Dim sMainLuaPath As String = "" + GetPluginPrivateProfileString(S_GENERAL, "MainLUA", "", sMainLuaPath) + Dim sGenDDFDirPath As String = "" + GetPluginPrivateProfileString(S_GENERAL, K_GENDDFDIR, "", sGenDDFDirPath) + Dim sDDFFilePath As String = sGenDDFDirPath & "\" & sDDFName + Return Map.refSupervisorFunction.PlgExecProcessAsync(sCamExePath, sMainLuaPath, sDDFFilePath) + End Function + + Public Sub Read(FilePath As String) + If Not File.Exists(FilePath) Then Return + Dim sReadedFile As String = File.ReadAllText(FilePath) + Dim JsonDoorList As List(Of JsonDoor) = JsonConvert.DeserializeObject(Of List(Of JsonDoor))(sReadedFile) + JsonDoorList = JsonDoorList.OrderBy(Of Integer)(Function(x) x.nListIndex).ToList() + + m_DoorList = New ObservableCollection(Of Door)((From JsonDoor In JsonDoorList + Select New Door(JsonDoor)).ToList()) + End Sub + + Public Sub Write(FilePath As String) + Dim JsonDoorList As New List(Of JsonDoor) + For nDoorIndex As Integer = 0 To m_DoorList.Count - 1 + JsonDoorList.Add(New JsonDoor(nDoorIndex + 1, m_DoorList(nDoorIndex))) + Next + Dim JsonFromWindow As String = JsonConvert.SerializeObject(JsonDoorList, Formatting.Indented) + If File.Exists(FilePath) Then + Dim sBackupFilePath As String = Path.ChangeExtension(FilePath, ".bck") + If File.Exists(sBackupFilePath) Then + Try + File.Delete(sBackupFilePath) + Catch ex As Exception + Map.refSupervisorFunction.PlgOutLog("Error! Impossible deleting backup file!") + End Try + End If + Try + File.Move(FilePath, sBackupFilePath) + Catch ex As Exception + Map.refSupervisorFunction.PlgOutLog("Error! Impossible renaming backup file!") + End Try + End If + File.WriteAllText(FilePath, JsonFromWindow) + End Sub + + Private Sub WriteBackupCmd() + If m_bWritingBackup Then Return + m_bWritingBackup = True + m_nBackupindex = m_nModifyIndex + Dim sBackupDirPath As String = "" + GetPluginPrivateProfileString(S_GENERAL, K_BACKUPDIR, "", sBackupDirPath) + Dim sBackupFilePath As String = sBackupDirPath & "\Backup.json" + Write(sBackupFilePath) + m_bWritingBackup = False + End Sub + + Friend Sub WriteBackup() + m_nModifyIndex += 1 + End Sub + + Private Sub BackupTimer_Tick(sender As Object, e As EventArgs) + If m_nBackupindex < m_nModifyIndex Then + WriteBackupCmd() + End If + End Sub + + Private Sub RefreshGraphicsTimer_Tick(sender As Object, e As EventArgs) + If IsNothing(m_ExecProcessManager) Then Return + ' ciclo su coda risultati + Dim ArgumentsResult As ProcessArgsResult = m_ExecProcessManager.ArgumentsResultDequeue + While Not IsNothing(ArgumentsResult) + ' aggiorno risultato sulla porta + Dim CurrRequestDoor As Door = m_DoorList.FirstOrDefault(Function(x) x.nId = ArgumentsResult.ProcessArgs.nId) + If Not IsNothing(CurrRequestDoor) Then + CurrRequestDoor.SetState(If(ArgumentsResult.nResult = 0, Door.DoorStates.VERIFIED, Door.DoorStates.VERIFICATION_FAILED)) + ' elimino file generati + Dim sGenDDFDirPath As String = "" + GetPluginPrivateProfileString(S_GENERAL, K_GENDDFDIR, "", sGenDDFDirPath) + Dim sDoorFileName As String = CurrRequestDoor.sDDFName & "_" & CurrRequestDoor.nId + Try + File.Delete(sGenDDFDirPath & "\" & sDoorFileName & ".tok") + File.Delete(sGenDDFDirPath & "\" & sDoorFileName & "_2.tok") + File.Delete(sGenDDFDirPath & "\" & sDoorFileName & ".cnc") + File.Delete(sGenDDFDirPath & "\" & sDoorFileName & "_a.cnc") + File.Delete(sGenDDFDirPath & "\" & sDoorFileName & "_b.cnc") + File.Delete(sGenDDFDirPath & "\" & sDoorFileName & "_2.cnc") + File.Delete(sGenDDFDirPath & "\" & sDoorFileName & "_2_a.cnc") + File.Delete(sGenDDFDirPath & "\" & sDoorFileName & ".html") + File.Delete(sGenDDFDirPath & "\" & sDoorFileName & "_2.html") + File.Delete(sGenDDFDirPath & "\" & sDoorFileName & ".log") + File.Delete(sGenDDFDirPath & "\" & CurrRequestDoor.sDDFName & ".nge") + File.Delete(sGenDDFDirPath & "\" & sDoorFileName & ".nge") + File.Delete(sGenDDFDirPath & "\" & sDoorFileName & ".sest") + File.Delete(sGenDDFDirPath & "\" & sDoorFileName & "_2.sest") + File.Delete(sGenDDFDirPath & "\" & CurrRequestDoor.sDDFName & ".txt") + File.Delete(sGenDDFDirPath & "\" & sDoorFileName & ".txt") + File.Delete(sGenDDFDirPath & "\" & sDoorFileName & "_2.txt") + Catch ex As Exception + + End Try + End If + WriteBackup() + ArgumentsResult = m_ExecProcessManager.ArgumentsResultDequeue + End While + If Not bExecButton_IsEnabled AndAlso m_ExecProcessManager.ExecutionThreadStatus = ExecProcessManager.ExecutionThreadStatuses.STOPPED Then + SetExecButtonIsEnabled(True) + End If + End Sub + + Friend Function GetNextDoor() As Door + Dim NextDoor As Door = m_DoorList.FirstOrDefault(Function(x) x.nState = Door.DoorStates.READY_FOR_PRODUCTION) + If Not IsNothing(NextDoor) Then + Map.refSupervisorFunction.PlgOutLog("GetNextDoor: door " & NextDoor.nId & " set at ON_LOAD_STATION") + NextDoor.SetState(Door.DoorStates.ON_LOAD_STATION) + WriteBackup() + End If + Return NextDoor + End Function + + Public Sub ResetProductionQueue() + For Each Door In m_DoorList + If Door.nState = Door.DoorStates.READY_FOR_PRODUCTION Then + Door.SetState(Door.DoorStates.VERIFIED, False) + End If + Next + End Sub + +#End Region ' METHODS + +#Region "COMMANDS" + +#Region "OpenCSV" + + Public ReadOnly Property OpenCSV_Command As ICommand + Get + If m_cmdOpenCSV Is Nothing Then + m_cmdOpenCSV = New Command(AddressOf OpenCSV) + End If + Return m_cmdOpenCSV + End Get + End Property + + Public Sub OpenCSV() + Dim sDir As String = String.Empty + 'GetMainPrivateProfileString(S_GENERAL, K_LASTIMPDIR, "", sDir) + Dim OpenFileDialog As New Microsoft.Win32.OpenFileDialog() With { + .DefaultExt = ".csv", + .Filter = "CSV (*.csv)|*.csv", + .InitialDirectory = If(Directory.Exists(sDir), sDir, ""), + .CheckFileExists = True, + .ValidateNames = True} + If OpenFileDialog.ShowDialog() Then + Dim sCSVPath As String = OpenFileDialog.FileName + Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(sCSVPath) + MyReader.TextFieldType = FileIO.FieldType.Delimited + Dim sDelimiter As String = "" + GetPluginPrivateProfileString(S_CSV, K_DELIMITER, ";", sDelimiter) + MyReader.SetDelimiters(sDelimiter) + ' leggo intestazione + Dim Headers As String() = MyReader.ReadFields() + Dim sDDFName As String = "" + Dim sQuantityName As String = "" + Dim sHeightName As String = "" + Dim sWidthName As String = "" + Dim sThicknessName As String = "" + GetPluginPrivateProfileString(S_CSV, K_DDFNAME, K_DDFNAME, sDDFName) + GetPluginPrivateProfileString(S_CSV, K_QUANTITY, "", sQuantityName) + GetPluginPrivateProfileString(S_CSV, K_HEIGHT, "", sHeightName) + GetPluginPrivateProfileString(S_CSV, K_WIDTH, "", sWidthName) + GetPluginPrivateProfileString(S_CSV, K_THICKNESS, "", sThicknessName) + Dim nDDFNameIndex As Integer = Array.IndexOf(Headers, sDDFName) + Dim nQuantityNameIndex As Integer = Array.IndexOf(Headers, sQuantityName) + Dim nHeightNameIndex As Integer = Array.IndexOf(Headers, sHeightName) + Dim nWidthNameIndex As Integer = Array.IndexOf(Headers, sWidthName) + Dim nThicknessNameIndex As Integer = Array.IndexOf(Headers, sThicknessName) + If nDDFNameIndex = -1 Then + Dim sMessage As String = "Error! DDFName column not found! Csv file will not be read!" + ' egtoutlog(sMessage) + MessageBox.Show(sMessage, "Error", MessageBoxButton.OK, MessageBoxImage.Error) + Return + End If + Dim Values As String() + Dim nLineIndex As Integer = 1 + Dim sLineErrorList As String = "" + While Not MyReader.EndOfData + Try + Values = MyReader.ReadFields() + Dim nQuantity As Integer = 1 + If nQuantityNameIndex >= 0 AndAlso nQuantityNameIndex < Values.Count Then + If Not Integer.TryParse(Values(nQuantityNameIndex), nQuantity) OrElse nQuantity < 1 Then + nQuantity = 1 + Dim sLine As String = "" + For nValueIndex = 0 To Values.Count - 1 + sLine &= Values(nValueIndex) & If(nValueIndex < Values.Count, ";", "") + Next + sLineErrorList &= "Quantity not readable in line " & sLine & ". This line will be skipped" + Continue While + End If + End If + Dim dWidth As Double = 0 + If nWidthNameIndex >= 0 AndAlso nWidthNameIndex < Values.Count Then + If Not StringToDouble(Values(nWidthNameIndex), dWidth) OrElse dWidth < 0 Then + dWidth = 0 + End If + End If + Dim dHeight As Double = 0 + If nHeightNameIndex >= 0 AndAlso nHeightNameIndex < Values.Count Then + If Not StringToDouble(Values(nHeightNameIndex), dHeight) OrElse dHeight < 0 Then + dHeight = 0 + End If + End If + Dim dThickness As Double = 0 + If nThicknessNameIndex >= 0 AndAlso nThicknessNameIndex < Values.Count Then + If Not StringToDouble(Values(nThicknessNameIndex), dThickness) OrElse dThickness < 0 Then + dThickness = 0 + End If + End If + For nQuantityIndex = 1 To nQuantity + Dim nId As Integer = 1 + If m_DoorList.Count > 0 Then + Dim nMaxId As Integer = m_DoorList.Max(Of Integer)(Function(x) x.nId) + 'If nMaxId < 100 Then + nId = nMaxId + 1 + 'End If + End If + Dim NewDoor As New Door(nId, nLineIndex, Values(nDDFNameIndex), Path.GetFileName(sCSVPath), + 1, dWidth, dHeight, dThickness, Headers, Values) + m_DoorList.Add(NewDoor) + Next + nLineIndex += 1 + Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException + Dim sMessage As String = "Line " & ex.Message & "is not valid and will be skipped." + ' egtoutlog(sMessage) + sLineErrorList &= Environment.NewLine & ex.Message + End Try + End While + If Not String.IsNullOrWhiteSpace(sLineErrorList) Then + MessageBox.Show("The following lines are not valid and have been skipped:" & sLineErrorList, "Error", MessageBoxButton.OK, MessageBoxImage.Error) + End If + End Using + Dim sCamExePath As String = "" + GetPluginPrivateProfileString(S_GENERAL, "CAMExePath", "", sCamExePath) + Dim sMainLuaPath As String = "" + GetPluginPrivateProfileString(S_GENERAL, "MainPipeLUA", "", sMainLuaPath) + Dim bStartExecProcessManager As Boolean = False + If IsNothing(m_ExecProcessManager) Then + bStartExecProcessManager = True + m_ExecProcessManager = New ExecProcessManager(sCamExePath, """" & sMainLuaPath & """") + AddHandler m_ExecProcessManager.m_AllArgsProcessed, AddressOf ExecProcessManager_AllArgsProcessed + m_ExecProcessManager.SetMaxCamInstances(3) + End If + Dim sDDFDirPath As String = "" + GetPluginPrivateProfileString(S_GENERAL, K_DDFDIR, "", sDDFDirPath) + Dim sGenDDFDirPath As String = "" + GetPluginPrivateProfileString(S_GENERAL, K_GENDDFDIR, "", sGenDDFDirPath) + For Each Door In m_DoorList + If Door.nState = Door.DoorStates.LOADED_FROM_CSV Then + Dim sDDFFilePath As String = sDDFDirPath & "\" & Door.sDDFName & ".ddf" + Dim sGenDDFFilePath As String = sGenDDFDirPath & "\" & Door.sDDFName & "_" & Door.nId & ".ddf" + Try + File.Copy(sDDFFilePath, sGenDDFFilePath, True) + Catch ex As Exception + Map.refSupervisorFunction.PlgOutLog("Error: Copy file from " & sDDFFilePath & " to " & sGenDDFFilePath & " failed!") + End Try + m_ExecProcessManager.ArgumentsEnqueue(New ProcessArgs(Door.nId, sGenDDFFilePath)) + End If + Next + If bStartExecProcessManager OrElse m_ExecProcessManager.ExecutionThreadStatus = ExecProcessManager.ExecutionThreadStatuses.STOPPED Then + m_ExecProcessManager.StartExecutionThread() + SetExecButtonIsEnabled(False) + End If + End If + WriteBackup() + End Sub + + Public Sub ExecProcessManager_AllArgsProcessed() + m_ExecProcessManager.StopExecutionThread() + End Sub + + Public Sub ExecProcessManager_PostProcess(ProcessArgsResult As ProcessArgsResult) + ' verifico file di risultati + Dim sDDFDirPath As String = "" + GetPluginPrivateProfileString(S_GENERAL, "DDFDir", "", sDDFDirPath) + Dim sDDFFilePath As String = sDDFDirPath & "\" & ProcessArgsResult.ProcessArgs.sArgs + Dim sTxtFilePath As String = Path.ChangeExtension(sDDFDirPath, ".txt") + If Not File.Exists(sTxtFilePath) Then + ProcessArgsResult.SetResult(-1) + Return + End If + Dim TxtFileLines As String() = File.ReadAllLines(sTxtFilePath) + For nLineIndex As Integer = 0 To TxtFileLines.Count - 1 + Dim Match As Match = Regex.Match(TxtFileLines(nLineIndex), "\s*Err\s*=\s*(\d*)\s*") + If Not IsNothing(Match) AndAlso Not IsNothing(Match.Groups(1)) Then + Dim sResult As String = Match.Groups(1).Value + Dim nResult As Integer = -2 + If Integer.TryParse(sResult, nResult) Then + ProcessArgsResult.SetResult(nResult) + Else + ProcessArgsResult.SetResult(-2) + End If + End If + Next + End Sub + +#End Region ' OpenCSV + +#Region "SkipDoor" + + Public ReadOnly Property SkipDoor_Command As ICommand + Get + If m_cmdSkipDoor Is Nothing Then + m_cmdSkipDoor = New Command(AddressOf SkipDoor) + End If + Return m_cmdSkipDoor + End Get + End Property + + Public Sub SkipDoor() + If IsNothing(SelDoor) OrElse (SelDoor.nState <> Door.DoorStates.VERIFIED AndAlso SelDoor.nState <> Door.DoorStates.SKIPPED) Then Return + SelDoor.SetState(If(SelDoor.nState = Door.DoorStates.VERIFIED, Door.DoorStates.SKIPPED, Door.DoorStates.VERIFIED)) + WriteBackup() + End Sub + +#End Region ' SkipDoor + +#Region "MoveUp" + + Public ReadOnly Property MoveUp_Command As ICommand + Get + If m_cmdMoveUp Is Nothing Then + m_cmdMoveUp = New Command(AddressOf MoveUp) + End If + Return m_cmdMoveUp + End Get + End Property + + Public Sub MoveUp() + If IsNothing(SelDoor) Then Return + Dim nOldIndex As Integer = m_DoorList.IndexOf(SelDoor) + If nOldIndex = 0 Then Return + If m_DoorList(nOldIndex - 1).nState >= Door.DoorStates.READY_FOR_PRODUCTION Then Return + m_DoorList.Move(nOldIndex, nOldIndex - 1) + WriteBackup() + End Sub + +#End Region ' MoveUp + +#Region "MoveDown" + + Public ReadOnly Property MoveDown_Command As ICommand + Get + If m_cmdMoveDown Is Nothing Then + m_cmdMoveDown = New Command(AddressOf MoveDown) + End If + Return m_cmdMoveDown + End Get + End Property + + Public Sub MoveDown() + If IsNothing(SelDoor) OrElse SelDoor.nState >= Door.DoorStates.READY_FOR_PRODUCTION Then Return + Dim nOldIndex As Integer = m_DoorList.IndexOf(SelDoor) + If nOldIndex = m_DoorList.Count - 1 Then Return + m_DoorList.Move(nOldIndex, nOldIndex + 1) + WriteBackup() + End Sub + +#End Region ' MoveDown + +#Region "Delete" + + Public ReadOnly Property Delete_Command As ICommand + Get + If m_cmdDelete Is Nothing Then + m_cmdDelete = New Command(AddressOf Delete) + End If + Return m_cmdDelete + End Get + End Property + + Public Sub Delete() + If IsNothing(SelDoor) OrElse SelDoor.nState >= Door.DoorStates.READY_FOR_PRODUCTION Then Return + If MessageBox.Show("Are you sure you want to delete the selected door?", "Info", MessageBoxButton.YesNo, MessageBoxImage.Information) = MessageBoxResult.Yes Then + m_DoorList.Remove(SelDoor) + WriteBackup() + End If + End Sub + +#End Region ' Delete + +#Region "DeleteAll" + + Public ReadOnly Property DeleteAll_Command As ICommand + Get + If m_cmdDeleteAll Is Nothing Then + m_cmdDeleteAll = New Command(AddressOf DeleteAll) + End If + Return m_cmdDeleteAll + End Get + End Property + + Public Sub DeleteAll() + If m_DoorList.Count = 0 Then Return + If MessageBox.Show("Are you sure you want to delete all the doors?", "Info", MessageBoxButton.YesNo, MessageBoxImage.Information) = MessageBoxResult.Yes Then + For nDoorIndex = m_DoorList.Count - 1 To 0 Step -1 + Dim Door As Door = m_DoorList(nDoorIndex) + If Door.nState >= Door.DoorStates.READY_FOR_PRODUCTION Then Continue For + m_DoorList.Remove(Door) + Next + WriteBackup() + End If + End Sub + +#End Region ' DeleteAll + +#Region "Produce" + + Public ReadOnly Property Produce_Command As ICommand + Get + If m_cmdProduce Is Nothing Then + m_cmdProduce = New Command(AddressOf Produce) + End If + Return m_cmdProduce + End Get + End Property + + Public Sub Produce() + ProduceDoor(m_SelDoor) + WriteBackup() + End Sub + + Public Sub ProduceDoor(DoorToProduce As Door, Optional bWriteBackup As Boolean = True) + If IsNothing(DoorToProduce) OrElse DoorToProduce.nState = Door.DoorStates.SKIPPED OrElse + DoorToProduce.nState = Door.DoorStates.VERIFICATION_FAILED OrElse + DoorToProduce.nState >= Door.DoorStates.READY_FOR_PRODUCTION Then Return + ' la sposto dopo l'ultima da produrre + Dim nNewIndex As Integer = m_DoorList.IndexOf(m_DoorList.FirstOrDefault(Function(x) x.nState < Door.DoorStates.READY_FOR_PRODUCTION)) + Dim nOldIndex As Integer = m_DoorList.IndexOf(DoorToProduce) + m_DoorList.Move(nOldIndex, nNewIndex) + DoorToProduce.SetState(Door.DoorStates.READY_FOR_PRODUCTION, bWriteBackup) + End Sub + +#End Region ' Produce + +#Region "ProduceAll" + + Public ReadOnly Property ProduceAll_Command As ICommand + Get + If m_cmdProduceAll Is Nothing Then + m_cmdProduceAll = New Command(AddressOf ProduceAll) + End If + Return m_cmdProduceAll + End Get + End Property + + Public Sub ProduceAll() + If m_DoorList.Count = 0 Then Return + For nDoorIndex = 0 To m_DoorList.Count - 1 + Dim CurrDoor As Door = m_DoorList(nDoorIndex) + ProduceDoor(CurrDoor, False) + Next + WriteBackup() + End Sub + +#End Region ' ProduceAll + +#Region "ResetProductionQueue" + + Public ReadOnly Property ResetProductionQueue_Command As ICommand + Get + If m_cmdResetProductionQueue Is Nothing Then + m_cmdResetProductionQueue = New Command(AddressOf ResetProductionQueueCmd) + End If + Return m_cmdResetProductionQueue + End Get + End Property + + Public Sub ResetProductionQueueCmd() + ResetProductionQueue() + WriteBackup() + End Sub + +#End Region ' ResetProductionQueue + +#Region "Verify" + + Public ReadOnly Property Verify_Command As ICommand + Get + If m_cmdVerify Is Nothing Then + m_cmdVerify = New Command(AddressOf Verify) + End If + Return m_cmdVerify + End Get + End Property + + Public Sub Verify() + Dim sCamExePath As String = "" + GetPluginPrivateProfileString(S_GENERAL, "CAMExePath", "", sCamExePath) + Dim sMainLuaPath As String = "" + GetPluginPrivateProfileString(S_GENERAL, "MainPipeLUA", "", sMainLuaPath) + Dim bStartExecProcessManager As Boolean = False + If IsNothing(m_ExecProcessManager) Then + bStartExecProcessManager = True + m_ExecProcessManager = New ExecProcessManager(sCamExePath, """" & sMainLuaPath & """") + 'm_ExecProcessManager.SetPostProcess(AddressOf ExecProcessManager_PostProcess) + AddHandler m_ExecProcessManager.m_AllArgsProcessed, AddressOf ExecProcessManager_AllArgsProcessed + m_ExecProcessManager.SetMaxCamInstances(3) + End If + Dim sDDFDirPath As String = "" + GetPluginPrivateProfileString(S_GENERAL, "DDFDir", "", sDDFDirPath) + For Each Door In m_DoorList + If Door.nState = Door.DoorStates.LOADED_FROM_CSV Or Door.nState = Door.DoorStates.VERIFICATION_FAILED Then + Dim sDDFFilePath As String = sDDFDirPath & "\" & Door.sDDFName & ".ddf" + m_ExecProcessManager.ArgumentsEnqueue(New ProcessArgs(Door.nId, sDDFFilePath)) + End If + Next + If bStartExecProcessManager OrElse m_ExecProcessManager.ExecutionThreadStatus = ExecProcessManager.ExecutionThreadStatuses.STOPPED Then + m_ExecProcessManager.StartExecutionThread() + SetExecButtonIsEnabled(False) + End If + WriteBackup() + End Sub + +#End Region ' Verify + +#End Region ' COMMANDS + +End Class + +Public Class Door + Inherits VMBase + + Public Enum DoorStates As Integer + NULL = 0 + LOADED_FROM_CSV = 1 + VERIFIED = 10 + VERIFICATION_FAILED = 11 + SKIPPED = 20 + NOTPRODUCE = 21 + READY_FOR_PRODUCTION = 30 + ON_LOAD_STATION = 31 + MACHINE_1_START = 33 + MACHINE_1_END = 34 + MACHINE_2_START = 35 + MACHINE_2_END = 36 + PRODUCED = 37 + SCRAP = 40 + End Enum + + Public Enum DoorProdStates As Integer + NOT_INIT = 0 + IMPORTED = 1 + SENT_1 = 2 + START_MACHINING_1 = 3 + MACHINED_1 = 4 + SENT_2 = 5 + START_MACHINING_2 = 6 + MACHINED_2 = 7 + UNLOADED = 8 + End Enum + + Private m_nId As Integer + Public ReadOnly Property nId As Integer + Get + Return m_nId + End Get + End Property + + Private m_nCSVLine As Integer + Public ReadOnly Property nCSVLine As Integer + Get + Return m_nCSVLine + End Get + End Property + + Private m_sDDFName As String + Public ReadOnly Property sDDFName As String + Get + Return m_sDDFName + End Get + End Property + + Private m_nQuantity As Integer + Public ReadOnly Property nQuantity As Integer + Get + Return m_nQuantity + End Get + End Property + + Private m_dWidth As Double + Public ReadOnly Property dWidth As Double + Get + Return m_dWidth + End Get + End Property + + Private m_dHeight As Double + Public ReadOnly Property dHeight As Double + Get + Return m_dHeight + End Get + End Property + + Private m_dThickness As Double + Public ReadOnly Property dThickness As Double + Get + Return m_dThickness + End Get + End Property + + Private m_sCSVName As String + Public ReadOnly Property sCSVName As String + Get + Return m_sCSVName + End Get + End Property + + Private m_CustomerParameters As New List(Of CustomerParameter) + Public ReadOnly Property CustomerParameters As List(Of CustomerParameter) + Get + Return m_CustomerParameters + End Get + End Property + + Private m_nState As DoorStates = DoorStates.LOADED_FROM_CSV + Public ReadOnly Property nState As DoorStates + Get + Return m_nState + End Get + End Property + Friend Sub SetState(value As DoorStates, Optional bWriteBackup As Boolean = True, Optional bUpdate As Boolean = True) + m_nState = value + If bWriteBackup Then Map.refDoorListPageVM.WriteBackup() + If bUpdate Then + NotifyPropertyChanged(NameOf(nState)) + NotifyPropertyChanged(NameOf(Background)) + End If + End Sub + +#Region "Statistics" + + Private m_nProdState As DoorProdStates = DoorProdStates.NOT_INIT + Public ReadOnly Property nProdState As DoorProdStates + Get + Return m_nProdState + End Get + End Property + Friend Sub SetProdState(value As DoorProdStates) + m_nProdState = value + Select Case value + Case DoorProdStates.SENT_1 + SetState(DoorStates.ON_LOAD_STATION) + Case DoorProdStates.START_MACHINING_1 + SetState(DoorStates.MACHINE_1_START) + Case DoorProdStates.MACHINED_1 + SetState(DoorStates.MACHINE_1_END) + Case DoorProdStates.START_MACHINING_2 + SetState(DoorStates.MACHINE_2_START) + Case DoorProdStates.MACHINED_2 + SetState(DoorStates.MACHINE_2_END) + Case DoorProdStates.UNLOADED + SetState(DoorStates.PRODUCED) + End Select + NotifyPropertyChanged(NameOf(nProdState)) + End Sub + + Private m_dtLoadTime As DateTime = DateTime.MinValue + Friend ReadOnly Property dtLoadTime As DateTime + Get + Return m_dtLoadTime + End Get + End Property + Public ReadOnly Property sLoadTime As String + Get + Return If(m_dtLoadTime <> DateTime.MinValue, m_dtLoadTime.ToString("yy/MM/dd hh:mm:ss"), "") + End Get + End Property + Friend Sub SetLoadTime(LoadTime As Long) + m_dtLoadTime = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(LoadTime).ToLocalTime() + NotifyPropertyChanged(NameOf(sLoadTime)) + End Sub + + Private m_dtMachining1Start As DateTime = DateTime.MinValue + Friend ReadOnly Property dtMachining1Start As DateTime + Get + Return m_dtMachining1Start + End Get + End Property + Public ReadOnly Property sMachining1Start As String + Get + Return If(m_dtMachining1Start <> DateTime.MinValue, m_dtMachining1Start.ToString("yy/MM/dd hh:mm:ss"), "") + End Get + End Property + Friend Sub SetMachining1Start(Machining1Start As Long) + m_dtMachining1Start = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(Machining1Start).ToLocalTime() + NotifyPropertyChanged(NameOf(sMachining1Start)) + End Sub + + Private m_dtMachining1End As DateTime = DateTime.MinValue + Friend ReadOnly Property dtMachining1End As DateTime + Get + Return m_dtMachining1End + End Get + End Property + Public ReadOnly Property sMachining1End As String + Get + Return If(m_dtMachining1End <> DateTime.MinValue, m_dtMachining1End.ToString("yy/MM/dd hh:mm:ss"), "") + End Get + End Property + Friend Sub SetMachining1End(Machining1End As Long) + m_dtMachining1End = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(Machining1End).ToLocalTime() + NotifyPropertyChanged(NameOf(sMachining1End)) + End Sub + + Private m_dtMachining2Start As DateTime = DateTime.MinValue + Friend ReadOnly Property dtMachining2Start As DateTime + Get + Return m_dtMachining2Start + End Get + End Property + Public ReadOnly Property sMachining2Start As String + Get + Return If(m_dtMachining2Start <> DateTime.MinValue, m_dtMachining2Start.ToString("yy/MM/dd hh:mm:ss"), "") + End Get + End Property + Friend Sub SetMachining2Start(Machining2Start As Long) + m_dtMachining2Start = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(Machining2Start).ToLocalTime() + NotifyPropertyChanged(NameOf(sMachining2Start)) + End Sub + + Private m_dtMachining2End As DateTime = DateTime.MinValue + Friend ReadOnly Property dtMachining2End As DateTime + Get + Return m_dtMachining2End + End Get + End Property + Public ReadOnly Property sMachining2End As String + Get + Return If(m_dtMachining2End <> DateTime.MinValue, m_dtMachining2End.ToString("yy/MM/dd hh:mm:ss"), "") + End Get + End Property + Friend Sub SetMachining2End(Machining2End As Long) + m_dtMachining2End = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(Machining2End).ToLocalTime() + NotifyPropertyChanged(NameOf(sMachining2End)) + End Sub + + Private m_dtUnloadTime As DateTime = DateTime.MinValue + Friend ReadOnly Property dtUnloadTime As DateTime + Get + Return m_dtUnloadTime + End Get + End Property + Public ReadOnly Property sUnloadTime As String + Get + Return If(m_dtUnloadTime <> DateTime.MinValue, m_dtUnloadTime.ToString("yy/MM/dd hh:mm:ss"), "") + End Get + End Property + Friend Sub SetUnloadTime(UnloadTime As Long) + m_dtUnloadTime = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(UnloadTime).ToLocalTime() + NotifyPropertyChanged(NameOf(sUnloadTime)) + End Sub + +#End Region ' Statistics + + Public ReadOnly Property Background As SolidColorBrush + Get + Select Case m_nState + Case DoorStates.LOADED_FROM_CSV + Return Brushes.White + Case DoorStates.VERIFIED + Return Dictionary.Effector_Green_Status + Case DoorStates.VERIFICATION_FAILED + Return Dictionary.Effector_Red_Status + Case DoorStates.SKIPPED, DoorStates.NOTPRODUCE + Return Dictionary.Effector_Yellow_Status + Case DoorStates.READY_FOR_PRODUCTION, DoorStates.ON_LOAD_STATION + Return Dictionary.Effector_LightBlue_Status + Case DoorStates.MACHINE_1_START + Return Dictionary.Effector_Blue_Status + Case DoorStates.MACHINE_1_END + Return Brushes.Yellow + Case DoorStates.MACHINE_2_START + Return Dictionary.Effector_Blue_Status + Case DoorStates.MACHINE_2_END, DoorStates.PRODUCED + Return Dictionary.Effector_Gray_Status + Case DoorStates.SCRAP + Return Brushes.MediumPurple + Case Else + Return Brushes.White + End Select + End Get + End Property + + Sub New(nId As Integer, nCSVLine As Integer, sDDFName As String, sCSVName As String, nQuantity As Integer, dWidth As Double, dHeight As Double, dThickness As Double, HeaderList As String(), ValueList As String()) + m_nId = nId + m_nCSVLine = nCSVLine + m_sDDFName = sDDFName + m_sCSVName = sCSVName + m_nQuantity = nQuantity + m_dHeight = dHeight + m_dWidth = dWidth + m_dThickness = dThickness + If Not IsNothing(HeaderList) AndAlso HeaderList.Count > 0 AndAlso Not IsNothing(ValueList) AndAlso ValueList.Count > 0 Then + For nParamIndex = 0 To Math.Max(HeaderList.Count, ValueList.Count) - 1 + m_CustomerParameters.Add(New CustomerParameter(If(HeaderList.Count > nParamIndex, HeaderList(nParamIndex), ""), If(ValueList.Count > nParamIndex, ValueList(nParamIndex), ""))) + Next + End If + End Sub + + Sub New(JsonDoor As JsonDoor) + m_nId = JsonDoor.nId + m_nCSVLine = JsonDoor.nCSVLine + m_sDDFName = JsonDoor.sDDFName + m_sCSVName = JsonDoor.sCSVName + m_nQuantity = JsonDoor.nQuantity + m_dHeight = JsonDoor.dHeight + m_dWidth = JsonDoor.dWidth + m_dThickness = JsonDoor.dThickness + m_nState = JsonDoor.nState + m_CustomerParameters = JsonDoor.CustomerParameters + m_nProdState = JsonDoor.nProdState + m_dtLoadTime = JsonDoor.dtLoadTime + m_dtMachining1Start = JsonDoor.dtMachining1Start + m_dtMachining1End = JsonDoor.dtMachining1End + m_dtMachining2Start = JsonDoor.dtMachining2Start + m_dtMachining2End = JsonDoor.dtMachining2End + m_dtUnloadTime = JsonDoor.dtUnloadTime + End Sub + +End Class + +Public Class CustomerParameter + + Private m_sHeader As String + Public ReadOnly Property sHeader As String + Get + Return m_sHeader + End Get + End Property + + Private m_sValue As String + Public ReadOnly Property sValue As String + Get + Return m_sValue + End Get + End Property + + Sub New(sHeader As String, sValue As String) + m_sHeader = sHeader + m_sValue = sValue + End Sub + +End Class + +Public Class StateToSelColorConverter + Implements IValueConverter + + Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert + If Not TypeOf value Is DoorStates Then Return Brushes.Aqua + Select Case value + Case DoorStates.LOADED_FROM_CSV + Return Dictionary.Effector_White_SelStatus + Case DoorStates.VERIFIED + Return Dictionary.Effector_Green_SelStatus + Case DoorStates.VERIFICATION_FAILED + Return Dictionary.Effector_Red_SelStatus + Case DoorStates.SKIPPED + Return Dictionary.Effector_Yellow_SelStatus + Case DoorStates.READY_FOR_PRODUCTION, DoorStates.ON_LOAD_STATION + Return Dictionary.Effector_LightBlue_SelStatus + Case DoorStates.MACHINE_1_START, DoorStates.MACHINE_2_START + Return Dictionary.Effector_Blue_SelStatus + Case DoorStates.MACHINE_1_END + Return Dictionary.Effector_Blue_SelStatus + Case DoorStates.MACHINE_2_END, DoorStates.PRODUCED + Return Dictionary.Effector_Gray_SelStatus + Case DoorStates.SCRAP + Return Dictionary.Effector_White_SelStatus + Case Else + Return Dictionary.Effector_White_SelStatus + End Select + End Function + + Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.ConvertBack + Throw New NotImplementedException() + End Function + +End Class \ No newline at end of file diff --git a/Effector.Plugin.FiveLakes/Effector.Plugin.FiveLakes.vbproj b/Effector.Plugin.FiveLakes/Effector.Plugin.FiveLakes.vbproj index fec2214..816ff61 100644 --- a/Effector.Plugin.FiveLakes/Effector.Plugin.FiveLakes.vbproj +++ b/Effector.Plugin.FiveLakes/Effector.Plugin.FiveLakes.vbproj @@ -51,6 +51,9 @@ ..\..\Effector.Main\Effector.Plugin.Interface\bin\Debug\Effector.Plugin.Interface.dll + + ..\..\Effector.Plugin.Lib\Effector.Plugin.Lib\bin\Debug\Effector.Plugin.Lib.dll + ..\packages\KeraLua.1.4.1\lib\net46\KeraLua.dll @@ -98,9 +101,6 @@ DoorListPageV.xaml - - ProcessManagerV.xaml - FiveLakesUI.xaml @@ -116,7 +116,6 @@ MainMenuV.xaml - RestartWndV.xaml @@ -142,7 +141,6 @@ True - @@ -160,16 +158,14 @@ Settings.Designer.vb + + Designer MSBuild:Compile - - Designer - MSBuild:Compile - Designer MSBuild:Compile @@ -195,6 +191,27 @@ MSBuild:Compile + + + + + + + + + + + + + + + + + + + + + powershell.exe -ExecutionPolicy Unrestricted -NoProfile -NonInteractive -File $(ProjectDir)\pre-build.ps1 -ProjectDir $(ProjectDir) -ProjectPath $(ProjectPath) diff --git a/Effector.Plugin.FiveLakes/FiveLakesUI.xaml b/Effector.Plugin.FiveLakes/FiveLakesUI.xaml index 8367c04..bb10719 100644 --- a/Effector.Plugin.FiveLakes/FiveLakesUI.xaml +++ b/Effector.Plugin.FiveLakes/FiveLakesUI.xaml @@ -3,12 +3,8 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Effector.Plugin.FiveLakes" DataContext="{StaticResource FiveLakesUIVM}"> - - - - + @@ -22,11 +18,4 @@ - diff --git a/Effector.Plugin.FiveLakes/FiveLakesUIVM.vb b/Effector.Plugin.FiveLakes/FiveLakesUIVM.vb index 4621e1b..6ec2da6 100644 --- a/Effector.Plugin.FiveLakes/FiveLakesUIVM.vb +++ b/Effector.Plugin.FiveLakes/FiveLakesUIVM.vb @@ -53,6 +53,7 @@ Public Class FiveLakesUIVM m_sConfigDir = m_sDataRoot & "\" & CONF_DIR ' Impostazione path Ini file IniFile.SetIniFile(m_sConfigDir & "\" & INI_FILE_NAME) + Effector.Plugin.Lib.PluginIniFile.SetIniFile(m_sConfigDir & "\" & INI_FILE_NAME) ' Impostazione path resources dir m_sResourcesRoot = m_sDataRoot & "\" & RES_DIR End Sub diff --git a/Effector.Plugin.FiveLakes/MainMenu/MainMenuV.xaml b/Effector.Plugin.FiveLakes/MainMenu/MainMenuV.xaml index 142cf0f..91bfaa3 100644 --- a/Effector.Plugin.FiveLakes/MainMenu/MainMenuV.xaml +++ b/Effector.Plugin.FiveLakes/MainMenu/MainMenuV.xaml @@ -14,19 +14,19 @@ - + Style="{StaticResource MainMenu_ToggleButton}"/> - + diff --git a/Effector.Plugin.FiveLakes/ProcessManager/ProcessManagerV.xaml b/Effector.Plugin.FiveLakes/ProcessManager/ProcessManagerV.xaml index d749df5..818bec2 100644 --- a/Effector.Plugin.FiveLakes/ProcessManager/ProcessManagerV.xaml +++ b/Effector.Plugin.FiveLakes/ProcessManager/ProcessManagerV.xaml @@ -1,57 +1,67 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + diff --git a/Effector.Plugin.FiveLakes/ProcessManager/ProcessManagerVM.vb b/Effector.Plugin.FiveLakes/ProcessManager/ProcessManagerVM.vb index 03ddb50..285111f 100644 --- a/Effector.Plugin.FiveLakes/ProcessManager/ProcessManagerVM.vb +++ b/Effector.Plugin.FiveLakes/ProcessManager/ProcessManagerVM.vb @@ -1,5 +1,6 @@ Imports System.Windows.Threading Imports System.Collections.ObjectModel +Imports Effector.Plugin.Lib Public Class ProcessManagerVM Inherits VMBase diff --git a/Effector.Plugin.FiveLakes/Resources/DoorListPage/Add.png b/Effector.Plugin.FiveLakes/Resources/DoorListPage/Add.png new file mode 100644 index 0000000000000000000000000000000000000000..b634987e5590c7d90a4c5a297bb1c62f77839a03 GIT binary patch literal 542 zcmV+(0^$9MP)dE$0JZ?u z0BFFs7=S&1f|BHHGMt&x$9TPxj_v|r`rtB3lA|xw5x`P;^bP@O{8LQ}h$ufQ&rXyi zD`zOi>kWX{ZV1cY*(9T0;->_jC`sP>Y)yr}R_{ZA06@O4`rHiJnxMMyo+wGm5TH)d z&q?#|1l1MyJ_eAY&fnlnzQ#IL*$n=n#>%>)j}ha|7NT&El+24zf3YH!1Goo}Gu~vO z&L)|@NkRqH)Ih3Mj5pr{O6H}jUuP&;)VaarMYG?z7QavW2HQgB0_qH+YLZLBB%z}8J^(w2S$2j;Ve5(l6{88Onq>N} z0hQVe{v6b&ysiy4KC-qQ6I3OyOUCOg294a1KFHz02TE-vd+9I)DAj!q*_yWP3y5fS z`!fb{`cir@WdI7zS2}e1GUn8!MA#9~FSoFqOBiRLd@+L||BgD?fB;LRRLPo11Ar<@ gl4^|MXsAo-3*1VVWFML!9{>OV07*qoM6N<$g70qm2><{9 literal 0 HcmV?d00001 diff --git a/Effector.Plugin.FiveLakes/Resources/DoorListPage/Copy.png b/Effector.Plugin.FiveLakes/Resources/DoorListPage/Copy.png new file mode 100644 index 0000000000000000000000000000000000000000..add0b01c809fbe5ab335362cae76693a0e7d4e24 GIT binary patch literal 484 zcmVWHukD4n3`25iub&<&bS z&~^j50c-#p)RGUr(L;2Q#?IW5rAfIA?S-~9Y5q=-8q;K20ZVOc5t}hzrWP%sLP?P#1b{ZS0ya);(K`1@ ze1(4Rj&&a)05`vO!{WqO&r1C@o&VTHK9C2gSO%$Ba!Lhn5jmyCp}??wu?$kN3{tV= zl&S#@yd4HQcgTN*l428j8_l|Wq1WSoQ&V5=IM>Do9|bYE`K231cQZ$AyEb+Xyu0C+ zrtgnFVT*#MQP}s4x3S%fcQ3*1hCC*SggDy7IEA;SloTcKK-1;+;S;#)A_SRsUCwcl aSKkj_NOCmLl#h!50000e@OrpfReLx0b_#`oTbZHs3m}z@#qabr1wj=l%enCd*fNd zSvnsKCDr-?z>97o@O2?kuh;kqfk)2LSDURb&m)rJiIq4rg!3(k_Ank7}20Vn~iI7=3j zLlMw3H4CXaVS*7*4Jx`)br=d3GklqGKLbz`$PSRjeln;9erk;gmRo=tvY!@;hDun# zJ}f}O7IO!O@_?C&28xCPzQGE|&qXW{FanB#+BF4LI{0H01?9*xQ@^ruawrE-1K9X~0+cWgNrT1qN{erEIU=rx-mgy^ZoxbdI>QZCe5zvlX1kNSA*+(x5c*cLA u-a|k@pr=exOynbgTF%mTAH%(&j;Sxe?bP-asFF>x!{;#nifD9I>}+U6ET?l-3oaB&xD3qh9&_GRyCmW#yGM?Cs|F%Y0-1 zF!rnzrMeq`UszXUbqWDfz-%lX#vYUcwW!HG0JE;>Yyq;sB=(?#*g9ohaR_9j&;gtHNaolqXWT?O2Nuw zKY{l(%fEn+Myq_6&)%n^XIp>(J^)hzPmZ0S#8Y+O!fKoVbE#WT3)Nuq?=`t2ykbdU zsl9I-(6!O(6L49xW>UeTp{y&04L}0``L=BXYi;7mP}KLX70~MR?O@T70yV++u&qEL z1nj)B-{RX)R3z0Y@x=(31LL+jBn`R)ER0r*CxLpd`2WY@=Zd$n8^uqDK%O!i?Gmk? zvaT55&3#l!&w&1}4R;SLytm)7;sNkb% zNQlW-MwgxleiB{a6$7u@jX?Iq3gPM-pKKnZBm}?pnKbt24%5S5U&@uRaHUS8@ipHCi=}F>OlS$j>wDije?~@LmarPVlDg16Q)& z039hAvq}#97~L2#C1J|nPrLwEMys)P#hmp6Xi($MXw{L=7y@4_?>la5&W%cmse5?E zEN~~kpBt^h(ALA7{1$(e-|(u1sQTwNW?Fci5@O>IUjdRNf6y8C00000NkvXXu0mjf DdqHh- literal 0 HcmV?d00001 diff --git a/Effector.Plugin.FiveLakes/Resources/DoorListPage/MoveDown.png b/Effector.Plugin.FiveLakes/Resources/DoorListPage/MoveDown.png new file mode 100644 index 0000000000000000000000000000000000000000..87691090107d46b7a22b012f3b51b05f0f26e2b6 GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^svyk41|*NpQ(y*CoCO|{#S9GGLLkg|>2BR01_nk6 zPZ!6Kh}O5$4)Qh|@VMIB7CI!gth*3+gTd{EMh}B@Nz1xRyd51bc`sX?rDq;FvT{Mt zz9-BHH~Ak+h+m7E<2!vZqeiO6IwO&A$*$ErM@2c8Zh1My%zvrx|L!GTv+H{APvpCH zOMmvWr8A!$t-JBymq*U5=?6RS@30G5ns=^r^%hB?&2BR0px`f0 z7srr@*0@g<;otlD;nSKIs^_wI?3a9gm|?+Rsa`kj z)0UIJ25|~7Y&pGWN75BGjblxs3yl^;7``#cV*lcIrYoU6z|P->fh9-yC}Uxw=M=IDiU_~(jraJ=56!BFlgz_@Lf ze(S6yjvIMzysv$E_2|z8#t4SV7qh1?OoCFL722WQ%mvv4FO#td)f^7f* literal 0 HcmV?d00001 diff --git a/Effector.Plugin.FiveLakes/Resources/DoorListPage/MultipleCopy.png b/Effector.Plugin.FiveLakes/Resources/DoorListPage/MultipleCopy.png new file mode 100644 index 0000000000000000000000000000000000000000..6be8813454994d1348a1c112b135a4e232e996ae GIT binary patch literal 547 zcmV+;0^I$HP)EfDI@cbOXu;Wdgz^ zgbm6D=>}Nx!MAd-BU!}_@e3k7^uI*O^NT(|zdS$ZY`5ESY`Pfw0_*%-;%Bs~582L! zM9Ml}0S{7lU}?0f_6_G^qTw>Yt9AZ<-!LdrAYQ&Hu!>+?qt*4FLP=$vUja|?_SR^% zX>CP`Zk=BM3n51htc_M*$$bkoNe7mGeQQFE*70`8Sr48 ze=}Mw;V%4Qrv=&qRUy!XkTWKN)w!x&1VvaffKTApFD0kA{nQa`Md8G9+sr&( zR}vtASO{B?t5W|QR9lBcK#9cuV{XU?b%N@v6I5TFp!#a?X=Z>L!r`F-HmPB>NExjf z!tU{7D;qOXqTjyVZ&7oy$^{+W)v|9c?s(bk+9kxCa`{$rO z;qoR~fL4gAHEO4R3Pb1EK-9^*?T+5*o; ltEr^VAMLM8myWWce*=f4kB_*iai9PI002ovPDHLkV1h7D_4)t+ literal 0 HcmV?d00001 diff --git a/Effector.Plugin.FiveLakes/Resources/DoorListPage/NotProduce.png b/Effector.Plugin.FiveLakes/Resources/DoorListPage/NotProduce.png new file mode 100644 index 0000000000000000000000000000000000000000..63f6a8d2a5e52448ad3b35fae5268062fede7e57 GIT binary patch literal 730 zcmV<00ww*4P)EzRa*NGj&$klI*suc+~rU1 z55g7K<1!sC)7gJO{vc!+k2|N(5)^`k1$KPd8IQ17R*%(cwdn46Jo4J)&8-2t%p`*J41L=IzmP{~S zURr%St-_f%R9Wp4;7k3Np1120@p?`Z0xPY;v`g0&=nMOL3=n`kZ`({x>AIk5_wKX` z^D#iRh@D-_z86#-+}S07EUE3CT*fuhO6YpsHhn7wdH$21Ap zbL+XQKtOl*u?-8?gOfm6hOTF@@c!)1lJ;-m5$dZo*Y+hD} zHW5)6YD&UiJ z@3ab1pK*pH&xEFe%w?)F%+yBwIki9WOb3IYvTtv{D#Vx=5^~V{CNEEsDITPvO6VsuR z_VFcXt@`_{#GJn51DIk=HDTL|PMyA-bLx^a z?g;2Fv-F%xI9H!M7~`0KPucVVL64_wk(h`^02Nw=#W{*+L;Xwn1#H3XbK55(Q~&?~ M07*qoM6N<$g29JY8UO$Q literal 0 HcmV?d00001 diff --git a/Effector.Plugin.FiveLakes/Resources/DoorListPage/OpenCsv.png b/Effector.Plugin.FiveLakes/Resources/DoorListPage/OpenCsv.png new file mode 100644 index 0000000000000000000000000000000000000000..c5e35180ad7a97f76d1ead87680d08c1c1d47cf9 GIT binary patch literal 626 zcmV-&0*(ENP)_AKfW(jl!Q3p{v za5@kxh*W{34(JL@%<#aQa=_B0JQ@HF=`j!b7Z4zb{oMWBUEZ8dC#HtmF%GeHvjAp5 zWwbgBJ@3m1gfd_c`~~(hAB4fAfVU*x&fkqONR5swsaRY|#bT1AZbBJd@=oU2@)egj zTU5Z&vp)|d*ceh{*CA`Pn)x<-M)*uuywNqzW0`PMyq7VnUhQjS5mRKl8VJgkgA3rFvgEVPM3QsMrelz=c$iCw5P`Y zjq)M3by;yL3RcaswD?E6b}Reo?e`Cn2SU@6mkqg83^<_UO^wQoR)E7%Dx zyc=K(%yAwDSR1W2wrJk|Ax$l0+!?LP)_@QJ_qFA~&)zdjB)oKmx)ib*&eJ=e z(GaOtN3X&bk-yGu-Q;rlM~o*jp8Nt2 zUQ!`VwKof+RVr&KE@a49;zF9zdBWmCUjZ+@H3J-tR;?^9BIKz;#-**Bl@MCtw9*>g z;6$AQkFwtYb4eLRZw>riDG-+uwp?!ZAB|RPTQ>*XZx(dkcs5$i<%}Ho)qC!~_t9L0 z*Ha?u1oyTU*MAql52ICE?-HEIkGN3&=Derx>*p9E1QV@&lkBJd0bcFG0K21BV*mgE M07*qoM6N<$f>iwz!T2BR01_s75 zPZ!6Kh}Psk|Nq+`PGI(7e#?-Pa3$~vlUPaPC06&7zA3$TIj`|fv1DgzbMrXpuwkW8 zbBlnuBeU7uJ?B6CI2>;A|M7HrULGEvuSX)zoj-igW71-kmK_ozDnBLT_OwQ5D4yvJ zl~tGaQ$E4QviSY4!{t1CXX_ihvHw2f)wIV&D1Wd0{kJ{wd*v-R)srhj;=^Vr9tmp|%WGtwBqN%$ z>PW&uT~F=p2N(nUgdRRi=qSH*AW|nlTA*ag;)y!VKx})5iQPiB^xZe@w%_ON1x+5@ zy*~ei6T3#Skes{h{_kBn%s(qF_zVJG807R>c`S?M*C=4;N|5O}n>gnp``WjijO+^n z*)BgnaNxiLhn9Wpe{5v9J&Ht_C!Xb>ad^TFK9^UvCk`Cgz%cvBf}AJ4R$UPWuQZYl su2|f`y0}kCjOWy@{D8JAFfIeb?uzgiR|{l~fYHL>>FVdQ&MBb@0H1=omjD0& literal 0 HcmV?d00001 diff --git a/Effector.Plugin.FiveLakes/Resources/DoorListPage/ProduceAll.old.png b/Effector.Plugin.FiveLakes/Resources/DoorListPage/ProduceAll.old.png new file mode 100644 index 0000000000000000000000000000000000000000..322244c821fb3cffb62fcb283ed8b337f5dfa6bb GIT binary patch literal 767 zcmVprRB-MfqysuQ z(t%4L9pDPi?f?d6;E(&z5`-dR3*%gNhS9Jf^w^bFtG(;Gj;|)){x^V4zPolP>-HYl z01>bTR+iUZfg`XFd~feM#@(gvE9*7{VgU*q#wdXlhy&j%7K1A5HU@SE%n8U)7RfYy z1ccK5FyNBF_u{Ld#8nw%7rg*!;Cq>^kI{dP`k4n!{R(V8vf3n+d~nb3w+CPw_+EYv zX5w23@KgI%GzDgb5)0)T&`aQZTUQv%cN5_EIk2gakZC~AO8@}`zPAG&<#vVg#Cz$w zZgdq@6Bkv}$(5SVm$-_mNwhIy^ZCeqvg~uzDmw(ew_d_RHYw{i7i*P3sJqd0U(B%V zceer(*-9J8xPxdWy)UY!aCKWzHT$A!wlm$B%6NsY*Da+->eS(ne*u5Wy4{|8(IQE2 zt+H-6y;6sYq%AKAj23YQlbCmsTPsvQspkOA2Ghn1dxZ|wZzawV+YncH$W-W12WhX}T3mo&FhW262&!Lo z(I*1w4^^xq;pQl zuc&!&ws0Xou|s92y_{V@F13UwQ!T(bDziAEwu}(9RYiTztuJL%w8r@gJ6-(;0nQ?rs18002ovPDHLkV1izOU26aU literal 0 HcmV?d00001 diff --git a/Effector.Plugin.FiveLakes/Resources/DoorListPage/ProduceAll.png b/Effector.Plugin.FiveLakes/Resources/DoorListPage/ProduceAll.png new file mode 100644 index 0000000000000000000000000000000000000000..ebd13b77c42be1db463fb6bbf1aaf4fa976b93f5 GIT binary patch literal 390 zcmV;10eSw3P)T!Lm;Oht=F?A2fy>q=*jbwJnOoSTjTD(1+Fnkr7}sSk}Rbm)*9kT zLu@p}hntWBR)7F&;HV)kix`n#J^^+bVrA%ZVMtF2u+b1}BbN&njs9lcXI9g<=3Gt_ zG0T;(z-R!h_mlviLkFPL^4w^MAGyILH~O=NxXtOa(r4z8^8n2I1dVa~7Qnub*jNWy zfGYLzSW*f!sgK8yIskL=?wA@-TB-$B;@zoF(0w5pfOqk(&Iv3brNE1L*W@O!mihvo z#Jl~FB$iSKGWzElR#L5aR~h9pnZ8#`AsF_h6sW|zt(D9#xl$$#{TF@8xBHQ4fn_Nn kfZ6mbD3M7jl}Rd2BR0pkSh> zi(^Pc>)RWOTn7wz94@AY_=uGKPZra9wu!ss!`X}@^+u-i9ek9H`?Jp7Wz=>HbPIg@ zI`Pc&@0<7h7F}I=(pSOe{bmMe%{LF5X; zRA8k8sROBkP#w?}gq-1lH|4Mki*{%NkTsSL{uhc^K>NA-vA|yJc00}upF<{9bu$D8 zFNOIu~f{FP^9UDQ!-kTH%v9xbO(C&K$Lm+#_wgzTBYg6_+^gq0X)EFp%MTc#w_Ji;i zQXo6?7`yWsPN69;K1hY)EJ+aS%(Y0!BzFNCW1VNIfcuAQnq%t&Z{t zC)Y?V`yT2fR#Q0=p_p_GkPivQSqlAwR49C;qVCoaDEf@Oq-r|`Fif)-=5z=B!fjMy58r}dCP4D}X(&+qY53w(t8=IKXDM&5ZUu&;yVu}~d z={2&GCdipM0G7yclp+xZ$ZTSkRo!IB0Zrcr`7|}u=cct|GWJ`#L>h#4mpn$(3w+hF zLdi~%NN@U_`baq)JqcSy{`6kejq6%|tMie*4}g`D9H|ss>X&^^Lo0fppdG;*Boa9= z)yO*Mmuhq9CFRqUGp=l6COS4@-_y;I=wwK`TqG(a^(FAPHD-aWO^lO8Cw!4w>2qAw z&0Go15v@32BR0px}H@ z7srr@*0(p#avpLJaeXK(-7z;qbDF`+13_;Ni0Qame>|v@W}df6!tJ2+LHQ?j0u>Kg zixR?424p|IzGk27hmOS|eL=c?T`@sVf}X#Y*|}!-U$df}X6Kh|cV|4Fc8}qA-hSp| z&+K$-57x`vSGVwbsxcL$!xEWsRXZ@)IKIJoyFH`f`GbGeZv;2jvv$fXEt>L*jXBvM U$+U5e3DBtwp00i_>zopr0KpqtuK)l5 literal 0 HcmV?d00001 diff --git a/Effector.Plugin.FiveLakes/Resources/DoorListPage/Verify.png b/Effector.Plugin.FiveLakes/Resources/DoorListPage/Verify.png new file mode 100644 index 0000000000000000000000000000000000000000..e1305e8efa3b794b68ff9c58c7478c7f3b15275c GIT binary patch literal 668 zcmV;N0%QG&P)y%kd>_~qNyS&Awf}WA(%4=90()^ zf8lZs5`n;>&LL_rgkDHMoaZ({H8pi0H_RpL4zb^E_GV}Qcgyjr{h68X$+zFkygP&S zdd;?J=U)T3bfZb9z=UJq7}x`j98G-S7qIZOdQ*4&LDkO}m~bDM0#ATpjTkH7448OY zU3CT(nD9OD4A3=TY#CtYY4x%dlw{``WQzEsS+^?rHTX73&M|P;OVAR!K5;QjNwv0?jO-ec(>&{ZQg>LRpQv z)Wp;3xdk)_cCB{DE~tZ^fKDAiuH|MgzDQ~+Fk#omstynUo>l`W_frOVMKoi6v;cZs z29#ErpZe};^-iwuS~JF_KfqfD&`02A6(A_j)V=hL%%JlEpr>ttszB`qCS0U9&K$59 z=yO{j8_LgVb02F*x4^mrO5&%XE(NtPA;%h3+OfQp#c!U zBED#{_c>jo08QOpO6A`BL}wKSh%=UK3oU^%aohN*74Q{M6t7)nD)v+IVpegmAuwtQ z1d)T-Ccq$@{54r ze>_XDz_#nu#Q``b^7IGfpHE!^%U;i?u2Wliy!aOfXC9mfXqkNg0000GlRYr^W6XI+&j)bYj2Ee&?}1LF+z-+dBu%4xBt4% zT89wN*AhZay7tBknk~7c{sTh1u$23I-8rE5z^Jv?G#6rGbs=1v?;P@Qva3&(UxgYp zhwF9v4ZM56Ki)cW6UW~P5mfu`-VY7rd?d%y*aqI+|IvOw4*M!Yh)G9;ys!T~eS6>K z-aF`ep=2+vx4efFq3eSuaXgvhTK5ciI4gSTq-Qwh{gKV@?>qQ`p}qSL7b?mtMAPX0 z58l~3a`^qzglbQn1FH|{oi)&Tb1>ICC-Z#r1HA|IRk?lN<2X|Yaio-e>I#EA{6LFi9q?bd|OD>L^T)EsAXKh-%ds+{$6Wb z$KM-_8~A&VaUXw=8ON-r?Pqm4!6HdC60$?bt8Nm3NQ1>Rt$U=VgL7Ik8V=s2_<)HPB4qeetcjG7g-DC(zZ5gi|0 zJ-S(RtLST@Z;HMzdSLX}=<(4DqSr^4#Kgw5jOiNFGiH9wPqBfqEo1MB9UJ>r?Almw zTy$KkxbAVI;%3Dyj9V7>UHm5rGpjsTWnz^{Ri;&$RpqTJ3#$B3wO`dS)#9tQs@A>Q zuxf>gp^4FnV-lw%E=~Nox}*A}8i6&UYiv#GoYX66bkdxpwMm|uZEDW1xvr+S<}bmC`ch>y&k=O;cN@c1=By>P-tztCH3}t!vugw25hx(w3xcOxs#3yjEUAJr9$Lfx$*STI+y$SWa^NRN7uvWvt4S#6(OQR}{IyV~FXi}q@joxYWb)!9vjx_Q$j%{46adP99 zjk`7;+<0N*b&U%e7d8oOlGG%#NuMUenv8DpOp^&sCO7%4Np6$hFG#+i{RN9I*nGk9 zrq!BeHtpFo>%w*yc4`*hY+$n?%~qvHr}s)B#+v~jh$sm8kcE+uziFb^E-_Zn^B?%iJ9t9jbLm?$EMB+YUE$=-T0d4i9&DuEWF* zb34rMu(HF~9e(bRce(5GdY4~w`M}F3UB2Yr9Y5)~wWIHfjuhYa%3$Dz(vgeiF&f%S#cW%=;vvbGJS9QLjbJxy2JCEr+q4PgF&+WXv zv%B-JU4pwb?b5Q#Rb6iBa!;2DUFKj--9<>*-|8aO{7T$v7K!fWPI&Y2?&AJk#vt>M;Wdv6r?}EAq`n6z*GsvFDA$XBxY=}b&kB6f3K1uF zi8$(-M_u<(*F5UDmpbmDq`dRELsHT~5yM-)gd^E-Vv*coZh;G*sxb3IRoC388k%3j zk(s<98!qIjh30qaL-3jTt@_+7G9EDt;Dj4a+#&x;w^K6_{@9*PA#B}Z{!Q+2>G&kx13@=O<8^6-V8a@ zyidMizAa~&56RhPPs)E&ZWR%5HBbI*&g5MW%f03(IQ*gfr#W2y#{Mz$Q59kihvOsR z_+&W#lWJo=q1v+FiSt*PAE_HG2@F&H%wfoR3VPHZX}GEP{Yc~`B=Vm61bzKfL?D?L zkxU8nypIe%MFyWDgHMscr^Z2ZDRL-=|HWw8Ax$qD5JX!SD>6kCbng+pkli425zlVp z*=;<#jc2!6cSUelD0dy?u5j-9mb>y(sMUHo9$TA04PG!;%ZVb48tzAen~`7v68sDa?x&{T zBEbS``xCWYV_a-*g3foLGY2}qh0br`#Vy-2ti=^lpaVx)E$sqKf#O~S>S4_I&AMePdBgWTcaibqI}jtZkpKG7C+ zfn|3e;MxJo^ipOqPaLGoqt;VrF3%8GiU=$r3hx*t0yqk@>|u%sfddER3=xWsevKX$ z6YuE1XTRsK_pJYYsYz`%`B-`oEJ?_%EgZ zsd=JPW9Z6fbQbB{`JumI)P2@0$ltHN=gv0$8F&2M;zc{3|JT>*^l{do(Q2MwTlV+U zzrS7v6{9H^lII;jwspK1P`X?U_YD`%_?D96ZAgx{3mMqnWHVnNzZ)T6_7#xVttqGa z_K`2`C};W(kzws7XZcFyY~MCA^EZ&0can+zg3SDta+l9XWOExU!^zCYkeLr4 zGapWlHHutlTk@>)$;`)*nQu#GKAfEEePrgZB!eAFW}I=jW%z=Pu{ZjmH0a4xgLCbKfBuF9|!( z@xk*O&r;aLN=l9VKQyNG_w$&@l@Y6d|HznR45#Eg##H~79Aez{>=`wMAJ;zIBZA9D z@!X8y9b^P=znsi?;}pgiXPA2#!CS{T+z*W2ZO6aAWO~s52(B`^W#;OUNa13{a6eZH zwPkR{!pwynqv6|)XmnTkmsz|>05!*pABI~!Vk2D z-_ZK)qvhL6YqyHI2D_PK@Pjqd_yJ?JpE5(>GxHnqpV2O#+e4rG4!cJb1oyszd*8#g zb#N`8*kC7|+raD$4_uoG*EWdryDN~gzM-t0Na7HZ(4)gUDQ|z-c<-)1c?L%evC#rz zqiEuyU5p05M_ja-m}n>Q&_?2+UBp7`h=Xbsix_A>G0@M9;{U{~gfEDB zb`tYMorgF2-)O71nr=9{zDzm=NG2c296~Z~B(uKK{GI;{%?@GKMXa7<#EhXB%Zl$p zX7^ytPa?PXk<|yt?o+nR967_>qkn(< z7dM|@ly~Y##s8fg+@I^M{{1@sXXs97*?dK}+-4rZqNDL;`S`MYEPEfGSo9g)LzeBI?4?1 zUBn!9nfvI3vRJMk;@TmoI>dEmta0XO+1w;2_Z=i|I!N5KpSbBDanr%`h=a~NrW;}9 z0__=49@UUpXbYLg`Jo6ouL$kz@#~r2YR|NCmC@^!$9V5m%|W09h0a3rGkCWRj&A3Qo}+n)n7~WUp@cg=JC8fgQYYk4+#>GCg-l}x$pSvV}!HMMEkqd=k)o(Q)hhsRa$X= zJ?C?0L(hH3nIoh>x7T@gPxPPquK$dvtRl*+*!!z2;qT@t&h2Z@Z;sHPdDq{KNB^zQ z|6i@&f93UGd7b^Y-v8y#fBEx2`BuQ$_2+ES_kY5*bH@zlzT?m85&X9t{VVh{&ujU+ z@#ow|9%;rv-kV{Ti^fbcNzY(_1Q zzR=>~3oUE-w#8Py(6U@8jtV(q%#|_Fjlyxtcxy0Uyolngm$C{etBA6^l=XR8S&Mo4 zN6K0xoRn~wD}|J)zdz#P>;X#jFnY^ZFSxImGyAMFCDuK>motST=)A^Xbq$NGx2!3n z%}af}x<1e`$jsIA=`0HTU+1t#jCJWNc;bY!+#A8%yGWzRntvCm%VnmXO=m^9`kg-t zdBF|(OI^(EOBO?nEThEH)iK4n#I?ZnT|jui5fLX^^SzQbe5<6bh!?Mmc-fK>-BxVd zfP2A6@RW#G$s$&zf^O{h0AGn{l?~R2Xd_X?8#O>pkU}{tM1&bHqCgE$%gh!X%%4R^ z#=x%toj_-B1Gouvh1cE80&yD{&Am^8G2kgM7Ca4R@%(Hs2fPX9f_dO=o_`0t3+99O zz#{N5_yjBlOTg#6V=4FoECb7V*Oy==Wq(CEtJr3tf$JUF@5C35uH?Hvce3pd z9t1J*U=l)m0YwS-0)4}UpdlSrMe;(VVJd;Z~)JGlwhd>d}c-bBYrOeP1 zAeea=(R|aUCi^Mur-9n+*9VOOGEujH?wo&|`-U+CYdG5xY?;fT#sKQ3nB%Jc0VV-F zqM8O~0OX*MgIWOKy;{z*D|q%Bwrkmb%l13AIc(Rl{hsZ5wj0=PWV?y&4{U#AyP544 zwp-b5WBU`^?QEe_?O^*e+nsE8vE9SF@_-u@0C=E0K!3Le9;jcyui$q8Ka>y4h98Ck z4&VZTAQ*&#aK3RB38FzPhzC_bHBg}!h5Rn=7qfZ5N}=2Ti5f}g}ikkZ(PqC*Yn2pym38mT+bU9 z^2UX{aUpL!#2XLs#)Z6bA#YsI8`ty3g}h}wZ&}Y<*7KJ2%-e5__iF{Ff@xqnm;rua z_HqNz2s8mrK{L=CEW*Qvfe7xqg4ukLe1k9&zfgc*D8Mfi;1>$;2?f}70d`%0T^C^2 z1=w`~Hd%m87GRSF*kl1VS%6IzV3P&dWC1o=fK3))lLgph0XA8HO%`B>+SUr>^~|Xr z%XS<kz!47|@xT!e9Pz*r4;=Bp5f2>kz!47|@xT!e z9Pz*r4;=Bp5f2>kz!47|@xT!e9Pz*r4;=Bp5f2>kz!47|@xT!e9Pz*r4;=Bp5f2>U zYgDuwV`w+V&~A*urp91XW3Z_)*wh$H=RD|~2c7eva~^cggU)%-IS)GLLFYW^oClrr zpmQE{&V$Z*&^Zq}=b^2uV;&X_Kr_%BJPZB-UICN9t6(yi0=@=o!FOOC_!;a1dq5sv z$qNUOAR5Gi%fMCO9`F!&4DdBANf|PSuWE&YBv1=b4^4r)-RJx(k4V7-FbVH>ZD&0`&hDtY7x}nkym2RkXL!}!k-B9U4r)-RJx(k4V7-FbVH>ZD&0`&hDtY7x}nky zm2M&Hyktc-HAN?xDpxqVyOLcc0R=$|f_8;;4;ddC9Oen{8PO=JO_V3*npg+l@Z1$Q zE51s6gZP^g=2k7J7Mz%zI3w|E(USNiPh3O<*_JP!jb@*(2@-$g5r5P?rOBIZ&4abvaO%17$f-mIGxuP?Q5jIZ%@W zH91g|0|hzMJcnB5P|F-@mqYDxs9g@V%b|8T)GmkG(=4OFC;PG;a4R;V5?j|YU@=$%KIgfm;0v$}Ea&+z!8bhfEyw}igAL$Eumx-b+rbX7 z6YK_i!9ISSN$FhBfXP;w#9Q)664SOf9+f7`z84sL`2hJs~+accsb2&GU?N08YE>ioPeZUP0 zzgYifIt3@@7DMJv2$ zLM~d6ix%Xf1zxnkixzm1x)-T?k$NtY_9AI7lJ+89FOtngvbjh$7ioHtrWa{?k){_( zdXc0TNqUi_7fE`Nq!&qgk)#)Cd6AYEX?c;97fBT%sUjp*grtg)R1uOYLQ+LYDi=xR zBB@*?m1{KTtF0|S251FZgG)hsWY-)i&P0kckytSj%SK|^NT(R-6eFEtq*IJ^vXM?U z94>~##c;S74j04WVmMq3hqK{sG2ERAXN%!#HeAhyo5gUm7;YBB#ca5i4cD^aS~eWY zh9lWq$VVUY(T9BWAs>CnM<4RhhkW!QAAQJ2AM(+M zeDon7eaJ^2^3jKU^dVncBXf#_K}X{G%Kd~J=*R26LN~G-w}I3385VKR$KVsN7%TzH zx%W%(ul6S*=xaxT7@+$Wt@+)f-Mt>Yw0K58zV|;8PE% ztx??>MIk@tS&{IBM6 z_9N&0$az05W; z3PDyO$STB=RSB{xK~^Qmssve;AgdB&Rf4QakW~q?DnV8y$f`ut#J?Uv!X^0FBRqK+ zzj_3}dIbM@gi;Pu%3(@5jQ>1>|2$%qR>W497|btiQa~EerFUmr`3+Mzo(5(B-iFUS zg3mmH&pd+9JR-92^lS0-Ysq|UB=hkD(fkoBn!k?UvR)5v1l{N}^q@VyjjfL6KjPeS z_P?ax;^K?zfgl)!fLcWBb%2iYTXS7U`q!Ilttj7)?2lNH{WIMAJl9`jOP`8t%0{^u z@OvO4{v&c7``@#_f&EQHW;?lW5AAOr+kLR24rm~&Jb~@V`Y+tt` zyA4Ek8;I;S(38;;DYh64cVu5mgaVD?&=kkkT?FRD=|YkU$XFt%E6ZzD@O%2@WKp{F%LQUN0Kp{F%f({fQ|6=4@jNI~(Sw6DT zHdRdR+|>=Y}xXBAitzUJIo@EuqOeg?Y$c`-5x1!NKm$RreyNhlzb zPyi=)!O2~4awnYJDKFz(CvtRGvAvV+J#6pge1G;I1P^gMgzaN&M{@otuz=?ma{Mvp z7qh>V?HWKm$VL>v{au#j<#X;Zzbq!_NQQ#^H(TO~h1>(&!M?VZK5Pe4&LE&IWhlpwvp*cX$TKek_-0wfOs;*z`NbT6!FCx~ z4!!~3f*kNY*Z?+xAHf!|4QvNHz)o-0|MMjSUB)w)`AIL5^dgO7q*07Cyhy_f=e=;*i(YGA=Y`Y7@?-vog2ik< z!;@?Owua+%9DmO-J`QdkftyDx|I-EiycKjK&hG(k=lmTUYacU^-&AU!@)|w8sbD(L zzTzX!f5FIFBK?3Gpe9J6AJi57jVQB7x44M0vbI>~XwE$e#(<~5SnxD>oog%Et^%w1 z21SL%YESM)$0E?L2q<);TM_711bP(#wQl)@2!~qj$=&EwxNXU_`AfOJlH)bNvS`k2 zV1E;5su3O#CIoqQ5p+8tP#{Wx<2j75iK@RvHYyg|Uk6;Vf2DXD8U?<~; ziIykUURZlzw`dG^_o5H`;H=Je<-xVR=)+$0ArG$U3|Af;%0nOa!J#}jv=@EY2Z#2e z5Bt%FedxnJxU(01*pEKI8KOuhxRjcA;n$(Jf^KB1dVt$GcL&G)*$xDQxbJDUL{;d- zesp3#Ipb)#k6PzZ>paFZGx&bZMbxI2xrf^Bp?11vd#G6+HQQ5G zvpi~+N6q$>)hv&i9i(OlshJ*O*+b3tP@_C*w1*nyQKLL+bdVb5om8VdYLrKf@~F{4 z#yT_jON0Z@4pWPR)Z!pKI}Fbb!?VNi>@fT~Osx)5ql47qAa6X#8xO*Z!|>uTZ#@WY zhoS8-v>k@F!=fqqup*+DBBGZfS|2YFOA(Pu5s^v}kxCJfN)h>_BBGBXB8wtg7B7)S z5s^g^kwp=aMG=uj5s^g^kwp=$j+dySh^V57sG^9dqKK%XNSd^PluJ}mq=G<8&>o8= zt3c#XMC4FJOXQ{X@e&yn5g8N_6%^3|d5H*$hzN?*EHDSm1#fYFC3UVrTvkF{Rzk~t zl$QG_E%#Ac?xV6bxSsa#dA6?tM$>7jkJ3^frKLWqx`QcT8km7Us1A}qGDro@i2_@I z4A2U+2DGEZ3MKq<`!LZ+A21Zmq$d$fJ&sZj{Z9StQJy`@vqyRMD9;|{*`qvrRNO>g z%}8}9uUt%Dwt#J5 zJJA1E>dC zR-FMTJWU3mklah5S^$=SWjw!vXV-%7z&fxVYy>}m&0s6|2~dAV*S(Ca>l|JoIh#V| z1_j^%V73f7n?iCnh3Ci|6q3&=B%f1AHdbd23QvQ zdG?+tTUzMa@aJS%_MzS5|8s(hy(h>~%Wx*=(D4)H#=Yl|0loYRKEvbkKDpQGlUMGK zSMzbqxC)W!v96dz5Mkr#7)*><`IzyW>QtU=D$a88Cf`K zDSPJuW{T+R2h9WK6!KN)vH0J4?pulN$`{%~7Fy<07W+!&)8@D45_6b2!lFr-(}|@c z%{TZTq9yxz3s7;}b72s9;v`?lHFPt_TdKA~@^$!MLw1a$Mf7IM^Q zT$tJwArfI!5p8`k? z&0-;=P_~rG(9+(r+FIIMb~()6+E@I~=q=eI@}77COZt`$TD9boUE4R&z5(2WcAC$c zQ~3L$%}4f%{UzDD>p%J<+w+yNzf65UQ7cP@O;^;ze^=$Y`Oj6-E9-gx`9HEHKKet8 zu9^Kzg$9!~7rj)PYn}f-%)E0G^EmBX^7Y)e{H5N_81@u2J6wSzkHWwM9 z6?2N(kauaz7-R?HtxkN6>IQM6xS7bk2V-xe$-|5x2Q!xZ%d_G+F;0vZ&x;A-1>*k~ z#Y^I4@elEem?T~mlf_gqO-vUvm}@*s%ocORo6H26C*Be7iuvL_u}FL@J`sz>5=QA( zFiN*ld_^87n>@}M@wHehz7y-jda+UbAbu2^#TKzuY!g3;?Sfew!YvL6k0=ygQ6hd3 zzlvj`RG3mqrwoumGF(Q;NEs!gWsFRaRb`^ACF{s~vVm+Qo5-fJnQSgw%2u+qY$Gp{ z7t2dzCwZm3UfwDD%6{^0d5^qT_Ll?X1M)#RP!5uVMQa*6y*elC~FFXS@0T&|E`%9Zjfxk|2WUkyHf0jGtF1cIok#2cFdL%s#>6OK@L>`sD$Y14e@^^V$mP%7Ol}iPya7D&S z)l|tUMWw1V)ka;U+Nz7yrK-KUTwS5AR9)27>SlGT>ZZD@9_n`0Q{Auns{!g^m8Bk2 zkE>y7xEi6JP@~ltHC8>Xo>4EVm((ORS-qyFsHtk2nyzN3H`FXOSItvzspV>g`ci$R zveg>(jasX|Ro|%`wN8Dn)~gL_quQi?P(P~8YKz*cwyB@gc9pAkDCYR8U23=5qxPyi zwNJSfW5;U0I-r>0s}89`RiwPCSTSEt{i6Pt zsBY9Sl8l;0vXNq>8fivzqlJ-Sv@%*7m-4?^4>I&T`QgS0W3;i|U}nB?$l!MdhSw-& z_Ixn^b8iT1ee9xzXonqK!~a;>6ZsG4N=;-xx=h}a%j7&u&PK|Mk?0B}`J*MP?Ut-| z$-T&_(2~yYN~p$s)$ECrEb>%)Jk=UIVvk+Kb>jLHZ1VO$!7AS_x66;tVVU1xo8Mxc zIoRj-XR*-yGuo&ND-Fa>gJsAcwAHp)Ydh>U^AB09wpVSfPgs`v43_#LHmWVuw#>?Q z>9(O+bFo5ggW3WQm06%|egBH>-ExBU_4`xoZ{^?F0HYCV|F881)}$AVi&5<$+B&^wV88a_;%pfGnQ$U`JK8V1z?X~T_+5-3zpIx7>#x0+ zAgXXph-zi$sCb??{7 zd$jbFMY)!y%}=e7E=zuPe@vChvO@E;T=Y_LM$1dU6JhD2zINiGulN_OLBj5TTlEU% z7b;1d(fp6LYEe-`T?1XOAnQ(DTmAbn2ldlEsBr6=zOJ9w(2LEbK=$IXh7%XNhT596 zepOthpGuZW+me1tTbh2}ztrTKz4$3lDnH}D=j3e_thuU%ldqiZI1au9mhnc@XV*}3 zrZP0el^1OlTElD&s(7yAo(f5+@>2a*{iW%xhTr0B%d-7W{3%cAr?myxi_O<)DE332 z*R=ww%R$0YV?8U$xTh~u5|HSjUJ+WIK|F)uq(C0O( z;`vpQ z`&%WO78i8r)%IT1@W}qvPlcwXV$n4CSAAB;)OxkGBZ{Z}aPnMbRB%I=cOoj^r}xjb zR7m9XcWTYEVe6oiI#=Mt@~a|^%J8>ox?~rWoetW+Xn(3@A6gFmgk5{xDri2~XSBX( ziC1W&b>XysDxw)@nM~|6`mgrHwr2Y8vX68@T7FiZ%-Yu!YRW?_UTWFs#pZ>*ug}^3 z#+I)?veH*WxKjDpZsYy$s*aV}XKX*?uZw=tUjyAH>BW9V=PI;E(pUYhs=jJ3HkWkW z;;gpBj&B^)*0vYhVw82&jw5V3^k4fao7##NNaUL~u4`?wkL`1I>2X%%WNVP-OT2X)VYS%S1C{>xOVx3) zza;xkU83LG><2U_Z1|tD&+9v@K#8^jZI!m2)V(jVf}>lW7eNo7qNcC`XTEFtP5G+XI;QLpY>hVcUa$MeT#J- z>s;ea);X-RS!c1n!8()mb=DcI(^;pnPGz0K`WowG)>m04vA)83KkLh^FR{MJx|MYz z>kF(CSf6Jd&pM9vIo4-cpD~_h9n1O@>jq;3k{k^Jfy1~9310=G$=hCxbUTRKX(2|F zd2LSabut<=mE3A)@djDdYsK4SQg0ETlTGbMHuYO^Klz#6Vu;8S`Q&L2kSU!&uJkuD zv&W>Z0WX+-GE~RZ`4b5 zj@VOm1Q|jV7f$R%$I3b@py#}YVY`fR;(?;E!dR=F z(Ea49a5s@!)S$0ZQzVNNkt)(o$eA}dZPvU6zbrj5SJzHlA~MCLqP@7x%A$AVH}E=> z-kI#(RpM$giPx5A@oplwev7!3nUCGbFX|lo?ffF*4$({Wh9o=BK90QlWHRZq$)wLA zi~c4Of15n|J60zBeX&3+6d#C>$fz$Or@n-&`cgFE3$e_&NDLNtiN4}q<6>sdzaa*S z`;F_-iu;T^#4}=wahrI^=wiyUU_4_7&!da>SiuBqoIo&MphpR&io@~-*;NdZH_4mjE#fiRP2MVR6b{uDF1#d0 zAwwMv1R*`0%X^8u`a&|^rmCtk)KV+QyhHJ8X~Qsr$o-~aVdJslb@-*tj|B$;$c z(o;#l)x0`6BsnfQDLFN{PIA-a^yD_lZIe4BKb$-=c~0`Y|%m(Tt9M8}(ZJ(L}PIp;#lGN!qb&?K)c@lfgmF7ZowmHeX)x5@RX;$^U;u~N3mT#EvZeI^yci+vv z>wFiN?kLSI-Cp`r>DJO8OXruqo3}jg$-K+*>hImWx7OYod#mqF+*@^Tc4vR?@>X8pBAza?VLfYb75w1fXnGH6b*Vn!!8Ra zUe`5K_g|#$(n}c-k8_|UOXRoGX;JAhX)V%a^3b876DG)?jg7xwH%~`< z6O2tNoO1QA<(g&&hXe-(I2}rsms>T+rJFk`<9M6(27@ut0FhwmVvV$n7U>B_S`0N{rs%pb|5ao%wm?eXipBas&H`OMUsNj0h`R;yYiAwDiPCORrI zB0MZKBseJ0Pg7(WO}Q&M6hx=h>;V60+iDk93MuN z0%d|TF|&a_qc0myhfp<6_i)+Gj&7QO6zZPV0`Cmc4UP1;G{AX|Qq)f0nyc@++LVzu z`u5BE*WPulY{Q>@|Gd%k61e-)cF<*H2ElU4Gh&|Bcx~FW(inbMBw=Q%fqt z%%%>f>v=}T=VV4UYEZ9kt+dpXxR|KOkl=uFTEn|$W`+hqXoQrij&wPbrQvYI@n1qY zm2}n@PM31J>JmXYjATkh8vLsvTrP)%u?|PLBOxF$^OEx_!f14+5-g@PuT!^)Y|*?W zvW-h(+&is#owQU}Tx@(ol8lRW1;nMbXu^P5dTe}pvzEs56F*u1_1E+Jz5k`52F-lo zA5)%Lxo*w(3;TUsPP$-5sIe`)*A-k$Yc_}aCRdzL$2{%p$7!Q(P7Up#N_ z>WF1uglyR4`e52rs)QCkU>GoxFiH)&M2c5+hHgy_hSAcqR{ zYkjMWq%vAdSAdE`&m@YgdEyWOE=PdgGj#B$lOAF5aLTFooz8G)LIARlY2GruS$qu{ z>q<+l)50d^Vri2q&vMOKS0+3#ebmV5(?&coqt~6cb?e=yd-prlFiy>w&Z*vg>{ES8 z&CY5~XUF7`3l@yLdc=G0jp#aTSl6q&ju_GPc+Q9g3r1Ws^1b&)b{jUV+ciBNd%U}+ zsbg?c%>#qk`Uf4K!h=+1QCuuu&5W*<*0xPr(^^eyBvwg?jtX#AXiZSp%+}2tgfVU1 zS*L1TxWggggwt6;HOd6lhQt-byQBjSl^rRqE*a-~w#GHM3m(4q-IPl%{h-Z-_x9}fppkgjo43xG zKkM=Cqc45TSM!R6ca7R|>sIIU*W9%E!>ljwD$VS4ncU+HaMbEKIdj-NN8|Prt{c<1 zPpfP18Ljy$@pV7Zu|ZYP^hp z*H!Jsty^EL=6cWPQCG?PRc0S~<=v$vzK>&lAD5Qg-|;ThTs{m9(Y_01iS^z~GF{Q>7c{akcv_PBQZ1Tq_e4pCBI04tXf7#wTM)8Gt&9so-FZs=DVs*+_qzU zHP<^bUR_LZ_uX9``>AMoRjj;H#r5mhr*wty6^idBUp2xVZRqvX%XBy$e)=;L%AL7x zp2Dp7Iv6%+XIneNX(Sl66R^L!0d?iQK5w#&47|r715a0N{hnTN2RMF@^jzikNU2WA3mz`2KtiZo`G_sr2sejd@_RGj+2)5L_JCJ>xtbK zR)g0(frHT->lL-_#xUZ(8!jIj?eoY4T3LO0G_zyYtJksa2AM9+8o%5!6ZFIUJE<_M zeWj*qed&kl8r7z+T@J;`ru5egk#bTw;pLT~TWT>pMYs4(pM7=?#V46hssrf0A!?rV z9C?4qv@KL#T2CdU$@FmpRImQSU5)iSm3WBX7acG2$;2LhFI*lYR3p%U5!!6{U7XN?u*>x>T*pHW%j(Lhk8-xCtzORZ z&669PS2pO?Q9nP1SR{hytBK1qL#tJdjtmP84rIW_uSt!ZX;zviX-Cqb8_dXJ}-=)_SQh<^nUyK)(Ow~ zhA6e;Hg&T&Hz_{(^Vg$1W#DaU}XX-2MmGQDx0-D zwf0s!pO#w7-^g=EL)k*reSOa4SH>@anB&V=?j1g0#M8fIf9l)oR0CJPHhKQyx5gSt zGlq|zGw&(aJ9{=R>%XvJy-%L{YRC5FuBR8h^}>`_`=Lvn;D0817)-Y0;>>Uz`1#|$ za%)Zvga3hOl!~LtuCQl^gV44jrX^Cdj9I43l&HD^#%+0dLrd>eFFslNn2KwjN`{^8|@U6cD4NZ1(d_Z`)i7>nUOUT6XIf`Bf^3LbTI92RWmPg;+|^?<#0tw z)GAK!gv&t;Msn1lTspAu+r6MhPG_Z-5soHG+>FsqX0${T(EU1**I_KI%Z zb^Xb)QU5BI{?>(p`09yLq@^U*tzI`SCL%1*C9274<zn!>-}0mHciF%vpDU3qO9zka zbJaJ+Kg?SAB{J!OPUt>JsA!xSs5OGh`n9|Ytd_C-v0b@>-{ip0v zE9%$#V900Rd~^KyXBRAZ_Jw!eH98G{{k12bm`qJj{#;()rM0n`QI+5g14rdj7 zMFKr4BMyx~0-8Rnz0_nX6-K-V!}Ng_?`b+~H*0w@nO*J5ZBHH*E70w_8A(!yd1XE% zHeR`AE^G0@{i}<9U%Jlc`)yN~*E+?wAK7Q*f?A7Seg4CF*Zr{Uhi<)Oz@{H%RbR<( zzB-3|N0MvyPEJ(Oqk4{8xpB|jnLp}r3ag!S@YMk#EWEt_YxEaEA4s{x=)W+mp}uD< z?R0zYsmoPq^q0(lNhfpmf$-l0Wmk*G$cV2epB9j*L;yjN42VmRak%X`ncBa<>UTWb zxJb3H?yBxPGD1GyTRt{I^Yj%tm+^#m(V76!>NNfB6w1~d(s2g*Lg%y^yt0*4Z_45g zA`NuY*m8WC(O$#2^uE$#_wnp7F^JKOHI?cWqifVcX0)g~%((jaM=Gm-f8(mhePet3 zo*E{j6J2_yfg;N*j82xUlf<=|WG{7Rns-;TTe5N=)-)WET7e*4AfvuZ8ctz2>*_N6 zGREv_%yi!|kiMffdwiC^Eh986Z_9|@t>nR@vcc{B?|f#&5ZtOVHqZU&+ov9Dml!#2 zocza=ci%kl)rUuofA$gAo6FYDe|p2<7Ps~C^`BzZ`EK7ut^((HkuENi(V11+XSQnD ztZAbLwbN?WsG1NP6B!;H=ujbL7T;xIjjowjv}@xs97esm%0(j}j9^BWXo!^vHdL^! zs049lrN8kiat<({Ri zz{Je!bvZ$mY84c01l1=JIHepB6jZ57XRKdvH!Bc#=|;ltHD$CUO2YZ38!qi*GonRG zGWsP_*iXRvl0}SlO4^s(%8VGxPrJ4RZ(euJy-_Wu^?UM}m;}#TJqKT|jAp^tWlVT8 zB-*#oH_7*f@3yEIW}si+by2&Tnd|QGjq&x0iDpXiQ2Dfc_Sllhn|j^yd~v=>Z)Lw8y?T4IeKNg8hALe-rq^$4n3Vp$ufA`T?>tEv61Bl$)oFQ_r3G*DZPW9=v(}71l5eHtLrc0-E?5N!! zB$a70MWz{xN}qUnm`WI=VuqE*t7blrOHT6L=Un*vb&7lmuf<|N+n1@a)4LdJjy5|h@BP)m=ptat;(qM@{^qa9&-REizq z*+G)zP`8D3(`u*K#*^}ye0#6&@q32#1G(ye}3EN*Ka#Sn{I7M>7~(-w63M0ztvS!PF(13~Lr zws5?u9KKx#4*NFC28R#H8V)sZ%NNV@^Ot|IMXqserfI)JCLCg5ulMiUT??~)Tl0$! z__nQBto@Sa`Ook?h!Fgu%;;do+Ja+(qr*Zt6KIg3DT`XGI~h$mnY%PUeqqDiWI@+h zq-e$p5;7v~Gk(z!B5(K2_8s*tl^wRqD!%+J&V{~dzWty3_WPzgJ0DAwP4buJ$tI90 zt-92vE+OKQGiY5c8h0Ue$gLZ9oVRZ15O#T(LEhA!Z0m-mirbR${Zlo^>!8ns%Ln5c+woe?Y7jEpceqdKvxtr~PS zUG*8}auUK?P1RYHqqd6}MpTt2=tf+Wr5hQ#8FOSe^_6BH^R19Ae>sG08V{^rzRLUi zH?OU%^b4mwVgA@)0Wrvt_f-l1=&4=2tYF!D4r@_*_E!`nbfkm(hC5cLR?8`cyot0%=l%-~r_HiyOy-CftWw8xTU(Y*E z*Vnbu<5qb(B|&-V^7^bSZswiW6GzQwH&VCw;i17nI=5Qh%T2*gDEx#q|JJC_s}Ntg zv4xX<)(VpzW#tpgLw=)q)}f_eAE1l$#+0Wh{MawwdVl!NHD~&#)64Z{J?{(`tuw>J z!zwhV++vbKbRURDkSba^a3Xp%$5~-BWcM{s(q(!=kPJwZ-%roVnx@)5qe|!SOPY!5 zqtdHk&pm3gv$R8Lyw-YK4yn9X=fVQ<95A^&=4KYB9cR-6(~bl`teIb1YiGJ_ro6`| zXZ1z-%gS--aft|Bf1Sw>Dl4s0{at0bHQldP^>xJq;(23vPp&pKhl0Ae_yA3bF~p^k zUdnQn{&Gv{0aw<{1y1$*b&fUiSSyEH9!unHcKr{s7a|(zQ48INtR$2F6u{E8C{ugo{_%GZTZdPyV zHm89v^Rm$`9B$vYzT>9web3Lva0#;I(4rsK7wljE;~~}C=l0E!x5;XU_=#Ch-z*;= zx71k>Pf?+7m#kSt)yjPBL}(ATd~GDtf1~iT!6Jx;pu*E85%1A!(vq#zgF$C2`cE+1 zZp&!9>@+}%Y?dW|*>~*NKHq3LViAjPw7R`?wsYZu0G2 zUYr?RvqqKps0iXXzn`yz=h5aunw1>jnes#a4ipJNE4Vom$FA&9aO1&_@7;L@u06Hu z#=Y0=Zjo_T&M9Uv2*)bt`$WrWqLXf2(^6{a*tu#$>8a z%2OMvSXQ(`uSEkP&U$2t0EXE zALh~hS-%%Eiaz{tKVPfg^s@{nDA@4kJ72!P!(HOrw`GfOg;PD~n>}x%>@)DC%*^F; z=50CrxohIGHy(NLg?5*%n)S~2+c&!2e)Ba=M^pGe8NCe<4Nudfiq(F;a#LL9cI<|c z)@QOWa%iauCp!QBiL-NAdomB+d`g*7j9%*5r_4MK*FMN7Z+YXibJK&O<(wcGva+jI z507K!*dq$i6`Z+%M{W=PS zN6nb-yNBI4a^2B-d^9pbkB-`-vgI)=Q8TW?DeA*B?f1xjSv2Yq9y)VY)NH@a|IWH; z0l3$6xuh|fv8Ip83ompvm2$Li++g40TCP;zM}vLiM$1_T4?4n+m3Taka6Inq)2AQ9 z@-3P#g64(nhlnPp86{4zMu~NYQ+J8AeU!HvK{7o^rdj{e)x&b?i@xge$P3IAx#dN9 z#FzM@(Ox}J+N?B5jV>Lb_NaC6K=&J#^R7U0<@E6MNKJX$6vuEh@34oX;cn&kNK8?t zt3mRsaixcbmKKjwPaE}*-&N{SRgG6E_YTUvpK^nUP~j+9Q_ViV$Ep=XS7;1BcEsp@{7Yj)-@dmw3j5t^>&I;0*Yc2S)EP4e z@FKT zyei3+L{VEx>&v|R?z3r@=2T-ayMJi>#Hn*HgO9&p4C>pL`rYoxlV3Rti7y$~(LUWj z24l@M2-PI$agZR!K^V2;Na`^(d(=**85!yFt4E5}6iT6kNE_IPc=2n;H6ocAeDgA^ zrKSi`w{}Xy)P|f%u2vn|PwgT14e~$Qu68jbng;0c+SnJFRqf zR;Oel$!oY=TuBVn!&kchmYCV@ydMsvih<=tKm`Q^>SRL-`AMC{)8n)0DP>tZf362V zm_VK{qeY4}+;4OV32C+V$=BcaeJg`s9{c#K4=UG=4?o-*7EyZixwW-?M_*d@XzLpq zc75pW7hha7_Te#EJzS4{`pG+`p4R9H1Mq^&Sgr>HeAbR-8QuEfm7XSo-j;D5lT z+#avCa`ANobf~P8+R;&IIxcesL?v-V@7I<4<&gJU#`er=`PM^UP;Uy zeFpzqif`u~U1zzfln(3G+xLyH^m}PM+RGQ!b3nl=s?{4kSdJc8eRe6T#Os`v9#ddw zrbc;G(L9>|x^~+-s&LX)TY~3A-HQBsq?LHZ(sUL!oFRH0c2l?Xgm`8tD546T9`et~ z(9wo!@X!bME60&HwibK0E+}xQ``>x|ow;+bd*)Hsq_wi?p#~n=bmP0O(Nlk4+F+pTL4`yfn#BT9H+nrS`e^=uu;9pBb}13=X=}6)B~3GoRRVNgJ}7T8H1-btpDne88dAyzq7|X$5wp5t4>Pa z^X)$c&MIHXG^C%0#1&gG1sXJhXX4v z4}&B9Nmi>Hqg`Tr91)Z?R%P|WWqig*S??~+8u!?U*>&hAkM4c{4?9cys_6?~d;IR> z$9bdTn=3-rVo#5gTyUDGo_qYU6z{eqTHgQE*%z&vver-*M;qDlE$C6^^S&;!A!SBD z(G{7I^lzbwBP$2$Z!t0(Fhb0LrsYo!o%+?yW)N1O6l#OgX}i!rYqD%W+Ig8WskDf) z1~eMZoRHL_Mp$I4xNdh1(lt0XVBW{UL4BRUk7qevmTl(P{C&NQzu|hs`m{Nk)RS{G zP;E6}!Tvmr#p9FmG_Q=v${H+RAFq5Jbwoh zDW90jf|D=~(x=dm7>?c67T;#-E`M!NyH;9qQew5(Xq_>18vc0%mhGmd;x8P;A`H0O z9xsq=xVAY4yzM-VZKZX}Zw#crtf{kaw{6^iv(vW6^C>m+JWI4~OeR=rYX7ZJ*4Psj zS2{wPzc+N)+*%iYJnFqKvL+0Fc2cZ-^o8LgUP;PwwE3{-JwqQGG|F9E`mB2N>o@0( z35ky?9jYE(_4dgArB0?avDh}X4gST553~ldMG5VmrC$Rr&ee#-vaGbA)z8-H4!EYf zetPu6W?D+wJx*E{RP!_jX!GkFWo4eboD;ZI!5`f(3Jhtn@X>`!vc`=XH9ZYBEWLBU zmb}sd>ZQ-7jJU5<*>o#w?qL<^K6BoyJbjNtF3;o)1~9ozbo@As@_@621i;;pxqsm4XJnQvWDikE!Yh2EtMGKi%qpGxKP zk!d1!^z|YlyvB+hcb+MBr1hy3J641yFuOcvq1BNxR1!N{&CLn%Bln#eYa(?2GrEbQ zefb0LI59pwXZdAvvm;cbm2PSHDG{nO_sc==w#>RMzUBOfzsk*;Gh^thbsJ21X!>j` zLcQhM()G@t-tK;l?qTF;XnnV+1;jpvrRymPbeq4$}P=8Hd%! zXx`Hf={z*dv7CZ-j>J2)xNO+BS_ua()6D2L%j)lx--_OyyTtP=txU`6>OPOwu{hhA zs_{1uda-8Ky%8787!Y4CjIP1R2TS7|Z5D;zH84Pr#oR+YJsq0=XZc4fek&tT_W^Jh zBuVX==9M}%<pR$|^pg9!IbGdCBPLE$U-ls)W1+2vzngKuG2-^q#cx*MxH>T$85#0xRt#mg zAq3RATjEH})FED_%VYs7wKLq})P4WjcE{hJ?_>xhD$VHA{QazVS7tpu?CCdBvhG`W zN56t2>Y>tctLHy@ui-qlTGx++lJOPwJCA&)#i6o%r}XC@)8)oAR~=brn6Gay-(ACG z#K@6G!(*!{QHo2M^uLO|e7~<2hE6O!-N4n%eYd-r>w+&w z`Lg>RZRl#~z1z2Xl)Pj0YPG$z_IKZ@?Z;NDy!YQPtxh#8d60uO7IAPsxz6A-r-%q{r>I z_ZT|L*FWRXJ9{2`_MWki=e=8$ac%vzFXTNit9ISl1NOX-O;S?KA>&`29Ht>oonNir zY*AU3U1i)gT~^P^@|C!(xyeD$bcdfN{qv>@ngVoxBrYPH-vvOEWb8?wfF^4P&go-| zrkHkm@JP=iWMfHE(~=&i=VC%y(8#Qwci!3ak&)FtnKp3f(1BAI`<6DyeqqnRS+&w; z4f=o7y$5_1#Tqugv%6C$^oKspHI&_t>Q=^#~_NEMBWN)to@ z+qD3Kpu$xI6%q9c79eNxJ@3r!$vFuq-ur$3-|vq?%9)*=`p#RP_nFH}-mBCx_vhW0 zr#?3PiK&-%UC*U9FJ{~It6Dg6k()dGq9R0`PIddetHh9X7#KjILW*uf_Mt66DTw2U zP;ICJqfTF<#X=JiZU}BT&w%F^ZUrHxbM&iQru1Ce(=obE$A<=OnAT%?uf`+mwjZTl zo^_~I$J#klh6c}htxdbS*^dquTm-Zd@CO(#ybEt$%AaJ3SbJnkb}DO23NJ1Bqfwep zNvu0Gl)e{<4v>NtlpgukC8ZF25hyE6mN5FtIi3EC7V#%FT+&4jb@Jc&Ye#J9N($RX znCpb{u`!gGMo3in@KO-H@buuej({I88gW+g<@sP|B1y}JbhJbT$TRqHg*%tLdT@cL z6#ztYdvpnsU2=L5I1P&He_Nejq(^l=n!vgR06BO6ty3%ib>onc*7B~k*|N%Z)w43M zrs16Qjr%Vv3i0eCRRj%29Au_TlrquMg;&%&RgHEGIYvjR+JVQN?_9X>j&t!VaKKrv zQQPdpG2dSbVp*3mzh+rMpZ`1N{S`LLMaq zBYqZM(NQ}JYXL{OVb_s%2Hd^w=ZhsusG@ibFjfgAodpUQizz=~8cH-4HZ(<(vH={+ zfYzXi&1AWEBf^s+*c0~bsv0Zm;@7gJ{o@b(KYjV&Ax#_igmcDHfA*F-yKv-Nj=a3! zZ=Hqttm40}e*A*5;)%kI{2ZdAsxrFxifw@YABE7)*iVFZjw}cGuNCpC8yf;`CMhmD zEZEmjd{iyj2dD`xA|@1~H^nYRFQft1EJY@y7_j`HQkg&=k3>A@X5^Z-d2W=zLsKdk z>_C`5_Bl6biy)k3o>$tAl#s-cSjvd{$cX(^$h_^cK>b|>Cb4R^ryWjbf#l3ri z#qldA-sM;3wdvULfeqa^KX`1+xPNut-D6j?2ii8<)APm7?~NUGtkc#W>a@@JDOUBf zGpq_fjh0oxoGpXgjzmwR$!l6RvD7_dSwi?m_>zu|0YIPO^wkhMwUHYs9spAb>-VvV zfFB~5@brrRpf)3=-(8Hah9dL56@! zdsqD(Rio}Ek!6}(3MG)6jxIWK;}PZ51K_lv%mynE0mQoskwsO( zTV4{82((Ex*F?D^3X$4amEm$rc^3-+5CV5xLaOj-Nc$i%n630#0a5K44{KK<$ zu@?s~OsctX`UnuHvQe>IQq^ zFBClg*@l(I_%YjOIp;n%YT`TqFNyt@p!75OEPf5F*M(qzIL?nzN}U+<$JD**pIDO= zAN|M?ot)$yAC=M3lCw3Yr=w;hP#_c@MYeMUVwi|AATUD<(rtH%5y1{2Z8HS%4VUQ_ z-W^6I1qmn76TY~KcUqT%*&CjIt#ik|c|%m&*2ktT4+!GxTh1x>>cEFOs&B>Qmd|N1 zb;Lsx8+Pm0ww13jc=qCX{6zI$l^<+ZZF&1TOv)N!GBIc>?rSW~jo&<&kgIEEoA7KtkNBQF%;I<>f@9rO) z`V>XicQ{?`w925ZE{{Mx+GyrELZ>6IsjlQ>ul$O=;t$KaCbGF7a>PbQ*RPwC9bGfJ zMpkA#hyWsC^>}6gIGQFiyH6!>5U3Fl%61j20BLOsP(8l1Ieh$>U59@f-&(pUB{6yW zA}O&AdA3Oa--&-czbBN48^KN6rUbB+L2+P8b;~z5!A5L?^Rx-Nfw&zf1sfx_iHk2| z9}i~g@(m9(Z{EPiH{VZh*Xz)$9Y^+kc$0eGdnd34rFP28e7)BBk*UpxB*ctpTc={v zh>(Z}Gi!Hk)91m~-P&Nxm@>lFQS%Y9>OO1`ngk!$V0DA7;~)s{#oDLpWb8Q_Z{QZK zv2~yMCHg##877~05}Z?(|CVG5@)xnPb1f;4RlImf-jKzMhUP8l-K%Mn9zB{g?WKQ^ zzhXuH@Wo4pHSgK8dGkJf@$PO)rgl}ofp-ThP6y%)-n|snCicYU#AWJR;S~ zPA~_Od@mWI>IVtq#_*@iYT%e2>)k|sG~_5<$xma zY98y*E0D1WVFnN;!{+fg*Uju0Og@5U)No);v?!4YT5`sFrYs`yQ*H~AW@dlX*IPAi z-ERB5DSK>cUVhi!dHwoLo!YZo@1AXk3{j2E&be##EA{%vL=I{-dg`PxM&nNHnzU`v ztEHoU+gA0A{?17lIP`5QkTe(n0*?bVh_Fn)IE@L9gC|IHGx0b?JHlEo*KUop{bcYW z`g98)sGSzRl<^K&*zhTd=sCsbk8TNAjIf;?Bgv3V>SKG ziFMujG-&Gj!}d9~y)&wtcjKi&E=ouo$TA(k4jB5CS$M_xFH~gElO;_ny{ec)Y{6 zW0yXoJ2b3cw~Eh9dRI?%4eJFNW>b<&<*El07LeR#OdzuaiZdnDo|DFUja~t1vPL~( z?-xZ%>|^RHS`g}>I2I6#WpdVu9h`PGHgL%y0(JsAID}$F-WEFFy@^2{dvV2z!WWmX zEF3j@)UdJRh7TXBPhN5G;EG8r_wQdha_+nllZMZqKOE=aHP%HNta6;y&EeR$Yt7j> zaX!8To#Hso!wlGmz0}o8hSrjSVHBr%v3daG6-uYMx>}y*g+7$&=zi{VdJg5&fQ&Ss z$4SUEDnieR;-mzK=jC&Api|CC@yS}A zULP_sL77Xt>F#-kZ40YH`3k~>U@sxZkU zhUJl*sBW7xyzBT?6Wqy(^G-fotKUGjavkX_=@8>b?d`!2m`bAp+y4(X06C;8?ot^* zqv0;o%3WqMZd>VPmg(hHCfh2*IxBCoerB0|US(>!%k)%UW!=m&-Mq>eRvBdkGEuuz z8Fe4)?p3CbRfctE3G8XJ%+pi`gP4RxR}Jzc7+i$i9p%chELnQDBPWcoXq4`3_}Fmf zK*7R5kaLOB2H?e@vkgdFI}ThWj?5(FQjq(i64R0(gK^%%QGvfKNz1U?s}+45>e_u} z8JIr@y4pmk?Om_Os)uhsuLh;y44lWOQ9jeZ^IcomQmqx_JH~e|Z%#RH=nrNCb1;>C zTKot4L+b1wW}mS)^fWO~70r42Nz4<e4xD)i$mt1?z1U=V>QZCULU$fI*s6pe$dLnU*_5#g=wHHJVj(sr7)Rbe) zYJdYr?#+qjx{zi1y30&vKeI7rnK52vT3cl>=eOAev&;mqGBj7>U0{v;nT;^ZjPNQG zXO+R;{FsfTGFTTQsSE^PKjmlbgx(7}u$6Bf?#prkDMn_NFYCwh`Oc2musu5Roh-j2 zU(44)SwwDVC%#4e!DGP1#VR z_dhUj_~Xr57X{U?W2g_;TQ}g7@3m=J8HQ_l_MG-sf>gCC>pt!J$I~K5s%fM37rXv@ z_Vvj}9ZYl8ZHQc{LE9S^1y`(ubScOdksl)VX&rM7H7K)BWf_`#S!OcsxhgF;WEtA0 zq6~ONZKe0A`7YY0vYrvj=id9&JWGyXX{6&eG?E*Waer55tRY(Woy8iGc}lGzy91!X zu5&~N27;s`A`n(Gej^A|O0t(FdJD21GMqLvL^jkK@*u|JI3}?zG(`d;0Z5Qq`cph6 zaMf4_0?k8duW^p#zpqa^L9FaCGPuI=gJ6i{EDy*jVAa4YXLyuF5(qSH8oV+kZK9(9DhizthH*qW7!{-# zT1Y}%Eey((;xwmhvT!INMKIs@MD1rHzY6pXtz@ zUtYTA*=k97i8Y)9hOoHD`kn9G_u<{d<$?7fate$9tdHh$y((Lvf%!lmDNGQ{!(E2f znJhDz4Me89C==~f#`ddO#$cUCmX{^Uql8t5?LY3%dk!ooKQHI`Ii1P$4nrB?h@j8a z!U&JgjaaJL_$K)UKdG@AxRI*3|F5Z1;7G4uuX;76G;UO{Y5k@-+12V+ zuS*tfg@o8>=?heY3rg610`roig%!nEL)*0gBbCMVyp(}K0_c! zs@Se86%Yk_z!8+3R4F5=N^%wAzOiJ9qiR}c2suL{kT)L}OSpQ)Pgs(s^PQ5aOAbU4 z=8g=54M?FYL3o413_f3528A^M?T*TgVuU)7QE-qOKA86q|LNmT_;1CZPB@ZlvkmUf z_t#`qtBtIm(Rp!$U$S|`hIcZKEZDyHEn8wf|Do{9-}rkh?EPyjymwpM(hD6Aw%LncySx&3PKi3RP)d|SBkE0PI>?>;Za?m-$~=q7W36%u0;ZjOz_Z5sX$S!%2l zZ71iSWh0WQD3J;9_ocyaK?p3pYEi8AE$_Vuf7H1XZ*MAUx(T)QDW0fD>xWI9YOo_r z>Qo8wmR9BVsWtNj<0|fCG;ERK$RdYACEN~{YfXnzZ3o+i3NlsCL)30J)oGkF6s{4F zSW^>{>&euS$g=>*PFb~xfU*rnRqxm@uTLJ(vbjU5bm%u^=xArlCI*|8+N~NuvmZI? z8vN0u_F3DH2mozN^yZIS|FDEWv=QYtz2EXbtHvG5)xsm9fTGRcTes-fP^2>-qO~Nj zW@4}QG}p;HW%jBpL-Q-kOlI@2%fx!4-74ghEJOQMl)*Y#QhL9d@1p&RGWc{vo;>3O z=1HvQzM>72Su^kY@zZwTeuDvJr~LAHju4q&PRftB<_lk5)wtL|1N0U!VL{VQHVhpI zP!^!k$OIJ95=x-Fj+%e*fbj6ir_fgGA(1)9+~{0{VDFwm7A*0(tf2NzWRTqrpUXBO ziEL)i0c9b&m>W4RG+r1N8m|;NUa*SwqsDFgK2?m@cx69pW7;NdXhQI;&>L*~QAVEE z!;Q3$>8cLjPqQ$?iJ3!E_}XuxuS4SZ%?b z0d`Cj0lIJqKknXl!sR!P~+v z@$@?(Pf!2Rh(?)KR7M-39k&gWb7mVxbB2AAMD@T{`2U67kM>fZ=3-yRpxuW|{u+x2rFB0~Ez)i!!Soc1k zLwS0*L}tsqj!Ye)Gy+^?rYYiR0UdTWVev>qlww<-`;wWTD3TTVaaP~?Qqho-Tt)rr zohX^32z!H)7Fox95cw5)Wh~PE6+S1i$194xGF~YZdz{vlwa29%MtfZ9VdEe2-s945 zMSEP-fj$1F*yB`(wZ~;0w8upqtm_o-Jud4Abl1@hF@Ex6QXQ6mOxE!)vkp7*)&l z^Q_sPXQ|PcKUq%^%E)@U;%1U|vS012e#v@B2Fdnx!_D2LWst0gWRR?<8*5*-J-jmU zKw0%@L)beUOoB8%{2kBs7!O+YXb-bNNlbMYg-7UM@2-qz~x6EIe5nG_DFw< z#9?p8`G776NPAMqr8^>>enTHqN(OP1BOiIQ^rvqZplprl(SC$3AZ1$a;QqM z6aZC-S{_C+wa#vbWOCC&g;@QNkzt`Wcqgl&oscU@>QuhoGu!g<$DM4bewDBB&bidD zLVRGo6~6)D-(Ad$^c(jq?orx*TKp8sqJ&V(^QpGwcE|%+rY&Ug?kUP>xJ-)b4 zX}MDjZ=_n&wiRnh+IQoNGmCGU_1rY;`5k3)gnl90)3tbHY1t#*rQ5!<>S0}r>w)24 zoYJ}0nrsRtvB!nnKs}1VdVGg3XmtdB-$$HSFbLK<#9unJD3$5Gwqfn7O^buH?Kol-@`zQynN@U|*tzouh{L*G%_ zGgz9J~Kv=z&#an?)9MXb(VE7Ub23)xGj77vI<|Hk`Ca41KImqE* zS*$L9he+AhuXk$IhK?TUdNxm8Ut@F)bvqu#v$6Q+7S=0qr5XNyh@o3=iy@m^z6}9f z1aTp|M0`&~)^j5$PfWg~&e5X<+qV~J-P?_B=ZaDfHW}SS{ly%UYa+%a;yA$4gqQK1 z3;%`C@rC~aKJPhYbo>Lno(?`Y%%i9WbNxk`dE9_CkDOeT5%r)<+cITnj;;yaLDa*# zAgoYYcaZ)R($7Ub(7iX6*3XN9*wxM(5mp(jtHCyNecHtO#JIl3+v?w89;21Eju4C+ z?)oI)F)?+zJs4G^a7buYs=5{dW&~CaGhq4VMGgbmtM|xMZwNFhCLtSyb^3Rk7bn(= z4+?G+(PMDYF=DQ304noae^Ac)5W{cw#9sOZb|)1ycF9b?fEv-p4ahG#10QUnQY
Fd&P7`#4kByy$8(KrvY`OTQ9UOTYXnOF1&WGl%#8G{VQTB(U4w=3gu?_6mN0o~~m zZQF-3!e@pu3xwYV7PJ&(qbnptr^TiTQW62L zr!~YB3*{{0HQD9CBLGr*qBjDf05=f`4X-38J22AE?WKo0hl7_Oyoo&>ZSbUT=_g_1 znWh0BUd^~yWhS&iR>hc~83AK(l2*nHR4az4KLH6K6z=N10ZW&RtQA^eorjI-FcX^5RP2lg+PDb1QR zYM7goSrM}kRW2+DQGF$irCFozs9P^PMDwv%PDw5gb}(WB#I3J3A6<;U^hy$Lj3|c8 z%x*vIYy?S2HMN2y7PpN@V1&}?$mB(Go#Y7?@m-OjMgiS4_`=Poimk;X?>1`u?o8zO z!-e_i2aOvYp9mV9rhx&eJEuq{oI8PscR6=v`1|_@RNOUX$6>9q;jgJ}S1p{dHDYXD z-dIooB!LiMLVn)EAjt{K9$0ze6M`p4O#(H*lM^fTteRW3cjm-JaBLom$&LYY&H}Lq zUx(a3CeEQ8u?Hu!&Eg!Qy<=fNAotZn;vDKG%P1GioI|hU90Erq_JybiXUs$5j6pqI z=vCOKPTq)ez)?ojgR|ipKQGUCe%{mrWP8ZJBkI8!bGVF5n2YwjW}|b6>M>ZCBJ$Xq zULw3l@IDIvS#7gVFO>10iQH__r|xE%2g>wG)GO{gGS?%K6a$JgUo8uzeLjE(^mM+Q%W&CHdEi^8& zEnV`x$E7;v2t1PbJeT^6IhtHX4@l$HDc>7qddM=$Y5svZM<1ANsg5n+Q$-ewuf8=o)YoMt_2fQ@h=q!$WY2+l}R5A=Xw@J-(n_3WrX{NgYZVe(RNUS41a zZ#5J=;k0sV+pt$D%Lq~?TU+sC0WW5ZXfJulkMa(Ie6}S&pZ6y@!IW^cuK;=NiOL{H zdHhD4@A7&*$R*fB2k71Xa5cR;$D=5=% zSL>h>$zywgEL@+XXKnIFyYiZaKZ&ExsCvA7n23c zjk`{u%yOhL600D-la@rVg%B6eYl&SkFZ78B-Tv(Iq~<9hG1V&!9;KfnzPEvfedf43 z@U<$e_&EF%yYRjgrI#ZtC7I%GZ=D=zYd9NVM@Y2D_2PObE?puel)t)yuFHWeL7!=$fvd5skdqtyzV?b0l z{HAv9&d1wd_4ONK^Pe?Iui;5rhd!uE0sJ<%joz@w;GuB@r6$M6g(6>qc=FwLS&cB{ zZA35|cs>*)PGk{dKJK9aZL$Z*$Q{=;p(LQjPXZK@XuSb$1M-+~$b@V!#qj;LC&Tv> z7uzjeGhS2o?Mg|%7t{Cf0ovZ@Y;RtUXuY#vX~u8K$#hXaC-iWzM5H8@kBtaNZo2A5 zH>3v|#9eEKsNJ_d!1i)8?Gfy$Bpgj`7wH}r#Gx!#)9~jV<0gz<`dG!xyHPf^ZQ;B8 zkyQtxnm^l@qRwTho3Ioiw~S^+D;yzXg?${S#L;RB4g^He?F$BWF%4%B&=}yjz+}KN z6N#A+jt{pRmDu&;N|jTUth<&ISi}hT?A(Rq*_g9nysCZph8NlMQPqF%I@|GYLtKN) zvOWur7F$*Q68r?K2wjV>NL?d6oY>UpjJ3SN!V0Q|#bu8HkRj5pBEuIRVmla&At1mf zj)4&u8;Apzj21I!1yEX@`+H2ptlU^kq6rm!rnP8>tw2I!l3K$-B*wy4N!9l39^vQ7 z_F_yLr(d$Ya5SK3Ln+>uDXM+>6Lba?lfTliAs%7+E4vi8EB?(qcYibGF3IMjJ}Ho4 zsU%a8qLIlSM;TSy#~wG!NLlA-|C|LD)Bq6}qu+0yk@)hcatrJ#f;mLVJ+mz*d><5jYTW?jDe3SUdRr zMLm&JgxWKJr+ezWLeD%Z`_7M=^$h2gJat}_3FXJkGRH(kjK+{Se z7KU4rgS}Abg{1^0%LH>_t%Sf3xPk^+w1p6dvnT4yu{hE8XSDZORh;#P2Kxg`Zj*jl z{lIn>Herj>oZ4**<9a#-uQs_H@oE*mbnHJQoyR%CiEmrFA_2a_hl+W7C{n@fDLJ{> z>IdVtZyWQ?VEy;79Xlc}(7PVTyAJ%_yKq(saa9>QF?{ImchT=jO_sS{lDZ=|I|BDn zAs=b;wui3{`hJ3~%FfWQzYe8$Ezn<3-xs=fEeA5{>3oEs_vC+%fpozZBWe@;kAxqB z7(ttn9Pl!k+9JBoQIDzm+IjQV+0_2M2lek~D>TMEwQ#J_zW>0ss2oo}WAkCP@V@)w zhe4BTty*RCK?DNtKA^8+*Wgc~+)U&omC4Qg+nl7biJ1rbG;Y+ZXJbe2_Ejn*R<4{_ zp^B|?Ik^f#5!CKJh@WhRHz6Fi1{&l$uzbMchOAgWT5%EKzUUWm zmfE7XXNPI#b3yTSSW z8VszHSUW7JOL$DLPOTo7YcpT}SuM6*z?&ToKU`=-`3fa06#%d^y7UVO;BYXi!8Qp) zEAc<&Zs8+pDiG~v@}*ELN{DIDnjE!wOy@RhYgco08r7xA)|{$MZSVD*IHqOouUHf>zhSr5S&0diDkUUlU8>u@ecjx) zZF6JNQe)#&A+w8%i>~XxxV|$wB3{+3Xb+!Od41PMA;pl3#-|A>hBB^c`p znE?I^5;>lei`-eP!-{4B+QiiDc#I0I0$PhGA7?&irUB>39Nb)y&K%5Ki+i`9*vEcl^Tm>A?BXG!FOVP z&{uN};5Hu6#@mTJ-t~z(o}W{fGMASBn>J7XL9Bo~KrTZia6JU(1f_U1I`R*5G`X^B z6+ccPPUUl33|nryg*qJGd6R7mlX_z0WdqSTxqhSY3^i5kWwabM;78f;@N9d^?KQLN z*lvA=5~%T6TeMcqScmTjubFcXyk;!aesl;EAMZISQ=@1rEJFPd{T^{HQJ%h_%`d`N)4=GA-{X)*dj=N=6u(aI z()Jai?nxS^T zeNr9H8)@J0ScIkMLX+FC>aUx9AS{qUbA_LUT`YcvU2J}SMf{9;!U_}d3!IahV130M zZt}(ei4L@FU3*~ilt%{C*i#T z<~;w^op^NdhwuYp40T#Z;=*NWISB`94vi<>e?keL8vahwRuw%oQ2oeNvm5T&Sd^Ei zh2(2SKH6Z;A=*HDhAI2e2Fx+~e%HHyP(6uo2z2-5O4M~E-pIv^yWWmD^~&bzHT$?k z^f6o1-x&2n-$hKl3EfZQ>qAMliUge)iy*ua_{AV~$UO^20OCBS zvrjmVB}9ruYb4T=6v2l^YyhA`Bl19dD9qqAz|3<)fo9ZvZ?anaUpJkH2`Vm@I8w!N%44Zv{l`NU zg*r~23gny$V~1>avR@U7d?SD&Y+3XnTfJ?(a?!~z{5a(*zwA8sqA`Vip!)v!mRjBQ z$?yEDAl#kSFPK%hNk1RG=C5j3MBAKb>mkUK6x^v4l#-l;yIClF=>rZCGtVF;NVbcn zii8KqJOpryRzBTVXDKna&6NTKHI`6REm)annU9AHuwsdBls|Lq>T z>x3uew5q(s$Lme8cFSQb`Vg}nQz~T$4`60wCi!KRa;%)?dveq^n4u*GoAg;4Xs|RA z91!H#qHxEWx4qMdU|1|FZ{d^mywesLbJ%&cYKO~=PGmNkcjOQ^QjXer-`5ZIe{#j2 z?+@JH$obojRf|_Gcw~2#SH^69`Nj2%ZO1>`nfF|kjQ5^=_vx}$`4vySnvZElgDQisg?NSimF%)sm!mvgp$osW0&ano65s*whV$Q9m%9ns^8&di)i?=pGqA)m-6{GcN;Hb%jXz%l8u z=>oL_%#MeYstN{LdNIjuy84$6C0Zw@ZiPnR9v^cEO^-Gm6oPe@^2I>S76!Wmx4q>s z_q~t!rK-K?dRJwq2aJ~<)t}$-4bxO`1Q+Z$Ecozkg+mR#ulb#2rb{*H6001HO%l+J z*FnIWLf|Glz8F8TZ}qlV8H4_U8>lJW4T$_!EsfbIEu8$UxDgywb95Rw zoI%F=Z7^lfj0gBQ?HSBh63%n->m(^j6%wN({Olz@Z_zEm6HFIO(p13$q?Bj5<*~pa zwgv7s0s%bHSS)hTh-3)UFpH6kA}p6>B;{z&@QE`XTC%X^>?hcYK2;ixYS*>X8^;Tt z1c{5QxvlU4uC4oF>ZGM(h7Deq(j#Vg^EwSaUNey;?qr*7=2{l=5i%=WIqC>O3+{Da zL=w@yOJpAnHXI#dxN-QA*AGkEq=!#4%ay$|f(}ZvEFou*)_os!I_|H&Qb;L}%U~or z>LpwTQ-X;)b@k3idW{3?r{qg06z!KOIB!(Qt3Y^D6Y2it_&Cc;?h$=S#g3%=DanuS zcJd3|-CThPxCq^ya<0^zP`dUiECScLiOXpspr1){GF|=8sZ%$9J$33v(NF5yJ)1V| zQP;ZiU);3uc~!l|FR{cw+4FzU1*(5+KXByVUmfOOz4XR6mk#44;;ho^-rFaO?-$k)cUK3vE51c5_3S~Za#`YMBTEFAr;noX~}a0 zzQP3JK{6JCbVMR36p@|6Bt0~3H4w^03Bm_?gFVg`EyaFt9($%?g>EhUGDB=Zb;=dY zNM{cvw9gJq4AT882jv%3`HzvT$8R1mQdbA)zH7%6)$jF?20|kH!l~+G57Ssmt}l#b zff!p@Ty&P;=U!rLhwxz<-J@9*Y^cy6@U?1{%1H^~&>x6b%hDhmHPT_;vWS>yRVSix z2ujjPNo_D7P;do+AyiYdhv1qQhh;>HDNs!5SD%%VEUD!D#8rFvHzh|~=-R%0_r5uE z-n;(w;p|1rg@_s5xmWI0e(L%4lV-Jh;0{P}Y)_3D;~e%<;j$MejvBBssb|!nCXJeY zb7IX$nQ6=Wb)S<7L4$q^+#WDC2I2qEV8WcQ#2Ff;6gWaGWS)%HdNH15&{{^c7I9)+ zdntPdRY@GE=rQJATsVg)Tb3+|Uz9E>AfQ-`a>Y?VQN*1}Uw=RrTMBY6dY|^#5WKf@ zlkTgX#tjJ8wonfhRnbllLpLA|HXz?qgZ!jB0^3^_zs&Y@Yw0z?gRjRRE0^MgCGlEQ zV@I&FBwlL@NHJONyv^(kAxF%6|16zG*FHZwZdV;AW52!e@nz?RXEv;-J5@G|J5@Th zb$zb=;rj#A;U2gHO0}Dt`2L=G*N)NHkL7vVNwhgxspANsybxH;$t>AzbtaOv#v;H2 z&#<;su&~Gz77bQHOy@)iYc3+Ok)X;gIiNBmwYA!?@G`FT+cIlg;juSXEo3YERB1e_ zSKjsFTY85NUN+{g;rlXQ{vkXxfB1kE$vvV6IqKKXJNl8znbM00HS{ALxVF3HnI>&gd!p)>%US+0Loi zMZ@L&K5WMu+UXYGEJ?b=PZPB73d>-wQ>GeI_&fXkMH_jrMm&(o%BpB7ctJ~hu{VP~Mu2u0ot3@*U15MbX+-wP}RJ9Y)hP^@U- zZxQgOFffZ}WMe+W@`+(Ae9MAuPpge`X4j~D^1}OHfyr;{hezQZSi(XdpHaN~PyWeo zkRQD<-s5?)EeP+9R+3akjPj7}agoqeq@Ax|b}WruSTI%Np_wH_!5>cRnt@7PW+3aJ z&|8S8p8k-XQj=UWHVDO3mCl1~L&eRoaA&Y|HJFiyM!oqh95X-j zKb-t#aoZ-dTXs5h(oo~nE3X;G`yjOB$NqDHe-z4d*au-O_vW)Vr_AQJ9zV!$1*+Ob z*Qxz1Kv#3KX<;~+r7_=sQyQ)+vu;Nvk5-g^I~o&bwhZks2{EgP5U|?VZPpk%(h>J7;*vh-m=39}csA<^B5wJjKzw=yFAkHUAcx^)+I(b7j(Pgyl< z$zruj>)FjZesFx&%M~lV^yrEAJ2cnpJWAxlrqNfUktp`quh@w*>ew3T1}@oRqF`LDvmr!VsVu4 z==qP|f64U)|DAsVm%n;Mbv6E!|N2#`&z(0LJ+|P<#~n)!Q$`&+TKpL%ev0j&lEQ8g zYZXN~LxMd~s!}_I#RH6o9S3x15ZnN8;o+_h=!%snMo9fZ*CYYH$d{Me;e9i`6kj1@9QDYH<5ODUk{bM={_HD zzr_^%LOYZW61x=g!lUh$_vAUD3+=Rk?5W)oYDY%-C6}w-F^zxcLB9{@L{5K>_`3e)YP!R=9Smz0?ui>iOCF2LuhD&byBrhdopWath9Ic;+e- zvq4s+^fcV&9ZR?65LX&mux320vY))u2ysV%0xAiQff*5|%bg5^whsIzF#e>6HN`TN zEZIbUk0cyj83GmNCCiMoZI!C+dwI(CjEc`WUwOT1<|^Cu<7!UTq8`<9rq3vNYRXen zrp?e!4>~{p2LIrZnKK_@IXC8=A3V(U*~EX39sAY8Qk(_y8zjz14iQG;{Ir; zQG{bw%(ecSs`IaYxWUh|%p2EPJnr`S?2RMesX49>zB}^9XY5_$EMgf0Sk!fJjtsi} zg;98%pZl(1Ui%;T`8Quje?*=b-NuX95j|3 z-aKjS;zrGmZQ1ql7pIJ!&#j@kLmU_QBEkU(ObE`$zmMy}r>8wHo+0q2s?>s;mAJgg zquvqxDmay+5~IMHiQhzqBeel|2lzBC-XsTBI5<^wAd+z8;l#k>t*oMf`m&ZUC` z2DDH$N;q7TG(T_&;IfCXIL0hCSN#$jedSKkWgh4HC_MDdKPsiYxFR%4OJJk-zWUlL zwnEp2AKrN52U{E0Y2KEv&SMqX5_P$&u50>%C+8hR+kw*(Z4bl#=;(+J4-bzEkBuy6 z-p=I*EfV|7-SSM3LNFg4j(4;itKLp&BuJJM00BGtNNSSUVWREGkn?ChwiiNz77J}v zt$~w`{`NLC9oP}4wwIdx>Rv5W-ROG!(!Tvy)aPAY(Sc;w>caW60CiNlVjrKtIEO0@ z93duyjX&|tA)VQhjEN|RCPRO7JBgv)+bxmJ{GY4lit-;`NBJg4gGkHZv_6o@UQWFnl2IA@1l}Z6=wEbzGZow5>p!gV5$yjxgeRpc_~$#!9!2UlERA z+y*E-zjVK%`(Qw>0o8*p2A;iY5{m*rIe397dyF_>uT~U^>x<+;_ol&o48_rx%k_}6^ynKF6<-7^-Lw7{8NNw03mA( zaVuf0GFhhkoN5MdKP!jj9gkcyD81A`6&G~joWf~^GYck)P0Bc|OzJhEcCZ<79-Gl9 zaaOr847j_7gg!v@;xZCXVJ|Ly%2A&=`{9|>yT2WaS+D$M5ldM)f7LpEqUcK!_~Wh~ zI`!klFZOA%E9cMOx?`?U_~og$M!%Sq@$&q)FP!_pcxvB{#p{+Ln!yyYKgGTR&d*|4 zaYqFr{AiKW5KuDImUaG7< z=rGv6g|7W|pIugWT6}oYLzVkYt(@b!_@ugGx%T3n){|Goh7Smd8qsT{PVh&x(Zv5@ zWj!i>u8%%?;^$uB&)7PPHS^rvvDIx0;n6G)Pl2weF*GR>BZ`}|Nb$r~mBjH5(+UA~ zn7f$9^0E--)VmCleg3+dzo|lcRZQ70B-kq?`yY1RIgb_a8X%hQ@l-Yh^RNefT!lV` z0|#JYBBV#eW6dR#I|A|IcgXnaSqvyf%H6Gw<-IUv4;G-k*PbC@ns9 zb$tA(>ufn6ePCmJy!tZjMPxYJJBo3wE%1+tvhV!TR z7w9;|J@t>yULXtT;G#8G=Iqt(diI8}i`LQ0*V6am=q+@u6-RFy*IMi7rDGlXfUOv9 z^217rQkpo*`TLXgOd3YXvj{AqwmR(hJ>LqNJCU99QysKPUsZFV)fq zNjc22+T@fC(uPAXY~!sBxajt8RoGmlqfndbJ3>HM;?Wwn#7scTt=8aN7XpMrb=Y*) z(RsJFlxat)Hefw%hCTP*{n>L^w+7I?aLU4tqtsf&ZNTIN03_X-2s93a0WqecR+>Yc zk)H8gaaCeQx`eQj>&vo$5Z;BgD&Ve0#143$DqQ=OW$`n={=~n*ad`Id;qP5Y)6JS6RiQP_R_u(lbur+>ZbXcbX$CDKR!W z+(ZbIhHcHS@OY(T?bF3pve|UBlhTjDHN#N&fbcnFiu#x0Q@)HVd0PCRRPU!?Ym@e=ej_A>1zKVivfOj3;(WE^0rFM zy~Kkm@K8WQQEr!jMZ-38ucB1g6GUHa!(Omqs}Ww4%rvYbHyWM}Bfx41Qj(f2j0z?% zDacNGZ#L_*E+OBg%C&V))EhRoPAu|dHZerwB%Cqubva1fV@U++%WCfGRCdO^I zI&Oz=NV-_jJsI~f`vE@@0w}dT9|Zyo%al}ms^l*ol=D{8&BhN0Z5j}KBKJOsCF1^^ zC@++y+UcZ=-#&L9SOi>OzI07r)p+~O(^rG^TJH|q@y6kuI}YPw1^&^`CdiVtVbLtY z-&Vhw@yIYuKlz@m&%^np(3YCA74vAocZPMORDdNL862!AbaO>;R4{I1#P0(=P(_t- zg%YLX>y&puxr83BXM`AK@*bJB6vn2RHO*L|m>MZ=6DG}+UP)Wo!uP)#+IPgP&-U|e ztoQuoE9c^Cg{7<3t>)MCdP|pdd8B-~#r>AAVZZVT!w2^sF?7&?LH)4fH$cGFL%VHC z#nSh{I>N;Y5b6#ZRicNA<)zhged$!!Yp08<;Bis1A>X9;6k`yfv?lGHte}!RK9wK_ zREg<9Ov9GNaz;LYoz?=aWxq&6^}(+oj?D9w7IiMU8|WC5rVvBu11HMbj(vin)F<+t zMITRK3j^xZRx|m)JX|f4$Q~=o;`P};zKI=IJDla8ch-QHr*$lNg$?30M!%sM+V-HW zQDg%}2@VT+AeXg)%K6^i2J*YB4V2+!1R;@aW*=uSK5VJR-sSmA*{D9wer(ioK9s$u zEn_!%0R6S8S*jmT1EnGUx_)<^Awvtd9RYX$y}X?1YR_)%jVV~M}Xy2X_CiOAq@7%bo z!_4G_IfIt(*tXsnG-uMl5krQXYws-PfOseW+76;9SjqbHu!FSzFo9f$@ee@VC$xvv zq6K=rqD5Fym~&d&XNgaiUB+;dkK-wC4j!~&3)Wk(ShIBJxY6K;6AW~oaRsPqx_qZ>;i62yC~Mw4y^lH=6i!^#UmG9_}JX1O@cr4DGEap zBu!B(QAa_y4E=%lmdV^tBP(B+qLO5=CpbXo0;)3x8}R9iXCfsJEV&^63=Y3!qz zf4uV^xG{7R^GR+28D#Z-R}x0kwa=;5F(n+WCtwh5;%w|9#*$)P#mCel5ewsfWom>J;`anX=C!vJum zgaHJ5Oh>vwaYi-s;g?3L`pwPf{`1SZ7rqAoaM!e5+qQLje2Ve(`>gu)%pY0xQ@f4X z>uw*)JaP-o#XBMSwBz?44;pXxfRq;Z2-Y0ulL<#RqXb8XF%i5>0#^%OCOkft4>S&e zOEwYNqxHch5Lq|3X7#K}#IYlBMx@QT{YyDHwKCFUB7F^5Tom{QzbvxZgeFR@3Bj>X zUR|l+A;vH6)1|=)H(B?si#8+*kFrw83{(-21uz_RCju^!ljKFpKlY1bqqf#@*4aMp z?JvJPI&NnjXWi#Uz4e9d?6zkLp3cZz^YAlUZ*M8d#Zk+_dz9O?gF4E!=)oRzF-OD= z{%-<)swr(cP-@Oc%$U%}^-GVTKfdjmoFmpG%zJIG7@t034mR-3dUdf6kWuSlYL>_w zPvhH9=CFH1XvlaFq%qq$y%_r8Poge&zN0mP{zxyjwx z5inM8gAVJcA0z2j`LwE3xjITx&JwW6_;y%Q6E@JklPf7&&l zm5)-9MNV?pc1-l~K5S|e;Bar7I+9&-vM-&tKezg*ow;)YwF47eJjW=9?=(o!W{yZ* zha~r~swr~d);B7kUGzWM%dq9K<*BnC_A*A6a?hb!nI>~ms8Oy?oja=a`We3Z3v!Un z2B0#PCAzB=b%X#jYAm!-e}W*V=s$yhD=n?^X+anD%s1mtTs7igVg^(Eiv{xn-F*x0GWhJFKp^}H^I3=ajJP+lZ*fwQml?~9#5VLP zw>(EIQTUeKH=>hq0*U0lH$4|gMM+2iP;C=m7^T{7Z29!|txsS0-lmS)K7G?3P2&md zl4{$degC-ASos0}=!eW}{G*f48*|tG_@XV(whIc4s_cNx9ELvO4kQ-g2(!4@K#(GM zcT3sKm;g#}#%TqOTZmM~gbqmUr_Dh5@DiE@8vDB!76^a$g|LM1mrg~*qTCM%dT03x zOdH-%<{^{b`JcQ6ru;v810g7|qghgIa$I2W;kZyTgi-Itrei+T2v&jB_GS7f=b3?| zyOX@gkG~I_evibb<0`H8$P%)Q!PswjG*-3+P~Q)q28T16=3*?GN4biW*MyiAE|(97 z)rY%vWk|)X4S>rGt^#NRSX0u2Ar}p05xUh7;aMhw2k<_TBqFYrf!UL6Xm2}tA^&qO z3mG@{!`J!E$&*=U{?YvTr0=o4yd8Txe(S@FUgZb-&SVE>p=mgyh3#`c_W%n1R%i(f z7%tB{{D4LJ5Io_yPXI~_@BF;TT0YokR7;V7m1Y6`Ro*oBD5K@hA>F;lY}A7gg}vJrEs*--#}z#;`a-|RhA{nAu9tTh1iO*3hVxV#2&!*|7+}lFmrMN zc|@j#6~ougvf2kuo;<)i^Omb#&QjCH4pVos+D|_5M9I-eCeT~_(y&Wp0l9wQj=2N- zK8kijM-lBN+(E0q#T_J*D&YgpDbue^77@g#2i`!QO{6+l=aUpRR$Eyl87#HM5#CwY zFGpDI1y4M&Kz)k6Adhi1!*w3g#cCrf=8!40=l(yvXJ#

v_-2rcF-PPXC&3E_Kh$ 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 XpLxoEqDV@O#}+R!3HI=xso?(riteo( literal 0 HcmV?d00001 diff --git a/Effector.Plugin.FiveLakes/Resources/Fonts/Roboto-Regular.ttf b/Effector.Plugin.FiveLakes/Resources/Fonts/Roboto-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7d9a6c4c32d7e920b549caf531e390733496b6e0 GIT binary patch literal 158604 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

v%Q*Qgy;tdJj4ZONjTx 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

sDMz7$^SDZV4x`K*fov0l~+M89O^^Om^v{t zqK(rvqoNG+rLY5Lj8g1aq5g(rkjMeqvgchi@0`0EHmtzE4eAHiuGOvP8(FYav38N; z7Vq1qRI|e?{&Ds@|77l*FmX?$@pQR;ShH91S<;IHEX!1uEtjO~AYZMF``QV%Nsw<; zggQ;`R2tLBt=ViuR)V!a;V?-wi=EBlhWc-bxy=p8TO`hDEJ=J14+}0wr+}CtD}3^M zo&#iSSO&Wx%1YhK3+sC5g`n>I!Cdgw6gE@?mdhlmqB3BJTh<_B)H9(Kx;iFoSK`CS zm=_`rqQ)167dW`a zpN*pOXLuFtzUJ$@p-^EN^yj1!@RZ))?Y2UhmeYqS`U z)I6zQtN5IMrtRA|t;N*+`=`45KJ`-K)5YlPFhm^a_(dHF`b$A8F->N?o%zHPnAszCS+bY*nM=lN(fG< zzuM79(H>kcP@upOA0PSoYnS&ejofG)=-qkQa`nSX%~}i@Y-CE?)gdHfumgIvu$+U> zS~O@15tA$-jvVx7g)QYA{uI9pRztF*vFXE~q)ZY0)HPanwDUr+WPt8sMIb%kcLWY2 zqK(2F*3=gr9)6=M&{TbO?0UV+s4e=|pjGeNdVq_{Mj0tj%{f>Oc zs3G5h@kJ49;rqV=YrFo~fk*gDGX5}Ll8ti)tqwBJyGy`wofXUdRS*rZ{i$wWz=I|6 z()+TUT_h}O-t9ztV`TXC7IS)Rza#uw5qJ8KcQM&%gZ3xFn0ee@_O~s%AO&bG4_nzdtZNvGb+%vo3)o z%+o4sbexVyuTvTV(&+JDs$EQsyQCQ zAOLtI<{0YzoYQKeGMD-ziAa}1+mF2RQ(o{aB%Kh8lYL}}3b|Awi|BrG$tC;ERgX@| zCbDgtHd<%w;2pJ|`m+8Q>z{-Snq&R^Hm}I&kkW+|6*yiHvzi9vMf`c3T_hncoHoVy z2T|AtG}~gdjWf=A^2xRBzqV@iVB33-A6?7(t#!-awqJSjIBn+Cc{fUxzA=Bw49lfi zljeV1w#>)#rp%I0zcoJmbbaP$vg)_>zmd_OWoCSCymzbqo~troaO6N4@cz!7?;H0A zM-DaaU)zncI!+nM$_l+Q_CBDjh2geQ(UNc~CxgGQ9KLT|U~HL!1?v^5)$rKX zpoWpfi&iSpzEcPHb}&on{ipMLFSF=FdOrCc?1YT z;)?~81qZE!NZGGC+uWy?al`m?Nt$zJ>eQXWuO{(f= zzUg4A_w3DpIt}nf9oV3SEFM#-MDvCR8a6LcDWJ7W_tt4U*7z_m^KwA6))Dq{6?-$BlcKhu1z2CvXkw%J=Z$*3c zW>!wtZ?%sAN-x-$(B3z~d+A3lS@grcs`lcPP1MLh+wJIhYM(;;iR7VEXu4#@vQKfh z;S3DY{y;p9erS_L#QPrKOftWD-}TKT^BeFOBT4lZWEQ()h{s+&a4aR-$@@G=;)F1j zW%!NNa=9^Ll`&NL#c=rQMV?5+xGe(jr3iZksa^N4Lik2)Ls{qpxrBtzb%k@pSAPyl))oVSGm796|qSFYWY?idJF@=H}I z0QU)u#%Z4<4+jddR}BqAF#)E{&NyCBM-W$b4?@@h3=2F35yv`HNCNa37x(PBaXN8E zYH-}Rx}*Dj`l*t1@uIqG`RHTs2A19IU$+0?(aUpE;h#cv0n4tYgU)c#6m(lfOJ%F; zxjy#UbG5g}^Ih)e5uzzQr|&Eca4#l08EMvEEe9~~D~)keEm03UcbkhgqKoJu`iKEy zh!`P8iz#A;n1j9Ri^X!WT14BbtXhEs5f;o#pFMN>)G?DrrVSf9Xkfp-y?S=*+O}iM z)`*f@AIBWTg$I@>h=|FkLw6V#(g!$<2Yop<&aua@Zv;11=U4@bgbf%W=9mftONr4Y z#FxTdA($}&y8DO0q=S&|@UHPMs#6eR(w@%C^S2*uj;9nB=a7u*Ak5>pT4Q?OzSE}l z?=wx7>pUPns(htkeNJsks#`xP$!1GdPb8F&iEpdu13I-H*!l5=5f?1w-x>C3h>W{n z`B}yf%lX1mH8w703XX~`X742Z?VX_>y`TL))um32+BLi6{62#JS%Zi1KczwUi4(gI z?>T;a&(B&mtK7(^&?^zi$@ZI{HEhwM;qV46TQE_Ocl3grlAd*$PBd2nh=eDuAi21^o~Xj)}+40CR{HC^2g?d51j${sAHWu_|Ph zF0HtFHm6=r1FcZW@=dz#UNLv4s=h62RgA9{8`-kf<;$0oF)v1cladpi6Rp1gdt9B8 z5i?s%TQg&Z9$T$$Tuk%Q2^~{A?Xfr0yccOC&s~hhny4y&KQa))osBx`e zzlOsaRu4gQG4s))^$(FxamvRxpQ)olNHgL8s?hty!~~YSLQ=6^M5K}37cT5kO33;N z$*<^B=Ox#WmivZ7KXF2zHCroLF1TFR_Q`c@);hrNc$Les7WfMg{`{EZdX~e2S^(Ye z?A&=#k>xfT=_{^$1Y$RA0I}_Pt^yjzY2RxjbT^KC`JH;y%?&j~uG=WfDHnI{d`D5k zuU}ok1QC`4Mh=$~mK|-rwg{RcKhZ%pJ)$EBpJEI_ceTBt_PZ)?oRA-1v40}d&%q1d z_)}Z-bfnxN{~%rs(Y7nU=)0iJixLjM!X_Q&+=K%@P&Gt^L?py22#b7R`HKCzvZ`g< zHZ7ZN_&~ubm_Bm(@{xMIl$3fE-@$;C^!a9Op`4%xnEIS1$`x^}8SLFP@%9=QJ zv7D@*z9I{J^zcJj;L1sT{Dc$p{#uD_`EESCF1;^p(EAKMzTnTr$0JKUfo0K*5!umQHX1LZ*QGH! zIZMZC9WUB1!!IKeOb}CgIF~=Xz26h*@`3%n|RZzso<30;oex=2+~X*mqi-{2v4y<`{>0NxYAhT@@dDmF%^s zD_1>PUd8W1Tpp8NP>iEY(V}_ws{EtNo_}ZS#*w+k0X^Hm(#HI!Bh?B@&JDGWl9Nq{ zq*#vmhhN_Lho60_GTk-*fIMj^uT!2(o|}2d1n_*!1^ZzgOmCrIP&+9(JHeUl3fxZc zPvJJy39{h>Ef3i)9FUK756|UH`4CX!m|?hLp2caMjQii*GVV$LTi?il?5xF$wr*Rz zc&ohjiSdZU;$xZ5_~&D}X5YRwe`f64NA_mqGZFK~s<1&kpAV)m3XVL&+{KlT^SJpq zt*UYJONVjurW6+!r>8GklAgX$Q63rJ%D_i*-`_IGxb?Sk=<=0=M#^hfuNG?m?H z+R4(Qze!<#R~bw^@V9f~X)7*bC7H{~%jWJeg5|g?4Mwdi(T8#xuiSXxx8cN-DwbkK z!)eHKgXw{_QT>q1`?Faubv(EZel<3N5tok2O7E>|FX?UUa@xIj5fY?9oojGVM;aQ_ zplnf(Hj-}k1-dNdTSc1aR zsvo`j(apmTEb{ckUSraR_37KIxO}9n$}%pO2vgL{Zyx?=%Lct*n|_mq4w_se?inrq zZdy`WMVhokf)+QeMV;@-N2e7=h|H647f+}yS7KTH(kxGH5APe`SZ4%lm6#{=o_Lav zc>*h~;o^yjgXE0UAfGUnRd~&~WtIBQPGs{{XAmCjCx@3iXn`L9QOosXrYYr4(-sj= z2T>Y%Xi%;+7Wg(W9$kzW%YI*`*AdZ6x{1p(o%3lU4&)wBI?Dw81st3PWty0$o=rSd zCQgGgt;y5=kVb`WMw%&{*Q+wxUcr~PBO4rgBI*R=YU9HhZugT~u3 z8tXkQ6K=oK#dy=7_0vTB(&eka=58moj8+n30^q=Vq09C#_#uDC2T;5bdVcdcaJO}| z6rD`motQ|ZS&K9SEN{5dAoc=9L+1R++rc>_zV4cy5#%K5*?^(yfM&bI7>w&&Q zKY`%?9;JMihIww{Zadn8<8B`iN@+L2c1D2fX;Bq9K0GZ-(i`fG^8`w_gEexi9;ECVuXCA=vfOEW?7Xr4U?NT>XNB! z8i@H&hqSZ~dTiagu{U9U=dzi7BlXYddoh0=BUiy{#dNuSET8L#MWVQwN8b^DJ8>P6 z?gi~_JT$Mf4m;^V$cNv{)R9$84puSw!{2lLneS7^@%NH7xBGjlKi2J_a~#(n>cHL4 zm^j?}A9S8E^}mV5CCkv=)b35)oeGQ8bM4--4Z5MNTQ?z=k@47U6N-E6@LS zu2B^$Q^-R0l%fdsXk|Ahr-8sV<8a#tI#r9>mcFz4?4~c8-gL;Uy=l~zvSnXB$ANs& z*bHS4p}ABLc~l`^TA*@SK`5(daRuDx*2u2e^4hg;dv)*MDZkH^0($?R@Eh{t?e&l3 zEh9)S_os4Fxn zO-xf%#G?WIXZLN;JtC-VLU5hFEos(kXbHcG`3prwMz^oRxEyDUWW>A5Fz5Ax zY))ahFx8PV&AH@d^Q+w;;~_0{ZMImurefa+*3ULO-cv5C!=2w-@x2N&(zC#pAwk_` zfM?KomOx0}eGY%Y>GukdGkSAz+wbJBuYQOnEgMGvx2JC+gNpRQ5J#cXyDk zq`>?KCp_kduOyw&YFeNDL(H??Py~1>1*vy(mdJyXJ5LxsZuV)#^4Hai_cm=ZzEPBE z8S=0ByHmz**fd%{{Lk$VCf|GA*a7bmSNu5g0|9=Y62LFnvPb4$Ag4173HghozbP$d zO6s*Z zSe?=690u}7gS;aQv_`T=OFn3N%`+4$X}9N9W)&Z^b3Cyywt zOjctL8f}9sE6U?rH;un9XX{1Atva-B{9fx6s~)oW8-E(jjb(T4$ev1tZKwi#&+~BT+z9&Kt2BL&WhX@5 zUY=aF5KnzpW3bN#Z6U3-q}gL`)+K1!^lasPt33-X6MEAnU00FeHn zk(q65R_DVATR{C2N}AI1I1Remm(p`PmcAUHFb?)WlfAy$DC6F(uZ+7FcF&!+8^%g` z{>v}VD-OGyxNyNF#ld)}@0$rc`3O(0wSNS$uN9yN$a>d}DsLK9ugeN4t<=6xM@YOA$t$EZ`*rQsVo$NB-hQu5j!c~R2zNOIa9T{c1W$v>AaKcXvp z?&y(o=ZzYbE;F<5+`S;%pTB$eyqvUZHB1MS*Q_Q30MR7R1Ai_ZX^jh$=d%yV(dyUA z<{+lM17v3;()~vrS%`Gx$ef3Ab>D`a+xJO3rRd+BJa}pJ#z(4BXsuk`Bkh&8BSyB- zms~!+Ysk9IkDco%WP{oU{4ddw#Oc< zyZ8I;tzFPEC&qUhJZ0F>UCM@TZJYJ)-dJCFVBh9ev%^E?_u6u7?^eC}&><;3yR8PF z(Ka*~+o2x|l8*6trXSJ1gRo+!!YZw%oIjs!Kcgviufit1PR`D_e}95nKIf5qsu-%f zzCL9>{Rds;tiaIRx~gUU6^TJL)0&RYj9HTU=DQEhp7=-lZb_X`YEIt))6%pJr2|$L zFSc#+z-l!wzP|UyqYElyhWUy9lVg%H0d7Lw(7F1BTMGLaejI1(3sK{+cv4)(kHck{Z`3i z+a@**3SKrLEpy+T`;#{mDLfSs`2(UuiZ|=kCZT>y0R25k33a?bM zTv0Ff*D<>}F1$0A168fcc12TVd;V4)G<~IMyEhjuf2%{Y`bn>)&)B!Tv#nA0ZcXZS zESa28r)BHfam|!gwK|n5-K*~KNt1@x?OnQ5$65nMjx?&qCf2W3txg@eqHS7g8iZsZ>-=O`u{@VId`|k2;h@!EoWZ9OHvsQ1~ zG4Gfzx27~`(X4r5y~IL@X7SGKH+@S;W!ba|ONS2By`$nA*00|>7+MiLZVv${kG%4Z zGo0-R3p{W|-!o;(9;2I=+_B&2^-%YbC1ZdLT%Q^N3b(^$p+H{uuv_`dxHKWSwUB`|cn$W3aK=%g2 zCXE`VSE*4e>XjN(kUxzbFLRwi$N$@yko28$*?ve?X^5k76Ps>P^j(Y6*LE1SPLTs< zNWFG)WXvm=6!cm+ZB(n_1JYUFsUlOWqm0ti;5l0u9s+11CH$=LFQPU=_7*D-33w0? zp5W4S7%$4b?l?zdhT>3o(`hDSnsj{-NWKO^{87+%+&#yhXM3VGx?lms8?8!CjPM%o1_SF6k zEn1{@XxThfmYTb9>rs&VTjWnK%D%h_@T8Obo0&x>M?;60>{toi-|c<(*n(wsu_>9yY7}x?Q{M?b;3-*0%kSAxiJ0 zo?Tls@6`+SLu0aj=yyEEl)A!WO4ciCzth{Y?<}@2Rm-V=-ZkDbetGjvgk)O1ZXL=r z1LNWZ=(CrX3CwiI%=tGxs}-C+WXd|@$)!(>-`39_Is2arZ$4O`IbzbbZBx?LR+!m+ z$h?JvyHD4urR^$T;pn8xx4*kG>1c(B-Dz)q_+ifGu^Aa-C#+hf1`e1zbLg=7^SQn| zgSK+d#_TVsZ+IUF)HlZLdFxv#z4%bvwr;oX%6wP8ltqnizE9bg6xeWnkF>2Jn`Td5 zJ9+kr-MgDMyYt`{UjF>Zi2lQPST1mNxl&4z&JE}9IdgKuW*Txs?#SK{$o)F|CHUrl z&fXA`%f9f@m3#NDkdMXa@#9D1o@I2_7JaaN$9ox5I(8;QA#mbqP-;u%ZiQ-Nx4ReR zA};*q%TwRWPY3;&Q^|fKUuUn8c#PAB_%(lH9c&c9qX{{c9Ch<`W=zhPbklsK-Tag8 zbYa)SUgaw>MavP5wB2H=OTmP_ac# z5rwtsVg#=9xMt%TiK_{&wYcWt>Vc~-t}clCy+!d6y`bP45X*xv{2p)Fg56oLVBze)Bub<86?^oDNV^r+C^3S+TY-B3-hB_h zn@b|hGEl4l&SLs){4ONw<0_BmJ(Tid3F0P2;GSPi6?N2Y@Zp{=Qh;-ywoohqO+9e$ zNq1$dsE*%*={XD+o0KAsGg?Wplz!t(-X)xVA*ZL`J(X*CR#o&<4vQ%Ky#Nl;RrG?Q zGTm{N#MMs`Uh(J)#ljd;PVWIA!LcSfVqYUA!r_VaMe><~#BJxl6Z0)~GI?yA;)NT!DWR?pJVa*A7G0sNT$apt^f@ zEr*<$e=orO*+q4+Rji{rp|VrndG1tp#^+8(uk&pWs2 zGmd+fiD=_%K>KRsbwn&+{yF7>+5yR;tGq7yDGk2gtX>y;)eNyv9W16RmBePW>+MR6 zXn^PG$`jFB*(|V5lJlbw_UX7U#Jv;lFa+9bD+R@S*bTgeWKSsr{tk3Zvuts^MspY$f8g-icfeiAhx`DBbqWVHjDjezxBEN z#J>Xgj`|OLuSbY@!l|!;4j3TDfsXxrQ6IF)$wMb^UHoHRK>Ratn*6h){zi)xUV$RZ ztGCF)J|dytKtA5M28g59AhgSqh_6rjZ3vfbsoEOt!&fw9{c;YvsHNzQGMoKLckpot zXnMr_bm=wo9qEZZj>aZWT0q9Zc+w{LhJ@gBdm!C#-5KW{jaknl8k7kG}7H`Kjt%KvH zwX!&Cc_P+m*P%a~3LnfSKGc203H_E>W%*gG!m-F_tha$9OeCpapgu^>P}kg!7C~;& zHcZZR0f*9eo9M7G4h4RzKh;i*BMk+;pcpb=@KNBzx3ONPhC% zoitKABw3{P!ZLeS*wm(?9_VB~x$jod31#f5XF*r|fO~rpk6_}_kcU=UJ~7eywrB`h zspqAN-TGG4^FNT4vXGSnBGeLuG1UOEo^+O*XHGs4k7yj{>NB3dyZH5jyU_YNw!Pr_ zi^mer@!$2Gi~ldbBMN<#W5vtfv+kp@5RCyev^&rG$lXWBpxvK&>3diI_o6%DaXo*& zFLw5qu72~SchA1q9CJPEo9XXSjxY`T#l0$EX5zdnZ(>g3jk!r@Je!K&6svTr5aL5z z_y>LRx;{yqq)Xk2DC7k&rbd5^G4C#U3h`cwiiz02JQ-^O^R)r!_m+$H${S*ydKvn< zx7cFMa?Wiq=TZ8h|LKSEK|K2M?V^^tA8}&3iwWSnFOA9d3vtQcf%Cx%+*h+)uwgD|#iVp%VCVQfnI?$SOLb-k*J{)&&|lr}^3 zfgWCq^HetiUk3D01;q=`Mv2ne4pAK;f2&)Y&^{;dqnhaC6(>4l%-;oh&C|TG&!Z47 zZ|sxE2c307M1bBQidAgZ#zWUGhi=@1dt+RIxUS>xr!-c^??S?+^}xK~G;{~_g1T8O zx0J^7EBwtwukS<`(9^CmwiS;1ThOFO-MMp=LqXIm_gt z&GSw)BHwMeE)nl=Kb9vi%EN{CMR(%O9>-sN-9}pQL&X@8@n&XUG zz_D2khYoFsF_Ecjo8mqT*JAZ4`V!(R@Da@zOGHqeX!Aq@)eqO#cri}tDq5&NK#vzg zJ@n^#8HfD(tFy##wHfZdm;+A29B`6IQ&)=icsEe(gmL3>k?EQrYUTO6RMZP-7c+2m zCb=S6bpC@iBC4Q}UKBbwKb~2H#jy&|n_;M9HGVg6ya(9GK`Y^n88%^<#ITj)XFPAs zFvW2mzuWNdw*0o8;}blY!FXmeoW*c9!#NDo8E)lVwlU0NxSin+hC3PVW}JH%?q#@- z;eLj%bG}EIhNBFRF?@sJae~sHQp#bJqgsv1sKzm@&aeg`V)-y64tOKZ_i8}mfH!l% zn>pZ(J=zqTg*f0Xhy&it0dGMZ@MaEp3*vycAP#sl2fPJwz*`UpyajQK^*WF!~t)_>?fSW0dGMZ@D{`YZ$TXJ7Q_K>K^*YL>0AVf1Kxr- z;4O#)-pm1S=72YIz?(VXtr7>kRpLN?Q3E@i@{5|H2w-jaXXTeQ0dYQr<268UhQYuV zDiR!10joP60M>Bq2CV5g30T{)6)?r|Ct!Pi+X3{4!dLtjU}yf_MHImA)$mCQ6>At~ za?14#H!$4D@Cf5M%J3M&Hy9!cD!x5O*kn!05hVhJC=tQx3~K;}fzBTQYdG!#)`quS z7}8&Y$6f))kAMk?=NgXvFMk4dM~)GqkRt=omth%(p^p1_LUWi(Km>BfSEvP~QR4}}T9aX2!19o^UjQ33Y{Iaq<5xUM z;@>F@+cJb*8qYhR6y?F&p8z}a@7?@%55v6-_c7eh@Cd`B439BXiP)=|LG$ z4BudQoZ(5P>J-D%49_q;M-+ksC=u!o?fRhG=t$xhO-#XW;lmoIzg1^Cs9QdcDw}`?)Vlkl3@(PY785p)~cXp z2{vJv#IP0QzY269!4$NSD$s%SyDh&><=-6~pW#VI$2q{x{CghbT*+`1!_^GeFkH(p zgW+z*vxnhchWi-qXZSkfKf?JQWq6F?8w`&#JjrQJF+9x>mLgDcjwq2uDHqf%%B4mT z2h?c5s?d020KFN8!n>_1ICB;-l3@(PY77&MU+}!T<1%0kM{B^EjuC*h9ln66j*kI5 zI3@yibYuZ`=HD|I=S+sP7|v!mhhaLyd5nK0!&MAdGhD-PEyE0knVkE2h8q}eWO$Nu zKgIAg!!r!e5e+CiN(7k!osb!n5n2?bh887QonZ~YD3-}6mdPlV$tae|D3-}6mdPlV z$tae|D3-}6mdPlV$tae|XvP!Gc%m6kG~teAFjNlB$Gn3&ghO-&YVVKTvu45BY?q&>o817}bkKulXM;IPuc#Pp2 z439HBM|nZ!K_SWr%GG!(g<6wgUBGJKwum4Nf*Zj{2qd>zzJfqqdedYrg^q@2g4Sjlh|!_^Ge zFkH(pgW*;#%Ql8t47W4f!Eh(TU5>@TxtrOLerVpYVkGm+EL!1gU?ijy46z{Ywpu`HG@;3poO*jvY4veff78hN1soZC@Uk zRdKI4EZB)G%=RwBu>Ts)PpnOA}|$KFb~cIjnj!UiSu}L0rTlMKElxqw9bPb z{}V79*EbK;YL;?h1+kJ?MXV-nA!8Ghl$V9{!!vF;&I{$;wj>3;u+#u;yL0= z)N`KrGVv9S@EF{-9m(2JFBOXes<~ z5m(zljGB0k(|D`TjUOW4_eP|?3g5T@?8p4w#Njud!=90N){TdMG)CUo2aILjNz_;M zc$`=LfNmc3;2AX@XNul4(dq+?=bov=?h=++s@XQ>K zdx38IQQ|S;apDQ$3vBf%=1&vP5YH0N5nseJZM^joy>XuSGVv8+m-Y$H3iKn+3UJ|G zfS$rgK`-N8@Ea>0=LyaMoF^LN^f`d>qH)rV9|NZ#KM7BFeSjlzUQNPTp)r=|BS(7-jCUIm1)d*OJ7?i zVPruwe27-Vhp>Yu)jrl_jEhf!ZsIOtJ8?I04=@?;8ZQHbh?zG&Lq3bxr4i5MIErU- zjc%d`n1Wir1O^coqht#HP5_AV*pKoW-9!&?I?7)I1`#uH2bm5Qja?d13rA5)qnqdf z&Oi(=3>ZYzckmgwNAw5cTXVo^#OcJD#05k>vS#4C)n$$nj}ea(PiTaffXb;YD;LpC z)K7p9KfW3O z3n&Q-8r?(>a6T;j5~zD~KI(o3)V(<$<*^6lHR|4+55`~OH_LUuq_bbrd1p`OJv|+7 zLzURC<4Ec7j7A+tN=HBR1?o6bI!4?TppGM@TMyxCoQ`*p{=h}dXECqiNa^T1jXI8$ zjxnN9$C1)8Mzn>~#52UR#B;y_~LeFQ@aKo6dV~CR)@N zI`sNqyb&Q9nTZx@yqlN|Z)Bofe+25cs!X&?BWA3D`rRrM?b2lyFyF!a0b(cdAn_3K zFj2olWulE5^*dB1+Ne>#LuI0k+S+O28RA*uIgMx?%Aj>ni`Hq3(>l>QoyT)7a02&C z0WLy|DztxzcWXp>jT4AdfQxxPFXs8Y7_Ga4J^FlJ%>G)8cImu6s~1DFMtxQ3;u+#u;yI1ba}~ca9|?ah!Bt)3E@C@zH*pWJ3?up^P{+*6EFCj1!&~!H zKpitL!@KjdKpitL!y9x5P{+*67&9-!9q?`BbAE^jUS{byd6}i- zX!9Vah?4>jsIc^Tf&!J>4WybRY9jXF+VhU>{mL|(Moa;hz-+H$Hb zr`mF=EvMRYsx7D5a;hz-+H$Hbr`mF=EvMRYsx7D5a;hz-+H$Hbr`mF=EvMRYsx7D5 za;hz-+H$Hbr`igtt)SWps;!{f3aYK3+6tR5IZ!4&_f@&+Mwt{La zsJ4P?E2y@DYAdL=f@&+Mwt{LasJ4P?E2y@DYAdL=l4>idwvuWqskV}8E2$Q59yk*! zskV}8E2*}UYAdO>l4>idwvuWqskV}8E2*}UYAdO>l4>idwvuWqskV}8E2*}UYAdO> zl4`4{wu)-2sJ4n~tEje$YOAQWifXHmY(;if%3~hJ?~QkzONF&mSWAVqR9H)ewNzM3g|$>zONF&mSWAVq zR9H)ewNzM3g|$>zONF&mSVx6*R9HuabyQeKg>_U|M}>7%SVx6*R9HuabyQeKg>_U| zM}>7%SVx6*R9HuabyQeKg>_U|M}>7%SVx6*R9Hua^;B3-h4oZePlfeVSWkuZR9H`i z^;B3-h4oZePlfeVSWkuZR9H`i^;B3-h4oZePlfeVSWkuZR9H`i^;B3-h4oa}!1z3( zk2pUY@P^(GsOPX6a1ZGZ)N@Y_jL$bPKHtFjd;{b24LI{rlJWViw1cQE>};i-t+cb1 zcDB;aR@&K0J6maIEA4EhovpOfNIQ+R(?~mww9`mCjkME9JB_r{NIQ+R(?~mww6l$N zw$aWu+Sx`s+h}JS?QEl+ZM3tEcDB*ZHrm-nJ3D9x@n*DZ2kq>jogK8ZgLZb%&JNny zK|4EWX9w-ckRUQy6IWwCOmg()bkfju>32ao@H+0{6!P&{{(qGf6;{Kgf63J znVUF&(Zub}U|;F^izYlH?Zj`+YW8NbH@8$(A$tqiTgcu*_7<|YlD(Detz>T{dn?&n$=*u# zR}_OkBYPX! z+sNKV_BOJ&k-d%VZDemFdmGu?$lgZwHnO*oy^ZX3)VF1i2W{D)2Ji%yI@VD zj@a*lg-`H}ab3Qh<=a`lo#oqEzMbXUS-zd+ceDI%mfy|tyIFoW%kO6S-7LSG<@d1s z9+uz3@_Sf*56kai`8_PZhvhqPuYcL1^7SnB|59bl~ktaX63I$5iewK`d=leIcotCO`lS*w$^I$7%=YaL{* zgRFIswGOh@LDo9RS_fI{AZs0BtwXGJh_w!})*;q9#9D_~>kw-lVlAwcMC%T-)?wB< z%vy(8>o98_X05}lb(pn|qSiI*C~9fcQ6Q`gBkCy7QPjeI)Y7Pdh9oVAX#)(O@+!CEI+ z>jZ0^V679Zb%M1{u+|CIdI7brS}&j$5M?y#c+m?eqftk4PNB>dppMdtaGDlQ)52+5I86(uY2h?2oTi1-v~ZdhPSe5} zS~x=sXK3LJEu5i+GqiAq7S7PZ8Cp0)3ukEIEG?X+g|oD9mKM&^!dY54OABXd;Vdnj zrG>M!aE=zv(ZV@eI7bWTXyF_!oTG(vv~Z3V&e6g-TIga7p^GsD%q8Q!y9?JejXGA- z#TY^to_79-ypGj$;b}*sj@5MGX-DUEtftG-v6?Q%5V{yc=wb|^i!p>Q#t^y~L+HYj zk1nZW2wiyc(WqlJU3l`*sADxnHB5c42F%!2?i4+6wI2oUoiK+J;x5v>Jc9t4Pa5FqA3fS3mX zVjcvDc@QAxL4cSC0b(8mhnIs(DQ~k2lPA$5c42F z%!2?i4+6wI2%hi|O93MC14QHph<8#TB0oSxet>x22O{zVMC1pE)sjF&et?Kh01^2C zBJu-7J^ApuRyGN1!C1J5UXB+SoI3Ts#hRZy#lf76^K=@K&*NNV$~}Ut6qUv^$NtQ zS0Gls0I5h?3|*Fv0_9BRrrHt6qUv^@=Nk_JE5XaM1%U zdcZ{wxaa{FJ>a4TT=am89&phEE_%R454h+77d_yj2VC@kiym;%11@^NMGv^>0T(^s zq6b{`fQue*(E~1ez(o(Z=m8f!;Gzdy^ni;VaM1%UdcZ{wxaa{FJ>a4TT=am89&phE zZhF8?59oCrEx0o3bHGgxxak2mJ>aGX-1LB(9&pnGZhF8?54h<8y)s1G(dU3(8KP02 z1A1kMMtu&r=>a!A;HC%M^njZlaMJ^BdcaK&xak2mJ>aGX-1LB(9&pnGZhF8?54h<8 zH$9+Np@5MdaMJ^BdcaK&c<2ESJ>a1S^lFp0ac|J0K(98@s7HZ^9`Miu9(uq-4|wPS z4?W@X!MudcZ>uc<2ESJ>a1SJoJEv9`Miu9(uq-4|wPS4?Wa1SJoJEv9`I-n-2AfurV)s~zlX1By(Noei@c}? zs+p=x9ale6SNwwf()^12Uh{YQm-t@_NDNpT@KLYXy|Q~1^=jz#O0V~NI|CB~Hw3;P zG$CkX(7B*bf@cPA2yP3$7!n#18?q*3U&xg{QGIIqTn?QXS`zwP==*&~_RZ@1bl>xR zuY?7Kxx=cHVVvkl&!RK^cRZ27NU+d+?ps8_>kdI!>10PH#}$f+Tj<5e=z*&2svWFh>;`QBbJQ#YGmk0 z$H>@`$s-qz+;?C9`-a~acVFs#3-4Qg-?~u)MvWZh9yN2+qEV|xZ5UNIYR@R&{lo5$ zy+8T>h4(MNf9?HM_rErJ>gai+b4Hhpt{B}i`sx^KO#d;%#yH0$k4YPoHKt(9rZL;c zbc{JQ=8ZA$j`_`)zea>aERDDp=@&U5a%5y&_j65EBKJx9z4W9nksW1fq(VoPGHVq0R5#J(7NA@+lD zJDtOwan9+^Mb3QZMrVU_pYwU=>&{Eg%g!%dL9Rir2-jp+nro?RkL!9|Sezp+HZD1C zVcg2N^>KA^d*Xa?=i}atdoS)v-1YIH;~nE;$0v_pIDX~$_2X;Czv_0lH@V;UBzn$y z-txTf`4o>y{U;2c5I14^ghdmYCbUnuII;J{sS}q>Y@c{3epY-<{QL2rPO>HiO`18W zX43IVZ%w*BIcReK$-^hdO`bk^!Q|}8`I9$JuA1C1`PAf(CtsQT`Q)#rES$1r%JM1O zr|g{4G3EU!A5RULI$-L;sY|9VpZfOHcM=9A6eUz7v?Lr!croEZ!UqXg6Wfy_l9ndD zp6pDnOa2%?4pfw~KDBphSn8dr6{&TpSEnUUYnyg?df4>Y(~r(rHRHvZ_soo*Id$f| znK?7p&irteoK-Mu)2!{YKA3g&!9@?g^57c}zWd;Zv!~8}V@~fmgXTocnLMXx&iXm8 z&$%$?Qko-eRNC6K%X0_L9W^(4ZvNboxf|wI%&nW-G`D?j=iDoEKcD;6yy$sF^A63s zJU@E=hWW277`32d!6yr@r9Yki@xq{m84I%)KKIZ)56ylk`=R!S-pv@8F+C$KV_n9k zjCV6-W>98RW_#w37KJWKTvWE`!s0s@XDog-Yj)Potm9edAC7u>>cdALe*WPXAHMML zr6tiz%9dPOa(T&@kMw?I@*@|rhh(qGe#2Y0bkWlGr5`PeTUNL1i=2#{cXDUtzP&tc zdB*bWCxGbUe9k^ZLQ8(eY7C7U{S&Pf}LxI zt$B0JM{B-%EbXz*$38DwUv#wSaG6_*Gs}mhLuE>Oem=-dAD?AX;JB! z(!Z_^SlfT?thH5ZFFrox@#og1uFF`rYTep(W$S9zZC`isiGfcHdm`$IwNIRR;Dp$wdBEn8o86nIZ(g)HfAhx84V!mvKD7D#=8KyzZ~m&R zciDiltg?=>-;`Y~pI!b|MO;N^Wkltvs?@4itDV)IPy0Q+m?Z{ep z?eyA3wX143)YjGRseP{Y_1br9KdJqqu6Ny_x`?{?y4iJ0>eke4s@q=IS$C%H&AN~3 zzNqhAKd3&UesX%OheZ+&g+rL7-sz1Aoj2Q-dsbT`gy z%xcVUgbV+{e@{1VZ)|UTuJK~y7u)XHHhNp!w#04gwjJO0`SxMkqqa}pes%koJFFd1 zJJ#&ju%lteCrznM8BK3DuWfE@320f~a-`+8mTRpMt;wxfttG8>t#7q{*yh(Zu+7<4 z*Y?UY1D=V0X5lkyp4s`#b35hE(4B*Jj@~(X*N|PSc5T?zu@Kt&E22u3EAV=le}l)o{~LB_Pn>}@}4jD_TD>a@94b~_RiXy zv3J$p4SO5*?%VtP-q-eC+WYaoLHkDUi{CeE-;#Z6_Lc2x+Sj@7%)U4Gy|?emzU%wL z_7B_d+@HFC;r^xjOZHdoZ`*%l|BL%C?Ehf@r~9vW1a%DQi0Fv#nAMThQP8omqp_pC zh8n0#RNfh7ml94I@`bl}i|a|hl$@ZNz>4*az z1)VvaC7l(WEuBX?U+lcl`N6?K2Nxb(aZU3JM#RIkB)rt?8s-AKU?$cg`*)yGmfr3+H~~Nv7lp7#|n<^ zId<{b<>Ld7FFf9H{M8eoC+3}4um7{~*Mfe1Ed5o8NAT`1v1aBG{fC3rvwz6srj9p?DL+@j*V!U9K3RJ8uz z#2ywRO%c1UBd^%ub(9o&b8=UEiyn0pE;pP}HieB*%L-Q~tt`qbF3Iy2I8ZaUsHC{C zz?d)wtyK8Ez$$_NbI=eVc#0-39AU-Ra}9u+~}jzu&)qX`BpBrVsUoF;JQbMf6st@csuE3}pad$tpQ4~4xqTir7sMIWuUlHeWfrD9mj zgC(uh=G5v-uwSd!zclz z!)#rDjDP_cK?Cv2Zg*ODS%dI(gdx`5_^!ac;2mlWv%)chH3EO@cpv^=@P2DF{t7Ju ze{m6^p+sapEsJ;t;KJBTA*CQ}I~aIN6$l*i?d*i1s97onb24Jsr`!nOLDW z3t!osZOy?IVJ=!W-&$a$TMMzOEW^sgdZ)#BlXw_wWFA3`$!i@)G`<2eV=v>|o4>)_ zSOeyjcjFrtox%_E%>I}^+hJY9_o3=>rFmKeSRYuQ;hU{Ttv^|xTVEi~f5Q5A>-+e| z%~E)`5uW-F^v|2tThsj)+OsF=!4%`zsHRG zD)hml=+S)md>=gj7|vpS4wa%O)>@BSpIGax^*FD;Wj$$au+CZgt*7wC&`s86>x%WM z^&-Bm&|3uJr<;RCi1k1CG;1IHENWj7X5A2$=qLJ%+r$8IyBH|$5O<2Z#2_(P48c!* z-Xrc64(m(nFZlNBFcB_>ixFa^xKE4{_lwbDjEE4C_>%Kj5iMe@{}QqIMQta3MLbT7 z7jEG}+-ahS7nAU-;#0&_>m%!zB0(gIB#|sqM5>sEx3n2zrg%Wi5)b10opUUobyB2> zx%k%2e6avuC|QWFSY?Pz>u=Uq*2mVb@GG2)MV5G2ED?{0Y~dA4#WIm2a>a77LaY>d zVwHGQ&3Uk2JxiWD4r6V#AZ<@ z%B^>;U*L-z?^{2!KD2&n{ajRtN>L@M#nWPos1dcIPSlGAu~jsRZDPCFA(}+9Xc4WV z4PPqUDRzl=v0LmBd&NGnUv!8AqEj3chs0rVL_8~wieuuqwO5=F&xvmfpExO=7cYoY z;2jXq< zL-8Z=pW>qUvA86DBHj`ICEgW374M1v7VnFni4Vlj#fRb-;v?}(@v-=oxGa7xej|P> zJ`ukYSH$ndr{WLds`yM?6Mqz+i$94k#Gl2N;xFQ_;&0+B@jv3axFIbmq?AhfNq-q2 zd&%B1PzK3h86x}0P}x_8$$qjwK0!D@-Yy5qJLH}6E;&dJmP6#-@*a7wbjYD{m<*T0 z}6PLLC2yqqK_%PDfIOpu8( zNhZq_nJTBr>2ijgDIdU(Q9meW%Q-Sl&Xx1ze7QiT%Z2hGnISXfBDq**$%o|<`H0Mx zUb$2*lQ}Y1E|)9hN|`5D$wy_rTrCS^plq#=da~&ym~}sTYpwwwN&Bv3RSLJu2$fe(^jfHwMspz@~t*}#o-z25BPr6 zcFZ6j#`9Vep3}agR$H&C0#&HisK->1Dpn<`RIOEyt99xLwO)NoZBS3Djp`}2No_{N zsa#d4N>!z*)zfMVeq+8?)v0>bpth<;wM}hTJ5-ZuRxPSkwW(*+PPI$5tKDjk+N<`d z{i;J9P@U?aI;0M(BkEaoR2@SM>x6nveOvj|N%g#XL7h^k)fshGom1aYFRGW+dG)e- zMSWMjs=Cx`>fhAs>U-)9^?miG`giq~`VVzM{Xo5~euzlef2xb>$Lf;$iF!xazN^`i=Un`UKy)zoLGxK2?8ESJh|gn);*q zT>VLXq5iDCRDV%_Rew`ossB;e)eZd-PJDh?`T6b6HJ;I zki5(bu7DgnNd~dE1Y0`km0}q2AgTogq}YtPOoCE!3QN4pw7j6)ud}^UjE-D84M?#K z=Q0VN)~zIXMR(p-6B}*Pn2>3Byj|_Jt%t1Wu@OAIyH@bZ?!4dhrQRaHm4JX5C3*Qd zxdC}hdd)Cx$TMx2VYeaA_Sy`iHqTCjW_;ZcIb){GTNOOBn<98scRu8S9-2ZPy=7xX zQEqNQzPBJJZ&|=B@3PX8+<<&0A+vgx%kQxfFw6E*J`=xLP~n#k2$*fxFR<&+?olPA zpvOkQY`cDe?d1aRn!@6eqQW&Rb5%;g3YA;1qSqYbheG3rIkq1Pne>^nvb11@x2SY= zzPGfbPhrokfO)otB3r|}9<(7vJvIX7*&2%MWWHUim`U*bZr24DcjrSE^e_-o(qkiF zfo-OQiQfX^a4|OXHe!NFMvq%1k?tH)^yRGY)1TFgd912?hb=E(>uwX^8|D2VDMFswa#B^e* zM*F-^jSfoCT5U7lud}@pQn;&^Hi*qslV-@}0+#XUA?KX%-BJ55Zo z)6{W+D~h~pb5U?NYu>{U$fH7Y@oNGup~D>H_scAvZgo>&F1djDJACk3|uw1D`d{OCIuUDbnE>*O$FrZjBD#o9QDnZ)}zgmNKEyF*^@h{Zw4$)?B z%If{y4)QXZYg`f1Kfu zGyHLeKhE&S8U8rKA7}XE41b*Ak2CynhJU=_A8+`_8~*Wzf4t!zZ}`U>{_%!?yx|{j z_{SUm@rHlA;U91K#~c3fhTm=Y-G<+7_}zxzZTQ`W-);EahSzO)-G= z*KK$`hSy_wJ%-m~cs+*KV|YD=*JIl4G5j9G?=k!y!|yTt9>ec3{2s%fVE7XZe}dsp zF#HLIKf&-P82$vqpJ4bC41a>*PcZxmhCjjZCm8+&!=GsQ6Agc&;ZHRDiH1MX@FyDn zM8ltG_!A9(qTx?8{N`!GnP~VE4S%BHPcr;ThCj*hCmH@E!=GgMlMH{7;ZHLBNrpek z@FyAmB-8#R!=GgMlMH{d;WzgsXR_f>HvGwkKiTl#yk8|7{$#_SZ1|H6f3o3EHvGwk zKiTjn8~zl-pJLjdV)#=Ge~RHxG5jf}{V9e&#qg&X{uINXV)#=Ge~RHxG5jfpKh^N3 z8vaznpKAD14S%ZPPc{6hhCkKtryBlL!=GySQw@Kr;ZHUEsW!jM-1lAPzV9;keV4iK zyP|D=SG3LVinjS((Kf%!-1lA4HowcfySmJM-xY21yUcyx6>amoq7A>f@4L)>-(~Lm zF8jV8lVa;bO8>;9*!L}@sR0l1@i^ddJ9&tY$N`Tt34G}0qf+4GH*@+v5tCw%ccjLi zJ>IcReIcx{BMux?eUIn(|&urW81Xf9`7+JsWAbW_KEuh6Z`D6M>~!hc6+pA+pycC9osg0s{J$- zi|~}LkCd%KO0ObitB}&GNNE=-y^54}kXD!GH%w4w(FF+`5A0O`wEGRBz)U3!aKd;Ce zuqL+{uTA#RghaoT(xO6c#2A?|_C+8zCMGU07gMRLy(PIhfrz8!>bc&PAtfsj%dzvt z!OQd3-pq#-Ls-Gh1K)VjPEE9(gOtueO6R1e*q6lARQr;NG`Y|GWw|+d`T5?c;?>L6 zgr#=}6}aQJ?(MJN%KLZk)9>f{MZHHccJ(**ef?@5kU*=UjE;O=vR@DVMfyE8Hz1Ma z0+Q?`*-ldIB-Ku)*~xS}nPDe0?c@PFnPn#rGU<(1{o-OB!I^FEp2H+?eQr@b@&-i&i6Qwlu$(M}ikI^uv7L?wE=>#x^k@ntAj3%gwMJK^l8Uk7y2egqUy-H~QZa z7vioUhK-mFw&O{rnjK>@2iPBW-VRkU->+vt%RV~4yBUG{6yn~n9sw~^th+_Qb|lR< z*fZW{m$c(?%=f<~Zf7611AELP!ot90x6|w~gT0-IYRT++r_m#y4%u=wV|T7!3o`(!xFwpme50FLN{5U4mQ&of|e_7E%v+!^8s`1WFC_~ z%djpeKR<67&yhaFo0ny~bEtrwbF*kk-m%j&mEyyPlT%>??E`;8#g3g zB72uSZeJ^dcw^$ez~zOdMJA`OF8Wg1yEtzhGeNvhF&i-7mc77E((PoSojhbG8FrFs zCySWa7ifKVq6}uV44pADbk>%^qnezVf;{NP4LOiEO6GFB#d+Ssb$Q-ETN#e_V)@cF zz3q#m&gd5DdUh*y88Tu|cT8OS1V?)F{-F!oY+99}(^e7(XGeF6Aq>3>PSfTXz@zFtXVo=3})vJ-s+bBCauioh{PiZ3u}nJ*}5 zX>z2`&)(yJ!SIs-ej~CSDK+6<-4rrggS9%JV=!89lh3C{gnN@w*FVB1vK`hrIL#O=|MzK{rq3pOKt zeX!q3VNbyQFoZtwe!Xc8JZV``=;LWVE7hCrJ{clz2Wx1ABi=FXCM$g7bw~R8Mnv5a zAL$GGzmEAt(lQ+H7jaTr14lTbe7%#h9jQD?&_Ha=sHvF|zSJke6Q2(g_#QnN`lH8g zcj$vGhAM^M2BX?Qbg?#y0b=Wz z;S*!vUPn~8`(&UPfG)T*;$#TUgPvuL<{20>II+bThc8>7X;bHByr3L@j=?Xek$!_R z6BBVJQLuj!&Wdb(I@`lYC1vM?`}~r;IXKN!l6Nrj*_k-&P|S-SPSxEOAMPGJlm?<4 z@neT(8aa1F_(Jq(x^1%Aan~))u>A*3xiwMY4o7^AJIa(Ba%(x$+<&bJzK|p;sR^GE zo|^6Z|7wpOP9ww7q`~1Zld8{Q?eLH!oy>q&Y-=cn(T4E+}>kl`lXEwzWSw(fj$QsAt(DJA^x9J^`c7R|%|Nx@s# zM*Ne4|5)QlT}z+Gx`)kJ_E`%ua0cVXbF=HsfpcNjGClm%h#5?E9lPobeQ0U8If2pL zH`{sN|C0T`>#I@!%Vf9s`~LrBvVYuXqct;6DLu-0F`j{&4jv;g{BFI3jQM{T{kxuw z_}A;*;*`jLz1}}=UsMFH24f?9QTCk<4^!XijkV9q@HC@`k`=zj7nXu+!>DXLi25RHBM0|%cB3`$DOd_H)TOqrL6BYtuW?BRbx!~X#@{FZ+J literal 0 HcmV?d00001 diff --git a/Effector.Plugin.FiveLakes/Utility/Dictionary.xaml b/Effector.Plugin.FiveLakes/Utility/Dictionary.xaml index f206425..7b46ab1 100644 --- a/Effector.Plugin.FiveLakes/Utility/Dictionary.xaml +++ b/Effector.Plugin.FiveLakes/Utility/Dictionary.xaml @@ -16,43 +16,88 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + - - + - - + + + + + + + + + + + + @@ -65,6 +110,174 @@ 2 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - diff --git a/Effector.Plugin.FiveLakes/Utility/Dictionary.xaml.vb b/Effector.Plugin.FiveLakes/Utility/Dictionary.xaml.vb index a33f325..5af06c5 100644 --- a/Effector.Plugin.FiveLakes/Utility/Dictionary.xaml.vb +++ b/Effector.Plugin.FiveLakes/Utility/Dictionary.xaml.vb @@ -12,77 +12,125 @@ Public Class Dictionary #Region "Colors" - 'Private m_Omag_Red As SolidColorBrush = Brushes.Red - 'Public ReadOnly Property Omag_Red As SolidColorBrush + Private Shared m_Effector_LightBlue As SolidColorBrush = Application.Current.FindResource("Effector_LightBlue") + Public Shared ReadOnly Property Effector_LightBlue As SolidColorBrush + Get + Return m_Effector_LightBlue + End Get + End Property + + Private Shared m_Effector_Blue As SolidColorBrush = Application.Current.FindResource("Effector_Blue") + Public Shared ReadOnly Property Effector_Blue As SolidColorBrush + Get + Return m_Effector_Blue + End Get + End Property + + Private Shared m_Effector_DarkBlue As SolidColorBrush = Application.Current.FindResource("Effector_DarkBlue") + Public Shared ReadOnly Property Effector_DarkBlue As SolidColorBrush + Get + Return m_Effector_DarkBlue + End Get + End Property + + Private Shared m_Effector_LightBlue_Status As SolidColorBrush = Application.Current.FindResource("Effector_LightBlue_Status") + Public Shared ReadOnly Property Effector_LightBlue_Status As SolidColorBrush + Get + Return m_Effector_LightBlue_Status + End Get + End Property + + Private Shared m_Effector_Blue_Status As SolidColorBrush = Application.Current.FindResource("Effector_Blue_Status") + Public Shared ReadOnly Property Effector_Blue_Status As SolidColorBrush + Get + Return m_Effector_Blue_Status + End Get + End Property + + Private Shared m_Effector_Red_Status As SolidColorBrush = Application.Current.FindResource("Effector_Red_Status") + Public Shared ReadOnly Property Effector_Red_Status As SolidColorBrush + Get + Return m_Effector_Red_Status + End Get + End Property + + Private Shared m_Effector_Green_Status As SolidColorBrush = Application.Current.FindResource("Effector_Green_Status") + Public Shared ReadOnly Property Effector_Green_Status As SolidColorBrush + Get + Return m_Effector_Green_Status + End Get + End Property + + Private Shared m_Effector_Gray_Status As SolidColorBrush = Application.Current.FindResource("Effector_Gray_Status") + Public Shared ReadOnly Property Effector_Gray_Status As SolidColorBrush + Get + Return m_Effector_Gray_Status + End Get + End Property + + Private Shared m_Effector_Yellow_Status As SolidColorBrush = Application.Current.FindResource("Effector_Yellow_Status") + Public Shared ReadOnly Property Effector_Yellow_Status As SolidColorBrush + Get + Return m_Effector_Yellow_Status + End Get + End Property + + Private Shared m_Effector_LightBlue_SelStatus As SolidColorBrush = Application.Current.FindResource("Effector_LightBlue_SelStatus") + Public Shared ReadOnly Property Effector_LightBlue_SelStatus As SolidColorBrush + Get + Return m_Effector_LightBlue_SelStatus + End Get + End Property + + Private Shared m_Effector_Blue_SelStatus As SolidColorBrush = Application.Current.FindResource("Effector_Blue_SelStatus") + Public Shared ReadOnly Property Effector_Blue_SelStatus As SolidColorBrush + Get + Return m_Effector_Blue_SelStatus + End Get + End Property + + Private Shared m_Effector_Red_SelStatus As SolidColorBrush = Application.Current.FindResource("Effector_Red_SelStatus") + Public Shared ReadOnly Property Effector_Red_SelStatus As SolidColorBrush + Get + Return m_Effector_Red_SelStatus + End Get + End Property + + Private Shared m_Effector_Green_SelStatus As SolidColorBrush = Application.Current.FindResource("Effector_Green_SelStatus") + Public Shared ReadOnly Property Effector_Green_SelStatus As SolidColorBrush + Get + Return m_Effector_Green_SelStatus + End Get + End Property + + Private Shared m_Effector_Gray_SelStatus As SolidColorBrush = Application.Current.FindResource("Effector_Gray_SelStatus") + Public Shared ReadOnly Property Effector_Gray_SelStatus As SolidColorBrush + Get + Return m_Effector_Gray_SelStatus + End Get + End Property + + Private Shared m_Effector_Yellow_SelStatus As SolidColorBrush = Application.Current.FindResource("Effector_Yellow_SelStatus") + Public Shared ReadOnly Property Effector_Yellow_SelStatus As SolidColorBrush + Get + Return m_Effector_Yellow_SelStatus + End Get + End Property + + Private Shared m_Effector_White_SelStatus As SolidColorBrush = Application.Current.FindResource("Effector_White_SelStatus") + Public Shared ReadOnly Property Effector_White_SelStatus As SolidColorBrush + Get + Return m_Effector_White_SelStatus + End Get + End Property + + 'Private Shared m_Effector_Orange As SolidColorBrush = Application.Current.FindResource("Effector_Orange") + 'Public Shared ReadOnly Property Effector_Orange As SolidColorBrush ' Get - ' Return m_Omag_Red + ' Return m_Effector_Orange ' End Get 'End Property - 'Private Shared m_Button_Static_Background As SolidColorBrush = New BrushConverter().ConvertFrom("#FFDDDDDD") - 'Public Shared ReadOnly Property Button_Static_Background As SolidColorBrush - ' Get - ' Return m_Button_Static_Background - ' End Get - 'End Property - - 'Private Shared m_TabControl_Header_Background As LinearGradientBrush = Application.Current.FindResource("TabItem.Static.Background") - 'Public Shared ReadOnly Property TabControl_Header_Background As LinearGradientBrush - ' Get - ' Return m_TabControl_Header_Background - ' End Get - 'End Property - - - 'Private Shared m_Icarus_Gray As SolidColorBrush = Application.Current.FindResource("Icarus_Gray") - 'Public Shared ReadOnly Property Icarus_Gray As SolidColorBrush - ' Get - ' Return m_Icarus_Gray - ' End Get - 'End Property - - 'Private Shared m_Icarus_LightBlue As SolidColorBrush = Application.Current.FindResource("Icarus_LightBlue") - 'Public Shared ReadOnly Property Icarus_LightBlue As SolidColorBrush - ' Get - ' Return m_Icarus_LightBlue - ' End Get - 'End Property - - 'Private Shared m_Icarus_Blue As SolidColorBrush = Application.Current.FindResource("Icarus_Blue") - 'Public Shared ReadOnly Property Icarus_Blue As SolidColorBrush - ' Get - ' Return m_Icarus_Blue - ' End Get - 'End Property - - 'Private Shared m_Icarus_Green As SolidColorBrush = Application.Current.FindResource("Icarus_Green") - 'Public Shared ReadOnly Property Icarus_Green As SolidColorBrush - ' Get - ' Return m_Icarus_Green - ' End Get - 'End Property - - 'Private Shared m_Icarus_Orange As SolidColorBrush = Application.Current.FindResource("Icarus_Orange") - 'Public Shared ReadOnly Property Icarus_Orange As SolidColorBrush - ' Get - ' Return m_Icarus_Orange - ' End Get - 'End Property - - 'Private Shared m_Icarus_Purple As SolidColorBrush = Application.Current.FindResource("Icarus_Purple") - 'Public Shared ReadOnly Property Icarus_Purple As SolidColorBrush - ' Get - ' Return m_Icarus_Purple - ' End Get - 'End Property - - ' - ' - ' - ' - ' - ' - #End Region ' Colors End Class diff --git a/Effector.Plugin.FiveLakes/Utility/ExecProcessManager.vb b/Effector.Plugin.FiveLakes/Utility/ExecProcessManager.vb index 23919df..cf8958c 100644 --- a/Effector.Plugin.FiveLakes/Utility/ExecProcessManager.vb +++ b/Effector.Plugin.FiveLakes/Utility/ExecProcessManager.vb @@ -3,6 +3,7 @@ Imports System.Threading Imports MS.Internal Imports Effector.Plugin.FiveLakes.ThreadData Imports System.Windows.Threading +Imports Effector.Plugin.Lib Public Class ExecProcessManager From 44815f86fa6a16936607799d7640e9f9e96dc048 Mon Sep 17 00:00:00 2001 From: Emmanuele Sassi Date: Thu, 23 Jan 2025 17:29:46 +0100 Subject: [PATCH 2/2] - aggiunta gestione ddt con parametri e swing - aggiunto timer per csv output - implementata gestione calcolo porte uguali una sola volta - gestita barra caricamento calcolo porta prima di mandarlo a macchina - gestita barra di caricamento durante verifica porte --- .../Constants/ConstIni.vb | 3 + .../DoorListPage/DoorListPageV.xaml | 67 +- .../DoorListPage/DoorListPageVM.vb | 635 ++++++++++-- .../DoorListPage/DoorListPageVM.vb.bak | 977 ------------------ .../MachinePage/MachinePageV.xaml | 15 +- .../MachinePage/MachinePageVM.vb | 31 +- .../Utility/Dictionary.xaml | 7 + .../Utility/JsonUtility.vb | 11 +- 8 files changed, 684 insertions(+), 1062 deletions(-) delete mode 100644 Effector.Plugin.FiveLakes/DoorListPage/DoorListPageVM.vb.bak diff --git a/Effector.Plugin.FiveLakes/Constants/ConstIni.vb b/Effector.Plugin.FiveLakes/Constants/ConstIni.vb index 70bcd17..12153b0 100644 --- a/Effector.Plugin.FiveLakes/Constants/ConstIni.vb +++ b/Effector.Plugin.FiveLakes/Constants/ConstIni.vb @@ -16,9 +16,11 @@ Module ConstIni Public Const S_GENERAL As String = "General" Public Const K_CAMEXEPATH As String = "CAMExePath" + Public Const K_DOORCREATOREXEPATH As String = "DoorCreatorExePath" Public Const K_BACKUPDIR As String = "BackupDir" Public Const K_RESOURCESDIR As String = "ResourcesDir" Public Const K_DDFDIR As String = "DDFDir" + Public Const K_DDTDIR As String = "DDTDir" Public Const K_GENDDFDIR As String = "GenDDFDir" Public Const K_CSVOUTPUT As String = "CSVOutput" @@ -28,6 +30,7 @@ Module ConstIni Public Const K_HEIGHT As String = "Height" Public Const K_WIDTH As String = "Width" Public Const K_THICKNESS As String = "Thickness" + Public Const K_SWING As String = "Swing" Public Const K_STATE As String = "State" Public Const K_PROGRAMSENT As String = "ProgramSent" Public Const K_PROGRAMSTART As String = "ProgramStart" diff --git a/Effector.Plugin.FiveLakes/DoorListPage/DoorListPageV.xaml b/Effector.Plugin.FiveLakes/DoorListPage/DoorListPageV.xaml index 3034b84..74783cd 100644 --- a/Effector.Plugin.FiveLakes/DoorListPage/DoorListPageV.xaml +++ b/Effector.Plugin.FiveLakes/DoorListPage/DoorListPageV.xaml @@ -4,6 +4,7 @@ xmlns:local="clr-namespace:Effector.Plugin.FiveLakes"> + @@ -25,6 +26,7 @@ -->