From 3c3806b476ec739e205244648596bac1debb877f Mon Sep 17 00:00:00 2001
From: Thomas <thomas.musset@pasteur.fr>
Date: Thu, 4 Jul 2024 14:06:06 +0200
Subject: [PATCH] updated pom to v2.0.0-a.1, fix classes accordingly to new
 architecture, added icon, updated .gitignore

---
 .gitignore                                    |  42 ++++++++++++--
 pom.xml                                       |  17 +++---
 .../TrackProcessorExportTrackToXLS.java       |  54 +++++++++---------
 .../processors/TrackXLSExport.java            |  21 ++++---
 .../resources/track-processor-xls-export.png  | Bin 0 -> 13199 bytes
 5 files changed, 83 insertions(+), 51 deletions(-)
 create mode 100644 src/main/resources/track-processor-xls-export.png

diff --git a/.gitignore b/.gitignore
index 8d47cac..57f16fb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,41 @@
-.idea/
+/build*
+/workspace
+setting.xml
+release/
 target/
-.settings/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+icy.log
+
+### IntelliJ IDEA ###
+.idea/
+*.iws
 *.iml
-.project
+*.ipr
+
+### Eclipse ###
+.apt_generated
 .classpath
-**/.DS_Store
\ No newline at end of file
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+**/.DS_Store
+Icon?
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 35269f7..b84e39d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,12 +8,12 @@
     <parent>
         <artifactId>pom-icy</artifactId>
         <groupId>org.bioimageanalysis.icy</groupId>
-        <version>2.2.0</version>
+        <version>3.0.0-a.1</version>
     </parent>
 
     <!-- Project Information -->
     <artifactId>track-processor-excel-export</artifactId>
-    <version>2.0.0</version>
+    <version>2.0.0-a.1</version>
 
     <name>Track Processor Export Track to Excel</name>
     <description>This processor exports the tracks in an xls file (compatible with Protocols)</description>
@@ -53,16 +53,18 @@
 
     <!-- List of project's dependencies -->
     <dependencies>
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>ezplug</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.bioimageanalysis.icy</groupId>
             <artifactId>protocols</artifactId>
         </dependency>
-
         <dependency>
-            <groupId>net.sourceforge.jexcelapi</groupId>
-            <artifactId>jxl</artifactId>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>spot-detection-utilities</artifactId>
         </dependency>
-
         <dependency>
             <groupId>org.bioimageanalysis.icy</groupId>
             <artifactId>track-manager</artifactId>
@@ -73,8 +75,7 @@
     <repositories>
         <repository>
             <id>icy</id>
-            <name>Icy's Nexus</name>
-            <url>https://icy-nexus.pasteur.fr/repository/Icy/</url>
+            <url>https://nexus-icy.pasteur.cloud/repository/icy/</url>
         </repository>
     </repositories>
 </project>
diff --git a/src/main/java/plugins/fab/trackmanager/processors/TrackProcessorExportTrackToXLS.java b/src/main/java/plugins/fab/trackmanager/processors/TrackProcessorExportTrackToXLS.java
index 2d9ddf8..4290328 100644
--- a/src/main/java/plugins/fab/trackmanager/processors/TrackProcessorExportTrackToXLS.java
+++ b/src/main/java/plugins/fab/trackmanager/processors/TrackProcessorExportTrackToXLS.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,18 +18,17 @@
 
 package plugins.fab.trackmanager.processors;
 
-import icy.gui.dialog.MessageDialog;
-import icy.gui.util.GuiUtil;
-import icy.main.Icy;
-import icy.system.IcyExceptionHandler;
-import icy.util.XLSUtil;
-import jxl.write.WritableSheet;
-import jxl.write.WritableWorkbook;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.bioimageanalysis.icy.gui.GuiUtil;
+import org.bioimageanalysis.icy.io.xls.XLSXUtil;
+import org.bioimageanalysis.icy.system.logging.IcyLogger;
 import plugins.fab.trackmanager.PluginTrackManagerProcessor;
 import plugins.fab.trackmanager.TrackSegment;
 import plugins.nchenouard.spot.Detection;
 
 import javax.swing.*;
