From e0e94fc2bd24be639109f717ab5d19b416675ad1 Mon Sep 17 00:00:00 2001 From: nelsonhomo Date: Wed, 30 Oct 2024 10:35:21 +0200 Subject: [PATCH 1/9] SESP-315: Include cd4 semi quantitativo --- .../PATIENTS_IIT_PREVIOUS_PERIOD_WITH_CD4.sql | 271 ++++++++++++------ 1 file changed, 181 insertions(+), 90 deletions(-) diff --git a/api/src/main/resources/TX_RTT/PATIENTS_IIT_PREVIOUS_PERIOD_WITH_CD4.sql b/api/src/main/resources/TX_RTT/PATIENTS_IIT_PREVIOUS_PERIOD_WITH_CD4.sql index b818f2c7ca..a9fd0b6e2a 100644 --- a/api/src/main/resources/TX_RTT/PATIENTS_IIT_PREVIOUS_PERIOD_WITH_CD4.sql +++ b/api/src/main/resources/TX_RTT/PATIENTS_IIT_PREVIOUS_PERIOD_WITH_CD4.sql @@ -152,11 +152,11 @@ from( inner join patient_program pg on p.patient_id = pg.patient_id inner join patient_state ps on pg.patient_program_id = ps.patient_program_id where pg.voided=0 and ps.voided=0 and p.voided=0 and pe.voided = 0 and pg.program_id = 2 - and ps.start_date< :startDate and pg.location_id = :location group by pg.patient_id + and ps.start_date< :startDate and pg.location_id = 3 group by pg.patient_id ) max_estado inner join patient_program pp on pp.patient_id = max_estado.patient_id inner join patient_state ps on ps.patient_program_id = pp.patient_program_id and ps.start_date = max_estado.data_estado - where pp.program_id = 2 and ps.state = 7 and pp.voided = 0 and ps.voided = 0 and pp.location_id = :location + where pp.program_id = 2 and ps.state = 7 and pp.voided = 0 and ps.voided = 0 and pp.location_id = 3 union select p.patient_id, max(o.obs_datetime) data_estado @@ -166,7 +166,7 @@ from( inner join obs o on e.encounter_id=o.encounter_id where e.voided=0 and o.voided=0 and p.voided=0 and pe.voided = 0 and e.encounter_type in (53,6) and o.concept_id in (6272,6273) and o.value_coded = 1709 and - o.obs_datetime< :startDate and e.location_id= :location + o.obs_datetime< :startDate and e.location_id= 3 group by p.patient_id union select ultimaBusca.patient_id, ultimaBusca.data_estado @@ -177,12 +177,12 @@ from( inner join encounter e on p.patient_id=e.patient_id inner join obs o on o.encounter_id=e.encounter_id where e.voided=0 and p.voided=0 and pe.voided = 0 and e.encounter_datetime< :startDate - and e.encounter_type = 21 and e.location_id= :location + and e.encounter_type = 21 and e.location_id= 3 group by p.patient_id ) ultimaBusca inner join encounter e on e.patient_id = ultimaBusca.patient_id inner join obs o on o.encounter_id = e.encounter_id - where e.encounter_type = 21 and o.voided=0 and o.concept_id=2016 and o.value_coded in (1706,23863) and ultimaBusca.data_estado = e.encounter_datetime and e.location_id = :location + where e.encounter_type = 21 and o.voided=0 and o.concept_id=2016 and o.value_coded in (1706,23863) and ultimaBusca.data_estado = e.encounter_datetime and e.location_id = 3 ) allSaida group by patient_id @@ -258,97 +258,188 @@ from( ( select first_cd4.patient_id, first_cd4.data_cd4 data_cd4 from( select p.patient_id, lastCD4.obs_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs lastCD4 on lastCD4.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and lastCD4.voided is false and e.encounter_type = 53 and e.location_id=:location - and lastCD4.concept_id = 1695 and lastCD4.value_numeric <200 and lastCD4.obs_datetime <= :endDate - - union - - select p.patient_id, artStartDate.value_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs cd4ArtStart on cd4ArtStart.encounter_id = e.encounter_id - inner join obs artStartDate on artStartDate.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and cd4ArtStart.voided is false and artStartDate.voided is false and e.encounter_type = 53 and e.location_id=:location - and cd4ArtStart.concept_id = 23896 and cd4ArtStart.value_numeric <200 and artStartDate.concept_id = 1190 and artStartDate.value_datetime <= :endDate - - union - - select p.patient_id, e.encounter_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs cd4 on cd4.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 6 and e.location_id=:location - and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate - - union - - select p.patient_id, e.encounter_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs cd4 on cd4.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 13 and e.location_id=:location - and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate - - union - - select p.patient_id, e.encounter_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs cd4 on cd4.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location - and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs lastCD4 on lastCD4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and lastCD4.voided is false and e.encounter_type = 53 and e.location_id=:location + and lastCD4.concept_id = 1695 and lastCD4.value_numeric <200 and lastCD4.obs_datetime <= :endDate + + union + + Select p.patient_id, o.obs_datetime as data_cd4 From patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on e.encounter_id=o.encounter_id + where p.voided=0 and e.voided=0 and o.voided=0 and concept_id = 165515 and e.encounter_type = 53 and o.value_coded = 165513 + and e.location_id=:location and o.obs_datetime <= :endDate + + union + + select p.patient_id, artStartDate.value_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4ArtStart on cd4ArtStart.encounter_id = e.encounter_id + inner join obs artStartDate on artStartDate.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4ArtStart.voided is false and artStartDate.voided is false and e.encounter_type = 53 and e.location_id=:location + and cd4ArtStart.concept_id = 23896 and cd4ArtStart.value_numeric <200 and artStartDate.concept_id = 1190 and artStartDate.value_datetime <= :endDate + + union + + select p.patient_id, artStartDate.value_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4ArtStart on cd4ArtStart.encounter_id = e.encounter_id + inner join obs artStartDate on artStartDate.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4ArtStart.voided is false and artStartDate.voided is false and e.encounter_type = 53 and e.location_id=:location + and cd4ArtStart.concept_id = 165519 and cd4ArtStart.value_coded=165513 and artStartDate.concept_id = 1190 and artStartDate.value_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 6 and e.location_id=:location + and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 6 and e.location_id=:location + and cd4.concept_id = 165515 and cd4.value_coded=165513 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 13 and e.location_id=:location + and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 13 and e.location_id=:location + and cd4.concept_id = 165515 and cd4.value_coded = 165513 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location + and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location + and cd4.concept_id = 165515 and cd4.value_coded = 165513 and e.encounter_datetime <= :endDate ) first_cd4 ) first_cd4 on coorte_final.patient_id = first_cd4.patient_id and (first_cd4.data_cd4 between date_add(coorte_final.data_restart, interval - 30 day) and date_add(coorte_final.data_restart, interval 28 day)) left join ( select second_cd4_greater.patient_id, second_cd4_greater.data_cd4 data_cd4_greater from( select p.patient_id, lastCD4.obs_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs lastCD4 on lastCD4.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and lastCD4.voided is false and e.encounter_type = 53 and e.location_id=:location - and lastCD4.concept_id = 1695 and lastCD4.value_numeric >= 200 and lastCD4.obs_datetime <= :endDate - - union - - select p.patient_id, artStartDate.value_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs cd4ArtStart on cd4ArtStart.encounter_id = e.encounter_id - inner join obs artStartDate on artStartDate.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and cd4ArtStart.voided is false and artStartDate.voided is false and e.encounter_type = 53 and e.location_id=:location - and cd4ArtStart.concept_id = 23896 and cd4ArtStart.value_numeric >=200 and artStartDate.concept_id = 1190 and artStartDate.value_datetime <= :endDate - - union - - select p.patient_id, e.encounter_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs cd4 on cd4.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 6 and e.location_id=:location - and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate - - union - - select p.patient_id, e.encounter_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs cd4 on cd4.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 13 and e.location_id=:location - and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate - - union - - select p.patient_id, e.encounter_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs cd4 on cd4.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location - and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs lastCD4 on lastCD4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and lastCD4.voided is false and e.encounter_type = 53 and e.location_id=:location + and lastCD4.concept_id = 1695 and lastCD4.value_numeric >= 200 and lastCD4.obs_datetime <= :endDate + + union + + Select p.patient_id, o.obs_datetime as data_cd4 From patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on e.encounter_id=o.encounter_id + where p.voided=0 and e.voided=0 and o.voided=0 and concept_id = 165515 and e.encounter_type = 53 and o.value_coded = 1254 + and e.location_id=:location and o.obs_datetime <= :endDate + + union + + select p.patient_id, artStartDate.value_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4ArtStart on cd4ArtStart.encounter_id = e.encounter_id + inner join obs artStartDate on artStartDate.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4ArtStart.voided is false and artStartDate.voided is false and e.encounter_type = 53 and e.location_id=:location + and cd4ArtStart.concept_id = 23896 and cd4ArtStart.value_numeric >=200 and artStartDate.concept_id = 1190 and artStartDate.value_datetime <= :endDate + + union + + + select p.patient_id, artStartDate.value_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4ArtStart on cd4ArtStart.encounter_id = e.encounter_id + inner join obs artStartDate on artStartDate.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4ArtStart.voided is false and artStartDate.voided is false and e.encounter_type = 53 and e.location_id=:location + and cd4ArtStart.concept_id = 165519 and cd4ArtStart.value_coded=1254 and artStartDate.concept_id = 1190 and artStartDate.value_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 6 and e.location_id=:location + and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 6 and e.location_id=:location + and cd4.concept_id = 165515 and cd4.value_coded=1254 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 13 and e.location_id=:location + and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 13 and e.location_id=:location + and cd4.concept_id = 165515 and cd4.value_coded = 1254 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location + and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location + and cd4.concept_id = 165515 and cd4.value_coded = 1254 and e.encounter_datetime <= :endDate ) second_cd4_greater ) second_cd4_greater on coorte_final.patient_id = second_cd4_greater.patient_id and (second_cd4_greater.data_cd4_greater between date_add(coorte_final.data_restart, interval - 30 day) and date_add(coorte_final.data_restart, interval 28 day)) )coorte_final - where %s + where %s \ No newline at end of file From c2434fd7b5432d9ec2d4ecf5e0c6f40e0dd02e84 Mon Sep 17 00:00:00 2001 From: nelsonhomo Date: Wed, 30 Oct 2024 10:38:27 +0200 Subject: [PATCH 2/9] SESP-315: remove location_id --- .../TX_RTT/PATIENTS_IIT_PREVIOUS_PERIOD_WITH_CD4.sql | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/api/src/main/resources/TX_RTT/PATIENTS_IIT_PREVIOUS_PERIOD_WITH_CD4.sql b/api/src/main/resources/TX_RTT/PATIENTS_IIT_PREVIOUS_PERIOD_WITH_CD4.sql index a9fd0b6e2a..1e5372e21f 100644 --- a/api/src/main/resources/TX_RTT/PATIENTS_IIT_PREVIOUS_PERIOD_WITH_CD4.sql +++ b/api/src/main/resources/TX_RTT/PATIENTS_IIT_PREVIOUS_PERIOD_WITH_CD4.sql @@ -152,11 +152,11 @@ from( inner join patient_program pg on p.patient_id = pg.patient_id inner join patient_state ps on pg.patient_program_id = ps.patient_program_id where pg.voided=0 and ps.voided=0 and p.voided=0 and pe.voided = 0 and pg.program_id = 2 - and ps.start_date< :startDate and pg.location_id = 3 group by pg.patient_id + and ps.start_date< :startDate and pg.location_id =:location group by pg.patient_id ) max_estado inner join patient_program pp on pp.patient_id = max_estado.patient_id inner join patient_state ps on ps.patient_program_id = pp.patient_program_id and ps.start_date = max_estado.data_estado - where pp.program_id = 2 and ps.state = 7 and pp.voided = 0 and ps.voided = 0 and pp.location_id = 3 + where pp.program_id = 2 and ps.state = 7 and pp.voided = 0 and ps.voided = 0 and pp.location_id =:location union select p.patient_id, max(o.obs_datetime) data_estado @@ -166,7 +166,7 @@ from( inner join obs o on e.encounter_id=o.encounter_id where e.voided=0 and o.voided=0 and p.voided=0 and pe.voided = 0 and e.encounter_type in (53,6) and o.concept_id in (6272,6273) and o.value_coded = 1709 and - o.obs_datetime< :startDate and e.location_id= 3 + o.obs_datetime< :startDate and e.location_id=:location group by p.patient_id union select ultimaBusca.patient_id, ultimaBusca.data_estado @@ -177,12 +177,12 @@ from( inner join encounter e on p.patient_id=e.patient_id inner join obs o on o.encounter_id=e.encounter_id where e.voided=0 and p.voided=0 and pe.voided = 0 and e.encounter_datetime< :startDate - and e.encounter_type = 21 and e.location_id= 3 + and e.encounter_type = 21 and e.location_id=:location group by p.patient_id ) ultimaBusca inner join encounter e on e.patient_id = ultimaBusca.patient_id inner join obs o on o.encounter_id = e.encounter_id - where e.encounter_type = 21 and o.voided=0 and o.concept_id=2016 and o.value_coded in (1706,23863) and ultimaBusca.data_estado = e.encounter_datetime and e.location_id = 3 + where e.encounter_type = 21 and o.voided=0 and o.concept_id=2016 and o.value_coded in (1706,23863) and ultimaBusca.data_estado = e.encounter_datetime and e.location_id =:location ) allSaida group by patient_id From 7a46755db09d9b6f0f3b9fec1553f1ad698dc7cd Mon Sep 17 00:00:00 2001 From: emaposse Date: Tue, 19 Nov 2024 08:37:49 +0200 Subject: [PATCH 3/9] SESP-315:Bug Fix Tx_new. --- .../reporting/reports/SetupMERQuarterly.java | 8 ++-- .../resources/PEPFAR_MER_2.7_Quarterly.xls | Bin 82432 -> 0 bytes .../resources/PEPFAR_MER_2.8_Quarterly.xls | Bin 0 -> 112128 bytes .../PATIENTS_WITH_CD4_LESS_THAN_200.sql | 36 +++++++++--------- 4 files changed, 22 insertions(+), 22 deletions(-) delete mode 100644 api/src/main/resources/PEPFAR_MER_2.7_Quarterly.xls create mode 100644 api/src/main/resources/PEPFAR_MER_2.8_Quarterly.xls diff --git a/api/src/main/java/org/openmrs/module/eptsreports/reporting/reports/SetupMERQuarterly.java b/api/src/main/java/org/openmrs/module/eptsreports/reporting/reports/SetupMERQuarterly.java index 5b2f307b7e..a6b9626110 100644 --- a/api/src/main/java/org/openmrs/module/eptsreports/reporting/reports/SetupMERQuarterly.java +++ b/api/src/main/java/org/openmrs/module/eptsreports/reporting/reports/SetupMERQuarterly.java @@ -82,12 +82,12 @@ public String getExcelDesignUuid() { @Override public String getName() { - return "PEPFAR MER 2.7 Quarterly"; + return "PEPFAR MER 2.8 Quarterly"; } @Override public String getDescription() { - return "PEPFAR MER 2.7 Quarterly"; + return "PEPFAR MER 2.8 Quarterly"; } @Override @@ -149,8 +149,8 @@ public List constructReportDesigns(final ReportDefinition reportDe reportDesign = this.createXlsReportDesign( reportDefinition, - "PEPFAR_MER_2.7_Quarterly.xls", - "PEPFAR MER 2.7 Quarterly", + "PEPFAR_MER_2.8_Quarterly.xls", + "PEPFAR MER 2.8 Quarterly", this.getExcelDesignUuid(), null); final Properties props = new Properties(); diff --git a/api/src/main/resources/PEPFAR_MER_2.7_Quarterly.xls b/api/src/main/resources/PEPFAR_MER_2.7_Quarterly.xls deleted file mode 100644 index b031d14491bfe8f137e3b196ff644624292980e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82432 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 diff --git a/api/src/main/resources/PEPFAR_MER_2.8_Quarterly.xls b/api/src/main/resources/PEPFAR_MER_2.8_Quarterly.xls new file mode 100644 index 0000000000000000000000000000000000000000..892884b33f36523fd6224e9483da3e4e3025e8e3 GIT binary patch literal 112128 zcmeF42Y_8wo&V39c{7>x-rLJeGU;`akU+|$LP#$YN+2OUp_7E(CNwD_2q+pv0ee@# zj>cd`#j>s_Dz50NYhTx0ch_Cl`G3FX-1Gb0d*8Y5y-8yEEAM7<-skk+>G!nvwXgPk z>G3B9{h&}+W%xN}|2IqLnQHULwvMLOvHhPmzUjG#G0)?B4u5}aYipzS3;6ps{(vuk z{y#~9j&;b$+8Xn8*DrT?rZs13k>NiuRp$NqXYjuW-Gp4X7=OR zX$pVJ&q5oAtvSZw7z)|k+yIodDwN8+sX?jifEaZ&olIxb#SFAD?PdS(ZU29tb@y@m z|6J1xei+kw`LCwTf;*Pk|Hw64d-vM^>+S#D@PE#H*t+?S)tPDrnP*|Y?dDgqm?J7R zxdmpQ*^6Yj*i1FU%!_Jj?l2v4i>%3Bv(4H%SvF#E$Oz>FHXa{mVrAH%A9bd@4J&C$ zKg!!E7fRdBrEL7h%90(*AQQ6@$P;H;E`-u)K|ktDb{vM;I8t98H*xuo*4t(q{(?O8J3@mPGU%wvrT3lI$3 zyHx1T+{IxT8jEE{WMG;!VVUNe`2o3hoAKzlZ6YS+ zN(WmkT{=LOF&xxnl-j-~cOFWo=7E;lq`oUJv&{euIf71-n4=rya+|V)`W= zsz}4~OAvCQl=D(CP>)_hU%}7s+6q>6{~aq(KWFuO81o z>*tVZ`f=$w92zzqFf42?G#5<1pH2Uv8T!Tc2Uz>X`m;0q8D3Jq*q_N6{?E+tXMBeJ zCaXWj%k>R&0puNoH--#umBa+(xet|6kMjHPCnIJjCmx-LU03%HLsLU+g>oM|*uqpK&&x z;?Fk>YDIHDFV|piKjl9Pl8dLaFX=E4U1MePx^N5LpOpUt(W8g_8I@rl5peNI`P1L) z7sYdY(EqXC{;PKFa{1`Wd2zjP^<^O5v_tVk0tVw#1O1#qX<>xz$CU?uwe3}%)Ai}k zIi?)CA2TZ|S5f{teZ0M=^gDR_*Z6Yy(N64N>e#i@pBs|;5}#Qx#<0MLo788dTs%8k z{}KOL_+mdP{ghmtV8@0l@p*C}<5R5PwI}sE7R7UX*RXx3@8Scw#DAyX*@v4-AE#fO zZpHDL+}Xv4@u&S{`V`wgIy4;5cXy{gQ!tqh!(;v5-qFX&Ra|ao3<{^G(=WE~@~b%h z@qCP@o6|3jztd;*LiMz()i3ZxHu|{uceDENKULnGesOv0?(Ivtb@f8RO_jH#J_C2* zVg%^onW~S){y$aA^eonQ`O>o}J`d+P>QBP|n10mHdjG@z#Nrv*_w9_NTcX{QdNe0lkBZAxR=eur-@7P1r}klbO1)0y zm$N?(?Le;QX@=tm*PaynlWu2v^lY``4d=hsYp)+~ADI4LKi>Yt^Tp{qe;6O%UpRmI z`0^(DE}({EAlJtzt6|CeXpO6zt5MrKj;_EMuOXqtM8f)-hMp(jHlO+`$M_BzDpnV z$LFuB7o8ARvY$HKgXvjpe^M9f7u$FG#p4ZEu8P}RXTNVzxLN)W?4aSs^Tp}Ac*gae zKTN_LtMmYV<0qY-J{_Dt#r>W0$Mrk#w;Pi2kHs^R z*ZI>)+xdk5#rm#17niFneHR~T&olGOr>ASrRo))CR@<)?=|}BtTHoh;TAy7g+w-)( z4>zm7aQ2Jy@uQt?sOw{HkoJ-3{Asgq^s@0c)-5nMCiL0sa#gSo{-4&wwD6y%>WLi@^lI@5IJ3}86gI5Lpw8InjVBVAGR)k_w zfjDfgyeB(%9j7OJNA#XdYhugdKkX2QFSy>5*r*h`?eK(+qW9#v6``0^kR}6To*28B z3=R8fM@-ODAtrSwomKeO)|zW`UN~{6_dhop(aR`ooU~AJ_^RwbJ|-22!v@%UGOda2 zvj2EbJX6hx38%rlC)i66bI}e@IG5u+d2U50CKZUo2@LPa&RxgpNg?J5R{TN!(++V) zz>SZ|b1U-R2dLhY3dF(4NIcoO>o`5(WS)-+-e3YTiD_kJF=rf|C$_}?;t?sG6o-0` z>?~ViM~NqFsE;!yjpB)o$>+aP91~M3dKo2lw0Kf&cJ8XMDQHRcJ7eHU9!&uIon*qY zW~cQ^Wc&RokH^Bh4ruvZ!p@&RU&QGY&|?Ic6mfgLX^HExgQUIR{`R-xpU=Fwy^JIq z52wBu?c5cr|7xSp3RuID9->v_rA+MW~tA}P{II}s7k zq`mp(o5g{TKwQs9Ag<>l5Z99kJajOr^>sM5;>K1r{9t$&g|)%>Q&! zgbGLn{m~ReN}Gt!{cCZ>#NMcMQl!UnQ>`bi{K)loAFM)(wVJjE>gvq{u_1IWXWDAb zD(t1)XLnUzY+XHAHQe+-OOTt1EheK(0h==lW`Ws`XQ#Q;956HC$&{o=`RQ$4p`T@+ z{?gl?^mcltwPJ6Z;BB^j?`^MAv7Hf!?UWL+Wffv`~*`=`^8F-)i7 z#8eupumeh^VJKGPOQfO3YG686^eP>zv8h;j=Yz4h*V*J&U|21n<(7ZFC7C*^Ri$Hl$RJP78QDvP6!uJ99ZY zG@W*gVLI(brP5AgHLR4dp;$GP5Z1?PxEW4wvr2i$+j@ALZQl!9NDE7^(!!2N39GRh zQA*gUfh-taLRbzcN%hBlg)n z=ta(RL*P7V#|t%zLS=O!A)yKoD%-yEwzFwO@0weP*zABXL-0of_sQi3w^bWwMjiH0 zqe~@isKFUmB58e#(H(oQeTpCLVVq^;bLXtTnS@uh+!^qPS;!`LH-;n3i80AAt9#?1P_aGd&0sT` zZMHiZu^mZyF}ynf?=FLf#cg&!wAo?1&bzMYej)$qaDJIBSSk5)gCM^*^@2R`Yj@OtTd(#);EQcROqHqX?zUce zbLT8?PHF9cSPjJzOc#?o3+cBH#lV*>O~Fa26ztsA#bnv`Ue9jr2(SBNb8(>9viC@* zU(Z1L`5q*1PHU}(cLU8Ftp6d`_dv+)7<9x39OF{4?BCW2`CM$%#c;TpTdJWAwFqNM zG_<~4=FPm;8pJej=C{_hZLjNRw#Qmp&cD0QLpbU6P|W0xjaB9l^bW=JX!CI0+4zeb zL3t(qdg9rD%-Ux2dOh;|TKjD!5`|5}m3WDnX4c@_RkmSL8ytV_Mv@%B8W;*2&Xe(# zmG4Py?p@WsFX21X=ct1(t+WvR*9x_jfG@|69fQ(pj$oSQNE6*WXP$%oU3l7{Z+3z0 z91z~P_|R|bpY_4|0SyGyX5Bpp_ib%Q%n@+g5x9lFZOo=PWG=|@W&CzbxQ&EsOnK!tV2QhcW_bw; z@$IIc>HaU&?_l+}pvbh~Jiw1*G&wjBMA#q?aj7qe)HV z*GlN$ZswUUolD)pF|GBjnE+g#jY79+3rBbRr>hXLk>UG$+Y zw+2;o2}0Zwi~sMgaIsOdMK+#;%nxs*Nk_O^2_5Qgf$L@P`*sZ8t8XthJ;R#cj?qBt zA({@2;_PHEAZ~0_IjSkdVpsrQin7OMcb!>^P?jNnw_``;Wk={sPl2$|W7yKPEd8F}1^GvP|f5zN9y~?~dmuIV$?~k<`+Rft`fbj7d$~AenR*++G zd||&Bky?o4-ivPsZ1=haI!hzo36T~<2o6iO;g2UOvBk(Op#0kW!3-_@1alJSVAiFF z$uaAA@^T;SyVi0GvV?xHBi(^5PdV2CGpIc_n5~EegJuhSE!(igcw63pc&s#R!{}-! zILET-^Y&C2t+KUwoAtZ^YrCMw0RVgM1Bj-k{C0%I5OyFMoS!J*Z>PB$I_wUqvk&h1 zZpK!Ee$fu|jY7~3^Yt>c86=*mEI^0NC+TwQ%NRtOC1GrG7>5>q5t45@T+G2AUni!Z z+3#2l$(;7idauocP@Jf*fr^nx3&Ot$f0rSqjE{4G5%5AACFaBd2))xr+NE_jlUoj? zRBPalqp0{O#-^>yNqXnoe-x7Su(=K1`Ozna>FeRqH5d~uKsDQmBcv#&JFTBgr2^u# z2UI|cTxu?a&UUyi*c84J4w(955QnpDjT(!0uN<3Tis2pZLDF4iy<&;F#+tAQ?7_E7 zBD-Ty2G-+mEQ)V#DKvSo*M+Z+SlIZEy)O!NDV*?F(71Gz8Px(3g=KL+BJVTVWx3DL z0z|nOrVM~4R1e^BDZC#!1W{ZpF!GK^3ge6!aL~I@Ftb?-rXs5+qC1)HV1@;2!eTHH zg~6Ik!)ZT)HEFUYP0pmrnlw2R&T&nIzI8L*noM^lGpxxBXEMW@%y1@r_nC<9Y&v5- z58e7qn4)N13EAUCi%scHOb_PfAi6f@PK@b1(AIz?VC83(b`8N!ya&2DzXmvC>!$iB zV+}U_w!?`ZJ~wbY(EwYMBAa`WlfG&d1w~!dy{U zdy&;nvMDIdE-ajXER_K)8_toI5<0FZ#Qkv0ewk@G#a1Rp(^ib^(#XD&9mY;uSDk8IpyNOzk(O7BHbZ57s4&9nQ0qj+VfrG@Qp$Qkhv;|9Wsc9;Yhx{_ zs~Z)DTwFisFwkVAlPOt8Ds+^rCv+rT#p%Ueh1aUMs|Y(tRvA`KDFtB%K2ej^g$|`v z3_FaMcVAU12ruqTt4T%SX*u^*q@wWDnN|-vlzb1%rzPB1jS3>Ej1yV2VC|vgG zSh|W*Ar=pnDhxMV2PzI%3$(8X6^E-%wJy+cpphs}tn|>S!U%`zM8#qHA|C82vNOl$ zY?-bi+k@iz!6*lsjC3+3>qv!;lJ$g+q^oF=uA-msA-z_ztDqm8f7pk26V|jc*7;KD zUP0WrRH}a1_hh9^RQ<4nWQC*yDPv&=KFdmUL}7>V+7#@F$~(*Gh_W1NE%Ftx0{QsX z?q7AZ^3kD`s&IH(e}WxRIY${CQI@lGg<}MzDJ|znOG)6JCG5DkqA|oWr7>B_DsYgj zV03_K8aLk5Xr-%iyhgE3R^TLFs}glTI}}Z`qV6u+QL=V1q(B~}v7C6nHbr z_Mo^HGUPzRluo8(O{~ySvNqBYW^r9@T!7iNMbNO5bDXqTg$Xl1JKMlzNN11QZpJmG z>E={ZnrkrOy$rsd<>%)8`p}8a&U5vBA09Vn=4R5Z1vs3DH|)4$TCc?U2<~5@)qRn3idD)Z zPN{RYIvxw`R^dGD41+IJ#)qbK-L$>U*+t0kMX|Zn-pp>NS$eROX))d)v)RX$Nnszg z;`m9~OsmPpS2~kWJi|?{bXXxLS;HCI`;>E_&1;!3iW}9Ea)g^wI|IE7LlZGSeF}mr(wrL7 zoEFk-3TaLcY0d~~&P-}fLw8;jC8wE+lG98@$!Vsd?F;XUBoP{g%m`b%GQQQO5t$9-2L92{GcbC(TM zT-WG*UWQ^xN!UkmP<|!S+pp^vY&mdV`!qUW{nfpa2M{o&NXx#;G4Hx&B=~l)@#G@N3rE(N3r~?$?-?lb}sAiCgNI>1=z*00u4+| zd!lUYh~AN%ZPiY`tR#n69P8N^>(Y*r11&nTGd!go`A)oe4%PPkr5(q|PaLxQy&n~X z8+WQhFGjkeaCI!@XLu@A7I6wIJB zpb=n05U<*458{R2*PC{PA9t>GhaOZMesTS2SNQ7Oh3{WwGAe#reyt9^9R9U% zomU*TuNLta9n4)-l5xJZ48QVJ7=z+^#pqX9Xp?oT9S)QAiw+arlV8_NRdBD}uI?%9 zC|TXuDkRb??8qm0neHjrT7EFRnlBkUw09=s`vWEKb1CLSBW5 z7phC`3Oik&=s3|mWoMkv`3kzHY)^{o6=RUm6r__bS-0BZFj>FoFws5vb;xM8)DN+| zcCve-U-5k{b}F*8llTO9QHu}`MVl?Z{F7*V!j6)anjt01WZ03<)-s)7*m1lzW_E(* zotEeXvm6&!;tJ&rSKy*HHyp0kzsydsoWl~GV3yN#rDbFj&1E@rJUlbm2MW|HIj9^LTB+>S=5$jf}}&!wDb#9iPkIIVX}5I#Ed)) zg;>EGVX2TS=yEG_t~HecBzmn<9u(KscE}&DvGgFLc`Hu9vR!U=Do)j zi7vNP*xs?0I^9Q8q4dSIm@%lZ&?akgI~*o!Gacewt-b~Gp!7u9N}8y#aih{*Z-vg{ z6`jpWLiFs=G|7DzT%p5cMQ4bKie5Uz;)+fW5*01mgRJhj!tmqHwW7Bx{Njq<4*A0s zogO5Ldba#pSL5Atg^8z*wW7BxY+qOX)DImeDtf7id&gSpw5zUA`r?Yt7*tqjlNG%k z4wDs~4il3YNtx3vbGqwphtqhiX7f@akOxz!>?(L3Dag}d(Jk$#p4?p8uqTNa-iq>9V_1h_kdZ5*x zUbHI?z83o?fF3kdp0g~NEFR%k>~_SYxG7*v+EL1r%|SaICz}L1PP}fXHput^eqw`+ z*Gz1X@tS^vOrl{=ugbgq5nL!)f@=-dW3Mp^< zO}^aWF(c*CxOfg{d2~9KZI;;kIhNQ3oYnUKC1x$IhT)nnZyQL)?~p;w=FJ`cE*Rbn zu^5d3Z??F^Zj#_81deUT;!33Oy&mpvjqnB&e`&;4xaDm#etUbd_f~wy))w>k4RdV^=_%d-4L>v%=c5L)yIYB;d)^u#~J2LEAwoc}Yjmc2G)Q;?=+l zi5k%EOhS`16}iJcmAQQ}*xld~^e~tZQ*j?y&~`8(c)?4+_Ox(9ObaK(G&IvePl5@- zYh;49gV{aJZow?d?rC8uc{xqMZ(ddt)D9NvCM#txpCwCES+W$>*57T>fa}7doLh|A z>$;rv$iJnw2V0C5cNH#AjINb&RfOH?5@@bMU1RSUZ7}tQ?k1w>2&mKaU9~+G>a=`E z9nu~`R5h(VxH0(7BITy)B9Rkjxx z@|JNw;tO1;=#EI*uAWt&qr??*8|xc)!rBBN-yF+k8oM$vHNfS`+vqT$8@0T*sG5H!dr8g4{j z&vRyFTXIxj2iHlf+Oyjwx1^!(;R8m#rwhtoY6#BY}by-?_*r8o`S1Tx1lDV8wSXGKxm9;?qU2;yZ(k zq7kh4bfMW+vf|TfX2qvrM#ZO5M#Xntx|=HSvk38yeR?8dZb(?vInq+Fb)Z48b#MlO zBH#=Houe}d6ai-ts3XoGPz0Popzu3`KoM{Tfx=INVC&!v0!6?XWJn%t9h{2{$=wt{ zs&+dUlsq*opn(>%%wd6ZpOHYp*1@^RNT6WrKo`N*!5L&EP_T7yE;14**g7~D8AT)5 zIye^@MI+cc&_%Fya0VGgBiK67g=SmH)`32{$aOyGyVgSS$jRWLeI^>{JB5wli*fC zw>vie^MY(&{7rMZ^P`d<7Ib@YC!+o0^=JI0Iqt>a&JUWf1>1vdtK1E74PxLz=EhUT zouRUob9Q+*p1(=%4D4yx2z|zW7j(II!u@zLeK@}T9`=Woeb8)9uSMi`a$BWtn&2Bzn@WxWqlt!gL&Q(emI6 z)N#Z`J<&o%Z%UTSbh>EC@CB>g;;0u|xadjA!kvysvVgVQd9skvd9;Z+T*$PqE7{`t zUN73p9`=iEZbRvo(|3_217k_%jsEtQ;jCiq^y3???cvNU>!r4Dx3W`qBJtOyH)L+V z%<7Waf4J?H>_Gk1qi+A6D-+zX=x#q{&%xi)ooKfS`VEtGH_>*Qx^2>Rn*}=n;ATa) zeUqIoZS(3{cV7{IWp|%#L5{zJ#S6&>c<7D@t+U_U!6kdzgo6VYFLw0MS_Ngd71>3> z?sD<5aB0ZykYhA#ZRFtx7eO`B-E1W-a2Q+C0^f8>THvs@qy@hDl(fKMZb=Iq=$Ev> zVQ)zb9Qa42J(N&vkkThcO8Dnqs7hKWlQV8pT}dCxB)r>eQ__br3Gdd|O8QVH;oX~- zy;CS$05x5gqCoq;HoBFi*okW*c+&#k5mw_(pSMPHyt@SXXRmT8?TF{MPsiv{9oh4& zr5*8j2Y>W^9YWmzl?PBJ+U9CKj)1HHtw-qgiuKYSX;W{v#Fe(pQ=MnPU;7gWrLDSV zzXCsf<6nVQw#V!ODoE7gjv(r8(={oceWkjC8`&MKM7pvo*n$*ahEsH<-qLoVCFIU> zzTxXDs=dxv6Y!ndw% z_V8!%Ax?HA?x*MZCUm?V0pFZ*d`fnlN8?NHt8+ZZe5q%SzcKC#j`JaTU^(rNJxg9H z66@O=iFo*QTsr)>CQCe9n`N0L-j&?=yn!3&xHtZIP2iA$zi3o>9bk5I9^ztKQb@_c z6vN=mLuGg2>n;2|Z_GNu^C&!&%K;7NCALF1S?jKb4c23x^w6U0B&@9NO)~S+b%=p7 z0F0@WQsdmjJ!(+ zf1=2x$H@^6wb@tlP6*r`)!Borz|c~wdD5t;qPv2dtmsZJP|>|*r@D!qiYt1^ap^i% zRL9d^tZ7dj4>>L!el$a(ZB^O}m#f*0T{J&X-hSstUNxO)vw0qI9YLA z7qJ~Re=q9g4%;!XEl8em^S!Umgz5|--?Q~tm1{|ML5J5rxDYtVb`yc@pLtq~?GRhA zrTEUDedEtr@J5m2?O#`)?B7b@MG5Kq98To-CN`ez2)gL8BX_+w8?R(Pej?GubVLh^ zhTcZcpUX@Bpa^bLa5tr`K{xLDuJ~ODb}Y)fP}JBr0*t!$_tEc`CaormdfI_~cS$;E zL6KjMF~nI=qg&iq8zy1!vkor?JT=ZtCkBTJT-3Tb4odlPeL+GKP6r^%(z3Hy`+Q{gsGE_4AW16 zR}iK;)LBY~X>Z;uC8tg+GDJV+T{f!fOlKo24A0-3`P`^vh=hp=T-ex#hg{G$Wgq`(NQoF(jjT;`5VtZ{?R>xW&={#7Ki!+IR z8pi^@PF5W4P`zwNxW1D4x=E+@MYLR2`J4`4h*pu*#dVaSS5!Qc^_0#ks6olPN=KL_ z_1iA^>c+)uPP#BNE&_3qfs+_quQ&@6CWu<))+b|pz}d91Ec)x<8(#%kh3TiC$MG$(!;5Z_&S zDcCxE+Yezef3nC9NZr!=Xd6q$jvJDg64d7^K?T!oF1ae2ZsVYx_up`GYzanNvUFN% zx{WiXyoqWFoO;KcwY06fPf=YQh|kom!f1(ef$K4DqLb)7rc`Jxu*msRH#5la=plc5 zn)9?7^X&03b;`BDw3%_{o94~44YJReGqxIYUk78l-fhg39>#2V9Dm?Xf617~dK%1C z8Pl;22DLrR(_O#Z;hEN)sjW4pb5$RhxKACFQE>CZ58#ifGCBBMg;LSoe(#C@4fZzF znLoVa-@d+b+nV`Xto}HwKi>X-i`8j`9se0smB-gMa}XxaN=D*PIzC6d)8RgciUMP-uF=tHyp_}Vl3JhiQjml9<4zzZvLYYS#qnD z;5PezBP3|DpP$Vi9s528-*27x!YvbD_|5#WvG0#_ks2wLv(GJNLT*CNyZ36&JW|() zKc6zC)E2~|&fI8ow#pprdC1ga%Lus|p>(TL=7s(TyC}0QJ=jtCLToIF+rP+s+^mba z|AhI3ITEvf)S!il%uQ7{8%Y=Ci}1a!3MB}ii;$!IH0Qcoy`0tSKt=ReS}rpGM=jB- zwt9mT_EJBSnol zYQBO0^Ps<_=R(N!qLqC$q+atkB^&dJ^09?tep9|Go2ymG(M`xpm&aB3_Hk^cVjeGq zjT+GLKlM=v4e*WS(fK(N>hV7dB0m>GB9`Z)=1jzM(Midz9g*KV(RQ#Fv(#6i7k&o6 zF3gaadb>e<_C}@`qCaCTI*R)qSvOqTZo+rEu10!p!UZYLuWF>{Cu}Qq)HK7a7IeIi zOWSI6gmM2znoq|39|bzz$E9;MNj|mSLazEYWnCM~bh+Ru;y%9#jj;etJi4`oK;v>t-a} z^ey3HCFF02T#YoxVj+zJWk1s*H@tpVL*i6R_Ol6j;bdAQAvGd?i%W##Vz54Pw*fX? zXw%@XrL4OfkOlR3I)eHObpj0# z>I@nv)CDw1s4Hl&P&d#Jq3)oeLOnpkgnEL83-tmOgnDBl+t%>t=Jvq37+sUVf;G>}R(2c#0s1*t^yKq}FE zkV@1HQi&EMa*M65%dJJQH9|`1Vo<%%5|GNh6r^&W4pO<#0IA%|Kq~i{AeDPLNabDu zQn^=xRPI$Em3uWv+wpp~0ZJLPJ3Fgoc9V3k?G`3k?S?5GsHc3XK3Q0y$CZ zvqbH4Y(z}d26(<$ych{DmI#dkEfs16oh~#QbcWCv&@!R1@bgTeaWGphG#<17WflGe9juGeH}L zP63@IGz;I)7Mcw@N9a`0xk9IbHVMrEohLLGbiU9$&}O0epe;hppbJ1w)CF0hHXUn@ ziMkN^u~ocS1TVG;Ee35DS_0Z3v=p>c=ycF7p))|cg_eQ#2%U-W_6jYB*@Z$YKo<$E z1YIn&3UrAO*Lp7%;vUS)gw}#C7g`6p0^|~9eO96@I<_vBDEv8%ed0w6Xur@#&;cRl z_mx6tgRT-f2XwX2xu9!=Hi51cIuCT6(D|V2g*Jn35ZVH|QRo8DO+s5iHw$e8wF+$q z9R#^#*pZbC8;)&{CBsfQx<$O$Wj=s;MqlT4gKiVr1G-&kFX#@?x6oMb!yw_1>5+TM zoR_;PwPL-0@?iihejJXD9{p<2L0bp#%&^)_8ut{Nl|MW|l|QgRl}Ej)awVVY z3_Mh4;-Pv99;&nOP@Rp3>Zy3Bo`#3&96VI#;-NYZ57qg2s5axFy1Unsmo{xtr2ar^^;Guc}9;#dM zP~C=y>UKO-ci4JYi_T%Etq)v~W4+johw2_YRQKXxz2PK3Yc;2i-k-xd627snu=By-OIzM;YmT9@T=P|$A4jE^ww^SvfX$w}LLdIY z*s{xL5TCJ;={OAM?zH*U3*n9j=`$s=GZlJwiJfUN8y`Z?%ra4hp7}%OZm}~vVP{@s zXFmE#mZszq&y(mi=m(d0HbfKuji4IaAF@x(diq4}`oe~rj;FhRnfARuE@i5bGH1sY zN=Acpp=1oGJL2kMHWtLbz|lDK;V7?qA-wS*eO#JVV}uj8Gc9K0!%>=5Bh9>>KJaID z!p?GAZqBtO#FtIBm1(9R%^aaclX zP&%H9O^0>`4HC0%Ae|2F4jLk6JwQW+dV+L1v=?Z&nDqt~g!*74sFS~aVKzd{`his1 z{vefh07#`B2vTVWfmGVTAeD9qNTnSL(#hXpAeDAFNTn@+RN4_Bm9`$F(l&rp+L0iY zc2p!S7b|OQEp}!4BPh)-{l}Y+ntLP#CV&nJO$6O5G$~C{m5JPnfKP=?uX8rIfP+V$z=J>%*|`+~wi!J|RwDzfy?rO7{zK`uYJO zPG4gz7Wu;I>sJYN0=-&@)7K9Par*i-LY%&Stq`ZLj|g%4nr|U4o}9jZoe-z59}(j8 z_3MRtgWdpgGdz7T1(Wewz@duiq}j>Fak0ar*k5LY%&Smry;3bM-EX8bI$6;w<%hK`t3M zOP%~g${BX z<;*yJ{b3i^E*CRJ3H!U}$`tIYM z0Iaj!OwLZB_37g$0Pn6^i=iV2zoV?mS1s~5OcYU_ilGwKS(wP-6dm=cQlBdIIcYZ@ z6HZho!JH}&zEGV3dsJs*f{5xI*k}22pYTK=2L!ZB_3vpSkn)Bm0y*Ksi9o8H2&Br1 zK&qSwD zojA>R^7m>RI|xnhi{52FKe79w{dew*cAuZxebN4Va$j_n-51^YLl@xROY^;YBKx9s za;F-T9r4MaJ2C8xPZk|Aht0u0YX3eAUE=mJbjclwCXbSnL!7(tlS3x=e^#_(xoxuV zIjvVk8@W7O8JXbWy4#g7yAy-_u86A(;VzI))!hx! zsk(bWI#qWFuLEBaclUyx6FLm~vX%d*kcblht+qp6F1APU{oPyu)cxJ>il*D@p;wD{ zw(LjucfTu|5*!IPeM`7_7xGs3cgI5-RnnF2?~aEwy`-D1sIM$1+yJmPlF9Aw=E7^K zNB4L8(8j=*mXe_{m9}ER)P=YUWdfON{Q4y03l9YH$f*9oLkew{%&<<|wIQ+{1R zI_1|5q*H#~K|1Bv1Ef=aJwZC<*9%mL>MA#S?2@*DyUODd^#!R!{Xi;Fe~?Nv0HhKP z1gS)WKq}E-kV-TJq!JAUsYJs-D$#I|O2kvLD$xj#N>mSGYv*^BZ?z?XyUOFTjRL7` zjUbh6G)QF|15(+>f>gF~AeC)ANM)M;*geKDvWdFsq~qFJZfmx5I8(?Kft86cH=8A#} zcY{>!Js_2vml3Gk7lKsoi$E&(#UPdY5|GNx`vz5RUSz0pUk*~auK=ms`#>u9evrz2 z0HktX2~xSQ0%hd@Kq~FcAeFWiq|zP) zskFC%RN7lXD(!6`mG*X!N_z)LrF{j6(jGLRoh)K%zoP&c77K;4CS7NLg_ z&m!~`;#q`VLOhGmTWBQ+lhu)Mt3Z8)R)hKptpW8H;#q_NLOhEw5ajZ|9cK{+i5D&K zg8TGbDsKc05jqPrRETF0h6(X3!f+v;MJNbu0*w$l4^%I7KBz%xGiam`&mxQxx&YKD z#Ip#ag?JWWj1bQvj0L%5sQ4^Gvl%B|?1C5Lg?57`2<-t)6xs`#By=HYvd~4KDMA;6 zrV3qxvN28QQkXRfT?U#ibUA2-&=sJWLi<3c2<->W5;_2yEp#R5RFF%QtFjJg>^gR3 zY~A{5I66(dxCS&w=vvTRq3b~Ngsun87rFt|EOaAifzVB$g+e!j774Y277HB&EfKl} zv{dL;(CI?AfzA-R9kfj74$zq(mkh7SN`|YC-4RQMJ8?i}xp;9GXob+-pp`=RfK~|| z!ovP)p?g7Vgbst&g1Ce|4+G0Xs1*NWK9~Di?mM{^9VX-|Kf_|ruJpH4o7h2)r%M;V zbUmo%O_((06n4E;(`Q$9Vqu8pTo9tlg&;0jht9H4e;4e#W#`Jzw9x)8oLZuKwcT~g zK`TGurEMp z)r;^@H$1duf#+3Dm+xL#zXZQJXEj6 zL-jg5RIkTF^#(jtZ^T3OCOlMc#zVCg57mQssNRBy>aBRF-iC+j?Rco(frsiV@GxEO z#6$HiJXG(-L-ig!R1e{ydM_TThw*T01sAqCOyxq#%UdZb*-F8w5?*_EA4WWXs;v|+ zUwg;iu-qqo?VWDdsK&;i_;!s(Y=An_Ma{=x>sfre#{^6n#qF=bQcc|cIxHr|?em0R z+&<-Ty#ji@1A2W@dVG80XSMy`QR(wYkC=5x znWNaN%&YbuIqA;?`$lK51@Vn$y@WIgbh4j~km3WJ3Wz2qPrfXVob)&|4H)n6g?W!4 zN8B4RN7ApiBkiL&Wy{SVuRq~OPe8riY(TPc3bzV1`1Ll&s<4Ui^|9>{W25lKN2U{^ zEf6eYRW^4uu9L8Z8k=Jw7vnk^bfVAdDAYCBa;oUAJ6PES@nZd#DyF7(mZjJ{E53`nkhCj-yrv=Eob656;g?*tYH$+N+TRZ!Yt=GicoS`R15J&1GD@88yv?w+5Tv zRid>Zm1rGEC0Y+si8g>#q81Q0r?4beqh9b-MmJjr+){(jF}|g>$RZ3kBR^`+ic*l9 zGafZ(3v~ebMVLG`M7GExOdchsMHXT5NW~UegvnzGq(v5C@+i$MvIvuhG%d0SlSd3& zWDzD0Xi@%AxUa^lvJxU~He()LeC zJ0KzLK)7T7$UMp;#&Kx}gZhiv5RhMT$|J^cX@`OQl2aZrj!Rnr`6Z`3awINoJ;*OP zwSJzA={fjyoMlN0GMC6NwO6X`Gw?lc{mKz`{hkFD_W zbeI9sbeIY9OK*8>mXD{yERbJ%;}-gOI-CmfOK*8>u8*g~9MEt{_qiZVhk1!ypAWMU zVzW6R?Sh1~3lq{Vf;*LVF-WCd0@7Sx3Q}oL2dT7YfHc>afmGTvL7MB!K`QMEkmmYI zkV?A>q|&aIT-LtgWc4ejYvt8YxtT{(O{BH71hJ$$6W3n4K$B1KK3SyFtzq z>Hs=ls1CGQs3T~LP$$p@LY+Zdg}Q*Y33UZ+7wQJuA=DkTQ>X`Mmrzg8ZlPYFJwm-f zdxiQy+6#sH!t5fUexQqm`hzYJ8UVUfXdvh^p+TU_g$9GJ5E=s7Co~kaUuYQUfY5Nz zl|uY2s;h)XfUXv*2VEo70J>IaB>rhsl2nhLr@Xd37hLQSAMg{Fh<5}E<1G-;mF6aTFc}TMdh33QTRYJ|6R|_owJtVXc^ctZ>pw|j5 z1|1Pv0(w|zDd=@Vr-L35;ypdD7g`2-gV33vM}?My9uwm4VLdLi67)u)RiHNst%kI3 z7Fq*(i_luoTZPua-P?rt8?tW~;_ukLL#PGxP7ue2JY~bvx~Os*gDNlTqRNZ9sPdvN zs=TO+YF|85c~KWtE)h}XMO{>RQ5RKS)J2sSby4L-T~v8d7gb)=MU@wIQ7z!1%8RRQ5RL7&!ftVx~TG^E~>n!iz+YbqRNZ9sPdvNsyv@Z zwHXgp?wX>?i@K=tqAseusEaBu>Y~bvx~TG^E~;z*sPdvNs=TO+Dlh7y%8RI6@vb|1^$<$IU;FtzmKVpJOjq-2B(r%@sHQS5${}on8D(oo{rL*T-^q z#m+Y-^{P-(41V8+%CX$t)*dIcRnNKQB%SKrW9{)JE3IdHncVlRxBeU?Uk-4g8~?|! zuGvm2@O$Nx&3Bo1A%;gWwP>)Djf-WapU??G{N#8$+){w_8M}MYnz`2&_RV+4s1d|z zM7|2~oc;ag-8Q~Fdo~_);?Ii6@0IXNCoES*KCg*P*CHP8LC7v1pNHvtB_7Y7gjn2< za_ap4c_JRai2VLlWcq8=2ewnpv8swwJ^l+NTn1%G9M#-qCxsm~;*_UO3XTTpq~I8k zP700%aZ=E^W1jfE*qj2r*ZRqcX7(;zc0IAj?=&uwRW{kZF4+;(i_I#Gltisq_d^!I!RTOx(LPc{DP83?V%sAwPZ+ z!hJQ`MVCLHPRPiTtGV?ou7>f;0@XOx`PvhHTq&-`7TkDl{UVWDzf9!TucF*KYR7ym z-=$k1nz9v&Pec1M%~AF}cAA~CbDH*^X!4xnW0r9D+>fxFjqwTla}xGh;=KK}k^ObZ zIiG%cjIJJ#^y6i4yh`!Jo&!-hSK_iCUmNq-a)DF$QH|r)sr#fh^6cG1QXBIq!}rAE zcO8iN>tuZd?$poMC;WUv!p}z&em(}7pN#5E9uvWFncsMV@-nqtNzLQ>mw5a>lZfAE z6Y={T$S+IeasA8vk%Z6UawEUUl1F(yQs#Lfa`$b-!kuPZhjQ|rvNHK{QF&R_X;YR} ze-W7Xhvm`zGDN)0-HTB?bFK#E>_L%>*9<;b=Gh*(+W~t{E?#WBvy7_;QRcWU<{^|R z7w&a%;nTAQ8+yuxdw1mS9toEhC?6{8j-fK#d(C5!4=iOGa`{sBMC9&C$;rnM@>6AV z(uI5I77a-^(Z4@i4adAZPOY2Su%X5cX1qg}1#oWWsPO5?o2VOdJ!{J~+o*?XIH zAivDOxrD>A%)l9i!?Mi4d4xHmY3o6LQHApyacM__RN7IIw5;=-`H0tf z)-uj=#8Y4bNK;@U$S<98-Xop@lR=sSQ$U&mQ$c=NiSr@x6lenZWhKsy#8Y4f$S*5# zo+O?Er-1yj66Z|fDKH!4mz6kw5>J8C68Sv`W?H)Ef>hdhAeDALNb|cHq|z<`sk940 zD(xbW=J#TdO1lK4`MngR(w+{|{Kh16Oxk52&F?coD(!NR=JyK8?_S8;Ppy17@1zJ3%V#E|5yQ8>G_i0jacmK`QNqAeHtakV<tX&(luw69C#H%HaU(Mv7H$ng|-BS=%=O(0EyH-j_<-U8ATcq>R# z;B6pHfwzM+1>OPD6nG~{Q{Y`7O@ViVGzH!R(iC_vNK@c_AWebygS5myk;v~SVW#>0 z6iB8007#|%AV{VC5J;u{Fi55S2uP*31gW&g zKq~DsAeHu0iTvhUihJ(In}@64&*B@tz}G>V0{;lo6!->6Q{Z`!rocBrngZVfX$riM$nS5%Or`w}NTvNQ zNTq!dq|$y5q|*KqNTvNgNTq!Vq|*KXq|*Knq|*K~NTvM|NTvNTNTvM=NTvN3kV^Yg zkV^ZrM1FH7!#%IVTru<8Z6l6v$td+pcCF?EIoD3Q)8ii$s==z!hlIF_^kJb6ppOXE zfj%nK5%e)3o*sW%s59u}LR~IL7x%g zmW<^mCz8LB9|>4fIQ)IiOz&%?15hh#NHiRcJowH$u&ze-l~&`mNAH(7y{U z0{w^3V$kn|mVo|KXesEwgiZ(jx6m1&-wQ1R{f`h&cK@%?a?l@yR)GFbXeH>6LaRV+ zLfoK%3H_*j;RcPI5I1O439SQF3#|v`g*Jd{gjztgLK{IHg!p5QbwX!@ItrZw>Lhe7 zsI$-}P#2-|KwX8-2XzzL4C*el1=K_60#Hw(t)N~)+d#dAwuAZz?Ev)^+6n3>vql0p}n9%LKlJt3ta@_;S$%*Ukn;5bO~sf(50Z^LYILGLYIR^2wefH7upAE z5ZVtKDRcldO6W@L251zz3TC5)u7=qdp=&^6g|5Z*@8g87!-m1}Lf3;P2;BghD0Cxe zlF&_{$wD`SrUo?W zfc6S~6m+4`$3PbeJq@~8=;NSEggybfROl$^GNDg`E*Clmx2E9t?N1#^={TTF+ z&`&_G5&9RxF&=dIN~}RMg`2=aAWfeQ{Ui zzESn=ssU9W=zN@8H3wlq47*tHQipHVvQ@Kck>M6h-Kyz-YGH-d=SCu$uf>KRs@&*9 zl^cBAmQA-+b38U6k=J3P5mjz5qRNd$RJoyuDmM~QOHVWejJy2P<;~idB27GWZ!d9>6S=t0pwObZULkk+5*U} zf!qQ}mFM=U^4vaEp4+F&bNf_zZl5a8W>V!TMyfnHN0sL{s6K{=>ZkEg{R|$epT$G< zb2i;-kq@7@@%lM(g7NzW9;&~@L-kj9xCN0LubAuAPybtBX9v91M#4`RXlKkCBzqP0uKaUgt70GcRzs-hQ`*`{{ejWSGh_PPB zew%FAV1K}STS`5Bt<-r;0ly;JqQWiw{q4OjyxS$~@xKST9Pwd^V*PO2Ng10`Av&`x ze^oyj0+;mSAvk%tE#vmsBslM-(Mj+QAe{uS1L-7qN03f}cLM1ocxRAKf_DMwBzRYl zPJ(v>=_Gh}kWPa40O=%nPmoT6_X6o8cyEwSg7*OxqI$w@8Fxr&Y(OVCelup<2+JggSuUEK~=2i%>_H&I>P*2c%g?fSBC)6ACexW{~CxrTfo)qc_dP=B2=mSCn zKpzwu2>OuFAkc?}27^8#Gz9cfp`oCU2@L~1Ei@eTaiId}6G9_EM}_J^pA>2U9TOS} zdPZmz=u<+Cpic{pHdqP~8Uy;Q&{)vtgvNnB58{i|Vw@;Bgso-Ua61MUFSlVj*S|tXKU`IG3g1N|4rV9gCX`h_h+i2Eg9q3)meV!Kr)y-h z8}!}YY})LevPCyej%vtplkD5Ch8#D=2JC}CUqoD8=z~FePG<;6&*==sgwaMw>ue4K zu`h8n95%lsz7#;u35@`K8RV`2qWmlg%p*7K-V}&=QescM`q4d{ymH@`+maCf5pDKk66Y(^0U-kVi!7hgSBsq7u`YM5$XZ@u24_Vi$c9X-xKN$`X`}2pzjOy1-&HH z5A*|&i)4S?j+*>Lk?eM?Uo4UXVC{$E#X!(M3k?GONN6zV$3jCuKM@*gu!BQr80e=$ z!x1g!+$T_CJD}t>+gQ2(N7#Yt5EKNir>;T${{#L%Gq>h=FK6h9W|c!lURR(4)pa=z zBsoLV->U5H$?WE-vU@K#U}eL=0V`ED8C3aD%tdD#M0UbaA$mn~4`WeZe!*#Za5yljCgFI%8$*FB)} zvIR0PTcFCz7O3*F1**JkfocH{RbIBhfj5UaOwDSjoJHboXjHo)yg%Pe`Ll=vKfHZ~ zA0Bq(hfQImWjX#I?kKO$Eyk&a#pqFtIkvEBomo(A7Brgc>&D|RXY-7C&yV#bmjkg= zOMG_M^*6g?uSQik6pasuWbK(L?|l8q9(bRYJBau`ljn>G=Rt0@vfO6>Z$vrtKMXuN z_WdvQBf)!6mhu?v_<^_b0F=Cg9hD0xc~5jvu1ALuH|I4U-RjgFFPa#5J5J7|^A*(3 zq&Efz-f2CSgvP+Yn{%7|#0TDKJr2Cndh9IIVX(t%w7+#=aHxK_9U?&s_iOXRE|F#N zLR%gkRe=~YN7cA_`)5ENBj&)HH*ufnGYY<~vmx%aH+-L{f6hI9b%Su{Yn7Ft3a!UQ zh_{o6?eS%>MS0vHoHvJ;e{>MO-~8OB1_#pv?Y-iIqHqRd?bIEL<^X*N$UVa&^8(f? zb$~ts#1yVVJ9kZNfZkx&GDk*cqp%Xo9O40C)_LggSu!O{fm^TcM7ie;4Wm`VXPbpx+5~0sW^?SI~b6bp!pkPHAlM@;MsuCIqsumgq$_ot! z)d&p%)d~#-br2c`suLOx>L^qIbrKo@>MT?bVve~%eFKOe_y0&csJ{jU;1Je6Hsa8G zV{RjUlxCwF)U&vmX8e_!eYUgCU2WsTffK&f`B~?Exk+fKVBdfqvj!8f_?He9x=X+5;T2|acz{8YYmXRGOgNFBw*17A3{CZ0~vA7Wn}+y#_O8O( z$gBgFFuPkbzI@h!c39t%xBPg&IK{Ek^niW(%*mczrl$~pBFPW)@+cQ^n|R@l+2rrV z(|vuRQ3GW5Z_U+y65jPKYuL+8J9hVIshFWfTm zh2P8{8~gq^25mVsT`aqtr#!hG?+VCvC@ivY)aGqv4*Gh*ks1_*o^X1c?Y-{Gs$kI zCcM<$1xzk%b*-A=ZIzg6++4um8LF7SJyHoCw=Fo{n@#6ff72 z4i#cYItbUX<-fUF4O}ox6n(v zWyhD+W5<`)W0RNGW5;)5hc?#YU=%w(E+g;_%RL=z0}Xj`OsxTt=8hdM$?`t<6Mx*s zd+khpsB2Gx-!66xA>0+Og_QbEy4HNrO3ydc_#0&vUI*M^3pT}7HXYPmM>M@`pWKh( zbpoB}<8G6UAMxPglJDYt`YcEK)Y+V=MqX@)mZ2JL`&cdp10#2X;La^dje)ztWn=D+ zNyP8UE>@T6p5m!1?0_+_R-Ww8bSJ{h=)m0`!NrxMxd$XsZS}p+B_6JzM%i zTQvwve`t$)w)BU#xWie0Xp1|Y^@p}I9&{!cJtsMuVG@Nu;YU@u2)a;FB zyx8gpnjq8(G*PHCXp&GD&}5;mpeaJ#KvRXfgQf}bCwH2J__I6Hh4_OzGlck~J2Qp) z;0B3Pg!+PJ3H1Zb7U~Z=RcHVtJq_fB(F4snNXhsonvd#uY(Q*2Y7l~+BVG&!%@rB~ znkO_AG+$^Ks99(@Xn{}xv`}aSXpvAoXt7WOXo=8B&{CmM5bkuLM$j2Tqe07r#(>Tg z8jECD4syvbE-M)Z9UCiiYWpx9eF#5~v<>C{Fzynos@itE!+rkT4+qxvhkx=i+|Nxz zajrtMIS!`BH;2YyJBu^bzvK=%?v&#WIjY~M*U$5HNu5V$iAd}5b*D=-_vc@W(9A)Pdm@ay zDzW|PlG>@q*PXN;TOsdXYp&ULlF-651wZVbSuz*d(&?xQ#Go8iV|I(jSJ=(EIX$Oe zgI#rQcO8ep?x(W&b6I>kqk$b}eOw5?7TFmxZ>Bcfi-ohHJKmO<6;T_{#jg0vLk(V@ zR*D&~bY2DGD;Hlg{NaX9Hr|}?^QXLfp)H`ijL8z{u0UHt8Mt`4%B+rj6 zv{tAiXq`|eknZ1NNR*d35)Xx2_}#NSN)hHywhhLKX}lDzqf33>QlgvuIg6=7C9cFQ zlkMjm&^4R&Q4F~j(`+^fbpW*p)qyq&bp)Ly)CqJp=vx?k^Ze*Fm>H`#d+h)9$J<$U zgZM0D+`!$rv+peZ0u-y3LG<0H2KHDjY9K718i-kKRZgUm`EcEmLQ-XCNtK-?Rc=39@$8X1`9}FdDedD($au4Hwj?vrN=HFJ^iZ3Vh;j92ZCwDuxk2ig` z-Ae9wwqw)vU+TlfuN?OBKV0>^Z6`4_GymItSnYu4U$ytsNPFJMc&yFE?$50<)W`70 za8HujgJtg|`d2Pq1K5xtyf?fp3YWzs7QWSok(#IMKjv8C4WxVJq<=KF{`+u*oqpP# zg!@>~9dGW8{IlvG+IV5Wu{Kp%G{~-;sD8>`jI_!Os8QT%;;veYQv5?+P&Dvpm&mx@$as>ohI?$YjZ zFO@cz@{}o;PnXL4f$gXsv`@92tgS!Zoewvq`ur-2Z_1vOhb(;`&he_&-~Z~)`Qn^; zX|6F}n`{i3qQsfKd7P_LoKG=F9C7;`bj6t`E#q95;*Kfql;X}Y=19kV{)hyv&0&O< z`an$c((RA__V=sz^my0(c(EP*)VHTV@0a*vA4&5w@W=jS4gRQi0DpYhd?o&vK9Av# z+Y8=}KMu}6fgF=^7y1M~?7*FH+Df?;t02CWX zs7$|QNb`+QX@~xCexI|k`;gi@aByHdd|C)~FOCQ7fX$sS;m5~`>C5o=;dkcuR7k;J zT%Kruhj|kIp9CGMQ|&JCiSK)IO?Oh1lUI2dFRV7X&$VOq0Hv#fG$ zjYn~qKP*#}m2&jKALrkBaD;R19KCa1owMnjL;oX&lbkQ-EIHGtfIsThLv6s{Nc@e$ zUnBmg|MKTgp91Ub(X|7}izT=?=KxCewMhNSKRn9oW65${!76A_#tGToJ^;`VxF_ z;M*DQ&hDAHbLY%qXW32ra3tk1^=p-^mRgD*?-b`xY(rKrveMT$$xQLXsb%tdWcKL$ zd`F=q>62(l%QvN3nx6dYZL6ed$Mk29U!*av4MEyt2RX!Hj&PJ? z9OnclImKztaF%nN=K>eGL=ClE<_cH2#&vFRlUv;84tKf7eI8K9Lmu&%Cp_gD +@ l7c}ycSG?v8Z+XXiqDJ{({*h07&a_4Qm(21v%i&+0z5`qp@uC0# literal 0 HcmV?d00001 diff --git a/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql b/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql index 3359a34508..c9ca132f1d 100644 --- a/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql +++ b/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql @@ -1,8 +1,8 @@ -select patient_id +select tx_new.patient_id from ( - select tx_new.patient_id, min(tx_new.data_cd4) + select tx_new.patient_id, min(tx_new.data_cd4) data_cd4,tx_new.data_cd4__greater from ( - select tx_new.patient_id, tx_new.art_start_date,first_cd4.data_cd4 from + select tx_new.patient_id, tx_new.art_start_date,first_cd4.data_cd4,first_cd4.data_cd4__greater from ( select tx_new.patient_id, tx_new.art_start_date from ( @@ -55,7 +55,7 @@ from ( group by p.patient_id ) art_start group by patient_id - ) tx_new where art_start_date between :startDate and :endDate and art_start_date < '2023-12-21' + ) tx_new where art_start_date between '2024-03-21' and :endDate and art_start_date < '2023-12-21' union select tx_new.patient_id, tx_new.art_start_date from @@ -85,7 +85,7 @@ from ( group by p.patient_id ) art_start group by patient_id - ) tx_new where art_start_date between :startDate and :endDate and art_start_date >= '2023-12-21' + ) tx_new where art_start_date between '2024-03-21' and :endDate and art_start_date >= '2023-12-21' ) tx_new left join ( @@ -128,9 +128,9 @@ from ( inner join person pe on pe.person_id = tx_new.patient_id where (pe.birthdate is not null and floor(datediff(tx_new.art_start_date,pe.birthdate )/365) >= 5) or pe.birthdate is null ) tx_new - inner join + left join ( - select first_cd4.patient_id, first_cd4.data_cd4 + select first_cd4.patient_id, first_cd4.data_cd4 data_cd4,first_cd4_greater.data_cd4__greater from ( select first_cd4.patient_id, first_cd4.data_cd4 data_cd4 from( @@ -162,7 +162,7 @@ from ( union - select p.patient_id, e.encounter_datetime data_cd4 + select p.patient_id,cd4.obs_datetime data_cd4 from patient p inner join encounter e on e.patient_id = p.patient_id inner join obs cd4 on cd4.encounter_id = e.encounter_id @@ -181,7 +181,7 @@ from ( ) first_cd4 left join ( - select first_cd4.patient_id, first_cd4.data_cd4 data_cd4 + select first_cd4.patient_id, first_cd4.data_cd4 data_cd4__greater from( select p.patient_id, lastCD4.obs_datetime data_cd4 from patient p @@ -192,7 +192,7 @@ from ( union - select p.patient_id, artStartDate.value_datetime data_cd4 + select p.patient_id, artStartDate.value_datetime data_cd4__greater from patient p inner join encounter e on e.patient_id = p.patient_id inner join obs cd4ArtStart on cd4ArtStart.encounter_id = e.encounter_id @@ -202,7 +202,7 @@ from ( union - select p.patient_id, e.encounter_datetime data_cd4 + select p.patient_id, e.encounter_datetime data_cd4__greater from patient p inner join encounter e on e.patient_id = p.patient_id inner join obs cd4 on cd4.encounter_id = e.encounter_id @@ -211,7 +211,7 @@ from ( union - select p.patient_id, e.encounter_datetime data_cd4 + select p.patient_id, cd4.obs_datetime data_cd4__greater from patient p inner join encounter e on e.patient_id = p.patient_id inner join obs cd4 on cd4.encounter_id = e.encounter_id @@ -220,17 +220,17 @@ from ( union - select p.patient_id, e.encounter_datetime data_cd4 + select p.patient_id, e.encounter_datetime data_cd4__greater from patient p inner join encounter e on e.patient_id = p.patient_id inner join obs cd4 on cd4.encounter_id = e.encounter_id where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate ) first_cd4 - ) first_cd4_greater on first_cd4_greater.patient_id = first_cd4.patient_id - where first_cd4_greater.data_cd4 is null or first_cd4_greater.data_cd4>=first_cd4.data_cd4 - + ) first_cd4_greater on first_cd4_greater.patient_id = first_cd4.patient_id ) first_cd4 on first_cd4.patient_id = tx_new.patient_id )tx_new - where tx_new.data_cd4 between date_add(tx_new.art_start_date, interval - 90 day) and date_add(tx_new.art_start_date, interval 28 day) group by tx_new.patient_id -)tx_new +where (tx_new.data_cd4 between date_add(tx_new.art_start_date, interval - 90 day) and date_add(tx_new.art_start_date, interval 28 day)) and + (tx_new.data_cd4__greater is null or tx_new.data_cd4>=tx_new.data_cd4__greater) + group by tx_new.patient_id)tx_new + From 23111ceb4499444e1b11ef0088194795eb0df5b1 Mon Sep 17 00:00:00 2001 From: emaposse Date: Tue, 19 Nov 2024 08:42:32 +0200 Subject: [PATCH 4/9] SESP-315:Bug Fix Tx_new. --- .../main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql b/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql index c9ca132f1d..efc62a4e33 100644 --- a/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql +++ b/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql @@ -55,7 +55,7 @@ from ( group by p.patient_id ) art_start group by patient_id - ) tx_new where art_start_date between '2024-03-21' and :endDate and art_start_date < '2023-12-21' + ) tx_new where art_start_date between :startDate and :endDate and art_start_date < '2023-12-21' union select tx_new.patient_id, tx_new.art_start_date from @@ -85,7 +85,7 @@ from ( group by p.patient_id ) art_start group by patient_id - ) tx_new where art_start_date between '2024-03-21' and :endDate and art_start_date >= '2023-12-21' + ) tx_new where art_start_date between :startDate and :endDate and art_start_date >= '2023-12-21' ) tx_new left join ( From de869be945533798d7157b337a2db7ce4c9cb934 Mon Sep 17 00:00:00 2001 From: emaposse Date: Wed, 20 Nov 2024 10:43:57 +0200 Subject: [PATCH 5/9] SESP-315:Bug Fix Cd4<200 Desagragation. --- .../resources/.~PEPFAR_MER_2.8_Quarterly.xls | 0 .../PATIENTS_WITH_CD4_LESS_THAN_200.sql | 28 +++++++++++-------- 2 files changed, 16 insertions(+), 12 deletions(-) create mode 100644 api/src/main/resources/.~PEPFAR_MER_2.8_Quarterly.xls diff --git a/api/src/main/resources/.~PEPFAR_MER_2.8_Quarterly.xls b/api/src/main/resources/.~PEPFAR_MER_2.8_Quarterly.xls new file mode 100644 index 0000000000..e69de29bb2 diff --git a/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql b/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql index efc62a4e33..8747738378 100644 --- a/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql +++ b/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql @@ -130,7 +130,9 @@ from ( ) tx_new left join ( - select first_cd4.patient_id, first_cd4.data_cd4 data_cd4,first_cd4_greater.data_cd4__greater + select * from + ( + select first_cd4.patient_id, first_cd4.data_cd4 data_cd4,first_cd4_greater.data_cd4__greater from ( select first_cd4.patient_id, first_cd4.data_cd4 data_cd4 from( @@ -167,7 +169,7 @@ from ( inner join encounter e on e.patient_id = p.patient_id inner join obs cd4 on cd4.encounter_id = e.encounter_id where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 13 and e.location_id=:location - and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate + and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate union @@ -177,8 +179,8 @@ from ( inner join obs cd4 on cd4.encounter_id = e.encounter_id where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate - ) first_cd4 - ) first_cd4 + ) first_cd4 + ) first_cd4 left join ( select first_cd4.patient_id, first_cd4.data_cd4 data_cd4__greater @@ -207,7 +209,7 @@ from ( inner join encounter e on e.patient_id = p.patient_id inner join obs cd4 on cd4.encounter_id = e.encounter_id where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 6 and e.location_id=:location - and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate + and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate and p.patient_id=31751 union @@ -216,7 +218,7 @@ from ( inner join encounter e on e.patient_id = p.patient_id inner join obs cd4 on cd4.encounter_id = e.encounter_id where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 13 and e.location_id=:location - and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate + and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate union @@ -226,11 +228,13 @@ from ( inner join obs cd4 on cd4.encounter_id = e.encounter_id where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate - ) first_cd4 - ) first_cd4_greater on first_cd4_greater.patient_id = first_cd4.patient_id + ) first_cd4 + ) first_cd4_greater on first_cd4_greater.patient_id = first_cd4.patient_id + where + (first_cd4.data_cd4<=first_cd4_greater.data_cd4__greater or first_cd4_greater.data_cd4__greater is null) + ) first_cd4 ) first_cd4 on first_cd4.patient_id = tx_new.patient_id )tx_new -where (tx_new.data_cd4 between date_add(tx_new.art_start_date, interval - 90 day) and date_add(tx_new.art_start_date, interval 28 day)) and - (tx_new.data_cd4__greater is null or tx_new.data_cd4>=tx_new.data_cd4__greater) - group by tx_new.patient_id)tx_new - + where (tx_new.data_cd4 between date_add(tx_new.art_start_date, interval - 90 day) and date_add(tx_new.art_start_date, interval 28 day)) + group by tx_new.patient_id + )tx_new \ No newline at end of file From 834409b6a64dd8415e7f4f46f6073616d70758c9 Mon Sep 17 00:00:00 2001 From: emaposse Date: Fri, 29 Nov 2024 12:27:46 +0200 Subject: [PATCH 6/9] SESP-315:Bug Fix TXNEW EGPAF and ARIEL Data Base. --- .../library/queries/TxNewQueries.java | 4 +- ...PATIENTS_WITH_CD4_GREATER_OR_EQUAL_200.sql | 432 ++++++++++++------ .../PATIENTS_WITH_CD4_LESS_THAN_200.sql | 144 +++++- 3 files changed, 423 insertions(+), 157 deletions(-) diff --git a/api/src/main/java/org/openmrs/module/eptsreports/reporting/library/queries/TxNewQueries.java b/api/src/main/java/org/openmrs/module/eptsreports/reporting/library/queries/TxNewQueries.java index f6057baa41..5ce146f1c6 100644 --- a/api/src/main/java/org/openmrs/module/eptsreports/reporting/library/queries/TxNewQueries.java +++ b/api/src/main/java/org/openmrs/module/eptsreports/reporting/library/queries/TxNewQueries.java @@ -11,7 +11,7 @@ class QUERY { + "SELECT p.patient_id, pg.patient_program_id, MIN(ps.start_date) as minStateDate FROM patient p " + "inner join patient_program pg on p.patient_id=pg.patient_id " + "inner join patient_state ps on pg.patient_program_id=ps.patient_program_id " - + "WHERE pg.voided=0 and ps.voided=0 and p.voided=0 and pg.program_id=2 and location_id=:location and ps.start_date BETWEEN :startDate and :endDate " + + "WHERE pg.voided=0 and ps.voided=0 and p.voided=0 and pg.program_id=2 and location_id=:location and ps.start_date <=:endDate " + "GROUP BY pg.patient_program_id) minState " + "inner join patient_state ps on ps.patient_program_id=minState.patient_program_id " + "where ps.start_date=minState.minStateDate and ps.state=29 and ps.voided=0 "; @@ -24,7 +24,7 @@ class QUERY { + "INNER JOIN obs obsTrans ON e.encounter_id=obsTrans.encounter_id AND obsTrans.voided=0 AND obsTrans.concept_id=1369 AND obsTrans.value_coded=1065 " + "INNER JOIN obs obsTarv ON e.encounter_id=obsTarv.encounter_id AND obsTarv.voided=0 AND obsTarv.concept_id=6300 AND obsTarv.value_coded=6276 " + "INNER JOIN obs obsData ON e.encounter_id=obsData.encounter_id AND obsData.voided=0 AND obsData.concept_id=23891 " - + "WHERE p.voided=0 AND e.voided=0 AND e.encounter_type=53 AND obsData.value_datetime BETWEEN :startDate AND :endDate AND e.location_id=:location GROUP BY p.patient_id " + + "WHERE p.voided=0 AND e.voided=0 AND e.encounter_type=53 AND obsData.value_datetime<=:endDate AND e.location_id=:location GROUP BY p.patient_id " + ") tr GROUP BY tr.patient_id "; public static final String findPatientsWhoAreNewlyEnrolledOnART = diff --git a/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_GREATER_OR_EQUAL_200.sql b/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_GREATER_OR_EQUAL_200.sql index 2880feb9c6..a67e5e971a 100644 --- a/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_GREATER_OR_EQUAL_200.sql +++ b/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_GREATER_OR_EQUAL_200.sql @@ -1,141 +1,142 @@ -select patient_id +select tx_new.patient_id from ( - select tx_new.patient_id, min(tx_new.data_cd4) + select tx_new.patient_id, min(tx_new.data_cd4) data_cd4,tx_new.data_cd4__less from ( - select tx_new.patient_id, tx_new.art_start_date, first_cd4.data_cd4 - from - ( - select tx_new.patient_id, tx_new.art_start_date - from - ( - select tx_new.patient_id, tx_new.art_start_date from - ( - select patient_id, min(art_start_date) art_start_date - from - ( - select p.patient_id, min(e.encounter_datetime) art_start_date - from patient p - inner join encounter e on p.patient_id=e.patient_id - inner join obs o on o.encounter_id=e.encounter_id - where e.voided=0 and o.voided=0 and p.voided=0 and e.encounter_type in (18,6,9) - and o.concept_id=1255 and o.value_coded=1256 and e.encounter_datetime<=:endDate and e.location_id=:location - group by p.patient_id - union - - select p.patient_id, min(value_datetime) art_start_date - from patient p - inner join encounter e on p.patient_id=e.patient_id - inner join obs o on e.encounter_id=o.encounter_id - where p.voided=0 and e.voided=0 and o.voided=0 and e.encounter_type in (18,6,9,53) - and o.concept_id=1190 and o.value_datetime is not null and o.value_datetime<=:endDate and e.location_id=:location - group by p.patient_id - - union - - select pg.patient_id, min(date_enrolled) art_start_date - from patient p - inner join patient_program pg on p.patient_id=pg.patient_id - where pg.voided=0 and p.voided=0 and program_id=2 and date_enrolled<=:endDate and location_id=:location - group by pg.patient_id - - union - - select e.patient_id, min(e.encounter_datetime) as art_start_date - from patient p - inner join encounter e on p.patient_id=e.patient_id - where p.voided=0 and e.encounter_type=18 and e.voided=0 and e.encounter_datetime<=:endDate and e.location_id=:location - group by p.patient_id - - union - - select p.patient_id, min(value_datetime) art_start_date - from patient p - inner join encounter e on p.patient_id=e.patient_id - inner join obs o on e.encounter_id=o.encounter_id - where p.voided=0 and e.voided=0 and o.voided=0 and e.encounter_type=52 - and o.concept_id=23866 and o.value_datetime is not null and o.value_datetime<=:endDate and e.location_id=:location - group by p.patient_id - ) - art_start group by patient_id - ) tx_new where art_start_date between :startDate and :endDate and art_start_date < '2023-12-21' - union - select tx_new.patient_id, tx_new.art_start_date - from - ( - select tx_new.patient_id, tx_new.art_start_date - from - ( - select patient_id, art_start_date from - ( - select patient_id, min(art_start_date) art_start_date - from - ( - select e.patient_id, min(e.encounter_datetime) as art_start_date - from patient p - inner join encounter e on p.patient_id=e.patient_id - where p.voided=0 and e.encounter_type=18 and e.voided=0 and e.encounter_datetime<=:endDate and e.location_id=:location - group by p.patient_id - - union - - select p.patient_id, min(value_datetime) art_start_date - from patient p - inner join encounter e on p.patient_id=e.patient_id - inner join obs o on e.encounter_id=o.encounter_id - where p.voided=0 and e.voided=0 and o.voided=0 and e.encounter_type=52 - and o.concept_id=23866 and o.value_datetime is not null and o.value_datetime<=:endDate and e.location_id=:location - group by p.patient_id - ) - art_start group by patient_id - ) tx_new where art_start_date between :startDate and :endDate and art_start_date >= '2023-12-21' - ) tx_new - left join - ( - select patient_id from - ( - select patient_id, min(art_start_date) art_start_date - from - ( - select p.patient_id, min(e.encounter_datetime) art_start_date - from patient p - inner join encounter e on p.patient_id=e.patient_id - inner join obs o on o.encounter_id=e.encounter_id - where e.voided=0 and o.voided=0 and p.voided=0 and e.encounter_type in (18,6,9) - and o.concept_id=1255 and o.value_coded=1256 and e.encounter_datetime<=:endDate and e.location_id=:location - group by p.patient_id - union - - select p.patient_id, min(value_datetime) art_start_date - from patient p - inner join encounter e on p.patient_id=e.patient_id - inner join obs o on e.encounter_id=o.encounter_id - where p.voided=0 and e.voided=0 and o.voided=0 and e.encounter_type in (18,6,9,53) - and o.concept_id=1190 and o.value_datetime is not null and o.value_datetime<=:endDate and e.location_id=:location - group by p.patient_id - - union - - select pg.patient_id, min(date_enrolled) art_start_date - from patient p - inner join patient_program pg on p.patient_id=pg.patient_id - where pg.voided=0 and p.voided=0 and program_id=2 and date_enrolled<=:endDate and location_id=:location - group by pg.patient_id - ) - art_start group by patient_id - ) tx_new where art_start_date < '2023-12-21' - ) tx_new_period_anterior on tx_new.patient_id = tx_new_period_anterior.patient_id - where tx_new_period_anterior.patient_id is null - ) tx_new - ) tx_new - inner join person pe on pe.person_id = tx_new.patient_id - where (pe.birthdate is not null and floor(datediff(tx_new.art_start_date,pe.birthdate )/365) >= 5) or pe.birthdate is null - ) tx_new - inner join - ( - select first_cd4.patient_id, first_cd4.data_cd4 - from ( - - select p.patient_id, lastCD4.obs_datetime data_cd4 + select tx_new.patient_id, tx_new.art_start_date,first_cd4.data_cd4,first_cd4.data_cd4__less from + ( + select tx_new.patient_id, tx_new.art_start_date from + ( + select tx_new.patient_id, tx_new.art_start_date from + ( + select patient_id, min(art_start_date) art_start_date + from + ( + select p.patient_id, min(e.encounter_datetime) art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on o.encounter_id=e.encounter_id + where e.voided=0 and o.voided=0 and p.voided=0 and e.encounter_type in (18,6,9) + and o.concept_id=1255 and o.value_coded=1256 and e.encounter_datetime<=:endDate and e.location_id=:location + group by p.patient_id + union + + select p.patient_id, min(value_datetime) art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on e.encounter_id=o.encounter_id + where p.voided=0 and e.voided=0 and o.voided=0 and e.encounter_type in (18,6,9,53) + and o.concept_id=1190 and o.value_datetime is not null and o.value_datetime<=:endDate and e.location_id=:location + group by p.patient_id + + union + + select pg.patient_id, min(date_enrolled) art_start_date + from patient p + inner join patient_program pg on p.patient_id=pg.patient_id + where pg.voided=0 and p.voided=0 and program_id=2 and date_enrolled<=:endDate and location_id=:location + group by pg.patient_id + + union + + select e.patient_id, min(e.encounter_datetime) as art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + where p.voided=0 and e.encounter_type=18 and e.voided=0 and e.encounter_datetime<=:endDate and e.location_id=:location + group by p.patient_id + + union + + select p.patient_id, min(value_datetime) art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on e.encounter_id=o.encounter_id + where p.voided=0 and e.voided=0 and o.voided=0 and e.encounter_type=52 + and o.concept_id=23866 and o.value_datetime is not null and o.value_datetime<=:endDate and e.location_id=:location + group by p.patient_id + ) + art_start group by patient_id + ) tx_new where art_start_date between :startDate and :endDate and art_start_date < '2023-12-21' + union + select tx_new.patient_id, tx_new.art_start_date + from + ( + select tx_new.patient_id, tx_new.art_start_date + from + ( + select patient_id, art_start_date from + ( + select patient_id, min(art_start_date) art_start_date + from + ( + select e.patient_id, min(e.encounter_datetime) as art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + where p.voided=0 and e.encounter_type=18 and e.voided=0 and e.encounter_datetime<=:endDate and e.location_id=:location + group by p.patient_id + + union + + select p.patient_id, min(value_datetime) art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on e.encounter_id=o.encounter_id + where p.voided=0 and e.voided=0 and o.voided=0 and e.encounter_type=52 + and o.concept_id=23866 and o.value_datetime is not null and o.value_datetime<=:endDate and e.location_id=:location + group by p.patient_id + ) + art_start group by patient_id + ) tx_new where art_start_date between :startDate and :endDate and art_start_date >= '2023-12-21' + ) tx_new + left join + ( + select patient_id from + ( + select patient_id, min(art_start_date) art_start_date + from + ( + select p.patient_id, min(e.encounter_datetime) art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on o.encounter_id=e.encounter_id + where e.voided=0 and o.voided=0 and p.voided=0 and e.encounter_type in (18,6,9) + and o.concept_id=1255 and o.value_coded=1256 and e.encounter_datetime<=:endDate and e.location_id=:location + group by p.patient_id + union + + select p.patient_id, min(value_datetime) art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on e.encounter_id=o.encounter_id + where p.voided=0 and e.voided=0 and o.voided=0 and e.encounter_type in (18,6,9,53) + and o.concept_id=1190 and o.value_datetime is not null and o.value_datetime<=:endDate and e.location_id=:location + group by p.patient_id + + union + + select pg.patient_id, min(date_enrolled) art_start_date + from patient p + inner join patient_program pg on p.patient_id=pg.patient_id + where pg.voided=0 and p.voided=0 and program_id=2 and date_enrolled<=:endDate and location_id=:location + group by pg.patient_id + ) + art_start group by patient_id + ) tx_new where art_start_date < '2023-12-21' + ) tx_new_period_anterior on tx_new.patient_id = tx_new_period_anterior.patient_id + where tx_new_period_anterior.patient_id is null + ) tx_new + )tx_new + inner join person pe on pe.person_id = tx_new.patient_id + where (pe.birthdate is not null and floor(datediff(tx_new.art_start_date,pe.birthdate )/365) >= 5) or pe.birthdate is null + ) tx_new + left join + ( + select * from + ( + select first_cd4.patient_id, first_cd4.data_cd4 data_cd4,first_cd4_less.data_cd4__less + from ( + select first_cd4.patient_id, first_cd4.data_cd4 data_cd4 + from( + select p.patient_id, lastCD4.obs_datetime data_cd4 from patient p inner join encounter e on e.patient_id = p.patient_id inner join obs lastCD4 on lastCD4.encounter_id = e.encounter_id @@ -180,12 +181,141 @@ from ( inner join obs cd4 on cd4.encounter_id = e.encounter_id where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate - ) first_cd4 - left join - ( - select first_cd4.patient_id, first_cd4.data_cd4 data_cd4 - from( - select p.patient_id, lastCD4.obs_datetime data_cd4 + ) first_cd4 + ) first_cd4 + left join + ( + select tx_new.patient_id,tx_new.art_start_date,first_cd4_less.data_cd4__less from + ( + select tx_new.patient_id, tx_new.art_start_date from + ( + select tx_new.patient_id, tx_new.art_start_date from + ( + select patient_id, min(art_start_date) art_start_date + from + ( + select p.patient_id, min(e.encounter_datetime) art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on o.encounter_id=e.encounter_id + where e.voided=0 and o.voided=0 and p.voided=0 and e.encounter_type in (18,6,9) + and o.concept_id=1255 and o.value_coded=1256 and e.encounter_datetime<=:endDate and e.location_id=:location + group by p.patient_id + union + + select p.patient_id, min(value_datetime) art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on e.encounter_id=o.encounter_id + where p.voided=0 and e.voided=0 and o.voided=0 and e.encounter_type in (18,6,9,53) + and o.concept_id=1190 and o.value_datetime is not null and o.value_datetime<=:endDate and e.location_id=:location + group by p.patient_id + + union + + select pg.patient_id, min(date_enrolled) art_start_date + from patient p + inner join patient_program pg on p.patient_id=pg.patient_id + where pg.voided=0 and p.voided=0 and program_id=2 and date_enrolled<=:endDate and location_id=:location + group by pg.patient_id + + union + + select e.patient_id, min(e.encounter_datetime) as art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + where p.voided=0 and e.encounter_type=18 and e.voided=0 and e.encounter_datetime<=:endDate and e.location_id=:location + group by p.patient_id + + union + + select p.patient_id, min(value_datetime) art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on e.encounter_id=o.encounter_id + where p.voided=0 and e.voided=0 and o.voided=0 and e.encounter_type=52 + and o.concept_id=23866 and o.value_datetime is not null and o.value_datetime<=:endDate and e.location_id=:location + group by p.patient_id + ) + art_start group by patient_id + ) tx_new where art_start_date between :startDate and :endDate and art_start_date < '2023-12-21' + union + select tx_new.patient_id, tx_new.art_start_date + from + ( + select tx_new.patient_id, tx_new.art_start_date + from + ( + select patient_id, art_start_date from + ( + select patient_id, min(art_start_date) art_start_date + from + ( + select e.patient_id, min(e.encounter_datetime) as art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + where p.voided=0 and e.encounter_type=18 and e.voided=0 and e.encounter_datetime<=:endDate and e.location_id=:location + group by p.patient_id + + union + + select p.patient_id, min(value_datetime) art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on e.encounter_id=o.encounter_id + where p.voided=0 and e.voided=0 and o.voided=0 and e.encounter_type=52 + and o.concept_id=23866 and o.value_datetime is not null and o.value_datetime<=:endDate and e.location_id=:location + group by p.patient_id + ) + art_start group by patient_id + ) tx_new where art_start_date between :startDate and :endDate and art_start_date >= '2023-12-21' + ) tx_new + left join + ( + select patient_id from + ( + select patient_id, min(art_start_date) art_start_date + from + ( + select p.patient_id, min(e.encounter_datetime) art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on o.encounter_id=e.encounter_id + where e.voided=0 and o.voided=0 and p.voided=0 and e.encounter_type in (18,6,9) + and o.concept_id=1255 and o.value_coded=1256 and e.encounter_datetime<=:endDate and e.location_id=:location + group by p.patient_id + union + + select p.patient_id, min(value_datetime) art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on e.encounter_id=o.encounter_id + where p.voided=0 and e.voided=0 and o.voided=0 and e.encounter_type in (18,6,9,53) + and o.concept_id=1190 and o.value_datetime is not null and o.value_datetime<=:endDate and e.location_id=:location + group by p.patient_id + + union + + select pg.patient_id, min(date_enrolled) art_start_date + from patient p + inner join patient_program pg on p.patient_id=pg.patient_id + where pg.voided=0 and p.voided=0 and program_id=2 and date_enrolled<=:endDate and location_id=:location + group by pg.patient_id + ) + art_start group by patient_id + ) tx_new where art_start_date < '2023-12-21' + ) tx_new_period_anterior on tx_new.patient_id = tx_new_period_anterior.patient_id + where tx_new_period_anterior.patient_id is null + ) tx_new + )tx_new + inner join person pe on pe.person_id = tx_new.patient_id + where (pe.birthdate is not null and floor(datediff(tx_new.art_start_date,pe.birthdate )/365) >= 5) or pe.birthdate is null + )tx_new + inner join + ( + select first_cd4_less.patient_id, first_cd4_less.data_cd4 data_cd4__less + from( + select p.patient_id, lastCD4.obs_datetime data_cd4 from patient p inner join encounter e on e.patient_id = p.patient_id inner join obs lastCD4 on lastCD4.encounter_id = e.encounter_id @@ -228,10 +358,14 @@ from ( inner join obs cd4 on cd4.encounter_id = e.encounter_id where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate - ) first_cd4 - ) first_cd4_less on first_cd4_less.patient_id = first_cd4.patient_id - where first_cd4_less.data_cd4 is null or first_cd4.data_cd4 < first_cd4_less.data_cd4 - ) first_cd4 on first_cd4.patient_id = tx_new.patient_id - )tx_new - where tx_new.data_cd4 between date_add(tx_new.art_start_date, interval - 90 day) and date_add(tx_new.art_start_date, interval 28 day) group by tx_new.patient_id - )tx_new + ) first_cd4_less + )first_cd4_less on first_cd4_less.patient_id=tx_new.patient_id + where (first_cd4_less.data_cd4__less between date_add(tx_new.art_start_date, interval - 90 day) and date_add(tx_new.art_start_date, interval 28 day)) + ) first_cd4_less on first_cd4_less.patient_id = first_cd4.patient_id + where (first_cd4.data_cd4 < first_cd4_less.data_cd4__less or first_cd4_less.data_cd4__less is null) + ) first_cd4 + ) first_cd4 on first_cd4.patient_id = tx_new.patient_id + )tx_new + where (tx_new.data_cd4 between date_add(tx_new.art_start_date, interval - 90 day) and date_add(tx_new.art_start_date, interval 28 day)) + group by tx_new.patient_id + )tx_new \ No newline at end of file diff --git a/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql b/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql index 8747738378..5fc988edf8 100644 --- a/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql +++ b/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql @@ -130,9 +130,9 @@ from ( ) tx_new left join ( - select * from - ( - select first_cd4.patient_id, first_cd4.data_cd4 data_cd4,first_cd4_greater.data_cd4__greater + select * from + ( + select first_cd4.patient_id, first_cd4.data_cd4 data_cd4,first_cd4_greater.data_cd4__greater from ( select first_cd4.patient_id, first_cd4.data_cd4 data_cd4 from( @@ -183,9 +183,139 @@ from ( ) first_cd4 left join ( - select first_cd4.patient_id, first_cd4.data_cd4 data_cd4__greater + select tx_new.patient_id,tx_new.art_start_date,first_cd4_greater.data_cd4__greater + from + ( + select tx_new.patient_id, tx_new.art_start_date from + ( + select tx_new.patient_id, tx_new.art_start_date from + ( + select patient_id, min(art_start_date) art_start_date + from + ( + select p.patient_id, min(e.encounter_datetime) art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on o.encounter_id=e.encounter_id + where e.voided=0 and o.voided=0 and p.voided=0 and e.encounter_type in (18,6,9) + and o.concept_id=1255 and o.value_coded=1256 and e.encounter_datetime<=:endDate and e.location_id=:location + group by p.patient_id + union + + select p.patient_id, min(value_datetime) art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on e.encounter_id=o.encounter_id + where p.voided=0 and e.voided=0 and o.voided=0 and e.encounter_type in (18,6,9,53) + and o.concept_id=1190 and o.value_datetime is not null and o.value_datetime<=:endDate and e.location_id=:location + group by p.patient_id + + union + + select pg.patient_id, min(date_enrolled) art_start_date + from patient p + inner join patient_program pg on p.patient_id=pg.patient_id + where pg.voided=0 and p.voided=0 and program_id=2 and date_enrolled<=:endDate and location_id=:location + group by pg.patient_id + + union + + select e.patient_id, min(e.encounter_datetime) as art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + where p.voided=0 and e.encounter_type=18 and e.voided=0 and e.encounter_datetime<=:endDate and e.location_id=:location + group by p.patient_id + + union + + select p.patient_id, min(value_datetime) art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on e.encounter_id=o.encounter_id + where p.voided=0 and e.voided=0 and o.voided=0 and e.encounter_type=52 + and o.concept_id=23866 and o.value_datetime is not null and o.value_datetime<=:endDate and e.location_id=:location + group by p.patient_id + ) + art_start group by patient_id + ) tx_new where art_start_date between :startDate and :endDate and art_start_date < '2023-12-21' + union + select tx_new.patient_id, tx_new.art_start_date + from + ( + select tx_new.patient_id, tx_new.art_start_date + from + ( + select patient_id, art_start_date from + ( + select patient_id, min(art_start_date) art_start_date + from + ( + select e.patient_id, min(e.encounter_datetime) as art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + where p.voided=0 and e.encounter_type=18 and e.voided=0 and e.encounter_datetime<=:endDate and e.location_id=:location + group by p.patient_id + + union + + select p.patient_id, min(value_datetime) art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on e.encounter_id=o.encounter_id + where p.voided=0 and e.voided=0 and o.voided=0 and e.encounter_type=52 + and o.concept_id=23866 and o.value_datetime is not null and o.value_datetime<=:endDate and e.location_id=:location + group by p.patient_id + ) + art_start group by patient_id + ) tx_new where art_start_date between :startDate and :endDate and art_start_date >= '2023-12-21' + ) tx_new + left join + ( + select patient_id from + ( + select patient_id, min(art_start_date) art_start_date + from + ( + select p.patient_id, min(e.encounter_datetime) art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on o.encounter_id=e.encounter_id + where e.voided=0 and o.voided=0 and p.voided=0 and e.encounter_type in (18,6,9) + and o.concept_id=1255 and o.value_coded=1256 and e.encounter_datetime<=:endDate and e.location_id=:location + group by p.patient_id + union + + select p.patient_id, min(value_datetime) art_start_date + from patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on e.encounter_id=o.encounter_id + where p.voided=0 and e.voided=0 and o.voided=0 and e.encounter_type in (18,6,9,53) + and o.concept_id=1190 and o.value_datetime is not null and o.value_datetime<=:endDate and e.location_id=:location + group by p.patient_id + + union + + select pg.patient_id, min(date_enrolled) art_start_date + from patient p + inner join patient_program pg on p.patient_id=pg.patient_id + where pg.voided=0 and p.voided=0 and program_id=2 and date_enrolled<=:endDate and location_id=:location + group by pg.patient_id + ) + art_start group by patient_id + ) tx_new where art_start_date < '2023-12-21' + ) tx_new_period_anterior on tx_new.patient_id = tx_new_period_anterior.patient_id + where tx_new_period_anterior.patient_id is null + ) tx_new + )tx_new + inner join person pe on pe.person_id = tx_new.patient_id + where (pe.birthdate is not null and floor(datediff(tx_new.art_start_date,pe.birthdate )/365) >= 5) or pe.birthdate is null + )tx_new + inner join + ( + select first_cd4_greater.patient_id, first_cd4_greater.data_cd4__greater from( - select p.patient_id, lastCD4.obs_datetime data_cd4 + + select p.patient_id, lastCD4.obs_datetime data_cd4__greater from patient p inner join encounter e on e.patient_id = p.patient_id inner join obs lastCD4 on lastCD4.encounter_id = e.encounter_id @@ -228,7 +358,9 @@ from ( inner join obs cd4 on cd4.encounter_id = e.encounter_id where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate - ) first_cd4 + ) first_cd4_greater + )first_cd4_greater on first_cd4_greater.patient_id=tx_new.patient_id + where (first_cd4_greater.data_cd4__greater between date_add(tx_new.art_start_date, interval - 90 day) and date_add(tx_new.art_start_date, interval 28 day)) --and tx_new.patient_id=21049 ) first_cd4_greater on first_cd4_greater.patient_id = first_cd4.patient_id where (first_cd4.data_cd4<=first_cd4_greater.data_cd4__greater or first_cd4_greater.data_cd4__greater is null) From b5b72f8e416e11d1370691469bdd03d662d637d6 Mon Sep 17 00:00:00 2001 From: nelsonhomo Date: Tue, 3 Dec 2024 13:49:56 +0200 Subject: [PATCH 7/9] SESP-315: Include updates of SESP-314 --- ...PATIENTS_WITH_CD4_GREATER_OR_EQUAL_200.sql | 263 ++++++++++++------ .../PATIENTS_WITH_CD4_LESS_THAN_200.sql | 106 ++++++- 2 files changed, 274 insertions(+), 95 deletions(-) diff --git a/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_GREATER_OR_EQUAL_200.sql b/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_GREATER_OR_EQUAL_200.sql index a67e5e971a..bd265bc47e 100644 --- a/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_GREATER_OR_EQUAL_200.sql +++ b/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_GREATER_OR_EQUAL_200.sql @@ -136,51 +136,95 @@ from ( from ( select first_cd4.patient_id, first_cd4.data_cd4 data_cd4 from( - select p.patient_id, lastCD4.obs_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs lastCD4 on lastCD4.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and lastCD4.voided is false and e.encounter_type = 53 and e.location_id=:location - and lastCD4.concept_id = 1695 and lastCD4.value_numeric >=200 and lastCD4.obs_datetime <= :endDate - - union - - select p.patient_id, artStartDate.value_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs cd4ArtStart on cd4ArtStart.encounter_id = e.encounter_id - inner join obs artStartDate on artStartDate.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and cd4ArtStart.voided is false and artStartDate.voided is false and e.encounter_type = 53 and e.location_id=:location - and cd4ArtStart.concept_id = 23896 and cd4ArtStart.value_numeric >=200 and artStartDate.concept_id = 1190 and artStartDate.value_datetime <= :endDate - - - union - - select p.patient_id, e.encounter_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs cd4 on cd4.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 6 and e.location_id=:location - and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate - - union - - select p.patient_id, e.encounter_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs cd4 on cd4.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 13 and e.location_id=:location - and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate - - - union - - select p.patient_id, e.encounter_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs cd4 on cd4.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location - and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate + select p.patient_id, lastCD4.obs_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs lastCD4 on lastCD4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and lastCD4.voided is false and e.encounter_type = 53 and e.location_id=:location + and lastCD4.concept_id = 1695 and lastCD4.value_numeric >= 200 and lastCD4.obs_datetime <= :endDate + + union + + Select p.patient_id, o.obs_datetime as data_cd4 From patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on e.encounter_id=o.encounter_id + where p.voided=0 and e.voided=0 and o.voided=0 and concept_id = 165515 and e.encounter_type = 53 and o.value_coded = 1254 + and e.location_id=:location and o.obs_datetime <= :endDate + + union + + select p.patient_id, artStartDate.value_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4ArtStart on cd4ArtStart.encounter_id = e.encounter_id + inner join obs artStartDate on artStartDate.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4ArtStart.voided is false and artStartDate.voided is false and e.encounter_type = 53 and e.location_id=:location + and cd4ArtStart.concept_id = 23896 and cd4ArtStart.value_numeric >=200 and artStartDate.concept_id = 1190 and artStartDate.value_datetime <= :endDate + + union + + + select p.patient_id, artStartDate.value_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4ArtStart on cd4ArtStart.encounter_id = e.encounter_id + inner join obs artStartDate on artStartDate.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4ArtStart.voided is false and artStartDate.voided is false and e.encounter_type = 53 and e.location_id=:location + and cd4ArtStart.concept_id = 165519 and cd4ArtStart.value_coded=1254 and artStartDate.concept_id = 1190 and artStartDate.value_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 6 and e.location_id=:location + and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 6 and e.location_id=:location + and cd4.concept_id = 165515 and cd4.value_coded=1254 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 13 and e.location_id=:location + and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 13 and e.location_id=:location + and cd4.concept_id = 165515 and cd4.value_coded = 1254 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location + and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location + and cd4.concept_id = 165515 and cd4.value_coded = 1254 and e.encounter_datetime <= :endDate ) first_cd4 ) first_cd4 left join @@ -316,48 +360,93 @@ from ( select first_cd4_less.patient_id, first_cd4_less.data_cd4 data_cd4__less from( select p.patient_id, lastCD4.obs_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs lastCD4 on lastCD4.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and lastCD4.voided is false and e.encounter_type = 53 and e.location_id=:location - and lastCD4.concept_id = 1695 and lastCD4.value_numeric < 200 and lastCD4.obs_datetime <= :endDate - - union - - select p.patient_id, artStartDate.value_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs cd4ArtStart on cd4ArtStart.encounter_id = e.encounter_id - inner join obs artStartDate on artStartDate.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and cd4ArtStart.voided is false and artStartDate.voided is false and e.encounter_type = 53 and e.location_id=:location - and cd4ArtStart.concept_id = 23896 and cd4ArtStart.value_numeric <200 and artStartDate.concept_id = 1190 and artStartDate.value_datetime <= :endDate - - union - - select p.patient_id, e.encounter_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs cd4 on cd4.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 6 and e.location_id=:location - and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate - - union - - select p.patient_id, e.encounter_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs cd4 on cd4.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 13 and e.location_id=:location - and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate - - union - - select p.patient_id, e.encounter_datetime data_cd4 - from patient p - inner join encounter e on e.patient_id = p.patient_id - inner join obs cd4 on cd4.encounter_id = e.encounter_id - where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location - and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs lastCD4 on lastCD4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and lastCD4.voided is false and e.encounter_type = 53 and e.location_id=:location + and lastCD4.concept_id = 1695 and lastCD4.value_numeric <200 and lastCD4.obs_datetime <= :endDate + + union + + Select p.patient_id, o.obs_datetime as data_cd4 From patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on e.encounter_id=o.encounter_id + where p.voided=0 and e.voided=0 and o.voided=0 and concept_id = 165515 and e.encounter_type = 53 and o.value_coded = 165513 + and e.location_id=:location and o.obs_datetime <= :endDate + + union + + select p.patient_id, artStartDate.value_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4ArtStart on cd4ArtStart.encounter_id = e.encounter_id + inner join obs artStartDate on artStartDate.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4ArtStart.voided is false and artStartDate.voided is false and e.encounter_type = 53 and e.location_id=:location + and cd4ArtStart.concept_id = 23896 and cd4ArtStart.value_numeric <200 and artStartDate.concept_id = 1190 and artStartDate.value_datetime <= :endDate + + union + + select p.patient_id, artStartDate.value_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4ArtStart on cd4ArtStart.encounter_id = e.encounter_id + inner join obs artStartDate on artStartDate.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4ArtStart.voided is false and artStartDate.voided is false and e.encounter_type = 53 and e.location_id=:location + and cd4ArtStart.concept_id = 165519 and cd4ArtStart.value_coded=165513 and artStartDate.concept_id = 1190 and artStartDate.value_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 6 and e.location_id=:location + and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 6 and e.location_id=:location + and cd4.concept_id = 165515 and cd4.value_coded=165513 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 13 and e.location_id=:location + and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 13 and e.location_id=:location + and cd4.concept_id = 165515 and cd4.value_coded = 165513 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location + and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location + and cd4.concept_id = 165515 and cd4.value_coded = 165513 and e.encounter_datetime <= :endDate ) first_cd4_less )first_cd4_less on first_cd4_less.patient_id=tx_new.patient_id where (first_cd4_less.data_cd4__less between date_add(tx_new.art_start_date, interval - 90 day) and date_add(tx_new.art_start_date, interval 28 day)) diff --git a/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql b/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql index 5fc988edf8..d6121f999e 100644 --- a/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql +++ b/api/src/main/resources/TX_NEW/PATIENTS_WITH_CD4_LESS_THAN_200.sql @@ -136,7 +136,7 @@ from ( from ( select first_cd4.patient_id, first_cd4.data_cd4 data_cd4 from( - select p.patient_id, lastCD4.obs_datetime data_cd4 + select p.patient_id, lastCD4.obs_datetime data_cd4 from patient p inner join encounter e on e.patient_id = p.patient_id inner join obs lastCD4 on lastCD4.encounter_id = e.encounter_id @@ -145,6 +145,14 @@ from ( union + Select p.patient_id, o.obs_datetime as data_cd4 From patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on e.encounter_id=o.encounter_id + where p.voided=0 and e.voided=0 and o.voided=0 and concept_id = 165515 and e.encounter_type = 53 and o.value_coded = 165513 + and e.location_id=:location and o.obs_datetime <= :endDate + + union + select p.patient_id, artStartDate.value_datetime data_cd4 from patient p inner join encounter e on e.patient_id = p.patient_id @@ -154,6 +162,16 @@ from ( and cd4ArtStart.concept_id = 23896 and cd4ArtStart.value_numeric <200 and artStartDate.concept_id = 1190 and artStartDate.value_datetime <= :endDate union + + select p.patient_id, artStartDate.value_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4ArtStart on cd4ArtStart.encounter_id = e.encounter_id + inner join obs artStartDate on artStartDate.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4ArtStart.voided is false and artStartDate.voided is false and e.encounter_type = 53 and e.location_id=:location + and cd4ArtStart.concept_id = 165519 and cd4ArtStart.value_coded=165513 and artStartDate.concept_id = 1190 and artStartDate.value_datetime <= :endDate + + union select p.patient_id, e.encounter_datetime data_cd4 from patient p @@ -163,15 +181,33 @@ from ( and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 6 and e.location_id=:location + and cd4.concept_id = 165515 and cd4.value_coded=165513 and e.encounter_datetime <= :endDate + + union - select p.patient_id,cd4.obs_datetime data_cd4 + select p.patient_id, e.encounter_datetime data_cd4 from patient p inner join encounter e on e.patient_id = p.patient_id inner join obs cd4 on cd4.encounter_id = e.encounter_id where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 13 and e.location_id=:location - and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate + and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 13 and e.location_id=:location + and cd4.concept_id = 165515 and cd4.value_coded = 165513 and e.encounter_datetime <= :endDate + + union select p.patient_id, e.encounter_datetime data_cd4 from patient p @@ -179,6 +215,15 @@ from ( inner join obs cd4 on cd4.encounter_id = e.encounter_id where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location and cd4.concept_id = 1695 and cd4.value_numeric <200 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4 + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location + and cd4.concept_id = 165515 and cd4.value_coded = 165513 and e.encounter_datetime <= :endDate ) first_cd4 ) first_cd4 left join @@ -314,7 +359,6 @@ from ( ( select first_cd4_greater.patient_id, first_cd4_greater.data_cd4__greater from( - select p.patient_id, lastCD4.obs_datetime data_cd4__greater from patient p inner join encounter e on e.patient_id = p.patient_id @@ -323,6 +367,14 @@ from ( and lastCD4.concept_id = 1695 and lastCD4.value_numeric >= 200 and lastCD4.obs_datetime <= :endDate union + + Select p.patient_id, o.obs_datetime as data_cd4__greater From patient p + inner join encounter e on p.patient_id=e.patient_id + inner join obs o on e.encounter_id=o.encounter_id + where p.voided=0 and e.voided=0 and o.voided=0 and concept_id = 165515 and e.encounter_type = 53 and o.value_coded = 1254 + and e.location_id=:location and o.obs_datetime <= :endDate + + union select p.patient_id, artStartDate.value_datetime data_cd4__greater from patient p @@ -333,24 +385,53 @@ from ( and cd4ArtStart.concept_id = 23896 and cd4ArtStart.value_numeric >=200 and artStartDate.concept_id = 1190 and artStartDate.value_datetime <= :endDate union + + + select p.patient_id, artStartDate.value_datetime data_cd4__greater + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4ArtStart on cd4ArtStart.encounter_id = e.encounter_id + inner join obs artStartDate on artStartDate.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4ArtStart.voided is false and artStartDate.voided is false and e.encounter_type = 53 and e.location_id=:location + and cd4ArtStart.concept_id = 165519 and cd4ArtStart.value_coded=1254 and artStartDate.concept_id = 1190 and artStartDate.value_datetime <= :endDate + + union select p.patient_id, e.encounter_datetime data_cd4__greater from patient p inner join encounter e on e.patient_id = p.patient_id inner join obs cd4 on cd4.encounter_id = e.encounter_id where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 6 and e.location_id=:location - and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate and p.patient_id=31751 + and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate union + + select p.patient_id, e.encounter_datetime data_cd4__greater + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 6 and e.location_id=:location + and cd4.concept_id = 165515 and cd4.value_coded=1254 and e.encounter_datetime <= :endDate + + union - select p.patient_id, cd4.obs_datetime data_cd4__greater + select p.patient_id, e.encounter_datetime data_cd4__greater from patient p inner join encounter e on e.patient_id = p.patient_id inner join obs cd4 on cd4.encounter_id = e.encounter_id where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 13 and e.location_id=:location - and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate + and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate union + + select p.patient_id, e.encounter_datetime data_cd4__greater + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 13 and e.location_id=:location + and cd4.concept_id = 165515 and cd4.value_coded = 1254 and e.encounter_datetime <= :endDate + + union select p.patient_id, e.encounter_datetime data_cd4__greater from patient p @@ -358,9 +439,18 @@ from ( inner join obs cd4 on cd4.encounter_id = e.encounter_id where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location and cd4.concept_id = 1695 and cd4.value_numeric >=200 and e.encounter_datetime <= :endDate + + union + + select p.patient_id, e.encounter_datetime data_cd4__greater + from patient p + inner join encounter e on e.patient_id = p.patient_id + inner join obs cd4 on cd4.encounter_id = e.encounter_id + where p.voided is false and e.voided is false and cd4.voided is false and e.encounter_type = 51 and e.location_id=:location + and cd4.concept_id = 165515 and cd4.value_coded = 1254 and e.encounter_datetime <= :endDate ) first_cd4_greater )first_cd4_greater on first_cd4_greater.patient_id=tx_new.patient_id - where (first_cd4_greater.data_cd4__greater between date_add(tx_new.art_start_date, interval - 90 day) and date_add(tx_new.art_start_date, interval 28 day)) --and tx_new.patient_id=21049 + where (first_cd4_greater.data_cd4__greater between date_add(tx_new.art_start_date, interval - 90 day) and date_add(tx_new.art_start_date, interval 28 day)) ) first_cd4_greater on first_cd4_greater.patient_id = first_cd4.patient_id where (first_cd4.data_cd4<=first_cd4_greater.data_cd4__greater or first_cd4_greater.data_cd4__greater is null) From ef77014b16cb29e64d9ac3c40cb7838312d9ee73 Mon Sep 17 00:00:00 2001 From: nelsonhomo Date: Tue, 3 Dec 2024 17:34:47 +0200 Subject: [PATCH 8/9] SESP-315: Update TRF OUT query to consider most recent FILA by end of previous reporting period TX RTT --- .../library/queries/TxRttQueries.java | 152 +++++++++--------- 1 file changed, 76 insertions(+), 76 deletions(-) diff --git a/api/src/main/java/org/openmrs/module/eptsreports/reporting/library/queries/TxRttQueries.java b/api/src/main/java/org/openmrs/module/eptsreports/reporting/library/queries/TxRttQueries.java index 6adef26caa..f871acbd5c 100644 --- a/api/src/main/java/org/openmrs/module/eptsreports/reporting/library/queries/TxRttQueries.java +++ b/api/src/main/java/org/openmrs/module/eptsreports/reporting/library/queries/TxRttQueries.java @@ -57,94 +57,94 @@ class QUERY { + " order by obs.obs_datetime desc "; public static final String findPatientsWhoWhereTransferredOutByEndOfPreviousReportingPeriod = - "" - + "select allSaida.patient_id " - + "from ( " - + " select saidas_por_transferencia.patient_id, data_estado " + "select allSaida.patient_id " + + "from ( " + + " select saidas_por_transferencia.patient_id, data_estado " + " from( " + " select saidas_por_transferencia.patient_id, max(data_estado) data_estado " + " from " + " ( " - + " select distinct max_estado.patient_id, max_estado.data_estado " - + " from " - + " ( " - + " select pg.patient_id, max(ps.start_date) data_estado " - + " from patient p " - + " inner join person pe on pe.person_id = p.patient_id " - + " inner join patient_program pg on p.patient_id = pg.patient_id " - + " inner join patient_state ps on pg.patient_program_id = ps.patient_program_id " - + " where pg.voided=0 and ps.voided=0 and p.voided=0 and pe.voided = 0 and pg.program_id = 2 " - + " and ps.start_date < :startDate and pg.location_id =:location group by pg.patient_id " - + " ) max_estado " - + " inner join patient_program pp on pp.patient_id = max_estado.patient_id " - + " inner join patient_state ps on ps.patient_program_id = pp.patient_program_id and ps.start_date = max_estado.data_estado " - + " where pp.program_id = 2 and ps.state = 7 and pp.voided = 0 and ps.voided = 0 and pp.location_id = :location " - + " " - + " union " - + " " - + " select p.patient_id,max(o.obs_datetime) data_estado " - + " from patient p " - + " inner join person pe on pe.person_id = p.patient_id " - + " inner join encounter e on p.patient_id=e.patient_id " - + " inner join obs o on e.encounter_id=o.encounter_id " - + " where e.voided=0 and o.voided=0 and p.voided=0 and pe.voided = 0 " - + " and e.encounter_type in (53,6) and o.concept_id in (6272,6273) and o.value_coded = 1706 " - + " and o.obs_datetime <:startDate and e.location_id=:location " - + " group by p.patient_id " - + " " - + " union " - + " " - + " select ultimaBusca.patient_id, ultimaBusca.data_estado " - + " from ( " - + " select p.patient_id,max(e.encounter_datetime) data_estado " - + " from patient p " - + " inner join person pe on pe.person_id = p.patient_id " - + " inner join encounter e on p.patient_id=e.patient_id " - + " inner join obs o on o.encounter_id=e.encounter_id " - + " where e.voided=0 and p.voided=0 and pe.voided = 0 and e.encounter_datetime < :startDate " - + " and e.encounter_type = 21 and e.location_id= :location " - + " group by p.patient_id " - + " ) ultimaBusca " - + " inner join encounter e on e.patient_id = ultimaBusca.patient_id " - + " inner join obs o on o.encounter_id = e.encounter_id " - + " where e.encounter_type = 21 and o.voided=0 and o.concept_id=2016 and o.value_coded in (1706,23863) and ultimaBusca.data_estado = e.encounter_datetime and e.location_id = :location " - + " ) saidas_por_transferencia group by patient_id " + + " select distinct max_estado.patient_id, max_estado.data_estado " + + " from " + + " ( " + + " select pg.patient_id, max(ps.start_date) data_estado " + + " from patient p " + + " inner join person pe on pe.person_id = p.patient_id " + + " inner join patient_program pg on p.patient_id = pg.patient_id " + + " inner join patient_state ps on pg.patient_program_id = ps.patient_program_id " + + " where pg.voided=0 and ps.voided=0 and p.voided=0 and pe.voided = 0 and pg.program_id = 2 " + + " and ps.start_date < :startDate and pg.location_id =:location group by pg.patient_id " + + " ) max_estado " + + " inner join patient_program pp on pp.patient_id = max_estado.patient_id " + + " inner join patient_state ps on ps.patient_program_id = pp.patient_program_id and ps.start_date = max_estado.data_estado " + + " where pp.program_id = 2 and ps.state = 7 and pp.voided = 0 and ps.voided = 0 and pp.location_id = :location " + + " union " + + " select p.patient_id,max(o.obs_datetime) data_estado " + + " from patient p " + + " inner join person pe on pe.person_id = p.patient_id " + + " inner join encounter e on p.patient_id=e.patient_id " + + " inner join obs o on e.encounter_id=o.encounter_id " + + " where e.voided=0 and o.voided=0 and p.voided=0 and pe.voided = 0 " + + " and e.encounter_type in (53,6) and o.concept_id in (6272,6273) and o.value_coded = 1706 " + + " and o.obs_datetime <:startDate and e.location_id=:location " + + " group by p.patient_id " + + " union " + + " select ultimaBusca.patient_id, ultimaBusca.data_estado " + + " from ( " + + " select p.patient_id,max(e.encounter_datetime) data_estado " + + " from patient p " + + " inner join person pe on pe.person_id = p.patient_id " + + " inner join encounter e on p.patient_id=e.patient_id " + + " inner join obs o on o.encounter_id=e.encounter_id " + + " where e.voided=0 and p.voided=0 and pe.voided = 0 and e.encounter_datetime < :startDate " + + " and e.encounter_type = 21 and e.location_id= :location " + + " group by p.patient_id " + + " ) ultimaBusca " + + " inner join encounter e on e.patient_id = ultimaBusca.patient_id " + + " inner join obs o on o.encounter_id = e.encounter_id " + + " where e.encounter_type = 21 and o.voided=0 and o.concept_id=2016 and o.value_coded in (1706,23863) and ultimaBusca.data_estado = e.encounter_datetime and e.location_id = :location " + + " ) saidas_por_transferencia group by patient_id " + " ) saidas_por_transferencia " + " left join " - + " ( " - + " select patient_id, max(data_ultimo_levantamento) data_ultimo_levantamento " + + " ( " + + " select patient_id, max(data_ultimo_levantamento) data_ultimo_levantamento " + " from ( " - + " select p.patient_id, date_add(max(o.value_datetime), interval 1 day) data_ultimo_levantamento " - + " from patient p " - + " inner join encounter e on e.patient_id= p.patient_id " - + " inner join obs o on o.encounter_id = e.encounter_id " - + " where p.voided= 0 and e.voided=0 and o.voided = 0 and e.encounter_type=18 and o.concept_id = 5096 " - + " and e.location_id=:location and e.encounter_datetime <= :endDate " - + " group by p.patient_id " - + " " + + " select ultimoFila.patient_id,obs_fila.value_datetime data_ultimo_levantamento from( " + + " select p.patient_id, max(e.encounter_datetime) dataFila " + + " from patient p " + + " inner join encounter e on e.patient_id= p.patient_id " + + " where p.voided= 0 and e.voided=0 and e.encounter_type=18 " + + " and e.location_id=:location and e.encounter_datetime < :startDate " + + " group by p.patient_id " + + " )ultimoFila " + + " inner join encounter e on e.patient_id=ultimoFila.patient_id " + + " inner join obs obs_fila on e.encounter_id = obs_fila.encounter_id " + + " where obs_fila.voided=0 " + + " and e.encounter_type=18 " + + " and e.location_id=:location " + + " and ultimoFila.dataFila = e.encounter_datetime " + + " and obs_fila.concept_id=5096 " + " union " - + " " - + " select p.patient_id, date_add(max(value_datetime), interval 31 day) data_ultimo_levantamento " - + " from patient p " - + " inner join person pe on pe.person_id = p.patient_id " - + " inner join encounter e on p.patient_id=e.patient_id " - + " inner join obs o on e.encounter_id=o.encounter_id " - + " where p.voided=0 and pe.voided = 0 and e.voided=0 and o.voided=0 and e.encounter_type=52 " - + " and o.concept_id=23866 and o.value_datetime is not null and e.location_id=:location and o.value_datetime <= :endDate " + + " select p.patient_id, date_add(max(value_datetime), interval 31 day) data_ultimo_levantamento " + + " from patient p " + + " inner join person pe on pe.person_id = p.patient_id " + + " inner join encounter e on p.patient_id=e.patient_id " + + " inner join obs o on e.encounter_id=o.encounter_id " + + " where p.voided=0 and pe.voided = 0 and e.voided=0 and o.voided=0 and e.encounter_type=52 " + + " and o.concept_id=23866 and o.value_datetime is not null and e.location_id=:location and o.value_datetime < :startDate " + " group by p.patient_id " + " ) ultimo_levantamento group by patient_id " - + " ) ultimo_levantamento on saidas_por_transferencia.patient_id = ultimo_levantamento.patient_id " - + " where ultimo_levantamento.data_ultimo_levantamento <:startDate " - + ") allSaida " + + " ) ultimo_levantamento on saidas_por_transferencia.patient_id = ultimo_levantamento.patient_id " + + ") allSaida " + "left join " + "( " - + " Select p.patient_id,max(encounter_datetime) max_date " - + " from patient p " - + " inner join person pe on pe.person_id = p.patient_id " - + " inner join encounter e on e.patient_id=p.patient_id " - + " where p.voided=0 and pe.voided = 0 and e.voided=0 and e.encounter_type=18 " - + " and e.location_id=:location and e.encounter_datetime <= :startDate " - + " group by p.patient_id " + + " Select p.patient_id,max(encounter_datetime) max_date " + + " from patient p " + + " inner join person pe on pe.person_id = p.patient_id " + + " inner join encounter e on e.patient_id=p.patient_id " + + " where p.voided=0 and pe.voided = 0 and e.voided=0 and e.encounter_type=18 " + + " and e.location_id=:location and e.encounter_datetime <= :startDate " + + " group by p.patient_id " + ") last_encounter on allSaida.patient_id = last_encounter.patient_id " + "where allSaida.data_estado >= last_encounter.max_date "; } From 2f71212d54905bbb7f05d620eb6a6f04b4655060 Mon Sep 17 00:00:00 2001 From: nelsonhomo Date: Wed, 4 Dec 2024 10:29:12 +0200 Subject: [PATCH 9/9] SESP-315: Put borders in all indicators MER template --- .../resources/PEPFAR_MER_2.8_Quarterly.xls | Bin 112128 -> 113664 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/api/src/main/resources/PEPFAR_MER_2.8_Quarterly.xls b/api/src/main/resources/PEPFAR_MER_2.8_Quarterly.xls index 892884b33f36523fd6224e9483da3e4e3025e8e3..f310fc78f33506bc67d8ed992d7f8a1c35dab159 100644 GIT binary patch literal 113664 zcmeFa2Y_9*l|HUF&EwvC8;^T0V;dVAJg#7HuT)dqFc=KR^fsmkObJOK#%v&@Z5jbW zD#S6#CLsh;At4FbCB2u;w%=~Dng91mSLf*7r~BR;+bRDIPxD6aQ$I&KlI~HtU;Rq= z*WUibfbTcdR~dc|+5cwA@uu4RskObSbJ+f8h;Mt`&6rp4yMXVXT3cJ`{9Sxs#TW4P z&;L(2(7qlOSyyYG?)+lAXIl!U4i)}=Q)M2nc^3bT`2oIXn2SxVDO_aEGrP=%_%{6c zKMQOb&MB}AhtSB5EA&HKt3s=+L0RfdJ5z7kn+~R<>16ublJ>Cwd)ogWvhkj=|Bo|0 zkOn^Y-#Bd+!q*_3e=juKaCh1NjrM;R{4bb~**M>^E>q0_^Bf|!-f%CQIf_zSm~VEQ z9p)Uf(@Zr(Tx)l}=2p|Lu+aMKFz4D(M=L~7hMZiUvZZ{6%*qMDH0n+H5SG#sX|&!@ zDvjUSa^$Bmzyu*8{B*wMawts))2KJ4%Ha5EbBUCJJy@yuuGZU^}S&sH)%h9cDh@NFbbh04|Ia0uK z^eP!*LIrhe%#5<-=#U#?NKF%Z!M>)@XhxVuGu%wTcet5i&N5?BooARaa83K10iPi? z$D!*Slo#!Ev&L*STg;gy5}1dccW`k6laP0*+?~HG!%~P>W9cMHmn2MVhZ$$4nZj8@ z@i@~^#E-NuxuYCondX3Ro@0#PXeQ$8cuAjT`+G>uMuZ*fGRw<`?s*xMO8P2P;j#I2 zg#1mHHJzEVCQj2lGcQ8db~7HsnPp;{u57l&)MYbN8sk|_Myu^@3TL2oY8_~+O}o4H zGTZdSKpc&dZYQzGb1*v?n2j8gMgFBDDoI0X79;0|QqfD5KofcmJqADj(b`~b_wP^x z-3!*en=$|Hy-K@tkpGX?;_!LyOf?q%|FU}lm8KuZ&p~joe86O>xuLni)bz3Z2PdQM z#o_ze@Wt-4bJ7`F(!DsH$vNrI%t>c_PWUG4-stIi$(#*(2VfqZlaAv<<>fghCmmP* zVtx+DDd&uwbn^H%FejZU)_sVlSL!#9KND>D!A0RG=9I^kf1nTlk~ycjVM;&GPcYWC zpEq~!{`BCd2b-GqHXVZ=-OBs#5Ws%&`0v8^M;O~aAL`z{PscuZP;vPpBT4^(jt{`y z@wu;eN55g)b5g&3ygSO{!n^c)dw1c_I9pCh=OqKFXhw8b&R#xzCjDXF-GvuE7z~Y- z(d+W%Q|IAxq5W%yjU)ryl^%eE9X$3 zPKIx_a4#50B`ef^9H05q_E+`J)$^a4mjZ?#Gb?FVNxe9Ca4+ND&WFF!x5H0#;P_I{ zp`Gbmn|2SrNxA3op}nsc@WHmLq#m7nCG|MDBk2m#arqXflX4IE zmXy<_+^w++BF*4!J-&VR?j~ z8TTNaq?|?NNzxD9kv`ggn0|3NU3*4#IeBbIhi_jbM@8)+DbM?CI}FO1l*hR{x*9M% zq|*<|lcY0aK!*QGI?lbgJYoHY?Yzi6NyoW&u=E!9OC3EQNQnKo{;Csx$NDAbUfiBL z`|#3EoLmR#xbh_JIY=kv9;B0$-=!nvpOxlk7n?8W%DCr+57JNg|KU3Fzu4W?yGuXh z^Mf@EAGjywEOJlMFG?o~@7#lY>26GoD^I7QcIe!@6uJBKrT@>QpK_P zX3B|qweLTZ{(o+|UW(hTlRN3(q@7IdMSceEN%@_-_7Apk;-71uF8nz3Cxz~F4CiC6 z{|VAb_@C|Hx^-`{^Ea2i%A%Gvu2sf48Rxx1e6K>HGT1 zx~KW38~h<6R~lnI|OW zarr9$eff*rQ{e-;lJxtx)AEOM;oKd)p?eX%N%}54dyxW6c79&Ww=iE!=C5Q-eq8^f z<@D{)jkD_Bo%tG56CK~-?!r6%puJ`KPnQnH*(=lO6!)tx{o;D`^MPzVdUx^xe9MfR zLHQH@yLKM9C;W8o#qHsM?au@EB)oGMdNcF1fUbmZK3^$+raW19CwIks$aDAQlys7E z7KKlhKf?#qqZ`-M-O78+JsEeh;eGqbx*I&Ia$L*0`}W|*{o;1(!e{u|z;v#y?`5u) zae{66RWrKo-H%;YKi^!Ja;J8OYp}iWe_9js@So1s%_C=b!KhMIoCqJaeIhR`izNav zluu3~kN`x{VNG&U;#lpLx~{KuE10&=KH@`+4qVt?m9J`s;;=ahtMOP>gKZUiyf zkO+09K9Lue#Y$2EIaGA{M7C}_%tRW3M6kaC$bZ^E&M?IBC3#_4jZXo#Pox5JFw#mQ zTelr%B2-fPlAx!Llq7JccF_C`rVY$j{oFPF&X}UJ}P1jq=NBi3JT>K2wU0be_Je=*ol^9 zMRqPX)h6QPr*&Sei-@o%%g<>@#PO3Q2`eh6Z8rtErX|@+Z6w!h(P!91+%$CSw%EKa zA|TnK&y=Dw$4IW(2(u&tX$5<;9L`3Vor=(6TCx$cbRBC8;;N)#=49n=E)vle8+JEd z?m{;&ccGh?yU@+c-MilPE}_E99XGooQ~SxO_T%8`yR>Odu`Vr%A10FJ=RA07V*~%w zxxT3ijkv|M-dEpf?h7Wag@S3VGb^xjbvO2}a`PrXZ>kzGm*%YbV4=LTRX!&FT78-JCmKB8>~3lCM265-Y46mRB2~KN;{=QX(>Wv zLQm5Zt)-A9d_;!usjclY%<-k7iaeLtSg9tLAl8>^D0T@U*=adEj3qk>$>xXmrR`IS zhtnfGoKS*?)0wK}Vc#qdS;8z2CuVr4#P%!2!&s@tm*An6s(-drOe$Ndv6)i&=mW86 z+|d-4VZZZ5<^sDju)!>Zy%XlX`U&`2^6kGuRlnAbCLY%DXejn!m1rnUNG>aEqe~FU zVZ_Pspi(tDEt2er5;e-<%+=`NEbmytEbm5Uc&DWrQi|AEsfL#z)|YCi8OmhyT6rwl zMkJdb-V@u9C6-BLi5-?9R!cRk6tPnyRWP&!v7DB;nr$paY%JL!C5ZLO_Qb}+On=9u zvcwL~5UbHgF!~C}!DSdDcH7~kD0*QKqNl@nqDGRaydfk;R0D|05ATxgXhvalEi6E3 zwt$#H_|n6D3Wb5K)yDbJg#+K{Qml=2IO9sN*7q1)v6m7DMb=@U-IMU8AzhN{{;jn} z{atCgW9LwvDXg>%z1aRQ8o{f2V+0RFxTrN|TuV(W2^wFDpjhWJssuq^j5}iw7tV`t z=CB79eqa5NG&xlrT5IgQg1)XqT``RS50;|O^rU2XP}K`OP=6P#ubG5LwZe%=hgHZf zcRQvdtcfw{Jga-+SXOa3m&`yjnSHi9hq4*0+==A&Ah}&gu(;3egFZVR)+N^&!!PJR z0nvBahLxeeFaY#>Ur)%?7$K~IEFnE2gm})6MyJ)Cge=DT%Egw9i!3Re!(9c=tOKX6 z1Znrx&r0*BYDQ~!5LGUoFKtt-v=qZ^X}d*A>pO)SGrgtGHp3aEnqh20Ijux9bj=#k}L_Xz*|2vTF_v{WOx{$?)DbfMPI1Cg6C=?Etr<1(e} z+u8y3TpZGsaHu)1R7V@@5yq70Xnnh^F~_&mqNFuuUQ2!J=K4NnbI{XL|L#8b<6PbS zfzPcQs?0vP?F-x(^6vUm@J%AYx)FzZlR=i0hni#or`{#p*Euxq#s4>8lsD*U?K zc1#+A^RMk-$sX+CKx4z{JwCGXIjPk>tJ>!!{D%F4eSmGn^AbMEzZTdn1o(02&>>hY zWezPCAbwA=F z-PRZOo2G58rs;(j;EvGz?#Fi&z)=I4jTvY=nCsbKB48-p;z8g(kBe=Ump<7;FBZG0uY9IvB>d zWpF`aG=S3^Ftc3?pC0CI)9F*2q_rIGx8QWt+B4}oFmPpRTfwQz%%!&0CL;bG)Yio? zti`j;BGlETsO9ZQp`YopgDKP(RzXA;BgeCX^1pG9D~ z*h`W2EttH2__ku-6RrO(m<=3z4}AwGWp=bTpls|^Ijd<1O4tB=5lYQ&ca2$sT$ZAI zw_ugH=^>`lUCP~n^s^~ADj%%xXC4e%I^*%v3EzFD20Y$io-NelYs_8KtIT7C8unT> zeX(}Kur)CKkUu_yxi`(N6%?2qAJ})IPz%8B9r(4!4zFjyWl4g!f}}+tg42?7@nxl8 z3EnNB{Kovz3~u-dbP}gR3DnILSalbpvUVf9>n+bhl`stsq+3i^KTtEP^K3Tfpb*TO zJ@8fR!xrIbc^%5J+^`R0tgXNWwoPBR$HHrcmF9D8;tdG44Q`wOaOB>DVk+l1BPZst z1;wC#q5w%#F7z2hRDv|Xh21C7#Ws~OC^TEb z*z`0GJ^VtjZ#rVk#g~s0Q_$_VuLfn#d26G0rs|1``dWN36IqY^FTi&fO3L!M2$%sc zutj1`>;chRZJ`~nyO_esfTU^_;&B!g&SETYT}?7M-~XeLtVPIkk({4>Vw%1d30;Xf z(R_&6Rvg$xJKbv2B$pacCLU>S07ot|=fh<)VmDY0UxoDqm`(!c=jr=3nm#p z;(1`**GxqKz*CmL;<7VTs zMP^YOz!bK{OHp`V$*#(Mg*Jeco$zG_^r5{6#&P&k)DTEv8`#R3cUUOQGiD${&xQsw zo2_6fs(K=Zlj#o3u)zAT8B9cDus+jpo{_-%G+Cb}=hI|;nw$@HTod7L<4m_c)1A)@ z>oddo%&|dI` zZJ#Y^97eFW_g!Fdn_m*IscfWlyJw^b_p*^Z2h(kzk#QzE z%ld5Oup#^QUtzvsRF#2>^VJ5;d?^PN=c`dw78p6wNo48Orp;U_4;2Wdz?OP;a)T< zD5OSGv8X7otVl4Dbar_K^pQ#q74gW$qQD$wsE9{Oi$Mhu(jt(v!dZHKT=w{m{X*Vvh>6y zjFDxyE0trJ;jXf%Drptxt77A&twMU^6357quBezLl42E zI=%@?Oy0>!#T>QHZV7>E{0&ff`b8WrI$b2%VCcac5OE@&u*1jJ7GMC(@k?sx|G^b^*hotJd1_R>4 zJZ+iTZZ8a>&(u>KkELF`5Fx{auc&Oam<*K7D~zOa zP(fbBvQR-@8p-9w1qenh9e7GIvjgv(njLt@)a<}J`q=@Ny&F=)&_w8`k3n`tj#Fcf z(_)TIF~{jK#~CrlnQ6yq7|x4|!wt>cA;4dpqm|29x0^5|SLsMixS@obNVrFJ z4}2Ym8c-&;$war5xD6?8PXf2JRGR-Jj-PJ3Eq4-eKh1W0-A=d$knbj)ZWl>2ciE8R zx<>EoGFD1b!ZC`I^2@+)zpme4+ks2k^JtGvSNBTpLB^yaOZy5_;07dLd10d{4(#@s z#EanO-Nh4nHWxP2!zYRR9Nl&pj*Rv1Sr6Z*$T8v~hJf$P~LA+RpYRCT4k;C~Dr|f?3M+NzY zQFZFYLRXZp&ZWGDr$T!3A4{x;r!>7fvkD(jDk!i<)F~MYTv49ci5VkW4Ntkk`iR<^ z^zo&FoQo%E%(;Swn4YRt7>R>L`tc^Gh{ZGHaBmdndKE@Y%L^msa5a`={1F8jl;P+E z*b#)HolPKY{9bO_kbf9mWrqn=oPV+Wv?+g$?(+AKGC6{urC-It%TXH&uaQ-j7`@`W zy;y_~I?!EJQgObwj6d>JSb}1?V(}|%v}xIDL&UUvF=A?X^6Q!z0r$>r8lK{j(&ENm zA;qtFB+u|N!&5wRC?{UbD$F;Gsv^e7sop*>UzHE$>$fOYKyQV^Q#@al3@=s{7FZ*y zNHJ=vP3Gm96(>eab)@AYmK~nr2^5PFb50FU@rY>=sxVSod`d8$k#S-Ln1zFamWvdMl)AGfLso}}5Lnhi%KgIIS>EVfKh5K5p zDzbExPyt@lBgAvjZp$zKr23wCq_j{or&ODaNAlHLW)O@=4y7@75G)_H#2}a#xmbuR zq&F_WMSX5OUzNYyL9krJ5`$n~)U435u&M5{Ttsb6InQYE1d4@~IakmS(}G%Iq_mJS zl3mIv7OiZz5K1IvyTWLpR2KCm%8+bs%1ggMmFm6nBc`R3Ip)-1EXN9-2utN$!H`>7 zbd^*RkQ%j0B~UD_ZJ<9cu}mPRdn;yO*&#Q-@G9~uxoyfjE4_@I8gfhJ?IUZe(|t4* zQeP~^EJ1~hHZ93*h?tgUM#Q;VeG2A5>4~zHG$pa2SLva*!f2tOvs+1#o}Zht+z-JO zMobGjb4&?(=^Tp%oe87_EkA+0;kd&5!{{pLZOXq`(Az+NT+o?7s;TGGud*5r&lNIH zBdegdDQ_>UUiHJsDM2q)a35J)oetF%QeQ0SEJ1~hHZACFh?o|1MocL&(llp#=Iqej zhNz)bvwJDQq-?IrV?TtqA#z%}nRAIcj^$h|;Y_3Z)KUH((6UPjf7|dD*jBOO=a*>?7ILaFud}bWy56i zh(BVtp(Mp!0ZY<`R-Wz-+88u{6R+HA$-MPGpE>#$LGF$_2Pa)-x^OhV(r8qQ1T1T5Pu zw)b-^whK5b?f=DQHLix?nl5h}NSAM)fn@XM4u2O6Z-!We&VV;tTxd5*a1#ROwqtQ6 zQv6;Iceh4-gNeU1;vB@~Z8Ls*hr0)aTT6Cf8wfY8xJ?&sO9rA4)3Y{kwOUU|lCMpvQW`4^@%pyqhD1vjl+ic94SrGn!0SUUAR#_qu8tsMBlTRdjF zi!N4Sd2>-BYU?1a>#S@f9Z2Xo1?-MGb3>QyZqlK-r7PmhOjqvt!P@@g$PS)HszCh-m02mAs@Q8ahfPFYy}A3yFrK-=w+T>Yf&-l9$s& z(&l9~QRir*Zn9MN@Kv%TQzc6vw*GF5;kYg=skudvUN_{dMg1+YBiJJJxGQjZVsfpF z6A=!li{ZEevc}Od*z zZ81IFv0Q53v!AjuMNUI^*h!6>>&3RyZb2Tp-`eNQ(wEAGvp;{Gp^HO0d6OIWD|15c zZclTi@RMoIBDsH<7yXeFe5`Xjz&%%Zg1Z5f`l+(tEzaH~vRsR-!_5fndCt6QOV0}I?>urC6cv0I zBd2LZ1>eQUX&O<%cQJCBMpW<_BP#gLBd2LZ1)njr+DZyOgXRi8J#z$~UO9sAl5{s! z;I#)yIZY$lJGdA*O(WVnFh;a@a2`2LBicJKhE`k2-hn}L zdk1>v^bYjO=^b2>u6M{Zv{{H16?}R`1>bo@YS(#01mAf?YS(#01mAf?YS(#0+O_kD z)UNZ0v}<}q1>bo@YS($>P#zV07bA!Ah~V2T0?VMDX3-+jPY-QIxzg|A=Wr=1{Vqlh zm!i_o7*XkW9ywf!O23Pd!=@^LAiqO;^#0ZD)=r&4uhhC&lpj` zcOE$miVD7qk;9;<;JX+(O(QD!E=Eq%hzdSqLuZ&|JZ%XO7_0 zD@X8Ml2O5*iC9s=r$225K~ceXF>)9b6@12s3cmBmVNg`? zU5p$CMFro*$Y~l;!FMronnqOc86ztA&LgL3LxOhqVLk^##Dc`~o1hgRj9_n!Y5C)yJ(|`kFYdRTi)PWuEblK}(5t_VkE$ z_Rb?B(as~%**lMjL_3d2XYV{B674)9eVOx!NVM~a^kwvjcJ|IABGJwxhw^A=?_%Uo z9_{R1j7Vos5A8K_J9`&Dhe6TK-o?maP_(mWjA&=?JaQNm?d)BQ90o-@dlw_8X+%4F z7bB->L_2%Nh<5hQBd2LZJA1~^YAe~vg`y&(G+f76`q{HWx`f^IMFMD$<0{)}&$<6aEz{Gbneu=B8O zmAfIXLG(;Lg%-gDdw=xR)0*g~QwLVPCB5vu1aC z6$-bN+bVU_1m7Iz&yuqjUWYw+WBI^T$fl?`;E&6azX-CN;`kE(EUkUfV`NfO}! z6Sif4gIC362oul~Ds3!-9xh=S{BO7hpk9Bd|Sikd#k!KjUHe<^pC6}K{qPx(f~6Cw7{R9@k;$%O5|HzX#~rm}>I zXk$8zvS@qo4eBt;qKRmuVlpM$WtK16GJL~oGdY@sHZCSovTq_=`e$-30vd7b6pF6yC&*_KAl9{n3^G1Jr%Wz(^cJARuYkN2|FL+UP!TXuKb9^~)`SUixdLxS#z&>H*89bB@fO*lDl<>EjO zrxmcaTasN7>@F8y3dchZhn%BfYa-YFDsfXde;XwZJFO>Si=j^erq-n77Hgq3*G=dID4?=D9D*{fViN8Ulm19qvHDC#M1*lRQa$+VTZ-S-b7Z9M3o&txXkqAqt^I z_Tv|xyp~}2;ET~2#V3fCwbl~HZTZ~k?mhgN$TO-O=@8$&v_8G<8$%Wckz!UPqL8gY z4oKc@Vp6NgF>dwn)jcT*z=!&Y5Hfe{c^VQ34?QRIOP{KXJlA}wdx7s5cMZp-kUp@S zO~;-kFI9-OZ7oEYKO>jU|J~^p&)#NfZi{y{X4<&(92ENg#av5NCQxCDz zwiKfDWQuuE^HAAc_<9RJ&l^)Fcpim^ayg-)UScy`(^7W@LQsx*(nFiFqp&jBn`Dm9 z$`CVU0i4Xlx`T8f(wTcX@<(3EG3ivNmColQ`LfFLKqqx{bEjK)Z^CYSN`*p6j=NAS zyyJsEQRMh>bclmAdm-NqJl zZiv_n$=?CF++qg?_66xPZhrJtO{i)J`JAoCs$5U94KBR?!R5e7wo?RheCBB__CxH! zmf$yE`^MK<@J5lt9bZ=-?RO>cqJ->y4oC97i48})fUbBP$ld78&MQ5RA4zecj#!VT zp|{cVb$RI*ir_W{cT?Ib4C8L>3hzR&b5Y)fqTap}V9|BFPu^Ra4w`Q2*$DR8B^_Zs zn*7O_Lu`bd+~P)Qn1spC8ax>A)Hp|-B(tHFL4%hyUpprnK^1-8#cr6QzncA~nn zY!r?V7lD>tXqN8P!&a|aE|<7!-0E{mMGcjZ%+ssH%jOwIRP7}xtRPQSHZo7I0U6Zm|L;@F}j_xl#3pUl9$1X^A01c9JV2E6)7)^ZOB_At2{D#RFsP=iDMe)0$wI7 zE_O^V+mNppGB2BqY9B<)Rh6&l_=RW{QC%#f%)O%KnU+&Vt3ZO%vdT!%lKO2Ie01aD zHI*)`j0=FMWS|m*>lGWJFhS8O4?Y?518UR8vgxluYJ3!=2s2Hu$M?E0zBDfWIRmXf98h9q)=?p!6PK;7opRgt=llXl*JL*>|F%(i6dw3NDyno{0GwHQ%- zWNIyK@9sIOivyviZUtsb)CI1^yophg=a^Ettw%uWOPywr`7uGhdzyOM96fuOr>b0s zn^rT(v#f{**u!y1V=tA1#3Pgj*GAmu8wimvu|cl z5ubb5vL=8#T+N}@h4+0lA`WM=qc9ik4d#zJ(u7taS*QOPg(|tpQgE~VKME8y+0W1C zjShZ~!S9dkew zW~y`2=ZFWuW-@%h+T5{AFPJY&`b@jqogW%dW*4;u6^ ziNC4pVhibtd;xyfSD^*ra{+3UpXNeW>sGLC?P!S`TgwIJf9WJ{)z)obDjeHKHoe-2 z8yYLZ4Pdg89vZ8}Z7DP(H@0(w2eQ6ziMxRoPmtLX9p$UAj81!mpRHnTmD103m9D4&O8;ISe=7 zf<*c>M*tnZnV+P&02Hx3A2cVSoC}XiZEZ=?-fHedf8sf^&3p%M7iLc6-gY3G9ZA^p zF-M^k9mIW)lnuw*MfgpbsRln6;er&GRyFwfP1{QyG|lj<13Fyecw3EuFid}hc_m1H zB+%g+$LDIaf-rr)@0H^xxz2WTI5`EP-mclg1P_= z64VuFu%K>0Lj-jP8Y-v%Q9mH1s6UWWGyq5` z8VIBm4FXb%1_LQYLx7Z`p+HIz7j~4QVL(bzV?q(7q}KKmY^Swm1VU+TjRaEKMgb{p zqk)vRF+fV&SRkcs9FWpB9!P1M0Hm~Wca+jL2}o(145YM80aDtg0x50NQnl3tKc#3o zkWw@QNGX~Lq!b+kq!i5pQi^5+DMiNuDMfRDl%lynO3`sZO40E^O3^$ZrKlN5DVm?E zE%v&uwiY7PFlnW{r>;@ZVj!h^36Ro#0+7;uB9PL(6iDel2}tQa8A$0~2BdT^2U5CM z04d!oft2o5KuY&&Af=lRzDhTrq*dTj-xxu4Kw|~90~#l&9%#Iv_CON^bwHXE1$BhqBte~kCJX8eG(}Js zps9ko0!2dfQ}W^A83xC0YGyF4Foz)&>*1W1q}w8Cuj&zv!J0s^96AQ zaDkv|8ovNn$?3lFUc zn6eI$c1sfLfi4xa0cek)jX;+PItA!*L8k&;A?P%qD+Qenbd{hpfUXvFCeSs4HUV8L z=q#Y?1f30Zy&x_I+#rY**&=8&&|V zJfK?y?EtzJh;!X`sNZ$aF!VClV!E);bSu1O&L~`8*ityR_BC^SRS)w~gj{5r@t<8F zKX*dcdnX_Hlg}1B=|6&JB(4<>#*=3?6=z7^dS7tCet3^)|6}uf^;P&qrAec;hod(n zUVvz{sa~vxsf9o75%8zI5dJkVwHN|u_kus|5g0~jHz6GDh3FG#ud`xMmlUoJFK9bR

4+$*!3{P?O|wlunz=vn1FS(xDy`k>E0QJb{81hU14Z< zgQ49WhIS7-jj00_JuU79O6cAjhIStq+I?YY_k*F`ABOe-7}^72Xb*y+Js5`e5E$A+ zVQ4qN&>jXuyV3HMEo`{OBfvqrkA$H;3WoM*7}{fCXpe=VJr0KUco^CfU}#T-p*;zP z_GB2^e2)ojzJh`_U$sD+hrVfZO`rA*7}_&oXdeSZdln4s*)X(^g`qtMhW1<-+Q-4r zJ|2elJQ&)|Ftq2}c2tLUw!q?rXeo53I)*kM+G%r@hV}_Cv^f={&C3aCp9DkuWEk4Z zU}!Igp}hizHq{@rSHaL;4MTek3~jzki1s=d+UsFxQ_V22o9kNet6^}!268blrH)4@X{qHmPVUbJmo6w-V ze|nLt87;;yay3U5xtdM!B3CmW1NrfbVQhKLrg)Jnn_jIA*UG38mm^|xWRc6qZ7DD} zw(GVmay@5mL->Pso>OC<`zx7wD8a2(lAXf!uT_rc&|2~qj-Eq{bJH`V@J0#5PRG8zFF!L}jvNfd_d!ECn!8Ewob7ryxFbb&Fj$<6l@=UKJUT=hOih0KC zlN;Wr<2X|d&TI~rOhyCglF1k#T{0O9#IeAYbDa4~Qdd2Y-*_N3j%U@F;e=tP1tGqY z@T?j<^I>`+o!O}{%WbD;QkiM}TpOwZKf+YV4^8D*8*)yP%3MjM z6UuU&^>ZBKjN30{`Ic3SFwX~y(ORI!q&7M4c^>m`SGTp8wLFhmxJUIssu*n#)JOa} z0QD8r5r}gfwvbx1j^_i#XlI}S;@1U86{B5&28mxcpuvK=1F2%P2hdRQ>j~5#s26Iq zqoCgK8z!g^kW$+hNU7}yq}28YQfdbPDYXNEl-fZ+O6_1ERRa$JQfh|+DYXqiO6@Qp zrM3}BsT~fa)Q$jBYDXs2a@n%hO0jFxUqx$n{2y<=2Ia7?jR`>e1Wg3GOVFfL$jPaY zQ-GMOTLNMmcd1WH#c4{#nGU3>&q#%wnF@IfkfzSI?^2(gigRo#&Kw|3eQqk`ajB5U z18M5)c{v_(#CPiPFPblvFC@R?zY`MUW=U`nCY=+{VRJCvj?itM`)-o>jy zyn6&uk$tZqKGVEW5Ea??38Eq!bFm~9Dze`!r~}Yj1W}QFzaT2I9}q-E_FDx}k-c9K z71?|Wapj~U`+y)SvL6yeMfN`k>Iw8VAgAl;1!YY7lc=?84)qLlJyc{rEJ;w2{fHnc zvfnOdhTexp1ZC2gyj-nPk^M12RAhf#5Ea><5HuC3d{WRfpr-{j0X-v#`sz;!qQ3f| zAnL0>Er|N+LxN@@m1hOb2KtPkV}U*^i2CY(5=4FV=LAt-{dqyuSAPM>sRHLEs=!A( zQ5E<}%<#Gu#uTO%236l7s=)rH8R6&R%TEQWz-9z1Fsx~A_Nu@;s#aqX$!YLNYxALt zcpOwlw5MXyM0*xgI#kxtoi^QR)1B(O@lZX{o&DnY7#s1l@2l^|`Z1Zh(x$o)ZwqY`Ai!%+z`-r=YOsk)*{kgc#9 zHXl5wM5f&v?eBF}79Y|o-M?Mew}6KzD*TTA{%vEYquIUE+wA8jcCWPm&Arm@^E10w z+W$`Pm9DaTr8|D~Z2Y}8&)Y|`S6bCP)lhqcYN6XP0S(ng`^?>DZ!Zmh4<<2TcuZmn z`x7-%T1~{x(yNI~;eRb@hYCAoFLc(eiXjR$wu=qbL>lhXHZGM9-pz;O!&BDH_L7B8 z)HInxgB#O zn?C$fYE0cX{aN!xNqZZnZ%1x!OUivarhi;0ajM8S0MXo;`0m5+=dCYm<}T}Zcj9+X zRB5*p^+%3y%-kue2P*A8ZB=8=Z+OaYM9ObL%5P!HZ)?hLTgvZtOkF#ptS*N)0IAaM z4j@(9-3g>hyL~`kl6ZFk@iEJ#ayQV6mj0iCB2xT+wIA|yu|Ep;eDk=y?)iQ;QM_?k zy$+8U`9}AAKbt5AM<7n`5;2}dPP*qi%xPrFSi0vs%xQYbI6Kjsu!gx6U}Hj)+w;vO z)lx?HeEZzSAeHqcb0e2{QI*Sa8<109GRN&@V_u%by8`8M%IuklcV)>^l7i2r%yP6| zrxx@5t=24`VRi+|zd9gQ{WluM3bW z|GEOH@~<0^D*w6zsq(J}P(vcC-14zY`Wx;v4=L&mq!jf5Qi}QlDMkH&l%oDXO3?ry zrD!0KQZxuiDH;r<6b%7ViiQFyMZBU#DH;Z(6g2`-dFywY@3bv}JIzDdMgl2qqkxpQ z(LhSu7$Bu>ERfPR4oGPm52UnB08-i}0x4~ifRwh$KuX&bAf;_8kkU2{h_q2AYO&2D zq-Z*jQZxfdDVhnS6dePk6wLxsie>{TMaKduMRS0ZqPajy(Q!aZ(eXe^(L5lfs2NBp znh&J4#Zk=B##`Tp38jmG8U-x|QlM5UJ3ekrwEfV7r5A91zJ^Y2Rc zb|9tuJRqf;_mwH#=L0F-7XT^Uybw|8=B-~!_eDTT_bwo%`(hxa`w}3fn-@AM-8{dq zbngLDx-SD#x-SRPTIP)cO6`?EO6^rZO6}D^O6@g3O6|2kO6_$(O6~PPO6?6mN^J{} zQo9#Osl5?Msl5qEsl6FUsl5eAsl63Qsl5$|)E-3nYOxF+8%yh|_zd9|O)kWa){Bq8 z{550yavxb4d@7%Z%2>_nzk~TQ<)2S}l`mSIgiR1`wjT76d#7p-0u z#6_#`0lD>=Hk`irXGwyKR{tW1i&n1*;-b~}1#!{p2ZFe0^+Q2iwEB@CE?WIq5Erd} zB8ZDtKNZA9tDgztqSem@anb4*g1Bh)OCU#T8%|&RN|NAe)~^L|HS0HmxM=lTL0q)@ zoggk+{i`6JzWBW$p1$}uK|Fo&?}B*x;y(m&(ds`1anb6(1aZ;o{|Vxv)qe}(>5KmX za)h_x^u-?}39e@SQ4m+N{#OuJv;HKAt68mrc>01GGAC#}eNhm^(-&2OxSCZhh^tvt zcDi_6&8ii|)vP)}Jbl3(buMHx5H@}$q_*MoMSDqtr!P7P;^~Wyf))dH60`)Uv!D}z zx(GTEsH-5JzUU^1r!Tq-;^~VXf_VC(r=aCPy#%cQ>Mdv`P#;07fS|Nb*uc{l{RHv! zMSmby|7|#ZF+h@7k0iJs(Q$bL&>%q@fd&iW>5CzPc=}?fAfCQx5Og}wFhOSkH3~Wt zXt&!SwVjGeeFK9c^1VQHk zO%${PXp*4wfhG&O0BDM!oj_9sU5K_ZP0&T~YZ9~zXu6<_fo2H01Zbw9-9X0(x)f-Z zpglmd1ziSoERbW$<#|U^wjH`GSf9TFk>*GeR|3rybQREXg02QSUeGl_^8{TB)GX*a zp!tHX2U;NL2B3w4T7VV_+6%N;(2YP#1l>r*=kR%DfNa z@jvGCg|8OAQ&`rnLzO?ZV@xx;+qwAi6I-fJPU~PX$}U!5Y35$PL_eVR9Z(KaRo`gs z>}j2?SOB9x7rtn7!HY}tvC}(r--hsRdA;&eJPf}LC$?x`VfPtxa?VeD37<>TE|0&j zC4AByTf*nk{_CfD{{Bw&us!fp59^<&dT8@h4{e_6q0Li0w0WwB_60DssX(U9hhN$k z!O*5Mf;JxsXXx|J&`xY45x5CiA4TgNV9ftNBU}&>DrhO+2?R_w` z?}DLyHw?FsZ~>paBo~Zc-!f9kmJzCic;#Pb%xL~xTSi{L@{gloxli`WKi!s6jSW!Y zwv_{G#xVREESiPkd8RQ8zY!voJsrh%Vz9KO+g>(C zPDgEwoQ}$dD&wBgcq0-k3K4#WnT6hpjOI|bh*iknV?6aN0R?Cl@wUW~$ zprdUzfQqN=Ow?^2Ir_9bcGSyE9@ z)+LVyRgmDvZH-l7v*zQ$HjuGNe&ZA03CUIuwy`Q(yIR&s*x8Itz@Up|oeXrOW@VD= zD(rpMvaSYl`LDq*-LkS4h-Q7_yCJ$QKjC zvX7ee;JC|uG(k(0FfON~scpz?BIcRBMeS94C;L@Cg{nvg&K{aaN zlVyxMb;k{^pA0B!E)(mM=+9k#s~~ww(P|*2Xbq53v=&GyS_h;Qtp_4Sd`PW^T<{!9 z7b^o^qFs&gDQ%N1HgVJSlV)SWL2g2M(wriw9gtsas=>z3O|sZjgBG(%7Mp6o#Z9u< zRD-3SO|sZjgVwxB7Mp57%_doFszC`i$zoFtsM#coO*NoqlPosXphh;yVp9$Hyh#?D zYOp-E$uxj=@{=2kpOU3DZjlM8?USOmZ;IM}DQf#89>+(Q<^UkSv{r)>htv)N@=I$q zC~-*b5Fo#_R)Z3U)HVS5rL`K=NJwoXkY8G>!4qak?Fb;Hc4R^=m)2_V%=yv4XshN% z{g4lnQ+$|`;=|MwAEqIm@}UVx`7j-*ukdIFkn&+BkY8e~!J&YV53_*$5+jcagnT#_ z$S*P0;1EH`hq*w0iIJxfLp~gzs`YvB8zv=dPEk8QMeTwVwF?nXsa*u5)Gh{6YL@^h zwI={6wI>2;tuF;qYEJ^vT0a>`sa*!7wZ0rksa*l2wZ2kny%%boJ&2m+c2s-{lI^!9 zJ%+eXTEm+vV&>Trv3POAg=ZL&njk7^V zBh8QC+>$q|QEv7UoU`&JlCIC-m2pe4waB9?++i|OP&Jf@rxv_l4g5|MR10*vAl`m* zhM;ypX9}tZ+9aqw&{={y0G%zUBhWd5Isu(4s58)JL0y2h2nV<%s%LNSsxjaHKyz2#x z1-e1dIG`3m+7f@T8UDd-rWeS&5I-6d!?(A|QL1-eJj9H4sz%>{a+pyPn<6LdW2ev_bi z@O!hMW}vqSnh$ippann=2wDjARzZt^_6u4J^q`<6KnDb!0Q8Wc6M_Cg&{Ckc3F3W4 z4+}aO=n+B7fZi@>InbkmRsg+25MK-NPC=`H-X&-?(7Oe#LA>_}S_|}#f_SOmdj+ir zdLNK$M;nj|e|57xFMoBHUwn#w#`^XUx1RE=m;LoEj8-!->HHnmnm-Qdf3on$YCe^H zvW7Qy^}^RLh)gZJAdql$thGBeba! z;R1*|b5@OkeWb;FWhUL{Av_l}+$X-U!6`AP%(S_$mo^P;Ucp40*Ok%cb!D_kJZ)ZA zMw{1_(dKn!w0T__ZC+PKo2m`kysnHkuPdX?>&j^Jx-#0lu8cOXE2GWp%4qYtGTOYZ zj5e<;qs{BeX!E)<+Ptoe_7E7_ysnIP0}O3mS4NxHmC@$H25nwfMw{1_Q88QUY$E-6 zHjy^3E29FJ*Ok%cb!AM4*Ok%cb!D`9T^VhjO{C51%4qYtGTOYZj5e<;qs{BeX!E)< z+B};`o7a`m=5=MXd0iQ8UROq&*Ok%cb!D`9Hj#ES3~lb&r_JliX!E)<+PtoeHm@tA z&Fji&^SUzHysnHkuPdWX@u$t}%4qYtGTOYZj5e<;qs{Be$R}P`Mw{1_(dKn!w0T__ zZC+PKo7a_*k5uhZI;z1}+7p3aSBzJp80XnVD#l;H-0RP!82{TpOR4XXaY|^#?g}o& zfIq5oxAVha7Q!o>`s|3kP*A@qL)i~6DeXR+5Y^#1}jj)nfe zz)r8w|2Np{75e`c;;^QpD}Sl8o$c(*yr|OSra=Q ziC3_o-poD9aBO~SfJOmPwaCdT?-;n(e886XB%tv?M{brSX)i}ws>EE8 zq`WHeU5#>l5IMVYd;z|XNjaW73Z=Lg?bN0Hi&Qy&nWX*e#P>J2lY{*fYpkkbu7_`I z;Swox;;iNYt0;D86s|c@Md4^5RTPc^QbpldASw!7Jl2Wdht4au_SrP4eCFuFCD|i0 zu70X9@`dGFkt*NHRQXn=%C|aIzBQovLrFbWW10H_XKU;BR2;U zE@D^47 zxSi@z;UCW(zDuOB25oqMP`;~ySig?ehY-(8cnv5E(|lVh&4*KIJ_4GbOk}18PW^%vPp3 zmv3cHB=Me7gJ2e9b@Eq-=mO6t2 zvb;vU!2wxbqyFFkp6q?ddLX~_KwZKCS$d#G;eaeXP_J-6mL8~GI3P<8)G-{8r3Y#n z4#?62^$iDP>492@1G4l$-NOM{dY}g4fGj;w4{^XWNI84qdNtpNQYR5o+Xu)mCQ?5U zQrizmsqGJ>)D8gh3oX=JgwzfK@(V50VT9BU0rCqi)Mtd$HURmB7V0)aY8!$4LJRdA zA+;lbl-iLAwUl{kKHip?Hzi{bwHzS_CIBf1CIb28RO&rK4on784om@34on5|OHI^= zgdAuB@=HzBjf5PS0pypOs3!?Ia14-NYNF00%Kw95W>IT%F z45anFOzOJ_>U()m-*+YbIrTCj57q%G57q-I4>kZP4>kfR4^9D69-IoKJU9(Vd2l+A z^56_0<-wUi%7aZn%7e3jlm}-6DG$y8(i-Olipqn{sT$t`KdtetKuYa4AfK z;m*c~VBU>87_Ult^s5nGIdBb-a^PAZ<-m17%7N>Flmj;aDF<4BlmmN#lmj;cDF zQV!efNI7sTkaFNQAmzaAK+1tP0DZXNN1i)U^?fJ&l-hkjO6^@hO6}c1O6@&B zO6|QsO6?ngl-m1%l-f4|DYb6~Qfl7+f z)%RV=?4=I#sE`AX0x1XH0i+ywCy;XBT|ml#cLOO0-UFl@_(ve+zo zIq(4><-iAllmm|eDF;3Tq#Sr0NL&09srr5rep=rj22yID0#a%}0;JS_6iBK47?4u? zaUiAk6F^GsCxMjOr-78(XMmL2PXQ^l2Z5B@PXj5nhk%sYXMvR3&!p=6vq^nFgez*l zkjVFQxHnZf@I}N{4m=N}9QYEDa^M9Z<-m(T%7HHfDF?m+q#XDvkaFN_K+1uy11Sf- z0i+yw2}n8cGLUlMn?TBeZviO>UP;yWx8bMMeg{aY{VtGF`znx9`#m6~_Md^2+J6C3 zYF`6VYQGPp)cycSsr@04Qu`wyrS``_O6^a8l-i#HDYZWXQfhyms_$RO2>wB6Cpbf= z*0u7pppHP#2_?)2LK%W=X2j~le`T{*C zs2|W51@#AdUeExbF9{k5^n##4Krad!4D@9|Lx8>_XeiKE1vLPDP0%o)uM27f`i3CB zr|%^}BY<8O#BCbi6vS;B-x9=a8m|Z%1N3b{JSqMiLF0hFD`-5>tAe;q<9mW80{yd~ zNkIQ1Xfn`if~Ej{U(i&b9|)QT^g}^SKtB>R9q7k`W&r&}&`hA83OWYpXM$z{{any& zpkD|&7U-9P<^cUl&|IKj3px(yH-flTsdi z5zv1KS`74`f|daNm!K1X{-2-|f&N?2QlS44#B<+&5Ogxo9|bJ~`d>lIf&L_D1yHLX zZqf7&=#QHg0=$n z5ws1cub}Nf{REu{)L+mJpaFu;2O22o0w5kZasB*GpuvK8ihGEli-3j-+6B}g=whH@ zf-V7S6to*?xS&gcMhMyiG*ZxISp6R*=yLdt7IX#t#t6C+Xsn>CaNqklL04l>!FWN} z08J2dEzm?k*8xoubUn~yK{o(R5!3=SRnT6bX@YJ9Y7%r4&~!mJ1I-Y03(!nKw*nm_ z=r*8Pf^G+zE$9tE#|pXwe3>KYPWa6gv=8VwL3aTiFX(Qdd4lc%Y8G@a(0oB}1X>{I zKA?qy-UPHr(3^o43wjIC5<&L^ognA|pc4hX6=>TdJ1T(ppO7;6ZBD_?SeiAbe^D(1MLv>383=@eG=#bK~Dqi6!Z+xg@Qf>bdjKg zK)VEe8t7s{hkz~-^eoVBL7ze0UMlFbsP{dB{t4(ZL7xMyLt`YPlplb!a0Cb(87lE!9^ktwM1bqdlMbKA)_6qtM(2at=4s?^CZvfpa z=p~?A1icJ&tDtWJ-6rT;K(`Be1?UZez72GTpzi?PDd@XE`vkoTbeEv-0o^U=pMmZX z^e;g73VIFbje@=pbf2If0KG}j4}sn+=tn?r5%goA`vv_3=m9}L1$wKXp8@R`^mCvG z1^ogweL&DJfgTd{E1-W6^lPBE0lBT8zX9Sc7TvI4eIH&dGZ!15U#j{*RllmII{HnU z#x&zuX)eC}#BQ<3Y}&;38*C=w=eNI=O`BB<4L4)zrcM9CiDlNETZ-tv8e4y8bIT8H zZuN1SH{GVq@z{z)yarp2XmhI(?W^$cN1I!VXmd*uZEhu^{T$Nc!tz?gqfKQV?YAQw zH*~JWJC0~?v8U&2;eUt4RD;p|?Ksay`$>c^w^@{%^eWvP$<2Ta&&`0eW19iFNsyZX zY4cP+ZJz3<%~Sofd8(f_PxaHLGK)4BCuwuRf;JboX+Hu(n^#`b=JnLHc_klhUN*<_ zd;x~`FJNf@5{CA#U}*muhMN(&1&g)L#ebeA<7Qjh+-ysGyxoLZi)O@4kbK|XE7txt z>gDxKi*4DoICT5p^QJ{T8PE3#h9}!cV<|2?`Oa;}p+7dsVpE`tpWYP6?X&)c4-+z{ z+}V$1-Ozi&&20+woA|gXFzd$ca9Ow7h#QxWCzuoL9zvfU)l(CaQ}`{1wJC6)c^Cyf zXg3MhpmRUEW;{~fWP5qH4e;ou&eWJg{7iRxqv1W~5lbgG6V}>WLU>cik(g2T!I9^< z@0aafJj;E*HEz=pH!jBBuIV>1absS%Nvjs`Nz+YQbwEdITq&zj%J8k4e2=DX(&BqG zb(7XOAiv>;oBVh-IJ}g8A4;s3(%&arH#i>fExV;mZ_Be9D1+aUY*yiB{=Pt^jekGp za$Dbgf41LP%F>j|(fO55oxbTDxVYzYxC_dEM=v*Myg5*Z*O{{eb$B}Bao`YI{~RWyfcuh!@B^fI=m~8s>8bhsXDwnkgCIb0I52>Cy=VcdjU0o zR<|9cH;``E=mRuN{Q3f^^1mODQrjO$sT}~M)D8qvY6k%+wS$3_+95zn?NA`4wgE_~ z9R{S-HUcTN!-16A5kN}qNFb$l6cDL(+ciepcP8?^iL24dyz>8UZ20ghq5|$18X>3( zXr!QOOtjO=|F@&RajDe8?@>WK`tc4y?SS4Xs2=EDg4zSUTTlm}_Xz3;^pAo%0limH zXQ1~9>H_qBL0y49AgCMA2L*KpdQ4CcpbrV^3G}$2UO-O>>J9Xypguq!7StE$DM9^! zJ|d_;&_@Lg0Q#7qfj}P@GzjPuf(8S9QqT~frv(iKdPYzK(5D0q13D>ZK_h`aBWM)RX9ZFD|4)Lb{QsOFD*rz(XdKWNfZQV$mH&LCT7gq0`_O~&rH;>_ zMV$*3uYaVfHO**W6+cq7!?c={Yo0W#9`7HiZbawp9;rrIn-d^D>hKk~Izq{@0m%Ki8zYf!&Y77+N)Vv?M z{BY_%7~T96oph={6oXah&y$H^e01bF?{Z@o@2B>|GZ#*AYM*t36vM3_z2tH!%HD8v z_@Nu;>RC5VU9xVRY-HUywI6;&Q~O2cITZ9D&LbK~BF`lrzG*}{%Yupg;iu$cGQIe; zeG$s)22QGh7A4bRo(Zk3u>5`Puv>+R#huB-ybEIYw^s-9`oKYn|6ruI4t2;5xe9G* zQQ|%nVZLZN$8$&xHr}wruQ58EUxc>Gp`O$EmC1y-A5g7T)KFQYrgIXq3*6j(ZHDX` zgz#Y<9o3*?h3w_81|2Jcsrvw+=TTOd`#>O_$PWV2vpa*KI@S%{dBWp4F+hM+(P|DZC??7!k zp45WlJ7g+cixP%q=?dhhw6)-ISeEWUeo9-58V<|S6Ua|#`Ie-xEWLrWEPa5qEPa98 zM0F7O!1mxxmXpiC8UJ34ZT8YoUL0D^P;KZ8PZ7Ict5Gv-9qflHzo_IS^Oc03+yQfv z`KlmZRPr@JJoo%{LAC9eRvE1-E%N%|u% z?Cum?0nHmszAZ`c29xgy;teL>6~r4%UKPX}Oui?GH<OucUhxJ>@zKp;e&Xkz$#q3y-KcbFs2#tDxR`-u#LQc zW`>wJ zw0RW+ZC=Gddms#LUd2G0S257$RSdLw6$9-C7}~swfm3i!c-$1c5$>eEv$eY*zrURJ z{5h0?AKuc!5066f!%i`AvN-%#Fny~Fi*V*)5ylo{4lSr!W9CD=_2cn%4>hcN zerzg*0uYC{)MtBrU$dP9Tk@&Gk!gH5Icv)l{E6$1_7r?VVK2)2Yz?&})Q#L^X}Q_{ zABA@4Uzt2Q`2E*wFmXQ}9udDR|b6En!q-3Qm0|KVC!5iAvUulZ~t!hs|sr9QsBj8vK^RC3ZN3 z6K>Gvhl3;A;vU-`9jXFi$sFRklKUVDx>Jy#y4>Zao^ z)hbH?UkA)}L`M(%<7*L$^tkCb?*K1vbUJ>c`Gw^Mr`7!pZv-EZ|m5;usmhB&>X{Cj@sRQMiD%ppm8HRK3OgO3(lxPNbdRK-_=s59n5d;+s)Q?>87oC-p;s zbW%SQNGJ6TKsu=(2BeevMj)Nk4+qjo{RkkP)RR+eRjg^xrD7W6E-j#{1*sLA+addY zYVT8Zyyw*Z`qb3^`d~WEyX3uwm{a@f?Z`o{acX}(xa#=Csr~iAbh-nO*AR1Re|<2W z?gZ2z@j9c#Udzp?eOQ*RK;hIrEK7Izg;V>mEIr{DPVK|8^oCzJwGYeEHz~_Ov}I21 z%kgs!`euVweXi(VX>Z%-jr(f$2EV;4@8GB5UHe({2GkOH%f9X^C>$Jbc^~0bDP8x~ zDP8w9=GRF}<~08r^BX}tI{aHfd|$xt1hoVDS3&hazZcXV=-&i&0Qz@99fAHsP$!`O z6x12$zXWvw`hSAD0{yq3Zb1Jds5{Uf1oZ&=qoAHZ|0}2$(4PeL25J@52Z)`E<6vK) zf}nmtRf75hRSOybR3m60P_3XrKy`u!1GN)01gKunP@wjL8h|cm+lkCd(5FP4@HidEPFVhw4Y+Yip*=zwi|p#+=c&E84ev6e*yE zZ|tp@J;mI>pAxaRqx$n9zp1@qWMA<9=|>Mv1^lB&NAm+d9mwMY`!EbYwkz|G6zE6c z#`9Df4m~a0#--e9tlP+x8x!xCX!T8@tId}Kde)7@ap=YYhM)EJzeA;8H?h-nLZJ?# zL+7IhUl*jN1KbDM{@HEIQ6Kk<{&DU6PNe0AJNDxnO=p`2R~T!7ylHO-#440Iw)tfz zdMQ%CzG|cCVpAY;Dbyu??eIdQuGWu_q4o9!M@%h!QN2%#%8p&88^SYXs(p5u?t=JQ zBtPM+LAwY;)~7`pgV6H4&NclW-_=NgkImap5juACQ-rJWq~oRt?NRA$AY62)1_SwY zNH+6xbS_`z&`FJ-8#+6@t|7C$XkU+~%erpn>CP{cI4lRqRCEhrKv2#hiod zn*UsvV!l39dTy7p(?jKJ!BEJda(yoy`Y2I*`zVGK7j8<1%Jfi3jf5WxJKJ465bI=^ z;yBhhGjwq%>}+?+XgH)^tiP;6~el{;RBx*`JBrY=jSpjy@xuYyPcZv>`ele6i;YzDZa_^vV z3(GoGo@cdA+{ebDlJ5>=&dX8a^l<6Z<8ZknHC*mU4VSA@!(|wfi>o@Yw#Q(g11lF- z2Y@y=1aon9U_vS1>%yV5As9**!G8zh>wj0?2HVe{Vorr|OPFiz0;c=F8YvylkUA(S zmm5+C3*wME1gOnJ>QG67Lu!L0QFcgmrRR`3Op@pb#KF}Kx1E4E+};Y8eOPoG0Y0q4 zFFx=c=5R|PLh=|$@vD;`ZtsIy^Di~rawre)I_L1q1vZwd8a9>99nhFwU#Q}gq|#w{ z`u;!PF#NZ_P^EjnI7tlmdaY#6YRNu zb>k42J^BH;gtlrj4HR|HbWRYr=?H|jPpnno?0OGkNt1*Z-ux!cQ z!HV#n-HnLn26DES5h$iZ{jt?=UfqT33#a&zg(ieBt;sI1&+{L|J`r@uy)P%mci+j8D z#a*??OJCf@yBIIi+?8kUx%53tf9iEnh3Ai*0Zgx2r5^y&TxK&l1D--`Z(+q}ItY=G2{N+%{eT8Wl?yAs%jzeM; zF@D;nSK|bpj}x^2nmg&ZqmDc2XmckWZSJI_&7E|#xs#4Ichb@3PCDA$Nk_ZEKAF0m zbi`b0qs^r@+I;e&&80TlJhxAqhhk`tfuTJXhIa9x7}i4peBw)vyk3*q3JV`2YOy@BT>N-j#|j{7;`qSf z4@J18p(>QY#pO!@5DfIPB#Ys?0(}W-;L_$QvocAMt0CC-FQ^`9wIFKb)(GkVr2D*> z6X|7*gt_n#fiue!j<9}~*jJXFh|{oZa45i=)d;~dk;gh|;>e-zFXeF>eSaxea89-x z)>$)LR&(#89xP13XWA6t1*!=YBS*))hi)e@VyZ=WQR~V{d2OJw9SPRW9>3(r1kFC7nL}Q{e-8+tR9Bia9R&O-;BHP z&HK06_T?;RC*|?!56y*7-7AiNG37+i+x3}Pk*=D4)0QL^- zQQd-&Tj9fxFBAF9{P^K-*7sCU!FPU7v~L2Rg#VM^LVGIS^gRtehsSe7d;N2iIKVn% z9kSlp4%mJuYn;DO6e!Q^W!Tmz)09;ngX3{Gwol3y>zZwb>segI;^8c=Sn(;Bt5aN) z;!4yYdM_%0@Xb9Og)v63Y*!3&3c z=bQ|)%TF^?v(Tdizp)DbIYEK6`(g}%vgU)oJE8XZ$4|2&P1g)Ng zysS5U=u1EPGk}2%Vlep>FobaT&rk{(#&AY3k|IVinlX$ePBA5nqm=PXU?P*4Oo)tA zDI>&#kONO=1_@?T!7OGohq;7kK9Bi?9B=^(S;S(Nu#{yiX9X)+#cI~DmUXOW0~^`I zX11`EZER-;JK4o<_OO?I?B@UnImBU(P{~n_ahwyJx-rLJeGU;`akU+|$LP#$YN+2OUp_7E(CNwD_2q+pv0ee@# zj>cd`#j>s_Dz50NYhTx0ch_Cl`G3FX-1Gb0d*8Y5y-8yEEAM7<-skk+>G!nvwXgPk z>G3B9{h&}+W%xN}|2IqLnQHULwvMLOvHhPmzUjG#G0)?B4u5}aYipzS3;6ps{(vuk z{y#~9j&;b$+8Xn8*DrT?rZs13k>NiuRp$NqXYjuW-Gp4X7=OR zX$pVJ&q5oAtvSZw7z)|k+yIodDwN8+sX?jifEaZ&olIxb#SFAD?PdS(ZU29tb@y@m z|6J1xei+kw`LCwTf;*Pk|Hw64d-vM^>+S#D@PE#H*t+?S)tPDrnP*|Y?dDgqm?J7R zxdmpQ*^6Yj*i1FU%!_Jj?l2v4i>%3Bv(4H%SvF#E$Oz>FHXa{mVrAH%A9bd@4J&C$ zKg!!E7fRdBrEL7h%90(*AQQ6@$P;H;E`-u)K|ktDb{vM;I8t98H*xuo*4t(q{(?O8J3@mPGU%wvrT3lI$3 zyHx1T+{IxT8jEE{WMG;!VVUNe`2o3hoAKzlZ6YS+ zN(WmkT{=LOF&xxnl-j-~cOFWo=7E;lq`oUJv&{euIf71-n4=rya+|V)`W= zsz}4~OAvCQl=D(CP>)_hU%}7s+6q>6{~aq(KWFuO81o z>*tVZ`f=$w92zzqFf42?G#5<1pH2Uv8T!Tc2Uz>X`m;0q8D3Jq*q_N6{?E+tXMBeJ zCaXWj%k>R&0puNoH--#umBa+(xet|6kMjHPCnIJjCmx-LU03%HLsLU+g>oM|*uqpK&&x z;?Fk>YDIHDFV|piKjl9Pl8dLaFX=E4U1MePx^N5LpOpUt(W8g_8I@rl5peNI`P1L) z7sYdY(EqXC{;PKFa{1`Wd2zjP^<^O5v_tVk0tVw#1O1#qX<>xz$CU?uwe3}%)Ai}k zIi?)CA2TZ|S5f{teZ0M=^gDR_*Z6Yy(N64N>e#i@pBs|;5}#Qx#<0MLo788dTs%8k z{}KOL_+mdP{ghmtV8@0l@p*C}<5R5PwI}sE7R7UX*RXx3@8Scw#DAyX*@v4-AE#fO zZpHDL+}Xv4@u&S{`V`wgIy4;5cXy{gQ!tqh!(;v5-qFX&Ra|ao3<{^G(=WE~@~b%h z@qCP@o6|3jztd;*LiMz()i3ZxHu|{uceDENKULnGesOv0?(Ivtb@f8RO_jH#J_C2* zVg%^onW~S){y$aA^eonQ`O>o}J`d+P>QBP|n10mHdjG@z#Nrv*_w9_NTcX{QdNe0lkBZAxR=eur-@7P1r}klbO1)0y zm$N?(?Le;QX@=tm*PaynlWu2v^lY``4d=hsYp)+~ADI4LKi>Yt^Tp{qe;6O%UpRmI z`0^(DE}({EAlJtzt6|CeXpO6zt5MrKj;_EMuOXqtM8f)-hMp(jHlO+`$M_BzDpnV z$LFuB7o8ARvY$HKgXvjpe^M9f7u$FG#p4ZEu8P}RXTNVzxLN)W?4aSs^Tp}Ac*gae zKTN_LtMmYV<0qY-J{_Dt#r>W0$Mrk#w;Pi2kHs^R z*ZI>)+xdk5#rm#17niFneHR~T&olGOr>ASrRo))CR@<)?=|}BtTHoh;TAy7g+w-)( z4>zm7aQ2Jy@uQt?sOw{HkoJ-3{Asgq^s@0c)-5nMCiL0sa#gSo{-4&wwD6y%>WLi@^lI@5IJ3}86gI5Lpw8InjVBVAGR)k_w zfjDfgyeB(%9j7OJNA#XdYhugdKkX2QFSy>5*r*h`?eK(+qW9#v6``0^kR}6To*28B z3=R8fM@-ODAtrSwomKeO)|zW`UN~{6_dhop(aR`ooU~AJ_^RwbJ|-22!v@%UGOda2 zvj2EbJX6hx38%rlC)i66bI}e@IG5u+d2U50CKZUo2@LPa&RxgpNg?J5R{TN!(++V) zz>SZ|b1U-R2dLhY3dF(4NIcoO>o`5(WS)-+-e3YTiD_kJF=rf|C$_}?;t?sG6o-0` z>?~ViM~NqFsE;!yjpB)o$>+aP91~M3dKo2lw0Kf&cJ8XMDQHRcJ7eHU9!&uIon*qY zW~cQ^Wc&RokH^Bh4ruvZ!p@&RU&QGY&|?Ic6mfgLX^HExgQUIR{`R-xpU=Fwy^JIq z52wBu?c5cr|7xSp3RuID9->v_rA+MW~tA}P{II}s7k zq`mp(o5g{TKwQs9Ag<>l5Z99kJajOr^>sM5;>K1r{9t$&g|)%>Q&! zgbGLn{m~ReN}Gt!{cCZ>#NMcMQl!UnQ>`bi{K)loAFM)(wVJjE>gvq{u_1IWXWDAb zD(t1)XLnUzY+XHAHQe+-OOTt1EheK(0h==lW`Ws`XQ#Q;956HC$&{o=`RQ$4p`T@+ z{?gl?^mcltwPJ6Z;BB^j?`^MAv7Hf!?UWL+Wffv`~*`=`^8F-)i7 z#8eupumeh^VJKGPOQfO3YG686^eP>zv8h;j=Yz4h*V*J&U|21n<(7ZFC7C*^Ri$Hl$RJP78QDvP6!uJ99ZY zG@W*gVLI(brP5AgHLR4dp;$GP5Z1?PxEW4wvr2i$+j@ALZQl!9NDE7^(!!2N39GRh zQA*gUfh-taLRbzcN%hBlg)n z=ta(RL*P7V#|t%zLS=O!A)yKoD%-yEwzFwO@0weP*zABXL-0of_sQi3w^bWwMjiH0 zqe~@isKFUmB58e#(H(oQeTpCLVVq^;bLXtTnS@uh+!^qPS;!`LH-;n3i80AAt9#?1P_aGd&0sT` zZMHiZu^mZyF}ynf?=FLf#cg&!wAo?1&bzMYej)$qaDJIBSSk5)gCM^*^@2R`Yj@OtTd(#);EQcROqHqX?zUce zbLT8?PHF9cSPjJzOc#?o3+cBH#lV*>O~Fa26ztsA#bnv`Ue9jr2(SBNb8(>9viC@* zU(Z1L`5q*1PHU}(cLU8Ftp6d`_dv+)7<9x39OF{4?BCW2`CM$%#c;TpTdJWAwFqNM zG_<~4=FPm;8pJej=C{_hZLjNRw#Qmp&cD0QLpbU6P|W0xjaB9l^bW=JX!CI0+4zeb zL3t(qdg9rD%-Ux2dOh;|TKjD!5`|5}m3WDnX4c@_RkmSL8ytV_Mv@%B8W;*2&Xe(# zmG4Py?p@WsFX21X=ct1(t+WvR*9x_jfG@|69fQ(pj$oSQNE6*WXP$%oU3l7{Z+3z0 z91z~P_|R|bpY_4|0SyGyX5Bpp_ib%Q%n@+g5x9lFZOo=PWG=|@W&CzbxQ&EsOnK!tV2QhcW_bw; z@$IIc>HaU&?_l+}pvbh~Jiw1*G&wjBMA#q?aj7qe)HV z*GlN$ZswUUolD)pF|GBjnE+g#jY79+3rBbRr>hXLk>UG$+Y zw+2;o2}0Zwi~sMgaIsOdMK+#;%nxs*Nk_O^2_5Qgf$L@P`*sZ8t8XthJ;R#cj?qBt zA({@2;_PHEAZ~0_IjSkdVpsrQin7OMcb!>^P?jNnw_``;Wk={sPl2$|W7yKPEd8F}1^GvP|f5zN9y~?~dmuIV$?~k<`+Rft`fbj7d$~AenR*++G zd||&Bky?o4-ivPsZ1=haI!hzo36T~<2o6iO;g2UOvBk(Op#0kW!3-_@1alJSVAiFF z$uaAA@^T;SyVi0GvV?xHBi(^5PdV2CGpIc_n5~EegJuhSE!(igcw63pc&s#R!{}-! zILET-^Y&C2t+KUwoAtZ^YrCMw0RVgM1Bj-k{C0%I5OyFMoS!J*Z>PB$I_wUqvk&h1 zZpK!Ee$fu|jY7~3^Yt>c86=*mEI^0NC+TwQ%NRtOC1GrG7>5>q5t45@T+G2AUni!Z z+3#2l$(;7idauocP@Jf*fr^nx3&Ot$f0rSqjE{4G5%5AACFaBd2))xr+NE_jlUoj? zRBPalqp0{O#-^>yNqXnoe-x7Su(=K1`Ozna>FeRqH5d~uKsDQmBcv#&JFTBgr2^u# z2UI|cTxu?a&UUyi*c84J4w(955QnpDjT(!0uN<3Tis2pZLDF4iy<&;F#+tAQ?7_E7 zBD-Ty2G-+mEQ)V#DKvSo*M+Z+SlIZEy)O!NDV*?F(71Gz8Px(3g=KL+BJVTVWx3DL z0z|nOrVM~4R1e^BDZC#!1W{ZpF!GK^3ge6!aL~I@Ftb?-rXs5+qC1)HV1@;2!eTHH zg~6Ik!)ZT)HEFUYP0pmrnlw2R&T&nIzI8L*noM^lGpxxBXEMW@%y1@r_nC<9Y&v5- z58e7qn4)N13EAUCi%scHOb_PfAi6f@PK@b1(AIz?VC83(b`8N!ya&2DzXmvC>!$iB zV+}U_w!?`ZJ~wbY(EwYMBAa`WlfG&d1w~!dy{U zdy&;nvMDIdE-ajXER_K)8_toI5<0FZ#Qkv0ewk@G#a1Rp(^ib^(#XD&9mY;uSDk8IpyNOzk(O7BHbZ57s4&9nQ0qj+VfrG@Qp$Qkhv;|9Wsc9;Yhx{_ zs~Z)DTwFisFwkVAlPOt8Ds+^rCv+rT#p%Ueh1aUMs|Y(tRvA`KDFtB%K2ej^g$|`v z3_FaMcVAU12ruqTt4T%SX*u^*q@wWDnN|-vlzb1%rzPB1jS3>Ej1yV2VC|vgG zSh|W*Ar=pnDhxMV2PzI%3$(8X6^E-%wJy+cpphs}tn|>S!U%`zM8#qHA|C82vNOl$ zY?-bi+k@iz!6*lsjC3+3>qv!;lJ$g+q^oF=uA-msA-z_ztDqm8f7pk26V|jc*7;KD zUP0WrRH}a1_hh9^RQ<4nWQC*yDPv&=KFdmUL}7>V+7#@F$~(*Gh_W1NE%Ftx0{QsX z?q7AZ^3kD`s&IH(e}WxRIY${CQI@lGg<}MzDJ|znOG)6JCG5DkqA|oWr7>B_DsYgj zV03_K8aLk5Xr-%iyhgE3R^TLFs}glTI}}Z`qV6u+QL=V1q(B~}v7C6nHbr z_Mo^HGUPzRluo8(O{~ySvNqBYW^r9@T!7iNMbNO5bDXqTg$Xl1JKMlzNN11QZpJmG z>E={ZnrkrOy$rsd<>%)8`p}8a&U5vBA09Vn=4R5Z1vs3DH|)4$TCc?U2<~5@)qRn3idD)Z zPN{RYIvxw`R^dGD41+IJ#)qbK-L$>U*+t0kMX|Zn-pp>NS$eROX))d)v)RX$Nnszg z;`m9~OsmPpS2~kWJi|?{bXXxLS;HCI`;>E_&1;!3iW}9Ea)g^wI|IE7LlZGSeF}mr(wrL7 zoEFk-3TaLcY0d~~&P-}fLw8;jC8wE+lG98@$!Vsd?F;XUBoP{g%m`b%GQQQO5t$9-2L92{GcbC(TM zT-WG*UWQ^xN!UkmP<|!S+pp^vY&mdV`!qUW{nfpa2M{o&NXx#;G4Hx&B=~l)@#G@N3rE(N3r~?$?-?lb}sAiCgNI>1=z*00u4+| zd!lUYh~AN%ZPiY`tR#n69P8N^>(Y*r11&nTGd!go`A)oe4%PPkr5(q|PaLxQy&n~X z8+WQhFGjkeaCI!@XLu@A7I6wIJB zpb=n05U<*458{R2*PC{PA9t>GhaOZMesTS2SNQ7Oh3{WwGAe#reyt9^9R9U% zomU*TuNLta9n4)-l5xJZ48QVJ7=z+^#pqX9Xp?oT9S)QAiw+arlV8_NRdBD}uI?%9 zC|TXuDkRb??8qm0neHjrT7EFRnlBkUw09=s`vWEKb1CLSBW5 z7phC`3Oik&=s3|mWoMkv`3kzHY)^{o6=RUm6r__bS-0BZFj>FoFws5vb;xM8)DN+| zcCve-U-5k{b}F*8llTO9QHu}`MVl?Z{F7*V!j6)anjt01WZ03<)-s)7*m1lzW_E(* zotEeXvm6&!;tJ&rSKy*HHyp0kzsydsoWl~GV3yN#rDbFj&1E@rJUlbm2MW|HIj9^LTB+>S=5$jf}}&!wDb#9iPkIIVX}5I#Ed)) zg;>EGVX2TS=yEG_t~HecBzmn<9u(KscE}&DvGgFLc`Hu9vR!U=Do)j zi7vNP*xs?0I^9Q8q4dSIm@%lZ&?akgI~*o!Gacewt-b~Gp!7u9N}8y#aih{*Z-vg{ z6`jpWLiFs=G|7DzT%p5cMQ4bKie5Uz;)+fW5*01mgRJhj!tmqHwW7Bx{Njq<4*A0s zogO5Ldba#pSL5Atg^8z*wW7BxY+qOX)DImeDtf7id&gSpw5zUA`r?Yt7*tqjlNG%k z4wDs~4il3YNtx3vbGqwphtqhiX7f@akOxz!>?(L3Dag}d(Jk$#p4?p8uqTNa-iq>9V_1h_kdZ5*x zUbHI?z83o?fF3kdp0g~NEFR%k>~_SYxG7*v+EL1r%|SaICz}L1PP}fXHput^eqw`+ z*Gz1X@tS^vOrl{=ugbgq5nL!)f@=-dW3Mp^< zO}^aWF(c*CxOfg{d2~9KZI;;kIhNQ3oYnUKC1x$IhT)nnZyQL)?~p;w=FJ`cE*Rbn zu^5d3Z??F^Zj#_81deUT;!33Oy&mpvjqnB&e`&;4xaDm#etUbd_f~wy))w>k4RdV^=_%d-4L>v%=c5L)yIYB;d)^u#~J2LEAwoc}Yjmc2G)Q;?=+l zi5k%EOhS`16}iJcmAQQ}*xld~^e~tZQ*j?y&~`8(c)?4+_Ox(9ObaK(G&IvePl5@- zYh;49gV{aJZow?d?rC8uc{xqMZ(ddt)D9NvCM#txpCwCES+W$>*57T>fa}7doLh|A z>$;rv$iJnw2V0C5cNH#AjINb&RfOH?5@@bMU1RSUZ7}tQ?k1w>2&mKaU9~+G>a=`E z9nu~`R5h(VxH0(7BITy)B9Rkjxx z@|JNw;tO1;=#EI*uAWt&qr??*8|xc)!rBBN-yF+k8oM$vHNfS`+vqT$8@0T*sG5H!dr8g4{j z&vRyFTXIxj2iHlf+Oyjwx1^!(;R8m#rwhtoY6#BY}by-?_*r8o`S1Tx1lDV8wSXGKxm9;?qU2;yZ(k zq7kh4bfMW+vf|TfX2qvrM#ZO5M#Xntx|=HSvk38yeR?8dZb(?vInq+Fb)Z48b#MlO zBH#=Houe}d6ai-ts3XoGPz0Popzu3`KoM{Tfx=INVC&!v0!6?XWJn%t9h{2{$=wt{ zs&+dUlsq*opn(>%%wd6ZpOHYp*1@^RNT6WrKo`N*!5L&EP_T7yE;14**g7~D8AT)5 zIye^@MI+cc&_%Fya0VGgBiK67g=SmH)`32{$aOyGyVgSS$jRWLeI^>{JB5wli*fC zw>vie^MY(&{7rMZ^P`d<7Ib@YC!+o0^=JI0Iqt>a&JUWf1>1vdtK1E74PxLz=EhUT zouRUob9Q+*p1(=%4D4yx2z|zW7j(II!u@zLeK@}T9`=Woeb8)9uSMi`a$BWtn&2Bzn@WxWqlt!gL&Q(emI6 z)N#Z`J<&o%Z%UTSbh>EC@CB>g;;0u|xadjA!kvysvVgVQd9skvd9;Z+T*$PqE7{`t zUN73p9`=iEZbRvo(|3_217k_%jsEtQ;jCiq^y3???cvNU>!r4Dx3W`qBJtOyH)L+V z%<7Waf4J?H>_Gk1qi+A6D-+zX=x#q{&%xi)ooKfS`VEtGH_>*Qx^2>Rn*}=n;ATa) zeUqIoZS(3{cV7{IWp|%#L5{zJ#S6&>c<7D@t+U_U!6kdzgo6VYFLw0MS_Ngd71>3> z?sD<5aB0ZykYhA#ZRFtx7eO`B-E1W-a2Q+C0^f8>THvs@qy@hDl(fKMZb=Iq=$Ev> zVQ)zb9Qa42J(N&vkkThcO8Dnqs7hKWlQV8pT}dCxB)r>eQ__br3Gdd|O8QVH;oX~- zy;CS$05x5gqCoq;HoBFi*okW*c+&#k5mw_(pSMPHyt@SXXRmT8?TF{MPsiv{9oh4& zr5*8j2Y>W^9YWmzl?PBJ+U9CKj)1HHtw-qgiuKYSX;W{v#Fe(pQ=MnPU;7gWrLDSV zzXCsf<6nVQw#V!ODoE7gjv(r8(={oceWkjC8`&MKM7pvo*n$*ahEsH<-qLoVCFIU> zzTxXDs=dxv6Y!ndw% z_V8!%Ax?HA?x*MZCUm?V0pFZ*d`fnlN8?NHt8+ZZe5q%SzcKC#j`JaTU^(rNJxg9H z66@O=iFo*QTsr)>CQCe9n`N0L-j&?=yn!3&xHtZIP2iA$zi3o>9bk5I9^ztKQb@_c z6vN=mLuGg2>n;2|Z_GNu^C&!&%K;7NCALF1S?jKb4c23x^w6U0B&@9NO)~S+b%=p7 z0F0@WQsdmjJ!(+ zf1=2x$H@^6wb@tlP6*r`)!Borz|c~wdD5t;qPv2dtmsZJP|>|*r@D!qiYt1^ap^i% zRL9d^tZ7dj4>>L!el$a(ZB^O}m#f*0T{J&X-hSstUNxO)vw0qI9YLA z7qJ~Re=q9g4%;!XEl8em^S!Umgz5|--?Q~tm1{|ML5J5rxDYtVb`yc@pLtq~?GRhA zrTEUDedEtr@J5m2?O#`)?B7b@MG5Kq98To-CN`ez2)gL8BX_+w8?R(Pej?GubVLh^ zhTcZcpUX@Bpa^bLa5tr`K{xLDuJ~ODb}Y)fP}JBr0*t!$_tEc`CaormdfI_~cS$;E zL6KjMF~nI=qg&iq8zy1!vkor?JT=ZtCkBTJT-3Tb4odlPeL+GKP6r^%(z3Hy`+Q{gsGE_4AW16 zR}iK;)LBY~X>Z;uC8tg+GDJV+T{f!fOlKo24A0-3`P`^vh=hp=T-ex#hg{G$Wgq`(NQoF(jjT;`5VtZ{?R>xW&={#7Ki!+IR z8pi^@PF5W4P`zwNxW1D4x=E+@MYLR2`J4`4h*pu*#dVaSS5!Qc^_0#ks6olPN=KL_ z_1iA^>c+)uPP#BNE&_3qfs+_quQ&@6CWu<))+b|pz}d91Ec)x<8(#%kh3TiC$MG$(!;5Z_&S zDcCxE+Yezef3nC9NZr!=Xd6q$jvJDg64d7^K?T!oF1ae2ZsVYx_up`GYzanNvUFN% zx{WiXyoqWFoO;KcwY06fPf=YQh|kom!f1(ef$K4DqLb)7rc`Jxu*msRH#5la=plc5 zn)9?7^X&03b;`BDw3%_{o94~44YJReGqxIYUk78l-fhg39>#2V9Dm?Xf617~dK%1C z8Pl;22DLrR(_O#Z;hEN)sjW4pb5$RhxKACFQE>CZ58#ifGCBBMg;LSoe(#C@4fZzF znLoVa-@d+b+nV`Xto}HwKi>X-i`8j`9se0smB-gMa}XxaN=D*PIzC6d)8RgciUMP-uF=tHyp_}Vl3JhiQjml9<4zzZvLYYS#qnD z;5PezBP3|DpP$Vi9s528-*27x!YvbD_|5#WvG0#_ks2wLv(GJNLT*CNyZ36&JW|() zKc6zC)E2~|&fI8ow#pprdC1ga%Lus|p>(TL=7s(TyC}0QJ=jtCLToIF+rP+s+^mba z|AhI3ITEvf)S!il%uQ7{8%Y=Ci}1a!3MB}ii;$!IH0Qcoy`0tSKt=ReS}rpGM=jB- zwt9mT_EJBSnol zYQBO0^Ps<_=R(N!qLqC$q+atkB^&dJ^09?tep9|Go2ymG(M`xpm&aB3_Hk^cVjeGq zjT+GLKlM=v4e*WS(fK(N>hV7dB0m>GB9`Z)=1jzM(Midz9g*KV(RQ#Fv(#6i7k&o6 zF3gaadb>e<_C}@`qCaCTI*R)qSvOqTZo+rEu10!p!UZYLuWF>{Cu}Qq)HK7a7IeIi zOWSI6gmM2znoq|39|bzz$E9;MNj|mSLazEYWnCM~bh+Ru;y%9#jj;etJi4`oK;v>t-a} z^ey3HCFF02T#YoxVj+zJWk1s*H@tpVL*i6R_Ol6j;bdAQAvGd?i%W##Vz54Pw*fX? zXw%@XrL4OfkOlR3I)eHObpj0# z>I@nv)CDw1s4Hl&P&d#Jq3)oeLOnpkgnEL83-tmOgnDBl+t%>t=Jvq37+sUVf;G>}R(2c#0s1*t^yKq}FE zkV@1HQi&EMa*M65%dJJQH9|`1Vo<%%5|GNh6r^&W4pO<#0IA%|Kq~i{AeDPLNabDu zQn^=xRPI$Em3uWv+wpp~0ZJLPJ3Fgoc9V3k?G`3k?S?5GsHc3XK3Q0y$CZ zvqbH4Y(z}d26(<$ych{DmI#dkEfs16oh~#QbcWCv&@!R1@bgTeaWGphG#<17WflGe9juGeH}L zP63@IGz;I)7Mcw@N9a`0xk9IbHVMrEohLLGbiU9$&}O0epe;hppbJ1w)CF0hHXUn@ ziMkN^u~ocS1TVG;Ee35DS_0Z3v=p>c=ycF7p))|cg_eQ#2%U-W_6jYB*@Z$YKo<$E z1YIn&3UrAO*Lp7%;vUS)gw}#C7g`6p0^|~9eO96@I<_vBDEv8%ed0w6Xur@#&;cRl z_mx6tgRT-f2XwX2xu9!=Hi51cIuCT6(D|V2g*Jn35ZVH|QRo8DO+s5iHw$e8wF+$q z9R#^#*pZbC8;)&{CBsfQx<$O$Wj=s;MqlT4gKiVr1G-&kFX#@?x6oMb!yw_1>5+TM zoR_;PwPL-0@?iihejJXD9{p<2L0bp#%&^)_8ut{Nl|MW|l|QgRl}Ej)awVVY z3_Mh4;-Pv99;&nOP@Rp3>Zy3Bo`#3&96VI#;-NYZ57qg2s5axFy1Unsmo{xtr2ar^^;Guc}9;#dM zP~C=y>UKO-ci4JYi_T%Etq)v~W4+johw2_YRQKXxz2PK3Yc;2i-k-xd627snu=By-OIzM;YmT9@T=P|$A4jE^ww^SvfX$w}LLdIY z*s{xL5TCJ;={OAM?zH*U3*n9j=`$s=GZlJwiJfUN8y`Z?%ra4hp7}%OZm}~vVP{@s zXFmE#mZszq&y(mi=m(d0HbfKuji4IaAF@x(diq4}`oe~rj;FhRnfARuE@i5bGH1sY zN=Acpp=1oGJL2kMHWtLbz|lDK;V7?qA-wS*eO#JVV}uj8Gc9K0!%>=5Bh9>>KJaID z!p?GAZqBtO#FtIBm1(9R%^aaclX zP&%H9O^0>`4HC0%Ae|2F4jLk6JwQW+dV+L1v=?Z&nDqt~g!*74sFS~aVKzd{`his1 z{vefh07#`B2vTVWfmGVTAeD9qNTnSL(#hXpAeDAFNTn@+RN4_Bm9`$F(l&rp+L0iY zc2p!S7b|OQEp}!4BPh)-{l}Y+ntLP#CV&nJO$6O5G$~C{m5JPnfKP=?uX8rIfP+V$z=J>%*|`+~wi!J|RwDzfy?rO7{zK`uYJO zPG4gz7Wu;I>sJYN0=-&@)7K9Par*i-LY%&Stq`ZLj|g%4nr|U4o}9jZoe-z59}(j8 z_3MRtgWdpgGdz7T1(Wewz@duiq}j>Fak0ar*k5LY%&Smry;3bM-EX8bI$6;w<%hK`t3M zOP%~g${BX z<;*yJ{b3i^E*CRJ3H!U}$`tIYM z0Iaj!OwLZB_37g$0Pn6^i=iV2zoV?mS1s~5OcYU_ilGwKS(wP-6dm=cQlBdIIcYZ@ z6HZho!JH}&zEGV3dsJs*f{5xI*k}22pYTK=2L!ZB_3vpSkn)Bm0y*Ksi9o8H2&Br1 zK&qSwD zojA>R^7m>RI|xnhi{52FKe79w{dew*cAuZxebN4Va$j_n-51^YLl@xROY^;YBKx9s za;F-T9r4MaJ2C8xPZk|Aht0u0YX3eAUE=mJbjclwCXbSnL!7(tlS3x=e^#_(xoxuV zIjvVk8@W7O8JXbWy4#g7yAy-_u86A(;VzI))!hx! zsk(bWI#qWFuLEBaclUyx6FLm~vX%d*kcblht+qp6F1APU{oPyu)cxJ>il*D@p;wD{ zw(LjucfTu|5*!IPeM`7_7xGs3cgI5-RnnF2?~aEwy`-D1sIM$1+yJmPlF9Aw=E7^K zNB4L8(8j=*mXe_{m9}ER)P=YUWdfON{Q4y03l9YH$f*9oLkew{%&<<|wIQ+{1R zI_1|5q*H#~K|1Bv1Ef=aJwZC<*9%mL>MA#S?2@*DyUODd^#!R!{Xi;Fe~?Nv0HhKP z1gS)WKq}E-kV-TJq!JAUsYJs-D$#I|O2kvLD$xj#N>mSGYv*^BZ?z?XyUOFTjRL7` zjUbh6G)QF|15(+>f>gF~AeC)ANM)M;*geKDvWdFsq~qFJZfmx5I8(?Kft86cH=8A#} zcY{>!Js_2vml3Gk7lKsoi$E&(#UPdY5|GNx`vz5RUSz0pUk*~auK=ms`#>u9evrz2 z0HktX2~xSQ0%hd@Kq~FcAeFWiq|zP) zskFC%RN7lXD(!6`mG*X!N_z)LrF{j6(jGLRoh)K%zoP&c77K;4CS7NLg_ z&m!~`;#q`VLOhGmTWBQ+lhu)Mt3Z8)R)hKptpW8H;#q_NLOhEw5ajZ|9cK{+i5D&K zg8TGbDsKc05jqPrRETF0h6(X3!f+v;MJNbu0*w$l4^%I7KBz%xGiam`&mxQxx&YKD z#Ip#ag?JWWj1bQvj0L%5sQ4^Gvl%B|?1C5Lg?57`2<-t)6xs`#By=HYvd~4KDMA;6 zrV3qxvN28QQkXRfT?U#ibUA2-&=sJWLi<3c2<->W5;_2yEp#R5RFF%QtFjJg>^gR3 zY~A{5I66(dxCS&w=vvTRq3b~Ngsun87rFt|EOaAifzVB$g+e!j774Y277HB&EfKl} zv{dL;(CI?AfzA-R9kfj74$zq(mkh7SN`|YC-4RQMJ8?i}xp;9GXob+-pp`=RfK~|| z!ovP)p?g7Vgbst&g1Ce|4+G0Xs1*NWK9~Di?mM{^9VX-|Kf_|ruJpH4o7h2)r%M;V zbUmo%O_((06n4E;(`Q$9Vqu8pTo9tlg&;0jht9H4e;4e#W#`Jzw9x)8oLZuKwcT~g zK`TGurEMp z)r;^@H$1duf#+3Dm+xL#zXZQJXEj6 zL-jg5RIkTF^#(jtZ^T3OCOlMc#zVCg57mQssNRBy>aBRF-iC+j?Rco(frsiV@GxEO z#6$HiJXG(-L-ig!R1e{ydM_TThw*T01sAqCOyxq#%UdZb*-F8w5?*_EA4WWXs;v|+ zUwg;iu-qqo?VWDdsK&;i_;!s(Y=An_Ma{=x>sfre#{^6n#qF=bQcc|cIxHr|?em0R z+&<-Ty#ji@1A2W@dVG80XSMy`QR(wYkC=5x znWNaN%&YbuIqA;?`$lK51@Vn$y@WIgbh4j~km3WJ3Wz2qPrfXVob)&|4H)n6g?W!4 zN8B4RN7ApiBkiL&Wy{SVuRq~OPe8riY(TPc3bzV1`1Ll&s<4Ui^|9>{W25lKN2U{^ zEf6eYRW^4uu9L8Z8k=Jw7vnk^bfVAdDAYCBa;oUAJ6PES@nZd#DyF7(mZjJ{E53`nkhCj-yrv=Eob656;g?*tYH$+N+TRZ!Yt=GicoS`R15J&1GD@88yv?w+5Tv zRid>Zm1rGEC0Y+si8g>#q81Q0r?4beqh9b-MmJjr+){(jF}|g>$RZ3kBR^`+ic*l9 zGafZ(3v~ebMVLG`M7GExOdchsMHXT5NW~UegvnzGq(v5C@+i$MvIvuhG%d0SlSd3& zWDzD0Xi@%AxUa^lvJxU~He()LeC zJ0KzLK)7T7$UMp;#&Kx}gZhiv5RhMT$|J^cX@`OQl2aZrj!Rnr`6Z`3awINoJ;*OP zwSJzA={fjyoMlN0GMC6NwO6X`Gw?lc{mKz`{hkFD_W zbeI9sbeIY9OK*8>mXD{yERbJ%;}-gOI-CmfOK*8>u8*g~9MEt{_qiZVhk1!ypAWMU zVzW6R?Sh1~3lq{Vf;*LVF-WCd0@7Sx3Q}oL2dT7YfHc>afmGTvL7MB!K`QMEkmmYI zkV?A>q|&aIT-LtgWc4ejYvt8YxtT{(O{BH71hJ$$6W3n4K$B1KK3SyFtzq z>Hs=ls1CGQs3T~LP$$p@LY+Zdg}Q*Y33UZ+7wQJuA=DkTQ>X`Mmrzg8ZlPYFJwm-f zdxiQy+6#sH!t5fUexQqm`hzYJ8UVUfXdvh^p+TU_g$9GJ5E=s7Co~kaUuYQUfY5Nz zl|uY2s;h)XfUXv*2VEo70J>IaB>rhsl2nhLr@Xd37hLQSAMg{Fh<5}E<1G-;mF6aTFc}TMdh33QTRYJ|6R|_owJtVXc^ctZ>pw|j5 z1|1Pv0(w|zDd=@Vr-L35;ypdD7g`2-gV33vM}?My9uwm4VLdLi67)u)RiHNst%kI3 z7Fq*(i_luoTZPua-P?rt8?tW~;_ukLL#PGxP7ue2JY~bvx~Os*gDNlTqRNZ9sPdvN zs=TO+YF|85c~KWtE)h}XMO{>RQ5RKS)J2sSby4L-T~v8d7gb)=MU@wIQ7z!1%8RRQ5RL7&!ftVx~TG^E~>n!iz+YbqRNZ9sPdvNsyv@Z zwHXgp?wX>?i@K=tqAseusEaBu>Y~bvx~TG^E~;z*sPdvNs=TO+Dlh7y%8RI6@vb|1^$<$IU;FtzmKVpJOjq-2B(r%@sHQS5${}on8D(oo{rL*T-^q z#m+Y-^{P-(41V8+%CX$t)*dIcRnNKQB%SKrW9{)JE3IdHncVlRxBeU?Uk-4g8~?|! zuGvm2@O$Nx&3Bo1A%;gWwP>)Djf-WapU??G{N#8$+){w_8M}MYnz`2&_RV+4s1d|z zM7|2~oc;ag-8Q~Fdo~_);?Ii6@0IXNCoES*KCg*P*CHP8LC7v1pNHvtB_7Y7gjn2< za_ap4c_JRai2VLlWcq8=2ewnpv8swwJ^l+NTn1%G9M#-qCxsm~;*_UO3XTTpq~I8k zP700%aZ=E^W1jfE*qj2r*ZRqcX7(;zc0IAj?=&uwRW{kZF4+;(i_I#Gltisq_d^!I!RTOx(LPc{DP83?V%sAwPZ+ z!hJQ`MVCLHPRPiTtGV?ou7>f;0@XOx`PvhHTq&-`7TkDl{UVWDzf9!TucF*KYR7ym z-=$k1nz9v&Pec1M%~AF}cAA~CbDH*^X!4xnW0r9D+>fxFjqwTla}xGh;=KK}k^ObZ zIiG%cjIJJ#^y6i4yh`!Jo&!-hSK_iCUmNq-a)DF$QH|r)sr#fh^6cG1QXBIq!}rAE zcO8iN>tuZd?$poMC;WUv!p}z&em(}7pN#5E9uvWFncsMV@-nqtNzLQ>mw5a>lZfAE z6Y={T$S+IeasA8vk%Z6UawEUUl1F(yQs#Lfa`$b-!kuPZhjQ|rvNHK{QF&R_X;YR} ze-W7Xhvm`zGDN)0-HTB?bFK#E>_L%>*9<;b=Gh*(+W~t{E?#WBvy7_;QRcWU<{^|R z7w&a%;nTAQ8+yuxdw1mS9toEhC?6{8j-fK#d(C5!4=iOGa`{sBMC9&C$;rnM@>6AV z(uI5I77a-^(Z4@i4adAZPOY2Su%X5cX1qg}1#oWWsPO5?o2VOdJ!{J~+o*?XIH zAivDOxrD>A%)l9i!?Mi4d4xHmY3o6LQHApyacM__RN7IIw5;=-`H0tf z)-uj=#8Y4bNK;@U$S<98-Xop@lR=sSQ$U&mQ$c=NiSr@x6lenZWhKsy#8Y4f$S*5# zo+O?Er-1yj66Z|fDKH!4mz6kw5>J8C68Sv`W?H)Ef>hdhAeDALNb|cHq|z<`sk940 zD(xbW=J#TdO1lK4`MngR(w+{|{Kh16Oxk52&F?coD(!NR=JyK8?_S8;Ppy17@1zJ3%V#E|5yQ8>G_i0jacmK`QNqAeHtakV<tX&(luw69C#H%HaU(Mv7H$ng|-BS=%=O(0EyH-j_<-U8ATcq>R# z;B6pHfwzM+1>OPD6nG~{Q{Y`7O@ViVGzH!R(iC_vNK@c_AWebygS5myk;v~SVW#>0 z6iB8007#|%AV{VC5J;u{Fi55S2uP*31gW&g zKq~DsAeHu0iTvhUihJ(In}@64&*B@tz}G>V0{;lo6!->6Q{Z`!rocBrngZVfX$riM$nS5%Or`w}NTvNQ zNTq!dq|$y5q|*KqNTvNgNTq!Vq|*KXq|*Knq|*K~NTvM|NTvNTNTvM=NTvN3kV^Yg zkV^ZrM1FH7!#%IVTru<8Z6l6v$td+pcCF?EIoD3Q)8ii$s==z!hlIF_^kJb6ppOXE zfj%nK5%e)3o*sW%s59u}LR~IL7x%g zmW<^mCz8LB9|>4fIQ)IiOz&%?15hh#NHiRcJowH$u&ze-l~&`mNAH(7y{U z0{w^3V$kn|mVo|KXesEwgiZ(jx6m1&-wQ1R{f`h&cK@%?a?l@yR)GFbXeH>6LaRV+ zLfoK%3H_*j;RcPI5I1O439SQF3#|v`g*Jd{gjztgLK{IHg!p5QbwX!@ItrZw>Lhe7 zsI$-}P#2-|KwX8-2XzzL4C*el1=K_60#Hw(t)N~)+d#dAwuAZz?Ev)^+6n3>vql0p}n9%LKlJt3ta@_;S$%*Ukn;5bO~sf(50Z^LYILGLYIR^2wefH7upAE z5ZVtKDRcldO6W@L251zz3TC5)u7=qdp=&^6g|5Z*@8g87!-m1}Lf3;P2;BghD0Cxe zlF&_{$wD`SrUo?W zfc6S~6m+4`$3PbeJq@~8=;NSEggybfROl$^GNDg`E*Clmx2E9t?N1#^={TTF+ z&`&_G5&9RxF&=dIN~}RMg`2=aAWfeQ{Ui zzESn=ssU9W=zN@8H3wlq47*tHQipHVvQ@Kck>M6h-Kyz-YGH-d=SCu$uf>KRs@&*9 zl^cBAmQA-+b38U6k=J3P5mjz5qRNd$RJoyuDmM~QOHVWejJy2P<;~idB27GWZ!d9>6S=t0pwObZULkk+5*U} zf!qQ}mFM=U^4vaEp4+F&bNf_zZl5a8W>V!TMyfnHN0sL{s6K{=>ZkEg{R|$epT$G< zb2i;-kq@7@@%lM(g7NzW9;&~@L-kj9xCN0LubAuAPybtBX9v91M#4`RXlKkCBzqP0uKaUgt70GcRzs-hQ`*`{{ejWSGh_PPB zew%FAV1K}STS`5Bt<-r;0ly;JqQWiw{q4OjyxS$~@xKST9Pwd^V*PO2Ng10`Av&`x ze^oyj0+;mSAvk%tE#vmsBslM-(Mj+QAe{uS1L-7qN03f}cLM1ocxRAKf_DMwBzRYl zPJ(v>=_Gh}kWPa40O=%nPmoT6_X6o8cyEwSg7*OxqI$w@8Fxr&Y(OVCelup<2+JggSuUEK~=2i%>_H&I>P*2c%g?fSBC)6ACexW{~CxrTfo)qc_dP=B2=mSCn zKpzwu2>OuFAkc?}27^8#Gz9cfp`oCU2@L~1Ei@eTaiId}6G9_EM}_J^pA>2U9TOS} zdPZmz=u<+Cpic{pHdqP~8Uy;Q&{)vtgvNnB58{i|Vw@;Bgso-Ua61MUFSlVj*S|tXKU`IG3g1N|4rV9gCX`h_h+i2Eg9q3)meV!Kr)y-h z8}!}YY})LevPCyej%vtplkD5Ch8#D=2JC}CUqoD8=z~FePG<;6&*==sgwaMw>ue4K zu`h8n95%lsz7#;u35@`K8RV`2qWmlg%p*7K-V}&=QescM`q4d{ymH@`+maCf5pDKk66Y(^0U-kVi!7hgSBsq7u`YM5$XZ@u24_Vi$c9X-xKN$`X`}2pzjOy1-&HH z5A*|&i)4S?j+*>Lk?eM?Uo4UXVC{$E#X!(M3k?GONN6zV$3jCuKM@*gu!BQr80e=$ z!x1g!+$T_CJD}t>+gQ2(N7#Yt5EKNir>;T${{#L%Gq>h=FK6h9W|c!lURR(4)pa=z zBsoLV->U5H$?WE-vU@K#U}eL=0V`ED8C3aD%tdD#M0UbaA$mn~4`WeZe!*#Za5yljCgFI%8$*FB)} zvIR0PTcFCz7O3*F1**JkfocH{RbIBhfj5UaOwDSjoJHboXjHo)yg%Pe`Ll=vKfHZ~ zA0Bq(hfQImWjX#I?kKO$Eyk&a#pqFtIkvEBomo(A7Brgc>&D|RXY-7C&yV#bmjkg= zOMG_M^*6g?uSQik6pasuWbK(L?|l8q9(bRYJBau`ljn>G=Rt0@vfO6>Z$vrtKMXuN z_WdvQBf)!6mhu?v_<^_b0F=Cg9hD0xc~5jvu1ALuH|I4U-RjgFFPa#5J5J7|^A*(3 zq&Efz-f2CSgvP+Yn{%7|#0TDKJr2Cndh9IIVX(t%w7+#=aHxK_9U?&s_iOXRE|F#N zLR%gkRe=~YN7cA_`)5ENBj&)HH*ufnGYY<~vmx%aH+-L{f6hI9b%Su{Yn7Ft3a!UQ zh_{o6?eS%>MS0vHoHvJ;e{>MO-~8OB1_#pv?Y-iIqHqRd?bIEL<^X*N$UVa&^8(f? zb$~ts#1yVVJ9kZNfZkx&GDk*cqp%Xo9O40C)_LggSu!O{fm^TcM7ie;4Wm`VXPbpx+5~0sW^?SI~b6bp!pkPHAlM@;MsuCIqsumgq$_ot! z)d&p%)d~#-br2c`suLOx>L^qIbrKo@>MT?bVve~%eFKOe_y0&csJ{jU;1Je6Hsa8G zV{RjUlxCwF)U&vmX8e_!eYUgCU2WsTffK&f`B~?Exk+fKVBdfqvj!8f_?He9x=X+5;T2|acz{8YYmXRGOgNFBw*17A3{CZ0~vA7Wn}+y#_O8O( z$gBgFFuPkbzI@h!c39t%xBPg&IK{Ek^niW(%*mczrl$~pBFPW)@+cQ^n|R@l+2rrV z(|vuRQ3GW5Z_U+y65jPKYuL+8J9hVIshFWfTm zh2P8{8~gq^25mVsT`aqtr#!hG?+VCvC@ivY)aGqv4*Gh*ks1_*o^X1c?Y-{Gs$kI zCcM<$1xzk%b*-A=ZIzg6++4um8LF7SJyHoCw=Fo{n@#6ff72 z4i#cYItbUX<-fUF4O}ox6n(v zWyhD+W5<`)W0RNGW5;)5hc?#YU=%w(E+g;_%RL=z0}Xj`OsxTt=8hdM$?`t<6Mx*s zd+khpsB2Gx-!66xA>0+Og_QbEy4HNrO3ydc_#0&vUI*M^3pT}7HXYPmM>M@`pWKh( zbpoB}<8G6UAMxPglJDYt`YcEK)Y+V=MqX@)mZ2JL`&cdp10#2X;La^dje)ztWn=D+ zNyP8UE>@T6p5m!1?0_+_R-Ww8bSJ{h=)m0`!NrxMxd$XsZS}p+B_6JzM%i zTQvwve`t$)w)BU#xWie0Xp1|Y^@p}I9&{!cJtsMuVG@Nu;YU@u2)a;FB zyx8gpnjq8(G*PHCXp&GD&}5;mpeaJ#KvRXfgQf}bCwH2J__I6Hh4_OzGlck~J2Qp) z;0B3Pg!+PJ3H1Zb7U~Z=RcHVtJq_fB(F4snNXhsonvd#uY(Q*2Y7l~+BVG&!%@rB~ znkO_AG+$^Ks99(@Xn{}xv`}aSXpvAoXt7WOXo=8B&{CmM5bkuLM$j2Tqe07r#(>Tg z8jECD4syvbE-M)Z9UCiiYWpx9eF#5~v<>C{Fzynos@itE!+rkT4+qxvhkx=i+|Nxz zajrtMIS!`BH;2YyJBu^bzvK=%?v&#WIjY~M*U$5HNu5V$iAd}5b*D=-_vc@W(9A)Pdm@ay zDzW|PlG>@q*PXN;TOsdXYp&ULlF-651wZVbSuz*d(&?xQ#Go8iV|I(jSJ=(EIX$Oe zgI#rQcO8ep?x(W&b6I>kqk$b}eOw5?7TFmxZ>Bcfi-ohHJKmO<6;T_{#jg0vLk(V@ zR*D&~bY2DGD;Hlg{NaX9Hr|}?^QXLfp)H`ijL8z{u0UHt8Mt`4%B+rj6 zv{tAiXq`|eknZ1NNR*d35)Xx2_}#NSN)hHywhhLKX}lDzqf33>QlgvuIg6=7C9cFQ zlkMjm&^4R&Q4F~j(`+^fbpW*p)qyq&bp)Ly)CqJp=vx?k^Ze*Fm>H`#d+h)9$J<$U zgZM0D+`!$rv+peZ0u-y3LG<0H2KHDjY9K718i-kKRZgUm`EcEmLQ-XCNtK-?Rc=39@$8X1`9}FdDedD($au4Hwj?vrN=HFJ^iZ3Vh;j92ZCwDuxk2ig` z-Ae9wwqw)vU+TlfuN?OBKV0>^Z6`4_GymItSnYu4U$ytsNPFJMc&yFE?$50<)W`70 za8HujgJtg|`d2Pq1K5xtyf?fp3YWzs7QWSok(#IMKjv8C4WxVJq<=KF{`+u*oqpP# zg!@>~9dGW8{IlvG+IV5Wu{Kp%G{~-;sD8>`jI_!Os8QT%;;veYQv5?+P&Dvpm&mx@$as>ohI?$YjZ zFO@cz@{}o;PnXL4f$gXsv`@92tgS!Zoewvq`ur-2Z_1vOhb(;`&he_&-~Z~)`Qn^; zX|6F}n`{i3qQsfKd7P_LoKG=F9C7;`bj6t`E#q95;*Kfql;X}Y=19kV{)hyv&0&O< z`an$c((RA__V=sz^my0(c(EP*)VHTV@0a*vA4&5w@W=jS4gRQi0DpYhd?o&vK9Av# z+Y8=}KMu}6fgF=^7y1M~?7*FH+Df?;t02CWX zs7$|QNb`+QX@~xCexI|k`;gi@aByHdd|C)~FOCQ7fX$sS;m5~`>C5o=;dkcuR7k;J zT%Kruhj|kIp9CGMQ|&JCiSK)IO?Oh1lUI2dFRV7X&$VOq0Hv#fG$ zjYn~qKP*#}m2&jKALrkBaD;R19KCa1owMnjL;oX&lbkQ-EIHGtfIsThLv6s{Nc@e$ zUnBmg|MKTgp91Ub(X|7}izT=?=KxCewMhNSKRn9oW65${!76A_#tGToJ^;`VxF_ z;M*DQ&hDAHbLY%qXW32ra3tk1^=p-^mRgD*?-b`xY(rKrveMT$$xQLXsb%tdWcKL$ zd`F=q>62(l%QvN3nx6dYZL6ed$Mk29U!*av4MEyt2RX!Hj&PJ? z9OnclImKztaF%nN=K>eGL=ClE<_cH2#&vFRlUv;84tKf7eI8K9Lmu&%Cp_gD +@ l7c}ycSG?v8Z+XXiqDJ{({*h07&a_4Qm(21v%i&+0z5`qp@uC0#