From 40f50c27c2fc626396a1640f5d67584a4dd4cbd6 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 25 Nov 2025 11:16:41 +0100 Subject: [PATCH 01/19] Update fam stati Jetco x compressori (aggiunto emergenza) --- StateMachineStati/Jetco/15_FAMIGLIA_JETCO_NEW.csv | 14 ++++++++++++++ StateMachineStati/Jetco/15_FAMIGLIA_JETCO_NEW.rul | 3 +++ 2 files changed, 17 insertions(+) diff --git a/StateMachineStati/Jetco/15_FAMIGLIA_JETCO_NEW.csv b/StateMachineStati/Jetco/15_FAMIGLIA_JETCO_NEW.csv index f67733d..1b8d90e 100644 --- a/StateMachineStati/Jetco/15_FAMIGLIA_JETCO_NEW.csv +++ b/StateMachineStati/Jetco/15_FAMIGLIA_JETCO_NEW.csv @@ -2,42 +2,56 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 15;0;14;11 15;0;15;1 15;0;18;15 +15;0;30;29 15;0;44;39 15;0;45;38 15;0;46;37 15;1;0;0 15;1;14;11 15;1;18;15 +15;1;30;29 15;1;44;39 15;1;45;38 15;1;46;37 15;11;0;0 15;11;15;1 15;11;18;15 +15;11;30;29 15;11;44;39 15;11;45;38 15;11;46;37 15;15;0;0 15;15;14;11 15;15;15;1 +15;15;30;29 15;15;44;39 15;15;45;38 15;15;46;37 +15;29;0;0 +15;29;14;11 +15;29;15;1 +15;29;18;15 +15;29;44;39 +15;29;45;38 +15;29;46;37 15;37;0;0 15;37;14;11 15;37;15;1 15;37;18;15 +15;37;30;29 15;37;44;39 15;37;45;38 15;38;0;0 15;38;14;11 15;38;15;1 15;38;18;15 +15;38;30;29 15;38;44;39 15;38;46;37 15;39;0;0 15;39;14;11 15;39;15;1 15;39;18;15 +15;39;30;29 15;39;45;38 15;39;46;37 diff --git a/StateMachineStati/Jetco/15_FAMIGLIA_JETCO_NEW.rul b/StateMachineStati/Jetco/15_FAMIGLIA_JETCO_NEW.rul index 9c6eb6b..e98903a 100644 --- a/StateMachineStati/Jetco/15_FAMIGLIA_JETCO_NEW.rul +++ b/StateMachineStati/Jetco/15_FAMIGLIA_JETCO_NEW.rul @@ -20,6 +20,7 @@ $STATE : 0 : ND $STATE : 1 : Macchina_Pronta $STATE : 11 : Macchina_Spenta $STATE : 15 : Allarme_CN +$STATE : 29 : Emergenza $STATE : 37 : Carico $STATE : 38 : Riserva $STATE : 39 : A_Vuoto @@ -30,6 +31,7 @@ $EVENT : 00 : EMPTY $EVENT : 14 : HW_Power_Off $EVENT : 15 : HW_Power_On $EVENT : 18 : HW_Error +$EVENT : 30 : HW_Emergenza $EVENT : 44 : HW_Warn_a_Vuoto $EVENT : 45 : HW_Warn_Riserva $EVENT : 46 : HW_Carico @@ -42,6 +44,7 @@ ALL_STATES : EMPTY : ND ALL_STATES : HW_Power_Off : Macchina_Spenta # 14 ALL_STATES : HW_Power_On : Macchina_Pronta # 15 ALL_STATES : HW_Error : Allarme_CN # 18 +ALL_STATES : HW_Emergenza : Emergenza # 21 ALL_STATES : HW_Warn_a_Vuoto : A_Vuoto # 44 in quella Originale andava a Riserva ALL_STATES : HW_Warn_Riserva : Riserva # 45 in quella Originale andava a A_Vuoto ALL_STATES : HW_Carico : Carico # 56 From b8c24f8458cf5bd019d0f47cb7a80889bceed135 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 27 Mar 2026 09:06:36 +0100 Subject: [PATCH 02/19] =?UTF-8?q?Modalit=C3=A0=20modifica=20servizio=20Map?= =?UTF-8?q?oIOB=20con=20ritardo=20avvio=20+=20restart?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IOB-PI/std_vers/MapoIOB.service | 4 +++- IOB-PI/vers2.5 12bit/MapoIOB.service | 4 +++- IOB-PI/vers2.5 8bit/MapoIOB.service | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/IOB-PI/std_vers/MapoIOB.service b/IOB-PI/std_vers/MapoIOB.service index 8f86fdb..7803ccc 100644 --- a/IOB-PI/std_vers/MapoIOB.service +++ b/IOB-PI/std_vers/MapoIOB.service @@ -8,13 +8,15 @@ Conflicts=shutdown.target [Service] Type=forking -Restart=no +Restart=on-failure +RestartSec=5 TimeoutSec=5min IgnoreSIGPIPE=no KillMode=process GuessMainPID=no RemainAfterExit=yes SysVStartPriority=1 +ExecStartPre=/bin/sleep 5 ExecStart=/etc/init.d/MapoIOB start ExecStop=/etc/init.d/MapoIOB stop diff --git a/IOB-PI/vers2.5 12bit/MapoIOB.service b/IOB-PI/vers2.5 12bit/MapoIOB.service index 8f86fdb..7803ccc 100644 --- a/IOB-PI/vers2.5 12bit/MapoIOB.service +++ b/IOB-PI/vers2.5 12bit/MapoIOB.service @@ -8,13 +8,15 @@ Conflicts=shutdown.target [Service] Type=forking -Restart=no +Restart=on-failure +RestartSec=5 TimeoutSec=5min IgnoreSIGPIPE=no KillMode=process GuessMainPID=no RemainAfterExit=yes SysVStartPriority=1 +ExecStartPre=/bin/sleep 5 ExecStart=/etc/init.d/MapoIOB start ExecStop=/etc/init.d/MapoIOB stop diff --git a/IOB-PI/vers2.5 8bit/MapoIOB.service b/IOB-PI/vers2.5 8bit/MapoIOB.service index 8f86fdb..7803ccc 100644 --- a/IOB-PI/vers2.5 8bit/MapoIOB.service +++ b/IOB-PI/vers2.5 8bit/MapoIOB.service @@ -8,13 +8,15 @@ Conflicts=shutdown.target [Service] Type=forking -Restart=no +Restart=on-failure +RestartSec=5 TimeoutSec=5min IgnoreSIGPIPE=no KillMode=process GuessMainPID=no RemainAfterExit=yes SysVStartPriority=1 +ExecStartPre=/bin/sleep 5 ExecStart=/etc/init.d/MapoIOB start ExecStop=/etc/init.d/MapoIOB stop From c859db736f7b151138c8447a6bd425f14bef74dd Mon Sep 17 00:00:00 2001 From: Giancarlo Rottoli Date: Mon, 30 Mar 2026 12:05:21 +0200 Subject: [PATCH 03/19] Aggiunto Barcode Prototipi --- StateMachineStati/1_BARCODE_MANUALE - NEW.csv | 66 ++++++++++++++++ StateMachineStati/1_BARCODE_MANUALE - NEW.rul | 6 +- .../ELENCO_EVENTI_E_STATI_MASTER_NEW.rul | 4 + .../Jetco/12_FAMIGLIA_JETCO_NEW.csv | 77 +++++++++++++++++++ .../Jetco/12_FAMIGLIA_JETCO_NEW.rul | 4 + .../Jetco/15_FAMIGLIA_JETCO_NEW.rul | 1 + 6 files changed, 157 insertions(+), 1 deletion(-) diff --git a/StateMachineStati/1_BARCODE_MANUALE - NEW.csv b/StateMachineStati/1_BARCODE_MANUALE - NEW.csv index e30fcfd..7e05209 100644 --- a/StateMachineStati/1_BARCODE_MANUALE - NEW.csv +++ b/StateMachineStati/1_BARCODE_MANUALE - NEW.csv @@ -31,6 +31,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;0;61;61 1;0;62;62 1;0;63;63 +1;0;64;64 1;2;0;0 1;2;1;13 1;2;3;3 @@ -63,6 +64,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;2;61;61 1;2;62;62 1;2;63;63 +1;2;64;64 1;3;0;0 1;3;1;13 1;3;2;2 @@ -95,6 +97,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;3;61;61 1;3;62;62 1;3;63;63 +1;3;64;64 1;4;0;0 1;4;1;13 1;4;2;2 @@ -127,6 +130,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;4;61;61 1;4;62;62 1;4;63;63 +1;4;64;64 1;5;0;0 1;5;1;13 1;5;2;2 @@ -159,6 +163,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;5;61;61 1;5;62;62 1;5;63;63 +1;5;64;64 1;6;0;0 1;6;1;13 1;6;2;2 @@ -191,6 +196,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;6;61;61 1;6;62;62 1;6;63;63 +1;6;64;64 1;7;0;0 1;7;1;13 1;7;2;2 @@ -223,6 +229,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;7;61;61 1;7;62;62 1;7;63;63 +1;7;64;64 1;8;0;0 1;8;1;13 1;8;2;2 @@ -255,6 +262,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;8;61;61 1;8;62;62 1;8;63;63 +1;8;64;64 1;9;0;0 1;9;1;13 1;9;2;2 @@ -287,6 +295,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;9;61;61 1;9;62;62 1;9;63;63 +1;9;64;64 1;10;0;0 1;10;1;13 1;10;2;2 @@ -319,6 +328,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;10;61;61 1;10;62;62 1;10;63;63 +1;10;64;64 1;11;0;0 1;11;1;13 1;11;2;2 @@ -351,6 +361,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;11;61;61 1;11;62;62 1;11;63;63 +1;11;64;64 1;13;0;0 1;13;2;2 1;13;3;3 @@ -383,6 +394,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;13;61;61 1;13;62;62 1;13;63;63 +1;13;64;64 1;27;0;0 1;27;1;13 1;27;2;2 @@ -415,6 +427,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;27;61;61 1;27;62;62 1;27;63;63 +1;27;64;64 1;30;0;0 1;30;1;13 1;30;2;2 @@ -447,6 +460,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;30;61;61 1;30;62;62 1;30;63;63 +1;30;64;64 1;31;0;0 1;31;1;13 1;31;2;2 @@ -479,6 +493,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;31;61;61 1;31;62;62 1;31;63;63 +1;31;64;64 1;32;0;0 1;32;1;13 1;32;2;2 @@ -511,6 +526,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;32;61;61 1;32;62;62 1;32;63;63 +1;32;64;64 1;33;0;0 1;33;1;13 1;33;2;2 @@ -543,6 +559,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;33;61;61 1;33;62;62 1;33;63;63 +1;33;64;64 1;34;0;0 1;34;1;13 1;34;2;2 @@ -575,6 +592,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;34;61;61 1;34;62;62 1;34;63;63 +1;34;64;64 1;35;0;0 1;35;1;13 1;35;2;2 @@ -607,6 +625,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;35;61;61 1;35;62;62 1;35;63;63 +1;35;64;64 1;49;0;0 1;49;1;13 1;49;2;2 @@ -639,6 +658,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;49;61;61 1;49;62;62 1;49;63;63 +1;49;64;64 1;50;0;0 1;50;1;13 1;50;2;2 @@ -671,6 +691,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;50;61;61 1;50;62;62 1;50;63;63 +1;50;64;64 1;51;0;0 1;51;1;13 1;51;2;2 @@ -703,6 +724,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;51;61;61 1;51;62;62 1;51;63;63 +1;51;64;64 1;52;0;0 1;52;1;13 1;52;2;2 @@ -735,6 +757,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;52;61;61 1;52;62;62 1;52;63;63 +1;52;64;64 1;54;0;0 1;54;1;13 1;54;2;2 @@ -767,6 +790,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;54;61;61 1;54;62;62 1;54;63;63 +1;54;64;64 1;55;0;0 1;55;1;13 1;55;2;2 @@ -799,6 +823,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;55;61;61 1;55;62;62 1;55;63;63 +1;55;64;64 1;56;0;0 1;56;1;13 1;56;2;2 @@ -831,6 +856,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;56;61;61 1;56;62;62 1;56;63;63 +1;56;64;64 1;57;0;0 1;57;1;13 1;57;2;2 @@ -863,6 +889,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;57;61;61 1;57;62;62 1;57;63;63 +1;57;64;64 1;58;0;0 1;58;1;13 1;58;2;2 @@ -895,6 +922,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;58;61;61 1;58;62;62 1;58;63;63 +1;58;64;64 1;59;0;0 1;59;1;13 1;59;2;2 @@ -927,6 +955,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;59;61;61 1;59;62;62 1;59;63;63 +1;59;64;64 1;60;0;0 1;60;1;13 1;60;2;2 @@ -959,6 +988,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;60;61;61 1;60;62;62 1;60;63;63 +1;60;64;64 1;61;0;0 1;61;1;13 1;61;2;2 @@ -991,6 +1021,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;61;60;60 1;61;62;62 1;61;63;63 +1;61;64;64 1;62;0;0 1;62;1;13 1;62;2;2 @@ -1023,6 +1054,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;62;60;60 1;62;61;61 1;62;63;63 +1;62;64;64 1;63;0;0 1;63;1;13 1;63;2;2 @@ -1055,3 +1087,37 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 1;63;60;60 1;63;61;61 1;63;62;62 +1;63;64;64 +1;64;0;0 +1;64;1;13 +1;64;2;2 +1;64;3;3 +1;64;4;4 +1;64;5;5 +1;64;6;6 +1;64;7;7 +1;64;8;8 +1;64;9;9 +1;64;10;10 +1;64;12;11 +1;64;19;30 +1;64;26;27 +1;64;31;31 +1;64;32;32 +1;64;37;33 +1;64;38;34 +1;64;39;35 +1;64;49;49 +1;64;50;50 +1;64;51;51 +1;64;52;52 +1;64;54;54 +1;64;55;55 +1;64;56;56 +1;64;57;57 +1;64;58;58 +1;64;59;59 +1;64;60;60 +1;64;61;61 +1;64;62;62 +1;64;63;63 diff --git a/StateMachineStati/1_BARCODE_MANUALE - NEW.rul b/StateMachineStati/1_BARCODE_MANUALE - NEW.rul index e0156da..4e00cbd 100644 --- a/StateMachineStati/1_BARCODE_MANUALE - NEW.rul +++ b/StateMachineStati/1_BARCODE_MANUALE - NEW.rul @@ -1,4 +1,4 @@ -# +# # Macchine MANUALE/Barcode di partenza # # @@ -9,6 +9,7 @@ # 2024.01.18 Aggiunto barcode Rottura Utensile - 59 - ColCom # 2024.02.23 Aggiunto barcode Pausa - 60 - Fluitek # 2024.07.17 Aggiunti Barcode Lvf - 61 62 63 +# 2026.03.27 Aggiunti Barcode Fluitek - 64 $DEFINITIONS @@ -53,6 +54,7 @@ $STATE : 60 : Pausa $STATE : 61 : Manutenzione_Straordinaria $STATE : 62 : Manutenzione_Ordinaria $STATE : 63 : Problemi_di_Lavorazione +$STATE : 64 : Prototipi # definizione eventi : obbligatorio iniziare da 0 --> select * from AnagraficaEventi # NOTE @@ -90,6 +92,7 @@ $EVENT : 60 : Barcode_Pausa $EVENT : 61 : Barcode_Manutenzione_Straordinaria $EVENT : 62 : Barcode_Manutenzione_Ordinaria $EVENT : 63 : Barcode_Problemi_di_Lavorazione +$EVENT : 64 : Barcode_Prototipi $RULES @@ -130,6 +133,7 @@ ALL_STATES : Barcode_Pausa : Paus ALL_STATES : Barcode_Manutenzione_Straordinaria : Manutenzione_Straordinaria # 61 ALL_STATES : Barcode_Manutenzione_Ordinaria : Manutenzione_Ordinaria # 62 ALL_STATES : Barcode_Problemi_di_Lavorazione : Problemi_di_Lavorazione # 63 +ALL_STATES : Barcode_Prototipi : Prototipi # 64 #-------------------------------------------------------------------------- $DO diff --git a/StateMachineStati/ELENCO_EVENTI_E_STATI_MASTER_NEW.rul b/StateMachineStati/ELENCO_EVENTI_E_STATI_MASTER_NEW.rul index 415fdf2..4be0578 100644 --- a/StateMachineStati/ELENCO_EVENTI_E_STATI_MASTER_NEW.rul +++ b/StateMachineStati/ELENCO_EVENTI_E_STATI_MASTER_NEW.rul @@ -10,6 +10,7 @@ # 2024.02.23 Aggiunto Barcode Pausa - 60 - Fluitek # 2024.07.17 Aggiunti Barcode Lvf - 61 62 63 # 2025.01.28 Aggiunto Stato 40 HW_Riscaldam +# 2026.03.27 Aggiunti Barcode Fluitek - 64 # ELENCO STATI E EVENTI DI BASE @@ -65,6 +66,7 @@ $STATE : 60 : Pausa $STATE : 61 : Manutenzione_Straordinaria $STATE : 62 : Manutenzione_Ordinaria $STATE : 63 : Problemi_di_Lavorazione +$STATE : 64 : Prototipi #definizione eventi : obbligatorio iniziare da 0 --> select * from AnagraficaEventi # NOTE @@ -145,6 +147,7 @@ $EVENT : 60 : Barcode_Pausa $EVENT : 61 : Barcode_Manutenzione_Straordinaria $EVENT : 62 : Barcode_Manutenzione_Ordinaria $EVENT : 63 : Barcode_Problemi_di_Lavorazione +$EVENT : 64 : Barcode_Prototipi $RULES @@ -187,5 +190,6 @@ ALL_STATES : Barcode_Pausa : Pausa # 60 ALL_STATES : Barcode_Manutenzione_Straordinaria : Manutenzione_Straordinaria # 61 ALL_STATES : Barcode_Manutenzione_Ordinaria : Manutenzione_Ordinaria # 62 ALL_STATES : Barcode_Problemi_di_Lavorazione : Problemi_di_Lavorazione # 63 +ALL_STATES : Barcode_Prototipi : Prototipi # 64 ALL_STATES : HW_power_off : Macchina_Spenta # 14 diff --git a/StateMachineStati/Jetco/12_FAMIGLIA_JETCO_NEW.csv b/StateMachineStati/Jetco/12_FAMIGLIA_JETCO_NEW.csv index 91b9998..b8a4b7c 100644 --- a/StateMachineStati/Jetco/12_FAMIGLIA_JETCO_NEW.csv +++ b/StateMachineStati/Jetco/12_FAMIGLIA_JETCO_NEW.csv @@ -32,6 +32,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;0;61;61 12;0;62;62 12;0;63;63 +12;0;64;64 12;2;0;0 12;2;1;13 12;2;3;3 @@ -66,6 +67,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;2;61;61 12;2;62;62 12;2;63;63 +12;2;64;64 12;3;0;0 12;3;1;13 12;3;2;2 @@ -100,6 +102,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;3;61;61 12;3;62;62 12;3;63;63 +12;3;64;64 12;4;0;0 12;4;1;13 12;4;2;2 @@ -134,6 +137,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;4;61;61 12;4;62;62 12;4;63;63 +12;4;64;64 12;5;0;0 12;5;1;13 12;5;2;2 @@ -168,6 +172,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;5;61;61 12;5;62;62 12;5;63;63 +12;5;64;64 12;6;0;0 12;6;1;13 12;6;2;2 @@ -202,6 +207,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;6;61;61 12;6;62;62 12;6;63;63 +12;6;64;64 12;7;0;0 12;7;1;13 12;7;2;2 @@ -236,6 +242,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;7;61;61 12;7;62;62 12;7;63;63 +12;7;64;64 12;8;0;0 12;8;1;13 12;8;2;2 @@ -270,6 +277,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;8;61;61 12;8;62;62 12;8;63;63 +12;8;64;64 12;9;0;0 12;9;1;13 12;9;2;2 @@ -304,6 +312,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;9;61;61 12;9;62;62 12;9;63;63 +12;9;64;64 12;10;0;0 12;10;1;13 12;10;2;2 @@ -338,6 +347,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;10;61;61 12;10;62;62 12;10;63;63 +12;10;64;64 12;11;0;0 12;11;1;13 12;11;2;2 @@ -385,6 +395,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;11;61;61 12;11;62;62 12;11;63;63 +12;11;64;64 12;12;0;0 12;12;1;13 12;12;2;2 @@ -430,6 +441,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;12;61;61 12;12;62;62 12;12;63;63 +12;12;64;64 12;13;0;0 12;13;2;2 12;13;3;3 @@ -474,6 +486,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;13;61;61 12;13;62;62 12;13;63;63 +12;13;64;64 12;14;0;0 12;14;1;13 12;14;2;2 @@ -520,6 +533,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;14;61;61 12;14;62;62 12;14;63;63 +12;14;64;64 12;15;0;0 12;15;1;13 12;15;2;2 @@ -564,6 +578,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;15;61;61 12;15;62;62 12;15;63;63 +12;15;64;64 12;23;0;0 12;23;1;13 12;23;2;2 @@ -613,6 +628,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;23;61;61 12;23;62;62 12;23;63;63 +12;23;64;64 12;24;0;0 12;24;1;13 12;24;2;2 @@ -658,6 +674,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;24;61;61 12;24;62;62 12;24;63;63 +12;24;64;64 12;25;0;0 12;25;1;13 12;25;2;2 @@ -706,6 +723,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;25;61;61 12;25;62;62 12;25;63;63 +12;25;64;64 12;26;0;0 12;26;1;13 12;26;2;2 @@ -755,6 +773,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;26;61;61 12;26;62;62 12;26;63;63 +12;26;64;64 12;27;0;0 12;27;1;13 12;27;2;2 @@ -789,6 +808,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;27;61;61 12;27;62;62 12;27;63;63 +12;27;64;64 12;28;0;0 12;28;1;13 12;28;2;2 @@ -825,6 +845,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;28;61;61 12;28;62;62 12;28;63;63 +12;28;64;64 12;29;0;0 12;29;1;13 12;29;2;2 @@ -863,6 +884,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;29;61;61 12;29;62;62 12;29;63;63 +12;29;64;64 12;30;0;0 12;30;1;13 12;30;2;2 @@ -896,6 +918,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;30;61;61 12;30;62;62 12;30;63;63 +12;30;64;64 12;31;0;0 12;31;1;13 12;31;2;2 @@ -930,6 +953,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;31;61;61 12;31;62;62 12;31;63;63 +12;31;64;64 12;32;0;0 12;32;1;13 12;32;2;2 @@ -964,6 +988,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;32;61;61 12;32;62;62 12;32;63;63 +12;32;64;64 12;33;0;0 12;33;1;13 12;33;2;2 @@ -998,6 +1023,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;33;61;61 12;33;62;62 12;33;63;63 +12;33;64;64 12;34;0;0 12;34;1;13 12;34;2;2 @@ -1031,6 +1057,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;34;61;61 12;34;62;62 12;34;63;63 +12;34;64;64 12;35;0;0 12;35;1;13 12;35;2;2 @@ -1065,6 +1092,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;35;61;61 12;35;62;62 12;35;63;63 +12;35;64;64 12;40;0;0 12;40;1;13 12;40;2;2 @@ -1103,6 +1131,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;40;61;61 12;40;62;62 12;40;63;63 +12;40;64;64 12;49;0;0 12;49;1;13 12;49;2;2 @@ -1137,6 +1166,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;49;61;61 12;49;62;62 12;49;63;63 +12;49;64;64 12;50;0;0 12;50;1;13 12;50;2;2 @@ -1171,6 +1201,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;50;61;61 12;50;62;62 12;50;63;63 +12;50;64;64 12;51;0;0 12;51;1;13 12;51;2;2 @@ -1204,6 +1235,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;51;61;61 12;51;62;62 12;51;63;63 +12;51;64;64 12;52;0;0 12;52;1;13 12;52;2;2 @@ -1237,6 +1269,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;52;61;61 12;52;62;62 12;52;63;63 +12;52;64;64 12;54;0;0 12;54;1;13 12;54;2;2 @@ -1270,6 +1303,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;54;61;61 12;54;62;62 12;54;63;63 +12;54;64;64 12;55;0;0 12;55;1;13 12;55;2;2 @@ -1303,6 +1337,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;55;61;61 12;55;62;62 12;55;63;63 +12;55;64;64 12;56;0;0 12;56;1;13 12;56;2;2 @@ -1336,6 +1371,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;56;61;61 12;56;62;62 12;56;63;63 +12;56;64;64 12;57;0;0 12;57;1;13 12;57;2;2 @@ -1369,6 +1405,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;57;61;61 12;57;62;62 12;57;63;63 +12;57;64;64 12;58;0;0 12;58;1;13 12;58;2;2 @@ -1402,6 +1439,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;58;61;61 12;58;62;62 12;58;63;63 +12;58;64;64 12;59;0;0 12;59;1;13 12;59;2;2 @@ -1435,6 +1473,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;59;61;61 12;59;62;62 12;59;63;63 +12;59;64;64 12;60;0;0 12;60;1;13 12;60;2;2 @@ -1468,6 +1507,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;60;61;61 12;60;62;62 12;60;63;63 +12;60;64;64 12;61;0;0 12;61;1;13 12;61;2;2 @@ -1501,6 +1541,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;61;60;60 12;61;62;62 12;61;63;63 +12;61;64;64 12;62;0;0 12;62;1;13 12;62;2;2 @@ -1534,6 +1575,7 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;62;60;60 12;62;61;61 12;62;63;63 +12;62;64;64 12;63;0;0 12;63;1;13 12;63;2;2 @@ -1567,3 +1609,38 @@ IdxFamiglia;IdxStato;IdxTipo;next_IdxStato 12;63;60;60 12;63;61;61 12;63;62;62 +12;63;64;64 +12;64;0;0 +12;64;1;13 +12;64;2;2 +12;64;3;3 +12;64;4;4 +12;64;5;5 +12;64;6;6 +12;64;7;7 +12;64;8;8 +12;64;9;9 +12;64;10;10 +12;64;12;11 +12;64;14;11 +12;64;19;30 +12;64;26;27 +12;64;31;31 +12;64;32;32 +12;64;37;33 +12;64;38;34 +12;64;39;35 +12;64;49;49 +12;64;50;50 +12;64;51;51 +12;64;52;52 +12;64;54;54 +12;64;55;55 +12;64;56;56 +12;64;57;57 +12;64;58;58 +12;64;59;59 +12;64;60;60 +12;64;61;61 +12;64;62;62 +12;64;63;63 diff --git a/StateMachineStati/Jetco/12_FAMIGLIA_JETCO_NEW.rul b/StateMachineStati/Jetco/12_FAMIGLIA_JETCO_NEW.rul index 812b017..9f78035 100644 --- a/StateMachineStati/Jetco/12_FAMIGLIA_JETCO_NEW.rul +++ b/StateMachineStati/Jetco/12_FAMIGLIA_JETCO_NEW.rul @@ -13,6 +13,7 @@ # 2024.03.27 Sistemazione allineamento e Intestazione + TEST # 2024.10.08 Agg. uscita Emergenza con HW_Power_On # 2025.01.28 Creato Stato Riscaldam_Autom Riscaldamento da HW + Mod. Rule + Barcode Nuovi - Adesso il Risc. da Barcode esce solo con altri Barcode +# 2026.03.27 Aggiunti Barcode Fluitek - 64 # $DEFINITIONS @@ -67,6 +68,7 @@ $STATE : 60 : Pausa $STATE : 61 : Manutenzione_Straordinaria $STATE : 62 : Manutenzione_Ordinaria $STATE : 63 : Problemi_di_Lavorazione +$STATE : 64 : Prototipi #definizione eventi : obbligatorio iniziare da 0 --> select * from AnagraficaEventi @@ -134,6 +136,7 @@ $EVENT : 60 : Barcode_Pausa $EVENT : 61 : Barcode_Manutenzione_Straordinaria $EVENT : 62 : Barcode_Manutenzione_Ordinaria $EVENT : 63 : Barcode_Problemi_di_Lavorazione +$EVENT : 64 : Barcode_Prototipi $RULES @@ -176,6 +179,7 @@ ALL_STATES : Barcode_Pausa : Paus ALL_STATES : Barcode_Manutenzione_Straordinaria : Manutenzione_Straordinaria # 61 ALL_STATES : Barcode_Manutenzione_Ordinaria : Manutenzione_Ordinaria # 62 ALL_STATES : Barcode_Problemi_di_Lavorazione : Problemi_di_Lavorazione # 63 +ALL_STATES : Barcode_Prototipi : Prototipi # 64 ALL_STATES : HW_Power_Off : Macchina_Spenta # 14 diff --git a/StateMachineStati/Jetco/15_FAMIGLIA_JETCO_NEW.rul b/StateMachineStati/Jetco/15_FAMIGLIA_JETCO_NEW.rul index e98903a..81efc79 100644 --- a/StateMachineStati/Jetco/15_FAMIGLIA_JETCO_NEW.rul +++ b/StateMachineStati/Jetco/15_FAMIGLIA_JETCO_NEW.rul @@ -7,6 +7,7 @@ # 2023.08.11 Nomi PowerOn # 2023.08.27 Sistemazione Descrizioni # 2024.03.27 Sistemazione allineamento e Intestazione +# 2025.11.25 Aggiunta Emergenza # $DEFINITIONS From 4b6d7b415cad4b115eeaea86799d76d045ba320c Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 12 May 2026 12:08:35 +0200 Subject: [PATCH 04/19] Update x fix errore file to_retry --- IOB-PI/readParallela.py | 19 +++++++++---------- IOB-PI/readParallela_12.py | 19 +++++++++---------- IOB-PI/readParallela_8.py | 14 +++++++++----- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/IOB-PI/readParallela.py b/IOB-PI/readParallela.py index 5ad263e..0982a23 100644 --- a/IOB-PI/readParallela.py +++ b/IOB-PI/readParallela.py @@ -1,7 +1,7 @@ #!/usr/bin/python # -*- coding: utf-8 -*- -# readParallela v. 2.6.1 12 Ingressi +# readParallela v. 2.6.2 12 Ingressi # - single instance timer # - invio multiplo x send eventi accodati # - gestione segnali BLINKING @@ -16,23 +16,20 @@ # - (2.5.3) Fix gestione stringhe e print x python 3.11 in debian 12 / raspberry OS 2025 # - (2.6.0) Aggiunto gestione Redis x code salvate ogni minuto e ricaricate all'avvio 2025.04.17 # - (2.6.1) Cleanup generale vecchia queue post test vari +# - (2.6.2) Fix in global di to_retry in send_coda per evitare problemi + import time import sys - - from datetime import datetime - import urllib import urllib.request import configparser import os, sys - import logging import logging.handlers import threading import redis - from array import * #-------------------------------------------------------------- @@ -44,7 +41,7 @@ MAXRETRY = 10 # numero campioni filtraggio segnale ballerino MAX_COUNTER_BLINK = 10 -PROGRAM_NAME ="ReadPar IOB-pi v.2.6.1" +PROGRAM_NAME ="ReadPar IOB-pi v.2.6.2" # DA FILE CONF idxMacchina = "1001" @@ -380,6 +377,7 @@ def svuotaCoda(): global onLine global sending global timer_busy + global to_retry global NMAXSEND #logPro.info ("start timer ") @@ -473,10 +471,11 @@ def svuotaCoda(): logPro.error(str(e)) onLine = '0' + + finally: + # in ogni caso + timer_busy = False - # in ogni caso - - timer_busy = False #print ("end timer ok") #print ("end timer ") diff --git a/IOB-PI/readParallela_12.py b/IOB-PI/readParallela_12.py index 5ad263e..0982a23 100644 --- a/IOB-PI/readParallela_12.py +++ b/IOB-PI/readParallela_12.py @@ -1,7 +1,7 @@ #!/usr/bin/python # -*- coding: utf-8 -*- -# readParallela v. 2.6.1 12 Ingressi +# readParallela v. 2.6.2 12 Ingressi # - single instance timer # - invio multiplo x send eventi accodati # - gestione segnali BLINKING @@ -16,23 +16,20 @@ # - (2.5.3) Fix gestione stringhe e print x python 3.11 in debian 12 / raspberry OS 2025 # - (2.6.0) Aggiunto gestione Redis x code salvate ogni minuto e ricaricate all'avvio 2025.04.17 # - (2.6.1) Cleanup generale vecchia queue post test vari +# - (2.6.2) Fix in global di to_retry in send_coda per evitare problemi + import time import sys - - from datetime import datetime - import urllib import urllib.request import configparser import os, sys - import logging import logging.handlers import threading import redis - from array import * #-------------------------------------------------------------- @@ -44,7 +41,7 @@ MAXRETRY = 10 # numero campioni filtraggio segnale ballerino MAX_COUNTER_BLINK = 10 -PROGRAM_NAME ="ReadPar IOB-pi v.2.6.1" +PROGRAM_NAME ="ReadPar IOB-pi v.2.6.2" # DA FILE CONF idxMacchina = "1001" @@ -380,6 +377,7 @@ def svuotaCoda(): global onLine global sending global timer_busy + global to_retry global NMAXSEND #logPro.info ("start timer ") @@ -473,10 +471,11 @@ def svuotaCoda(): logPro.error(str(e)) onLine = '0' + + finally: + # in ogni caso + timer_busy = False - # in ogni caso - - timer_busy = False #print ("end timer ok") #print ("end timer ") diff --git a/IOB-PI/readParallela_8.py b/IOB-PI/readParallela_8.py index ab67aee..895cde1 100644 --- a/IOB-PI/readParallela_8.py +++ b/IOB-PI/readParallela_8.py @@ -1,7 +1,7 @@ #!/usr/bin/python # -*- coding: utf-8 -*- -# readParallela v. 2.6.1 8 Ingressi +# readParallela v. 2.6.2 8 Ingressi # - single instance timer # - invio multiplo x send eventi accodati # - gestione segnali BLINKING @@ -16,6 +16,8 @@ # - (2.5.3) Fix gestione stringhe e print x python 3.11 in debian 12 / raspberry OS 2025 # - (2.6.0) Aggiunto gestione Redis x code salvate ogni minuto e ricaricate all'avvio 2025.04.17 # - (2.6.1) Cleanup generale vecchia queue post test vari +# - (2.6.2) Fix in global di to_retry in send_coda per evitare problemi + import time import sys @@ -44,7 +46,7 @@ MAXRETRY = 10 # numero campioni filtraggio segnale ballerino MAX_COUNTER_BLINK = 10 -PROGRAM_NAME ="ReadPar IOB-pi v.2.6.1" +PROGRAM_NAME ="ReadPar IOB-pi v.2.6.2" # DA FILE CONF idxMacchina = "1001" @@ -343,6 +345,7 @@ def svuotaCoda(): global onLine global sending global timer_busy + global to_retry global NMAXSEND #logPro.info ("start timer ") @@ -436,10 +439,11 @@ def svuotaCoda(): logPro.error(str(e)) onLine = '0' + + finally: + # in ogni caso + timer_busy = False - # in ogni caso - - timer_busy = False #print ("end timer ok") #print ("end timer ") From 69540243d490cc385757e5760fda6c128e3b1ecf Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 12 May 2026 15:48:15 +0200 Subject: [PATCH 05/19] Aggiunta preliminare readme a corredo del ReadParallela --- IOB-PI/README.md | 99 ++++++++++++++++++++++++++++++++++++++-------- IOB-PI/README.pdf | Bin 44325 -> 95259 bytes 2 files changed, 83 insertions(+), 16 deletions(-) diff --git a/IOB-PI/README.md b/IOB-PI/README.md index d8bf2af..e1dea99 100644 --- a/IOB-PI/README.md +++ b/IOB-PI/README.md @@ -1,27 +1,94 @@ -# Upgrade sw IOB-PI clienti +# ReadParallela IOB-PI -ATTENZIONE: se si copia dalla versione standard, SUL PI VA DATO un dos2unix * x tutti i files.. +## Overview +`readParallela.py` is a high-frequency data acquisition script designed for Raspberry Pi. It interfaces with a custom GPIO board to read 12 parallel digital inputs, applies various signal processing filters, and queues events for asynchronous transmission to a remote server via Redis and HTTP. -## Salt install## +## Panoramica +`readParallela.py` è uno script di acquisizione dati ad alta frequenza progettato per Raspberry Pi. Interfaccia una scheda GPIO personalizzata per leggere 12 ingressi digitali paralleli, applica vari filtri di elaborazione del segnale e mette in coda gli eventi per la trasmissione asincrona a un server remoto tramite Redis e HTTP. -Se il minion è taggato come iop-pi bast dare state apply, poiché dallo stato top.sls è configurato di fare gli stati -* iob-pi.sls -* iob-setup.sls +## Core Functionality +### 1. Signal Acquisition & Processing +The script polls 12 GPIO pins at a configurable interval (`SAMPLETIME`). For each input, it applies a three-stage processing pipeline: +* **Inversion:** Reverses the signal logic if configured for a specific bit. +* **Short Signal Filtering (Debounce):** Filters out brief electrical spikes or noise by requiring a signal to remain stable for a specific number of cycles (`MAX_COUNTER_FILTER`). +* **Blinking Logic:** Detects and manages "blinking" signals, allowing for specific timing-based event detection. -## approfondimenti +### 2. Data Packaging +Once processed, the 12 bits are aggregated into a single integer value and converted into a Hexadecimal string. -Valutato python-rq x gestione code con redis tramite esecuzione workers python gestiti in autonomia: +### 3. Event Queuing & Transmission +To ensure high-speed reading is not interrupted by network latency: +* **Redis Queue:** Detected changes (and timeout events) are timestamped and pushed into a Redis list (`IOB`). +* **Asynchronous Sender:** A dedicated background thread (`svuotaCoda`) periodically dequeues items from Redis and performs HTTP requests to a central server. +* **Reliability:** The script implements a "retry" mechanism and monitors server availability (`URLALIVE`) to manage offline periods. - https://python-rq.org/ - https://python-rq.org/docs/workers/ +### 4. Timeout Management +The script tracks two types of timeouts: +* **Short Timeout:** Ensures that a signal state is recorded even if it changes quickly. +* **Long Timeout:** Provides a fallback to ensure state consistency over longer periods. -Testato ma al momento non è rispondente ai requisiti del programma per cui si rischia un blocco inf ase di invio se server non OK, per ora implementata copia "manuale" della coda verso redis per salvaguardare dati accumulati (vers 2.6.x) +## Funzionalità Principali -## MD5 zip## +### 1. Acquisizione e Elaborazione Segnali +Lo script interroga 12 pin GPIO a un intervallo configurabile (`SAMPLETIME`). Per ogni ingresso, applica una pipeline di elaborazione a tre stadi: +* **Inversione:** Inverte la logica del segnale se configurata per un bit specifico. +* **Filtraggio Segnali Brevi (Debounce):** Filtra i picchi elettrici o il rumore richiedendo che il segnale rimanga stabile per un numero specifico di cicli (`MAX_COUNTER_FILTER`). +* **Gestione Blinking:** Rileva e gestisce segnali "blinking", permettendo il rilevamento di eventi basati su timing specifici. -creazione MD5: da powershell +### 2. Impacchettamento Dati +Una volta elaborati, i 12 bit vengono aggregati in un unico valore intero e convertiti in una stringa Esadecimale. + +### 3. Code e Trasmissione Eventi +Per garantire che la lettura ad alta velocità non sia interrotta dalla latenza di rete: +* **Coda Redis:** Le variazioni rilevate (e gli eventi di timeout) vengono datate e inserite in una lista Redis (`IOB`). +* **Invio Asincrono:** Un thread dedicato in background (`svuotaCoda`) estrae periodicamente gli elementi dalla coda Redis e esegue richieste HTTP a un server centrale. +* **Affidabilità:** Lo script implementa un meccanismo di "retry" e monitora la disponibilità del server (`URLALIVE`) per gestire i periodi offline. + +### 4. Gestione Timeout +Lo script monitora due tipi di timeout: +* **Timeout Breve:** Assicura che lo stato di un segnale venga registrato anche se cambia rapidamente. +* **Timeout Lungo:** Fornisce un sistema di fallback per garantire la coerenza dello stato su periodi più lunghi. + +## Implementation Details (Refactored Version) +The script has been modernized with the following improvements: +* **Object-Oriented Design:** Logic is encapsulated within a `ReadParallelaIOB` class, eliminating reliance on dangerous global variables. +* **Efficient Bitwise Operations:** Replaced manual `if` checks with bitwise operators for faster bit reconstruction. +* **Modern Networking:** Replaced `urllib` with the `requests` library for more robust and readable HTTP communication. +* **Optimized Configuration:** Uses loops to load per-bit settings from the configuration file. + +## Dettagli di Implementazione (Versione Refactored) +Lo script è stato modernizzato con i seguenti miglioramenti: +* **Design Orientato agli Oggetti:** La logica è incapsulata all'interno della classe `ReadParallelaIOB`, eliminando la dipendenza da variabili globali pericolose. +* **Operazioni Bitwise Efficienti:** Sostituzione dei controlli manuali `if` con operatori bitwise per una ricostruzione dei bit più veloce. +* **Networking Moderno:** Sostituzione di `urllib` con la libreria `requests` per una comunicazione HTTP più robusta e leggibile. +* **Configurazione Ottimizzata:** Utilizzo di cicli per caricare le impostazioni per singolo bit dal file di configurazione. + +## Configuration +Settings are managed via `IOB.cfg`, including: +* `[time]`: Sampling rates and timeouts. +* `[id]`: Machine identifier. +* `[web]`: URLs for data transmission and connectivity checks. +* `[blink]`, `[invert]`, `[filter]`: Per-bit configuration for signal processing. +* `[log]`: Logging verbosity and file paths. + +## Configurazione +Le impostazioni sono gestite tramite `IOB.cfg`, tra cui: +* `[time]`: Frequenze di campionamento e timeout. +* `[id]`: Identificativo macchina. +* `[web]`: URL per la trasmissione dati e controlli di connettività. +* `[blink]`, `[invert]`, `[filter]`: Configurazione per singolo bit per l'elaborazione dei segnali. +* `[log]`: Livello di logging e percorsi dei file. + +## Dependencies +* `RPi.GPIO`: For hardware interfacing. +* `redis`: For local event queuing. +* `requests`: For web communication. +* `configparser`: For configuration management. + +## Dipendenze +* `RPi.GPIO`: Per l'interfacciamento hardware. +* `redis`: Per la gestione della coda locale. +* `requests`: Per la comunicazione web. +* `configparser`: Per la gestione della configurazione. - - Get-FileHash .\Mapo.zip -Algorithm MD5 - \ No newline at end of file diff --git a/IOB-PI/README.pdf b/IOB-PI/README.pdf index 1e9593a41cb4f730b62c5cd683bd4698e6da4617..10a2a3c2b80e84bef24b3ba2e6626f9b17a8baf0 100644 GIT binary patch literal 95259 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%0D~Tb*REZ#r5Bn2C6a;S3g^Y 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 Date: Tue, 12 May 2026 15:48:45 +0200 Subject: [PATCH 06/19] Inizio modifiche readParallela (12bit) v3 da coding assistant --- IOB-PI/readParallela.py | 1062 +++++++++++---------------------------- 1 file changed, 299 insertions(+), 763 deletions(-) diff --git a/IOB-PI/readParallela.py b/IOB-PI/readParallela.py index 0982a23..076c2ca 100644 --- a/IOB-PI/readParallela.py +++ b/IOB-PI/readParallela.py @@ -1,787 +1,323 @@ #!/usr/bin/python # -*- coding: utf-8 -*- -# readParallela v. 2.6.2 12 Ingressi -# - single instance timer -# - invio multiplo x send eventi accodati -# - gestione segnali BLINKING -# - gestione INVERSIONE segnali cv 10-VII-2018 -# - gestione FILTRAGGIO segnali brevi cv 23-VII-2018 -# - (2.3) gestione 12 bit cv 14-I-2020 -# - (2.4) fix ingressi e conf apertura parallela + gestione vari bit filtraggio x nuovi ingressi + update conf con 12 parametri bit SEL 15-I-2020 -# - (2.4.8) versione adatta a raspberry PI vecchia generazione (GPIO corto, 8bit) -# - (2.5) Fix (hope) ciclo "wait send to complete", gestione timeout (rety infinito se IO riparte in modo anomalo) -# - (2.5.1) Fix numero versione 18.05.2023 -# - (2.5.2) Fix gestione eccezioni con report dettagliato -# - (2.5.3) Fix gestione stringhe e print x python 3.11 in debian 12 / raspberry OS 2025 -# - (2.6.0) Aggiunto gestione Redis x code salvate ogni minuto e ricaricate all'avvio 2025.04.17 -# - (2.6.1) Cleanup generale vecchia queue post test vari -# - (2.6.2) Fix in global di to_retry in send_coda per evitare problemi - - import time import sys -from datetime import datetime -import urllib -import urllib.request -import configparser -import os, sys +import os import logging import logging.handlers import threading +import configparser +from datetime import datetime +from array import array + import redis -from array import * - -#-------------------------------------------------------------- -# COSTANTI -MSGLEN = 9 -TIMEOUTSERIALE = 10 -MAXRETRY = 10 - -# numero campioni filtraggio segnale ballerino -MAX_COUNTER_BLINK = 10 - -PROGRAM_NAME ="ReadPar IOB-pi v.2.6.2" - -# DA FILE CONF -idxMacchina = "1001" -SAMPLETIME = 0.1 -TIMEOUTSHORT = (SAMPLETIME*20) -TIMEOUTLONG = (SAMPLETIME*600) -SENDURLTIME = 0.08 -NMAXSEND = 5 # numero massimo di invii per singolo ciclo di svuotamento - -# VAR -to_enable = False -to_short = TIMEOUTSHORT -to_long = TIMEOUTLONG -to_serial = TIMEOUTSERIALE -to_retry = MAXRETRY -errormsglen = 0 - -# VAR - -out_0 = 24 -out_1 = 26 - -in_0 = 11 -in_1 = 12 -in_2 = 13 -in_3 = 15 -in_4 = 16 -in_5 = 18 -in_6 = 22 -in_7 = 7 -in_8 = 29 -in_9 = 31 -in_10 = 32 -in_11 = 36 - -# contatore: serve x match tra accoda ed invia x possibile controllo a posteriori... ogni volta che accodo incremento di 1, va da 0 a 9999 -cont = '0' - -# variabile stato online/offline della macchina -onLine = '1' - -# variabile stato seinding/waiting x la parte invio URL -sending = '0' - -# variabile stato timer thread busy -timer_busy = False - -# -# array per ingressi filtrati -i_counters = array ( 'i',[0,0,0,0,0,0,0,0,0,0,0,0]) -B_blinking = array ( 'B',[0,0,0,0,0,0,0,0,0,0,0,0]) -B_previous = array ( 'B',[0,0,0,0,0,0,0,0,0,0,0,0]) -B_input = array ( 'B',[0,0,0,0,0,0,0,0,0,0,0,0]) -B_output = array ( 'B',[0,0,0,0,0,0,0,0,0,0,0,0]) - -B_inverting = array ( 'B',[0,0,0,0,0,0,0,0,0,0,0,0]) - -B_filter = array ( 'B',[0,0,0,0,0,0,0,0,0,0,0,0]) -B_filter_prev = array ( 'B',[0,0,0,0,0,0,0,0,0,0,0,0]) -B_temp = array ( 'B',[0,0,0,0,0,0,0,0,0,0,0,0]) -i_filter_counters = array ( 'i',[0,0,0,0,0,0,0,0,0,0,0,0]) - -#-------------------------------------------------------------- -# Gestione coda (condivisa) su Redis x registrazione eventi ed invio URL -CodaR = redis.Redis(host='localhost', port=6379, db=0, password='24068Seriate') -queue_name = 'IOB' - -#----------------------------------- -# Gestione code REDIS (sost. coda in ram) - -# Function to add an item to the queue (enqueue) -def rqEnqueue(item): - CodaR.rpush(queue_name, item) - #logQue.info(f"Enqueued: {item}") - -# Function to remove an item from the queue (dequeue) -def rqDequeue(): - item = CodaR.lpop(queue_name) - if item: - #logQue.info(f"Dequeued: {item.decode('utf-8')}") - return item.decode('utf-8') - else: - logQue.info("Queue is empty, nothing to retrieve!") - -# Function to count queue actual lenght in Redis -def rqLen(): - cLen = CodaR.llen(queue_name) - if cLen: - #logQue.info(f"Queue len: {cLen}") - return cLen - else: - #logQue.info("Queue is empty") - return 0 - -#--------------------------------------------------------------- -# lettura parallela -# ritorna il byte letto pulito ( due char hex ) - -def readParallelaFiltrata(): - - global in_0 - global in_1 - global in_2 - global in_3 - global in_4 - global in_5 - global in_6 - global in_7 - - global in_8 - global in_9 - global in_10 - global in_11 - - - global GPIO - - current = '' - - - try: - - if GPIO.input(in_0): - B_input[0] = 0 - else: - B_input[0] = 1 - - if GPIO.input(in_1): - B_input[1] = 0 - else: - B_input[1] = 1 - - if GPIO.input(in_2): - B_input[2] = 0 - else: - B_input[2] = 1 - - if GPIO.input(in_3): - B_input[3] = 0 - else: - B_input[3] = 1 - - if GPIO.input(in_4): - B_input[4] = 0 - else: - B_input[4] = 1 - - if GPIO.input(in_5): - B_input[5] = 0 - else: - B_input[5] = 1 - - if GPIO.input(in_6): - B_input[6] = 0 - else: - B_input[6] = 1 - - if GPIO.input(in_7): - B_input[7] = 0 - else: - B_input[7] = 1 - - if GPIO.input(in_8): - B_input[8] = 0 - else: - B_input[8] = 1 - - if GPIO.input(in_9): - B_input[9] = 0 - else: - B_input[9] = 1 - - if GPIO.input(in_10): - B_input[10] = 0 - else: - B_input[10] = 1 - - if GPIO.input(in_11): - B_input[11] = 0 - else: - B_input[11] = 1 - - - - #ciclo per ogni segnale - for i in range(12) : - #print (i) - - # v2.1 gestione inversione bit ingresso - - if ( B_inverting[i] == 1 ) : - if ( B_input[i] == 0 ) : - B_input[i] = 1 - else : - B_input[i] = 0 - - # v2.2 gestione filtro segnali brevi - - if ( B_filter[i] == 1 ) : - - # fronte 0 -> 1 - if ( B_input[i] == 1 ) and ( B_filter_prev [i] == 0 ) : - if ( i_filter_counters[i] == 0 ) : - # vero fronte 0 -> 1 - i_filter_counters[i] = MAX_COUNTER_FILTER - B_temp[i] = 0 # tengo l' ingresso a 0 - #logPro.info("START spike 0->1 on bit " + str(i) ) - else : - # fine disturbo breve di uno stato 1 - i_filter_counters[i] = 0 - B_temp[i] = 1 # tengo l' ingresso a 1 - logPro.info("END spike 0->1 on bit " + str(i) ) - - # stabile 1 -> 1 - if ( B_input[i] == 1 ) and ( B_filter_prev [i] == 1 ) : - if ( i_filter_counters[i] == 0 ) : - # segnale stabile a 1 - B_temp[i] = 1 # tengo l' ingresso a 1 - else : - # poco dopo il fronte - i_filter_counters[i] = i_filter_counters[i] - 1 - B_temp[i] = 0 # tengo l' ingresso a 0 - - # fronte 1 -> 0 - if ( B_input[i] == 0 ) and ( B_filter_prev [i] == 1 ) : - if ( i_filter_counters[i] == 0 ) : - # vero fronte 1 -> 0 - i_filter_counters[i] = MAX_COUNTER_FILTER - B_temp[i] = 1 # tengo l' ingresso a 1 - #logPro.info("START spike 1->0 on bit " + str(i) ) - else : - # fine disturbo breve di uno stato 0 - i_filter_counters[i] = 0 - B_temp[i] = 0 # tengo l' ingresso a 0 - logPro.info("END spike 1->0 on bit " + str(i) ) - - # stabile 0 -> 0 - if ( B_input[i] == 0 ) and ( B_filter_prev [i] == 0 ) : - if ( i_filter_counters[i] == 0 ) : - # segnale stabile a 0 - B_temp[i] = 0 # tengo l' ingresso a 0 - else : - # poco dopo il fronte - i_filter_counters[i] = i_filter_counters[i] - 1 - B_temp[i] = 1 # tengo l' ingresso a 1 - - B_filter_prev [i] = B_input[i] - B_input[i] = B_temp[i] - - # fine gestione filtro segnali brevi - - - # se non blinking, copia ingresso - if ( B_blinking[i] == 0 ) : - B_output[i] = B_input[i] - else: - # gestione segnale blinking - # se fronte del segnale - if ( B_previous[i] != B_input[i] ) : - B_previous[i] = B_input[i] - # se fronte di salita - if ( B_input[i] == 1 ) : - # subito uscita = 1 - B_output[i] = 1 - i_counters[i] = MAX_COUNTER_BLINK - #else : - # # loggo che ho rilevato un blink... - # logPro.info("Blink down on bit " + str(i)) - else: - # no , segnale eguale a prima - # se input a 0 - if ( B_input[i] == 0 ) : - # E CONTEGGIO IN CORSO - if ( i_counters[i] > 0 ) : - i_counters[i] = i_counters[i] -1 - if ( i_counters[i] == 0 ) : - B_output[i] = 0 - logPro.info("END Blink on bit " + str(i) ) - - #Rimettiamo insieme i bit - new_value = 0 - - if ( B_output[0] == 1 ) : - new_value = new_value + 1 - if ( B_output[1] == 1 ) : - new_value = new_value + 2 - if ( B_output[2] == 1 ) : - new_value = new_value + 4 - if ( B_output[3] == 1 ) : - new_value = new_value + 8 - if ( B_output[4] == 1 ) : - new_value = new_value + 16 - if ( B_output[5] == 1 ) : - new_value = new_value + 32 - if ( B_output[6] == 1 ) : - new_value = new_value + 64 - if ( B_output[7] == 1 ) : - new_value = new_value + 128 - if ( B_output[8] == 1 ) : - new_value = new_value + 256 - if ( B_output[9] == 1 ) : - new_value = new_value + 512 - if ( B_output[10] == 1 ) : - new_value = new_value + 1024 - if ( B_output[11] == 1 ) : - new_value = new_value + 2048 - - current = hex( new_value ).replace ( "0x" , "" ).upper() - - except Exception as e: - print ("Errore in readParallelaFiltrata \n\n") - print (str(e)) - pass - - return current - -#--------------------------------------------------------------- -#Funzione di scrittura su coda con try-except - -def accoda(): - - try: - dtEve = datetime.utcnow().strftime('%Y%m%d%H%M%S%f')[:-3] - rqEnqueue(dtEve + '#' + value + '#' + cont) - except Exception as e: - logPro.error( "QUEUE:Errore coda \n\n" ) - logPro.error(str(e)) - -#-------------------------------------------------------------- -# svuotaCoda x invio dati al server -def svuotaCoda(): - - global onLine - global sending - global timer_busy - global to_retry - global NMAXSEND - - #logPro.info ("start timer ") - if ( timer_busy == False ): - timer_busy = True - #logPro.info ("start timer ok ") - - try: - if not rqLen() == 0: - #logPro.info ("coda da svuotare!") - response = urllib.request.urlopen(URLALIVE) - answ = response.read().decode('utf-8') - #logPro.info(answ) - if answ == 'OK': - #logPro.info ("OK alive") - response2 = urllib.request.urlopen(URLENABLED + idxMacchina) - answ2 = response2.read().decode('utf-8') - if answ2 == 'OK': - # aggiorno stato ad online - if onLine == '0': - logPro.info("IOB ONLINE!") - - onLine = '1' # imposto comunque online - else: - if onLine == '1': - logPro.error("IOB offline") - - onLine = '0' - else: - if onLine == '1': - logPro.error("Server offline") - - onLine = '0' - - # ora verifico SE si possa inviare (ovvero sia online server e NON ci siano altri send attivi...) - if onLine == '1': - if sending == '0': - #segnalo che sono in sending! - sending = '1' - - # SAM 2016.12.23: modifica x invio FINO A nMaxSend ELEMENTI ad ogni ciclo di svuotamento - i = NMAXSEND - - while i >= 0: - if not rqLen() == 0: - - # formatto dataOra corrente - dtCurr = datetime.utcnow().strftime('%Y%m%d%H%M%S%f')[:-3] - - #prendo primo elemento dalla coda - resp = rqDequeue() - - # recupero valori da elemento coda! - dtEve = resp.split("#")[0] - value = resp.split("#")[1] - cnt = resp.split("#")[2] - url = URLBASE + idxMacchina + URLADV1 + value - url = url + '&dtCurr=' + dtCurr + '&dtEve=' + dtEve + '&cnt=' + cnt - # CHIAMO URL - response3 = urllib.request.urlopen ( url ) - answ3 = response3.read().decode('utf-8') - #logSnd.info(url) - - # log valore inviato! - logSnd.info( value + ' ['+ cnt +']' + ' R:' + answ3 ) - #logSnd.info ("Valore smaltito dalla coda") - - # tolgo 1 al contatore - i -= 1 - - # completato invio, riporto sending a zero! - sending = '0' - else: - if to_retry > 0: - to_retry -= 1 - logPro.info("WAIT active send to complete") - else: - sending = '0' - to_retry = MAXRETRY - logPro.info("END WAIT, reset to_retry var") - - else: - pass - - else: - pass - - except Exception as e: - if onLine == '1': - logPro.error("Server Non raggiungibile") - logPro.error(str(e)) - - onLine = '0' - - finally: - # in ogni caso - timer_busy = False - - #print ("end timer ok") - - #print ("end timer ") - -#--------------------------------------------------------------- -# funzione timer thread -#--------------------------------------------------------------- -def do_every (interval, worker_func, iterations = 0): - if iterations != 1: - threading.Timer ( - interval, - do_every, [interval, worker_func, 0 if iterations == 0 else iterations-1] - ).start (); - - worker_func (); - -#--------------------------------------------------------------- -# gestione contatore -#--------------------------------------------------------------- -def contatore(): - - try: - global cont - ctr = int(cont) - ctr +=1 - ctr = ctr % 10000 # round robin 10000 eventi x track - cont = str(ctr) - except Exception as e: - print("errore incremento contatore \n\n") - print(str(e)) - -#--------------------------------------------------------------- -# avvia porta parallela -#--------------------------------------------------------------- -def avviaParallela(): - - global in_0 - global in_1 - global in_2 - global in_3 - global in_4 - global in_5 - global in_6 - global in_7 - global in_8 - global in_9 - global in_10 - global in_11 - - global GPIO - - try: - - GPIO.setmode(GPIO.BOARD) - - GPIO.setwarnings(False) - - #GPIO.setup(out_0, GPIO.OUT) # output 0 - #GPIO.setup(out_1, GPIO.OUT) # output 1 - - GPIO.setup(in_0, GPIO.IN) # input 0 - GPIO.setup(in_1, GPIO.IN) # input 1 - GPIO.setup(in_2, GPIO.IN) # input 2 - GPIO.setup(in_3, GPIO.IN) # input 3 - GPIO.setup(in_4, GPIO.IN) # input 4 - GPIO.setup(in_5, GPIO.IN) # input 5 - GPIO.setup(in_6, GPIO.IN) # input 6 - GPIO.setup(in_7, GPIO.IN) # input 7 - GPIO.setup(in_8, GPIO.IN) # input 8 - GPIO.setup(in_9, GPIO.IN) # input 9 - GPIO.setup(in_10, GPIO.IN) # input 10 - GPIO.setup(in_11, GPIO.IN) # input 11 - - except Exception as e: - print( "\n\n" + PROGRAM_NAME + " - Error 3 on RPi.GPIO ! \n\n") - print (str(e)) - sys.exit(1) - - - print( "\n\n" + PROGRAM_NAME + " - init ok \n\n") - - -#--------------------------------------------------------------- -#--------------------------------------------------------------- -# MAIN - -try: - config = configparser.RawConfigParser() - config.read ( 'IOB.cfg' ) - - SAMPLETIME = config.getfloat ( 'time' , 'SAMPLETIME' ) - TIMEOUTSHORT = config.getfloat ( 'time' , 'TIMEOUTSHORT' ) - TIMEOUTLONG = config.getfloat ( 'time' , 'TIMEOUTLONG' ) - SENDURLTIME = config.getfloat ( 'time' , 'SENDURLTIME' ) - NMAXSEND = config.getint ( 'time' , 'NMAXSEND' ) - - idxMacchina = config.get ( 'id' , 'idxMacchina' ) - - - URLBASE = config.get ( 'web' , 'URLBASE' ) - URLENABLED = config.get('web' , 'URLENABLED') - URLALIVE = config.get ('web' , 'URLALIVE') - URLADV1 = config.get ( 'web' , 'URLADV1' ) - - LOGFILE = config.get ( 'log' , 'LOGFILE' ) - LOGLEVEL = config.get ( 'log' , 'LOGLEVEL' ) - - B_blinking[0] = config.getint ( 'blink' , 'bit0' ) - B_blinking[1] = config.getint ( 'blink' , 'bit1' ) - B_blinking[2] = config.getint ( 'blink' , 'bit2' ) - B_blinking[3] = config.getint ( 'blink' , 'bit3' ) - B_blinking[4] = config.getint ( 'blink' , 'bit4' ) - B_blinking[5] = config.getint ( 'blink' , 'bit5' ) - B_blinking[6] = config.getint ( 'blink' , 'bit6' ) - B_blinking[7] = config.getint ( 'blink' , 'bit7' ) - B_blinking[8] = config.getint ( 'blink' , 'bit8' ) - B_blinking[9] = config.getint ( 'blink' , 'bit9' ) - B_blinking[10] = config.getint ( 'blink' , 'bit10' ) - B_blinking[11] = config.getint ( 'blink' , 'bit11' ) - - MAX_COUNTER_BLINK = config.getint ( 'blink' , 'MAX_COUNTER_BLINK' ) - - # cv 2.1 se bit = 1 allora inverto segnale in ingresso... - B_inverting[0] = config.getint ( 'invert' , 'bit0' ) - B_inverting[1] = config.getint ( 'invert' , 'bit1' ) - B_inverting[2] = config.getint ( 'invert' , 'bit2' ) - B_inverting[3] = config.getint ( 'invert' , 'bit3' ) - B_inverting[4] = config.getint ( 'invert' , 'bit4' ) - B_inverting[5] = config.getint ( 'invert' , 'bit5' ) - B_inverting[6] = config.getint ( 'invert' , 'bit6' ) - B_inverting[7] = config.getint ( 'invert' , 'bit7' ) - B_inverting[8] = config.getint ( 'invert' , 'bit8' ) - B_inverting[9] = config.getint ( 'invert' , 'bit9' ) - B_inverting[10] = config.getint ( 'invert' , 'bit10' ) - B_inverting[11] = config.getint ( 'invert' , 'bit11' ) - - # cv 2.2 se bit = 1 allora filtro segnali brevi ... - B_filter[0] = config.getint ( 'filter' , 'bit0' ) - B_filter[1] = config.getint ( 'filter' , 'bit1' ) - B_filter[2] = config.getint ( 'filter' , 'bit2' ) - B_filter[3] = config.getint ( 'filter' , 'bit3' ) - B_filter[4] = config.getint ( 'filter' , 'bit4' ) - B_filter[5] = config.getint ( 'filter' , 'bit5' ) - B_filter[6] = config.getint ( 'filter' , 'bit6' ) - B_filter[7] = config.getint ( 'filter' , 'bit7' ) - B_filter[8] = config.getint ( 'filter' , 'bit8' ) - B_filter[9] = config.getint ( 'filter' , 'bit9' ) - B_filter[10] = config.getint ( 'filter' , 'bit10' ) - B_filter[11] = config.getint ( 'filter' , 'bit11' ) - - MAX_COUNTER_FILTER = config.getint ( 'filter' , 'MAX_COUNTER_FILTER' ) - - -except Exception as e: - print ("\n\n" + PROGRAM_NAME + ' - Error 4 - in config file ' 'IOB.cfg') - print (str(e)) - sys.exit(1) - -#-------------------------------------------- -# oggetto Logger -#-------------------------------------------- -try: - logging.basicConfig(level=logging.DEBUG, - format='%(asctime)s %(name)-8s %(levelname)-8s %(message)s', - datefmt='%Y-%m-%d %H:%M:%S', - filename=LOGFILE, - filemode='a' - ) - - # aggiungo 2 logger specifici x queue e send... - logQue = logging.getLogger('queue') - logSnd = logging.getLogger('sendUrl') - logPro = logging.getLogger('program') - -except Exception as e: - # manda mail o simili - FARE!!! - print ("LOG: Impossibile creare file log con nome") - print (LOGFILE) - print ("\n\n") - print (str(e)) -#-------------------------------------------- - - -print ("\n\n" + PROGRAM_NAME + "\n\n") - -global startstatus -startstatus = 1 - -if startstatus == 1: - logPro.info("Avvio Programma" + PROGRAM_NAME) - -## Verifica l'OS e di conseguenza carica il file relativo con metodo di lockfile appropriato + check singola istanza -if os.name == 'posix': - import unix -else: - import win - -logPro.info( "Start " + PROGRAM_NAME ) - - -# lettura file configurazione -print ( ' idxMacchina = %s' % ( idxMacchina ) ) -print ( ' SAMPLETIME = %4.2f' % ( SAMPLETIME ) ) -print ( ' TIMEOUTSHORT = %4.2f' % ( TIMEOUTSHORT ) ) -print ( ' TIMEOUTLONG = %4.2f' % ( TIMEOUTLONG ) ) -print ( ' SENDURLTIME = %4.2f' % ( SENDURLTIME ) ) -print ( ' URLBASE = %s' % ( URLBASE ) ) -print ( ' URLADV1 = %s' % ( URLADV1 ) ) -print ( ' LOGFILE = %s' % ( LOGFILE ) ) -print ( ' LOGLEVEL = %s' % ( LOGLEVEL ) ) - -# -sys.stdout.write ( 'idxMacchina ?' + idxMacchina + '\n') - -to_short = TIMEOUTSHORT -to_long = TIMEOUTLONG - - -#-------------------------------------------------------------- -# apertura parallela +import requests +# Note: RPi.GPIO is imported inside the class or at runtime to prevent errors on non-Pi systems try: import RPi.GPIO as GPIO -except RuntimeError: - print( "\n\n" + PROGRAM_NAME + " - Error 1 - you need superuser privileges") -except Exception as e: - print( "\n\n" + PROGRAM_NAME + " - Error 2 - you need superuser privileges. USE 'sudo' to run your script\n\n") - print (str(e)) - sys.exit(1) +except ImportError: + GPIO = None +class ReadParallelaIOB: + def __init__(self, config_path='IOB.cfg'): + self.PROGRAM_NAME = "ReadPar IOB-pi v.3.0.0 (Refactored)" + self.MAXRETRY = 10 + self.MAX_COUNTER_BLINK = 10 + + # Configuration and State + self.config = configparser + self.load_config(config_path) + + # Hardware Pins (12 inputs) + self.input_pins = [11, 12, 13, 15, 16, 18, 22, 7, 29, 31, 32, 36] + + # Internal State Arrays + self.i_counters = array('i', [0] * 12) + self.B_blinking = array('B', [0] * 12) + self.B_previous = array('B', [0] * 12) + self.B_input = array('B', [0] * 12) + self.B_output = array('B', [0] * 12) + self.B_inverting = array('B', [0] * 12) + self.B_filter = array('B', [0] * 12) + self.B_filter_prev = array('B', [0] * 12) + self.B_temp = array('B', [0] * 12) + self.i_filter_counters = array('i', [0] * 12) -avviaParallela() + # Control Variables + self.cont = 0 + self.onLine = '1' + self.sending = False + self.timer_busy = False + self.to_enable = False + self.to_short = self.TIMEOUTSHORT + self.to_long = self.TIMEOUTLONG + self.to_retry = self.MAXRETRY + + # Redis + self.CodaR = redis.Redis(host='localhost', port=6379, db=0, password='24068Seriate') + self.queue_name = 'IOB' + # Logging + self.setup_logging() -#-------------------------------------------------------------- -# Qui avvio thread periodico di "svuotaCoda" + def load_config(self, path): + config = configparser.RawConfigParser() + if not os.path.exists(path): + print(f"Error: Config file {path} not found.") + sys.exit(1) + config.read(path) -#print ("Avvia svuota coda") -do_every ( SENDURLTIME , svuotaCoda ); + self.idxMacchina = config.get('id', 'idxMacchina') + self.SAMPLETIME = config.getfloat('time', 'SAMPLETIME') + self.TIMEOUTSHORT = config.getfloat('time', 'TIMEOUTSHORT') + self.TIMEOUTLONG = config.getfloat('time', 'TIMEOUTLONG') + self.SENDURLTIME = config.getfloat('time', 'SENDURLTIME') + self.NMAXSEND = config.getint('time', 'NMAXSEND') -#--------------------------------------------------------------- -# ciclo forever and ever + self.URLBASE = config.get('web', 'URLBASE') + self.URLENABLED = config.get('web', 'URLENABLED') + self.URLALIVE = config.get('web', 'URLALIVE') + self.URLADV1 = config.get('web', 'URLADV1') -old = '' + self.LOGFILE = config.get('log', 'LOGFILE') + self.LOGLEVEL = config.get('log', 'LOGLEVEL') -#print ("Avvio ciclo") -logPro.info("Avvio loop principale") -while 1: + # Load bit settings using loops instead of manual lines + for i in range(12): + self.B_blinking[i] = config.getint('blink', f'bit{i}') + self.MAX_COUNTER_BLINK = config.getint('blink', 'MAX_COUNTER_BLINK') + + for i in range(12): + self.B_inverting[i] = config.getint('invert', f'bit{i}') + self.B_filter[i] = config.getint('filter', f'bit{i}') + self.MAX_COUNTER_FILTER = config.getint('filter', 'MAX_COUNTER_FILTER') - try: - time.sleep (SAMPLETIME) - except Exception as e: - logPro.info("First_SLEEP: errore attesa sampletime") - logPro.error(str(e)) + def setup_logging(self): + logging.basicConfig( + level=logging.DEBUG, + format='%(asctime)s %(name)-8s %(levelname)-8s %(message)s', + datefmt='%Y-%m-%d %H:%M:%S', + filename=self.LOGFILE, + filemode='a' + ) + self.logQue = logging.getLogger('queue') + self.logSnd = logging.getLogger('sendUrl') + self.logPro = logging.getLogger('program') - # lettura dati da IOB - value = readParallelaFiltrata() - - if ( value != '' ) : - if value != old : - #loggo e invio dati - try: - logQue.info( value + ' ['+ cont +']') - errormsglen = 0 - accoda() - contatore() - except Exception as e: - logPro.error("URLBROWSER: errore registrazione valore e accoda") - logPro.error(str(e)) - pass - #enable e reset timer - to_enable = True - to_short = TIMEOUTSHORT - to_long = TIMEOUTLONG - - old = value - - - # gestione timeout breve - if ( to_enable ) : - to_short = to_short - SAMPLETIME - if to_short <= 0: - #loggo e invio dati - try: - logQue.info( '>' + value + ' ['+ cont +']') - errormsglen = 0 - accoda() - contatore() - except Exception as e: - logPro.error("URLBROWSER: errore registrazione valore e accoda TO_short") - logPro.error(str(e)) - pass - to_short = TIMEOUTSHORT - to_enable = False # dopo un colpo il timer breve viene disabilitato - to_long = TIMEOUTLONG - - # gestione timeout lungo - to_long = to_long - SAMPLETIME - if to_long <= 0: - #loggo e invio dati + def setup_gpio(self): + if GPIO is None: + self.logPro.error("GPIO library not found. Are you on a Raspberry Pi?") + sys.exit(1) try: - logQue.info( '>>' + value + ' ['+ cont +']') - errormsglen = 0 - accoda() - contatore() + GPIO.setmode(GPIO.BOARD) + GPIO.setwarnings(False) + for pin in self.input_pins: + GPIO.setup(pin, GPIO.IN) + self.logPro.info("GPIO initialized successfully.") except Exception as e: - logPro.error("URLBROWSER: errore registrazione valore e accoda TO_long") - logPro.error(str(e)) - pass - to_long = TIMEOUTLONG + self.logPro.error(f"GPIO Setup Error: {e}") + sys.exit(1) + + def rqEnqueue(self, item): + self.CodaR.rpush(self.queue_name, item) + + def rqDequeue(self): + item = self.CodaR.lpop(self.queue_name) + return item.decode('utf-8') if item else None + + def rqLen(self): + return self.CodaR.llen(self.queue_name) + + def readParallelaFiltrata(self): + try: + # 1. Efficient GPIO Read + for i, pin in enumerate(self.input_pins): + # Read and invert logic immediately if required + raw_val = 0 if GPIO.input(pin) else 1 + if self.B_inverting[i] == 1: + raw_val = 1 - raw_val + self.B_input[i] = raw_val + + # 2. Processing Loop (Filtering & Blinking) + for i in range(12): + # Debounce / Filter logic + if self.B_filter[i] == 1: + if self.B_input[i] == 1 and self.B_filter_prev[i] == 0: + if self.i_filter_counters[i] == 0: + self.i_filter_counters[i] = self.MAX_COUNTER_FILTER + self.B_temp[i] = 0 + else: + self.i_filter_counters[i] = 0 + self.B_temp[i] = 1 + elif self.B_input[i] == 1 and self.B_filter_prev[i] == 1: + if self.i_filter_counters[i] > 0: + self.i_filter_counters[i] -= 1 + self.B_temp[i] = 0 + else: + self.B_temp[i] = 1 + elif self.B_input[i] == 0 and self.B_filter_prev[i] == 1: + if self.i_filter_counters[i] == 0: + self.i_filter_counters[i] = self.MAX_COUNTER_FILTER + self.B_temp[i] = 1 + else: + self.i_filter_counters[i] = 0 + self.B_temp[i] = 0 + elif self.B_input[i] == 0 and self.B_filter_prev[i] == 0: + if self.i_filter_counters[i] > 0: + self.i_filter_counters[i] -= 1 + self.B_temp[i] = 1 + else: + self.B_temp[i] = 0 + + self.B_filter_prev[i] = self.B_input[i] + self.B_input[i] = self.B_temp[i] + + # Blinking Logic + if self.B_blinking[i] == 0: + self.B_output[i] = self.B_input[i] + else: + if self.B_previous[i] != self.B_input[i]: + self.B_previous[i] = self.B_input[i] + if self.B_input[i] == 1: + self.B_output[i] = 1 + self.i_counters[i] = self.MAX_COUNTER_BLINK + else: + if self.B_input[i] == 0 and self.i_counters[i] > 0: + self.i_counters[i] -= 1 + if self.i_counters[i] == 0: + self.B_output[i] = 0 + + # 3. Optimized Bitwise Reconstruction + new_value = 0 + for i in range(12): + if self.B_output[i]: + new_value |= (1 << i) + + return hex(new_value)[2:].upper() + + except Exception as e: + self.logPro.error(f"Error in readParallelaFiltrata: {e}") + return '' + + def accoda(self, value): + try: + dt_eve = datetime.utcnow().strftime('%Y%m%d%H%M%S%f')[:-3] + self.rqEnqueue(f"{dt_eve}#{value}#{self.cont}") + except Exception as e: + self.logPro.error(f"QUEUE ERROR: {e}") + + def svuotaCoda(self): + if self.timer_busy: + return + + self.timer_busy = True + try: + if self.rqLen() > 0: + # Check connectivity using requests + try: + res_alive = requests.get(self.URLALIVE, timeout=5) + if res_alive.text == 'OK': + res_enabled = requests.get(self.URLENABLED + self.idxMacchina, timeout=5) + if res_enabled.text == 'OK': + if self.onLine == '0': + self.logPro.info("IOB ONLINE!") + self.onLine = '1' + else: + self.onLine = '0' + else: + self.onLine = '0' + except Exception as e: + self.logPro.error(f"Server Connection Error: {e}") + self.onLine = '0' + + if self.onLine == '1' and not self.sending: + self.sending = True + for _ in range(self.NMAXSEND): + if self.rqLen() == 0: + break + + resp = self.rqDequeue() + if not resp: break + + parts = resp.split("#") + dt_eve, val, cnt = parts[0], parts[1], parts[2] + dt_curr = datetime.utcnow().strftime('%Y%m%d%H%M%S%f')[:-3] + + url = f"{self.URLBASE}{self.idxMacchina}{self.URLADV1}{val}&dtCurr={dt_curr}&dtEve={dt_eve}&cnt={cnt}" + + try: + r = requests.get(url, timeout=5) + self.logSnd.info(f"{val} [{cnt}] R:{r.text}") + except Exception as e: + self.logSnd.error(f"Send Error: {e}") + + self.sending = False + elif self.sending: + if self.to_retry > 0: + self.to_retry -= 1 + self.logPro.info("WAIT active send to complete") + else: + self.sending = False + self.to_retry = self.MAXRETRY + self.logPro.info("END WAIT, reset to_retry") + except Exception as e: + self.logPro.error(f"svuotaCoda Error: {e}") + finally: + self.timer_busy = False + + def run(self): + self.setup_gpio() + + # Start background thread for queue emptying + def timer_worker(): + while True: + self.svuotaCoda() + time.sleep(self.SENDURLTIME) + + threading.Thread(target=timer_worker, daemon=True).start() + + old_value = '' + self.logPro.info("Starting main loop") + + while True: + try: + time.sleep(self.SAMPLETIME) + value = self.readParallelaFiltrata() + + if value != '': + if value != old_value: + self.logQue.info(f"{value} [{self.cont}]") + self.accoda(value) + self.cont = (self.cont + 1) % 10000 + + self.to_enable = True + self.to_short = self.TIMEOUTSHORT + self.to_long = self.TIMEOUTLONG + old_value = value + + # Handle Timeouts + if self.to_enable: + self.to_short -= self.SAMPLETIME + if self.to_short <= 0: + self.logQue.info(f">{value} [{self.cont}]") + self.accoda(value) + self.to_short = self.TIMEOUTSHORT + self.to_enable = False + self.to_long = self.TIMEOUTLONG + + self.to_long -= self.SAMPLETIME + if self.to_long <= 0: + self.logQue.info(f">>{value} [{self.cont}]") + self.accoda(value) + self.to_long = self.TIMEOUTLONG + + except KeyboardInterrupt: + break + except Exception as e: + self.logPro.error(f"Main loop error: {e}") + +if __name__ == "__main__": + app = ReadParallelaIOB() + app.run() From 6bb6e8b4f9693764783a5bdb658765bcf3b3777b Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 12 May 2026 15:50:13 +0200 Subject: [PATCH 07/19] Rimesso commenti iniziali --- IOB-PI/readParallela.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/IOB-PI/readParallela.py b/IOB-PI/readParallela.py index 076c2ca..e8d9561 100644 --- a/IOB-PI/readParallela.py +++ b/IOB-PI/readParallela.py @@ -1,6 +1,24 @@ #!/usr/bin/python # -*- coding: utf-8 -*- +# readParallela v. 2.6.2 12 Ingressi +# - single instance timer +# - invio multiplo x send eventi accodati +# - gestione segnali BLINKING +# - gestione INVERSIONE segnali cv 10-VII-2018 +# - gestione FILTRAGGIO segnali brevi cv 23-VII-2018 +# - (2.3) gestione 12 bit cv 14-I-2020 +# - (2.4) fix ingressi e conf apertura parallela + gestione vari bit filtraggio x nuovi ingressi + update conf con 12 parametri bit SEL 15-I-2020 +# - (2.4.8) versione adatta a raspberry PI vecchia generazione (GPIO corto, 8bit) +# - (2.5) Fix (hope) ciclo "wait send to complete", gestione timeout (rety infinito se IO riparte in modo anomalo) +# - (2.5.1) Fix numero versione 18.05.2023 +# - (2.5.2) Fix gestione eccezioni con report dettagliato +# - (2.5.3) Fix gestione stringhe e print x python 3.11 in debian 12 / raspberry OS 2025 +# - (2.6.0) Aggiunto gestione Redis x code salvate ogni minuto e ricaricate all'avvio 2025.04.17 +# - (2.6.1) Cleanup generale vecchia queue post test vari +# - (2.6.2) Fix in global di to_retry in send_coda per evitare problemi + + import time import sys import os From d09977f17a0a1d904088215b8de8e55413fcb4af Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 12 May 2026 16:14:20 +0200 Subject: [PATCH 08/19] Continuo testing versione --- IOB-PI/README.md | 66 +++++++++++++++++++++++++++++----------- IOB-PI/README.pdf | Bin 95259 -> 124512 bytes IOB-PI/readParallela.py | 17 +++++++++-- 3 files changed, 62 insertions(+), 21 deletions(-) diff --git a/IOB-PI/README.md b/IOB-PI/README.md index e1dea99..568928a 100644 --- a/IOB-PI/README.md +++ b/IOB-PI/README.md @@ -1,36 +1,66 @@ -# ReadParallela IOB-PI +# Upgrade sw IOB-PI clienti -## Overview +ATTENZIONE: se si copia dalla versione standard, SUL PI VA DATO un dos2unix * x tutti i files.. + +## Salt install## + +Se il minion è taggato come iop-pi bast dare state apply, poiché dallo stato top.sls è configurato di fare gli stati +* iob-pi.sls +* iob-setup.sls + + +## approfondimenti + +Valutato python-rq x gestione code con redis tramite esecuzione workers python gestiti in autonomia: + + https://python-rq.org/ + https://python-rq.org/docs/workers/ + +Testato ma al momento non è rispondente ai requisiti del programma per cui si rischia un blocco inf ase di invio se server non OK, per ora implementata copia "manuale" della coda verso redis per salvaguardare dati accumulati (vers 2.6.x) + +## MD5 zip## + +creazione MD5: da powershell + + + Get-FileHash .\Mapo.zip -Algorithm MD5 + + + + +## ReadParallela IOB-PI + +### Overview `readParallela.py` is a high-frequency data acquisition script designed for Raspberry Pi. It interfaces with a custom GPIO board to read 12 parallel digital inputs, applies various signal processing filters, and queues events for asynchronous transmission to a remote server via Redis and HTTP. -## Panoramica +### Panoramica `readParallela.py` è uno script di acquisizione dati ad alta frequenza progettato per Raspberry Pi. Interfaccia una scheda GPIO personalizzata per leggere 12 ingressi digitali paralleli, applica vari filtri di elaborazione del segnale e mette in coda gli eventi per la trasmissione asincrona a un server remoto tramite Redis e HTTP. -## Core Functionality +### Core Functionality -### 1. Signal Acquisition & Processing +#### 1. Signal Acquisition & Processing The script polls 12 GPIO pins at a configurable interval (`SAMPLETIME`). For each input, it applies a three-stage processing pipeline: * **Inversion:** Reverses the signal logic if configured for a specific bit. * **Short Signal Filtering (Debounce):** Filters out brief electrical spikes or noise by requiring a signal to remain stable for a specific number of cycles (`MAX_COUNTER_FILTER`). * **Blinking Logic:** Detects and manages "blinking" signals, allowing for specific timing-based event detection. -### 2. Data Packaging +#### 2. Data Packaging Once processed, the 12 bits are aggregated into a single integer value and converted into a Hexadecimal string. -### 3. Event Queuing & Transmission +#### 3. Event Queuing & Transmission To ensure high-speed reading is not interrupted by network latency: * **Redis Queue:** Detected changes (and timeout events) are timestamped and pushed into a Redis list (`IOB`). * **Asynchronous Sender:** A dedicated background thread (`svuotaCoda`) periodically dequeues items from Redis and performs HTTP requests to a central server. * **Reliability:** The script implements a "retry" mechanism and monitors server availability (`URLALIVE`) to manage offline periods. -### 4. Timeout Management +#### 4. Timeout Management The script tracks two types of timeouts: * **Short Timeout:** Ensures that a signal state is recorded even if it changes quickly. * **Long Timeout:** Provides a fallback to ensure state consistency over longer periods. -## Funzionalità Principali +### Funzionalità Principali -### 1. Acquisizione e Elaborazione Segnali +#### 1. Acquisizione e Elaborazione Segnali Lo script interroga 12 pin GPIO a un intervallo configurabile (`SAMPLETIME`). Per ogni ingresso, applica una pipeline di elaborazione a tre stadi: * **Inversione:** Inverte la logica del segnale se configurata per un bit specifico. * **Filtraggio Segnali Brevi (Debounce):** Filtra i picchi elettrici o il rumore richiedendo che il segnale rimanga stabile per un numero specifico di cicli (`MAX_COUNTER_FILTER`). @@ -39,32 +69,32 @@ Lo script interroga 12 pin GPIO a un intervallo configurabile (`SAMPLETIME`). Pe ### 2. Impacchettamento Dati Una volta elaborati, i 12 bit vengono aggregati in un unico valore intero e convertiti in una stringa Esadecimale. -### 3. Code e Trasmissione Eventi +#### 3. Code e Trasmissione Eventi Per garantire che la lettura ad alta velocità non sia interrotta dalla latenza di rete: * **Coda Redis:** Le variazioni rilevate (e gli eventi di timeout) vengono datate e inserite in una lista Redis (`IOB`). * **Invio Asincrono:** Un thread dedicato in background (`svuotaCoda`) estrae periodicamente gli elementi dalla coda Redis e esegue richieste HTTP a un server centrale. * **Affidabilità:** Lo script implementa un meccanismo di "retry" e monitora la disponibilità del server (`URLALIVE`) per gestire i periodi offline. -### 4. Gestione Timeout +#### 4. Gestione Timeout Lo script monitora due tipi di timeout: * **Timeout Breve:** Assicura che lo stato di un segnale venga registrato anche se cambia rapidamente. * **Timeout Lungo:** Fornisce un sistema di fallback per garantire la coerenza dello stato su periodi più lunghi. -## Implementation Details (Refactored Version) +### Implementation Details (Refactored Version) The script has been modernized with the following improvements: * **Object-Oriented Design:** Logic is encapsulated within a `ReadParallelaIOB` class, eliminating reliance on dangerous global variables. * **Efficient Bitwise Operations:** Replaced manual `if` checks with bitwise operators for faster bit reconstruction. * **Modern Networking:** Replaced `urllib` with the `requests` library for more robust and readable HTTP communication. * **Optimized Configuration:** Uses loops to load per-bit settings from the configuration file. -## Dettagli di Implementazione (Versione Refactored) +### Dettagli di Implementazione (Versione Refactored) Lo script è stato modernizzato con i seguenti miglioramenti: * **Design Orientato agli Oggetti:** La logica è incapsulata all'interno della classe `ReadParallelaIOB`, eliminando la dipendenza da variabili globali pericolose. * **Operazioni Bitwise Efficienti:** Sostituzione dei controlli manuali `if` con operatori bitwise per una ricostruzione dei bit più veloce. * **Networking Moderno:** Sostituzione di `urllib` con la libreria `requests` per una comunicazione HTTP più robusta e leggibile. * **Configurazione Ottimizzata:** Utilizzo di cicli per caricare le impostazioni per singolo bit dal file di configurazione. -## Configuration +### Configuration Settings are managed via `IOB.cfg`, including: * `[time]`: Sampling rates and timeouts. * `[id]`: Machine identifier. @@ -72,7 +102,7 @@ Settings are managed via `IOB.cfg`, including: * `[blink]`, `[invert]`, `[filter]`: Per-bit configuration for signal processing. * `[log]`: Logging verbosity and file paths. -## Configurazione +### Configurazione Le impostazioni sono gestite tramite `IOB.cfg`, tra cui: * `[time]`: Frequenze di campionamento e timeout. * `[id]`: Identificativo macchina. @@ -80,13 +110,13 @@ Le impostazioni sono gestite tramite `IOB.cfg`, tra cui: * `[blink]`, `[invert]`, `[filter]`: Configurazione per singolo bit per l'elaborazione dei segnali. * `[log]`: Livello di logging e percorsi dei file. -## Dependencies +### Dependencies * `RPi.GPIO`: For hardware interfacing. * `redis`: For local event queuing. * `requests`: For web communication. * `configparser`: For configuration management. -## Dipendenze +### Dipendenze * `RPi.GPIO`: Per l'interfacciamento hardware. * `redis`: Per la gestione della coda locale. * `requests`: Per la comunicazione web. diff --git a/IOB-PI/README.pdf b/IOB-PI/README.pdf index 10a2a3c2b80e84bef24b3ba2e6626f9b17a8baf0..1263a218f49d23b047d35e345e0fe09c826e7683 100644 GIT binary patch delta 86249 zcmY(qV|1=D(5FRFsAB00BHOJHRIzsrby(;G!v(!F*A;y4*d{nF6wou{kKf#=k1e%rb(!1s#_m*xtu9sgd) z-~QOr<7>vB9^dz+0$(48+k}2spY=}wA3na$S+o78w|!_>;So&t^;jkU20NXdc@lyQesTzaG$u(l851-K4W;PuJJy!$-S# zMYg1vmZWTVf)%wqI=qG(^asTHxjy?Y@d0L^M;L>c5+jfem;=;K4g~0({@Sf2Q#m%p z5ZXFTo;0$Y9iplNREm+Fz{Wa7v^$t*X2ON%+f%#G3;mwuA*I)EHtlgctMO+FB0 zz%$T{ViYM_^-B&+xMIK;+iRbc^_5L;Mao^(YG2^~5IAn6WAfVg6jZkPvF9f1Js2X2 zTm4;Db(m2#goR`L8A#BskGlp)_z#4ezyk$a<0Gp^vR;N>-^8b?jZ2ds-nr5u z{Xm|G@$W5gyt|3U?DJGW1>NNz)wE@cmt;$gi4MD`;g(_7;XV3Jnt{0Q4(`&?dzQM) zb=yNl4?nOta=Xjy-{0+W_J|Ro6{Wn>Gk2#Sh5hqwMltrIv~(-lFVif3a}YNAedU@9 zw1!hl*Y1EX@lbg66@`r|_>dNPN*D@n++6Jfk*%UJPqR}rc$QWGnJsdHJbMeWH(?7R z%ZfOz?Pzu1I$9BB;1CsGBJgomBKx_>P1gEB{Dg(4Y@6cn&2Ro06lw8v?Tj#Apw!Hu zu+G1j{ZJxy=uVcT(+`D=wvrzd^}AEtal|&W;xG%=Eb%Ci{}$p5oto!oG0BW|6->Ai zJD)WZvc1gzG%W1`CQDe8ghlBQ&G8^6?@pYYA(W4l#+I>fV(x-;QJ=I7Ybx#sEd4TH zHy`Nu@6Q*l_?>abt+HwCtL~{AR>O`b>oQvpJ}f477!XsKiEVYwvM6)JCWQT~3ofO0 zgwINnhg2g|A~8A=SoOH!-W0&Gn!<$DD9wTD6071W(v;HxS4IjejPo!H4Af4KrY_s^ zVqd1Qx~J4`zrJh*Chy#3dqStU)#*i8hXxy{b7a?QnxMwD6tt?riwmG^8L%R_8;P*~ za+_KA#Wlq@HW^f{DR3Lm#U?fxOd9`b#)wj1`g5DoWYF1+F<(*zzP_pzwG3KjoB@2= zo~OQ4koe0DFp}qYK{{o&?I1#6tgqHaZLK)ip%s}AA zI;}k{cS?+0JTp@0&cDLU&fhD{&>tXSeUU)3Jfx!nc$GggI{8`d7BlAUtPaz4dL$0l z6V)3H4tJQ+f?^UKMqW)dNk`V$3JUS#NyTqD`gtGcickkMn#kYQWm#Hsl&5SlK1Czf zj+A;XZM02Uz&z;>8F?P2lF?1 zOFsaBwK4peCfOtJ9Oo(T&g;9j1H&%Ha-HhwIp@d>$o+-*=39mJd~&n&l?*H=SqL&N zaqVt9(ke$&c70J4pw%j9TYSMWi*-0Q?kTC@uP;l5-TGV5AL+8%p$AZBP~H zz@rD{(imHjXGcyEYKu|zvX-P;Tqs*CmGKq8&Qde1dRdcaje+J!q8xpuBKM58^!wYV%g#YkV-Z+>1qR;o)Shl${NmCFRq zzaq=t8svrlbQvXpk%4ggGdP^=tHO2-C8KN+**ldmFFW{URcP1c6fAD|W>6-)+Xl*! z?S!M;5~j^}8V6zLa2d;-Ai;u#=vUE8D+L%0D z1^3E3wAP;t%ge=4N8^pc+un?Fk?>mPIHs9qKqQQU_4l>pB$6Kx6`#XNQq8ETHkJN^0v|Dp3DCws(Gzb~GEBn1{ zU_3UV)bYZKI-xWS<6oZiFQYsGthQV`53WaOmAQA4Z7YYJX&OeD`8)9N7%G#CGI^$- zl{tuc*CI2v}H^LzI`bj_%AZf)m-Us4}gAOv?Q8%rbAf zC$|#H=7)8bCK_)59>a)^kiPi(jJce31 z^poXy`l^*AAaPP0&pp%CPSC5%Ov;6}{XXlJY#V|-1v5Z$cA9Ee5aq@a9M_$QYzvzW+S z89L7&pO*bm(BcA;5@c`Tzh>1D#|c)?*iyUG1sXjL5J_9VV+9(YX+Z`E5nxI`cw=;* zC~{q}1-Bkud2U~`P|7|3c=>7ioZ$nqmh*AV>W7{UONZ-=Jie0w+nvX>nb-nP;d9M0 zdE1G3n#6pPiv4Yeq`#c2W;!fiNRV|<2^gX0Rgf(GZmWVSoOCYLo32k`l#gCUYoCNC z0stiw0lAOTSG6A(^tqf}3%x3BqLDo9>ur!XWr?G{!HM07vq8MnQs@A0Q@KL!=|9`F z{!!8}6=|I>$C57qTA&Q3rft5Pwgqq`{Ir+Vmh(~1>VnP3J`SH}7wiK$=B_tu1cL)V z)UD^`+i`hkrh~N8)ECQVH359%z)<=t_`W>j<9}i``a5pVO5$aj&G`~1ikslprj8?X>h1wpz3Q`K@)XmqDQRx^j!&fOg^dcBG*XVG;4BllZAr`H>teUYXgN#en; z($$YcwTRq+Wt>$Rs5TQOgQy6U*?@%%h~MaJd<+GuT>Rp(54ZAec2F}!Ou_}z zPvt>Vh^F_&^xL$((v^sfpSD#IoD2QwrIta_qJ)Fuqey_Y8ur1Piy@yEBvr#tqW5uE z!yK|cti1K#{Jlk(khP06cgnnKv~qR(G>noLKqhnY_-APr05kwHeUrHKvw~l&Y`^}0 z5wxy;?P04eKp?k&27E7B^o+1hV`q!iIS@oPpb_+;YuzleAk(Pj^qG-LnuL1nDg6oz z8fmhvkzSEZ>`P*NYg35fdwtTZdHZs2Cdh4u{kZY-<$gakw8;-~+MfMwip$~ zW<_M$?)`BaK=^&t`tAhc3gdMnfRCEv3hL)i26@N)HB_xT_Y zd;PVm|84#L^?v~NIxO32p6A#}MVi!kTgVT|mjB|+mW z2k^<1Wv=(749TvLvog|YFsNYhz>3*Kig;lI7BRTVE-#n`x9vjZnCu6JtJb8ew!S?+ zPH$fkXGYw=U$y~X$2}i!Jpy0F_Ac5SZ||ui?u3R7t-h}d0|fkIc73x%hVOUx``*SI z3t0Bix38g>69E3K)jn|-JJ$77z56g^o%}W z+QT`41JAP|W|Fw*ggh1^Dq#H2rm@@@c_sE_^xU`-_g68cFB`-*qSkB2-za;?iLl|F z5y$AS;^NsRCwctBkLgGEokNuBSk>cFPo^br=dR`Do_Nn2g==`;?u-TXx!=ZBsz%9r z_(kf7c6Voe^qpQnYlLyhk`Q^H$a_10MbMiS$)xpf5MtMRTS-z#5-3svRMpFJTm2rfAN`rARtDlsf2QK0~9hNrH<_d#ZtFLKQY_! zyd_ZuW`y^AxtO^Ntz{DqfrFh@Zn~Do`@`WFZ%5PqMI6>xqYD4i$(&*n?f34*N9f(_ zGiq%M?!4vRZ`rv)oHmI7rRb>Tw#9WJ0pg~C`g=vF2>J((*=jTLkt5GRy5P7Wc}h`K zOQK#7t%31`agryB0|KuUIcFscLc3H2n2gx6mj8SmhkC+cw(xI z@bQ8VBfLA!<{WftS(54srM!diRav>K(YS+3Ou%`<*!mExKcINR8vXG_2@FGjaSkAm zFc?6_|L`6E5!L!b&M^r6wUQi(c=Z&(dE-a;JZfxI@2aas#%k9{6^%xJ8d|I#8xL@0bLP0YIF7)3DCj1&RK zk48zrRQJM+|Hp` z=z*G$ux5{*?{U-oCvGYNtqyhO@s?b0qW>=ONEUF#tEsQ(nq9lIpsM-$%x(U!qbP7G z)_Q_LD`uf55vwaE-q+sY`g?&u$_v%!-AeQQwzJ?%V)N#B!?;E^^u{y=>; zG_xSvQiSMi1NXQQyg5<(ynBm5=O&(kcZAo?{xhCYl>cN5>Q`BP62yd``Lz>Bs45C1RjQ5`sY*Gbb`BCn_5RCCkx?$jFXpIuj={CRWzy&qUy4+pyRm7*m4+Zua}r z4pjPY(&(EN%=A|N>Xb2gV?=BaIWl}w|NK~($MdX`4P>|bk8i336B0e+g zDnuG57f39*0&y?!Xnjl!x>IB+=%BWC;r;QzrE${{NKz1hex6&n+d@GQ2k|=hmUDDw z$*rhiqy^vj;I9qTOF*2=yFG-MaLXB@;$iu2NRv zk}}`C5&B2xuv+Z;IC>F0t$@NOb{TiQIj1`xu!Hi%-$h(mW*R{Ya1#z0hRAaF8AfFr}LA^F)Z*Y>t5r>z-Fd<&xS|23MkkJFa0T37FYz7|~(s zbOQvdMU7%`CR44+2>H~Sp$nZSMM62;mZDlojbXegjYNz;xK2_dAgoGSOEi7JQqOHZ zj5l<_rrjx2POFU!-egWvSy^%*lgILpr{%Ky|D#6ph!CF#Is zcyg`s^>wCkP?M-T=@#oBmjsgohor^5`uAKBy^HSUAI&}N;L%V(a*kX|(hC7*o^@BQ zl7-FqFPwxGe3g5Ta0v{ivRWlH=B{1yGLr=wRGK_z(H;mZl4n00lrwIW1?o>V=?|)-R9|>& zFPta=vq(Plq(4(*-yl3*=9vV;7^j-KDp#vP?0$g;)QCdc0fDV1J6>`ylJzpLDMhg&2N)l2yp8LS==hISsnSP9?$j=yZ%eMO;kl!_U)&&Cp%*9#YO$}L_t}Q@$ zi?*txg8_tjv2n1&aE%3qbl;`mKZ)8SIemo+hi%#zbz)h#~ z^mAYoAG5Wbs83U0!#0fP>cZB0@OfcIzd;qfs$4=>sDL9xY-+G0D{yH-mv3t3(#w@$ z724upA1peIO^B2blQJl*m6KTX01E+akt8UV{0$dfHta043(W^uYgbJ zAi{!^8>0Y7oF8FFVxyN?18(RRpe3sf+OZS6-=hI-4Bm8tKpW(P1*jv!RZv7RmmqE2 zSMv%gu?UU{W6LKc{9MT=nlBI$I;a=fH3kNO@*0wM5jBa931i78C1IFFj;C}vAa#30 zI2jcWjyc zBkhy3a~8%Ag>~|M%d+BP1Y}pPIa(gAUZ7$Wef;vi79>+S{ETn2qB>-KqB#jW29pQA2);t0eIB3LHt*|eOe(eY%M|F5^y=F7<@1@*!7~RIvuwytj#@)}`eV2R zzETgtkB-AQO`ZMb?YTxj`uoZUqb&cPx*Wf#Qf~9JgpLMY3BkoE>Ta4^A9}^rH%py# z0R&f}lh(_m(i7kgEGwY{Q$8|=fyuv^Kf5Bho}^FCUDuxj>h)LOuI*pGPcw6FE<+!2#_3$VM4Mc`qf{o|-r37=&b`gz$@37?5| zUw8lF>9|O84dN1yy4y+a=OZD*8^RS#VS@Z1fcfj-jOAP6Ho-AL+UQ1 z#pwTh0iHhGMzjsCJc-vb2x2`;l5BT5wJXut10Do^>v)($v`O}h;!>%uQX*u3`dJFY z>wAT0k+J5=;tKAu3u2NhvG)Hhkgold0uH$n7Jz7hiI9f)p!BeAl4w7*1>X7^t$C!X;tvii(pj< z*n+}6Z2$sX(&TG*PA&6C$I?&8GsSyeAI1hUZK}*qEJ>U&fxm>?V z=r~KyLW7Erd3kQKFcEl<@8a%uxMm1=kCP#1JZZ$xalCI#CU^SYU3YokIQyrvpjfWCn}!C!=FowH*a|7`*Fnk zkv=bmhTe*7IV4B7x zpQ_R+=Tb{%`S;)~mxxk9o%%{xzq^e&cFV>1u1$!qYWM>R8Pi|RE1>U&PXJk4ozJ_~ z{xA>e)4()HmO(Jkn@Q)$w$qPc+(%yFd#L`&F{u^|gL!!%$e}v15~NB*Yf)(bX$z)^ z11b0op&tgHNDi|O^ zsvz-zEDMen#sUgnfFMW=5X$ifnLBBLfDs+SGlql_#Y*5KnHnQd6wivwqy3xRcNtM4 z-H#Dds_I@b4T?kQ60!otGt;j%bQYxR&L#2AfhrUCC)s;khA99&StA~ksjtI3&HvKX zk8*8$ACksP?BxiR@Ohge@ce?|h;MD6$!$1h|B3skvA=>&ecuWgAVd^hX|ZZFTDi^q znzpYOYwviXKI9x!r?udc=7J82X>a#reaAylR*T=&iWw&~3Xh%T!+e;0675{3nKtNw zaoAazV*Bl&!6Tl9M{@b~^(U^H9wU}Iv7zgdzRkP~h`*I60(T3K6VpA>+3ilYq}J{u z>nTN!u`{=+Tq%110EsF*{(RZI09$&IQ~Tlbv`}(Lt!>^l<}5q(G^ZUEK7Wd-=G6Yw z;g{6&8by*$N+>0JAt&?MDoxGody+6?3g2V9far#9Y;Q#a3ytY-e^Gnb!JkUlj?GPs z>SAw<=%C}*O*dR7^`#(V9FyO3~;%2w-QX#?{s(c}y*?XWZU0BCBlM#0PF%F>=J7bUbdG*gYl^-YKG10Y)WE4_`ka)~ zG<#)9Q`_YMr`=UDDQvMV+AQs^foF=Slbs+L9R7Zk7FRa@x`ybUI=Wh ze+_i%t~JPv0CvIk3r7bi#kA$tm|a}X;xWoxTmc`P5tMgALV(YQQi7!Tww!|>s6EK1 z_ZOi`p1%4wJUB~e!Ck9qHrmLWul#b4$pKv9h zd7^YG?<=znRrjyWg3sY$S)7t@`5;c^+~6rG_V_I|cH9iw@`YC;w>L)grT)(TYr((S zZ{R9??DfPoYF+>r=l^>*dZ=q#N#5r8U;_Iw{C-Vu~b_rxjm;;iadMjb?wVLE!6YFD-e)k&|+mxA4}-x z_4+!r)=G{^$UYM4JZD3ZbayjdLce%M&;$6mJw)vB`glD&#_Z9=T)%&k|D4vROx?gZ zbu7{SI^O1gLhSi?xtp^8+#l)b^tq4ye#?!u@A*7(ul>F`H6-YHof?s^Wz6Tz8Z(QG z&D9g$(t=!IpxJtZ9P^2&_noq1$C3VPWL0688l3jA582LxuCB9H%+)5d9W}f<-wilr z-(LsS9p@U-Jy4Q+pBnZibTeeTLPp^$NZI!;Zx#KEq|EM@imt3Z5Z;b%vsJuE`3)7{ zPH4+*QgnvY@>J(0zhOf|EWbRUCLF!G=iHAG=-!3dHB`ryTW{=FNnNa)F8=+Q(&fB0 zz5k$H)}}EVy4^YDwk)omxoxv4J_a~@%#`H6m^lw|fDL@LnwyxZH((Qd+t)~t;eRTC2EhnpjRDvyGxYCd zQZW?ydY{PE>we!npWyg@&#$I88w;~jfEh<|43BK{c7Mk{p#UG765+;6cIPpx3GL;T(32wyaz7tOAAq_(=486E;~MXMn3nq zCTCa)U!7kZe4bkY8_G||!*I(x&Z*+gKB;etZf%~yeuOjmZeIGQ*B*M;nJ4=%?_L{; zG3NODncdz#rA@2rJanrgzn{fzcP-9SB4o`mu9kE&Yh{bH+E@9X>;d*|XwP}&gaq1Q z#YlG+yNm)kQ#i2=6cuJ;)?o6jP}My+#*+2*&%(xAlGeLUF)5SEE_PFL&V&JMAaPo_ zWN`@+Ak+cPU`h$WX?t)*WXXb7wh4k#B;ZA4Xg>hDh^$ax=42Trzs~OskQ;} z__(fR1OriFCx#i|6!pbAxWfsF0q@IXRKLbum+yrQw2EYB$g~a54NM(Q7N>O%9+w~r zObreGgQCSH$beEyQWB8|{K&KK|=t$D@KQC_p6IiP4uoO;IWg>`x)MAV_?;g5SKd;xP1#J}eJ#ROMJIk@llw&f0a zB-Zc2L!wo@<>uoMXG`rW}y~6_z1zi-P+0!goH?Srum;!ybswQiYVMTvQCrs0| zu`Nt3LWCee0l|0AAJn0;$FQsUP)aQSuE^R6Gtxtld{n;9E2OOr9S|Qbi#~sMXMiwtcb@tSM8GzgZsf+k6Vrt(Gb~3QCD8c0EVUw zuVk;<9N(r~ui(Esy6L(1ZJNxx6BNIb0+8D>$Vo}!O+;%jk{OB9%|ywPqed5Lu#v;j zNJ;WXQ{yC#q$NtAktNBAtym~Tx6;y)Ze4#H`5_pyH+u;3xJTUr9&*D$Vw{;G@)3{l ztD2|f6}l#kSN>;r-4dfn0{9QCP<+D3X!M1Jg+g_re;|u&s08;MF^UAY=zma})40mp zI#S<^6NQc-Wnvocpv#?yhy(=3TF2&LaC{@#od@{{gaEVKXsHPJ`g|DNy9oGXZT5p` z0p7(n0bU=g1JUs9KTS(B`Nmb=7ML9S1+^5i>epinuAOqC001Q870Z#cms}~=3JIP$ zq71Avvdehdo&If}D%RQ`1D??IO4E?O5t8jtX`rrL<@Eq(<(2ELCoJWeU%g6`7PL%E zQN__>dV3^nZdf?p+T=)aVOvaKAlEY9Qx1NKGL+MjQnlD10q!Y!tfAK!V`wOG3d6%> ziS^85Y-n*R!T_N}U^Gq+5nz3D#=#jwKrlUlT{O>dcPwPD9*Q{k26bgn7ei$YkGTpn zk0X1CHrAATp`3vr2{gnO22Mlplg*rgpzyK#%(l0ELqxP>N>?>2R-B7ePNE>ijATil ze-R2CZ@F8Gi9Q&1%2w%A8r;5J8v87QOx+x5PH5pW6Tr~Whp8!)Vh0@yCNMSl7p(mv zlb{|}MIA9?Z|`R4@Yaxd-wu4jC}ECFTu0^&XYf=IpV%~?Wwk2B09FgcP3X9I&ouNX zdqSSCcNvK@&HPbmpCXWewfvtVRf=Xo8Qa)m=L_}S?hQi~-ny%D!HeEMA8v$%@3RA` zL>C(i9e|en%=`W&%R(+w8O6Q?M$@X*i(rJzSQWaVwp|N1D`a+MYuBcmWMADpyRp|O z*yDGmv7R7_Ygp%aw|pDs^du?Yg6Mngi@8?mzM}qUJZ6&(qfrJ80tu**!cJQ9j*mh7 zT1wFHD+^w=Olz+K^D)2fAveWj+1{+LUXZ zU!pc}9DEVHWEi_x>js->l0UW%wC~B>$gg}!%OILR>vINaD^=8LOMF{dUk0`EW7)Af52SLM524czo(7p<;(NVZuTq zjoO86jNUaUPzz`hiQ{G7gUTjMBuZBKB~8~TMO7(8NW`8bsmA!n$W|%SDc;Gd`H7e9 zNsiu#BUrGzr^%doLsqGp-Q(1*Fj%#(_yNuac*jH&B7`#Knzq@Vg%j`_uC#OzQBn zbSq>+yrUZy>C^bFK}vhnWeES{{TLDrMbOy~&=-1Y6QRqOc|F`c8n24yfdExI?D{mT zRXn>#mm7j0Fo5WLV2fqix2#WTM_6`jp3=Z}R+mk~r-!L{wKhbGnhD!1dhM-yFvPYvxZXtJxq;ChJkO-*CZ5u3$DwrfTq(!?-rZ*nOQ+>u?0p&0^Y#Rxa+NaV*RH=* zuq|-r;yh z??B;0yT$reHv;hB`AX}z{z(-I8^d_Gi3*g#Fy9&>u5nFh*Y|1M9ym--u2|1D1=TT_ za5Samium>#DK!b2cy1ikzrrNJ|H#l_*~k)p$^v*bS@9K#QVRhG;8-q~BF-)q3+KfS z0@>!c7v~BAbpGTQDQ1kF;KnQnkYTbZO_@sXV!mGsQ{uH*)@@t!S}5nP^ADM9?nS4e z|9H)c^&)8ISM^OBMZnB2OP?CchGMmVnWn|`R_I*oS|w;zmGVYu|CxQeUULh`8_$QZ zTh9la8|-1o7hX0%Kq9}jkJ;3ocTuFuib62FXTZ!CKdQLoIw_@+XuMPc)x-p=@h;X9 z*056xDi_H^M%UzHIv?2=cjU3~hSMOj;8cE-c1>}s5hV)}vHFs;7cj=KcuaL3p>NM8 z{BkmG&iI(oBRHfgKaMhgkMMv#WI2E66!{&2FrXFXA8R52-%{)`UHZ&N^d% zHvYBBe+ub*+IGv>+NBG~G|wgDc(;rLC(9+LQvD??-Ud!?k2IW&|F=^a2%%&Nsb<2s zYbDkntrn7W>9$EANd^@l6DS;_vC;~Olp?3qiZRZlXkwToyk%gT5oaKp{2_$oLSvxh zu5X}ZCb#Yxth)hg9?)|UgrM|A}FiK;-gHB>p*BF3+fVr3WA6s3Z<|lN~EzQ zxDCmn$m?pX|WGNTCS_j`#OnH%??Nz0ZRCuUIRt zOEL^<+JqytYv}91H-q?UYW$X!-|?P(86IKTCDzWP=^5<%Ia?puL<9NWqH=w4k`cI%V21*hg>Oga^ zE{4Hit^xIX908gY^2SFLZvkQxe+Jew1Y|`G=o0!biP(bv6Y2u`8u*{sATca~Eu2a* zAq)lcU08xfQxuwpRPHZ$B$ZHI7z$e?m0>(GW%*>-2ucWXpaC+u44u(NbRq>E%iacQ zTCh+96c*w1c^=DN6_bzho{>IOCK02I>PiwO8_A0|jv{{1;5*1pk_{THCjdb>1vv+h zHi4Mj(?$xvYlgjWSUsH07KIRNTNHjDs&Twh*oDk&RBbq;*srD>1y`M3IA*ymwv@h1 z?G$wpms**npVx~V++UBp;zOP7=T&7jiH9M^^BE7ePd86N=8`l*E zOo9wFKqV3iOrqd#I2jtPefb%VN5W|`M?y%(XBemi(f$v6&L8#&5>3m!3#HTu7O5UA zH=De+b@(|38->gO#I|K#Lq{LpCQZ~2n7aNKQ{bsP?IDO!*#Ec-RV;@dVwz0Om+f{o z)2foo7@nc2!vo}BgLfNOTW+FsxUV);1A}}5cRonl=PLXb-M)kpI;HbEMWl~9gUHWs zSQ`!W)~0VwaNV!vTIoRhycIa`Dr~<45EuCA%EEJ>T*3iT@$S=)L+3h#)yj>cxU@Id zI;N<#tO3-;^fb5vir={-C1(>EnWXEX@kML9v5P9$da!Nh`PVu;l~JDA+ffZ?84b3l z#?NB0VGEa6En%lUc%7ntDAWgtLZkqw$Ol46(_~o$#gcD{qJZ42cE<%8k})M>POu%y z(Aseu2^zqJjnm05oCnL{k2s1}LU+&&5gz<2ad)7rpOnXyp%2`%E~5XFh%V@*P__Tl z0Fa#_)iyj=K3}*=wrt7cF!ZHl!E8cAgR2IZYHxs^$>@=EmU57qfOaUS;_9rCXA4e7g_+X$Kbk8*? z8Z3jqCkwwl9amU1R*o9HxTL5C&>2XO}ehtmI5HLVJgxTrHJO+W-77tD^+H&z5?9xK6|QT6-q(K+QAW zjLFd1YA>4=G=HmsJ1udHD|=2#jBw~?>DXM_DdKV!LJV1sChT|1?LiR8Dx)XM&aY|- zU<m%h#~*!|LC}Iy86EXb*}@>dkwCVtz`CRu*BM-OJ%v99tej91>pxUzS}7_LLWxyBqUJ!{I}lQ`fc5A9bR` zyyuC889+VN2#;D<>4AdCte^aPvy$tdr(vpkVlEfHUQj?b(J>Pl5qA0v-ELgDS{1vM zX$}J>Crv6BOU1=!by!tKmD1ppws02Ivn|PvNkP?u4!;=7TAfp_g<1VUQt;MnmB>_?6>XYhoyb@lfSAN*j{yycwfW?LaX zeCWs)48L_o37v!Uy7df~5B^Du)fIU_*5hfD3GyBK*#k5urHL@s2Bov({N5B75_aK6 zMdGn*Ja28}fu}CT%y|xI4tv?Z6xuD)pG3-2(cfHOQ)zx!{Wi*SbN#mCztuO%-b>zh z$IuKcf9T8bH3vYDPObv?!)cKuc5;3;)>f%NW4aXs<+BpU(01sk?8x%plKRZb*m z(n&x$S($iOw$d{^6($0b8X`1W5U35wE>Kr}1!v2cN=B`uSjG&lwOB@NIGMVQ@a}hp z%u5f2vQGUE-98l_@+3Oj+IjcQ<8g;;pFCS@W83s(#behHXyBI&=_P;AFBV>Ssw)SH z#6O|?Aj+-5V?G?z+`SYiL)>gbmZQ*XtN^j=IqUgVP$m3AUi8v2G;JHD2Y*>2UV}tx z#Fe6c(1a@O`N^iXck=)5=75RR+Btuj$#ANG9g_{%-e0k)O}8l#@&ZE;5h{hoX6*Ua ze|dc&F~1x=o_?wDfW;>rvr`Y-2J*`x@&X9gy&vYU!f zvdG#;Q@V#AN%@ZdtR~kbCPU6Joz~{iJCp~ic1|Z-gjc6$ZuvJDbSo8h@4$bNTN>38 zvT9i~LxyYTr;<1g=7JgUjXpu=fUo!Qg>{2ul?>hvzV*BIugty)WQm%lpzQ#Djhbff z|HPLa`d#CDQ#l6!#FZS)HvOi_y{Yb2rjG4qxcrUlZiC&`&t|dcB+A42yHK~Dcj2)M zzjqetceajg%XILo5J}L>-Ul4MJxxw8_yzP~$a^mfkmDXLv(pOnD|ZbdMmp7%gzG)O z$S(IDUs+?yyZ~CbHN;HcHxdpVJ3oGZKZDlhGhVxI3F&Ttwo$VVA-dT*qVr%IVqnn1 z%Bj2EgrcWnPgGKBroJbw-8#VH%Dyb*9BWXiY$JhE3HA_5yqiafvxA~r0+s{TW)82o zJ})?6vilmdd9isf>C`_vQTJNELED#GQ|y8=Lk?mH2YO|SF?GI%$rC1`V54PL6ejUB z$S{1&vECk#FZuI?iK;1`ZYziB9~Y6_?)Clj2EN`>NI)s zmME<>O{R=#aE41vc)?oVtO=|_j9Q>m<3OC6KftLGl}fxR(9mAoY&Kt<33d@7#L|be zzM8HaEO@uFz@5n-_^$uwT>8qN_aQ3tFLls%J7URCr^_$>-Is;}C-P?VUar)h(QgI_ zu)-tCz^70j5#^3i3^Ere|3zh-zTNZjb$HCKhZ#`}!$T-r(9`q(B)ql}Z~=waH>HGr zT2!Z*+ixSW0Lyl(x6xRd>Bo!E_}Id;y>8hczwQ|J45jADHF36vo`MQv-@S#ifk;qxc&8a=$|34&E)1LQCnnue&Y5 z_4aikrxm^5u%C!Us-p`qrcib!|MzKeqJtY+s+Arv9)OLRiS_@@2~K6{|GYSc@7;b^ z{>O^qDtAE^ZMOK!_du@aER5k-96w$%E0GqQf|2l)GW z`Sc0@jI?mueXs0&SDMUu!94c9L-jp1(|kXGxV_c=f^E0`wf{6!`}Nhb{dFG-@V%e8 zoM7yEIqb;o**17Tt8BU6-rVx*^t}yej&r920_ybrSfI~}2&L~25i;4{>;?;at-RdV zw*!9iheqCmSRWCv(FZB=NczXO2vD%9(L$>ElLpOltS9(LCE*>GCL*DAb4AtLWhT{> zLAj+uz7AyY$qjZ$!wfOsbiBshmm1S}}52uoz@uTs=BUstJfu=_zbgSXvg0=T>Pn901) z{(N;`o~a~w&6sV^#a{?UH3i&5Wzm$Dn%Hk@%wA;*tSFcL|tN5fiPsf{LMwBtnz8=%Rd&6H6NudtPl|%Rp%EEN2o*JyVVub&XQw2QXCJ zqH}L$GO4h2LVaqbNpJ?|VeqfFk!Sh}#(iY&FH zpI3G)u%yo^NiHr$=xX@uGfgT(dkrm&ZK3sgLGPxcfJx|V{~G= z)LOriqD^y?Uir%9m5H{zOp_ug*;K8n@j*|!Q%?IG22lbjaUV&fMJU|ZuV=+iwPvjn z(cJ-MSwom}?*H)h9q?4W|Km~FBP)AkZ|=59gskkH zO=OQK>Nd%aQ??XEX-HIPm>DG{DMFDbrJ*tk^?&X;hc4gG@BjL|KCW}`^St+d9=D$~ z9P9bWl5LGRPD8u|CgI~rS!{+uX18%Fho59}#}=z&-~*zBl~3^f@-e;hKQ{b0DaYl_ zBEfaj)u{BoQTx@a(*mz6aqS7xQkS^Q4ii zh+!G-XSw-p%uFuZ3&OL5{WpoiFKV9roC;yoq)k5h*7sFrQV#v@0=hSoa`u+@nYgya zvOO@~o8Xj@C#8CiA$5z6v_$dxENNNs^&T44{PZ8L$(=PLWlWCHyX|BjNDRVm`n9NQ zhWUJo{9Lck0@LZIcP-}8SEC})uDSAnVDd!8``8zHcYF=M7qok9XZE9|_oHR^V~RWL zoY=kHbE6;Av-iF0{F2$axOqLw)KnG?@!*Cp1aZlswX!OY$TN5u; zag-_esXqTnx{Lj6dz}!+w-{X=Z6@$Tpm48IEBScKb@ixL?BRmT+pq9)??2$^;Mn%@ zdTM-4>~87rOpiLavNN@_GaVea&pNh!F@DGR$lB+(KKa#80h^3TcQ=X8$KCeyx|uJS zHGIidU1|{QO6B%;#+B7GKWwI$hOlyPq_WK|$c}cT@`=fw)A*%@oN0CKU4Q6@>W=)3 zzxtQFBly1aF4DWiV0Mn#tlo>;im#gvDimWXo@H|E%M^a-tr<3yd42JsU+mpojIMLB zWnR(>-)=_z`u&i;C_6TjN2Jo*M|a0&Y|z!GFEP>^W^X-xdUv(>43Cb1B~$*zZV~AdKGD6jv5Xczn*A?@3SMw9tg=nQbn#jyIbN!;|^X zH+cq0krlBP;=<47#2ZgO+U@M z!0JH8!6o*iqiQ>w#mA!dd32~)1zZ6=P zM)yT;PqpD5cEzT;i06-OepnNm>>~c-k!5CgII~<=xT%41NKzPhD}OAzBYuc;Qs_2Y zUYpW+HFBGhl7r93IPPn=+ESV-a*x!1sx-L$dFsR0*{AEy`RxgB&370}(?F!SZHTi+ z==P?408V(g=`oujeMJDat6eFRE!=cNoN;ZFjJSV3x!o{^b3F3J+Ty8S$9C=sQG^HgSQh)j)?5kcvvxD zgrWJ;v-mnhuCz;A+TvmB`fYq_a$M{czG39_XUr|FokDK;Y&Z=IKi4p9>7Xvhz+JNV z4e~}=-2R=(U5Bu}8y@ZoY1>WC;D21!M*MKcD}m)6O~RJ43rq!m97oTG)LJNedu*%y zf<(6T^Ic64wx#BhBB$j;mh@AX>OXU3{?aNk9^WG6ThU%XKUh}Z(VG<2-RoKLIP;Rl z`BUP(yuW+PUgqvM`}AdvA^mhdd1&wu_nd5dzaf0&}3k7CaF-1OZ_T%(D92r!NRF-X*@OVr+VvUF4=0& z$2~{yT=r#n+DE#g`q}m(K928aRCTmI{||wzXrop*K1qs~%80k;oe<(}4>Hh@$UJH! zp4j&;vjxBJ-N-FvgIjvy^cepos--_Ev+BXGqmViCf9>O^Ix74Tv zb5+=;2Um3`x$kskvqAispL*BGTwIrflyW{rYH+<&8IjPjIK)!jeyv4&M_D$;qPI-h z^{-RL!#g(W4x4{*2!C!<-kLutTauT)VW7v#=b*3BGw`c#S?LKOVMDcED<7P&;RO4Z zm*t?deXc9AdSqsF~n z*bv{Fc}Q9#xwY5oynjOP?u?KCC9I`UCY#_L@!UySY(vfF$-6bujbDs~CSw7ghrVno zq2%Vm$%}x`WM+*Dsi40yIh?o3Zh9vR3HQMPSVQMc|AkG;*iKd+6M9j>`e2tz+UE>m zLT%@u?Dw1Bkl*)y@AL~zUZ{F-iD|fK=fQ`5Z;ow`^Qa0vf3v`_x9V$oo=0IX-5jpz z)Y~6s--ZWW|7PTkEaW_!Klroi7n9d*Q8{tm1N~o(l7l!XFPwLlj5&UNXn9x4F1m2g za~)%^{BPB|4=pVRC8ujdFO4U}eJ0SIEW6*je0o#=tsn_J|pc@OZ_OO&&A zmUisj_^qe?x%Zu%!IQREgJax+jVZF26U=&1v)Akwt4TB{xRT@ZLxge2*PP>VkU4fN zH$5o1tJ>~7&V}n;-c|ABx{*eEj)$Ke9@%F;4&ups5_cl1d!s1!_?{z^H_Ea1|Jc+1R^$zN2ti;yStSt;ELIdp@cM9tN;qo&I6Iq`fHS2tKh7XLnP zHu5d6aSV4=IVKsr$(o~Sldl{TSjS)2>HejLK;({kz@n1>hfXmd{C4$VOISt0)v>PJ zmmZa9ZkNzW0wBBQ&);a2;YqZ7C{p|ulVSOgOGhp)KACyg%l$lC@$+kYAC_|z<6S@B zJtI`b7Pl=Z$=)-7g@YS{PpugWp$Djd&}vo>EzuN zQ~oT;O70P^S-yvivtH}GidqzDK0PUG-ZRc@da@VyHd)R8aC$M19(In<{x$wUc7wu6 zk^4MOSp)5F&L6!GeRJfv65Hxf^Tc>hy6(tv_F^dpP1}Ih8#>cZ8)zP#V!&0uQ>3S% zAyiK(Z2&LOv~mt~P{{ylR*?r!pH(CwcI8Ougo>sHUQAWYnn}ebDk9oDYNuy}Z%9<6 z7>-HB*3&CeOvQ#t1$j>lL!d0w(P8op@d@<`WWo?28WnD)NG6qSq0u2xVt7bURe)X$ zgQF~idQ{D6Fpww)D?~!z@AMbLBEOl6xnR^Ozly0s!5DKIEOZBhp&>z^G0u<(h8eQP z%7UjjtTR-PVSz@m(%^{!XA8)7!4%P*T)fpiUAC^j%F3JPE10K#poG&{1{DXP4FaAx;f3=;>Bg=!gb4ErtZ;YA9?r z2C~~JhC$gj6(gv^0#VUapsd_XK&3z}4~!bLLqj3Ui(wN1vn(S5BF9k;bsqG+RXfz7 zI&}po)R2yE1(6E^T8sc|)C~&LG^bI8?rUNJt<#$PP?;7?D=k3{%GBY4lr>o(CM_|5 z73$Vvq9ed6fy}kkAvG;-=pOi#q%F-!1zio+84>Ey$51$-C1PMWW?C%Jq?XwK@J)mn zh2phgzM%{q9w=Xn8N#@3*g^gu*SE?iLl zHfBgpPaP6;Wdzn6tfv5pnKIFmFi?r!c4P^#RvobAsSX`8305oxw+m#v)f&2N!^HfL z2NFc1OW}bJDhOnR9vU)({abKi6o8Pdz73SJlMz_7#WuvEFKpWa6hTWOLfzZ=A-n-) zCmVElCl}b2ppT&?sX}%7!t7#duq}wG!N%bR-7-L^SA#G+xhSqcqXunNRRTZ3R!Gs9 z8HzO6LP5!*hPt__m>LQCVW16fh%;t^Cbj{|>d=W%aiazcRZI;Lm>MitHz*abecg&q z;GaZE2r(pd9UdwQ0Gcy`H3dk>wB(}2V4#;~z$exyTpjTVzU>OoH)A%6=-DvXf3j1@ zKvg=T6#X%;U{l9JPTRF1@a00Z7##G-@IQdUEJ79A&1f-rXb!*z0D$}yjrgHyBTc9S z_%X@Y5K1v+fle4FLxZL)z&}Q@K-N3hAqx|3Ht?4hE746A2aS5lKshGv&>3@Ph-QZj ztvU&k-w_L`TCjqBuy%KdLwDgPM6-bqizO?RW4etNi-U$tPeFNFEVLL^V9nB$&1Ghq zkdwJMus22^er^`2lED! zB&=8P3RB<)W$#p^I2X?fb1oPx{5x2Jh5d@b7DM3?_?4dx5Zam~gTW!;&%)M{Mjbk1 zt0?(DV#UKMr!o>e7MiwG2F}OLs!IJf%p^E@1ir=%nK-dP7wjnJBZNoukf|6350g)| z37S^h0#Wt=Xi%OL3oU-dg~h3O!oy+%`%y9AVcEGsUG|C;H9~X_+>o*}8=O`t&_D=* z4mz{a;9+<3uxHt{0t|!ZRX#_cAF!0(fr}Oo)a9T^5jr#epK76#QM_z!RKyZ+&|wQ1 z>P!qL1BxBsiBP^1>=Ph3gP2N-Cqcgf28zy?GdJL$farXOlO|N;2$H2M3zXsv;@%Fn z%>V4xrtycn5G8^!JOfo}ip z#zBEzK(|c7|3bCeT31uUK<7Nvc>is}uOf*ORW^Cbae%53#vq14^1K@)-~~IzW;Hb4 ztinuy8o|fcJ=vi_Zzf8rJ-3|;`t2YVH7wX_si=oW&9+cz5dSZ*>QoEWK)CV1${?i+APS9uXqACcLrqH!mVg^H z;sbNeie$f?r48ocWNg%il(B-l&w*yX)I2I`0}wE4nz^?yLcLM(n7;_9$- zuf+&XVE-j+8Y4MQ3^jB(+CW$QVCdq@pRA^tTIZlll7R}nSjE**=R;TlbfRKGhyc$d zNIih`&!Sy0q-DXu%!3saAEX5@NJYZNiX>i?eyEYe4f*+r|8JUAhXoDQ`U9G`vhrb7 z(ZI2qXd?7sH|$i)#$hUkRmDK3c2n{$J=g`yb*->SP-lQ4%Rh4m4Gw=GMJG(_!4Akg zP>@ol^8O#YA)4KAAtH%YMHLLn39Kr@H&zu^51;}z7&pi@P?ri5sC>!-sZnDw&@6%) zlHcP%y%Gzh?!kk6-LyxMRuv0nT1io*Uz9X}Mh&E2(46jp%UWn5h=uPTUsx)u0En*Z zi2YCG!y;7|q!?sKanVfBTO|aEQ^M50sE0+WD`blI;7{sO=-U1u1<$;`zj3}l{%0(9Ie4CY<%Dq z<_&;HHGx*CSft7Y8p-+M0;t)9-^_+ZDpr(Y=p+Rj{+}3;`e-dbxSRo3!0{$LJ0${& ztiYgfv?iSbU@N|{3f1yh2v3zoKtcsoH!w7nRcs=)9e|BwR4g85kJ_*xJynpit>~oS z6>$H9h6CVQ%fdm!EvTtM{G%nn@kauSRNZSiq>fY&hsGAkwfzYe8EjGc5GcZd$4X(B zE86Bms^az%F#L$Se@iFagyp!ZF|gHG6~xfCNsqtL$Xd zWeXD2kyc`jNC{LU8|=!=P7=F3lv^cI0(Fcf!W05$5XLS;rf>-pNX@0EjxuPU|Et6x zQ2RlaE-Vay`M=T$f!aEW6wL$iimrgAAciGDg%~szKt2B#YHH&|+Atlut*b~rYEhH0peL1<#3D1bwSuO$T@n)9D4~x;Eg8tei+eqIi&6!MtiS=> zAq68fcZhw!5UA5(mNzgS5~VT&pkZC0bU-`3DTaAcpJJG+VZ)5Af=wBP0n3zHAz_sn z5UF#!8Z2hOG%Wu$OcSZC3!bLJYFic%U~Fxhg#~RE98;Fptj0`jfMBFsr6XmvN@+;1 z2;_xUHY8Me=zJ4PLemA>qXBG`piHeqHOgQ?S^~S=FRjK;ZLv@zn9BkwNrHb(1_|w} z*HW9T8mw?Qb1Vah=wxK*P+8;k>(W1ChBN5K}Y~NV0BROgad6N@CGT|e>RpRDsRAnmXPAN zxaD?lH7!)W09H_@@**oRO~t@wiUa-A6lewD>JNmVm1U~|QaJ)xfj9ycYk+VHL;xA- zuyIJ|xr#MZT@2#?mFY=Th7G7e1EM4j=~&m;A&JUj!D3WZj= zT^yLR!wOu63HU=!jHwieSyrIr|ACq+GvJW35)euyaL8H38u_YGnKHx@~(T~+mWpNz!a06xARE*ja zpmRI7NUTj`IHdRgM+rF7S#e?N5y%QiYL@{fPDx`pWMF{kWMv_>D*#^yz9ouVh6tpL z3>T;n1Iz#zU<5XSHNaN63T5uHI*;Lyu?v8T$_5#XP}|SS$U+=PJyKX9ca{Hy+W?7D z4=z@gQM(S9TOh`>43NUsnz9od_@PmjZ8cuXNStyUh|U94ambVfPGLB79)OYnpu#et zW(N-)vXB9irz$m8Xry)qaFhn5%7$A$BBK~Cjxs@~#o^&`(h3MbJThLO(g_}po)Rl- z;N8oPL~ZpTet}M>*leT9Dn5{tJpdTZTgaG%nh$tT00v2bLaK5TeAxz`2b`^ef?pE1 zd?K_8IfmK}@st7+cH?Cr6lT_HVr3cvKvLsc=7;*69|#9k%o>JJA4De^IAlt)ilHqo z;FtqXFNq8{*4QzI+K?&Z1B&}BU#(fqAhkgf5LGRM1l%FR2`W_~QwtzQYKx%E*lBTS z*9~fV+;Z2w8WnZ?hAU}AmMA0&HkfT{Y|AA*kR>(36`CIN zr!D`)LhS*RX^V{D3KHDfISVdJSC$P&Jv#wpX>qT|QMzPGUA}xbXte;SgESbJz^P{$ z2oNUHgi{FrXQqXr21H?LZK((kOC zR@*XM3Wsae249l_Kq-r1DF8T}6se5| z9&x~9X&f?ySVJ$K+BH@t9c(!2b8#Hypa>N8V3Go?MRWxag&R2X{^JHu84*y5yH&{G zqaPe)Y$J_XO+Rc801TpGu$z*tsp!Xp83s^{Bpw+vtRy8vq%xV?5F=t>TU{!hp4d zM{fSDWsu600fWnJ5FVLwtX)iHreHBLx))vnOkr`Ywvf&kRADQtR&z*Y%m5-#pUP?m z5%r)#hbHrN3!v&e(CWvY55zmf&>0`5K_+QuRi8Zj(7M?g;-!3h$Qh|x1V@Qf5I=(rb5 zkP&ofmkxSqSOnk|jeh8DNKlZV1wVRDf=4{(E~1|d=o>jx1mQf%eTQ1O3>TjE2a+*P+%+&AyRI=7)XiT;ex`*Vsx5|1}Y@@ ziK!EzE0Mlrbh3g$CM!Szh?dbit>7796oX0tgLcvw^b!E5A7TGOFO@Fe4+XCXY7E-y zVbCLL^dctEBLdeOgS1NEh9V*t3|e+$PywMg7s2OZJ}H^~VcQE)K!m{kzJ85CN|8K$oLc zptsRHou8syp$3LsIs8M{uN?lNa8ZB8uADcaUPGxu$-pVGNF@kf z5v8N&T)>@BL@Nh1sD#ifbXe4D{v9`<5<+7Ic4cIb!bLJ27E{X9Rwa5QNVDz%$H%+dpH%lb5Xt9hreOC=Ap? zaLCLFG)M^Z=qPA;cmohcDZpq1_pU5~0A?XEzlhOR^UAW-t5%&*k_sIX9NSW&Z?N%Dl?0RtJuh@}FDtmHduA`6IOT6a;6F37jqvpa>tXa%bqBar z+`m^0+`s;{cPscyAI%sq0X#gpri2+SEfq805dWy%7|MyGIx**v6piQx0v=?8S24om z*P4@x!+1thnMq0WLmrZ>TNsYXivKQa@;J1e#wzoHa4XI26U?bS7>y7v{$0^EH1tPH z{9O60!rwR;Z0Fd@@37(7+#b7_#0^4kVqU+Wd-8SP#B8Kx-_;72=a~0e(@I9Ej`p=yI4a#e`@XAo_u;4nUv|Ck>o#;3g?CSR&Mm!kI)vXa@_JX;>yig; zowb|92sH6SyRr%0rT0*=OF4_bO*4%dw*?8l=R zt`P2|as?DOL~!Wczpc5k|GsY2Y}3mixfkAFKascFi~pI)%Mm8O2~W5>K|k+nKmCoJ zz~1{)v{|lFNMqrfw9AgXjg3RS>s1O3LXI#v1@V@yn=ZHcLn!Q2_sO&|v>4ftK9;lo z=a)JGOU4bGww=9WA1@J&t?HPIa9!7WHk!6|??e7rny@JDb;{p@Y#M%-rUsX}iT@Y=g@FzsG(UCdQ`CAGK8(-W^deLC((x|II$U`Q3D)YNGwL*9FIY zJG9*oY=6}IC-;xjyIl=`vgxm^ze4Koy7eje%}3It?qJ4k(a?q`e{Oi+A5(hI=bv-= z)y?M55h~&23H8@M?#EQcWQ0C!SS%X;G^hC{xMAA#&qQc}8sDDkskic2ah~SlW9^%! zB$~gDSPp4jA-|nyYAH@gx)Q`p_swd^;FbrCyT_DQ7LM`GF%vbJg)^#*!p)L}FUu>H zf_5F8;iPYp7&@ZVJeRBd`moZG1f|80AdVcb`uR<_!nOu^F75ST{;PN^SG-?bq;0cF zTh!pRv8kfuYMX6ieTDhnq1Y>&KsM$UK}xywmj>-L;6Wm za#fyI#=2zOzH?*;K@J^9+&)J8b>$w!?&f{DX*L*vW- zwJUyS)>VgzY##AaoZ?q_dNfYGB(;2?+*8&wwyQB-u~BG) zDjP0L`IGnN?(UkRLqAj#!y|;U#hPR-dI=jNRdafE5-2QFvX|4J%&D* zde;~Kz@DP(mnEBC-&D+6VSK)hmao4kv1CclH%}nG(SlP z^-ne(l*Jy@XL!(N`5}X*%~G~mZ_J3>`{c9)oyT?XLp*5l&{kQ@!A6f${JLVPC#JP` z>YfJOFdn*d0R)*6`3%Gj=38Wq1BWFOV2XYUYwCUhSe7r@a z-}-o~2w(>KQ@Ah>`ct5=imIIbVr{z$Q~zS`H~ZlE-AB1w(<)Ur+N5c#@${x@tFe{~ z#(i_o4Vl`?bu_%tGu}j-bIjDt`&(2Oc5f*^qc^F{`&N~p|A^TbbIpk27_&U4jW@S* zM6nBZUys&bkX&q&gx6`$Q+qjI_)2grva5-9Of)y;M;h5fWV68E#sNp4#q~d`TKkVj zh8?bAevge6QO57J3MTCxjdu--PdHxte4ZtR&o%W?>XYjmOw)>L*F8!tYM3v01b$_B zlx7)@Ip`msY|3|+TLC=qU&HG>uy*yGYQ(w*Pc@F$lH2+ZkJrAK-{5ezZ+=5Vi~JbZ zmByJi8OJ2S)QoVc5LKNfyV{<4K8G>sF>lwSgtqqD%?%_SeT5LBPIL5boKCa+kXQVP zPvMuRw}dnXwf2vV#0YvR9`&y{& ztB~Jndu#4$UT8DzPiIfd`G!4OIU+G8bvHR9jdxmLFQ3ZW==i|9CrHv?K;>I@K zJ?_@V94q)&byuV2{7@{-*SE~xg0EXbz>jtjZ$X_#hc;sTiOSUX(;Tz>PsY6CgS9d& z`GyWJwY`~^`xCGztT|m&#Z!!_Wqu>*GR;n2^ay(Je!izaStYEoKY3WqLn~1w{Any( zTv$gen>(hKcet&(zkTGTYO4P<>lX04<%wyQKPItb{PB-QVhmKzG|d^{&$O|(`e>zz zCIxAw6`vT06`()iwaBW=)i*E5#`zfh;7FM!2}u)6nTHKX^(VcaitR1kgQN9%CqecT z&D-=rk}%M9GN=q&kmQ5&9WXN?miprKi7oy($-O7WS?Fw7MEt&K(*5lmIY`&w876uZ zeBIW`raAujoF)?AQ1^%_%l*a?B3-e6n8MK~*m?X>Hx`{H4}t0#7M-pUdAdsP>!+Lc z@C$X1sM0xLYmYQN;&*Kuv8MCKswI(|!daZ1Wf&RUHZCSHOWm8RuO z^v`PcdYecV?fwR3qS&i9SFI|@UAlLcMy~;x-_93qFd(3?E zWMFp*;NHu5BS4N|PQZrCqPYU2$-9Uv|d6*~{4Wn^*N~qc3pY z50MhR|2BeiSG^g7ic6k!%yTn$irjs4)WfgzLlZTsj&F{=|yf|*JD z_Tn5|SJVnR#C9g7j-5zNaDUdGlv;Trb(=xLhSRdS>Fl4r)!n%~mAIJ`c{ zZrjzKbGMp2_n7p*Q1SUJdV`1CdHr#smZAJv2>fdS8`Hj?{N5jN!{b|elThG^*Sasr zTmRl!U?vV<%j2F8wc-K znO~cWdEXA5CgUS*4hpe$K7^n@Pd|L? zc_~h}S;_g-fiI`oD@7e$i-lZuC7i6^U=!?=zerjy4Ox^te^S(Aa_VWWg?M?fi$;== z05n+wrJlXe^6CApsI1W%o;Z<*XA%>h9hhl8qUe109pCfx2hgq$r~ejTGfZht+3bI* zRNX%Rr_>%ni(fqUWJTxDGS_1KzNl^1XNFFmk})@(NZ3x2EG`~8DWnnLY|Wgui~U;2 z!~N;BNtX+-!Op$1B>togm$n{Z*?PoQe5<(eNvxzXBd5W(BMioyL>TqGWTa9Jyju_}QKda?{q}h4t=1n&SCjm?EM@A+oR*RzCRZ%A3LQ_^ zD);2q605LP;^F(eoV)_O{JgBaT$}Uf-$cCa;Q2e}&X`EkPcw7{d}l8|j~QO1^@n)u zVO}v4j~JqS5H`=pB+FMM>tcr=qqNDXNd?Z!6H?IbtPN07Vrzl9G-R@ABeZ+7VO7js zsbR;g-y1y54tQgu$a?0d1Gf99F&<&q_3nXpSe7~VL1$Ns+e$XV;Aip`(z~Aw|c>e$`IcBtIw9CtpLye7>Y`6$RZfzrYV=Jup#aECc%|vnxsh z{hWFYWN$q7vLefl;cv=pR>|ja!lWeYhu@G(E-{ui$t2W$ou3?ie4uLQZ!Jt=;oh`S z1Nu#pCJAE9(y~nbMGs7D2q|8-91Sk|-RY~)x8r8kCR_Ik%T+kpN!syvZjQFIvx5{b z`8}-iPIUO~bxtG&8VtC=w56BEzy!PPlp%iw(_V>ElKo?{mkrNl^CM+y(QZc#?XGT4 zR=k{TYu;naHCFoJDc&5HXP&RGzIW>m?TOsjXdvxR<6Iet~e!gk${$Rd2{Ga56$YC03h_JalxP-j3) zZIFGAOTuver|A#Z2ZNN2{FK)D6byUa&ih=?Xm67qa(j@+oZNFYB&9E6>f5dRjvw0J za(Beo9KWt6XOZl6xYO&I$L*uTPAL<6YqjdXOy`f*j4#BqseRs?!Q4?8lN(+BIKZKh zjlaI|eV9g3gv6-U$cHD>rveHKS!DbLWXiu(PacT%`b#J*Y=3LZ{nJY7=DrWr6|ckw zeH2`kuWRn{JrELltv3_8+!)M0FD&IMFIP^_EJToh41Zaq<-h1D_Sd?IUg3R9Aq`JHKCv6Mqo4S_ zba42>`~62kEJc-Ld&$N>ABf)u6w1k)uD3OD+gP)w;4y381&z@;AbJJC4i%R1`QJ0Q z#ojnL+ZHC$l0zEwD{f7uM|{8ct8V|nGYLXUg*nB=p)rF$;+O8}gnpflct!zPNdeh< z@7tj>2N!N!pOf;5-7`hJrcG-jQ%1+HdwteeJ3FK^m^4dHnrm!M!`**7cFJ|^@@sAW zg=4Zp9~#%!vN?=2Ki@VWpdRU;UG>6jy2NZhQS;@l^t}0(F9%~6NP&O*PPb}Y>3;X} zTxogXL}+{AnfESL@<#`lvR|jZ*mae>@anK|t>B#w=$K~N7x~}j8_%@hYH7Jtd1O*V zPl%4l<42|OOU>lO*P<$Sv(9nVGVs3T>}r&%6}O4mIL6`V_FHH_>$OG!*Tg&F3j5Y` zRq-)i(R`N2-AwFiQJ-Q7Q9jdt&oSLs%_S(Y=o7mp`#bd^ z-`uFKU=HJ-lTZ}$;0VFoZ{bdTpjDWbR91J1X=+EYPq~VxCVA@Fu&tkU<5K^zUuOek zCdQ`8q8#flISs#$a`#y5cHDAM?w~ZNj>oz5*}5N$J02gL_Rn@nyA${0gYHZ6wZE=^ z>;6P8z5o5U=O(R77%qf(4KLE{!;e9yI=7ZOCR zGpCx3Na~nQ-pMy~P#FIA`WcgRvU1$VrMrwJ=`BK-5`NxZ(w>=)4KTspz9z@_Q>Ly& z(gCm2$t(4%gb_!ZbYAC@oUwvq=e(peq32F-zq-~3ORrefFP2^rHaEl;_%i+qWEIeq zev-voN?!fFU#UEVY{q$Q=ILJP(Xz+0>_(h~&cmaU4(Da8TJ~>~G;w_+orE(PN;6UW z&9>Ej5VPnIyR$f#x5Bc^eB!y3bNaU^a(-!(-k!735s>yrb~^rNtex*IL!2w+qtDe3 z?6_OA;mW#CJU5kX%by)NzuEcvncWhMkHVanPRt1Tm0n=BbZaWq8iRb)EgGlGm88s7waB^Cf>d$d0Ab1a`89iI(hqg@Az6AvY6we`|xh#$M+kYw|Va#F3gs6 z=N8x|bI)?0SNGIrdFk_HDSTOtWWcpO^&0)-mKq=PuU)fz)na10+w56Hr?T!F=dT5V zXEUx|b)e6RDIR)$hiL4nB{Fw9dxP_*Z8MS1ZKtxIKM^!9mwbi`HWO%<>3`RHt$@Q= zxmaCADGq1vJFeSbA#+po=pPSNzVp2;ySlDpd$1WLTA_4O)dzQ-ov9}eq&~Mxt?_s& zda;<4@cQQiy#t)((g&h#3O>F+_A!HnZ#U~>2FYI~rEgg2Aa&2*UVHXv8-{Q9iV83h z827Q5XZT|)v*?-iF8O0tm7HP|HRe<0i|iNt zMQz{n&K(j7bgK-w%KXuV*6c@Ts>N8>1c8%nvKElSO!&T4kMhPq=Er&ab>5|`d<{$ zOHqkYI;VK()Im0nGV*$_%rLFao8+hY*Mia(Y@MsMTzY@(H|B$Pb@T7NV=4{Z#dp2z;=9Qwo@Mz2gD((^2coDl} z$D7|G%6@}FkA@TE4xHIPW6FEXqvg~Y`d6V5L283`zkeOO-Y_>-TUycXe>wAAGVSd2 zsY}3j!^p)qZ1S_JqO4lpm0kE_`eA=_X3wW>@A9FS?Hz=2vtZ{Zo(LaLW~oEpA+oZf#b*Y-5q5mH5mYW0=~Bi8LEiEF^26GZbvi zUF4(b+8{{q+VW@SQC)rKm0C#AJ(QgOt5+$z#mp;!rBZ#S<7v4?@T-eW`im@WW79o9 zfBRNs%hc7InCK7aC|&9`VM+MuBNkK8U{^k&!Ow03&9Vp5zfYG_a&kAgmiN4%tQWeL z(Am3a!l|;+=&yFdb?dw9w9GovE=e~t|2*+bQS8RBmGD4%$Ly=mJmXezPj_+Gkm+B3 z7ZrWo8vOB$*sieaGk&86Ve?#nX>Pj)`D-8ZQZCpjYjCXmn8OCEO;KjLSpv)*x3E`{ob~vEcb_Yp3lq+ z2Yi_JN9?2N=)9R9gzbrSVhhaouW1R4j(fg2_;6c5=ER5Dhr50D^nVfSyWhdzTTohT zZ@>Lk$*hx6w9oz@)#)EU8cPPnG`bWe@QnZN^Kx)-$T>LEbFvU~uP!h5Nc>aociXx* ziIOAe5;qPAkC%4KhB8fCjnajF+^N(#T|P@t()>Jf>Vl0my<2O1{6_^+xTO*p|k%J|kSowv@Wa0}tPqL6F z9VRYYXM~q0eOC3hRaE>aA0Wxi^8Q4tgxHr%a)*fCX^vh5;%1(f9dyS_GM;rr_(2YT?msA zjBNHZZu^raA7D^krCU~UK0G%stt&=g;qMOmR}wJ-^j@1aYOZhwWSr1GmL3>mYa_Iu zE@qa@a`3MJR_o@BA69FIukO&I-a+Y{3ooMnK3~EK$BEC0R3?4C{`QLFMwLxP?+u-* z94F7+bkdOu!EqIl_Gq;?RhVSSU;e(^X{VxA)$Xz97GsU>O4g+&RuVnCW8Hl(-2Od~ z8uZ~#g~Y`Jv#FDh1Gavf4ApV5I@tEpPkg_*maYfcu}3vC{xog;B-*ea2#KQ9vU!+X; zUU2nM5hjmHN1PmNbYl|PhbfXMZ?$~Ou*4h7ut{J1ai*U^ehbgIq$AHeVidV+MuNWb z>{lh#*^?%*9P;12_8NBvgyoAWzmw2vH&Q&W9`UFABCErxxCI^uR(^r2KWp8d$@rFT zKW(@@V>VS;;qqk#1wqzL-Z`Tqrg^6(S`~RYY26GZ$V=_1u98QbvEFdU+RdxZNkWs{}`1+L1nCrsJDwk2eV zZXSO<6_#F1yc7T7f$0Qy2KVc5`%~;MUc4%~IkR;~kNUa>o1sHZ7n69n)hg|d=$ZVv zSta)U>fyyf@>`nXk`wk-+98B<#2};Ryq7L;xtYgj4joAUc%pQ_yRV@-zjfR3-%jc_ zeNWHzJf!XZd?P|y;VWDHQM+y1BU-k9zpMJ;SoY|6`QMkF=YG>G2iK1ey`qtEi~2sr zlXiTFIk8eOcK_fa*Za0b{e~W#(Z+~JUhA`>WeogZKaUUmM3!RSo~nrx5uIM(vT(l{ zG+@&5L@QF6K_gXVKG;iBKUYYhbI;?M{l2b()dR`z^o`=~Uf((WYw`Aj16kXoPbNKl zbVFSJb2vuEbR%I$z>fG#)oH89!aGlP3152cU}fQIulzhz@3f4wde&tD>n_c(_cVn8)4qmog7;AqSl&VxWSCWuYb}G9FKUd4>P{Wd9 z=A<9s?JOR9wmBs~mu#dTk$-+q`aAsNfQeyt-dEzp?iT@57b;9`D(Y_;v)K&)(7k%C zdy})(m#GUziG~l{a8aD4l?`GZN37r1Y`CY?(z85}Sx_Q}j>ZADR#DvEQ_U~Ib zqrX2`ub-8~E1a=(Zh`zoQ1pGWX#FP}J09*wGEsKigY0iQ9?SC`h`+dy@l&%*>E|1z zceQuO2bdb>7@UpjV`f%d@-GsDuU>cIn-$M(jtZSDT3CS>3)EOS@g2$Jo|+J0D` z5NP^CGi^yw$y&nnW|Tn6MQiVa_l*mZOjTmINN$G1H{=QR!&~Fne95kCN)OK&sy})f zAawS?+1~lg*{#Lieu3jhF+6FWflnJ)5?gGawv0}wwDb*d#@X9q1I@SsHMcsw5V}d9 zSCcy=k})WCEHntfgvyjJk{l(WLEQ0K@_ zi3djx{CHe+$3WRGeEdOWH2HRn=&op!WaqBQwh+(LwKO3^o2&a2e6%_?oaw)7F!tEi z7|)t^*V3@Gq}iPLqbr2h ze3Xum;s5o_?sLY{saFTsw(qUsQjaqKso7Fh^MwNfy8WPM|_SvhIWh;Ss6ta?QPFm=T$ncfK9R}*Wms0n;(`r9xmymqb}@NFQ&mj9OM<`MoXJ&9mD^+nL6q7I@qx1pS!c9| z)`j|G<%ahB6y17!m)1cDfglo)QGk>s)uzq9O|rzoMZU~f|}K`m*ved&H# z3G-{FQK&4PB-;E&;m|gcO5XG%J?8H3GI%Ap96qo&Grl0CCPcDIY)N_A3*Lf1s(7!i zJcwTl9qqX{izj{~w=;1|^5S{xX>RpPu15?eK+DtGhIXC%5v4IQnmh(@^eZARC+qvt z6151n)WlZ5i24KsJ7&D=;o(v~Rvk8yO;imY4-xaA85~UKv(3$}HwGIhKoyuFL84=t zB>dbE$)^Y35YeKrfGbF!Ct`L<-iKA)uB)k;hEegkl=3W6-rscJ?zmiW&Z|3gI5VJX z^)wu%7sgRcG|DaQg`NaJIXm&$*h(L%KKmq-t<<1yvI4hgTSZ6l8@fw0SjKehk5iFZ z(xZv8Zx-py3Kck|R<0(b(#EiK>Cmeb#1ddA99!1IdqKdPS;AOA5X6h!N;Sb`%B0NQ z01^_2LsM!}<`f0m=f$w5uI_9&1xt+~@eD!xCl;L-2?wCW5^eyuGbR-Bfgaz^T?RJj z%N1x1!c*UxH;$W964}2}4d3OXvpKu`)Pp~JMeV}Et4u6Nm_AO#BSUA_dISeOT0BMQ&cJ4iD+zU{3onu6rH6$1NlxLVVG148UtxVLDtEjB9R z8d4RTt|Y{+5AdZmkeLyxmQ=s5b5axwdMz4Ls3NXQ%_I8P|`hEm-4fez4w_+_} zh+43u$-=r+9KBFEh)rnGbPkfeC`TY*?LQWYpfna1kj5)j_sW+ zSLFy{r28jSq}4q9;%+``236cxjfmJ7iE_cy$)ob8fJm=yyVl|mKr4)Z-et0X`X@CZghVb2bAfgWzO@|e)?L#T3h++Z{+t{Hp`*(H3Z5}lqS9M zgb|VTZ@$|G4qCz7LFV+V9st6C0viJH;>Z&VX4xYMAbCJa7tTSo>6PvyQX%^DTrSTS(-J-e$Qv<2?{l`>PngU*~L>hS2S_8 zXSPSr207V%AY@-^y(X*|a}#k}fWy-a_lsWNw+y#y_-z<|Dyo-617!4qD?723hXGoW zF;8|I8`;B>V~EY%LFMwit&CYy8;?2#o_$9A|G z)cji#lqy7z=1Iney(2K1B4}*ALcN01vs8d`Chi%9-~Er|O8mSTO$TWU(UaIk?h;-D z%ahhc*^*)fyK{Ur(sS-GD07=lp~l<&&X?D10QPl^v&guG5soOgV0Kb27GU< zz)@4u3;WH1iNAp5=aC%3^MvXMDky?_>Cz(**lxx~@ zE=B^I5QdqC5&dz;ij* z-$Z)z$!z*AiKb`!yZs5NxVkv0Gu56julf6wV*gY-5z+FTH0BX|=Di)?Hg)-@eN>xy^kN5B6lvhCbP zy*y}+`u~7Z_Eu3Qu8Gy;`uI!)1SH#jP!+u?OZ?Tna7#qd(GZ!GvCr+xXab(Fya@Y$@DMNKcW z4;4FlAEyE$xTi^5F_IziqfX+uu7j07q7<_O_KP#B%F@L1tR4_D{I=?)izG476}cZ9 zr5^(TuSCoGP``x(^O@rUwB?TR#gd1Xog->P%ESx~g2QALKx=NmK1&rZqw zc;?`3(Pa*Jc`-^4-P#<0(K9qR9DUrgTzb1(=Q*s&@ZLpCYSRnxk7k_{htPD$(h`eW z+35p8)Q%wPgreT%j}eD``UZRqJ(Q|Fw6Fo^M$r?sU#zO5Du?2qT3NLy>P=EHl`_?4JrCf#JwobwGPiK5> zxfz|&nDd*xix*df-3*>zTeEqHB7JL^0+u^_kIcs^DRdZTuf-lXbq-5XMKbtMvOFCTG0QaAH1Wd}COA?pS)Gzo-aIB(YN(@+*)o>G*K7!?DW%p^3YQQn zqC)s=ul%$*D7uJ%kfjM|w@iYPCor#p#ShYLZdJ^x#6-LbcQws0-<4Y@4HN5s%w0~f zd7ihMTmE~_E zltY%v?=s}XWE{i5afV&J&gaEOR%LXXH%KvJR4@=0U&z@wq)EF)4xA_jkLGOO%N-N~ z+wYX_2}uTU0r_h37`YU;QZO;7fEnUqJ)zx z0qX4e!RAbhzta6m>QXRIw6zOSkw7KE@7GzYKMpJa>BPv5+_%9u=U$ox`ArLU_aFW^BN-jc8WckQih%=Q49Go#zl zVXPJw%slyy{1%6&?$!zO%k*b!yEdkio11kAW0T$6nM-K{ut}?yhW*tq1m!e;8o#+C zh{F?5ZT38-0FNs9fiv))Ibg84BXH>#3da9@_U$eaC-(HQM6PjbcV}3Nn?+I({e!}- ze0GM!@cGc8h|v4@;Qfuk@$HtkuJ^tm%Ms(RM_YID#$WLXsh+WzzWax#E(5>4^S+?` z;kD^mG(V@qiM3{m+;n?x4uy~`E50bmmSJuH;wC}cusJ?x4BHQy9FY{&l98V@%GMb^ z&5peyZu8qP_Ee!h_7N56uwg|BPIW^57K(bx3abw!)Jur!qVd{Z3r#%HjvaeDh$_1Y z0lNnND+9Y9&YP&7`tHI<;E7+_oDmweS-|t6xNe-XrZtl*4B!;q4gs!1kz|6mTs}9T z@2m_(ZcC%>!Xc`v6W(KTJ}V(bOiuRZSMHeckl2dD#B-n8M^iX;Hpx)@%TVGK$1D{cNflY9_kxrWgTE-yuf!LYmsIgH0r-4`r122C^cTSXYZF>+t%vXrnJR}0}Ro@me_imuH+8k*~GhpW@yFAS$C8)>q!SKhvVAEUWd?$x{|j z&uSZP`z$ghA6bF(&v>R)gO$B=)O3H#H)F)?2l_PBS>D}(SXD-%d8t_jwf0Gh%!s3< z^#=C`U#Zfq+I>4I!Ghf_`{;N4Pv{C>tVC>fz?!yGS*n7kb9vq-zPsuvn;N?LDVV{{ z&BGz#R^OK*qTu_QJ3RTp`RCsoJ$EnkKCk5sUjolLY`8c_Zx!wDW0J1bF*((a6y9X;$gDiLmNKua*l&lCO zaWIchq0v=LcQ-dE%x=X}7s|x7ljUvQp`Pu>T!kFa*iUo`m(qU#0<|?K6FP9~6*et< zj7Pbh!h6=3hoaTulvFr}?*$`DUlEpW8!;`d2_``_y;>~aSLeuVIqFb*4+{#u*HD<#kCKrm=AF1yjAON9NGd& zUxGsD!p%cWIssW-zTGljdl={Ul{;TkZ#TcH10{*BtLB0nj^@SC=M;p_g7SQW&=eo+ z&mzuETJ(@c)d+2=B6(sQLMR&A$wgabuIi@z3`S9P^YpVfR`6Gnc`JK+HoGv+iPSSD z?jr7NgnR(HrCGaV>N<7psO(Rj%mwDZjU9cr|6D#RV-fbVS5I~l`kW{;rsTW75cM_P zJzeOFuj;D0czf50g`Pd2;wnfrcb@Ywo6Mlv4bbhY-T)txZWGQbN zE^o5cI8?T$?JUj{(|tN^Lpb1JcfI(?EPp8WwebTEW8_f$=y*Kr>5@@ZJ0!R^4(_CM zboCbEa!b&AM9kjSHAwJrF4+Vu9H3$n=0he*fkR^&#inL%%!jT4V7-Xxt1r)MD@_c$6>X;=$w{<+* z*=fBhK>X|t*mSj?K5B(RI16_SwYZ9f&nL^;YJ^wfqUDwQCCdGp?O0N=_>aM&MEFPN zJZFSIqEh9#f}^jwc`?T&#Zx(kYeH+VVy>^hWEfH>HNoYmBD{lt{+lGI<5b_8OwBL= z&y>><)sJeBzX4B`d7nR+({@PC^jr*cfJb~@_(fOTb;9X{5xyB6s#e7@mbQ%kWltOEScB!N;co@(Smo5?{`<+sk*V#nHeOW5JOio+|(DGk&KAf?oV$kL7*VjYG;&O8m)V!&GtstdjNT17d zp|ZQ$uSFtt+HYKQ=1WpZo9yR4i&apT(~xG*C~j>ZhtN9Xgu@sosd$(d{+9v}p^&3B zQ^*DP!Kf@HRn`96#)1NExh>dv_iT4bGcgEE-<{#xHNLt^y*_QHmB>zbWyrW9(xYL2 zK1wK&2~2ic)Wolr>1nNet7yu6ZD8CBSkJmaJ0tXMr{r+!78{WbZmW-Ixfe?c&sr6W zxyW`%vOmI7@7j{EV>7cdHoODi&G?PGrc-B6pYXl5`;|zaLk~O4spUx0ZY3N}H`hMV zMT}jYEzEP-=w2xYScW;BY*w%Xc%0_1@&5`)5bUFDXQ}9}?2hF?iF~Dle38UJ?k}Vt zo194LOO5^fVGPQZ5?Tn3k!dmt%DpbM@RP#CB+s;*BG>higB{mGrJxKTxX}QmLyjq!h`hT4%Jw?)FAOxXYDTv;+T< z1t|@BcleZkN+Q@XC(bZ8_TAsgjXAMmmm&+Y+tF;YHY$=PPq9jVpuXydM7d~~`qFt^ z2)nYxXjE9aHK>0(Rg(Y#8HFW%^}Ks>ni;}_8%Xp z#JnamvN>i6DSFij!!RAml(JCH7JU?rDgjpOlpzB5>y#t3vJ$W@auYKcIc^Qbx=tdX zz^MrlZyC;eW?o*qrFCwuAir0!1rdr3f0}}ZiEZXK865BN8#J{j`Ja}`+%q)`jzJt& zz&8qCHWBu&zx#mwdCkl?iyJ7y#b~nk%q1R{mkRqCJz>1=59o#Ljk_g{I9(#OZiG@Y zmIfx1T19@5fTQH49x#Z6Fsj+=iXWf!zdivdZKG&WQGZ0pV%y7!lIw#`ntj04*jO}? zIi^clndc&Cq*)l-hF|z1ti#!>1jSUmr&H8%G&QXGFmwRc^DHt&_{umE_OoTUz{!J+ z>J3Ygx%E1xFnHcV8OIU``b~6L%@jQj7Z;m;iUSOH>E?v^K+&?Y+}8IU=f_3Ai#r3| z8b_#GY01);pFch}8UGGfM~ac*WIUUL^ZPeG3qoX>YU6x`A$jQPIW_$UTR&`!UJXNw z7d7+#0NDES-wbNc?~1m7H;7({UmN?Qn&L0YRdA&EhN)<^Sf(H*BKQWy00PQVm*)Ub zefopn&nCfDQtdFI39-fvD~DQ_xZ(7RK7oRUu4vBQeaoE)6>_$&y?L$Ae;uY*kXJgX z7kv~v+3!2?8V$s<`D=uoTJG4&8oW9m=cBv^*j=?|#9ht>tBj1@P+VMeF7}S|q+}|S zqQUOIK(zd+7XHJfc6DzB&oI*wEuFQRsNR{&HY`29PB?F zXYTeHSf>BvzhL0zVq)WLLh1O8Gup%zQq6q1c?6Mc6w#& zCyvJkF(HZFe!>tYi3T&vqCgXqlS$!O%rm`!{D2Q)!4F&C`~&|$qDWHa+wzF#J%U7ezJ)cINvnsDh~NakE(Vf3v6`m!Va&9+x%E4Fhy zohGL>MBi*d1`Uzs#FxzaTn}KvF4& zeW8@>?^gzi6uR%9$4=1&-3aoVLrCVG_{-4mpUOyJU1TUts!3@g7C%GBBw^ILB_bwi zC^Ch_5gg9&3(*^A!EBgBbqJga(M z9zT2d8aBF>No(;)Q(B8ai7g@xV3z(jJN5WBuErmF?;XS;3(!Atw=o}u z@#7aRi0l2pv1J}>#b-^^uQP`~d~a8&=#$7IXhawi$5$n`7!&TRI+BTF&pTdE*guBQ@sOzu zS-URl^s9KF?SenNF0)f%(;k;z34|I!f@kfyErpMZ;Hic1pq=U%4O>mfb7Gf4Domax zXASH9#swRr1LuE0i4*M^2V*l}QH9{kamcpsl1AGz1qOjR>%lnHWm<~P=>jez6pT$j zMMwhga}D6@0dI$ihm7m&{zJd4BMeAB&(B9STf$wh)pv=_mS_oHYcGgBK8md^A4bXf zH8d^$i`(Qz~eDShx7=NqH38DJ1$_XBG@T%9c0JRP_C!N^MBxNq5 zzmIL_&$FQXfj(0dvK;`GO%6kFn8TQ^67qeig-QD# zi9b4RgM2%9(@*q{FU=Z+BU@6MVCr(TUP<0B3JREAlft>ci0vHE{jKn}gmNzCR!@SpVWhr)PJZB8y3%7+^Uu4j=+f41P3KvDSlFnqp(@!O4jr zkC2Z$@ zaJ2Psunj22OGW_fnNb&h$NmYpX_H`P2-yZS<0Vt%83|kslaSA55L&lShCe@=FX(HS zE&-?wAdgN07)I;^>5<1;fv)p`?63MW+| z(Axt*e)W8%)1sfU4S4oYrX)H}wE`o4bmPrA(dJf*C7b}{s=3NpF8(@*X5$2bw34sX zypT@5bU#dEg4Bx=`c5{5TvMNH^Nfs8cbY0Efs@O}>!b&p<}>~Qtq|AwN?FF}6syHa zg;jc*q#2T)-HuK_$;%JSGkT0Yys5>K?aI@AI7xr|L7x{G{kEw3Zo??bll}|M!kdrk(8FHQ!I8|X$jcr$FS#%Q{2Vb`?xlx$d$8DiN##1g51 zL~`DLTH6YZ;K9|3v0d`v+ul)FUDp`I9+&ib)sGm|9+Mib)yE#h9&Z>79)sWIAMPes zo%DWolNyS(rU708ocjn29*-KnH}bkKYcaYVTA2Lt&GyrTD&8j=4+9zx(|;jyc5nR) zWIk+~GzBCu5?YU#1fI>qklqS|;`9OY#6t|X@h13Lat($xlnwBg!E3MXB6in2qITO9 z286CaK0v<94h70)cf=6GrkF{Z1B&T&R`J@1e5h9Wz#-xOeX?)%ApdjlsLBa*icc{L zBH`cswItpVkx~+c(%+;>()fJo5(;4bE-c*Gl#*Y@f)6RzPHpz%$Rvc={>6ZsvAno< zFR|pf86KbEdBQlDFz-xVrZo<;`W~T&Q36uf@pb7mf2}DEtfo_O`=G+-Y&~7B)!wA$ zcyBXrm)hYQB|3^Gy9781SjKP+q#2U?Pd#44X~pC3Ozyn*pzTQGt*`LHRipb&JU`pm z2}nZJ2P;F>(AD58C#qmHkJSJnmGA1gG?pnn6Kdq@_v+=Dsa8alO$hGrrs|j#qTA68 zHY6IW!(o@pjaoT2nH*Klyu_MiOJZ`z9G=K*NhZ2>RY|D zcZ^DW+BNufy2{1*aq!CsD)fs9YV0-Q#1>l`K*8ek=8d3fHFEPg1OG+3t!UPhw3>v> zOh=~BnlLZdX{=8F`&p`K$I1L6S4F5>hI4tTcG#?K!^G37;NRP;fX{57Y7-F~La>X1 zlxoz^Od5hrQP~g9x@-hkam8j?Hu@FvJOG1x9RlyM0mh5h42eM13<;ABl;qkk6&xrz zb@+D{clSpzZm{Z90Q}7PA9C?1vJl1x?A(A-g2WSve`e&dYT)}P=R%$?8KbAz_DAEw%%o8h8j0>WRu~*GNuvEqAE_+SC$2Xu%ak1uq>{Yos1%9}#3fS_?(27oE;cN}O99$O|Dk$i zr%@8`80}0Cquzb+UjOh3yRheT6#My1mmC2N4`v$P0%M6X_ zDCX*vf+B#l(SraoAMloRxi}-fi!)@oKh{7fiUYTe80mDGE@tdSE6xk19FIdbxw0^4 zo{Mv1IbksV=nAeNf)TcCX+%?=nL@)tf*7Felu%?q1jJOa;U3&nq2Zp~RH@;&kVJuD zzVfVUx~$-+T=U#4v+S&;slW%Eyj4k_F#^WiEE6W|IWd6k(9S3P1=9!W5$Gp?u_$Ua zjPgqTXb4oL8|nb6V&u#z&W9cYQRxP}zhUI%8~R~hp;JxJKd?^se!MczEI*oS$qQOE zfPNPk!}EtfIy3W!qxJ0Q@oASfX4Yaj&(W;dk%4Fk(S|K>xRS5Ssw zcA&prsO|aNTJ+`lTRWcaneW*jcp$&tubOX&z&-D3hvA&}bY^!bxIMseTkv$I=Q-zX zM`&B{bmDg?x;28m$-mu$*pl8I(Ex0T?~cT@XZ6NpIU)MvavrX_2|Dz1bQ0$LgWrzR zb!Oa-+q~0##c&w)2hwl-dOO!`N9`+f+-G>t?TzTVhkT{D=??S&`J&FHM#XUzL`n&k-S0q0W{c3>Vl_hs*5@^mBqIovyr8Dbk%J{*X+iwfJ z^}?uI>^tPXDgul?dIjC|17N+9Zu+CVqHg+k>+^2$r}v&2kDPMxR3iv2SB)Z8U2?k5T$sB z?~jpp;QLC4u#ffq>l+~Q4!Qgx4EH2o;d+-I2hU2n=4(zRh0Y!P#G$rhih}3L?hywT z%kEop0ixiqY`x?p{xG}9VBdgB>JKA`gz6778lE8#0YLeN!y%Epp|~NLJTb(EMg22! zgihGZT-8FroIVH|$fWst;FNY4^zT0&LVQHhiN$H=3c}G4LCT5ISIUX<5<&Cv6^fJw zEa4E+Ojusu0ap+~{Y2rvg;|7AAa824Fr)0QaF?@7DIY*CT~PRo`pKm2SclIt;3!N> z1)8Lj;1c_ZSbQK1EONw^*|4U#B51!~c1)IL`#{D3NZ7oEOo0ZS5EMo8c1&kLIEbdAy+xbk2SC^2>uiQ{BY68$4QvJm5D&40L*V2tQ^u0DWvU-9rgghixWsj{5bJ!jKb=$v*hr8Itl=P+i3HT!3nY^oN#g?q z@(5MSb}6h+{y?)LJC?EU{h|<>v@Lkpvh4bVW{;bJF&BZgY(-FGjdX~`mMvO#7ELkM zTUX7SbR4p!0$|`x!)DC5bd6LKg(eMJbP|A~ev{TgzW+4OXRDRX34}5_8ovmkJfJvm0BicFgY zavfyNjzd?lIDP5bqing5DMr_ip=|rSegoo1zfId(4Mo?qQ9Vw#N7uGPs=P-PEMVoA zUOx;Gn%b+xldvWXD+of^Aai`KtnwB|R+RN03}8EY+u{wD)NHL5dY85{R*Z+~p8~2# zy99g>#;cWIz$=i(COzx?AE0M4#;_{NXyp7Voh6&cz_n`viP_xaN1h&rFcu^zgtF=L z_?*c3Gp5jNg|bDHlpF*?Jg|~{Lcn{lE5G#~2=SRrLng>d389MJ1woskvY*^x>{j6J z^+e+|R#@lRUz+$1WWTrKk72i@;!RB+f zupRosS|FNiypw6if4v~#%$(n{1=^-hQ_SPCPoG}=Ji?|gXMVjEvr2LX8jFeu;fM$2 z2Z<$s_U+!TPO?Z>%rpb=eBSjDOSCfU+QlmCM>n=*g(b~ zdA>ya9!&ar=}8bYOjtZp06h#MEI5e8>@wZZrl!aDPbks!J|`tM+Due9c&ssuv1f~) z+1lC~wsSmmw6wgF=N=Y6ACR%AettOBSCdWAVapEY2L)pXUVTqMsq@r%Cx-wku5e;H zEtX=UHloB7ej_4Ds?|JPm*bN)JMGqk?5!=mw$&6=oZs;PBK{FTp;vkiSY%Fg`&vZO zg}ZCbWDJ4KDbOb{0K!W2+|$R`idV52gLnUcV!@%8fFaQ15Re?5A-K){4xMLIXV6Wm z>QC!1#J?66^>qy*Ij*AeCRoJIl<*zOA|tKVM<`k;RsGeQ80_p1;3aH8hQ{d~IpqrE zyl0O^g(f_}${he;_A%A-1dhP4WQdJB1NYwYT6~cie-uY^-QjQ?%2bQ<&J5cA!^uOy z6D5=!g_bsTU?&&`YlrHaP}>Pxnc8k?#{__e$H1ZT7B~gv-{l($_Zwdg+5dz3o14D+ zH9DjKfBC6jVw|8MBasA}5LFKu>4qt)#7JIt0O9}=4$=ycj(Mp%{Otj00czJysoi-OSd!ku!)nGGoMSn@!SuvIR&FuPi5>>IXuh_pzVjEjvDBM}d&ycCni z+;%_yLsLGZwVOlhpJpMFVxuOS8F5F#zW(jxyL%qc$Jg}WW~$@1u#RbMopMlnNmWzc z_qcm$v4^+O*lx~`nO@0Y1(>_&*lN2~zA2?sdxx=kia)~~zPT5u4 zN3G-%Vcmqc2CEBvmHCq*vm=?}^YYkWN72`qM!_u7RsC9n{#?(58V;X0UM(Mo`1lQ> z54o?yzRtpsLOsEjKHk}odE#85Mpok~AXts_z=#@Ew2#11NDMG^AH_@9PADAE7Y}iN zifK6%dA(AvExk{60F?8pt7&o8^rip1yujr>*e+;}zOWFxEG<)>TS;T*EXHJ7t$UFo zOR=tt>l`KANTQ*^BgEg`nr9ZkA=sVYnqLs-oQev?pO3x9kR5&4IH~V_ke0>V_7<1I z2bjyav$Z8CivvQ8L)-43+$(Kg=}L3&_ghn&8_HuPBtl7KD(j}30h&45mX!q(DM0s? zeJ(wjorSa!-r^z1?t{P)pexp+2!J;}dQ^pGb;`!$Y1wPWh#mLU z=CzAcl2kk-;MwA}Zx|@V=Sih(+0IfsX~@}Db5R>Q!r)_9Y=f7f+*VbZfasjT%P`c$ z>q>V4rCHINzLPL6hL3XTBsN$lrY z#aYeKB{PJxD=Jip4$Ryo8|nNS_F+%efQhhubBNf)5T8gDX@*XXqy+M=g)Q3a8quw+J2Eo%4ZW zCFPU4=<&ng1R2E=L#M6TS#cwFj17yvn&xghha2)E<#&7qzYK@sZZ27t<&@pljPaEz z0D-8xqre$bvOV*pq2fAd?BqNqF639S!9;_K#u&lC6{vf0ZLc$=<V?DQsEL>w^U*N2>};IMuc8Uh94Q=(IBt( zzjcsgDbl9atl~U*X%FRRCMLYv00Emd|7g%HOFqLcu-?xFhoKEi1O+@1Y%i*->F9~& zO$?Yh*G42CBRd}U%UsZh`MSs^T)5(NS&r^{kx3`QFyUgodI;KLSiO288j;Znq$d~` zaS>bZ2|N)_aSW!!AMLV7ub*-zqGnTO`45}B-&uuS(%e|$=4aOULuh0~%4HG8?Nto(st>|gZCz^EU+8mws&r4E;?gp~wbDhfb-4{)< zUa&GE36TXm_k*NGQ6jz7iOetD<6>qGRxQx$s33+meg#IG9-DZ5E2 zXK?(VPcLCcPJ^pLTiv!j0f*^gA*1d?moF2VN*I}~b{9}}U2ap+$mFULCl8tyn5Q&1 z-CkBl*>q@P~(-+zw^d3Xdj8JU#kU-7e?(?Bz8nEty*QTyXRuYI}Qxo}0Y z6X8i)Ato@Ss{;f$5q}pf;(|$gj^01V1IN;LLlck2N#i5F0DXo!&2u?#_#a+dnFk-` zvD8xk7QOWhA)p6@2(J|CN4-3?v!O*I&H@Ef7zquKrdg>-7xLSjA#fEx|FHj!&g<^( zsr0!?ciK!Gz4>}fJAL0DxKPEg%T!9l;S84AxGy;sa2rn4QvLv9->KCKbMpIdo@^rKNF-`y`zMSs$S$EY|&GWl~9V zp#ZWlL&BNRjwEC#^}G=oo;>^nqx95q#H@@QNf%;%3aGj>DWB~D#6HeGK6aVgGUnZl z&BY?dlPS}TI=N73h_iBwm(Jk?t@$BRJC(McH62%NfYmlbxpzl{u9s5Goeu?GucpeL znx|eu%35)I`DuH@Tfg!Mr!s!uFb}KWXFkmzA&hHvq!3^tRcp|=d{`N9>*S=!by74O z<6?LaqdC;V4cKsr@`}*^sc7HtBvu`CI?_p5{}Lhwb!d!y3@EkvgMaaD*^P0a2$PsgNYYv#}gym|#^;fa)YSv{edf8Y3A{DZvNT(bT%yZ9-jPtVvHZ3d2Td+ieLp zfNSZ7rc;lH`S8vQ)fS>Rjd2d4HAasC1j088@5Zq+O*DY4jPeigU#V!>L-UCw-OvX* zageDk>+9YW4MfABnHZH8Jw9CP%`($McHKX3OzF zYA!ne+h4!&;%55CHwtXjL{aiZKx#5s2DiyhB8h^+R^owIKNS|M!VFEu>XUcu4U0Ze zgx9-SNouMXiOiRz&@4wlvjy2(GZrQiZwtUi(Pp%z7S8-rbbB{O=H$GYtEk_aOjkw1 z0O|FehO!10R|YP-AkQo`zbO%!^rQG6B74Nu^1%k`JM{p@HN&;nt*wbA00;7b`Tzl( zi8mu~-S~tIHGvzf0V-fOHF@`z#ijOAHCuM|{fWA0@6j8tG1{F#v0U+KJEar(TJNEEXVM=mAWAWQXhJDg zEtMIbe;F%@$^TkUl2dDl|N7JvW}i{T?%Hy;3WhkDQN``be!i+Non<{I_J=52i5J!P z>u*(6)!WlF;q424#lD`&X`C$U7A{!>Dsi+_DC`#L)|L?~wh2)rU~wE)m?O_FZMlKC zI+-dP#qpwcXEbnUH(!hDQRGGizoi*q-;G;HI^t)>bf}J(k9#fpWqYxPD z1q+-Xw+ab?OQkgf#D;r(>#K85^EH_E6ndG>w+qbCvx;Tk3C93rLU&JpuTyoQSJa4i2sI6lN{L$bUJa#=m*p`Hs zf8Fb5_?c$b!9WgO+G31&@Ac!k#qXWcR!=TSZdQ6^puS}W;JP8ZL0%lRlnCCTrCZbU z+I5=OciPtVg+jEN&`|u#ZgFOrV3}a)1R79ScfV}&WrQ_`DD1spj$^SLwrCo98Tg9%o}mY+ zF9dv;3H@6PeX6_ZI!c6P-1z&sA|ryW(JJj;gEg$4nSwab$Z4my5R}nG6gr zJkZ_%s1t%m9!6w0HB)jqog9QNCk?2RqUP@K*4b4l1W3)`a&Qow`Ac3cF;wdIIW>X zrOFLY5cOw4o%pyqN_qeEAE3yEg5D2R8$gExU?A#L#UHd7qcUgEKwPnBcH-AHVX0~6 z9%^q#G~$x?l%CAY_gL|$Q`xC{(`X8Gr{n4=#qR|8_{%Wo?I@o(_2T6YAJ2FH_O|R< z@|dVrb&;{i7JTmAo$7unc})86d$ za;ZbQ*~b}D{6m`EoP_fHW{?1&A5VY>;3?s6i5~O=H5$JMtkS`@T;=?-KL+@VLu;~S ze8P7b!S{q2YGq?Nao!I4oTh>qq6G6hTkG0sa`d|oe?Bx5jE7(T=D3nMwrjL?t=t;$7e1SCTzdFOc`5P1 zK{hI9;SKnPkKU|jHu{#tQ#XH)e_WvI?cm;I-?Mk~Cb>)GKYUjj1&Y|6aJBSx5(%G} z@W~~}Cb9`2F{cmT zV$ume>ddf*ype==by)+x>K<8|2w>UyBjbkO>GU;bb{c?Y{3SfRxLoYb;~_`Wq1T-y zX;I8aN-H&Cam);X5Jgm1wJ^=gj$plsot*bd35sLGuH!Ri#4RvM3OFgz$Fx{Pn?Oq# zE0)1nASR_lWeo~F*}M%HSm^2MCED7tEQ2bR@pU#|EQFmgoa;WR^o{s`*m?)x$eytO zH#Ror#I~JmY2qqj&#C@? zKOcC}NxD-__mZV8cCS-Ssk+uDx9G6Ep=$-&7R%Uz>!8$lTmHx?uD&Y$2AuCwx>W#!d!8kZ50;Tx6gf*EnUvg zlX{pP(gYCBY1!djqI#1@Z2E#Ft2SoSrhzVYNC$a4>v1UrsOBL0+AxlVlG^k%SLa@Y zem`3gx&{k$z;EYcw)g;xoRP$>3!wM}+N5#SGtd??^{xV!z{;{q#%c zvGdl`%WLSC!`bVSQ}A67NC0+J$w94~6wB=}o{D!0`*zOEvPkdc#KVD|oF{(44B=j# zR7z-sCtmi=C4@?IO>S}GGPw3d2`V+UTw(@!K6Mfe^^`kN0wfu(^}mUy6IRP?e6@oCi4@-5hxC! z>~?XwHL#$~u-)uBu$(D4iv-g!G@z)Mfq;@YLb4M4hq_|`!G>hel-ceycJ$t_im;wX z2cyK8pTPKxy9%bE$-J4p5qLuDap-Kq!TCAhO5dgXeFe)jTff>_;|Ok{APa>6L=yBW zN6b>0fGH4Y_Ivc1{mZDd=KO|#cmEbHfF6S}V7?zJXtz47-9y5kx=24w{>f%?J_-tN z0A`Vb;CE?GOwC>w@}!rNWy`nBTyAC5o4>FudL$a{VN8_NwhT^q0$ss%Ft19}gxnlv z6eK&^EVg!>>_y5=-LX=u;4cKqimDpzxb@1f>OQ zLV!8v=nT7cazrYvpkvD1FN9pyvmAw>&ZJN$%av7|)e}fdveBEP68D>Gbv$aWDJCe_ zYjwojTLgHtnzOCe01r#36DWrUc6Q~o!a~709_#&+}HMzw7;Z zvQZ?f>0iH^v({e=k+$XE;SYFVn|nTb+wCu$f9*SWhuP$x!*+tQvmdef#5>wDNVAsW z!%@*2zOVnm7m2mQ3rm`XDaAg)D5e@E&$U%r*VRRS-IO7~WYEKM2;;lymru9r8=kYTbs5`jz1$4v#sVxfft*(xlO{6f` zL({$oA%?U@UI#53L8j5uDjP@2F}8Wx6tr^cB;dS0Q*u%X=_`tt;P#Wi*x4OA`a4}7 zA@AYxT1ZO&+G~JHMg^&>^_772M)H0I17W5%^W;y9#UP7^eyPAxyZ4XtHxY=Ny*-cV zIQ*VX4FO-b?=^<()KhCuw799lU?Mx&y7>(f;ZO6)Dt);b^GYWw{y_i+?M{E^fh2G4 z1kkzupg)>ARfgFCE^=YgEKn{15$a?(sSinWA2q%z!KTq34!-D@CWC`;C-wen=AMsT zQa16|xoTK86ivIv%-@-Y?{yN~<-h03M!?gSj5zT1gA(3sRt4VmpnCHZwy}H-)>_k|iD{y!DYhl-8?GEZ_Yhh=yUZlF@@S7!|*GSF4b50nz zh|z(jgh%>*`Z-iYhC|=!XdN-*qjnpWUA&B?8}U4inC=0cs6s?H z_mzbuqI@62tv{6~ZI;u|=*+K>_{sV!`6IdHX%91-Kwg|k-3N|a9-0H^@8#9rAt14# ze}G$EGl5(g@BGt{Qqf!aM?Q8;A`NPENT!bTPS|zg+427)YhmH|e`N}((}bYy-#Uf= z4fKzHF3Mmou|43 z*j(oSrIV4f`_{<>KM4elXCsYaP*LAKPS<%cgqN^b8@ zb>3hrEt=ZO?d%Q2R`~bw8aIVnc6vg-!*$isMYM6yR0Y|yH^zh)Fl2hdF)cRZ{Yr6U z5Xk3Lxn|wYdhiIQ2cli+1#&hYXUfdkq+8fcfAoTIIE>w9S^rC;($jugM(Tx3xv)ay zNMpKU5W92moF&ock^_U8t#{PIyKKV2)oS}y#ZdnY@t zc_c|$0IsY`axo+6=%17ohh$!a6;5s4v# z|07?z=!ExH9m4qencenu`R3?;w<71Z+LcKzv=Sr;79>c9m*9u(8JZ@hj7oH?N&pI} zFIrhJN27IC`KQLJvUxcZx)nm(qF6vNLOr5}CalaNT3JR3g#~Et#tB={^Z4}w6!`io z{ZcS*FrUuic0K~S9%ZGsal(TMlKUaZ=IUxT?hS0mLP_Ea8tX1CzT&hnzF{fmfmicl z>Mb@#bTfeF>49j_b(;Kn9E<^P0U3Vq+ueiLpzpRgCrw8o+Bfa3V6?OP6-*ZdVzl2x zr&qVz&$m!S>3>T@^!}b8hV_S24_hB`B^G3uR3;-6Gy59&p$aKU>&GmU!p7MaIkgIs z4sCFq5V>4k)6w6G7B>u5WHmG%EN8u5?Twu0?w$B`EhcxSfkVOj6FQ90&&_c`Y-+zJ z=M8~KA9NP2QoXs#bijd9aNOhbd-qr+!8zA0^A9UXn_!|ig8)bds;E9#0S?v^%p^n3 zs60iKp$9+UULA%oC?p{qhz(5Y3&0;_7`AIcv3zeZk&;0L^01LfMKP+GU*xmV{nXoh zwMSMUan$2q7x93{`zQWaKbk_0R#iV6nqQkj0NJJ>hlsyan+7#h7$b^I&5rOX2lb*= z95ph_F+kJwVo@4V$-+a}v&o%;nnRulp!8!Ho9Gxwz5X&v6sX`-Z^A>SWX)qj2O0;9 zfr>E81cg!dO@8br(FuaShDg1MJ^)kAJ9XjteWjfnY_p3~I7c}Ao~eLl*L!yW(IxYm zxyP=G`#1Cc>Q$3v=$Q2^xfFPQTqFhl;$9k9H3U^9%sPxnRceTtQHOn23nr%tj%aR3 zlVU`?Y(TD6i;87LAL1KX+4F8Zs~Chr)o)=@HiXJ1!dobgn5-Gju1RiywoI|kg^x>9 zOR^eMtQkeF8JS{IsU-?z5MsrImFK0~`;C-Q2Vy-NC6jO1Ubbtr__*XskWmXtTZaU+ z&NqZqH>&#=9}=t?uC_v?m0KorcGd@jE+V3*Ujgw_0O(AutcAdx7D8jdWWhA@OnB0% z8boDYJ2n7dhNH;bN5&2*&!u8)ujjxId03={6>Iuo1Z1QoFTAD2HL$Fz$Su|*S=TDw zbF#~%MzrlFxwc|Q4*s*$T<4@zQKSWmo0n6$*I{qp6nHo6SPYA45{dtg_tUBuqt=s~ z)ef?w8>;C3b$$gsqaR5@Hw4#cz?J7hDsv*buF{{o zJu(sWah!O%!Ks@V6Jr`7zo~j=e;`7ph34)M;1jiEwh%?!%|+PG&(uLZNh7itMy`h2 zYyIdiUIE8ZsS7u9FciyF|<)euC6KSs3leh&Z+9-VyVBmb?@otNnQ%No7&USxSiM$%CddZ?*ucu zrl=IaJX(xQi^)xkughvA4PS7Tott= zeTw5hFm(!2pVey5@}&UM$E(ZqBvOu}9j-b>zKa}s9a0R$Z@q5mcGcYb_C>5bq=nNu zu-gqNI1skiBL2RC+UfqXra_!)Is{QG3$9_=;xAl|7cj7I=5rwiR@%}+k=xd4oEq{Ur3?a5g(j{Q+ zW1=V0UK9IDT_uLlVBv+}u#CdHly8VHNMe<}V{enj_lYXcJJMUmU9x+NZ};+?C)0aK zyhgvXZOQ;?<&tA*8b(odf@mH2)f+17gvwLDgfT^cB(9^$$a_dS#29158~)Lnfu2-@ z>K=2^Tr@@Hn&6B9T(NYd&JM_zLtU+SfVesWnfRD*`NL-vg9v@Jaorx#)bo!x{qyYL zw)521Q2ODab2s!_pOwLCLHyV~pN$BKG1snCV+=44@T<7HBq^5~mT-(&j#sE`xhp;& zU(f`gOy@H;;eHDU1=ac-MNh~ol{sfa4+*$AG4zuG==6}GPLRTlz;wJ@L908it$AXR z+DaaNuk0f&CK)E3AuSU?VIQS1fWjDpzh3?`;7=?5lnbUdE&CJ05TF&~ZZO>hU^f_j zYxNR(tI>+nvMc|Nj=Y1y7ehI;cI=Ed!TTf@13ZGSI0OPRMPrpi99kC6ausins-mgG4{w0!bS+Oshz6=!o zSGo!s${)_l?T|&>5UVW~A_K^S=EFvW(k98GSV%|RKSg`@Vd*-#w71M0vuLCg{y7DE z-7Y41hUTsH&)Sp6JLewMc{p&@#EIg&3h}$@nhegD_ukRmNKyT$#Y9V%f*s}6(o#@- zO)wqDeDr*OI^gKeS0?a}SpzQ$@YNE>kCJ@&FXeONEGMo&koT`I|4G^2Om4-Jr~eWW zIDq=_Gc_ogG8&T%^3}rZJ;Nkk`R~gkfWg{6Tm!tcliF3j?>z6oL4l~q&Of+B%m|+h z5N6;hQ^jexE*{UnGlcY4WC}la`oZ&E=S~n2a^z#J){2h=B)JDJ2>0$JecxmZdw+L1 zH<%exq^F5yL*AU|yU&6C#MI1?_z2wpH3J=vo+QlE<|`_%NP+oiB<`(EN)tv3$^IU+ z-()m0kqHy@7%U6(PT!|Y9VCiMa*rH8>c76YQ(KLX_*$!(n3^ESd}n~dR6-S=i|F|C z{$h4S7Z|geNa<~@_ROEN`<(X@=({@&^@u>*}FgSaQsM>ZJFaYwneA0KXPu#d;V@ez52b}pFI}sM z8y+2$O|d-pN=0Hew`WW_uxDp>BC+ zO7>>C`9e9)T$MO|R_#oUnuRl?2c9+t^|+dwoNGPu*T4AHM@hq`8Fokt2tY!uu}b=3(T{!*eIT~~6b=FMGM z5{@^)qBceagMe&f_J&vSlxxi3(tmT}y4qzYX=;SamY14H86yR@yPEo8q1e=;HFH=~ zRW*7QnY4K8i;h{-6KB%ZxWMJLPsnVxklzB_+4D(7*iK78|3V#wS5-MmIcl9)(R;&z z)(C7`SMaMohJJ zi16NkFideH9@_(MUKMT}XAgO6n$j8%V=mRWZF0LzRu>h$?Oc^9Szx6ei#%oeSLpeX zsPELd!_;KkgO;ndv6GFpm4XcU?a1RHIWzyCdcE5@GI5`T(WTAgyVo?&f~}Hoj!BmF z59ux{JGQAR1;sE9DGj_Csopel^jBo~p;aY4Y0;0NgsH_5F?og9pY%RjcQ&@la(@_( z=Q7sXY;98(ZmrD7X@OY@Q5kH2rU&9b$|G4`y5md58(iz$DL`WZel6`8XREUwrG5zN zbiU}h)IsAq%_wVgq0gf0qT%LdDMMRjZDVbftR@B+YpYgUybsb3a7nj`?g=z69hu5GJ@ywR(7yQcdl;saab7noj z*o(~6eW2N4eYcybW@(&Eg?^j_JAw(Z7F$5T@3RT1pkW+_M-=2~VyB{U&!M+O1v{z) zENAQp(2m*m_XAtUo!fh1lfn>p^S6d zv$iizZh+vH*IFNu@L3Nk`Xx239z~h8ye1K;;?N8lU{oh6VV}0J9mwr`#!H!(^$Za; zWQ69qlhRz@?7M@D8WMi?@)GZbXIq*6XTp~7#pq|@C?*F!|I zG}%yh;bd|NzD8YbwE(Cm=GfDScYfMdJJHbD-AF%p0tc{4?w?v| z?s{DJ8iT@8GexHmk!|_ueem|LOoro=12CkaTnpbf>>#v<3C}U<^`oXK#L#|XpC2_` zt1%9e?!aebVPTc5O?oZiAZM*I>u9XorXokumOP@L-gdm%m?+FBj_Yl^r(!%)hubA$ zum8q>JrLU}ML7q*6zoQPb;+85pt+L?dt~wmB$JG(8oe~1L@FpSoXE)UZHwzp19F(q z+OsHAY$WxM7BmJ)eCXslXKXWY2}ZDXXe-@VzK(>Aw=X8u#Bv@kaLsyJGD zGCuhl=Vq8lfXM0C!Av@ri{pIeS(CYD_BYh!+VbvXc+KmgzvPICvzq7c)8M~5j`8hA zBw)jt>+{-Lzb#MriPI(7ML&g{#;uFU7CHg7=WB&zYkB(BIl}>7$I)Plh_y@L-ksp{_9*{=BMf0!2yt z7#7lvP+GrA-3{amthh6S`C_upO=_t=I?&Rd>F7~qaC=-bV3n*WLM}*vbjS!DC|%vn zQ=l@V325**9;<5WXT)|Yz3x+SDrK|sa#8mg9g(r-`6JgJE&4*;S;ok27;dykdfwvz zk{|H?sN*yc<)7k^b6K74>aRdq7x1`tMpLCM@HLB%AgmZ6IiMJl$5u7KM1`F?4LqH^ zgVOia!i@-=S5&mLkT6kn$Yc}6U1S!(j+WV#cNdRuC=i?%RHVwIu+*fs^iZC!6`3b8 z?nVdkr-7_hg3D8b+mWL711N(q%7FR?lR}DCQ$W@#!|nJ|`vvkz;F7)YHs)zDi;nk; zQ^TXnj|I+k|D=LWR)G9 zw03dfrt$$e!^@mkBS_+Hq{)ui!%U7}>O}cm%}A;<5)ANC4e+>Wga`zfQIN+J1}`@X z)CsiD#dv91ie)?LOaqLPlVFA2`=nq3JOs!67)<@7L&(T!+IXRlF*bWdfC)lmG$?e! zaTiIFp_^)|hWSyxP@DnxDrid!P1ufP13H`M~EWf*^l_BIpxPFTZY)ZU4mXXyI3m@sss5h3(;w?H%5K>)*mv zL{gv3Zp7rzX!~1;0}t*GARg5R-UpuQD<+IjWH%(G4_Z*S)V2xlNhN^1SZo~vm0Fgh zZ-Z>_h8)G+OeyQLc)v2g&sI6-;25__cf1b*U4|RbMjGfiwyxC7hFyB)Y8Af&jzRiQ z;GYX2kUi)!Q2I%z@Qo?(QiOCfRLzAD!J_D`F5*&xb~AR$8sgApxg0f+uE&3KLF?OWe>aI4b3dcD2)g>{d=)g{lRP_H!G3jalYdV#! zkG{k;nyIIazEtuTbLhlJ0g(WeF1M~6vqt+0rZCxI)T{yEX8`;SHpWKUd`NI~SLCG(HFVV&5I5o1tQX z&n?jU3wtalFrQ0=r9E4?8^=A&&%%ZqqC5c#$3w6uFmBcXu9-la>+sEhhtp23wiZ$k zjM!$VntKH#hNsA=Bhg`Gtv!}-p1_9NBdD31ZS1OBMi_DJJ&JmE&C4<Dm^=jMPAV-!{a)cn&(;-v3GtuBEcKc|VDso-^r@#hCKU6RtMrh{`RmS!_n z(WIigor$e5EnaU{ce&~&vnpwK!$sZy=9Rb=2yiH)an}Fxk}4ACoNmqQ&W_Ut8ojQB z$=ipaEiRA1?iZbTzekwj!8qzZkrKwvv|mcpVRxpdCjFk+MAIowtmp=3qcAM`>7g(H zEw^}8m9D$Z{CYD2Ef;kn24-$EJE$4`Y3z&95bZ4=qpo2~`n97}<(tXo@2$rlxljzN zR;MYKwFoOOwo}+}p?CEK*;NQWb zBg6CU+oN0!D6Y;eW*T!cCY*>apa{Redq(4X45TJ_>#NYDyUh(b3Xg{Yp5PN|bH(Z# zvxih>;tecCzsjZ3-P{7&mb;l!I=9EIb!r`8V>2@zG+W!G^|7nx*G6XEV$MDJetWl8 z0PZTR&(@E{GAnt8B}OztGb@a;6V0P&xc^k+y`AE+@AC#t?evS^v{R&dOSr+#E? z?7Ajjw^K+^Mz#~F`iT1gJ7Cd_lkZR+DVwx5k{_bG6>W@4+N}a+cW;QV)Vl3(4wN)W znKvxqA1aG0orl5Tk~xp3Rk1q%;Xe3)r|t>j^m9`E<+yHUCK9d8XbwQfDk_ z0nB;P26r2*?;W$KqXkTb7ir0Ci*aVjg$SF?zGqfr?tgRAL zg*RLEpCeMRNvyRcgBpuW$T9)pMDb8p&Zix2x~MWSLu)2kR5(IKbV@_JhlC zbw*sIcc--Y^VsFU9~dywq($G3W>grG!BoPEGzoBpmz{Z{G67~PQnOa&aJYzSeMyU& z5PR7=;n#VRsQE#?mEK01;f!(!6lt1_lS~aNwY?-;bM^HqwSB|#eMr2#kfDC^Tr1RN z4)rPyePijrEBUqJ6^qVCop-Bk>=}Z{r5Kdw&G2VsXI- zu3}+F@I69?z+(6PaKnG$iUdgb`wcKh0VIe?&bh?%`~V}8=(WInn1R(E#VFxN#;AT6 zH-th+{6Jv*IkvRoWQ-x5cpb1nwbv1Q>NETXEX5GvjdEHX_KlLlfbNZQTxncD0)2nw zxUARXk(;6*$|puTsScP2XWjtJ!$n*9$pm|NPDMdF9JcGv9+4L$#tP}fi{)591 zoHq#10p~k7a{tD%Z4Ky(%yb~<1qNk0lK;l~*{^o4yAcrm9U>}MJ6579SA{l0tXG6K zVhHO4pP8#op&df~e)hSZgIo?$xPiFuLb?5L--mJodD;>G4h7L&fw_AWk4U~DnXA0d zZGKO?n2$)8BY(~Te122kA#Cd0mM>_1W&Ih_&fI?A@I9?7TEYSP4T$F(o?F{;O}jC+ z)nC{e*%dqj;f?R!&~k0PF|gHdf35O}ne*eiw6}*)I{o22EYQ3e`Ouqq+eEoVO9PbHTF?OIW`$~^IIm5>1?C(gi4S%nH zgSzkhJ!d~3v|q7)1_$OC)a=GS)Bi@C*^z1{?8s~Qct%@W)xW9oo5>ISz?dmaycmH0 zXY^K!r@bQ38TQA9P_JLbhVYSS`f+z=W%$vs#*eWu^J0M3BjaK~|C;xaMsMh9MZXrg z#~j$FUl;fR`Bs>U z!LDktZpgO`JAgMBNVS_>{(&}}-NPL=obqrUa94F$vylVmkW8I3de6CXU%-+3!QTq=>O5CnWqZ(ET~slpV&qjT$)V#_<8Trk#c(&#&fdB@o(h$`t_IdlS&w{ zTkc%tpm@MHJVjyS$lw9S%ko5|yeBY!xPY6WJqikk$DJ0N*3Q|2_Z;&io)MLBYO`9*tf-L@U?Rl0)Nls@b5L}_(;kmYY-cvq&6d>{w^i$N*Z3} zRif{@X9!n3@ja0WmrnI70uQ?V>S~dc5R8rE^0a{`a@RYGE;Bu?BWQv?G(9xUOxleP zpDQ>&TvF?l9O#H(9fBL9)pT>6av{FJ(eq4ZJ0oJ9ZmL zPl$2l&W2(*31sNdCCU|Vs8R>VDtCfY&5Rb2KSNt(WaW|Luqoiww0G#KGc1ykbwCO9tGO z^V}WfO_((dNi|kZAJ%H2g^k(8CR&(hS3){Avs%FiOWfpQ(q9kCpn)I^=ig6)J7PFSc1lda4rnB{`z%0N;UdF@I_R905{drF&ASe+K z2_{w8ql=L64^ENoAYd(!2HeIw`_z(L^KM=AFC(6z~-@BdK9biN0~=I+)`wBd3O|zERU9Jw*bznM8(X*#zQ-t+6{W2 ziA_Co%bQLh+>h>qF*h%EwlWi&#iKQ4`QwFT7t&-)PCyhbEy{QE3L z;jntC>T!)2;Io7UHo{oJCb>;GV%^d!HkFt?@yG_=J&AqGqDZs{f zJ&1;33h%DhboK$C`t@vXYx#To`8oV`B-i&jq$HlG%$RUAeOz92^afO~KjSd^_T}MK z=s5uxzH;t@goE3>lFeb>YlM@5ay{Xn?`vAdZ`0!00JD)Xj+JjVxv$l~dI#4Qy{$6( z(;+n_wUXZ|wxhB3_}9ZP_wsgH<-s1EpW;-HvcH=?ygGC)c(z@`6*7|BgmqK8shqQY zL|z{roA2>_Vpr(ZGdGFxq*m-mbx@w+Th?KLUw_?raW+jGOh>ouUYY9uC6sZK?r0qJ zDt5fFbvYovcOhq;rE8N_A zX2N$mvNV&Psm;p`gV~rbt{vlW9FL4$NF7Gp!#qgiei_Gy2oO4)GU6K41`I@$GdD7dzS6VDR=ZmJblw(YHx{R-e zUH|RP`i3Wc!fXBIF(?zYlcSz>p%0zAoRH{jNrc}T*_&}LMAGAl*vesTGc83w$Pcv< zs0TNWZI#33l1w;?e;AMRX3F~TN&PjECYFX{F8bjNC-quqA(h>+)ja4{bHTh0gy%Tq zJK=i+)E`hRLSzcD&|p@Y1WlQ>T%{biNPRn(mQ69>6<@gU%H|#TmqFGeWFmIZJ7wuT zClzQG1O^n+QFEG0otH!0mapji+AAWn;uLr8FO2$=KQ}xjKmNCDDMtWKwHP;AG8N zxP?@$2m?9+-Owk%{WI4T!Y$7f2?dYw|TR*e~~?6t1;GWPBI&FC@sEl z<5~b%o*kIfu-_xw5W@{8esXpeq zZqMdPjLZ;#Hp^+;5cAf)u5u;$Ium>P91{FRL-{oOBX4~8aD=TY95<_$(znq{Z${i>f^RfpzYkXP zK~BlfHt>5&cfZer<}zWRDwvvDIj*_Hx7VVbt8+KG{IDC8awJ0>%K&KNX1DGrY}|ZV z*9Pl$!+Zm9j`a5;S)fD{Y{O~Uor#lDj_j71LKf0x)IA^@wc9DL`+*F<)FCYxk>6*$ zDcZibJ;cJ09$mo_3#-@1e6l6@$B@xanSV)}mohUbJjr%X)cvNfNxs=M(iUjUM~En; z6oK)-B{;WzgPnJjWm;>)1X=edRRe1*Cw1|6q&!2jHGl@qFKe?=6 z#i?2bZc|PW$e@(di;;bZ29h6&v8qUPC;2y(WVH{7SEc0TbV?iL2bigA5no}R*)_Zm5?8aKR{VFyawD>8J2pfHf1DXmlv`wlB?@} zlwRaM0(mCu<(emu#;llW>unl%WuXe^%+yVQiG5~df>}N|t`Yl1W{t&o(Ht~VSt)&% z2^8z|rmJR1R1wq$aR`p>G*%&Fk4j0X(jDO#L7IhjnIUF{Y}O&28UjQznWiKou;E(f zD{i>RD@9WrM*EgamK)YZc+r2vt={XLzpTISimD7Sm|7{MuMO1rk!VzOa3DTKXnI&{Se{V0{$&`c*3C>3<#U24pZoLuT&#DpExeei zrCY{Ln!=cq7p|5O&CLywvvHfy`+`D52N$R54^z6J37Ra2@GdJOw;@z_r)L0H#vP)gZ%sM4q3b`CKE6m*KU(}|_&Qi}L$lepXT>GXTz z6SP!1DnV{(4S|7+Nr=kyQotIDNtH#VQmZ{PAsIbdd@KQ7qA}WFG+klxz4J&0pksM2 zdp`*SCN9|ivF95DBJQ|+IKLXn>MYO!JvAd4ufUircg}=~nqrjrJ}ySNNQP_h9rSOcW8+Tt!LD3 z!4Z7vIkN8JJg&12c4btaCin?hz;6|O_v^z(rIEFEiLTpv&Y9P`)QN3uR8@}G-v~>E z`|ctaa|9lHp{p(3Z;x=Fs`7u~%%qh+Uk{=65x)NoCqqHfzeqAM_>H<*5TtueSa6BQ zyvON|{4gj;w}VS6FO`P1PIRUUR?ErP88R)mwG=L<>8bJTKVwHeL{nEcfD+7PcAg1n z26#Zwo=)zR_Gao#nj?b@uTI0$x`B`VD+YQxl^3?>H4GIUnyq?aC78+b{3HcDX$|47 zNZtG>#oM*({8|)H01dU*9F|;r^p2 z91yGJ87hm^A(Pgq(7{yzyw=WX;4*W*vl+5XoFrN_Y34CtQHfmYl^CtKRjM0a4gZrh zQ4v6hm|*;5YIQE}mhEOeQKLEGeyOVO>q+@jQk;ZT;(CfpxusR8aJa?<5lk9v9E=7m zWAFUVBF%W?6z@n9O5lBQ&K^h)hO2V4I+!Z1m=%O!v_N;MBoB%X%!Jsh?KdG&%`$0a z^M@f`w*+h`TIwz$DWM>g2U83NTzBKs@=;)_dj9%Vz={~Yh2Y`1gtZBC%2uqBE7d*d z)^*{TY0@lLC+8?Fa;WpWyHKxPuzRq3t8UD$UU^8>if}(o-nxj!c#&;MV9u~DbBlD- zvUB0S?4Gu;Pc9n?I06$~LJP;fdj5zKL9MGK+x%<#7nw8_d-^11<&vE{m#Tn5^rbqd ztNVh4Atfm<`V=}PY0JuFN|LqgYfo9*bb**H-k-rWxw9RjWhAjeN23b|R8`HD8vzw) z!&93LfUtA5ayV|OtAeF;;e3Upbe6!{2`=HCc>SU=;t1|Iu(P!F1VwLOQ{>m9-@z`F zZv_pl3bc3q62YzrzWvsz~tl7*JT%9v6L=(Zg`&=DO7VfJB z=2W&F>yugmNcS`01V=?!xVknnDE!QhB~6Ekgw>iYT_NeB%T?iVnRZkE+dzw()t4rl zk6Ft1=4|e^uZCUmlec;tO`5ZFG#@W`3a;%B(jLKnE?(!Xi;^NoWTauDpExM=$f~@d z{on(wgbnpzhVX`?TiHT3|2V*0g4a1D%IW4lkGOCVXmTz)e985@%UMy6WIH>1)ZIMt z{U5sfW0}rK+oyBW>ayo&Vlcu zn*|l`f|0`=p7xM6hq+gM16a;>LpJ#P-n0djJ`Vx1F!u)Cz?mx#prqHbnvJP98A`d@ zMMjqhICH})avB~-Y#M<0ejPW&YsYj=%)(|7sDWq)phKL#DLHTFH2vG<fW|={VdTlQBjH5-(&`Or0}8DI4p9F6_rmeH!Tj{^W|{lue|4{=e^h?Mn%EG z#8g@Qb*ehjwy{4*K4g_Yg!CxS##_0VoTzpRoF1cb75yl-lJ_dlK%-N0W|3C0FL>jb z{FT$Hir!Q`Iu7QTVL-y|SY9?0O73)5F-nXG1Ctycl2| znVWmW)w0b^5*Pw@7f*Mue0J{+OrjkC(?rN|5(X-GcJH*K88lhm6PC2++%IByJl+%l zTSfsF)E{RRBGnVW@{tT&k+@uVRJ`Z>=*!6pZsuXgF7CD@*4+g>aEjzLEE!W4{zWG?(# zO`kmoYj&PKMBk#$6^_ZK{5`0|Qr%Ps$EWLNz0XgZ&W75% zq{mFxRKDAPhi8PHpWT@~pF1vzd@Td^HbJAo@>-QiEjy*}XA=b+Ddpp-gaARC+@GX#F?P}uyyH;@fx5O<_r z&o`A;9uRlrUS06(M$iae#qdpVhrb{j(=o+vk|WBBNKnkcd{oZ?b?|t9%yZaYB zd+s^Uc|L#7bN8IH@5*z}c_w-J!U;>4URpbM-Dhu~n%;kGpJ6+nmVbV6^|$9Qe$vk0 z^2mwCrd_)pU-A^*y?gb=1x+I!+xM?6pFFj=x_-iqZsFiD&vrZXXv;`*uxfAJo~U2XZQDlf7=Qn7#k;$wSMRv~)(e~4+J@dJ zw++AI+~kp^7r*+vTQ;e!&+3{%|M}*(R(^lMz!kT@cE*OSy6abGPwaQuRhRtq-{aOi zKH={-eEP~^J-DI1zP_R1i9KtkZr}aR%j0(qske>&Uij~GJLWv``sf3nbw97_(yh%G z*Y+Jf;Dfnce|BKY_1BDfq4U?jw`t1mb!Sid?!@I&+IrkSX5g?1y&wALD@|t~PX@O& zedn%w7pQ}0pVg^(^1fePvg?6f6Vdwl(+}=gwCTf^*N1MeU+~_MFKR#T{^k>#4nMr{ z^HGPIhmZZs7j4g->~^?y&4ESJx|}-sz{!JmAN}Olty5q7{8M>k=ST0>oOr2IAMZC; zIBF`>qoD2Q0k2uOvfs8Y>1%3#z=_lJpkVeTH5nCO#*$*|nax$>s!mffPT$5Fl(^h` zR?REkoVHB#_~XY5AMi(NSMA<#=cFEM2j6qw|JKes@3NI|oiVL@wD^;c9_-cn!`hxF zR?OTrGyeVSPfy#>_2myvZMeR>=>5#_p~v2+UsgN%mg@$LtT|`iQC4kbZ#n&?SO0O{o5O3rksM3f8es}8XB^%Ei*>lk58a@4n8`kfgKd*6BxBiV)3!C@N zeP!?A@w%g5lfSs=*@wm+jqY97I%>%NyEip`KB9K+vD!O+K6mdGFHG+J;PK_# z-@oJ9zn!e=wf9G)^<Z)1qj4fRM~j7RS$k_$uf(N?mGi%fgbZm~853}fg(@r`ML41y&KE@?OK~I> zUSbpC#*A3vD5gc?NV$+1&;&1H(i648Ms&+t)3L{h_7g`=!exTt#xtMRK-Kwiu`oQ& z;{n289G;OY>@msiF_v+Gn4`stc!xDGO*X2CQZ2G1}vBjqcOty zh?F3O4D1zac-^vb2HsVKIcFFstR-QsM2i*A3sa+UlC26y+)0qKT^Kou%e*v-%oxjy zc)`p#wko`0NE^ZN{H#S{eMlTmPEt@2OH#G_Le?a3RRA%llp~W+iq)^&c+DJYO@^#2 z`;jtfl1YC`;R@D?>jYY7R-K=~=a~gh0WQYtoMdcT2vV4iG_9r`8;X_%PE)y-+0sgr zjI^}m4%j&XtaBHoi^jAfHI#xv7CeWf$~DNEWoRZwTnubgwV2x1H~h}Sg332lWPTftch*)zLF z(XXsDq)!`jny_%JaAAjh64I=}1G2%6A*}4e>2G6ek_tO^oP(`rvDymu;e;V(oaK$U zSQS;0WOU+`AhEg%G1e(d(gFZsnr87k=p-wdRQ|CS9EQ9Q6c>EV;`b2+Z7D=CO=b-a z_nVOTy%gAgpeL_r!Wg%oklwvc?_NoN%2w?wsL2~owtzI={@En+;R*)gS;rD)6S|WW zk!M=ra+n;0$gmv?x33HNBM_3_rBIZTq%f2Oq|lV_rLYukVMUZxWQ4Sr1R?}8WD7D9 z#bA*UHKrrTgb68D$jDK8lz7a!Lt04(f|e1WcE}833e$Anf+1ksWkc~pMw;ACMmF@4 z1dto3mlnn|(;*E2JIsI*Y9|`NEX@~d3P?bWs5uJpuWZ3GHo8MJCCT8nAEr5$LTo83 zO5nH9`ep2FiI%h%FcS7gJC>SUQNq;22qz)e(u5uJ!9bW67fXbU9VJo%X@#N&vSgZ~ z7$5=Mco9RHQc4$vaYjm;!lHuwOECZg9Zd-Sh$cN15nzUOtXybthybxKZ!Rg;kHCur zo20^(QK4iM@EXyO%$de91!;rEB|2i?)`BWisZm9Qi|Clpro{DBxdfBCr#6Nb#+^s$ zxK#dS@oP`R}$nKQOQ4CUr2pWMBX^p0Z9juU;X-B--4O^dtZ5x4dBO>tw*OB$3 zs3BWGvLo?3gv^i`;E!UC$lyN-+)2LeG-pL$AssuLHn8$`1US!}F<6OuK`}lBm7sbnIP6_%7o=a6{-t z2}@Z~0qfE35aUAeE8xVCnKYH;Hw^hJp{WP~jq*E$N|{YXTpmIZIb)QIbj`Mo54Q zp#dk*2%tc?yEtZ1L!CU1!3*w+q(T!~CoqbThjv>b{*^;8(tC$xmclaH)s$vc>?o)J zS7>I?QI7!mw48G~@Sl>JCj`9BTPuuJVqhpOpjJ{7U=ELSG+%;+so+pZ2qA<97^)x{ z$1V$$LvAO1$>2IrwSpDGW(x8ziyD4MZi0=FaevG9sdFT zQI7@#soRKQtWV`w{916hRi5CtO0?j>pcREt6yfZ>T}d?h3gJ7Ie_8z6 z666AcrWCCVeX}AIZabwAjOH<^&WLP!FZv&16#Fco6n_|%NlAA_=&peEcwB`HSfPcd zY=Z6!O=t<@D}yc)kEgn9SQ#_U^8+Z;JUK4w(r<73WnEF!GVH}H)8V* zi-P>ojixe50oPIRu@z#vL)#(TvE#-xOqxKBaw4J9S^?M5jsYmiw*k#Uy{BFm(ohLd zj{p|aUb1EIpK@pb(oQT@HJFg9Syb;-11c{pF^v{pF0!WbM_-!J3wm?8frW9l!i4zB zA!HiGF-gIrx6k8z5)MQfsxTqio56?i-2+EVU$}HRjjg4af^k%eX#syK&R52NuwRPb z_~tbamoYQG2%$g&uto-qBAWCLTA(_}A2kg@B(#evOy~*mYCwa~OF$#lp{^!x(h)*% zi2u;-r*E6lA|SnE9EDbV^+Vr!qD4?)K3gi!O88GlXibMYjx6gAn1sf~mZF}<-P&X` zXsHCBO@s!94nr_(l>h_wMgc@CuAD54D|9=H)?u(PCd<(*Sz)*-ML{sw0DoXNB16#gOulUOUNFSuaT IxXY{m57J-d<^TWy delta 63609 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

