From b586ca0bc819834bdfd56242806ab8a87f5fd6ce Mon Sep 17 00:00:00 2001
From: Balaji <104271023+tbalaji0001@users.noreply.github.com>
Date: Fri, 17 Nov 2023 11:11:53 +0530
Subject: [PATCH] App Security Updated
---
.DS_Store | Bin 8196 -> 8196 bytes
src/.DS_Store | Bin 6148 -> 6148 bytes
.../configuration/DataSourceConfig.java | 2 +-
.../configuration/SecurityConfig.java | 6 +-
.../gccoffice/configuration/WebMvcConfig.java | 39 ++-
.../controller/CustomErrorController.java | 18 +-
.../gccoffice/interceptor/AppInterceptor.java | 283 ++++++++++++++++--
.../repository/AppModuleAccessRepository.java | 3 +
.../repository/AppModuleRepository.java | 3 +
.../repository/MenuItemAccessRepository.java | 4 +
.../repository/MenuItemRepository.java | 5 +
.../SubMenuItemAccessRepository.java | 6 +-
.../repository/SubMenuItemRepository.java | 4 +
src/main/resources/application.properties | 4 +-
src/main/resources/static/assets/.DS_Store | Bin 12292 -> 12292 bytes
.../resources/static/assets/images/403.png | Bin 0 -> 108613 bytes
src/main/resources/templates/error-403.html | 57 ++++
src/main/resources/templates/index.html | 38 +--
18 files changed, 405 insertions(+), 67 deletions(-)
create mode 100644 src/main/resources/static/assets/images/403.png
create mode 100644 src/main/resources/templates/error-403.html
diff --git a/.DS_Store b/.DS_Store
index 9d2110175e3bce55483d4b2f144b86185e7936b1..aeeafc9f2536c4a6a36cb2b7477c30ec0b01f747 100644
GIT binary patch
delta 25
bcmZp1XmQvuS9G$Z$coLbViD|6#(qWsde;c{
delta 79
zcmZp1XmQvuSCo-`@;uRK5f09H0kP_8Lo*W{1%p~0g=$MvgUJ^KEjGJ~MX(cAv!4+F
Dan}|E
diff --git a/src/.DS_Store b/src/.DS_Store
index b7c0af0205f9aef5840615e8f23344a42809b2cc..41e38a816c1adde936178d6ee2a251ceeadc3888 100644
GIT binary patch
delta 50
zcmZoMXfc@J&&azmU^g=(?`9qrO(szmh7yKUhGK@2vf!e;ocz3W1_lPkjfHy|H?wp6
G
getAppModuleAccessEntities;
+ List getMenuItemAccessEntities;
+ List getSubMenuItemAccessEntities;
+
+ private AppModuleAccessRepository appModuleAccessRepository;
+ private MenuItemAccessRepository menuItemAccessRepository;
+ private SubMenuItemAccessRepository subMenuItemAccessRepository;
+
+ List getAppModuleEntities;
+ List getMenuItemEntities;
+ List getSubMenuItemEntities;
+
+ private AppModuleRepository appModuleRepository;
+ private MenuItemRepository menuItemRepository;
+ private SubMenuItemRepository subMenuItemRepository;
- @Override
- public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
- ModelAndView modelAndView) throws Exception {
- // Create a RequestMatcher for login and error URLs
- RequestMatcher loginPageMatcher = new AntPathRequestMatcher("/login");
- RequestMatcher errorPageMatcher = new AntPathRequestMatcher("/error");
-
- // Check if the current request matches the login or error page URLs
- if (!loginPageMatcher.matches(request) && !errorPageMatcher.matches(request)) {
- if (modelAndView != null) {
- Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
- if (authentication != null && authentication.isAuthenticated()) {
- Object principal = authentication.getPrincipal();
- if (principal instanceof UserDetails) {
- UserDetails userDetails = (UserDetails) principal;
- modelAndView.addObject("currentUserDetails", userDetails);
- //System.out.println(userDetails.getAuthorities());
- }
- }
- }
+ @Autowired
+ public AppInterceptor(AppModuleAccessRepository appModuleAccessRepository,
+ MenuItemAccessRepository menuItemAccessRepository,
+ SubMenuItemAccessRepository subMenuItemAccessRepository,
+ AppModuleRepository appModuleRepository,
+ MenuItemRepository menuItemRepository,
+ SubMenuItemRepository subMenuItemRepository) {
+
+ this.appModuleAccessRepository = appModuleAccessRepository;
+ this.menuItemAccessRepository = menuItemAccessRepository;
+ this.subMenuItemAccessRepository = subMenuItemAccessRepository;
+
+ this.appModuleRepository = appModuleRepository;
+ this.menuItemRepository = menuItemRepository;
+ this.subMenuItemRepository = subMenuItemRepository;
+ }
+
+ private boolean isLoginPage(HttpServletRequest request) {
+ RequestMatcher loginPageMatcher = new AntPathRequestMatcher("/login");
+ return loginPageMatcher.matches(request);
+ }
+
+ private boolean isErrorPage(HttpServletRequest request) {
+ RequestMatcher errorPageMatcher = new AntPathRequestMatcher("/error");
+ return errorPageMatcher.matches(request);
+ }
+
+ private boolean isfavicon(HttpServletRequest request) {
+ RequestMatcher loginPageMatcher = new AntPathRequestMatcher("/favicon.ico");
+ return loginPageMatcher.matches(request);
+ }
+
+ public static String[] Split(String request,String patten) {
+ String path = request;
+ // Split the string by "/"
+ String[] parts = path.split(patten);
+ /*
+ // Display the parts
+ for (String part : parts) {
+ System.out.println(part);
+ }
+ */
+ return parts;
+ }
+
+ private boolean hasModuleAccess(String moduleName) {
+ getAppModuleEntities = appModuleRepository.findByModulePath(moduleName);
+ System.out.println("DataTable Size for the url ("+moduleName+"): "+getAppModuleEntities.size());
+
+ String moduleid = null;
+
+ if(getAppModuleEntities.size()>0) {
+ for ( AppModuleEntity appModuleEntity : getAppModuleEntities) {
+ moduleid = appModuleEntity.getId().toString();
+ }
+ if(moduleid != null) {
+ String userGroupId = LoginUserInfo.getUserGroupId();
+ System.out.println("Query input`s :\n userGroupId : "+userGroupId+"\n moduleid : "+moduleid);
+ getAppModuleAccessEntities = appModuleAccessRepository.findByAll(userGroupId,moduleid);
+ if(getAppModuleAccessEntities.size()>0) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean hasMenuAccess(String url,String moduleName,String menuName) {
+
+ if(!hasModuleAccess(moduleName)) {return false; }
+
+ getMenuItemEntities = menuItemRepository.findByUrl(url);
+ System.out.println("DataTable Size for the url ("+url+"): "+getMenuItemEntities.size());
+
+ String moduleid = null;
+ String menuid = null;
+
+ if(getMenuItemEntities.size()>0) {
+ for (MenuItemEntity MenuEntity : getMenuItemEntities) {
+ moduleid = MenuEntity.getModuleId().getId().toString();
+ menuid = MenuEntity.getId().toString();
+ }
+ if(moduleid != null && menuid != null) {
+ String userGroupId = LoginUserInfo.getUserGroupId();
+ System.out.println("Query input`s :\n userGroupId : "+userGroupId+"\n moduleid : "+moduleid+"\n menuid : "+menuid);
+ getMenuItemAccessEntities = menuItemAccessRepository.findByAll(userGroupId,moduleid,menuid);
+ if(getMenuItemAccessEntities.size()>0) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean hasSubMenuAccess(String url,String moduleName,String menuName,String subMenuName) {
+
+ if(!hasModuleAccess(moduleName)) {return false; }
+
+ getSubMenuItemEntities = subMenuItemRepository.findByUrl(url);
+ System.out.println("DataTable Size for the url ("+url+"): "+getSubMenuItemEntities.size());
+
+ String moduleid = null;
+ String menuid = null;
+ String submenuid = null;
+
+ if(getSubMenuItemEntities.size()>0) {
+ for (SubMenuItemEntity subMenuEntity : getSubMenuItemEntities) {
+ moduleid = subMenuEntity.getModuleId().getId().toString();
+ menuid = subMenuEntity.getMenuItemId().getId().toString();
+ submenuid = subMenuEntity.getId().toString();
+ }
+ if(moduleid != null && menuid != null && submenuid != null) {
+ String userGroupId = LoginUserInfo.getUserGroupId();
+ System.out.println("Query input`s :\n userGroupId : "+userGroupId+"\n moduleid : "+moduleid+"\n menuid : "+menuid+"\n submenuid : "+submenuid);
+ getSubMenuItemAccessEntities = subMenuItemAccessRepository.findByAll(userGroupId,moduleid,menuid,submenuid);
+ if(getSubMenuItemAccessEntities.size()>0) {
+ // Check Parent Menu Access (Menu Access)
+ if(moduleid != null && menuid != null) {
+ System.out.println("Query input`s :\n userGroupId : "+userGroupId+"\n moduleid : "+moduleid+"\n menuid : "+menuid);
+ getMenuItemAccessEntities = menuItemAccessRepository.findByAll(userGroupId,moduleid,menuid);
+ if(getMenuItemAccessEntities.size()>0) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean hasAccess(String path) {
+ if(LoginUserInfo.getUserRole().equals("ADMIN")) {
+ return true;
}
+
+ String url = removeLeadingSlash(path);
+
+ System.out.println("Give URL : "+path+" After remove leading slash : "+url);
+
+ // If default home page
+ if(path.equals("/")) {
+ return true;
+ }
+
+ //continue for access check
+ String[] parts = Split(url, "/");
+
+ if(parts.length<=0) {return true;}
+
+ System.out.println(parts.length);
+
+ if(parts.length>0) {
+ int j=0;
+ for (String part : parts) {
+ System.out.println(j+") URL SPLIT: "+part);
+ j++;
+ }
+ String moduleName = "";
+ String menuName = "";
+ String subMenuName = "";
+ if(parts.length==1) { // Check Only Module Access
+ moduleName = parts[0];
+ return hasModuleAccess(moduleName);
+ }
+ else if(parts.length==2) { // Check Module & Menu Access
+ moduleName = parts[0];
+ menuName = parts[1];
+ subMenuName = "";
+ return hasMenuAccess(url,moduleName,menuName);
+ }
+ else if(parts.length==3) { // Check Module , Menu & Sub-Menu Access
+ moduleName = parts[0];
+ menuName = parts[1];
+ subMenuName = parts[2];
+ return hasSubMenuAccess(url,moduleName,menuName,subMenuName);
+ }
+ }
+
+ return false;
+ }
+
+ public static String removeLeadingSlash(String input) {
+ if (input.startsWith("/")) {
+ return input.substring(1);
+ }
+ return input;
+ }
+
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+
+ if (!isLoginPage(request) && !isErrorPage(request) && !isfavicon(request)) {
+ Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+ if (authentication != null && authentication.isAuthenticated()) {
+ String fullRequestURI = request.getRequestURI();
+ String contextPath = request.getContextPath();
+ String path = fullRequestURI.substring(contextPath.length());
+ if(!hasAccess(path)) {
+ Object principal = authentication.getPrincipal();
+ UserDetails userDetails = (UserDetails) principal;
+
+ System.out.println("1) Access Deny For --- " + userDetails.getAuthorities().toString());
+ // Redirect to the error page
+ //response.sendRedirect(request.getContextPath() + "/error");
+ request.getRequestDispatcher("/error").forward(request, response);
+ }
+ }
+ }
+
+ // Continue with the request processing
+ return true;
+ }
+
+ @Override
+ public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
+ ModelAndView modelAndView) throws Exception {
+ // Check if the current request matches the login or error page URLs
+ if (!isLoginPage(request) && !isErrorPage(request) && !isfavicon(request)) {
+ if (modelAndView != null) {
+ Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+ if (authentication != null && authentication.isAuthenticated()) {
+ Object principal = authentication.getPrincipal();
+ if (principal instanceof UserDetails) {
+ UserDetails userDetails = (UserDetails) principal;
+ modelAndView.addObject("currentUserDetails", userDetails);
+ }
+ }
+ }
+ }
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/AppModuleAccessRepository.java b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/AppModuleAccessRepository.java
index bc47a39..4736ec2 100644
--- a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/AppModuleAccessRepository.java
+++ b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/AppModuleAccessRepository.java
@@ -20,4 +20,7 @@ public interface AppModuleAccessRepository extends JpaRepository findByUserGroupID(@Param("usergroup_id") String usergroup_id);
+
+ @Query(value = "SELECT * FROM `modules_access` WHERE (`usergroup_id`=:usergroup_id AND `module_id`=:module_id) AND (`isactive`=1 AND `isdelete`=0)", nativeQuery = true)
+ List findByAll(@Param("usergroup_id") String usergroup_id,@Param("module_id") String module_id);
}
\ No newline at end of file
diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/AppModuleRepository.java b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/AppModuleRepository.java
index 43da94a..69bd530 100644
--- a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/AppModuleRepository.java
+++ b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/AppModuleRepository.java
@@ -21,4 +21,7 @@ public interface AppModuleRepository extends JpaRepository showAllById(String[] checkModuleid);
+
+ @Query(value = "SELECT * FROM `modules` WHERE (`module_path` = :module_path) AND (`isactive`=1 AND `isdelete`=0) LIMIT 0,1", nativeQuery = true)
+ List findByModulePath(String module_path);
}
\ No newline at end of file
diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/MenuItemAccessRepository.java b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/MenuItemAccessRepository.java
index 4b195ca..a96050a 100644
--- a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/MenuItemAccessRepository.java
+++ b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/MenuItemAccessRepository.java
@@ -13,6 +13,7 @@ import in.gov.chennaicorporation.gccoffice.entity.AppModuleAccessEntity;
import in.gov.chennaicorporation.gccoffice.entity.AppModuleEntity;
import in.gov.chennaicorporation.gccoffice.entity.MenuItemAccessEntity;
import in.gov.chennaicorporation.gccoffice.entity.MenuItemEntity;
+import in.gov.chennaicorporation.gccoffice.entity.SubMenuItemAccessEntity;
@Repository
@Transactional
@@ -22,4 +23,7 @@ public interface MenuItemAccessRepository extends JpaRepository findByUserGroupID(@Param("usergroup_id") String usergroup_id, @Param("module_id") String module_id);
+
+ @Query(value = "SELECT * FROM `menuitem_access` WHERE (`usergroup_id`=:usergroup_id AND `module_id`=:module_id AND `menuitem_id`=:menuitem_id) AND (`isactive`=1 AND `isdelete`=0) LIMIT 0,1", nativeQuery = true)
+ List findByAll(@Param("usergroup_id") String usergroup_id,@Param("module_id") String module_id,@Param("menuitem_id") String menuitem_id);
}
\ No newline at end of file
diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/MenuItemRepository.java b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/MenuItemRepository.java
index fa8d5a2..967c6f1 100644
--- a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/MenuItemRepository.java
+++ b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/MenuItemRepository.java
@@ -10,6 +10,7 @@ import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import in.gov.chennaicorporation.gccoffice.entity.MenuItemEntity;
+import in.gov.chennaicorporation.gccoffice.entity.SubMenuItemAccessEntity;
@Repository
@Transactional
@@ -22,4 +23,8 @@ public interface MenuItemRepository extends JpaRepository getMenuItemByModuleIdAccess(@Param("module_id") int module_id, String[] checkMenuid);
+
+ @Query(value = "SELECT * FROM `menuitem` WHERE (`isactive`=1 AND `isdelete`=0) AND (`url`=:url) LIMIT 0,1", nativeQuery = true)
+ List findByUrl(@Param("url") String url);
+
}
\ No newline at end of file
diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/SubMenuItemAccessRepository.java b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/SubMenuItemAccessRepository.java
index 45e446f..fbc6564 100644
--- a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/SubMenuItemAccessRepository.java
+++ b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/SubMenuItemAccessRepository.java
@@ -20,9 +20,13 @@ public interface SubMenuItemAccessRepository extends JpaRepository findByUserGroupID(@Param("usergroup_id") String usergroup_id);
@Query(value = "SELECT * FROM `submenuitem_access` WHERE (`usergroup_id`=:usergroup_id AND `module_id`=:module_id AND `menuitem_id`=:menuitem_id) AND (`isactive`=1 AND `isdelete`=0)", nativeQuery = true)
List findByUserGroupIDAccess(@Param("usergroup_id") String usergroup_id,@Param("module_id") String module_id,@Param("menuitem_id") String menuitem_id);
+
+ @Query(value = "SELECT * FROM `submenuitem_access` WHERE (`usergroup_id`=:usergroup_id AND `module_id`=:module_id AND `menuitem_id`=:menuitem_id AND `submenuitem_id`=:submenuitem_id) AND (`isactive`=1 AND `isdelete`=0) LIMIT 0,1", nativeQuery = true)
+ List findByAll(@Param("usergroup_id") String usergroup_id,@Param("module_id") String module_id,@Param("menuitem_id") String menuitem_id,@Param("submenuitem_id") String submenuitem_id);
+
}
\ No newline at end of file
diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/SubMenuItemRepository.java b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/SubMenuItemRepository.java
index 9f18e88..882b02d 100644
--- a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/SubMenuItemRepository.java
+++ b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/SubMenuItemRepository.java
@@ -9,6 +9,7 @@ import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
+import in.gov.chennaicorporation.gccoffice.entity.MenuItemEntity;
import in.gov.chennaicorporation.gccoffice.entity.SubMenuItemEntity;
@Repository
@@ -26,4 +27,7 @@ public interface SubMenuItemRepository extends JpaRepository getSubMenuItemByMenuItemIdAccess(@Param("menuitem_id") int menuitem_id,String[] checkSubMenuid);
+ @Query(value = "SELECT * FROM `submenuitem` WHERE (`url`=:url) AND (`isactive`=1 AND `isdelete`=0) LIMIT 0,1", nativeQuery = true)
+ List findByUrl(@Param("url") String url);
+
}
\ No newline at end of file
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 4e2a10e..5786757 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -30,7 +30,7 @@ file.upload.directory=${user.dir}/gccoffice_uploads
server.address=0.0.0.0
-server.servlet.session.timeout: 30m
+server.servlet.session.timeout: 5m
server.servlet.session.cookie.name: MYSESSIONID
-server.servlet.session.cookie.max-age: 1800s
+server.servlet.session.cookie.max-age: 10m
diff --git a/src/main/resources/static/assets/.DS_Store b/src/main/resources/static/assets/.DS_Store
index fa835cbe4be56b8c9081121ba9f0178b2fba27cc..e3f418010eea5208e8a8a4b351405647a23f08c6 100644
GIT binary patch
delta 44
zcmZokXi3=6t28-Iao1)K<#jBK44c2Hv$Jmgr}Be|pP`tcgrSllhar`rxGcB`0DL45
AUH||9
delta 62
zcmZokXi3=6t2EhLp_Iqi(nLqWpjJnr+R$L~d=;_Dj}%lkyDP6_+5AnNoptjcm7h#}
S#SA43l?*uysSL$s!9@U~jui6%
diff --git a/src/main/resources/static/assets/images/403.png b/src/main/resources/static/assets/images/403.png
new file mode 100644
index 0000000000000000000000000000000000000000..2d2a90e1cc48230946201fef828e1d728a2c2c03
GIT binary patch
literal 108613
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
z
z3whTo#e2;3$rSe`31UTPr(Mmhh@RSG89T&;&eD>p3*+Si1@3(d)0ACVXhY*HbiF3y
z=ZGC^0<FyZxJCwEzD_C{Z~VaL*L|39wLH|$AIGZU-%2_IkZDpX{prtY#_Y;
zp{&XmzwNoI0ZX^WHfnT>-=1^5&D`9J=OF_#2(l|!snPYgX5MJ#fr>glXQgkTy!7`;
z1$S#>`YyX&lDRL_7cuqu;}{z|kFp${s;_6GVv3S$H{R6Ep>(Wera;-(t>7s>!#+P<
z61q#iitJWW9Ox&vr=#rz+Z3u#-E!SMJ_yWOD`@6Y`gN)Iz0tD#m`$0HlIRb|=?=?j
zz(TWXp@s!Dwr30Wz2zH-ImwaxdkgzHtM#I!`&{89kO=y05~5&QM{=`o3in#3T3z=&
z+n?&CSHQ5o(qrIZDa31K9R)~cba9lo%~25%WAsSA(kqxxmj(}iCXLN-Au?5Sj?$`|%I?~`y!3-y-QnaX!~FdG`RiY943
z;e*!H2-c8QLzF40q2|D#h1#up&?NNd|
zKban*Ip=l)2tjbdCNJsXbtG$nGIcfHuDIsX*bVnq_BszY_`(IIv#>a+>YopDs;xsd
z@hw!<&xgr+=d&g1vzJu$N3PZZ&;XbDeEC>4P^M_^fCi(kR5WEg>0=I}o&1Ax>TDRy
zm0>wK^PJX8Ry#mXukHt(ymXgULD|ZR`xjgIVtRqUGzg_x3_hssGOU13x|WgJNNIR&X(7&j00=
zncOx_;%;7Ycx6T#zM0cN7yFFWi)9XFDXf4uU(HR1EDcv{)XT^@NiHesN+Mp^rY=uU
z-P|^vb#M&XO}@U%p8}sr6qVR7M>Yb)dq+vaOS%j7_^)j?1F
zSSS42!etBBqKZ#|Pd&AAXz0|v6dAchhZ4YtfZ}t-TnHU*Wger!O6rzo>KZv1km08vgnU5?+BKWadSS*Y*J20aDFo%OQqbsE%bvf=u_K
z5mV(h3&xv^A*reybJ_Uf0_WnfJDA9&kNz4vMSiVM*87G#;id7*{PeT80Oi0d$HRSf
z)s2O1E-Pp=V9iSq>({jcIt1p_mUl#wFh1%xZ|=n4UcdBZIpwFf(RU*xr8ukN<9yoVtAr%!MtjcgF;&psAX0ZzyA~&a{=7m*xH8(D0RyH_8&7YpYkuO>`QJ>kB3dh6s
zgKh^huT}D@wiSq#uvC??C
zVQrLTZLS?WS2+Fsfo=zs&vYx9AMfF)`=@oJ+$t<&wa+|0JUt@!a1tQc<&yjw-{Oo*
zvm1@txK{`=q>U>@we)El+v~T0M$w=tEkcjsElHeSdG;H8$&0~`z44{un=i9RvUilaS+=s7mSv$gcVE|!1S;28@i0QMy%t5
z&Dq_uf}DQXR~{z^&Mcire2hZLdY$b}#EWjrUFBiHQwHLpKCXr#Xf8AZJn*KyDiIp$PF
zW8;;+w}LW;;qApbv}s=e8#QBpAZItlo)HVR!%n#tmTAiP{Te)ruBq$PX0P$#MF)JwH=lR-T=K9;815H?dCnp=gFk%tyz^0Y@9$VsV`dfDq`vQ=3
zZQ-7cyPIlkS8+haWNWn`PRVc{C?E}`>7$%?i+4d&QM+gdsl0p*Vm4{D^A-uMSqECO
zJjE?SRuqsxT(EE&-MID6YXqA*W6siw&lub8HH6==Y4-fxsFdUa-HK1z+1IGsf9cSW
z3~V2Cx^9RZHL>SuOL>@BFW*gT==dPJ+!pIBHh}c-m6){Zi^9iQNmeAd@abn|V!2`P
zbOAF)Q~h*~20MlT&%F#k4%M9pt##?gpYlloN_@Q|A}5&gsm8)JL8y!iD
z=Bf@JKr7wu#|O^+PQp$~D>A^#X3Ui7ONX_$el4#l~jC4RYPt^d2J
z@t9gr-pu1VLM3n`VM>eyF;JJzCq6vIpv3%Wvhaid&neJ4%8t0e0GsDO>`cHnur=sO
z4O~{9cVurY|4vC^(i7iUSXii^+6wj)PI++k)HTF@hk>;W9=lm|`MbpO2hpPbf%^KA
zN;Vv2PwYuY{LF0A4v-F&EJV1fMvS%KI#&;Wm}2iPZ^JiQQe0OpwH!-hzcld2H&i(k
zxw$6mPYKy!I}AdW-{w>|2mhl;2nS^qp9!4>RVWNm%dnyMQL+3rZmm?^N{?}}s(d)p
z^mfLa(ZCWHjQ`N;Tx93Qr;l=E{*c1MQ87ZM3Q_dfDld;b_zXzKG8g(%>`K
z6$^NNvAEdTot)=!Rqt>}J|y|>d+WX+YYA13Ho>TsLEs-pA1w
zw5s*OV{Px`*ta!R(+O4G!rsBR)yP2;8t5fB#OYP=T2jZ7@1F7>O`0FPjnu=N2)Xdg
z%FNgsvXMs9Nasp;Dpttr6Gg{1*KGk9P0yaX3SXL9MJL|yxRMmxp^#{DZ)d(fR*PZ#
zDzKVJvoM-qr`;b))FdWDmwGe<1HvV7Zk+iM_fs(%pI3#MSb5b?=5tKE)iY%A>KlzH
zTX^@>$W};Tf%q;^yNR#^DnI~Vq2+NxQp=+)kkYebNe-wH6gL-NGGxdEIykdTJ_z*k
z>D+Zw^j*o1b!(YIyDu(vIBhN+U;o`wl>VD)Du;0H)R?Q!Nq9tKle6W%Nu5=wOfZKI
z@xSe56^hNlG|*pU2y$;4s9bUWKxL}cdG7~Lu-J)UCW`Atk?e8XR%0&Y)e61s4J9IT
z$7=9qb?OIIsdDt=yb<|PIWN75U*=}a*{8URAKNq}HoqwL9mHj`R0^H(L!
z$4zOrj*XXBmW|4`T{N}^=+$lF9hQuLSHG!1+?BYeLjKX{EMIh6W7|x84@B_c6OuBa
zzopX>AijE>xm-ux4TwcX51o%iI!InEXQM8@q4QvPzd6l!C%KOS;gVllTe=7Wshf^
z`QRA~a+ViZJbEw-WYP#z{W{DysJP>4Ja0$TVayk!7jSUdTbY$
zqNq@}N1(jPVgggomR`AC2fpz-InVq79@ayVTd}H?hXOPe=gdU|M2szNd`@{9p;Yjc
z&SN~rt*mtId)s`NF=ctPMydtVM?B!?t3eL*K`duhV>SEH7MW9eZL`T9=*doX4v93t1y}k!!)F}yPn@XH
zljYS9swTUWjV_fpqiv6>#YD1}eC&WY(#+YLgqsNHwoK0_RH%51(ykyCVNgLD`rGkF`nE`8j1APTjsLwXTBvod;m^GQMq)H6
z^=u7K=RT(I-uLX$Q}F$pW~&ObTh!UZfd*QrD`H5}P*Wv&O#Mo3J+v}L(twN~dzsS*
zy1V@h=|)k{e;Z6VO=<*{#fD`_hU>F;+B81n6wcv!;|8F&Ba9T*-E>Dlxn;H0hq-gv
zzKwV~OcEf9JjV^teIq}m>AfIe>)U7A0yf`4s;Q#Q+Bx%QFVHbqN^~&ar4rYZpg$)Lx=5YelGNER
zF`%tkdbUy>;z%P&A8Ut=L~^vhO}3h-ur?4+@f&h(*fMG#9tm+vuw_X`-O1MM@Fvms{1RyR#@x-}ky)=<=QR2o98`L-}2;2Flo
zK)~x+cmU+?JGG~n8jdBm)idZFiTmYUnp8=^xniK?FZRq7ItXL`JV_s-8|{AxJ@n|;
zajJ<>?Sx<)c47qzzd7hgcge>BF2WA%{XiG^=ZRkw^hICyY33YsNq--75>2;7z{n9~)oFoLHzIxZyg`037%B++uY)tDz;OpdG{P)|c@I4QPkl)aICa|T
z;9Zg0VP-3tZ|-5*sev>{a#%CtYS_ftbK_Y~sbzd-*b64-eP&TxJ4WE5O*QN#>H{uA^>hfZAfC4u^q3LK
z1w*3~`l39W|C!Ac|B3ByK$pZT2TwfaiL4q!h!ao`Nj{^~a@MLA&m5|#B6%IX8!ulT
zU9_=H)tv{<^I$x9{V|x-QQeJe6;667ayaqdkF)#>$l@y!K>y>r8XKRx%DPX~hbH%<
zPS0p?gO!gGQ-u~iXc=bEJq21L+$ja#Klc_)cA}_7(}5w`)7mHz@wM#VRqT4||LWjn
ztbD5#7gE#I^Lv7vvij2}#^jxCv9
zqy29y2Ig9;27HFk<+bd8tpDJZPdzwEtoa#+|1$am$7KYCw|lNe>mNt`=X*Mr=z^FU
zrV3us`Mhgnz4ZMkb)ez{bolTEO{kcOazVplG8W?|zzbw2gJDNua
z$=q}
zEpo{dQ1o7^2O|y+%}@6isRR8EfMn8Ll?4O#PpDKWb&PTUdgploE_!MZu}6SVOVmp^
zxSv7i1v&%OU7urh(ja#-ux*o0SloGiOk0(DdyT}qNus(*a-vl9f3abu`?FXnbvVs<
zakr74;}H=2s_g78gc>vfjUn_T6bx!ePrbMl$!&J?j8O;R0KQ#QL&%A9{nY{PFTu>n
zT}l<-$Q0I+@?}|Br0Pqz92|cPEcFk605h_g0bt7Fld*vcH?^rF9kR2rNF6BzUE)VF
zx4#_RVS>NyL%)oQV{1&gs2+K+PmeRYKwqx6dqTpI|jjSr40f)U~8pn@0r4i;Yo#am~4J_{`Es8rqEhv2flVnx%(YOMU#SJ%K%U`
zjZM$8Nr1lT1hud&>(bZ)fmgNOvf5jU3rl10&2?@{@7=C43z5h-$bz;n?2
zULX_MQp@*k2?|mRns>$vE457@0K;$s+z`W)Iz<2JhK@w`7Rq+()7?}57`RUf?0({n
zx30A+1N#=M=1*)7l-297z<)
zAP@C672Il;bNjmAvYS(bshLIgAedBtPVJh1F4n)bNvyp|9Spm;4_%&u3L;w!
zLRHgdCuo^YH;$|G2=Z~U0fQx+0f{go;>aOJ4WT{Fs;9{LoTxHt?V=^b>2Js=-S>r`
z%b5Tpyw(yR=0|-59eZVl$TE$(@&{q_FsZ68jeIE+0La&tWO0=8ZZpO=Nhmz~NqK(3
zP$~3sYzf!s%;~oNtf->t7N9vTM9Dqhs9U^qZaqOHntb66{e7!^Xt{MTbRMofJLYWt
z1QJ>C-IN=&2
z$6OL=nq6{P)gWtWtb1c)V9%OK+wO|WfVFov96r{YUo6aj3jsLp{3xjOrm_pFRIPzDEg
zd0%@}W}Iu{><@kQb^TdqwgwyIELn-BuRdrP81{PzWsBOhK?5Z)4^=acWqiDp?cRb6
zS;^{UPF4E)1snS%xNycNu&6}s3+vL2aO
zMFJy37TEsl7wJc(PXH~=mso=?s;g@PAjsEsR)Q{=g|KiPGwW-g8K&N3XkDO{kx3le
zQoiO{a9fy(uqCksZpxG1N)FR=^chc97oSn$5D*JxKFrVcCH^ZnAU55!7#?lyjDS0e
zWL0Ia9}eKBsVgj6bn_AHuqw(7dAT^^jq^2W_?xBHK@#vN-#KWWBLN)g6^Dh{mT(b|
z=1P=;e$9KBTXyx#(hx^J!NCzyk_Ivu>yrLj|P4GHl9+A?JNWbWN@?FGy2{6b`_b4kf^
zA*gg)Z2U+2)>e;Gbf3V0uxJ)`PzB`bfK8RWaQuv+@lPhz4YeP)^2WPr&zq@53Z8q(
zCmOLZ_Jv=_rG~yx-&Jkk+#GcTz``tkoc7(51_t|vAFOLTLHlEsX(10ne7)5uv38^P
zJJ)|q`3(Caw9kYjUBnwZ-k>2*U4xrnkt@3Wp&NQ4rx2AXfFoxORWBFEgF6q^lQjGh
z6ZXTVhfiJ2pyF+AuDb_AO1jir7&RR6KI&uw8yB^+4`;a1nUOIh5y$>U`NeS2DOS9*
zk_;>q%(6!nRSt>88cW%DOJ_G$S$4+a3b6O2drao7dP3@L)M`mao5=Ap1ALe8H(r&?
zNr|@o2$#?4Gsa`PZ<+B{>6;%hZSRP!UK}|@SY_;N!BDjaB9B$<<33bhb$6vQKmKn2
zmEn17kOn)7l)PSo4J&WoO@~
z`X)xc_dByiIQHW<#eTdqV;%9M@^kp&VXzgZc)sO%Fkop@25vnSyXkFTyfZVFw8oZ|
zKwKUqO?&R!5Oa{NnX<>%EZpM#aovt-LWgVZi
z{#Ys~v$JY`YA4Pgp|riX{r}i|3#Y2O@PCvp4J1KuSua
zq(K^_q!AFLyFrldkOm16?%Mc%fA`Lv`w!fi?+nAdIIptzK5MV_JfC{@<{7wLDZJG0
zzb@p{YVrmjsA%0JBKyml^9nQiiw?+f|8y&R6&qFb*Z(wN5I9i@HGL;*zsfx^N*WG(
z9(@xW3>fY~xffrZnbFk}Kd~K)Vvx>oWV+-2KA%UZYbW;Z@LGxBs${9rAmp%_IW)Eh
z9c{bIPn(2DX6%A-uPQdl$dq+k_}XfZ-KE8q|1Az}ePCc?FHP8Z7A&O%K8d8q_ivUj
zNK6pvL`C~cGGv~n38F(b{cFTNs_$nvOE;ny*49X%{}w|*l>OLc-|+aQ=dRJ5%~Pc1
zZm=fyzEI=JMSJ&h-CeD*R^l?~7&4;gv}8mIu6CdA4+%<&?Rc>cy6fCj9dTIIEaJg){`3nzy=W#g+{;4yeW(19K8UH^)Q`>dF*kn@)=D?m+n$s^8t3AqNe{q|`FWOQM=@p(sXwi$d|m3_V9sd=M3
zN=2^IV&2nTl{+gZA0}la<~NJ*cS_B8hJ5%`Kya4mf#^QHk8R2HR^R_Y<))1QRQ0=*
z!QqDw8WiATMH7kI;#8c-U1P>-JM~F0
z#p(D%B~YXaw+YsqT9{NJb>IBida0_xF)&)_EP|z7@Z`mjsUP_m+BIMW@{V-{K-^3)
z+$(S56)^C%LXIUj0GEtja0|gev1e$dp+Q;0(>dQ248qUy`YI+OP+v{UC1x7RzLZKF
zd8pEpHvvjQ&j8&Ky|FmV*D>BRa(%sI!+PK=T!edc4!g_55*mCAL
zwIlx6u%3b)mejSPQ67qoO$>LIR1q5^OATxY6tXNl-Ws?3HWy#L?rqhSuJ{yp`>bov87au*R)bl)Ak@p>5kFm5_vK$3^=xs-3B@_VYZJST=yivF1B9C
zQm`7B>DtMyI%KdC_FoSLOOW2s221Z)gCODUR1xix!qg)#`Ipl*6KXyyRCaT30Ry`_-s|6^szq`@)I|2H?;8t
zDf`LI1P`Q%yQVc;=B38dPDY^0dNc@OVXbmuJ+%~zw~~^vQ~w#-B0H`5ReZ?@&|L{p
zAHFuYH;I=z;+=N&v&AhxsqRt)19)zOJ|<7ugh
zS^9dNgT9%4TAZ)WSN-Y8kzR{ro9c%^@hyR9
zejkfTf4S+8qVLe$w-hDNoo1Ih&1=&4!9Vhve3Ri!s`^mMY2krFgzrg_5j)_a?hc~5
zUKC#fdA~YVE*{RZY_H(HsML5vlSjhvHfymDd1+=m4Wf-W;KO`vqr_LoL2<#j_LltM
zo`55`AeVto?0}`lYdWK6MT3~2D5PVDzU8>mZpccdCvL1i`pfr7u>NJ3S5Nw(dZ}*}
z&+5_Pmp5NU;$O0QsP_yHE>%qbe^r7z_GCZ6@iU6)%lEW6lCn_iZbowkg>(>lz6+4~
zPdH!?6Zog7B#-gNCQfK^ik{$kjeB^4wwaGHUj$I9&r=J=e@Itv_qXc0Yuzp4>-pBR
z3og#IMTnip&(U)A$KseJ(ctVFbbIs`IDD(99w6$%1
zcbf)lRmtDuuP1B5dhhqnxV4?yw~zr$jl2P)?W>N>QT
zYXe1}$3M)z>pVVDiX*OPPZ?zf%s)r9g5+3lCaT!>ug>$;tN8kZamPPhr@%}ylOvsb1zsTbaVN*6dsUfu&P6kcg&KzRz^lF(Rga
z=l7I(`U@=VYImKbv{9a#Lry3-3S6#`#kXy`@DGi^m}!>UDY%e#dGXO9(d%=aSOlyw
z!ZcDicV^IdCD{ftU!Wad<(EUmBo_=6gTW>_>MQk_1VRgbqyioG%9z3`#~
zB15%p>vWw~oNPF!<}x%bu_$y;>mF@uEc6
z+lSg}rgPmK7~1HCo2*C^+glZZQs$$EP&))xU4Wiv&PaG-+XV@oB4)SB0|K?z3Z?!1
zkzzs{>;~dTN5E(8ceTptD;#HlYLq4y*Ns#yJ}eM>mh5Ts?eA|HGOWsOqcUdptjFLOpFLzIS>hhD&tul8{NO`EhrP=E=|I=l
z^O<^aLh!ZE%Kop4!CddQO0dI)f+&RdWfkhs26qH)aHRuXh$GD7r**p0v-b+`W|m6P
z6AGE`7Gl9p1}3XhCQv(6C6`JjjQ`H*U=eieEc*R)FX4Aej8%@RE;5sdB-9ZsK9Oh?
zH#DQPFsNtLOJ{rYB=dOUtU-ANlEacg=}x*|u3Ola0rZeE$3j<=c=h`Qc_GPU*xKai
zAG@aZL06OF!DBcAt+T
z&Q_FG4Z2#SPgLiNXMvBD8gN#LL;>Hp00u@Bkj7VX*pnM=3)ouvCS1wlFF*$y2q{`b
ztQe?hq^1ER#t8L@5Y9D;Qhk`NAqfzO6%r#-a$A6C<wku#z
zJ!EVTmI8KXbTP!qv>HmKmxzF>sb@i*{P#H8TQQUkmrBt7vqN18{Z)xDrZC>4)lY^k
z^&ppk=jc1IjgWNNz=Z
zfY`0(+Oexk(6uTk1CEgF<=#k^67`@1rA6te92J1inoY?l
zJ$R~>*I8fW{N?%HVXxA*#dH*pmR{-jktPsg5#Iz1na_sUuZ#30)qGukbvf30dqTUjlkx5n2T1CpZ>r@S541xQR&`C93nKXL+)zkcnYQ)lh(GF|
z>WLo|m&J(JoS?Xr(z?|af3%eJrbIr9iFN1@vytO){Lj*SOML(clCbd-)_%5Jsk|;V
zH<}vc2H@ko!%3=aP1baL@1vJ}AGuAIBLqw0ox0Y%FGkY|4pyyJ)zJ!##uK*&J0BJI
zZNk-b#x3=?jX+3Xm8PjX6Bnr4wjcV@3Oavj_l{)A7`#^2Ag^EiRR7{1-#bK!yynxZ
zeC_)S^QH>!#Q?Zv^~;|&HA>$iG>1u_ZV49E|IqTwmFh(%pbOS~VBylzz3v!qNf~wJ
z83&-N+D5dgvn~5xkr+W_O74hMg(YO*&SaGw&h7FRw8=FZD3IUS98+Y_z1
zKU{?r^@E5G(c-Tlt3y5U$l){(Mlisy4-~$ww-wli<6YU81gClr
z3kSwF*WMl(75#Ge+n^E#M6apejDLy(hw|70KYyVBi}AWu-|ZBW}tw
zCa8iSPEdk2>sgk4z}1t=(Yn8~T6|$&V&}-(rFpkF%tLbebJ$e_rZ6E|tY(yT(db?w
zDEk*O$n`Bf4dpS6{oqi6}#@y
zyC?O$^-{~{}x#~iZ@~k
zoF}RDWa3F98Uh=YprdMt{Ia?moxky^E$}Bj-QEF&l?f;gs50lNzCJP7c1y;y72ma~
z`lA|U_9ql=wJ{B)v6PSF8eHq-#1kOd9PeEaA*?+*n8RB*6fH)39QOy*V)#CknKjOd
z*LFxy_t3E$;drnjm=3Y}j?ystgxu|;za0FbB`xhTgBMYi@J25x#Sez@qM|p^D
zeAXF~xV>?t1Ho!^4}*M$!KRqVlgWJFOP$`g@RKG1%?p;)39VAHML9a}%85d@D6~Pz
zYcDt8B~iC8HXZO57rLO*^q5SZq!9P0lmm`32#b>f#WrMq2JgiN84`++HUUgjftga&
zHUgy5D(!a}xZ;ECIOHJ*X{YPVAg5s025oCu6&SJolg;HxLEVN
z@=K@+MCsIZ<7Y4<;nuFjP-o)+E}HrKw-A&hgc`_7#wxc68nh+A;{-7wWS&;7|&
zVa8~spYF1R_}{)SADi*?x&K{+jOFE^GdW2`~t2)1|ZRo=HUSh
z#byjeV{6c;h2Hq9$K~=fcWb+2n3-oOnx$Q~8u~oXc!q}6)_LHG
z(&k6JUpp|)6zK!tzizcSKFmvWs-h2Eo(w+lS}THA&w0FwuT}Z6&S$>p2tBv_+o)6<
z8in}1FVUEc(e5zVL#RzKjf?hHpDCYZe8lM>ciP6v`rao7pSgo|eQYe&d66iERc5EW
z>+|(=l>lO0lZ=+oVa*-D-1APeb=()9?|=PUAFDpTpoUd{C&(q2!WiGdIHh&m)&&jG
zTof{B=|OumNL~0h`Vl&9MV=2M#xiXHE#2-fViR-d5}3GtV_0WIi904(KtG~O-}UjV
zH-1gf3Cn-ocfg%{m?#oROm6D;hi9WsuG1HiRvP`8o(vfoi76WBRoL?oSlz4TaLc6p%#Txt+9xg<+fh)5!c)U3p1`L^5
zP|ED+`l(xoF>``sy1S6`-DQKtvvVmByu3#{w;v>^xPjzDe6fQrO@qN0z0r#Qr91Tb
zX57O#!FhW2t^m_nrD4>~Ys8JNKLg}g-m
z@H}-Fq>({cKFrUG!~<@U_z#NObebySCoe__$+(E4Tsl||?4Jb;B9nn9r}g_SPB9``
z^~*6`ZJ=yGW5wk~5MftEoN|5PZZOjq
zRKI-%Umn9A%%QH>@`ymWMyESNNfsh_EE+@bTM2q;KM|K9C5ElWE^c;|2e=?4ihdDf
z#VOWtiOMlI`6Rm7Di#XCR4I<(F!*|QtB?_p+6R9cjcUQ*Jq{)gB5s0d0H0OwM-36L
z{--t1wBkIyg6yDy7)usGn$)rk%OL$oFli-DnF^Z@uZjK|NKHsNzg;>|u7p;sE`sQ0
ze5jkbAn@YFw4f_anI^G$KMo%Y4R;E6&=iA`P)tDLG7OxrPC`4Cqq=76p3o~~jONV*
z*5;sJY9sW(VYiXBtsV$a7X%BhePp1BbGq6b8?Cc5$H~ZBB1$&}EVGHG?SpW~
zaB(Bg&`J{4h{_vo
zb9nD_bg!9lvtm#k)_eFjEOJ69)0pm>v0e_Xz8kl2LB*a_;+-_Xihf~Y8
zc;vn#R_4dHhZNgc4#
z*c&ldA*^~JSzj8q7Bip
zVb4rZvIH-dwuks7uq&q8)~QVsWw7{6D(U-O7;c|h5Vno-uWr>F{K*i1C=tNCqLL(J
zN(;DQC#v<(!fR-0OYuWbSXNvc4|>9IEwqEiqe|jC9jG+!6zg!T+8LqdvSt%%V?TSs
z*2l6K?p{EnP6%=7avj35k8QJaA1%=x(vdO;D9Dn9w|z+^;Q8W!wGt3R{DUK^aK?O-
zk7rb32zz#6sD#7WNa7+Nzk}wGRaiCi;`_#`l%dmlSE;a;P=_G)WZ7^W3kQPcPcA?CE{Pj0qfx|tS1QRN)cyCv$OtkLw}$$v#uhMc1-85qAgT7#s#
ze5=8NYf|IQ*ce;K`al}Z?MIA^9^hYxn-W$m^q#;1#UFW5#Twy=c
z`e6LIp$j64s{dj4(0Q4$xpn{RNGv~?*WtU~4!M}|+U)+H%03d5Ca?S=nW92d$Rx@-
zv?q^Pyr<}10uJ_O6cTf)(+7MDrD&1jX&W}$;*!Z#Kk`~YhB
zMy2?4%Je-}{U12HtVZY0z}q3pWK%V+Df7pRK!&O;65M8hN;B5Q!el1@O$}Cpa|wW>
zhfN@8nrXSTkNGnfsbfIOBks22og*kglNyj;2HiYrw=ILnjRN4QeYr8p?#-I#T??rX
zQtF3g^y}qCVU`x=4Wr6>!xbPPJ~;>q5dkH*EeFv8eL(PT-PEqQvmIivFjVvm`DoM
zvk&B@1p9Mk;eTCDc%%1Rd!6p_b~}%v$j)iP#g<9Dfn;xARWd=CIXxMAJ;rg}uo}1c
zU!C6^^@JE)xe&)t$=BHTOZXm_Ox}Pb*8L8K$kmJESnlv2b!SUqtplQa)Jx`j@6OBumrg+l
z2y5~)7&mK??Mmu_XnyXxTgl_S+
zTm+i+h3i#d0wPOrJb#tTA%MqZTGg&)q~>N(i9r>t$_2+y=!tiHl)9{Zju=yu%Xz*I
zwy>3o$Krx`&W4T-i
%uHKGlLX3EaU9(3Ei*KZ`AdYY$vg0%5&N?jX{I)iU?X>jWK
zq^1kTpqkc8a0W)p+9CBEwqu$kDTm^Z%?>mC{@
z=E2gXl{nUm9WD8ir&UDY!ccn7Z>1I
z<6}sg#9W7pvaF3bLKzpQ4@hB3TqC)C2pD4Tc(e|bO>9%*848d`BV;P#v
z45{XPq{w3CVOM~|$0z1x5l2vWW&+Sk{JF;^3GA)zH>bTTxJ=j1{(_rDXN;qmEKnTM
ztKAA<2GQ@TE8ZFuC?_=69;>y3UtFkzTA^efPMgwT(o!H>o#TQ;f1+>+hr05TGLLW3
z+(jPlfW_L*(z+0_)7mhUy>`KKei>ffTa<8`82x$yk0!c2niH$o>ySurDVkHl1_j;d
z!cj@A3g1bsUelw%`fwxzO;%*RFLxf4CMG}{fd@?uGau1I9*f`9w!EN!^2Yl0>))Y|
z+h*`nW`>%BB2t&7m;hve!EC+i8kSYylhoPm`SZTle_KIsy_vIv7Jm-c5mqVh{ZuKI
zL+c=;=!~T2f2!P@Z>GJrQ=}*UafjVB#3k9cX7hd6y1$3|EdP;STqgb;*GEgaBQkG$FufB%7|Z2S_(fx3g{U?1)G3k_tu;kN9F~7aK_TDsp9o)F!6mrj
zkW98_aV_uT)FMlD+`_A*5s;L+rKTpDMy5i`7VH%S3T)+%SFwV$b$9?(f!Sms^;fXa
zbKH`ZOe|O|SuF3fOLw}`G-l9OtRF9e4q16o{OQvOKd!jnod*)k^y#@9Vf8_%%3Cl2
zBo7)C!_uiI@>38xSwo+JW9D(O&bApiSdTFvyX8wTA5Naehg~HBQ9>Y2<0A4Gj*VA@
z&AjZt`qSv_JNb7YyV_9p6wlU~Ec?EX%o}i&$(R2^`dLKPYs7Sa(Zg~h7xw22d-=nj
z?Q-_5imH*EpP$IJjghu7zxijO*-P@Hc`BT4@mz)Ok;i?iT(HCK*WZbP1I$THg$bPA
z2GjWn^;-dN-RvTS0LhzW_x>O=J?}pRfsk5y%lfPmILjGnP$F{>&}PN|bb($$@Y*SY
z8-b&{BA_3+G%+AEeWe1gg5H#~f$XEX=t)>{xTDB6o{X}{$yVhN?H`crJ1w}Ze;9Em
z-6ysJ5~Ms-&wUGkDZ*~9fH$`ADi&VBU-=9K;{Xxj)nzOm6W|qja1;|4Cy;IlqPF`Wq7tCLK3!b?oG#SuxKjKeW5I4Fo7rDY5`(#DB}^lq--(!k~oBz07^r7L_mi;lx-2iHc(dH#$Ue@1B
zcI3NSY7unF;Z+ac!bYeJSPC@dScF
zrlP^zfokoalSMAh6gV55&ic$HVm@>ZdY=?maG+rJNaNh@RgX)SFaIhpwH$?j0ypi6f^xx
zsiSsIFjx|u=@P5bae6A%JWXUdN#_E{|Emn1&qJ#lbjb9`=xa>RkL49SH$TJa&=9$z
zVxZ9P&d|&g(07#6|j*C*ZM1jln|gn(IP#j53}eP;*IDig(-2-_+NM&8*@f(i7jmK$Vdn
z?tL@}Eka87hbM~6z`f0=Q{9(dl9~*SwwPP~36?m{L>Np*Qk%iTc|;N2Pb3DsKfFHT+WYI-bTNl{?c2yl28$*s8{!n~Hd*4W|6Y)tIk{2zt(fZs1^AVci0k+fP6$
z{4JNKE~SO}how_1ytI0cL%?&T+gVYL$`@jUZYw&M<|yM5DKo$mFGt-o-=62bc_G>YPa@N=NPW
zFl*=pW(ovKn5DppwEDQ&rNA1v&6jUXqZl(PM=;r
znKYsUa#}Up>>Nd8q$#w&GY!25C25d0^$mI%AiV&9Lykz04gad`tZu4B{9hnwB&0>mQzFxeEzG9muieyPQYMl+_AAM!gp~J
zQT;H994bp<@cFKmaD!x4iZ{;|E@Ws`EGL@KL;QBQ_7~*
z$dJcK@_NyOd&vB&Z@!gNqz*ZnB9aWL|`G0yqxFQ1j50
zf^}uzUn&P0SDyo|jgsu04lCyL?yX8TijC~vh?lP$xd+Tt6UGBio8)D@Mp$Q|0ju|u
zVBcP2F)VgTi!8B-?@8`~;1HUE8gMg{Fr{%NISRfIF&r$BbnUPmhc?#*s{9eIrzfA1
z_1|Q?0unimvcDfNAQUVYRZ#OoEFxn1;h>ZuXPPvp%*elv-3h~xB8}ESLfPhK6>)W7
zaNXnnwE4KVj5-2m`u;mH;ZC7->ehtI&HSj}%?}2Ty3FMnMJwju(?S&8U84ggu?)-v
zt;+7Lp^gN*+tfy1?3Hz5iz;J7uVzfmq?sWVjKVOZFSBKG`%ZhfS4D&8of7;dKKP@i
zbN8Ahd(M
z@J9(^z`C#8+akPIEfb08`Nhv`yAo`Y?FeH$+*w5~GA&13A~phuBM@w+$@Ub#QfeG}
zf`#f(OTN^W25@b*3LhZ4q=d{qNn!_iG1~$TPOaq1K(W)m
z@*Iu<5OM6xc(yF)g8AqnM@tUHu59WylYA1^C`BjEm^FVYLiqJ?on%r#Lu}KqunD{s
zK9tm*s~`D=U`m*asSBM$q)TRXc~Ug|88wf6WTvthz%5BYbF>Xj+|G!(kH5Tj_^A`{
zMRQz+8fc}pOYf$og0aMgG8O;4NPR#fLR<}^qTdQFaC-)7JlVwS&2&9=%r$G*@Fp@E
zBpPf%Clpf^xb@#|x8V;SFh_=P=*>vC9e!~r1;sx%Nbl*Uot3nfSc#F6s<*Tn4UZA
z%s0f`57@AWQL?AKZ@ZjtSq;4IhazDn3UFb~y27Rea`pref#-
z?_`lN$vV)G%@X7Kj5tgBtJ$E>6gd7TV&z4e`-~>f%4&uvfoYCLlGxs*7Z^^iy!py)
z?NmfK&pOT*s3V;|I4LgAIgKi{1Cj4@R&^f1!UWxHGUjJBKwwxCvZ_~%Q-&AR!an|_
zsP??Ep`Vx|Al3Wf51gTYj9Z2;v;#yHJN{d_@Rw*HipxaT+i%$DHKr8B3wX2OoSP}*
zJZcj(NLsXKBuhO@HGl!W_RH5#trnPC4noDuEWgR1!3aX%1j|#&=Fz;F4+|pxx3e>G
zS%I6Eix{E+>k9g6{)GV~QALq+>7|32bIoRnf5GYA3RIEWbXB(@Cb%?)8Xid9Rhl@-
zgLXRs9i1lY!!Zb6vr
zA&CUQz(M&wlp|U$tUTC|a(K?n(@6(!@5#nz;gIBX2{f3N4?Y~*y7At6tX0f6gcS%r
zVq3D-ywuxJ0F*~{=zTMFIggVJbsg%Pl1?#$8Z@!1Lc%w73Ah<2MdPip0!vf&*R+mW
z6Bdm4vc%YyT*gx&J1V{x>N)Xs>A(m8Q7Q5gFd_U$Pk-y5zFu!@FMlqz3EIw|uZL+2
z{hJ}XRt4kkSm?A#=qH-?f4i~*8iOay;Puk0e`h)PUP0mp!1LsAO4u8URQJ!aCg*=I
zQ^dI5gUR15_8_x&wWj0mC1^hgtnV^0=%LAfyRe@f^loPiKl92o23XKw)>#8O8iYh}
zdtV&$EvHuO+zlgE>keok*(;Pp3*)>w4gTK`(U&-+cLsg_(}3&Sy$S7+f#2Edo*Qhe
zrD*0ZcHaP1IEwPPk>1dE_L(8Rl!bZ)WSE6~#opf6mynVI0TTT+{Y_Z~W@k)QP@0bY
zwyXQc6GTB36$G|{CW#-D|L#xxKIlM#xl-e9mWUtj3PwCgEs?kL7)>6@wRCqAT!-th
z#hK%tL$N|WV4$RHjMCs}3g~|qhvn#K%K5~7RqA})eR)y&K+0_7Pr!L3KiQFYqh5Ic
zc$LciMM7U8C`UQbUiJbUZgE15TNF(42To-l=;wIJzslIeaW0(9g&uk+W=1W%i
zI1p!-cLn(Fbl80fnxMrVq;elej4y{{QA6n9uPM)_Xukc4z%(p4;EnL(0BJSYx
z8hpOh)IVkjxByEXiC+&BczjR4&Idv>K^8&&7>!nL|C!V6t71EE)*X!uzRCla$m+@Am$^^P-uKF3jnK>O*6zM8lXCwIMt;QH)cn0r
zKxs?&+4`d(wH?_o5*Xtu@-xI4hW+^4*lv9!&zu^IH{2X@=AzDHgG#nh1;(>E#XQ;M
zg9@yV0yerV3WMl7Z#^UqyBJ!TlC7UZswSGJGJnAob9OLShVK3>TnJg$$c8Pl<;7JwXIp{e@;&awY7X$=84X@v4iOQ-@q2lz&kx>VctOI?S8Ni2{
zR3FPU+Ew%yG-LS^2(P@aWbvzy(O;Up>+$n$csJy&p+N3=On$w{Rk@7xDhJwOM)&tx
zmq#ugfBr)GXgAjG+Gu^ZR;sxnLHB9@O|I|2f@tI!G^Dhn?>xpP+MZ>w^yxPNWC5(suKEmFvb%SsXNcrV+*sDpu%
zk9DA`;NlKC0gY?=D``#|wfCeGp_~NsSHEli6!wBqw`nWk=x9%iCKk+mmdX{L_wum^0!qsW9p~(37L2wi(xfY8Y-&jMXw*jF1=k5qF
z^B{x30KEo)nhm@bGqLD0eur!R)rgL1`OzXc;{UBD;!y)|+&iv(?pl8WmjEaQLFF<#N
zHexBZQAs8g8TwE}oGhM9vSseB^EiZWYG@f$F}<17|c
z05+Pgo~7nHbZiaLfE$@bII@sfJihC*#=<@xdHMnMzRc4}vrDmv@SPUa+PeMx-Bahe?!Ei;_He(u@VNO(I|2
zv~|Ylvo_5b9&*Oouwy9b7MfaaCHp>H+>3xBB-)x?Ini;Xd*i+Y)h>vvux$r|;n6t6
z9oJM&Xdd)S;38CVcv>>!*Sl)vnqFI1;yztlF^WDShqmZKtZ
zDs_}AsvnP|mGSJ>-!wnnm*T?c$u>BE;UNodW>8fm3-#{8;Aea(MxDpdQUmb3
z%-sPm<%{&|^YkUq%q!1ZOfoNiGKrPYV)~{YaUQP8*E7sHrSbmT(UK?#$oDHO!(D%fCS9?GB6+sl$
zaBh9?gxHJ_3Nmp6M#q?j3z$B&_EV4i8IPx_TMXh|l9a2Pj&H|^cX&!Va1cjzQdD35
z;Z`>friTPTX{$wDXaqz^lSFB)xW@tRZPxC5v9f*p9d0xR>%B3F8fKdU*t`WjVLTz7
z-meuC8OK}1U%xs!(|3H}&6<8(>@?)vE-i2v)*8jr6#?ZTq6$*d`kWt#svwDDfkp0vk7vt79HBGD=>MDi>?BGd`3R_4F9ZYQYjXQ
z5~pv2E7N-%$%VwZ{E0ErUij~*{@C116p~(yhtTBjPwFtJiJ2Kz-O{~+V5^6v78W@a
zQ_#d$dwUxECZdS1PU&v3tuVHVY>|)dW^1YTOFUsc{MehlLj4?qVPR}SuRlZsAj(rO
zgt}geS#A=3%N>r_VU!!0p|k>eL90i}sn1MMU(!sxRMGChlwbZOKq$s%fh
z%RWgtKlY-&0z%1;TN<0A5jv+%a}k^rjDikaZ|Jl<-a@ALWVY0fo8H2h6r43tXlXG}
zHwwO_YA}{M-oy}yY-GI3HX-UZj-j8lY6C`ev*{@4R(OoqO0N`}yYDj9JPsge4d%CV!@d4NoULFNxF{R1J^5G6<&z?TwU5af7{9ww
zV#+5%k#Vf*cK3UISCyUaq_1%R@8XoD_dl#Qt(o9&6YY|QFH
zUo}rw&!Ope#5vE7g?_|Wk@L^o3OR}AmHA{kHpJ{*=An_avE$*^~FUlWM+pVkM3`L)d?ZLhGdo`xi!=K4qqDy{*4TkWAJw
zPQCnGaJi+&?7uh14_8qNEloPzFU~5iBci!%Fauq}C#(U=XBz2S1KYP=a&ZLKiybjp
zh4nsvtKaG-%bRapGsC(;XE(ZvuzUI)e&wLPQs
z108@DG^%Z^w#WF6Xo=Yn%jd!-HwL5Lh-DKI4H-y?l!y9KDq_m-9D;Mr>zrZ280HL0e;%e7$)@!QqH^sS!4(d1uVHO?5C96w}WL*Wl1LF
zn_%x&(DAbSdvkptYoR~m75B^l238Qb2xI}vEi0&ESylk=`q`oDCP^6h#GZSf{|u{#Tox>
zVuJx~c7JNg^6i8DP!+Fxfajz&0rpV_hE-e^pC-VgPrSMY#D@mR7GB%@wzPR%md~jIvh0kQPpy3K{_%cPn^S`)|bR;Vjpx6HV0sy
zP36!UVxud(KnRgGm}^BA=XQ>&zPpO3Q;|3U=n$=z7i7v?0@?rUS0DyY`N2T+lYVgk
zbhkrA>k>59y&Qv<);^qgG}Min7+WGC=tgEYZkxdW=G1njRBd`kJ+u75+cH|lovevsryuA
zWwLWpvcrND-ziWw?e(1&Z<`D1z2-p?1Tg9{#uCJHEy3*003`MCwd+a58+e8!LC~=M
zt-jo)*7xX4FInRjPrwbcb2AVwh0$1s47&Ck0b5J#-p{$;)qHxilDEh|NegWP!I7FK
z$$$|UC1({8r9}Wmr-HLfjDp8nsEXXbwHcsS{DK=SqNz
z!AP28r#Q8xc1syhvcElTSQj_RiV(m91pjgNp7)-oyVH%J4``xMKv#jTDo+N)gv}U1
z$Y$W0BX$8Jg7$%8>wW-w0A?$ODK>icoKS)JBQb(-HCO_u#(5hq4}0mGeD&y@AL&DG
zJpL?V)4xzbi#RGJ(z^pmgvAdK~f*DXhz?G5sA1BZ3KPysX)t
z4NdB;#~s2aU3YP9M0R=TG{Nl3{fU|;erq6=8_o
zBH}?Hama8mDm-B@7~pV1P&y(sfyD%<>Ipyqb|R?}IgaF?sX>-*0`#F@_uAABXj2J8ORY>pCJPAJ20r!~|c8VqV@@Ly-IFv}3AAFOME|kIl
zkf1MH$1Cp5KVaH;AJQCNid14jogny9Wgv>E4ML}ZN5D6rnd>|l+^{1Gz3^rW>)f2-
zsy?rgJ4m70;WC25zBGV^e^0Jnee89!oiafmxGna7{|*-hMh`qf#xIkHWm>3IQA3*u
zYGgnu6D=C|;u+tqe_Zar-}yh^TV=qGv_DqG|F7ihrs%I5q`+t8AiAMtT!izoS7XMw<|NJKKFyRb4H6f4j2
zfFU#YrbLQ;&i5@}AdfN=j%+MbtryE1%A-SpF03nU>z^vYCrrN>KYgE`@f$O%_R7v?HN`}x-d18leM
zT?Gl5SBV;2uT^hUB9rO!$dmXx@rL9X(BK&BUL$0j`5O`>zxj=GQ*B6L>w@*&+*Jjn
z{(BH)y4v{TBwoFFE7gV&G$n?{19FFGdi%OQbFj-A$7&~^AW*|2_BXxe-rBzfWgCKS
zn@$hv-SG)g?}4n(8_1+bOe{VK8(;bH37h4}aK^##8=&P)tx$gM--&4hiKH)KZ^O7T
zox&c65rlDgwHH`mmpXOS^uJ(?4f~T!;aPhys*1{VuiriBN2UN)%j+fc%aLcl{B0}-
zc>1%gm&Z_=-wv0Uej}@1nP6z%|Ib}{k^wG$x16pRknb7_G6imq=V_$-hdIKII4mLe
zn@0olFUEg22Gd|;cjMrm=d`F&u!zew^63fwz-#a~@vM4saUv4U5-M2yxs`Y=*C+C}
zYLkXG5Y5n-P3R}w<8Nlctg?QM5z$u32`x4wx}o8JVPIuFaEdL`;f)`-PlI_k><;Fl
zYpJlJw?)-$qj2lx$>~|Yu1UEHws6pbA)Ycx^zzv2%gb4*9IGd8%IzZrLhh)h&Q7Il
zo39hYoSe5iIXM@@zWF=b(%|T_4QNfV`qygBi(y!BB3wP!8|9xgJEi@1R>ThnKXZtB
z_Eh(M)Wi>%q2>(vREs-4v}BV~9;=)5k38mjC+H}GlG-%!dw#wvs@%??#1XIg`rii!
z9ajE-gjqr^vlwp_9XGJka*VgHN?x;BOqC{lB@z7Akt)iJBNvv8^2@t<>fUE@>Z$nJyB7Sgbi7vuZu@plu}3-88m#d
zk4Viy3_7Y#W5{a!C|d2zEVb@^Zeec58kEQRHyBU^XXaOBM%xzmP+p04p}g4E6*lrB
zFZ|MvwWEI6H=nIbW`-1qzzCzgJ13l>ZK7d6$2^UxY4pJ+L}2|AL3-w5FSzD9`+sL2
zDvavA-H5PlM(B^e2v8g
z{xZqIjp3%?e|nNU5Cy@dg7t`H`hH-TsMd-nlpzOsFL8)MH3I-T?cm9oZvLRgOD~Y~
zJT4E@M$auY{)CWa;1yB?+&=%^D1rY_zfKF5h7pG02P`kl#WhpfHEI+WoLTE1XPsK^
zDqh8p-U2@z%fDGUK9Sz*eGKI~m}ka!r~iyRgg9Vlcl$T?gI`+8{sN_9797uc0Mg)~
zK*`(s&3JH&5p>-t?_(%B*D4r2_-6wbz7
z-o&blG!$Ez0;3CjWcmzh!$$b7228e()>UUzkL9nL8!znyCa#(ThvLGnwGNZNBT>
zL7D%gE(RGOe7!8{6i;e%c>Ie@YmqyzY8U&=q4ur~uqBQV-TkZX+SOkHtz+ia{U*eJ
zkvPL(^zv%5?wtnLujDUIOA7zLAd=V?1#URPt5|JYDWYG{+5CsF$N7eK|NG14@DG?g
z-%CY+9}~m~#lb$woQPZF@}qp-Ho(7R)-`Q087OL3^v_58f1iKIhb1vLD0+~Od6y?-
z9MjV*pz=BRzh7wDKBWIC>A8`8v>>s3zHsuv9LEp#Zk9`M_(^
ze^p;#%rt??8Wsh?L5qR!%P3m%*=ES%0>A`37Q<7!~Bi
zZ-u1dZ(?|WD0V1N(O40ligwo^bti+ljK+D+40tk-Mm6C^@8cDta;5P$X%bkB4X#hi
zd=(nI*M%|#JRvAR^(Gr2v5lFx11yY&ti7|DXsqD5pxNXCfC0QkTq?EN7sq*mVU;S0
zJAhWEovagO0LOLvL&joUsP=CRv#^x+sB`HA3FITWUvBiI;Z8JAxn&_MNTh${ra5=uz?0wvgtETB8w0pLA@>YCP=d-;4fa}w^M
zk-alVb&|G79om857yo*DKndIvo6-hz_iddeVh9Y&zBzFN+0og)@@-hYU_^cF2!~#Y
zxmdS}qY^sI31R{H8U1hkI5>meY1;-xGww+SPB_WAXYon7SPV}eJ3W&5z}e#a=g|mh!iUR
zvgSS1Vqu$r^rdp3{_sqa=n*}C!R(^@_dWX}6Y{yqAwbPgLW8koh%9y*Y}EIQYL~O@
zz0c1PKUbLrd+<+s;Lml)i;c}p6sA7R$EMBJGa5kwk80kzBg@qVsm{Cy-~SA`wQ$O3
z2n*%pwVZg3z3WYI{ji8R0f7%XK?z#N_obV6s3n($SC+H<|HuH~VevKsa_ULqv<8!f
zu6FxY_tF+G;0f3uh#uAf+hFY)p4d0OGLJ!<7~k{dAf?yB71{a_1)&qzKC}@;Rk^yx
z-6g?klgk0fB&!h|~LPq#hg7B2n<7kyyiFAh!V#l@gIYImr!ddHe{xWpRiq9wl
z1>q~I1fM%RxaQuFo@6danv`WV0ehD{ais=PLmAJ+{!+p}aFTDI%>?!+Z|P^5#v-A@
zo3;;5V=ch+$qGSh13ky10Kai1ZhLko)lp_zsoUuoY8=%Bh4F+;vM!0+iPP+uZ)sI>
z@frtWxND|yfUBw#9DNrEW|xlB&%SvE`&&OiYc;#ba`3SL{-w1S*gVy7DEw!D{uCGF
zEXg~`>IoldxdO_2*1U!H2NqRwL0N;)=-m_rjiyGlCw@|>^>
z?wYg~=e-$ac)xJmpL9#NFQMrOh=wD9j;Y|$A*q{d5KAG{liI4BfqAUE>Me0vq=hQ0Tksw%z%b=Kx0
zisE8RIsHgY>4swj8UmTF76^I?)mgVr$YuYD-5&HNvO!p=H%A+xTlBS!^!MAkE|$R}
z*B)RVLvu{5domWQANZ#yWH=kprF|FHNt<09$TZZS0D08#hYcG$c|Rg{_`*_GcT(kQ
zu)vmZwR#hzk(J-E#ft+f}=GD6SGlr6)Bd@u*bMU^CF&~CDEJx
z;Y~lAV82qzQ*rEx{4~+NVcBPR-Xkr{k%BpJf}i0(^c~qQp7wT4`j#|6t`$UKJ!%C_
zu2=iOvimEFnB9V!G~(zb-`jQHAsW?pf{2eXI{}ojgun1nDLSK-l0HilqpFx%QvY~=
zVDT&=*@)JI+JE&6OBLTq=Bh?zn|tq17?Y{PYiuu5d>lP0rCY%f9z={o8fQ;5jwm?)
z*wtJ<$Eg@P)|ds0u0@1zz+F(YRIe-4`%^al@)8ftG;SxgsD(`#I6lwu?7k2=_ZiY?
z!)lK#ge2Hy?H67q=*FnGuev;w%NMHZp%X%1Pxg1ho_z1kcV_q_%OYHB2kKCv;zPLW
z380dhAgLqkol5-6b*KJbmi?}$K0s1eYQS(q^9rT!+@4?RsQQaXpOAeWFH!V
zk!(oloJthbyTK{?tn0?WOUy*<7buo}T~!Wmu$jXR;V=neY-S7{{vOI
z4JJzpktRHYfBS*=Ou&!QHCTF{N;o3?H>e*~x^F&{I4k2Pbl&lOvT0k6f7GzBmkLaM
zPkc53u8aNaTXU9dcrs6&IPGHRs?eO}#LH)%IBzd9S<#lqgk1HdSNW44t(6J>0cnJf
zmt*he3Mn>Yrym&Ex_&C|d8Hq)sb|@)R@PGnqrx_WN^l=S8v5{-RORPbug$>7rntza
z(ZnA6@U7Gzfe|TICe_m}U}Upwku^F-x~Jj?
z2~ng2%rGumPdlD8sfrC}c^2j$UqaS15YnoE8odVDV$T`NG#
zs$s8S!sNbrxUoMj9DLD+KRYyS$Mf3JHgx_j&)zT
zic+tM*ZORQ;%|M9SH%Zs3O#xq=qF53%me1!^i5{*KlhsRE3^G8JwN5ZCoO_!=
z*joJ)#Dq!Wfj+=Kw3hx-Y4bWo(zM{PScvTVdG#~L!>-uOpueg!Ba)jPAcs6
z^ZE5=^P$-l5VRs6`M$}$@KniTt)-8zN&3BRdD)%)o+3T)KM^uVR^6CND>3p0ngs>ZdKvc-@s8r_G%60H;z1ube!l
zJ*S0GPgAXyRm(NG`1)m%!`Q3avsMF}x*kbAI{h#?u^h@kT%B{CCavr+A?Uot6~e4Z=vuLD
zHB$PLdQSBR6!Y~>sZh{LZXkz2IG*ThRXzKe7i#mddQK;+805K)ft|7>p>1e
ztlwUya%~I^up5!`ooA9<04J}JUy_b+zf^P4o+^Ue4N{P-I
zX|i1Hr-ENO;ROal76^ZoybVo46HByM9?`s>-3llY+1{LS2>_+z_k$L4_4$x#
zqu?hh-`}Voxl6K*ZBh0d8m@PC3;(J3<_|M;E?%3MrNY$Pbg<%QN@E+tRSXKZak-qR
z$fkO&y%t`^)~76Zl*y^&>0N6#Z24Lbplmx+7Ef}0PanU0izaMVU>gHhOp23CiVO1E
zaxl(3UO1?4P}Tlgq*%X7jf072is0rf4OY^g`-Hg>m+3FkLzCxtuu}NJ0c1UBg`!Bb
z=pxSxQ8r(DPU0B#WV;8L7~-->->!xz>CfYf)Eq9|?78*6)<_mR5&;C1XAl~0%q?|P
zx-m;)h;Ln*bWZ5B=Pt$ASnV$~X=MM%nsAt!F9PH(*57!=-^57YVun2sQCI3zTF+U#
zVi2(J-uMtZkUH)I-}uz>xq~0p{=j^-+vE28UDkF-Y`CQCC6mr#?wh+N2WTDV39Z*=
zg>LcFMLwPP@Xl>XPXi?0Z88dtho1*+U%UA^A@Q*Zwh}C)cLN;S9pbtfIUxs6D1>?`
z6LjBv*B~;HGG|isBnEF5nfH9$2Fr^Br+MNXf1a?%OFs<(2kX|JV97^c9R$n!}!Mt-dW14E$?f*(Q_|YE{>Jy44731q|Hupi4L}-hs({b#SMg4ln
z=`vMq0B?5O5ixUE#60+xPk6a8f~<7zjq<17NV27B(-=Nd55DR7;f{u~@|oqL&S?*>
zp+~Md5r>VAwmmsb#;Ejv&8K@HPt7;CSQA?AO}dQtvaBM*(wC2wF6k8N