+import javax.swing.filechooser.FileNameExtensionFilter;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.io.File;
@@ -68,7 +67,9 @@ public class TrackProcessorExportTrackToXLS extends PluginTrackManagerProcessor
 
     private static void exportToXLS(final List<TrackSegment> tracks) {
         final JFileChooser chooser = new JFileChooser();
-        chooser.setDialogTitle("Select xls file.");
+        chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
+        chooser.setFileFilter(new FileNameExtensionFilter("Excel files", "xlsx"));
+        chooser.setDialogTitle("Select xlsx file.");
 
         final int returnVal = chooser.showOpenDialog(null);
         if (returnVal != JFileChooser.APPROVE_OPTION)
@@ -79,45 +80,42 @@ public class TrackProcessorExportTrackToXLS extends PluginTrackManagerProcessor
 
     public static boolean exportToXLS(final List<TrackSegment> trackSegmentList, final File file) {
         try {
-            final WritableWorkbook doc = XLSUtil.loadWorkbookForWrite(file);
-            final WritableSheet sh = XLSUtil.createNewPage(doc, "Tracks");
+            final Workbook doc = XLSXUtil.loadWorkbookForWrite(file);
+            final Sheet sh = XLSXUtil.createNewPage(doc, "Tracks");
             int cursorY = 0;
 
             for (final TrackSegment ts : trackSegmentList) {
                 cursorY++;
-                XLSUtil.setCellString(sh, 0, cursorY, "track #");
-                XLSUtil.setCellNumber(sh, 1, cursorY, trackSegmentList.indexOf(ts));
+                XLSXUtil.setCellString(sh, 0, cursorY, "track #");
+                XLSXUtil.setCellNumber(sh, 1, cursorY, trackSegmentList.indexOf(ts));
                 cursorY++;
 
-                XLSUtil.setCellString(sh, 2, cursorY, "t");
-                XLSUtil.setCellString(sh, 3, cursorY, "x");
-                XLSUtil.setCellString(sh, 4, cursorY, "y");
-                XLSUtil.setCellString(sh, 5, cursorY, "z");
-                XLSUtil.setCellString(sh, 6, cursorY, "virtual");
+                XLSXUtil.setCellString(sh, 2, cursorY, "t");
+                XLSXUtil.setCellString(sh, 3, cursorY, "x");
+                XLSXUtil.setCellString(sh, 4, cursorY, "y");
+                XLSXUtil.setCellString(sh, 5, cursorY, "z");
+                XLSXUtil.setCellString(sh, 6, cursorY, "virtual");
                 cursorY++;
 
                 final ArrayList<Detection> detectionList = ts.getDetectionList();
 
                 for (final Detection d : detectionList) {
                     if (d.isEnabled()) {
-                        XLSUtil.setCellNumber(sh, 2, cursorY, d.getT());
-                        XLSUtil.setCellNumber(sh, 3, cursorY, d.getX());
-                        XLSUtil.setCellNumber(sh, 4, cursorY, d.getY());
-                        XLSUtil.setCellNumber(sh, 5, cursorY, d.getZ());
-                        XLSUtil.setCellNumber(sh, 6, cursorY, (d.getDetectionType() == Detection.DETECTIONTYPE_VIRTUAL_DETECTION) ? 1 : 0);
+                        XLSXUtil.setCellNumber(sh, 2, cursorY, d.getT());
+                        XLSXUtil.setCellNumber(sh, 3, cursorY, d.getX());
+                        XLSXUtil.setCellNumber(sh, 4, cursorY, d.getY());
+                        XLSXUtil.setCellNumber(sh, 5, cursorY, d.getZ());
+                        XLSXUtil.setCellNumber(sh, 6, cursorY, (d.getDetectionType() == Detection.DETECTIONTYPE_VIRTUAL_DETECTION) ? 1 : 0);
 
                         cursorY++;
                     }
                 }
             }
 
-            XLSUtil.saveAndClose(doc);
+            XLSXUtil.saveAndClose(doc, file);
         }
         catch (final Exception e) {
-            if (Icy.getMainInterface().isHeadLess())
-                IcyExceptionHandler.showErrorMessage(e, true);
-            else
-                MessageDialog.showDialog("Cannot open file.", MessageDialog.ERROR_MESSAGE);
+            IcyLogger.error(TrackProcessorExportTrackToXLS.class, e);
 
             return false;
         }
diff --git a/src/main/java/plugins/fab/trackmanager/processors/TrackXLSExport.java b/src/main/java/plugins/fab/trackmanager/processors/TrackXLSExport.java
index 055ac95..cfd6a05 100644
--- a/src/main/java/plugins/fab/trackmanager/processors/TrackXLSExport.java
+++ b/src/main/java/plugins/fab/trackmanager/processors/TrackXLSExport.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,8 +18,10 @@
 
 package plugins.fab.trackmanager.processors;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.lang.Block;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
@@ -31,9 +33,11 @@ import java.io.File;
 /**
  * Block (Protocols) to export Tracks (TrackGroup) in XLS format.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
-public class TrackXLSExport extends Plugin implements Block, PluginBundled {
+@IcyPluginName("Track XLSX Export")
+@IcyPluginIcon(path = "/track-processor-xls-export.png")
+public class TrackXLSExport extends Plugin implements Block {
     public final VarMutable file;
     public final Var<TrackGroup> tracks;
 
@@ -50,7 +54,7 @@ public class TrackXLSExport extends Plugin implements Block, PluginBundled {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("tracks", tracks);
         inputMap.add("file", file);
     }
@@ -76,9 +80,4 @@ public class TrackXLSExport extends Plugin implements Block, PluginBundled {
             TrackProcessorExportTrackToXLS.exportToXLS(tg.getTrackSegmentList(), f);
         }
     }
-
-    @Override
-    public String getMainPluginClassName() {
-        return TrackProcessorExportTrackToXLS.class.getName();
-    }
 }
diff --git a/src/main/resources/track-processor-xls-export.png b/src/main/resources/track-processor-xls-export.png
new file mode 100644
index 0000000000000000000000000000000000000000..413f16fe3ba1af24be12131dda2d4911a945c760
GIT binary patch
literal 13199
zcmV;AGjPm_P)<h;3K|Lk000e1NJLTq003YB003YJ0ssI2ZTjGE001*qNkl<Zc%1CL
z=aXgEbuYHp4kz5)d3w4h0~mk+m>^Q5p0b}T%JwVki$A#RDwnJ5zrp{GUF9#Xa+SY5
z%aTLACp|rq0!4}hKq3q<v2(cL#2wah?S0O@eY+<B6j{$-e1Pe>eZ#ruti8hTx56Ho
zRj2I#KVE)FV)WZM4=_f};U9$G836dd{X_pP;ibg~Xz7!e&l7&a^DkX`0<OLc?6-3x
zR}YEwo1Qn^JZl8Pg#_Tx3WWtpHRlILmu?AID<ztrW&UUJzQv`5=a(M0CttquuW}R5
z$$ROQm%b*6@GG4ARbPt?2_0ulh)Bvv@`y8mgh<9ZgG4|ega9D`1cZy>3>H@u<VaqA
z{z}k!Rl}ff*r+2iWQ4%{U;g{N2r;~afMF{e|Clqz{hO}}1unjcT~^JxroO_AB>nmt
z1apl>LLw)nN;<;`(#n-*(}VGBZ&sXEI&-cjM%+t-an2d%0Gu-+KnWo^aLxti!V8uQ
z$(0aFa>cm<&V_$#cqfm9kU|K~fCB(X!6k6u5X21&4Q*}~s1*e@MjdRv(L@TW(EQ#!
zpm6=o|6cuJZl=o;k^c<SovSwpE;vM-L#6Zc>hO5-<nZ*tc(zy66Gv76S2C6&3c6wa
z_4%dZK*C!gYvd-utCrwg3ZVoKvg2NS5|jifMC_lJLIi;VC;^gtnMuJ_kdePJ4m>P^
z7ps5lzX^c6(Fe(e2Sm`WEi5!RoP=3t8Zo^<gI-~oFA+|&Fn)m|86~PSEzUl9`VXHx
z{`>K4ubcKaN4Iu2-Wzr|(_|E>#9uCuaR$+wn?q}@woV&cJ7<YG@=rQrYwK!ltJ-AF
zId4=B(OE=o&^T{-=#7ZlXy6Ub-?U&}I3T&?LIyRIG6<b>rFbM|B6*@@BxR6nSOzI#
zDU}pa#FI#+QYkM_47UbNY*{jw^J4$2iwA%?G>n*1Ng54`a{TF&AAh>{{;W9e#=Wi4
zovoESgWg6Qb^Jn-bIb;(fav{)zokaA+koa*Irtt#Bo{>D)jpUmI{)$TBzcL2HEI4h
zf1oA*5pNv9c3e0EA#>j9!r{;A9hX-euT_2}AbfW)QUAZFs=Ax5-M{s{)&7=qh5&*?
zge497HB5{U83!Si0tRQ3N1r|Y$p>Hjo2)v!eeK<E-22m;TkimfX?1*_J)6xA%j!hi
z!jcP;4cFtnh!7A-o_g!!(p!zcTp`24COnZM5lr|c<-i1&JQCnF0u~VufV_ecG3P}<
zL1bi{v)1~s;K(9bi_VzJ*wSL<e5|mD);cuC8fy@(BUjq;!w3JqDh)98-kbk2jZ<T_
zaTdI1oC^rieKp<jT8M~A+!Ioro<IHfKmT7I?EUD*wRisLTmRL~^{*q;PtSgFGW$H&
zr`l>q2EYbQ3BEP>1?H$-8j_9gnE&p5xOYjxSp=8i<rcoyyKtCaLlCs|vS!{%Hy(xi
z!}~AJ0>}U+fJcz<wC^R$y}Jw=Bf*=bm#_EsQdMSpdb<C^pa1Xw_~HM(z54o_cfRSv
zF4|>O^%XS;99qFetWpmA$-zfI`PIKZ8GrHStv~qs>wmVpaX&B5_s1XZkAIn0r;fD0
z2QIh>w-GFx=HaEW5+u7oJ#Fx%h4=SA=fZ1b1d9+I#MeYL9?YhZWbpA^aW73CM9aMd
zgpY|lJQH5>THIiaNOmHzk+5DjS+6Sd%TIpt`tDC}Zr}5t=OXw!wh+))Is6BFhyn3v
z{}(^|^si4RPu{-sr@#BwzhZ*EIQ;SB<DX>uSb$Kf8$-8|#RY<73%iCUq{t?cv^X2)
zH$M+CZLsARfczr<w&B~u$ay$*<e1X|OJ2YtY|&+dRXxsvut?4!GS^Sm*L$~}6<IlD
zR-BEGKKRuSZ*1SafA3pK+{vq%fcD!Zu`dCN4Ook0%orV?Kl;&!|J&*0@t=L?zrTOu
zk0#}l2S@+*WcGjpN)#ZxAM}3n$_Y4IrWyW9p;@E_iV0|`4IlGxE0*v!V;A8i`1S=r
zZ)FSfkF>fb7H@8s34;DH%Z;&B8V}QWa9kV}`Gi>yLq7iOXDh?a>)UrXM%#=WwR%hP
zD)hX3G(pu7#!+`NJNn5de>Eu%-g)hhzjo`7jLSdS|Gy5Vzd~j^(a-}5;^@OR0xVsA
zP{51(h9C?ddgdIhIo#Fw%J~wHYfr^5B;HCB=CTv>3x><m4DaWSpgoi#;>f9^MzQSG
z`m>@MGm?=|XJ;oLe*FH|-~Rp1n>`V*n?(okWk|X~AA(D5^s|#sKim89>o>mphu{2f
z3Vr_3)4$rA{6eWTl|vtxJydaUvF5O}_H^-+Ud$?K&fMm=$LIy*mM)ayC9ZRc1H;9`
zIhiBm{yGVzNH|1gJt?b<p#q4kEsswQKK}HdcD8PBZS2&hLbTj-%U3#ShbWbbWV(Oy
z;Pd^T^?QRicE6X3!6zqwvp4y<;EI7jw2j4IEM5a)FG*#g@r^<dTmh(XNr9HR=%rho
zUst;T^Cvi47}WD`UJ~D&=qb_RJju(vtV(hM5uC%iDktNUy3RcjvJC;`U+SbufRH>o
zI{RWg-Mhd0FRrh?b~5|y+4!GIbKXy{1!`jhZ*1<6v-aL_evv?I;g8$PB(`wLi<`N+
zPQ={&HL>9LmtMcHP+0o8oJV<X5&WzEv{J@`$+E7i+EC!WhzMMDyMri-&||mOlYWJK
z5TSFXtj{8;Uf=#c7x3}kzb*8+5RrFgA#Ovf8hmN3u5idJmkWdoA3{sc1+IwTlApRH
zpv6c0$3v*OA`U)3;d0`@V{4Cfg#yO4skJfa&r04_WU{ul-RTaj)y*OXCylRg(%w`Y
z+S;BY*x_Jf*xSzZ)BVW@#%TeuL3=?Ng5wSM;NwLDe88W(Ne{ttiorvFn%f98;hA%S
zrIf_7kHvYkqATK?zsF%KuM0a3Ru4=5yRllYE0RYNyc@1{rt2CVpz{|R#c{vik7R_l
z#psCmDib3j!4(qDiW329*uBQUOv=5iK9eHlTzTTd8gsdX`Yw_Xa{|a=4u<_p&?tH%
zS7;rHb4&N`-w$Fbk+U!*zAT`*lxP7~E(8=b2riV;Kl0>`kr$9q&RVTYV>Dufp0DvV
z>U2AODV5QhmXP$T4k47WRaTw@Q=Mp3=+mq^_DUxfsP~cs34h~rioH;bR!o6Gw({bw
ziV<B3`XH`a+`?*>jtf9Ew@12I-uZXi_PtCva-4A`Q^95BimI-xwM3CaCxq;#gKlRa
zrL3v~=FsXDRKs7f;G!m%Rp*ScM0Lx0oK>fmjBtiC88S}|0$Xr`perp)Xvw<g>(ppj
zyUy5NvG+|hk42u4EP-jjx!0WsL{F;1N9Rb?<C-fM4Hp7xq6E!@yuUhhwctrA2LQ6D
zre&Esi{t>UQ!?uJSGs9ma8Br$XtC2Pa8Lu+!I901bID>QlU$DrbMAdJGj!>*{;m+w
zqH*3aVI!=NzEVwUA<#(vT#7ze`a(vHHii$o){Tb@ZIFn&h->XLI1dX;?rAPETF{h>
z??kk~p`(V3Xqum7#mrg+B4=GE?GFd5X_5p4W*N%H4Zc!9VG*3OMLF(A8%jnqJt@sJ
zEF%)LbIS(|AWU$Tsv!p%vJGWO#{}TP0!3bMu?59~)_FHx`-)XAMK!vN%Nzd!YzYX#
zg?QwpXK3NJco4b;fFvFu+G%!F6a_ls44tz{lCBI_l=6-h8S%MTB=J|77~{;Lt@N}P
zt#K|&J=Qkk90LEajRb?O8SC^)@8->w@2+-kJJPf2pw?MwW|f;5GpSr<uy$0VLqcjZ
z8J=iM0h}|%y#WPtgA3s61DrPzT4aJ2s?bV-o(o>{m*zMXfL!a{IUyRxA&R=%)#L2g
zXagh=(V<DwbU0jLf*V55m3RwfU#UUC4O?flErElSQk$u<WgsX`%Bppc&N*vMEQXtd
z``d%Jh+%1_*4D<A8gpZ^+7`7djLk}&)iyJjTUS}Et*fmwUUn=;Z@Cl{OM1a^5%Tn$
zH?@%9&gW9N0+BA<`2w>5!ICyY6VZ^6gNkLhtn+Dk=ItvKz7ScObo>1Q09fZ}5r4k4
zs^Oe7wsNRN$XnHRYD_6bmjG#wPeR$i5xGcoyoqrM!22S3?o`IQveL7{jw?H<O{UGP
zHnY-ZwJB;hHLh}4TQqIX*_*fx>BEbBSs)c{?DNm?h4DRao^aU=n}QOPB2Hv~nxD;z
zGiM!;4BUfv(q6we^tjL3Cb!!P=w<5DWce)C+LjEM<buf7K^KIGFUlz)XgM;#SR%WL
z4-i))OLGXJgix{S_u1CG-r{+qrP|oCHhE=cwVjq`T9|36$Ca5F>lMw|!jbW0AY`>!
z$chQ_z8`1-juvsVDRMP2jF#LK0U~h{GLkaZburCOgDiL;rL5QO_j)S;+<6iY3!8l@
z4r;QV)*53f0g({GQmJj}NHg!AedKOJb%1<U$|O<4SalokPD{At!Wjb(f8=s7i&>vV
ztO+p|EA1+63+)PR3hN4Oi^|T7&9y6P|Fbl%vi@gjoz~8HDYM{%L#{UD4+U^3xa6=v
z@Vo)BLa0cjz<6bfs-7XWr8Fs3r`PXxdttR5yPULtk^WGF;kedCZHh>wLI~|L<0>K>
zbO&jk5_M>hTu1fNXjO{10SEvW(S&G`PsL>`U>9U5WbV0)crTJY7GJs;gSE9~ZSy*q
zWMw9$o)l(W+F5OLYYXqo(Bqkqu5+OvXqy|QHj%)Q95PfqRy=lSXQekW>nxEXMv+Q;
zok5zUp)heNNiT_BkhDjlP=r&Jo>h99MjatkX)^6f&r*=h1;hcsI1RwN(Rw#tn}58?
zA<i?OEh7MS5pP-@UP^E*=f5r;{;r}pjfM-u^mmKSlBsQO?5r|bWu~>wDl;qfv^G=i
zX4>W2RiPM%;JK)_XjQT$MaMXk6{mSVMiWlYd7AWkonaKkMCiQZ<8#+cFEcUke+BT$
zyN0}zt|+MrkD+U7Er^<u6EU!^iezut+3h83bG>MFVu?B}bh9b=+Bv%lrJ%qekhNLn
z3-y}!hcrgYL3jqj)Z%Qtup|ymFuK~f%EwI~E{obugU2kjt%$UCS!s%XdTo^Mc$cS3
zLaB8%K0m5;6>r6HEQDmnSW89*^>4oV<vz%3rmS?Pb+IzKBZVr9b95%S<OTs@bN@(M
ziD<QVs}nAly!LTK%<8ctE2WgYDZ0y0;R4}rQq1LbVQ~u;Tb5_bfoUnSGq#jJfKYN%
zf~#0vy#;40?P_fc=d{MWvRR~h{dmpVdVA&d_wN5^&(f2<XU~dqva@}AZFMWuGfb1X
zS!C(t3!}WZ4B;V3UC)fkddYxuS?Do33m!G-U^^i%>LDj4(O}fwO=RC&uqS@1($z0M
z|977q{g@)XIk>esyg5kM2g&9jUhSwpn^)$-DcEyRgJ?O$e<{uU99MaH?Oeztl}Q>8
z+jbG}8U5K%nQy-S7x!=c$!s<`JwM3uu@KSq>o+9z6bL4{rv~%ZhL__YZ$enx+&P^_
z0}`gvGqjFEjVw4<(Ku`X)luvHXv?E4|B}a`K8QH=`O^<SpS-`daeZU7n@0U%XKmD3
zA9U6R$$Ap?yV1%hx!#M`1jq(WHK}MGz~O>r%p0>DTqxR73K14rTw2z<#ylI$(Q?3f
zVqf?pNut5ZVDskA>&_Z$Jx61lMNx;8L$p~ntuZ6;KInxBGk;;uf3!kINi?kStg18P
zh!`i{CV?DU=X4~8y?8s3gT}i<APA9+?rneL`WJ6~@aXTpupb^yzu;UZsYsKwlMV)*
z)imyplFgmr+i!3D%kBPs*5)OAEDOSN#4uz+M02ODJA<pMcv17Xn&oaR0WaHT`?f~r
z4c_5W#!}6FqQ|#rUFJ&X5G2W^1i>ZMCC^f8V`~N?iF#Feme(_jjx*tqH;&jd3}=SX
zaFkw`Lbad`xN}xYwZ69X?(N@yu=mr4#rvkhZkm$88my!9%1%MBN1#7F{d<P6n%s<4
zx(ITmn~cpPhh@SC9kDKXM~MzRcmIK>0lVC4Hm}3B-hT0(EBRb#vET(DT+V74Yid&>
zGZDNbY45ojF>Nd7jN(#BWl>iqL+89F3&m>!aE@8$y3zV-=a%4V{ypvbaKXQJ=evg|
z|LWvtk0!-|N>Z?n1A!oCNFb}J%B%6O4*&Lg|J^q?e~$~vkQMsyasIb^<@-oBg;6X<
z3VIRmM|>3XffR{^G?s%j8cH57#B|}qo8}E@>$Wd*P}DS)1pNZGsPlShp<}hFohzAe
z4CD(0M2sXzVo;fa2xA!ofVO$9Gk?yYIHBE5guE^9r(3JtTO1T!XfY2hcr+TWef_oH
z|Hse%W^#0tmy-x&lqgUCNeYNNJaSMyJ^$$Ed;fZ8@Wvon&&=_&{NFsv{`yQmAisJE
zco3ri6Hfh@4HWMuV$_Sb6zg$JBC)zLygBM^1dr)L0};#3VeQV8NR;Rah~{~y&_)s-
zw`p<^qIGk)T;q1mX<IX9n>hI*4I<)FSRW)O04#|Hh*VZtU6-K)4v<2D5RG$A@U$Cm
z_0o;tlH39}V>nnOuWjD>=G{L#E%y(Lk4g5pS2XJ!Lu5iSE~9aF@cH5UkJf*7ZT0$o
z^`nFGhb24d#hVRV@iwf{n!=b2%~Q0%c_c-8d~`HBw!6dM{iARFm!tlMr(li*=MK$L
z@xy1?-v}NjVkDs(c`*$YAH-r1%dQkX1%1K0N_JY>*tVLs#%NL3ws0J|@C4;0CI*to
zl=T!Cr11zzS9+$cRzii^4u(vlA;vmtb&zZ+88@=$ODqdKgtKYd`OaH^{^;a`ryqYL
zI!4)qTxc{R6T+QjP90D8e*ENry+=1h=fsMs5^2nbF63z}SRx+^1feIApwG?^&d$#B
zF>Q3dc4PCc(O{#={03agw3|$-PmYTBIgcaW112OS0um01f}RqI;HiHgQ_j1>ZLKD6
zt@U?9XIC4ntkcGoz`YCi?EeK8)`oDGSLd9|PCU}K$m_8~l$;SZtxQmxiZR|FZV%Ee
zAD#pMVAO`^Cd4}DA}MZOzx(c;KlpV2{bT*8)Op0yfTIbJF-MAbtGfRAlmDldH{ZH@
zZ`9cgy-=Yg%>r5uC?yGW)>gW%2=hUr2e-Dq@$EPNldr%2{WwWHr2<quB68FEaaQje
z=kbe1?MMR~6SLmp=hY|96j#n@Y0vMzv;AMM4Q{ZOfBMTZwzgP<Yy|XzoU{*(f^$Th
z*QZiOz0TUKnoNr`be>|NC5s3QW_gjQ{z~Ugzq7@b80iuoX{6@y$Gi9b#s2xj|MP?Y
zaZ>H8PNHjamQf67Q7SLTs?Z0A)2-F=#`Zu;$W4XLp>e1ov|8}0oE$tmHif)4eEZv9
z``-QA-`!ff8L6l#>QX@U7ORuugOlR3O6LMdcu%O83N8))<RRZZD`sd;*Y%2<w-fll
zVw}~kMrJ}c9H&>*#Vnelo~-w8_R`V8`1472iUtfJdGCY_xUNiBrJIA-2I*FlT?Duq
zbOYD-^m=1$=X-Dc;Nz!1%=S+VmShE4iPouzW9((fDLy`!JxupEN9(<`OU5|Ee4LUv
z$<Fup4`*j)q;B86{X4JS`kmda`=h~X<6oU~3#e^ubvXOzG<#${;jB1!9$Nul!bnY*
z5LH!Xs?K`n-mrUZ5m<cSHrlwFfm@);=LOWF2J1{^ib$rNsGpUmvwVz}n^1#r=tDeX
zqL-|$4{oJV&&RbF;i;gd=$uuty0!hrd-wigTpsObA4!%lCQR+nF^4216M|31<A)D%
zcjNla>mA7xO}Z?r*)%^pp5&*n65apy>pyt!?LY1HJtEasGbG+nU9Z_5n$7glVgAc;
zxvxY&B&}L^xm0kYKnD4=IE%2ibM0&Eqnq>F=H9+cZBe(yB6_ia!dsC-r><5qRD1GC
zS<aY`ls--(5R!>hy3*Yqb~k}DXRzttdY-s6PY}5{>3sYCpFcYP#s058U>rGsb<7wq
zZmB>iavH~H`6r)0NuuG#$_5}E?ma$udJ^O2x9|O@-+c2=Hdk*XaT-Eo=uZzJ2+@g<
z<TY5I6dxbu52kwBkJHfR!rH>h@^t}m4wI}{k!p}^c9TKVgv$do(Y8daLroXxc>#qs
z?<Uk)YirIhRxyCc%So+E&J`D&a~|?#x|<HyM!Vgl-}G2ro-b$*WZoSMP(E4_OS_cD
zLSPj7R*741$j~s)@GOFp8ridFC+nkASL4%%&+;+5HTwP=yWfA~?sqoVuZPTrr$0?H
zZw{kFB7{Scj~_n!=#x)BJ+JiY@UiEEiV1(oLh{gi=xt3lb?u^J-GBp>0@h}4xJ7GB
ziDZPhlu^9W5#Ybty4u)MavrG!5sPY~Z564`oKB;2rk}2Ctlo^HB<L`*=c%?Acjzqz
zUe(o1KiQl8*s-%=vX;3Ck`_XGFJgVfH--QN0!_|lj~_iVQ)g#`JL_Nn?z?|+@76nh
z&5ZU28T##?Z>*xwd?@s&r@x`AC!8~br4gE>CGI#kVH6^KfHN-Gbj;S$eyUbHtS8r0
zZLKxNRm3a@xd=Iz1r$OZ2T|LqHhDk|u`zY2XBO*(_ZT3|`!V{R^|k&@$s>l1>!VAp
zIYIj)83X6Jo;*JL(f;iH!X5XA@$Tl$2m2puQ$~>>41M3;mwTLM$<|f<@WJDi*Y5t{
zd;i_->u+_EUQ@gb^jIwSb2i_{J>zklcrRZ6*4_VnJ$-vTJD8PcCzEI6?Af$BoYlv<
zJt^?aQbvG=d+;ZUxYyeq^j4VvI7!iZ6=Wt9=wQ*8_5vpjAdMaS8&F-r<I3dP=8Rb`
zcv}zg+ACLj+v~lXz@$TL>+>OHLF5=fBod*xLpsYI>`(sj+4QF~a{vItQGaK9d;fH=
zE(#{Bzh#7ZkcFmobv!-G%j)K}w}$<-z^wy@0p2uf`|tNAwJ3OoD32&bw6(UgG2E$Z
zombhc7#HPvp(lAUn^k97b&^--r5>Lb2jk)_9gSY!{=H78+xT1#U=X#{1ojGrlb7<s
zUKKd!(wNfNvXcy@hzdP1u52_bv>!NPl&J2gyFE-d8G&^M=Ik)^s&dX10939x&OUv7
z{`W_-pKB_l>;Up8QKR+##`<P;Fg2zCh=t%yyQKei;hjcp%A@JSj~@Q*x8D5YNG6;q
zU|a;R)0h`}Nx4gLg)t;=r99?otkS{iI$OPX-7#IWqR8@cdOF!ZK7XoIw7Y#z1sLV8
z8Ck9CsxCu&)rILcT<ntLXnL+IlN(p9^tU)y<Jl8!t7aI9F^(R(u}-u)=v<4Uj`OV4
zhGeBzE*=J(IAhcL<l*@5o=tw7SBDOfi#TNHtZ|h}_|En1tT;b7&6RRoa%Y={Dgp{@
zAH>1&!@vHA|4H-XH}8H^P*1pSCt6jq*Q5+M@c^&rN?W6soooBhVbS#nj0qN{Eb8<|
z*xTB^=G;4>gI^Gl)+Vq>D(k$`8AQZ|SRSFfWMa^^8uHTS+LrxfoijGh4~^A<C{vgm
z(vr*d;qFTBnt#qU^*;~B!fX%As<X5F;a>KO{p=@MeIQ84Knp_wi>kU5Qm$?EH^-Zk
z@z`QP+{jQUYv(SAB`VRn{P`z;tGaouzDSc{%2#^Hx)R;lG;>w7z4F%Da7U@AF|MF}
z$S#KPU_K_(0-u1E0%qb6rh?*zPHU~vD=(+OoGjLg2ScHk2xzeqmC1~&`|%nhI?whk
znviLykS;MY>0DpCx7y!k^R6-q@SryNwA$aB{&au#^ND`ysPJwcB4pNL+r<=6rd5$#
z-xy8CTYJZkt<#Z;=Iv>S1WI`VR959DUwj}s)16zJv5f0ObXuJs*FAPSersiIxYLly
zhB<Ojp`kv&F$zPDu*fVhY-X<76~LxqwJ86ES|K57CQO^Xe5rr}DtBa!$r)iMSuOQ+
zoF5=ME~F1(0kEd3cWwB3Ki$MIxdh;`1`$0u{l&*8|HqmBm<bb!B;pYx9>#23lR|~2
z;}e-SqCZmCZmgV65A$4u0^rCwEyN@wQ!W~xlusX>t#7PoQ9gcnWM=(q-FM!&`~7RH
zca>DmnYn-94SYi;f^=+XJPkutP2Vpq29BHD1}v2XJj1X~JE}Q%98_qpq?ZXOWQ?qF
zt_BW~N~h&<UY&-{Yt^&@axOZZ(WrMLk{xGFVDKR!g*2X=K79OOtRD--k|-65Nkt+8
z6)CBt3}v5Yz0ld<t)tP(psH%4EpQMLkVphX1Hj@)=}Mm-Wsg6dtc|W+Pu{$~_3oYR
zcW-RH*6XgeO?zIcxpi4?&Vg|SLm&k#Vx;E%Y>vo=;)3;fhZcQlFfZSEks51|S+NA5
zU*dy;XwlZ5#R`u;wJpkO8pfBRMpYvf4?A1k&Iaea)@1{~LV1=3>Gd1^-|J_$N_SRQ
zV^if;R1g^vl`>*7%=?8AN#x!i3zf3#HwSf<pB|4@thfN%xZXCw=Y+znm_GP)f9vhv
z{p0Waw{P6~dgG*xF~*u^M1!23n$J%3j}WOVZV1+sY#?ADpu-`8FgV45he;{bHo`4t
zjpoCwUO?cQv8yXwNiO*w5+De%)&(I(A_d?cQs|sB5L^;@tk8)^tKA!&XcU5@4?UbW
z{rz<F+WnpNdsSKH)pSxGpJ)4%{9v3POegz=J+(AJHQ}*UDa8r5Ak#Ftwv(2#K|U)3
z4)iPuIeA+PZkG#=x-N@s)Z4tXbDt}wYh!I~eGIceN>E(l*-`bAz3Q(tP9wf0AW_hj
zd=!bbh_5BE62pq(D@qI%^o5MPvb(msuxWpD-W)3u&TAH36_LD%l;nf7bGFh`Vl0mO
zL=@tE$$U(d7L6m@>#S}JZ^klVwAebJJ!ukmAZ5M&VBKyR`+8Z=ifWRVlUaFQ)Z?N)
zo#~_89G3dHD$mC>ovJEIGUGA_`DBs_&eAji8A&b~3UrK<vX-=|9v%MTlgB@~yYo$l
zRFo6JBL>*C2<7H@Tz!`7Lrr<bb$}^cfZ~t}=qlDxyf2|Ic`p+Eh;4WH-9dCi2^HE@
zf(1HbSrtfvWb8_}-(?dMLON$kJ>|gDc<7w2>X|{UAPoZYg6MZP)`mBQkci8L1b-A&
z&e~#=P*U~>{lT!$*ls|>tg7rRKR=)DolTyc&GyE{URE5L;-tf->-|ABd916<Fz{fX
z3<WF*Z3L{||M+iW)%!30^nch~y&b|j0$>>Nb)`L+nP(Oyzz8Vy?4CKtYGgUlVSx2v
zm;s0jM$<d%><4e(xSmFRYbqZaLgk8>2?Hja7_yi6pr%|RiBVZkBv-w7MVlh8&(R@|
zM40hH!TBKF8gzEhQ@grt)123Nmc(U^))#|tjaMN`qGW6J&c^7bHAd?qtESU(T$#!F
zX#ZjQ@!rwr<LTb4ILggLQ%1}PUIG_N$+PV2qep-DX#X!p-Hk}4=rkfp;10{FesWrW
z;V2g@25^9jeiEE-;t<dY)VeD2qYm(M+C?D*YLWmhG$?XT&_Z3tUgm?Eu6++cOeT5M
zjfSPki+UQ;QQ#vcpi*ffN8BZOUKm@qotCWaWnCx~T{IjlMl8eVE*C;XQbdtRx^chP
z*;p~gqOqIB-D}?+Pmd>)qw(zUY<6&#9Zbr@EI%o#Nofk5?LYYZmw)~5{^wZq-@N-h
z%bJP-H#E-lK~^3E<1!@Yptbx(V?PW1QBpe`XQimSz2UZ$ioi5)2#tXTR5MC;RXSG$
z<oPtBD|I$Z*V1@6DNc%d!b2^|ktN{WWHnVQXdo|3V+-N6Hf*Ob7sQpb&xhiC?6icI
zAp_0k*>ecv&XJTIIanR73wR6BRl1(d#^=+Mlj+{+c>ip?cRJZW8hkO%j*m}{_l_UE
ze*3-9;hs1&C*>zc`7fu%aU>JTEw&W}wwxI!Vo@T?IzKxtZmHefjju_mj4hjswdB1V
z7wl!7gIAC=IMkJ%Z1i{1c=YV#mw9zALcWQ}N-kEqyMtsKJjy5o023iO*(7Le81`T4
z>b~5=+}4DFvx}$zA?@damg{yh8lc}F_WOg~o!kC-tIIme^2yowFw4)ct>3P62|%eF
z6z25F`Hvr+{cK{!oj8qUWAUMB8|PWD@GTN;S?GE)=wG|JHo8uPwXTUon1V70MsfrW
zgfCDbxzvjtveu#LSIIP1-K;(@>KW$|2WcsfMY__v)r~j9i7;pf60d`eDWC{gyl9?h
z%r(0RG+QLVq95a8qzC5XZA~K<&eL^VgkpCjBN=<uC$@ozM(euHk$F;p3?U+~>@%3|
zr^mCHt5QS-<DnR-n3PP(X2%Z+B<fmM6%%%Al-}(1hK`liS`OTXrD0&({@It97@zmF
zG9+iPCWevnAZQX`G?LS{)HF$=bkx~R)zG>+<WdzuZN*c98KacrfK#8d1W1M<Q67fl
zLmPgesS87%|GaP$L4smY6bW6|mO<I1pLo-PA!M8+L}-jA0_}2Od@K3(y;P_9FLQIO
z?Mcl}9ppxsN*JLGa0|TVoK?hFDR0QzE4^K*gw<gm2Ow)LlI6m?DIosB(K*REgjx}A
z+A*Cgr35JzBGzW+sWz7cnw(2yZy0SwJoWnNp|EmdR`Jg?f6AERm`c_cG~_r08gSO<
z*b7xn9_Fra8DfM%?W>66O8*8d{%c&ACs&%a4YW|}5*XaxetT!_jjArPVmvNR#`(ed
zbniUh8yAnq<Hxx@vV05)PBiO+THkqnrN8B<_6$B;f<ukM@ph8~cy2O=wT<K<NeG;a
z(9u`+lGSdqHtOuYckeH6tiLNo?8wx562V{)UvoD2LLc^>rL4kJ!_GYYVdtDF4l(eQ
zQwr1-qE9x3dX%tjB~##TF(AX4npb<#v*U&%5q~bRebF8s{DlhviiaE`0f#v5^g9V>
z!dRzGRn%o!&I%7rkI%C`58~^?+#c_pK1)P;YyF*Ge_(9o$c56ehlor#Z-_1ad65Rq
z1>{9!Y+cp4L!9J$S$%MA<?hDlru3kh2(7JIH3O}6V-XH2jVHCuJ)LI}F-J^$yI`k8
zOmHq`d_Fd2ymNE-AB}o_V0JOtOw0w>E<!1(87y9y-U5FvH(e|>#m+bT@rb0(3!3>b
zA*57d5XUPkJpnfv1EWn<mXmxs$xaWCKV^Wox4)*8G@f940R^qLVcH7jg`pRl7;l^R
zLN3GT^7#C-v+2V}hwn2EN=8CP0_3QBV?DmFXbS+GkEYzRtfYgACJsvBZxv~=8v-(^
z9P;A${Ioih+Z_^Ih8!U0%zLhyorDlL5Uk57=A;73u%XFp4nA44snj9>(+iF9!Uiom
zrU6W7SNG5)N}{!ReQjm!_RekcOaicR@S!x}^^rR+8ZOB$HB&7MsF}D8H8zY?H&Xra
zcygXU-S0eZvK$1Kn7g(9-q)^;HaqM7>(PTB$FrJFw9`Q_rupu6){S#VSQ(S&0Jaya
zL`u+g(~rpwo6O)J42%U^6Ko*aK+-@_5EhF$#GHks4A)4y*)8h1OTX&Bnq=6bOv&0=
zHNm-8tyrc6RM)jNdY+T_S1rOuLu|Rx_C+QZlDr{yBuRf|up9HOa=NdJf&*8ADm&Gf
z4`Jq3J=bZLmKe_T!HNDt<9SG@YgjBb0cWDNIxjOcD{H+QY3dyiwUr51v*R2-togp6
z5l|#pSHK{qHAU-^tq2$?Hk7;rOEl=Y%f8wwys$*R#J!#8>CPBkgc4Dk25L9+Xtq}K
zAD}t%crlWmPc=4`6S>mg-raa-@7dF%gC}v4rm-w)vZ&blK*1p7o*4(>Ty=JK@ND{s
z$7K@5QpHNeQYs+N!X<;c*5lJzWOi0pwgp!Pji<3FEt^$vR8nCbDl!ae!)C<xXMUAp
z$vPbS5sV_*PR#8Xc9clHet4gCA(YSqi;GVFr5^nYlCdnf5DaO#Cp(A<n>mv(+wqcC
z-z6mN&tpuTMBO*<e&@-PFP=Pl;%Y|;Rz`5H60y-uRvXVRxFB#bT^rbMTb$@DpHx##
z6OgrvNyU6H>S}8ylX52-tq-<CimMKQOVoIl;p2*B*tDQ}`}HR50uT>qNN^6W?9<8p
z-NB#iY~Hu7a?U{8{l0Kd5irHu3L+9TQ=)Eu`!w%71ek9;GtWRb16&4413YiMFBOnK
zRjtb;?(AH<_u8#*eEi7=2Zzrl<4h<y8m#rwwNBc%#)akwj~q67_dBpt+Ve?%a&Gs|
zi>DPH8##rzto1}2Q%yVF?XBTpjWIGt3-I<?;c=!PmTW?yRedqk+17Y{peKzdv$G?2
z*j<&Sl(N}Zt7%&aZ*zv7Ix4{f=B{8JU@8Pe>2Y&Yun)Mr#pp{ZW}+5ap{HO*HJIV0
z+QY7JF=+DJQbqUfy#40A-`U?gI6m21TiYCLZLajMDVbU`Yf>A?Sem5Wq=#&42c1Qe
zm)SHs@i=Yv^yJy6S#{chYs2(<6vv@u!b!o1>B=3>%wB~hcy^M_FS*I@F)o-8VltbR
z)4_Ujr<1NB)lIx_NQq)S$MPIL$k;z2=?J$X*paZVXhX4~V7-v^5TPN#GG-V#;)^kL
zTG&dPz!bcJ3$GT?Qpn`Op{we8V`KLl?|lEW&p$ptKbAb+UcbH4zt%<ynh#iT7j`og
z5s!rE_q(ergRRZcZ4YX*cZ+J0sP4wf4bMx^@=&4FHb2Q89TcBP#S=A<AiNr3h`yeX
zFfN%=d^XcAPggf?_dBb`)=djyn}ubZSY6<w8GMLT33@2lh*MX3*S@OQili0gAFoI@
zig-^5u&ioYVdgv<k%HOrwq5#_3grFi1;FN^_-?dL)AaVOH~!%JKUiH^Pom`Q*S|C9
zuGV#7on>=(Z@jTJzlMn{4qS--FdeN7Z?HSgk@G&xYE!aye+W-y@)@3;G8t8ALSDPW
z8a6v00tp@*Ns+r)_lKR0Bu<RY=cd6J2xLyvq{PFTRlvAqQ=&1E4KXYhtRvY-vekrb
zC9oUgX2jMctO`(JGMmrW78xflFL)rmeBeX!=O6|F)4J|=`hWQSKmXo${*WOPZeU8N
zs-me(U)i{(8HDf_@0cNDq3Ma^^MX`!QsmqS9u4T7?(B40eLiC+R!*2IREkL|qeLp1
zaAdVcTO}j9KIm*lD#}7aDx89ICLC1-?q}|4i4zH<5X;DOW3SmYLIvy`@DT?PBCfJH
zuHL!b{mYf!EvAYFDu<+n<H`xyY#sow+Q~IIw&kOpc_8PQ5QF|GR+~s{cH(rNQ!}v@
zDqC$^8_lykA&NFT7g9?X+D895M-O!f#&_1<N#(UkzMs{HnLeD=`+0Fx&rUOTMly3^
z?4VAH`-9<b8h09=OHJE10Wf7~l9^|jJ*qK}c#ky`F3{`;63_s%Vc&$BgF778avX2(
z)_fqtHZ>TEKVVTya8ioJ9wV<3&{grZc*}FNET7C6p#xKL0;ZIwPD{JR%%^4N_@dR=
z%O_l@TlgT1M#IhZE$7~?>#8Uw=aZw;$+MH$<Fou>r4MKBi?ZHZ?c7)&-4udbSJT4f
zh55A_PiN*quE&;Y<atw%qj{QjzW<c~j2O8(i=bRls_SvQK>^;V5G`@d1@O?mbup**
zQUSdL2zW0hMB^Gof{gpH;1|b22)WQu@79XiCgTOrf7wA=>yWGxT(Ew>+wa}GaqW(=
zCa?3do*th++B^Al*xk6cev^UIwrqz#T0Mf&?VZ;j=Vlh#kP7q{gv};>Vb4k#bV?v-
z<0`6mM)B=lG7O0W<dF!|H)WKdie<aU$d|yNSMC1NE{Nca$D|YxGIWF%onz>D^DEiF
zAb@*{=|T%j<C0#o1+j<z7DEFRlR`-0A$ZDrJz8}Z*9NzC*WcxW(r$|67|xM#hy#x4
zqv_|LAN{nT1F1x;I-&Zj1d9k+rDwIxJx5ikw)JdUuT*zd)@~~mbIF8=oI`^pL^?`i
zA;o;ByD!<P`)YsCRUtL|p7NF$g+V;$|8wN5{~t_~f#>AFhT-;R&z^aMz}4>t;LR3=
z&5j=06hs9yb0!?3PPEnEK<8?s7u$Z#jTDibts}~}7?Kus1)6xp1$jyeDr}oHFt)Cl
zu4+?dQ7^r*wQ^S~8TQvCM;am<_oRqa1FV*K$;$=wrC58>o74^riLk{cQPd=yEjer}
zN=}p3Xbpxvk=4Ap^J41sVnT2(I1Zd(q3GbOLs!oyy)O2L2$_8Y40ij!t2Q<!)!ym!
zi=)|t^YUqd&#cTlUH$btzkhr4z4O`QseYuDL0Efh<Iir~cugsu73Y;MqAu$Uq9|&H
z^yfX+Uv_-Ooj4bAYUJ%Xa2WSsB$$}j+bHJJN^8PQvo}W1r$ZKmhkFIiRnw5VTx*=~
z2*^VF;bOnIi|E?i2BPC2MxE>ZXs0&CY~^H<?~RM2v;6UC@i}7gTK_M9=gxnem#5R>
z06l*0_tXslnq=n&v$zMHeiS7UG`niR)eP^;4mg~B`fJGOd6Dr2nQjt&0T6jVh0dV0
zh!zpKcV5UjlVR>3=Nf`nGSOdh(P7+63L!)sdas$aIGIgOCkNVQZ`^(J-n}>cMb*q&
zk7Fm<>DlZ^yQ0&V!%?b~YSLb>wyCS%c{F?Q&lk|ru@o@p8>lujCP)EQqqEK$behlt
zYtqle=D8SJOwBLvo6(;6>cnN(AwP5gFyhV{A>?p0>h{u*9VKV6Dy!*iT+|s)urp9;
zszQfcyGuSiH_iWw<4c_MuXo^lleY!H7Gc+LiAVySaA=(+Gz@Ln3);JRU>G(7550sh
z*=q9QXr{H1EQTJk&{7f)M*Y>b5s{nBCPh({RiRDAz(ify>8D92@<G-%*%i3FRm_(k
zzm5-j<pEdbj^_Zc!Ehe?OQCpZtq%=3#@ev&HA4r^dXcqlbYb)HCJ4@*)a7zeC~OEO
zco^wQ)2<M5mQAd6Wm%S0QJGRG>JK{IUc!a&5I%H-d_|{o<@icb?6-0>ncC1K#d$<B
zQY|?Nxf!d`tCw+}E}&o}p+Quzh-VkwBb;-kWE{nDoJ1;i=(5SQtaBtIBQ_kwaiWxG
znc#gNF?fz}e)Z$Gra@ojSPZc@Q$r!e=;@YJ3}bRuVt~5VFtPzaxB$^Ta&NFev*mF>
z8d7p09lD~NTGWP&Oi)EqMIwqLj{}kBnf%{K1O9^wh{45B;-XWa+2&aYDP`m0(HawW
zpGRvvl?aWUAr~ID6$6h8IRoy{hK)umAt~*|Nt#L(W&s>ogRq>T{tb@j$m)Nv<7#2z
z!X<}(63OFWSI7_{^f`yE#*hFkh0X6h2Lj1?4|v-pj<($>j>B*5pZfX#PC)acHM-@E
zaX|3J{>mcE@i+gjO_O5|$@c&|!wv$?J}Ja-@vl*QNrvawJASKS{-1SR(4osZh4XE`
zIB(4`RD0$*me!qNvq${W&N^`U#J}nB{{{d6|NkN$R5&a~C@%m2002ovPDHLkV1lw2
B@HhYf

literal 0
HcmV?d00001

-- 
GitLab