V}pKp#oyZc#o474ta%vWk-7=3Nc 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 diff --git a/IOB-PI/readParallela.py b/IOB-PI/readParallela.py index e8d9561..35234a5 100644 --- a/IOB-PI/readParallela.py +++ b/IOB-PI/readParallela.py @@ -1,7 +1,7 @@ #!/usr/bin/python # -*- coding: utf-8 -*- -# readParallela v. 2.6.2 12 Ingressi +# readParallela v. 3.0.0 12 Ingressi # - single instance timer # - invio multiplo x send eventi accodati # - gestione segnali BLINKING @@ -17,6 +17,7 @@ # - (2.6.0) Aggiunto gestione Redis x code salvate ogni minuto e ricaricate all'avvio 2025.04.17 # - (2.6.1) Cleanup generale vecchia queue post test vari # - (2.6.2) Fix in global di to_retry in send_coda per evitare problemi +# - (3.0.0) Fix in global di to_retry in send_coda per evitare problemi import time @@ -46,7 +47,6 @@ class ReadParallelaIOB: # Configuration and State self.config = configparser - self.load_config(config_path) # Hardware Pins (12 inputs) self.input_pins = [11, 12, 13, 15, 16, 18, 22, 7, 29, 31, 32, 36] @@ -63,6 +63,9 @@ class ReadParallelaIOB: self.B_temp = array('B', [0] * 12) self.i_filter_counters = array('i', [0] * 12) + # Load configuration after arrays are initialized + self.load_config(config_path) + # Control Variables self.cont = 0 self.onLine = '1' @@ -76,11 +79,15 @@ class ReadParallelaIOB: # Redis self.CodaR = redis.Redis(host='localhost', port=6379, db=0, password='24068Seriate') self.queue_name = 'IOB' - + # Logging self.setup_logging() def load_config(self, path): + """ + Loads configuration parameters from the specified .cfg file. + Sets up timing, URL, logging, and bit-specific settings (blinking, inversion, filtering). + """ config = configparser.RawConfigParser() if not os.path.exists(path): print(f"Error: Config file {path} not found.") @@ -149,6 +156,10 @@ class ReadParallelaIOB: return self.CodaR.llen(self.queue_name) def readParallelaFiltrata(self): + """ + Performs the core logic: reads GPIO, applies inversion, filtering, + and blinking, then reconstructs the value as a hex string. + """ try: # 1. Efficient GPIO Read for i, pin in enumerate(self.input_pins): From 1c1344ea634fa782bb5a2c8afc04237e203d1e4c Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 12 May 2026 16:19:32 +0200 Subject: [PATCH 09/19] update condizione di LOG --- IOB-PI/readParallela.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/IOB-PI/readParallela.py b/IOB-PI/readParallela.py index 35234a5..e1bcf06 100644 --- a/IOB-PI/readParallela.py +++ b/IOB-PI/readParallela.py @@ -27,11 +27,16 @@ import logging import logging.handlers import threading import configparser -from datetime import datetime +from datetime import datetime, timezone from array import array import redis import requests +import urllib3 + +# Disable urllib3 debug logging to keep application logs clean +urllib3.disable_warnings() +logging.getLogger("urllib3").setLevel(logging.WARNING) # Note: RPi.GPIO is imported inside the class or at runtime to prevent errors on non-Pi systems try: @@ -232,7 +237,7 @@ class ReadParallelaIOB: def accoda(self, value): try: - dt_eve = datetime.utcnow().strftime('%Y%m%d%H%M%S%f')[:-3] + dt_eve = datetime.now(timezone.utc).strftime('%Y%m%d%H%M%S%f')[:-3] self.rqEnqueue(f"{dt_eve}#{value}#{self.cont}") except Exception as e: self.logPro.error(f"QUEUE ERROR: {e}") @@ -272,7 +277,7 @@ class ReadParallelaIOB: parts = resp.split("#") dt_eve, val, cnt = parts[0], parts[1], parts[2] - dt_curr = datetime.utcnow().strftime('%Y%m%d%H%M%S%f')[:-3] + dt_curr = datetime.now(timezone.utc).strftime('%Y%m%d%H%M%S%f')[:-3] url = f"{self.URLBASE}{self.idxMacchina}{self.URLADV1}{val}&dtCurr={dt_curr}&dtEve={dt_eve}&cnt={cnt}" From 328a5fe5402fbd2b1dbaca23471b4aef783e976e Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 12 May 2026 16:30:43 +0200 Subject: [PATCH 10/19] aggiunta commenti --- IOB-PI/readParallela.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/IOB-PI/readParallela.py b/IOB-PI/readParallela.py index e1bcf06..f496d11 100644 --- a/IOB-PI/readParallela.py +++ b/IOB-PI/readParallela.py @@ -17,7 +17,7 @@ # - (2.6.0) Aggiunto gestione Redis x code salvate ogni minuto e ricaricate all'avvio 2025.04.17 # - (2.6.1) Cleanup generale vecchia queue post test vari # - (2.6.2) Fix in global di to_retry in send_coda per evitare problemi -# - (3.0.0) Fix in global di to_retry in send_coda per evitare problemi +# - (3.0.0) Prima versione code-assisted: riformulazione e ottimizzazione globale programma import time @@ -125,6 +125,9 @@ class ReadParallelaIOB: self.MAX_COUNTER_FILTER = config.getint('filter', 'MAX_COUNTER_FILTER') def setup_logging(self): + """ + Configures the logging system. + """ logging.basicConfig( level=logging.DEBUG, format='%(asctime)s %(name)-8s %(levelname)-8s %(message)s', @@ -137,6 +140,9 @@ class ReadParallelaIOB: self.logPro = logging.getLogger('program') def setup_gpio(self): + """ + Initializes the GPIO pins for input. + """ if GPIO is None: self.logPro.error("GPIO library not found. Are you on a Raspberry Pi?") sys.exit(1) @@ -151,13 +157,22 @@ class ReadParallelaIOB: sys.exit(1) def rqEnqueue(self, item): + """ + Adds an item to the Redis queue. + """ self.CodaR.rpush(self.queue_name, item) def rqDequeue(self): + """ + Removes and returns an item from the Redis queue. + """ item = self.CodaR.lpop(self.queue_name) return item.decode('utf-8') if item else None def rqLen(self): + """ + Returns the current length of the Redis queue. + """ return self.CodaR.llen(self.queue_name) def readParallelaFiltrata(self): @@ -302,6 +317,12 @@ class ReadParallelaIOB: self.timer_busy = False def run(self): + """ + Starts the main execution loop: + 1. Initializes GPIO. + 2. Spawns a background daemon thread to empty the Redis queue. + 3. Enters a loop to sample GPIO inputs, apply filters/blinking, and queue changes. + """ self.setup_gpio() # Start background thread for queue emptying @@ -348,6 +369,7 @@ class ReadParallelaIOB: self.to_long = self.TIMEOUTLONG except KeyboardInterrupt: + self.logPro.info("Keyboard interrupt received. Exiting...") break except Exception as e: self.logPro.error(f"Main loop error: {e}") From cb914a4f5666dda3038a1c017e67cefcb848c18b Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 12 May 2026 16:34:15 +0200 Subject: [PATCH 11/19] Ottimizzazione lettura GPIO --- IOB-PI/README.md | 53 ++------------------- IOB-PI/readParallela.py | 103 ++++++++++++++++++++++------------------ 2 files changed, 62 insertions(+), 94 deletions(-) diff --git a/IOB-PI/README.md b/IOB-PI/README.md index 568928a..51b32f2 100644 --- a/IOB-PI/README.md +++ b/IOB-PI/README.md @@ -18,6 +18,7 @@ Valutato python-rq x gestione code con redis tramite esecuzione workers python g Testato ma al momento non è rispondente ai requisiti del programma per cui si rischia un blocco inf ase di invio se server non OK, per ora implementata copia "manuale" della coda verso redis per salvaguardare dati accumulati (vers 2.6.x) + ## MD5 zip## creazione MD5: da powershell @@ -27,37 +28,11 @@ creazione MD5: da powershell - ## ReadParallela IOB-PI -### Overview -`readParallela.py` is a high-frequency data acquisition script designed for Raspberry Pi. It interfaces with a custom GPIO board to read 12 parallel digital inputs, applies various signal processing filters, and queues events for asynchronous transmission to a remote server via Redis and HTTP. - ### Panoramica `readParallela.py` è uno script di acquisizione dati ad alta frequenza progettato per Raspberry Pi. Interfaccia una scheda GPIO personalizzata per leggere 12 ingressi digitali paralleli, applica vari filtri di elaborazione del segnale e mette in coda gli eventi per la trasmissione asincrona a un server remoto tramite Redis e HTTP. -### Core Functionality - -#### 1. Signal Acquisition & Processing -The script polls 12 GPIO pins at a configurable interval (`SAMPLETIME`). For each input, it applies a three-stage processing pipeline: -* **Inversion:** Reverses the signal logic if configured for a specific bit. -* **Short Signal Filtering (Debounce):** Filters out brief electrical spikes or noise by requiring a signal to remain stable for a specific number of cycles (`MAX_COUNTER_FILTER`). -* **Blinking Logic:** Detects and manages "blinking" signals, allowing for specific timing-based event detection. - -#### 2. Data Packaging -Once processed, the 12 bits are aggregated into a single integer value and converted into a Hexadecimal string. - -#### 3. Event Queuing & Transmission -To ensure high-speed reading is not interrupted by network latency: -* **Redis Queue:** Detected changes (and timeout events) are timestamped and pushed into a Redis list (`IOB`). -* **Asynchronous Sender:** A dedicated background thread (`svuotaCoda`) periodically dequeues items from Redis and performs HTTP requests to a central server. -* **Reliability:** The script implements a "retry" mechanism and monitors server availability (`URLALIVE`) to manage offline periods. - -#### 4. Timeout Management -The script tracks two types of timeouts: -* **Short Timeout:** Ensures that a signal state is recorded even if it changes quickly. -* **Long Timeout:** Provides a fallback to ensure state consistency over longer periods. - ### Funzionalità Principali #### 1. Acquisizione e Elaborazione Segnali @@ -66,7 +41,7 @@ Lo script interroga 12 pin GPIO a un intervallo configurabile (`SAMPLETIME`). Pe * **Filtraggio Segnali Brevi (Debounce):** Filtra i picchi elettrici o il rumore richiedendo che il segnale rimanga stabile per un numero specifico di cicli (`MAX_COUNTER_FILTER`). * **Gestione Blinking:** Rileva e gestisce segnali "blinking", permettendo il rilevamento di eventi basati su timing specifici. -### 2. Impacchettamento Dati +#### 2. Impacchettamento Dati Una volta elaborati, i 12 bit vengono aggregati in un unico valore intero e convertiti in una stringa Esadecimale. #### 3. Code e Trasmissione Eventi @@ -80,28 +55,13 @@ Lo script monitora due tipi di timeout: * **Timeout Breve:** Assicura che lo stato di un segnale venga registrato anche se cambia rapidamente. * **Timeout Lungo:** Fornisce un sistema di fallback per garantire la coerenza dello stato su periodi più lunghi. -### Implementation Details (Refactored Version) -The script has been modernized with the following improvements: -* **Object-Oriented Design:** Logic is encapsulated within a `ReadParallelaIOB` class, eliminating reliance on dangerous global variables. -* **Efficient Bitwise Operations:** Replaced manual `if` checks with bitwise operators for faster bit reconstruction. -* **Modern Networking:** Replaced `urllib` with the `requests` library for more robust and readable HTTP communication. -* **Optimized Configuration:** Uses loops to load per-bit settings from the configuration file. - ### Dettagli di Implementazione (Versione Refactored) Lo script è stato modernizzato con i seguenti miglioramenti: * **Design Orientato agli Oggetti:** La logica è incapsulata all'interno della classe `ReadParallelaIOB`, eliminando la dipendenza da variabili globali pericolose. -* **Operazioni Bitwise Efficienti:** Sostituzione dei controlli manuali `if` con operatori bitwise per una ricostruzione dei bit più veloce. +* **Operazioni Bitwise Efficienti:** Sostituzione dei controlli manuali `if` con operatori bitwise per una ricostruzione dei bit più veloce e ottimizzazione dell'accesso agli attributi nelle loop critiche. * **Networking Moderno:** Sostituzione di `urllib` con la libreria `requests` per una comunicazione HTTP più robusta e leggibile. * **Configurazione Ottimizzata:** Utilizzo di cicli per caricare le impostazioni per singolo bit dal file di configurazione. -### Configuration -Settings are managed via `IOB.cfg`, including: -* `[time]`: Sampling rates and timeouts. -* `[id]`: Machine identifier. -* `[web]`: URLs for data transmission and connectivity checks. -* `[blink]`, `[invert]`, `[filter]`: Per-bit configuration for signal processing. -* `[log]`: Logging verbosity and file paths. - ### Configurazione Le impostazioni sono gestite tramite `IOB.cfg`, tra cui: * `[time]`: Frequenze di campionamento e timeout. @@ -110,15 +70,10 @@ Le impostazioni sono gestite tramite `IOB.cfg`, tra cui: * `[blink]`, `[invert]`, `[filter]`: Configurazione per singolo bit per l'elaborazione dei segnali. * `[log]`: Livello di logging e percorsi dei file. -### Dependencies -* `RPi.GPIO`: For hardware interfacing. -* `redis`: For local event queuing. -* `requests`: For web communication. -* `configparser`: For configuration management. - ### Dipendenze * `RPi.GPIO`: Per l'interfacciamento hardware. * `redis`: Per la gestione della coda locale. * `requests`: Per la comunicazione web. * `configparser`: Per la gestione della configurazione. + diff --git a/IOB-PI/readParallela.py b/IOB-PI/readParallela.py index f496d11..065d8a5 100644 --- a/IOB-PI/readParallela.py +++ b/IOB-PI/readParallela.py @@ -18,6 +18,7 @@ # - (2.6.1) Cleanup generale vecchia queue post test vari # - (2.6.2) Fix in global di to_retry in send_coda per evitare problemi # - (3.0.0) Prima versione code-assisted: riformulazione e ottimizzazione globale programma +# - (3.1.0) Ottimizzazione gestione letture GPIO (sempre code-assisted) import time @@ -182,66 +183,78 @@ class ReadParallelaIOB: """ try: # 1. Efficient GPIO Read - for i, pin in enumerate(self.input_pins): + # Using a local reference for speed in loops + gpio_input = GPIO.input + pins = self.input_pins + inverting = self.B_inverting + input_arr = self.B_input + + for i in range(12): # Read and invert logic immediately if required - raw_val = 0 if GPIO.input(pin) else 1 - if self.B_inverting[i] == 1: + raw_val = 0 if gpio_input(pins[i]) else 1 + if inverting[i]: raw_val = 1 - raw_val - self.B_input[i] = raw_val + input_arr[i] = raw_val # 2. Processing Loop (Filtering & Blinking) + # Pre-caching references to reduce attribute lookups in tight loops + filter_arr = self.B_filter + filter_prev = self.B_filter_prev + filter_counters = self.i_filter_counters + max_filter = self.MAX_COUNTER_FILTER + + blinking = self.B_blinking + previous = self.B_previous + output_arr = self.B_output + blink_counters = self.i_counters + for i in range(12): # Debounce / Filter logic - if self.B_filter[i] == 1: - if self.B_input[i] == 1 and self.B_filter_prev[i] == 0: - if self.i_filter_counters[i] == 0: - self.i_filter_counters[i] = self.MAX_COUNTER_FILTER - self.B_temp[i] = 0 - else: - self.i_filter_counters[i] = 0 - self.B_temp[i] = 1 - elif self.B_input[i] == 1 and self.B_filter_prev[i] == 1: - if self.i_filter_counters[i] > 0: - self.i_filter_counters[i] -= 1 - self.B_temp[i] = 0 - else: - self.B_temp[i] = 1 - elif self.B_input[i] == 0 and self.B_filter_prev[i] == 1: - if self.i_filter_counters[i] == 0: - self.i_filter_counters[i] = self.MAX_COUNTER_FILTER - self.B_temp[i] = 1 - else: - self.i_filter_counters[i] = 0 - self.B_temp[i] = 0 - elif self.B_input[i] == 0 and self.B_filter_prev[i] == 0: - if self.i_filter_counters[i] > 0: - self.i_filter_counters[i] -= 1 - self.B_temp[i] = 1 - else: - self.B_temp[i] = 0 + if filter_arr[i]: + curr_in = input_arr[i] + prev_in = filter_prev[i] - self.B_filter_prev[i] = self.B_input[i] - self.B_input[i] = self.B_temp[i] + if curr_in != prev_in: + # State change detected + if curr_in == 1: + filter_counters[i] = max_filter if filter_counters[i] == 0 else 0 + self.B_temp[i] = 0 if filter_counters[i] == max_filter else 1 + else: + filter_counters[i] = max_filter if filter_counters[i] == 0 else 0 + self.B_temp[i] = 1 if filter_counters[i] == max_filter else 0 + + filter_prev[i] = curr_in + input_arr[i] = self.B_temp[i] + else: + # No state change, maintain or decrement counter + if filter_counters[i] > 0: + filter_counters[i] -= 1 + self.B_temp[i] = 0 if curr_in == 1 else 1 + else: + self.B_temp[i] = 1 if curr_in == 1 else 0 + + # Update the actual input array with the filtered value + input_arr[i] = self.B_temp[i] # Blinking Logic - if self.B_blinking[i] == 0: - self.B_output[i] = self.B_input[i] + if blinking[i] == 0: + output_arr[i] = input_arr[i] else: - if self.B_previous[i] != self.B_input[i]: - self.B_previous[i] = self.B_input[i] - if self.B_input[i] == 1: - self.B_output[i] = 1 - self.i_counters[i] = self.MAX_COUNTER_BLINK + if previous[i] != input_arr[i]: + previous[i] = input_arr[i] + if input_arr[i] == 1: + output_arr[i] = 1 + blink_counters[i] = self.MAX_COUNTER_BLINK else: - if self.B_input[i] == 0 and self.i_counters[i] > 0: - self.i_counters[i] -= 1 - if self.i_counters[i] == 0: - self.B_output[i] = 0 + if input_arr[i] == 0 and blink_counters[i] > 0: + blink_counters[i] -= 1 + if blink_counters[i] == 0: + output_arr[i] = 0 # 3. Optimized Bitwise Reconstruction new_value = 0 for i in range(12): - if self.B_output[i]: + if output_arr[i]: new_value |= (1 << i) return hex(new_value)[2:].upper() From 4752bf6fcfce143eaeb6ba1f76419621b2ad0935 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 12 May 2026 16:56:25 +0200 Subject: [PATCH 12/19] update vers num --- IOB-PI/readParallela.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IOB-PI/readParallela.py b/IOB-PI/readParallela.py index 065d8a5..923671d 100644 --- a/IOB-PI/readParallela.py +++ b/IOB-PI/readParallela.py @@ -1,7 +1,7 @@ #!/usr/bin/python # -*- coding: utf-8 -*- -# readParallela v. 3.0.0 12 Ingressi +# readParallela v. 3.1.0 12 Ingressi # - single instance timer # - invio multiplo x send eventi accodati # - gestione segnali BLINKING @@ -47,7 +47,7 @@ except ImportError: class ReadParallelaIOB: def __init__(self, config_path='IOB.cfg'): - self.PROGRAM_NAME = "ReadPar IOB-pi v.3.0.0 (Refactored)" + self.PROGRAM_NAME = "ReadPar IOB-pi v.3.1.0 (2026)" self.MAXRETRY = 10 self.MAX_COUNTER_BLINK = 10 From 1f31183e8df5770c9c498d0d7361d54f5735d9de Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 12 May 2026 17:45:49 +0200 Subject: [PATCH 13/19] Update con parametrizzazione num pins/input --- IOB-PI/readParallela.py | 45 +++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/IOB-PI/readParallela.py b/IOB-PI/readParallela.py index 923671d..ff042c7 100644 --- a/IOB-PI/readParallela.py +++ b/IOB-PI/readParallela.py @@ -54,8 +54,13 @@ class ReadParallelaIOB: # Configuration and State self.config = configparser - # Hardware Pins (12 inputs) - self.input_pins = [11, 12, 13, 15, 16, 18, 22, 7, 29, 31, 32, 36] + # Hardware Pin Maps + self._PINS_8 = [11, 12, 13, 15, 16, 18, 22, 7] + self._PINS_12 = [11, 12, 13, 15, 16, 18, 22, 7, 29, 31, 32, 36] + + # Default configuration (will be overwritten by load_config) + self.num_params = 12 + self.input_pins = self._PINS_12 # Internal State Arrays self.i_counters = array('i', [0] * 12) @@ -100,6 +105,30 @@ class ReadParallelaIOB: sys.exit(1) config.read(path) + # 1. Determine number of parameters + try: + self.num_params = config.getint('id', 'numParams', fallback=12) + except ValueError: + self.num_params = 12 + + # 2. Update hardware pins and arrays based on num_params + if self.num_params == 8: + self.input_pins = self._PINS_8 + else: + self.input_pins = self._PINS_12 + + self.i_counters = array('i', [0] * self.num_params) + self.B_blinking = array('B', [0] * self.num_params) + self.B_previous = array('B', [0] * self.num_params) + self.B_input = array('B', [0] * self.num_params) + self.B_output = array('B', [0] * self.num_params) + self.B_inverting = array('B', [0] * self.num_params) + self.B_filter = array('B', [0] * self.num_params) + self.B_filter_prev = array('B', [0] * self.num_params) + self.B_temp = array('B', [0] * self.num_params) + self.i_filter_counters = array('i', [0] * self.num_params) + + # 3. Load other parameters self.idxMacchina = config.get('id', 'idxMacchina') self.SAMPLETIME = config.getfloat('time', 'SAMPLETIME') self.TIMEOUTSHORT = config.getfloat('time', 'TIMEOUTSHORT') @@ -115,12 +144,12 @@ class ReadParallelaIOB: self.LOGFILE = config.get('log', 'LOGFILE') self.LOGLEVEL = config.get('log', 'LOGLEVEL') - # Load bit settings using loops instead of manual lines - for i in range(12): + # 4. Load bit settings using loops + for i in range(self.num_params): self.B_blinking[i] = config.getint('blink', f'bit{i}') self.MAX_COUNTER_BLINK = config.getint('blink', 'MAX_COUNTER_BLINK') - for i in range(12): + for i in range(self.num_params): self.B_inverting[i] = config.getint('invert', f'bit{i}') self.B_filter[i] = config.getint('filter', f'bit{i}') self.MAX_COUNTER_FILTER = config.getint('filter', 'MAX_COUNTER_FILTER') @@ -189,7 +218,7 @@ class ReadParallelaIOB: inverting = self.B_inverting input_arr = self.B_input - for i in range(12): + for i in range(self.num_params): # Read and invert logic immediately if required raw_val = 0 if gpio_input(pins[i]) else 1 if inverting[i]: @@ -208,7 +237,7 @@ class ReadParallelaIOB: output_arr = self.B_output blink_counters = self.i_counters - for i in range(12): + for i in range(self.num_params): # Debounce / Filter logic if filter_arr[i]: curr_in = input_arr[i] @@ -253,7 +282,7 @@ class ReadParallelaIOB: # 3. Optimized Bitwise Reconstruction new_value = 0 - for i in range(12): + for i in range(self.num_params): if output_arr[i]: new_value |= (1 << i) From 2198f014257018cc60680fc90abc0bea7cb2ddcc Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 12 May 2026 17:46:28 +0200 Subject: [PATCH 14/19] Controllo:_ accetta solo 8 / 12 come numParams (Input) + fix hex a 2-3 digits (8-12 inputs) --- IOB-PI/readParallela.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/IOB-PI/readParallela.py b/IOB-PI/readParallela.py index ff042c7..476715b 100644 --- a/IOB-PI/readParallela.py +++ b/IOB-PI/readParallela.py @@ -107,7 +107,11 @@ class ReadParallelaIOB: # 1. Determine number of parameters try: - self.num_params = config.getint('id', 'numParams', fallback=12) + val = config.getint('id', 'numParams', fallback=12) + if val in [8, 12]: + self.num_params = val + else: + self.num_params = 12 except ValueError: self.num_params = 12 @@ -286,7 +290,10 @@ class ReadParallelaIOB: if output_arr[i]: new_value |= (1 << i) - return hex(new_value)[2:].upper() + if self.num_params == 8: + return f"{new_value:02X}" + else: + return hex(new_value)[2:].upper() except Exception as e: self.logPro.error(f"Error in readParallelaFiltrata: {e}") From 7387c516310565c3e5c97bbdb14a66c33477d959 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 12 May 2026 17:52:03 +0200 Subject: [PATCH 15/19] Fix commento --- IOB-PI/readParallela.py.bak | 396 ++++++++++++++++++++++++++++++++++++ 1 file changed, 396 insertions(+) create mode 100644 IOB-PI/readParallela.py.bak diff --git a/IOB-PI/readParallela.py.bak b/IOB-PI/readParallela.py.bak new file mode 100644 index 0000000..96801a5 --- /dev/null +++ b/IOB-PI/readParallela.py.bak @@ -0,0 +1,396 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# readParallela v. 3.1.0 12 Ingressi +# - single instance timer +# - invio multiplo x send eventi accodati +# - gestione segnali BLINKING +# - gestione INVERSIONE segnali cv 10-VII-2018 +# - gestione FILTRAGGIO segnali brevi cv 23-VII-2018 +# - (2.3) gestione 12 bit cv 14-I-2020 +# - (2.4) fix ingressi e conf apertura parallela + gestione vari bit filtraggio x nuovi ingressi + update conf con 12 parametri bit SEL 15-I-2020 +# - (2.4.8) versione adatta a raspberry PI vecchia generazione (GPIO corto, 8bit) +# - (2.5) Fix (hope) ciclo "wait send to complete", gestione timeout (rety infinito se IO riparte in modo anomalo) +# - (2.5.1) Fix numero versione 18.05.2023 +# - (2.5.2) Fix gestione eccezioni con report dettagliato +# - (2.5.3) Fix gestione stringhe e print x python 3.11 in debian 12 / raspberry OS 2025 +# - (2.6.0) Aggiunto gestione Redis x code salvate ogni minuto e ricaricate all'avvio 2025.04.17 +# - (2.6.1) Cleanup generale vecchia queue post test vari +# - (2.6.2) Fix in global di to_retry in send_coda per evitare problemi +# - (3.0.0) Prima versione code-assisted: riformulazione e ottimizzazione globale programma +# - (3.1.0) Ottimizzazione gestione letture GPIO (sempre code-assisted) + + +import time +import sys +import os +import logging +import logging.handlers +import threading +import configparser +from datetime import datetime, timezone +from array import array + +import redis +import requests +import urllib3 + +# Disable urllib3 debug logging to keep application logs clean +urllib3.disable_warnings() +logging.getLogger("urllib3").setLevel(logging.WARNING) + +# Note: RPi.GPIO is imported inside the class or at runtime to prevent errors on non-Pi systems +try: + import RPi.GPIO as GPIO +except ImportError: + GPIO = None + +class ReadParallelaIOB: + def __init__(self, config_path='IOB.cfg'): + self.PROGRAM_NAME = "ReadPar IOB-pi v.3.1.0 (2026)" + self.MAXRETRY = 10 + self.MAX_COUNTER_BLINK = 10 + + # Configuration and State + self.config = configparser + + # Hardware Pins (12 inputs) + self.input_pins = [11, 12, 13, 15, 16, 18, 22, 7, 29, 31, 32, 36] + + # Internal State Arrays + self.i_counters = array('i', [0] * 12) + self.B_blinking = array('B', [0] * 12) + self.B_previous = array('B', [0] * 12) + self.B_input = array('B', [0] * 12) + self.B_output = array('B', [0] * 12) + self.B_inverting = array('B', [0] * 12) + self.B_filter = array('B', [0] * 12) + self.B_filter_prev = array('B', [0] * 12) + self.B_temp = array('B', [0] * 12) + self.i_filter_counters = array('i', [0] * 12) + + # Load configuration after arrays are initialized + self.load_config(config_path) + + # Control Variables + self.cont = 0 + self.onLine = '1' + self.sending = False + self.timer_busy = False + self.to_enable = False + self.to_short = self.TIMEOUTSHORT + self.to_long = self.TIMEOUTLONG + self.to_retry = self.MAXRETRY + + # Redis + self.CodaR = redis.Redis(host='localhost', port=6379, db=0, password='24068Seriate') + self.queue_name = 'IOB' + + # Logging + self.setup_logging() + + def load_config(self, path): + """ + Loads configuration parameters from the specified .cfg file. + Sets up timing, URL, logging, and bit-specific settings (blinking, inversion, filtering). + """ + config = configparser.RawConfigParser() + if not os.path.exists(path): + print(f"Error: Config file {path} not found.") + sys.exit(1) + config.read(path) + + self.idxMacchina = config.get('id', 'idxMacchina') + self.SAMPLETIME = config.getfloat('time', 'SAMPLETIME') + self.TIMEOUTSHORT = config.getfloat('time', 'TIMEOUTSHORT') + self.TIMEOUTLONG = config.getfloat('time', 'TIMEOUTLONG') + self.SENDURLTIME = config.getfloat('time', 'SENDURLTIME') + self.NMAXSEND = config.getint('time', 'NMAXSEND') + + self.URLBASE = config.get('web', 'URLBASE') + self.URLENABLED = config.get('web', 'URLENABLED') + self.URLALIVE = config.get('web', 'URLALIVE') + self.URLADV1 = config.get('web', 'URLADV1') + + self.LOGFILE = config.get('log', 'LOGFILE') + self.LOGLEVEL = config.get('log', 'LOGLEVEL') + + # Load bit settings using loops instead of manual lines + for i in range(12): + self.B_blinking[i] = config.getint('blink', f'bit{i}') + self.MAX_COUNTER_BLINK = config.getint('blink', 'MAX_COUNTER_BLINK') + + for i in range(12): + self.B_inverting[i] = config.getint('invert', f'bit{i}') + self.B_filter[i] = config.getint('filter', f'bit{i}') + self.MAX_COUNTER_FILTER = config.getint('filter', 'MAX_COUNTER_FILTER') + + def setup_logging(self): + """ + Configures the logging system. + """ + logging.basicConfig( + level=logging.DEBUG, + format='%(asctime)s %(name)-8s %(levelname)-8s %(message)s', + datefmt='%Y-%m-%d %H:%M:%S', + filename=self.LOGFILE, + filemode='a' + ) + self.logQue = logging.getLogger('queue') + self.logSnd = logging.getLogger('sendUrl') + self.logPro = logging.getLogger('program') + + def setup_gpio(self): + """ + Initializes the GPIO pins for input. + """ + if GPIO is None: + self.logPro.error("GPIO library not found. Are you on a Raspberry Pi?") + sys.exit(1) + try: + GPIO.setmode(GPIO.BOARD) + GPIO.setwarnings(False) + for pin in self.input_pins: + GPIO.setup(pin, GPIO.IN) + self.logPro.info("GPIO initialized successfully.") + except Exception as e: + self.logPro.error(f"GPIO Setup Error: {e}") + sys.exit(1) + + def rqEnqueue(self, item): + """ + Adds an item to the Redis queue. + """ + self.CodaR.rpush(self.queue_name, item) + + def rqDequeue(self): + """ + Removes and returns an item from the Redis queue. + """ + item = self.CodaR.lpop(self.queue_name) + return item.decode('utf-8') if item else None + + def rqLen(self): + """ + Returns the current length of the Redis queue. + """ + return self.CodaR.llen(self.queue_name) + + def readParallelaFiltrata(self): + """ + Performs the core logic: reads GPIO, applies inversion, filtering, + and blinking, then reconstructs the value as a hex string. + """ + try: + # 1. Efficient GPIO Read + # Using a local reference for speed in loops + gpio_input = GPIO.input + pins = self.input_pins + inverting = self.B_inverting + input_arr = self.B_input + + for i in range(12): + # Read and invert logic immediately if required + raw_val = 0 if gpio_input(pins[i]) else 1 + if inverting[i]: + raw_val = 1 - raw_val + input_arr[i] = raw_val + + # 2. Processing Loop (Filtering & Blinking) + # Pre-caching references to reduce attribute lookups in tight loops + filter_arr = self.B_filter + filter_prev = self.B_filter_prev + filter_counters = self.i_filter_counters + max_filter = self.MAX_COUNTER_FILTER + + blinking = self.B_blinking + previous = self.B_previous + output_arr = self.B_output + blink_counters = self.i_counters + + for i in range(12): + # Debounce / Filter logic + if filter_arr[i]: + curr_in = input_arr[i] + prev_in = filter_prev[i] + + if curr_in != prev_in: + # State change detected + if curr_in == 1: + filter_counters[i] = max_filter if filter_counters[i] == 0 else 0 + self.B_temp[i] = 0 if filter_counters[i] == max_filter else 1 + else: + filter_counters[i] = max_filter if filter_counters[i] == 0 else 0 + self.B_temp[i] = 1 if filter_counters[i] == max_filter else 0 + + filter_prev[i] = curr_in + input_arr[i] = self.B_temp[i] + else: + # No state change, maintain or decrement counter + if filter_counters[i] > 0: + filter_counters[i] -= 1 + self.B_temp[i] = 0 if curr_in == 1 else 1 + else: + self.B_temp[i] = 1 if curr_in == 1 else 0 + + # Update the actual input array with the filtered value + input_arr[i] = self.B_temp[i] + + # Blinking Logic + if blinking[i] == 0: + output_arr[i] = input_arr[i] + else: + if previous[i] != input_arr[i]: + previous[i] = input_arr[i] + if input_arr[i] == 1: + output_arr[i] = 1 + blink_counters[i] = self.MAX_COUNTER_BLINK + else: + if input_arr[i] == 0 and blink_counters[i] > 0: + blink_counters[i] -= 1 + if blink_counters[i] == 0: + output_arr[i] = 0 + + # 3. Optimized Bitwise Reconstruction + new_value = 0 + for i in range(12): + if output_arr[i]: + new_value |= (1 << i) + + return hex(new_value)[2:].upper() + + except Exception as e: + self.logPro.error(f"Error in readParallelaFiltrata: {e}") + return '' + + def accoda(self, value): + try: + dt_eve = datetime.now(timezone.utc).strftime('%Y%m%d%H%M%S%f')[:-3] + self.rqEnqueue(f"{dt_eve}#{value}#{self.cont}") + except Exception as e: + self.logPro.error(f"QUEUE ERROR: {e}") + + def svuotaCoda(self): + if self.timer_busy: + return + + self.timer_busy = True + try: + if self.rqLen() > 0: + # Check connectivity using requests + try: + res_alive = requests.get(self.URLALIVE, timeout=5) + if res_alive.text == 'OK': + res_enabled = requests.get(self.URLENABLED + self.idxMacchina, timeout=5) + if res_enabled.text == 'OK': + if self.onLine == '0': + self.logPro.info("IOB ONLINE!") + self.onLine = '1' + else: + self.onLine = '0' + else: + self.onLine = '0' + except Exception as e: + self.logPro.error(f"Server Connection Error: {e}") + self.onLine = '0' + + if self.onLine == '1' and not self.sending: + self.sending = True + for _ in range(self.NMAXSEND): + if self.rqLen() == 0: + break + + resp = self.rqDequeue() + if not resp: break + + parts = resp.split("#") + dt_eve, val, cnt = parts[0], parts[1], parts[2] + dt_curr = datetime.now(timezone.utc).strftime('%Y%m%d%H%M%S%f')[:-3] + + url = f"{self.URLBASE}{self.idxMacchina}{self.URLADV1}{val}&dtCurr={dt_curr}&dtEve={dt_eve}&cnt={cnt}" + + try: + r = requests.get(url, timeout=5) + self.logSnd.info(f"{val} [{cnt}] R:{r.text}") + except Exception as e: + self.logSnd.error(f"Send Error: {e}") + + self.sending = False + elif self.sending: + if self.to_retry > 0: + self.to_retry -= 1 + self.logPro.info("WAIT active send to complete") + else: + self.sending = False + self.to_retry = self.MAXRETRY + self.logPro.info("END WAIT, reset to_retry") + except Exception as e: + self.logPro.error(f"svuotaCoda Error: {e}") + finally: + self.timer_busy = False + + def run(self): + """ + Starts the main execution loop: + 1. Initializes GPIO. + 2. Spawns a background daemon thread to empty the Redis queue. + 3. Enters a loop to sample GPIO inputs, apply filters/blinking, and queue changes. + """ + self.setup_gpio() + + # Start background thread for queue emptying + def timer_worker(): + while True: + self.svuotaCoda() + time.sleep(self.SENDURLTIME) + + threading.Thread(target=timer_worker, daemon=True).start() + + old_value = '' + + self.logPro.info("-------------------------------") + self.logPro.info(self.PROGRAM_NAME) + self.logPro.info("-------------------------------") + self.logPro.info("Starting main loop") + + while True: + try: + time.sleep(self.SAMPLETIME) + value = self.readParallelaFiltrata() + + if value != '': + if value != old_value: + self.logQue.info(f"{value} [{self.cont}]") + self.accoda(value) + self.cont = (self.cont + 1) % 10000 + + self.to_enable = True + self.to_short = self.TIMEOUTSHORT + self.to_long = self.TIMEOUTLONG + old_value = value + + # Handle Timeouts + if self.to_enable: + self.to_short -= self.SAMPLETIME + if self.to_short <= 0: + self.logQue.info(f">{value} [{self.cont}]") + self.accoda(value) + self.to_short = self.TIMEOUTSHORT + self.to_enable = False + self.to_long = self.TIMEOUTLONG + + self.to_long -= self.SAMPLETIME + if self.to_long <= 0: + self.logQue.info(f">>{value} [{self.cont}]") + self.accoda(value) + self.to_long = self.TIMEOUTLONG + + except KeyboardInterrupt: + self.logPro.info("Keyboard interrupt received. Exiting...") + break + except Exception as e: + self.logPro.error(f"Main loop error: {e}") + +if __name__ == "__main__": + app = ReadParallelaIOB() + app.run() From 8b1d2970688b2c7428ac163f2f96efa95d10ac5c Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 12 May 2026 18:08:43 +0200 Subject: [PATCH 16/19] Aggiunto demo IOB.cfg con 8/12 inputs + fix gestione hexoutput --- IOB-PI/IOB.cfg | 72 +++++++++++++++++++++++++++++++++++++++++ IOB-PI/readParallela.py | 9 ++++-- 2 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 IOB-PI/IOB.cfg diff --git a/IOB-PI/IOB.cfg b/IOB-PI/IOB.cfg new file mode 100644 index 0000000..9cfc458 --- /dev/null +++ b/IOB-PI/IOB.cfg @@ -0,0 +1,72 @@ +[id] +idxMacchina = 0001 +#idxMacchina = SIMUL_01 +#numParams=8 +numParams=12 + +[web] +URLBASE = http://10.74.82.218/MP/RIOC/api/IOB/input/ +URLALIVE = http://10.74.82.218/MP/RIOC/api/IOB +URLENABLED = http://10.74.82.218/MP/RIOC/api/IOB/enabled/ +URLADV1 = ?valore= +URLREBO = http://10.74.82.218/MP/IOC/api/IOB/sendReboot/ +URLINFO = http://10.74.82.218/MP/RIOC/api/IOB/setM2IOB/ + +[time] +SAMPLETIME = 0.05 +TIMEOUTSHORT = 0.50 +TIMEOUTLONG = 80 +SENDURLTIME = 0.15 +NMAXSEND = 5 + +[log] +LOGLEVEL = 10 +LOGFILE = logfile.txt +LOGREBO = logReboot.txt + +[comm] +port = /dev/ttyAMA0 + +[blink] +MAX_COUNTER_BLINK = 30 +bit0 = 0 +bit1 = 0 +bit2 = 0 +bit3 = 0 +bit4 = 0 +bit5 = 0 +bit6 = 0 +bit7 = 0 +bit8 = 0 +bit9 = 0 +bit10 = 0 +bit11 = 0 + +[invert] +bit0 = 0 +bit1 = 0 +bit2 = 0 +bit3 = 0 +bit4 = 0 +bit5 = 0 +bit6 = 0 +bit7 = 0 +bit8 = 0 +bit9 = 0 +bit10 = 0 +bit11 = 0 + +[filter] +MAX_COUNTER_FILTER = 8 +bit0 = 0 +bit1 = 0 +bit2 = 0 +bit3 = 0 +bit4 = 0 +bit5 = 0 +bit6 = 0 +bit7 = 0 +bit8 = 0 +bit9 = 0 +bit10 = 0 +bit11 = 0 diff --git a/IOB-PI/readParallela.py b/IOB-PI/readParallela.py index 476715b..8cf7bc5 100644 --- a/IOB-PI/readParallela.py +++ b/IOB-PI/readParallela.py @@ -1,7 +1,7 @@ #!/usr/bin/python # -*- coding: utf-8 -*- -# readParallela v. 3.1.0 12 Ingressi +# readParallela v. 3.1.1 12 Ingressi # - single instance timer # - invio multiplo x send eventi accodati # - gestione segnali BLINKING @@ -18,7 +18,7 @@ # - (2.6.1) Cleanup generale vecchia queue post test vari # - (2.6.2) Fix in global di to_retry in send_coda per evitare problemi # - (3.0.0) Prima versione code-assisted: riformulazione e ottimizzazione globale programma -# - (3.1.0) Ottimizzazione gestione letture GPIO (sempre code-assisted) +# - (3.1.1) Ottimizzazione gestione letture GPIO (sempre code-assisted) import time @@ -47,7 +47,7 @@ except ImportError: class ReadParallelaIOB: def __init__(self, config_path='IOB.cfg'): - self.PROGRAM_NAME = "ReadPar IOB-pi v.3.1.0 (2026)" + self.PROGRAM_NAME = "ReadPar IOB-pi v.3.1.1 (2026)" self.MAXRETRY = 10 self.MAX_COUNTER_BLINK = 10 @@ -293,6 +293,9 @@ class ReadParallelaIOB: if self.num_params == 8: return f"{new_value:02X}" else: + # For 12 bits, we want to ensure we don't have leading 0s if not needed, + # but the user's log showed F83, which is a 3-digit hex. + # hex(new_value)[2:].upper() is fine. return hex(new_value)[2:].upper() except Exception as e: From db5bb9f2e13d28f2c2ff7cf35a70a8398571df6c Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 12 May 2026 18:09:04 +0200 Subject: [PATCH 17/19] rimozione file backup --- IOB-PI/readParallela.py.bak | 396 ------------------------------------ 1 file changed, 396 deletions(-) delete mode 100644 IOB-PI/readParallela.py.bak diff --git a/IOB-PI/readParallela.py.bak b/IOB-PI/readParallela.py.bak deleted file mode 100644 index 96801a5..0000000 --- a/IOB-PI/readParallela.py.bak +++ /dev/null @@ -1,396 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -# readParallela v. 3.1.0 12 Ingressi -# - single instance timer -# - invio multiplo x send eventi accodati -# - gestione segnali BLINKING -# - gestione INVERSIONE segnali cv 10-VII-2018 -# - gestione FILTRAGGIO segnali brevi cv 23-VII-2018 -# - (2.3) gestione 12 bit cv 14-I-2020 -# - (2.4) fix ingressi e conf apertura parallela + gestione vari bit filtraggio x nuovi ingressi + update conf con 12 parametri bit SEL 15-I-2020 -# - (2.4.8) versione adatta a raspberry PI vecchia generazione (GPIO corto, 8bit) -# - (2.5) Fix (hope) ciclo "wait send to complete", gestione timeout (rety infinito se IO riparte in modo anomalo) -# - (2.5.1) Fix numero versione 18.05.2023 -# - (2.5.2) Fix gestione eccezioni con report dettagliato -# - (2.5.3) Fix gestione stringhe e print x python 3.11 in debian 12 / raspberry OS 2025 -# - (2.6.0) Aggiunto gestione Redis x code salvate ogni minuto e ricaricate all'avvio 2025.04.17 -# - (2.6.1) Cleanup generale vecchia queue post test vari -# - (2.6.2) Fix in global di to_retry in send_coda per evitare problemi -# - (3.0.0) Prima versione code-assisted: riformulazione e ottimizzazione globale programma -# - (3.1.0) Ottimizzazione gestione letture GPIO (sempre code-assisted) - - -import time -import sys -import os -import logging -import logging.handlers -import threading -import configparser -from datetime import datetime, timezone -from array import array - -import redis -import requests -import urllib3 - -# Disable urllib3 debug logging to keep application logs clean -urllib3.disable_warnings() -logging.getLogger("urllib3").setLevel(logging.WARNING) - -# Note: RPi.GPIO is imported inside the class or at runtime to prevent errors on non-Pi systems -try: - import RPi.GPIO as GPIO -except ImportError: - GPIO = None - -class ReadParallelaIOB: - def __init__(self, config_path='IOB.cfg'): - self.PROGRAM_NAME = "ReadPar IOB-pi v.3.1.0 (2026)" - self.MAXRETRY = 10 - self.MAX_COUNTER_BLINK = 10 - - # Configuration and State - self.config = configparser - - # Hardware Pins (12 inputs) - self.input_pins = [11, 12, 13, 15, 16, 18, 22, 7, 29, 31, 32, 36] - - # Internal State Arrays - self.i_counters = array('i', [0] * 12) - self.B_blinking = array('B', [0] * 12) - self.B_previous = array('B', [0] * 12) - self.B_input = array('B', [0] * 12) - self.B_output = array('B', [0] * 12) - self.B_inverting = array('B', [0] * 12) - self.B_filter = array('B', [0] * 12) - self.B_filter_prev = array('B', [0] * 12) - self.B_temp = array('B', [0] * 12) - self.i_filter_counters = array('i', [0] * 12) - - # Load configuration after arrays are initialized - self.load_config(config_path) - - # Control Variables - self.cont = 0 - self.onLine = '1' - self.sending = False - self.timer_busy = False - self.to_enable = False - self.to_short = self.TIMEOUTSHORT - self.to_long = self.TIMEOUTLONG - self.to_retry = self.MAXRETRY - - # Redis - self.CodaR = redis.Redis(host='localhost', port=6379, db=0, password='24068Seriate') - self.queue_name = 'IOB' - - # Logging - self.setup_logging() - - def load_config(self, path): - """ - Loads configuration parameters from the specified .cfg file. - Sets up timing, URL, logging, and bit-specific settings (blinking, inversion, filtering). - """ - config = configparser.RawConfigParser() - if not os.path.exists(path): - print(f"Error: Config file {path} not found.") - sys.exit(1) - config.read(path) - - self.idxMacchina = config.get('id', 'idxMacchina') - self.SAMPLETIME = config.getfloat('time', 'SAMPLETIME') - self.TIMEOUTSHORT = config.getfloat('time', 'TIMEOUTSHORT') - self.TIMEOUTLONG = config.getfloat('time', 'TIMEOUTLONG') - self.SENDURLTIME = config.getfloat('time', 'SENDURLTIME') - self.NMAXSEND = config.getint('time', 'NMAXSEND') - - self.URLBASE = config.get('web', 'URLBASE') - self.URLENABLED = config.get('web', 'URLENABLED') - self.URLALIVE = config.get('web', 'URLALIVE') - self.URLADV1 = config.get('web', 'URLADV1') - - self.LOGFILE = config.get('log', 'LOGFILE') - self.LOGLEVEL = config.get('log', 'LOGLEVEL') - - # Load bit settings using loops instead of manual lines - for i in range(12): - self.B_blinking[i] = config.getint('blink', f'bit{i}') - self.MAX_COUNTER_BLINK = config.getint('blink', 'MAX_COUNTER_BLINK') - - for i in range(12): - self.B_inverting[i] = config.getint('invert', f'bit{i}') - self.B_filter[i] = config.getint('filter', f'bit{i}') - self.MAX_COUNTER_FILTER = config.getint('filter', 'MAX_COUNTER_FILTER') - - def setup_logging(self): - """ - Configures the logging system. - """ - logging.basicConfig( - level=logging.DEBUG, - format='%(asctime)s %(name)-8s %(levelname)-8s %(message)s', - datefmt='%Y-%m-%d %H:%M:%S', - filename=self.LOGFILE, - filemode='a' - ) - self.logQue = logging.getLogger('queue') - self.logSnd = logging.getLogger('sendUrl') - self.logPro = logging.getLogger('program') - - def setup_gpio(self): - """ - Initializes the GPIO pins for input. - """ - if GPIO is None: - self.logPro.error("GPIO library not found. Are you on a Raspberry Pi?") - sys.exit(1) - try: - GPIO.setmode(GPIO.BOARD) - GPIO.setwarnings(False) - for pin in self.input_pins: - GPIO.setup(pin, GPIO.IN) - self.logPro.info("GPIO initialized successfully.") - except Exception as e: - self.logPro.error(f"GPIO Setup Error: {e}") - sys.exit(1) - - def rqEnqueue(self, item): - """ - Adds an item to the Redis queue. - """ - self.CodaR.rpush(self.queue_name, item) - - def rqDequeue(self): - """ - Removes and returns an item from the Redis queue. - """ - item = self.CodaR.lpop(self.queue_name) - return item.decode('utf-8') if item else None - - def rqLen(self): - """ - Returns the current length of the Redis queue. - """ - return self.CodaR.llen(self.queue_name) - - def readParallelaFiltrata(self): - """ - Performs the core logic: reads GPIO, applies inversion, filtering, - and blinking, then reconstructs the value as a hex string. - """ - try: - # 1. Efficient GPIO Read - # Using a local reference for speed in loops - gpio_input = GPIO.input - pins = self.input_pins - inverting = self.B_inverting - input_arr = self.B_input - - for i in range(12): - # Read and invert logic immediately if required - raw_val = 0 if gpio_input(pins[i]) else 1 - if inverting[i]: - raw_val = 1 - raw_val - input_arr[i] = raw_val - - # 2. Processing Loop (Filtering & Blinking) - # Pre-caching references to reduce attribute lookups in tight loops - filter_arr = self.B_filter - filter_prev = self.B_filter_prev - filter_counters = self.i_filter_counters - max_filter = self.MAX_COUNTER_FILTER - - blinking = self.B_blinking - previous = self.B_previous - output_arr = self.B_output - blink_counters = self.i_counters - - for i in range(12): - # Debounce / Filter logic - if filter_arr[i]: - curr_in = input_arr[i] - prev_in = filter_prev[i] - - if curr_in != prev_in: - # State change detected - if curr_in == 1: - filter_counters[i] = max_filter if filter_counters[i] == 0 else 0 - self.B_temp[i] = 0 if filter_counters[i] == max_filter else 1 - else: - filter_counters[i] = max_filter if filter_counters[i] == 0 else 0 - self.B_temp[i] = 1 if filter_counters[i] == max_filter else 0 - - filter_prev[i] = curr_in - input_arr[i] = self.B_temp[i] - else: - # No state change, maintain or decrement counter - if filter_counters[i] > 0: - filter_counters[i] -= 1 - self.B_temp[i] = 0 if curr_in == 1 else 1 - else: - self.B_temp[i] = 1 if curr_in == 1 else 0 - - # Update the actual input array with the filtered value - input_arr[i] = self.B_temp[i] - - # Blinking Logic - if blinking[i] == 0: - output_arr[i] = input_arr[i] - else: - if previous[i] != input_arr[i]: - previous[i] = input_arr[i] - if input_arr[i] == 1: - output_arr[i] = 1 - blink_counters[i] = self.MAX_COUNTER_BLINK - else: - if input_arr[i] == 0 and blink_counters[i] > 0: - blink_counters[i] -= 1 - if blink_counters[i] == 0: - output_arr[i] = 0 - - # 3. Optimized Bitwise Reconstruction - new_value = 0 - for i in range(12): - if output_arr[i]: - new_value |= (1 << i) - - return hex(new_value)[2:].upper() - - except Exception as e: - self.logPro.error(f"Error in readParallelaFiltrata: {e}") - return '' - - def accoda(self, value): - try: - dt_eve = datetime.now(timezone.utc).strftime('%Y%m%d%H%M%S%f')[:-3] - self.rqEnqueue(f"{dt_eve}#{value}#{self.cont}") - except Exception as e: - self.logPro.error(f"QUEUE ERROR: {e}") - - def svuotaCoda(self): - if self.timer_busy: - return - - self.timer_busy = True - try: - if self.rqLen() > 0: - # Check connectivity using requests - try: - res_alive = requests.get(self.URLALIVE, timeout=5) - if res_alive.text == 'OK': - res_enabled = requests.get(self.URLENABLED + self.idxMacchina, timeout=5) - if res_enabled.text == 'OK': - if self.onLine == '0': - self.logPro.info("IOB ONLINE!") - self.onLine = '1' - else: - self.onLine = '0' - else: - self.onLine = '0' - except Exception as e: - self.logPro.error(f"Server Connection Error: {e}") - self.onLine = '0' - - if self.onLine == '1' and not self.sending: - self.sending = True - for _ in range(self.NMAXSEND): - if self.rqLen() == 0: - break - - resp = self.rqDequeue() - if not resp: break - - parts = resp.split("#") - dt_eve, val, cnt = parts[0], parts[1], parts[2] - dt_curr = datetime.now(timezone.utc).strftime('%Y%m%d%H%M%S%f')[:-3] - - url = f"{self.URLBASE}{self.idxMacchina}{self.URLADV1}{val}&dtCurr={dt_curr}&dtEve={dt_eve}&cnt={cnt}" - - try: - r = requests.get(url, timeout=5) - self.logSnd.info(f"{val} [{cnt}] R:{r.text}") - except Exception as e: - self.logSnd.error(f"Send Error: {e}") - - self.sending = False - elif self.sending: - if self.to_retry > 0: - self.to_retry -= 1 - self.logPro.info("WAIT active send to complete") - else: - self.sending = False - self.to_retry = self.MAXRETRY - self.logPro.info("END WAIT, reset to_retry") - except Exception as e: - self.logPro.error(f"svuotaCoda Error: {e}") - finally: - self.timer_busy = False - - def run(self): - """ - Starts the main execution loop: - 1. Initializes GPIO. - 2. Spawns a background daemon thread to empty the Redis queue. - 3. Enters a loop to sample GPIO inputs, apply filters/blinking, and queue changes. - """ - self.setup_gpio() - - # Start background thread for queue emptying - def timer_worker(): - while True: - self.svuotaCoda() - time.sleep(self.SENDURLTIME) - - threading.Thread(target=timer_worker, daemon=True).start() - - old_value = '' - - self.logPro.info("-------------------------------") - self.logPro.info(self.PROGRAM_NAME) - self.logPro.info("-------------------------------") - self.logPro.info("Starting main loop") - - while True: - try: - time.sleep(self.SAMPLETIME) - value = self.readParallelaFiltrata() - - if value != '': - if value != old_value: - self.logQue.info(f"{value} [{self.cont}]") - self.accoda(value) - self.cont = (self.cont + 1) % 10000 - - self.to_enable = True - self.to_short = self.TIMEOUTSHORT - self.to_long = self.TIMEOUTLONG - old_value = value - - # Handle Timeouts - if self.to_enable: - self.to_short -= self.SAMPLETIME - if self.to_short <= 0: - self.logQue.info(f">{value} [{self.cont}]") - self.accoda(value) - self.to_short = self.TIMEOUTSHORT - self.to_enable = False - self.to_long = self.TIMEOUTLONG - - self.to_long -= self.SAMPLETIME - if self.to_long <= 0: - self.logQue.info(f">>{value} [{self.cont}]") - self.accoda(value) - self.to_long = self.TIMEOUTLONG - - except KeyboardInterrupt: - self.logPro.info("Keyboard interrupt received. Exiting...") - break - except Exception as e: - self.logPro.error(f"Main loop error: {e}") - -if __name__ == "__main__": - app = ReadParallelaIOB() - app.run() From aeab49bbc767c8ecc296f3b381ca3d879cf58257 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 12 May 2026 18:12:20 +0200 Subject: [PATCH 18/19] Update README x IOB-PI --- IOB-PI/README.md | 17 ++++++++++++++++- IOB-PI/README.pdf | Bin 124512 -> 99412 bytes 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/IOB-PI/README.md b/IOB-PI/README.md index 51b32f2..4be98b8 100644 --- a/IOB-PI/README.md +++ b/IOB-PI/README.md @@ -8,13 +8,28 @@ Se il minion è taggato come iop-pi bast dare state apply, poiché dallo stato t * iob-pi.sls * iob-setup.sls +altrimenti meglio dare +* iob-pi-install +* iob-pi-upgrade -## approfondimenti +va poi controllato il numero di inputs e va specificato all'inizio del file IOB.cfg a seconda che abbia 8 o 12 inputs + + + #numParams=8 + + numParams=12 + + + +## Approfondimenti Valutato python-rq x gestione code con redis tramite esecuzione workers python gestiti in autonomia: + https://python-rq.org/ + https://python-rq.org/docs/workers/ + Testato ma al momento non è rispondente ai requisiti del programma per cui si rischia un blocco inf ase di invio se server non OK, per ora implementata copia "manuale" della coda verso redis per salvaguardare dati accumulati (vers 2.6.x) diff --git a/IOB-PI/README.pdf b/IOB-PI/README.pdf index 1263a218f49d23b047d35e345e0fe09c826e7683..0de3a5518e1d92216aaaaee2f2b76171914beedb 100644 GIT binary patch literal 99412 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≷825eHor$*(KL6V(1y{2RPfF*hB?C^kzE+-xTAa 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%0A;@ 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%0AiPHxaC(? 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 From 0835f942ee5c0ae16c0af325c39c1fa1bc63127a Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 12 May 2026 18:24:18 +0200 Subject: [PATCH 19/19] Minor fix x logging restart --- IOB-PI/readParallela.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/IOB-PI/readParallela.py b/IOB-PI/readParallela.py index 8cf7bc5..1b48912 100644 --- a/IOB-PI/readParallela.py +++ b/IOB-PI/readParallela.py @@ -1,7 +1,7 @@ #!/usr/bin/python # -*- coding: utf-8 -*- -# readParallela v. 3.1.1 12 Ingressi +# readParallela v. 3.1.2 12 Ingressi # - single instance timer # - invio multiplo x send eventi accodati # - gestione segnali BLINKING @@ -18,7 +18,7 @@ # - (2.6.1) Cleanup generale vecchia queue post test vari # - (2.6.2) Fix in global di to_retry in send_coda per evitare problemi # - (3.0.0) Prima versione code-assisted: riformulazione e ottimizzazione globale programma -# - (3.1.1) Ottimizzazione gestione letture GPIO (sempre code-assisted) +# - (3.1.2) Ottimizzazione gestione letture GPIO (sempre code-assisted) import time @@ -47,7 +47,7 @@ except ImportError: class ReadParallelaIOB: def __init__(self, config_path='IOB.cfg'): - self.PROGRAM_NAME = "ReadPar IOB-pi v.3.1.1 (2026)" + self.PROGRAM_NAME = "ReadPar IOB-pi v.3.1.2 (2026)" self.MAXRETRY = 10 self.MAX_COUNTER_BLINK = 10 @@ -375,6 +375,10 @@ class ReadParallelaIOB: 2. Spawns a background daemon thread to empty the Redis queue. 3. Enters a loop to sample GPIO inputs, apply filters/blinking, and queue changes. """ + self.logPro.info("-----------------------------") + self.logPro.info(self.PROGRAM_NAME) + self.logPro.info("-----------------------------") + self.setup_gpio() # Start background thread for queue emptying