From d897c32a8fa8c7e4f3f0395bd33c0ab7d451ecab Mon Sep 17 00:00:00 2001
From: mx <1289317512@qq.com>
Date: Thu, 24 Oct 2024 11:18:13 +0800
Subject: [PATCH] 1
---
staffing-admin/pom.xml | 45 +++++-
.../custom/StEmployeeController.java | 58 +++++++-
.../StEmployeeFundRecordController.java | 14 +-
.../controller/custom/StTaskController.java | 39 +++++-
.../custom/StTaskSignController.java | 14 +-
.../employee/EmployeeTaskController.java | 32 ++++-
.../employee/EmployeeUserController.java | 8 +-
.../merchant/MerchantTaskController.java | 8 +-
.../merchant/MerchantUserController.java | 3 +-
.../src/main/resources/application-druid.yml | 4 +-
.../src/main/resources/application.yml | 8 +-
.../staffing/common/constant/Constants.java | 5 +
.../common/core/domain/entity/SysUser.java | 16 +++
.../common/core/domain/model/LoginBody.java | 13 ++
.../com/staffing/common/utils/WxUtil.java | 6 +-
.../web/service/SysLoginService.java | 21 ++-
.../framework/web/service/TokenService.java | 18 +++
.../com/staffing/custom/domain/StTask.java | 132 ++++++++++--------
.../staffing/custom/domain/StTaskSign.java | 4 +-
.../mapper/StEmployeeFundRecordMapper.java | 5 +
.../custom/mapper/StTaskSignMapper.java | 3 +
.../custom/service/IStTaskService.java | 6 +-
.../custom/service/IStTaskSignService.java | 2 +
.../service/impl/StEmployeeServiceImpl.java | 25 +++-
.../service/impl/StTaskServiceImpl.java | 88 +++++++++---
.../service/impl/StTaskSignServiceImpl.java | 59 +++++---
.../custom/StEmployeeFundRecordMapper.xml | 51 ++++++-
.../resources/mapper/custom/StTaskMapper.xml | 6 +-
.../mapper/custom/StTaskSignMapper.xml | 35 ++++-
staffing-ui/.env.production | 3 +
staffing-ui/package.json | 1 +
staffing-ui/public/favicon.ico | Bin 5663 -> 67646 bytes
staffing-ui/src/api/task/task.js | 15 ++
.../src/assets/images/login-background.jpg | Bin 521275 -> 0 bytes
staffing-ui/src/assets/images/pay.png | Bin 140720 -> 0 bytes
staffing-ui/src/assets/images/profile.jpg | Bin 81131 -> 0 bytes
staffing-ui/src/assets/logo/logo.png | Bin 5663 -> 40582 bytes
staffing-ui/src/store/modules/user.js | 2 +-
.../src/views/employee/employee/index.vue | 131 ++++++++---------
staffing-ui/src/views/fund/fund/index.vue | 2 +-
staffing-ui/src/views/register.vue | 2 +-
staffing-ui/src/views/task/task/index.vue | 39 ++++--
42 files changed, 698 insertions(+), 225 deletions(-)
delete mode 100644 staffing-ui/src/assets/images/login-background.jpg
delete mode 100644 staffing-ui/src/assets/images/pay.png
delete mode 100644 staffing-ui/src/assets/images/profile.jpg
diff --git a/staffing-admin/pom.xml b/staffing-admin/pom.xml
index 48520e5..00446f1 100644
--- a/staffing-admin/pom.xml
+++ b/staffing-admin/pom.xml
@@ -88,7 +88,50 @@
false
${project.artifactId}
-
+
+
+
+
+ maven-assembly-plugin
+ 2.6
+
+
+ false
+
+
+ src/main/resources/assembly.xml
+
+
+ ${project.build.directory}
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.3.0
+
+
+
+
+ com.staffing.StaffingApplication
+
+ lib/
+ true
+
+
+
+
+ *.java
+ static/
+ db/
+ templates/
+ *.yml
+ *.txt
+ logback.xml
+
+
+
${project.artifactId}
diff --git a/staffing-admin/src/main/java/com/staffing/web/controller/custom/StEmployeeController.java b/staffing-admin/src/main/java/com/staffing/web/controller/custom/StEmployeeController.java
index c846b4e..2f77d20 100644
--- a/staffing-admin/src/main/java/com/staffing/web/controller/custom/StEmployeeController.java
+++ b/staffing-admin/src/main/java/com/staffing/web/controller/custom/StEmployeeController.java
@@ -2,7 +2,17 @@ package com.staffing.web.controller.custom;
import java.util.Date;
import java.util.List;
+import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse;
+
+import com.staffing.common.core.domain.entity.SysUser;
+import com.staffing.common.core.redis.RedisCache;
+import com.staffing.common.utils.SecurityUtils;
+import com.staffing.custom.domain.StTask;
+import com.staffing.custom.domain.StTaskSign;
+import com.staffing.custom.mapper.StTaskMapper;
+import com.staffing.custom.service.IStTaskService;
+import com.staffing.custom.service.IStTaskSignService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@@ -22,6 +32,9 @@ import com.staffing.custom.service.IStEmployeeService;
import com.staffing.common.utils.poi.ExcelUtil;
import com.staffing.common.core.page.TableDataInfo;
+import static com.staffing.common.constant.Constants.DELETED_USER_KEY;
+import static com.staffing.common.utils.PageUtils.startPage;
+
/**
* 员工Controller
*
@@ -34,11 +47,17 @@ public class StEmployeeController extends BaseController
{
@Autowired
private IStEmployeeService stEmployeeService;
+ @Autowired
+ private IStTaskSignService taskSignService;
+ @Autowired
+ private StTaskMapper stTaskMapper;
+ @Autowired
+ private RedisCache redisCache;
/**
* 查询员工列表
*/
- @PreAuthorize("@ss.hasPermi('employee:employee:list')")
+ @PreAuthorize("@ss.hasPermi('employee:list')")
@GetMapping("/list")
public TableDataInfo list(StEmployee stEmployee)
{
@@ -50,7 +69,7 @@ public class StEmployeeController extends BaseController
/**
* 导出员工列表
*/
- @PreAuthorize("@ss.hasPermi('employee:employee:export')")
+ @PreAuthorize("@ss.hasPermi('employee:export')")
@Log(title = "员工", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, StEmployee stEmployee)
@@ -63,7 +82,7 @@ public class StEmployeeController extends BaseController
/**
* 获取员工详细信息
*/
- @PreAuthorize("@ss.hasPermi('employee:employee:query')")
+ @PreAuthorize("@ss.hasPermi('employee:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
@@ -73,7 +92,7 @@ public class StEmployeeController extends BaseController
/**
* 新增员工
*/
- @PreAuthorize("@ss.hasPermi('employee:employee:add')")
+ @PreAuthorize("@ss.hasPermi('employee:add')")
@Log(title = "员工", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody StEmployee stEmployee)
@@ -89,23 +108,48 @@ public class StEmployeeController extends BaseController
/**
* 修改员工
*/
- @PreAuthorize("@ss.hasPermi('employee:employee:edit')")
+ @PreAuthorize("@ss.hasPermi('employee:edit')")
@Log(title = "员工", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody StEmployee stEmployee)
{
stEmployee.setUpdateTime(new Date());
+ stEmployee.setPhone(null);//不允许修改手机号
return toAjax(stEmployeeService.updateStEmployeeOrNull(stEmployee));
}
/**
* 删除员工
*/
- @PreAuthorize("@ss.hasPermi('employee:employee:remove')")
+ @PreAuthorize("@ss.hasPermi('employee:remove')")
@Log(title = "员工", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
- return toAjax(stEmployeeService.deleteStEmployeeByIds(ids));
+ //有报名任务,则不能删除了
+ for (Long id : ids) {
+ StTaskSign stTaskSign = new StTaskSign();
+ stTaskSign.setEmployeeId(id);
+ List stTaskSigns = taskSignService.selectStTaskSignList(stTaskSign);
+
+ if (!stTaskSigns.isEmpty()){
+ StTask stTask = new StTask();
+ List taskIds = stTaskSigns.stream().map(stTask1 -> stTask1.getTaskId()).collect(Collectors.toList());
+ stTask.setTaskIds(taskIds);
+ List stTasks = stTaskMapper.selectStTaskList(stTask);
+
+ if (!stTasks.isEmpty()){
+ return error("该员工已报名了任务["+ stTasks.get(0).getTaskName() +"], 不能删除");
+ }
+ }
+ }
+ int i = stEmployeeService.deleteStEmployeeByIds(ids);
+ if(i > 0){
+ for (Long id : ids) {
+ //清除缓存,用户踢下线
+ redisCache.setCacheMapValue(DELETED_USER_KEY, id+"", true);
+ }
+ }
+ return toAjax(i);
}
}
diff --git a/staffing-admin/src/main/java/com/staffing/web/controller/custom/StEmployeeFundRecordController.java b/staffing-admin/src/main/java/com/staffing/web/controller/custom/StEmployeeFundRecordController.java
index c8b3536..009ce77 100644
--- a/staffing-admin/src/main/java/com/staffing/web/controller/custom/StEmployeeFundRecordController.java
+++ b/staffing-admin/src/main/java/com/staffing/web/controller/custom/StEmployeeFundRecordController.java
@@ -46,7 +46,7 @@ public class StEmployeeFundRecordController extends BaseController
/**
* 查询员工资金流水列表
*/
- @PreAuthorize("@ss.hasPermi('fund:fund:list')")
+ @PreAuthorize("@ss.hasPermi('fund:list')")
@GetMapping("/list")
public TableDataInfo list(StEmployeeFundRecord stEmployeeFundRecord)
{
@@ -58,7 +58,7 @@ public class StEmployeeFundRecordController extends BaseController
/**
* 导出员工资金流水列表
*/
- @PreAuthorize("@ss.hasPermi('fund:fund:export')")
+ @PreAuthorize("@ss.hasPermi('fund:export')")
@Log(title = "员工资金流水", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, StEmployeeFundRecord stEmployeeFundRecord)
@@ -90,7 +90,7 @@ public class StEmployeeFundRecordController extends BaseController
/**
* 获取员工资金流水详细信息
*/
- @PreAuthorize("@ss.hasPermi('fund:fund:query')")
+ @PreAuthorize("@ss.hasPermi('fund:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
@@ -100,7 +100,7 @@ public class StEmployeeFundRecordController extends BaseController
/**
* 新增员工资金流水
*/
- @PreAuthorize("@ss.hasPermi('fund:fund:add')")
+ @PreAuthorize("@ss.hasPermi('fund:add')")
@Log(title = "员工资金流水", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody StEmployeeFundRecord stEmployeeFundRecord)
@@ -112,7 +112,7 @@ public class StEmployeeFundRecordController extends BaseController
/**
* 修改员工资金流水
*/
- @PreAuthorize("@ss.hasPermi('fund:fund:edit')")
+ @PreAuthorize("@ss.hasPermi('fund:edit')")
@Log(title = "员工资金流水", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody StEmployeeFundRecord stEmployeeFundRecord)
@@ -124,7 +124,7 @@ public class StEmployeeFundRecordController extends BaseController
/**
* 删除员工资金流水
*/
- @PreAuthorize("@ss.hasPermi('fund:fund:remove')")
+ @PreAuthorize("@ss.hasPermi('fund:remove')")
@Log(title = "员工资金流水", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
@@ -133,7 +133,7 @@ public class StEmployeeFundRecordController extends BaseController
}
@Log(title = "流水导入", businessType = BusinessType.IMPORT)
- @PreAuthorize("@ss.hasPermi('fund:fund:export')")
+ @PreAuthorize("@ss.hasPermi('fund:export')")
@PostMapping("/importData")
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
{
diff --git a/staffing-admin/src/main/java/com/staffing/web/controller/custom/StTaskController.java b/staffing-admin/src/main/java/com/staffing/web/controller/custom/StTaskController.java
index bad9f9c..0ce1447 100644
--- a/staffing-admin/src/main/java/com/staffing/web/controller/custom/StTaskController.java
+++ b/staffing-admin/src/main/java/com/staffing/web/controller/custom/StTaskController.java
@@ -8,6 +8,7 @@ import javax.servlet.http.HttpServletResponse;
import com.staffing.common.utils.MinioUtil;
import com.staffing.common.utils.QRCodeGenerator;
+import com.staffing.custom.domain.StTaskSign;
import io.minio.ObjectWriteResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
@@ -50,7 +51,9 @@ public class StTaskController extends BaseController
if (task.getCodePic() == null){
continue;
}
- task.setCodePic(minioUtil.getObjectURL( "yonggong", task.getCodePic()));
+
+ task.setCodePic("https://www.tulkj.cn/file/yonggong/" + task.getCodePic());
+// task.setCodePic(minioUtil.getObjectURL( "yonggong", task.getCodePic()));
}
return getDataTable(list);
}
@@ -73,7 +76,7 @@ public class StTaskController extends BaseController
/**
* 获取任务详细信息
*/
- @PreAuthorize("@ss.hasPermi('task:query')")
+ @PreAuthorize("@ss.hasPermi('task:list')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
@@ -93,7 +96,7 @@ public class StTaskController extends BaseController
stTask.setUpdateTime(new Date());
stTaskService.insertStTask(stTask);
- String url = "http://yg.pusonggroup.com:81/index.html?id=" + stTask.getId();
+ String url = "http://www.tulkj.cn:81/index.html?id=" + stTask.getId();
InputStream inputStream = QRCodeGenerator.generateQRCodeImage(url, 500, 500);
String fileName = System.currentTimeMillis() + stTask.getId() + ".png";
try {
@@ -118,10 +121,30 @@ public class StTaskController extends BaseController
@PutMapping
public AjaxResult edit(@RequestBody StTask stTask)
{
+ //已发放金额的任务不许删除
+ StTask stTask1 = stTaskService.selectStTaskById(stTask.getId(), true);
+ for (StTaskSign stTaskSign : stTask1.getListSign()) {
+ if (stTaskSign.getStEmployeeFundRecord().getPayStatus() == 1){
+ return error("已发薪的任务禁止修改");
+ }
+ }
+
stTask.setUpdateTime(new Date());
return toAjax(stTaskService.updateStTask(stTask));
}
+ /**
+ * 修改任务
+ */
+ @PreAuthorize("@ss.hasPermi('task:edit')")
+ @Log(title = "任务", businessType = BusinessType.UPDATE)
+ @PutMapping("shangjia")
+ public AjaxResult shangjia(@RequestBody StTask stTask)
+ {
+ stTask.setUpdateTime(new Date());
+ return toAjax(stTaskService.updateStTask(stTask, false));
+ }
+
/**
* 删除任务
*/
@@ -130,6 +153,16 @@ public class StTaskController extends BaseController
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
+ //已发放金额的任务不许删除
+ for (Long id : ids) {
+ StTask stTask = stTaskService.selectStTaskById(id, true);
+ for (StTaskSign stTaskSign : stTask.getListSign()) {
+ if (stTaskSign.getStEmployeeFundRecord().getPayStatus() == 1){
+ return error("已发薪的任务禁止删除");
+ }
+ }
+ }
+
return toAjax(stTaskService.deleteStTaskByIds(ids));
}
}
diff --git a/staffing-admin/src/main/java/com/staffing/web/controller/custom/StTaskSignController.java b/staffing-admin/src/main/java/com/staffing/web/controller/custom/StTaskSignController.java
index faf3951..9da921f 100644
--- a/staffing-admin/src/main/java/com/staffing/web/controller/custom/StTaskSignController.java
+++ b/staffing-admin/src/main/java/com/staffing/web/controller/custom/StTaskSignController.java
@@ -45,6 +45,14 @@ public class StTaskSignController extends BaseController
List list = stTaskSignService.selectStTaskSignList(stTaskSign);
return getDataTable(list);
}
+ @PreAuthorize("@ss.hasPermi('taskSign:sign:list')")
+ @GetMapping("/selectStTaskSignByTaskIds")
+ public TableDataInfo selectStTaskSignByTaskIds(Long taskId)
+ {
+ startPage();
+ List list = stTaskSignService.selectStTaskSignByTaskIds(taskId);
+ return getDataTable(list);
+ }
/**
* 导出签到列表
@@ -56,9 +64,11 @@ public class StTaskSignController extends BaseController
{
List list = stTaskSignService.selectStTaskSignList(stTaskSign);
for (StTaskSign taskSign : list) {
- if (taskSign.getStatus() == 0){
+ if (taskSign.getStatus() == -1){
+ taskSign.setStatusStr("未点名");
+ }else if (taskSign.getStatus() == 0){
taskSign.setStatusStr("未签到");
- }else{
+ }else {
taskSign.setStatusStr("已签到");
}
diff --git a/staffing-admin/src/main/java/com/staffing/web/controller/employee/EmployeeTaskController.java b/staffing-admin/src/main/java/com/staffing/web/controller/employee/EmployeeTaskController.java
index e672527..cf94405 100644
--- a/staffing-admin/src/main/java/com/staffing/web/controller/employee/EmployeeTaskController.java
+++ b/staffing-admin/src/main/java/com/staffing/web/controller/employee/EmployeeTaskController.java
@@ -11,6 +11,7 @@ import com.staffing.custom.domain.StTaskSign;
import com.staffing.custom.service.IStEmployeeService;
import com.staffing.custom.service.IStTaskService;
import com.staffing.custom.service.IStTaskSignService;
+import com.staffing.framework.web.service.TokenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@@ -37,6 +38,8 @@ public class EmployeeTaskController extends BaseController
@Autowired
private IStEmployeeService stEmployeeService;
+ @Autowired
+ private TokenService tokenService;
/**
* 查询任务列表
*/
@@ -52,17 +55,17 @@ public class EmployeeTaskController extends BaseController
stTask.setStatus(1);
// 获取当前时间
ZonedDateTime now = ZonedDateTime.now();
- // 将当前时间加上一天,然后设置为0点0分
- ZonedDateTime nextDayStart = now.plusDays(1).truncatedTo(ChronoUnit.DAYS);
- Date nextDayZero = Date.from(nextDayStart.toInstant());
+ // 今日0点
+ ZonedDateTime nextDayStart = now.plusDays(0).truncatedTo(ChronoUnit.DAYS);
+ Date dayZero = Date.from(nextDayStart.toInstant());
if (stTask.getDateStatus() != 0){
- stTask.setTaskDateCompare(nextDayZero);
+ stTask.setTaskDateCompare(dayZero);
}
SysUser user = SecurityUtils.getLoginUser().getUser();
long userId = user.getUserId();
List list;
- stTask.getParams().put("order", nextDayZero);
+ stTask.getParams().put("order", dayZero);
if (!self){
list = stTaskService.selectStTaskList(stTask, userId);
}else{
@@ -77,6 +80,25 @@ public class EmployeeTaskController extends BaseController
@GetMapping("/baoming")
public AjaxResult baoming(StTaskSign taskSign)
{
+ SysUser user = SecurityUtils.getLoginUser().getUser();
+ long userId = user.getUserId();
+
+ StEmployee stEmploye = new StEmployee();
+ stEmploye.setId(userId);
+ stEmploye.setRealName(taskSign.getEmployeeName());
+ stEmploye.setIdCard(taskSign.getIdCard());
+ stEmployeeService.updateStEmployee(stEmploye);
+
+
+ user = SecurityUtils.getLoginUser().getUser();
+ user.setNickName(taskSign.getEmployeeName());
+ user.setPhonenumber(taskSign.getPhone());
+ user.setIdCard(taskSign.getIdCard());
+ tokenService.refreshToken(SecurityUtils.getLoginUser());
+
+
+
+
return stTaskSignService.baoming(taskSign);
}
/**
diff --git a/staffing-admin/src/main/java/com/staffing/web/controller/employee/EmployeeUserController.java b/staffing-admin/src/main/java/com/staffing/web/controller/employee/EmployeeUserController.java
index d287984..93ed268 100644
--- a/staffing-admin/src/main/java/com/staffing/web/controller/employee/EmployeeUserController.java
+++ b/staffing-admin/src/main/java/com/staffing/web/controller/employee/EmployeeUserController.java
@@ -182,7 +182,7 @@ public class EmployeeUserController extends BaseController
{
AjaxResult ajax = AjaxResult.success();
// 生成令牌
- String token = loginService.wxLogin(loginBody.getLoginCode(), loginBody.getPhoneCode());
+ String token = loginService.wxLogin(loginBody.getLoginCode(), loginBody.getPhoneCode(), 1);
ajax.put(Constants.TOKEN, token);
return ajax;
}
@@ -206,6 +206,12 @@ public class EmployeeUserController extends BaseController
ajax.put("permissions", permissions);
return ajax;
}
+ @GetMapping("verifyToken")
+ public AjaxResult verifyToken()
+ {
+ AjaxResult ajax = AjaxResult.success();
+ return ajax;
+ }
/**
* 获取路由信息
diff --git a/staffing-admin/src/main/java/com/staffing/web/controller/merchant/MerchantTaskController.java b/staffing-admin/src/main/java/com/staffing/web/controller/merchant/MerchantTaskController.java
index cfc8858..90a6c67 100644
--- a/staffing-admin/src/main/java/com/staffing/web/controller/merchant/MerchantTaskController.java
+++ b/staffing-admin/src/main/java/com/staffing/web/controller/merchant/MerchantTaskController.java
@@ -52,12 +52,12 @@ public class MerchantTaskController extends BaseController
// 获取当前时间
ZonedDateTime now = ZonedDateTime.now();
// 将当前时间加上一天,然后设置为0点0分
- ZonedDateTime nextDayStart = now.plusDays(1).truncatedTo(ChronoUnit.DAYS);
- Date nextDayZero = Date.from(nextDayStart.toInstant());
+ ZonedDateTime nextDayStart = now.plusDays(0).truncatedTo(ChronoUnit.DAYS);
+ Date dayZero = Date.from(nextDayStart.toInstant());
if (stTask.getDateStatus() != 0){
- stTask.setTaskDateCompare(nextDayZero);
+ stTask.setTaskDateCompare(dayZero);
}
- stTask.getParams().put("order", nextDayZero);
+ stTask.getParams().put("order", dayZero);
List list = stTaskService.selectStTaskList(stTask, 0);
return getDataTable(list);
}
diff --git a/staffing-admin/src/main/java/com/staffing/web/controller/merchant/MerchantUserController.java b/staffing-admin/src/main/java/com/staffing/web/controller/merchant/MerchantUserController.java
index cb77de5..040ec3b 100644
--- a/staffing-admin/src/main/java/com/staffing/web/controller/merchant/MerchantUserController.java
+++ b/staffing-admin/src/main/java/com/staffing/web/controller/merchant/MerchantUserController.java
@@ -170,8 +170,9 @@ public class MerchantUserController extends BaseController
{
AjaxResult ajax = AjaxResult.success();
// 生成令牌
- String token = loginService.wxMerchantLogin(loginBody.getLoginCode(), loginBody.getPhoneCode());
+ String token = loginService.wxLogin(loginBody.getLoginCode(), loginBody.getPhoneCode(), loginBody.getType());
ajax.put(Constants.TOKEN, token);
+ ajax.put("role", loginBody.getType());
return ajax;
}
/**
diff --git a/staffing-admin/src/main/resources/application-druid.yml b/staffing-admin/src/main/resources/application-druid.yml
index 8aeeea0..e37e87e 100644
--- a/staffing-admin/src/main/resources/application-druid.yml
+++ b/staffing-admin/src/main/resources/application-druid.yml
@@ -6,9 +6,9 @@ spring:
druid:
# 主库数据源
master:
- url: jdbc:mysql://192.168.18.119:3307/staffing?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+ url: jdbc:mysql://192.168.18.119:3308/staffing?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
- password: Ps123456@
+ password: Ps123456
# 从库数据源
slave:
# 从数据源开关/默认关闭
diff --git a/staffing-admin/src/main/resources/application.yml b/staffing-admin/src/main/resources/application.yml
index 78bb67f..c2bf6d8 100644
--- a/staffing-admin/src/main/resources/application.yml
+++ b/staffing-admin/src/main/resources/application.yml
@@ -34,8 +34,8 @@ server:
# 日志配置
logging:
level:
- com.staffing: debug
- org.springframework: warn
+ com.staffing: DEBUG
+ org.springframework: WARN
# 用户配置
user:
@@ -165,7 +165,7 @@ xss:
urlPatterns: /system/*,/monitor/*,/tool/*
minio:
- ip: 120.55.69.166
+ ip: 8.155.21.176
port: 9000
access-key: root
- secret-key: root_1234
\ No newline at end of file
+ secret-key: root_6688
\ No newline at end of file
diff --git a/staffing-common/src/main/java/com/staffing/common/constant/Constants.java b/staffing-common/src/main/java/com/staffing/common/constant/Constants.java
index 085697b..c090a67 100644
--- a/staffing-common/src/main/java/com/staffing/common/constant/Constants.java
+++ b/staffing-common/src/main/java/com/staffing/common/constant/Constants.java
@@ -110,6 +110,11 @@ public class Constants
*/
public static final String LOGIN_USER_KEY = "login_user_key";
+ /**
+ * 已删除用户标记
+ */
+ public static final String DELETED_USER_KEY = "deleted_user_key";
+
/**
* 用户ID
*/
diff --git a/staffing-common/src/main/java/com/staffing/common/core/domain/entity/SysUser.java b/staffing-common/src/main/java/com/staffing/common/core/domain/entity/SysUser.java
index c285909..c9c28ea 100644
--- a/staffing-common/src/main/java/com/staffing/common/core/domain/entity/SysUser.java
+++ b/staffing-common/src/main/java/com/staffing/common/core/domain/entity/SysUser.java
@@ -93,11 +93,22 @@ public class SysUser extends BaseEntity
private String openId;
+
+ private SysUser.ROLETYPE roleType;
+
public SysUser()
{
}
+ public SysUser.ROLETYPE getRoleType() {
+ return roleType;
+ }
+
+ public void setRoleType(SysUser.ROLETYPE roleType) {
+ this.roleType = roleType;
+ }
+
public String getOpenId() {
return openId;
}
@@ -341,4 +352,9 @@ public class SysUser extends BaseEntity
.append("dept", getDept())
.toString();
}
+
+ public enum ROLETYPE{
+ MERCHANT,
+ EMPLOYEE;
+ }
}
diff --git a/staffing-common/src/main/java/com/staffing/common/core/domain/model/LoginBody.java b/staffing-common/src/main/java/com/staffing/common/core/domain/model/LoginBody.java
index f895053..336e22b 100644
--- a/staffing-common/src/main/java/com/staffing/common/core/domain/model/LoginBody.java
+++ b/staffing-common/src/main/java/com/staffing/common/core/domain/model/LoginBody.java
@@ -31,6 +31,19 @@ public class LoginBody
private String loginCode;
private String phoneCode;
+ /**
+ * emum ROLETYPE
+ */
+ private Integer type;
+
+ public Integer getType() {
+ return type;
+ }
+
+ public void setType(Integer type) {
+ this.type = type;
+ }
+
public String getLoginCode() {
return loginCode;
}
diff --git a/staffing-common/src/main/java/com/staffing/common/utils/WxUtil.java b/staffing-common/src/main/java/com/staffing/common/utils/WxUtil.java
index 2fe3dad..4bdc295 100644
--- a/staffing-common/src/main/java/com/staffing/common/utils/WxUtil.java
+++ b/staffing-common/src/main/java/com/staffing/common/utils/WxUtil.java
@@ -10,8 +10,10 @@ import java.util.HashMap;
import java.util.Map;
public class WxUtil {
- public final static String appId = "wx7bc7df6eb945a84f";
- public final static String secret = "60dc8f7e8c850dfbe0170acefa48070a";
+// public final static String appId = "wx7bc7df6eb945a84f";//ps
+// public final static String secret = "60dc8f7e8c850dfbe0170acefa48070a";//ps
+ public final static String appId = "wx26e952dad7a8aae5";
+ public final static String secret = "60a85e94d921a385ce52faaaed4a103b";
private static WxToken wxToken = null;
diff --git a/staffing-framework/src/main/java/com/staffing/framework/web/service/SysLoginService.java b/staffing-framework/src/main/java/com/staffing/framework/web/service/SysLoginService.java
index 81e664e..6b8885e 100644
--- a/staffing-framework/src/main/java/com/staffing/framework/web/service/SysLoginService.java
+++ b/staffing-framework/src/main/java/com/staffing/framework/web/service/SysLoginService.java
@@ -118,7 +118,22 @@ public class SysLoginService
* 登录验证
* @return 结果
*/
- public String wxLogin(String loginCode, String phoneCode)
+ public String wxLogin(String loginCode, String phoneCode, int type)
+ {
+ if (type == SysUser.ROLETYPE.EMPLOYEE.ordinal()){
+ return wxEmployeeLogin(loginCode, phoneCode);
+ }else{
+ return wxMerchantLogin(loginCode, phoneCode);
+ }
+ }
+
+ /**
+ * 职工端 登录
+ * @param loginCode
+ * @param phoneCode
+ * @return
+ */
+ public String wxEmployeeLogin(String loginCode, String phoneCode)
{
// 登录前置校验
@@ -150,6 +165,7 @@ public class SysLoginService
user.setIdCard(stEmployee.getIdCard());
user.setNickName(stEmployee.getRealName());
user.setOpenId(stEmployee.getOpenId());
+ user.setRoleType(SysUser.ROLETYPE.EMPLOYEE);
loginUser = new LoginUser(stEmployee.getId(), 0l, user, new HashSet<>());
}
catch (Exception e)
@@ -193,9 +209,8 @@ public class SysLoginService
{
throw new ServiceException(MessageUtils.message("user.blocked"));
}
-
+ user.setRoleType(SysUser.ROLETYPE.MERCHANT);
loginUser = createLoginUser(user);
-
recordLoginInfo(loginUser.getUserId());
}
catch (Exception e)
diff --git a/staffing-framework/src/main/java/com/staffing/framework/web/service/TokenService.java b/staffing-framework/src/main/java/com/staffing/framework/web/service/TokenService.java
index a1d724d..247c4f8 100644
--- a/staffing-framework/src/main/java/com/staffing/framework/web/service/TokenService.java
+++ b/staffing-framework/src/main/java/com/staffing/framework/web/service/TokenService.java
@@ -4,6 +4,8 @@ import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletRequest;
+
+import com.staffing.common.core.domain.entity.SysUser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -23,6 +25,8 @@ import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
+import static com.staffing.common.constant.Constants.DELETED_USER_KEY;
+
/**
* token验证处理
*
@@ -72,6 +76,20 @@ public class TokenService
String uuid = (String) claims.get(Constants.LOGIN_USER_KEY);
String userKey = getTokenKey(uuid);
LoginUser user = redisCache.getCacheObject(userKey);
+ Object cacheMapValue = redisCache.getCacheMapValue(DELETED_USER_KEY, user.getUserId() + "");
+ if (cacheMapValue != null){
+ return null;
+ }
+
+ if (user.getUser().getRoleType() != null){
+ if (user.getUser().getRoleType() != SysUser.ROLETYPE.MERCHANT && request.getServletPath().indexOf("/merchant/") > -1){
+ return null;
+ }
+ if (user.getUser().getRoleType() != SysUser.ROLETYPE.EMPLOYEE && request.getServletPath().indexOf("/employee/") > -1){
+ return null;
+ }
+ }
+
return user;
}
catch (Exception e)
diff --git a/staffing-system/src/main/java/com/staffing/custom/domain/StTask.java b/staffing-system/src/main/java/com/staffing/custom/domain/StTask.java
index 350b389..144287b 100644
--- a/staffing-system/src/main/java/com/staffing/custom/domain/StTask.java
+++ b/staffing-system/src/main/java/com/staffing/custom/domain/StTask.java
@@ -38,7 +38,7 @@ public class StTask extends BaseEntity
/** 用工数量 */
@Excel(name = "用工数量")
- private int useNum;
+ private Integer useNum;
/** 二维码 */
@Excel(name = "二维码")
@@ -57,20 +57,21 @@ public class StTask extends BaseEntity
private Date createTime;
@Excel(name = "报名人数")
- private int baomingNum;
+ private Integer baomingNum;
@Excel(name = "签到数量")
- private int signNum;
+ private Integer signNum;//已到人数
//组装参数
private List listSign;
private StTaskSign selfSign;
- private int yfNum;
- private int sfNum;
- private int dfNum;
+ private Integer yfNum;
+ private Integer sfNum;
+ private Integer dfNum;
private String yfPrice;
private String sfPrice;
private String dfPrice;
+ private Integer noSignNum;//未到人数
//查询参数
/**0全部 1进行中 2已结束 根据时间查询的参数 */
@@ -83,6 +84,14 @@ public class StTask extends BaseEntity
private Collection taskIds;
+ public Integer getNoSignNum() {
+ return noSignNum;
+ }
+
+ public void setNoSignNum(Integer noSignNum) {
+ this.noSignNum = noSignNum;
+ }
+
@Override
public Date getCreateTime() {
return createTime;
@@ -120,49 +129,12 @@ public class StTask extends BaseEntity
this.dfPrice = dfPrice;
}
- public int getYfNum() {
- return yfNum;
- }
- public void setYfNum(int yfNum) {
- this.yfNum = yfNum;
- }
-
- public int getSfNum() {
- return sfNum;
- }
-
- public void setSfNum(int sfNum) {
- this.sfNum = sfNum;
- }
-
- public int getDfNum() {
- return dfNum;
- }
-
- public void setDfNum(int dfNum) {
- this.dfNum = dfNum;
- }
public void setListSign(List listSign) {
this.listSign = listSign;
}
- public int getBaomingNum() {
- return baomingNum;
- }
-
- public void setBaomingNum(int baomingNum) {
- this.baomingNum = baomingNum;
- }
-
- public int getSignNum() {
- return signNum;
- }
-
- public void setSignNum(int signNum) {
- this.signNum = signNum;
- }
public void setId(Long id)
{
@@ -200,16 +172,8 @@ public class StTask extends BaseEntity
{
return dayPrice;
}
- public void setUseNum(int useNum)
- {
- this.useNum = useNum;
- }
- public int getUseNum()
- {
- return useNum;
- }
- public void setCodePic(String codePic)
+ public void setCodePic(String codePic)
{
this.codePic = codePic;
}
@@ -218,15 +182,7 @@ public class StTask extends BaseEntity
{
return codePic;
}
- public void setStatus(Integer status)
- {
- this.status = status;
- }
- public Integer getStatus()
- {
- return status;
- }
@Override
public String toString() {
@@ -242,6 +198,62 @@ public class StTask extends BaseEntity
.toString();
}
+ public Integer getUseNum() {
+ return useNum;
+ }
+
+ public void setUseNum(Integer useNum) {
+ this.useNum = useNum;
+ }
+
+ public Integer getStatus() {
+ return status;
+ }
+
+ public void setStatus(Integer status) {
+ this.status = status;
+ }
+
+ public Integer getBaomingNum() {
+ return baomingNum;
+ }
+
+ public void setBaomingNum(Integer baomingNum) {
+ this.baomingNum = baomingNum;
+ }
+
+ public Integer getSignNum() {
+ return signNum;
+ }
+
+ public void setSignNum(Integer signNum) {
+ this.signNum = signNum;
+ }
+
+ public Integer getYfNum() {
+ return yfNum;
+ }
+
+ public void setYfNum(Integer yfNum) {
+ this.yfNum = yfNum;
+ }
+
+ public Integer getSfNum() {
+ return sfNum;
+ }
+
+ public void setSfNum(Integer sfNum) {
+ this.sfNum = sfNum;
+ }
+
+ public Integer getDfNum() {
+ return dfNum;
+ }
+
+ public void setDfNum(Integer dfNum) {
+ this.dfNum = dfNum;
+ }
+
@Override
public Date getUpdateTime() {
return updateTime;
diff --git a/staffing-system/src/main/java/com/staffing/custom/domain/StTaskSign.java b/staffing-system/src/main/java/com/staffing/custom/domain/StTaskSign.java
index caba32b..b9e75ed 100644
--- a/staffing-system/src/main/java/com/staffing/custom/domain/StTaskSign.java
+++ b/staffing-system/src/main/java/com/staffing/custom/domain/StTaskSign.java
@@ -54,7 +54,9 @@ public class StTaskSign extends BaseEntity
/** 签到状态 */
@Excel(name = "签到状态")
private String statusStr;
-
+ /**
+ * -1未点 0未到 1已到
+ */
private Integer status;
@Excel(name = "二次核验备注")
diff --git a/staffing-system/src/main/java/com/staffing/custom/mapper/StEmployeeFundRecordMapper.java b/staffing-system/src/main/java/com/staffing/custom/mapper/StEmployeeFundRecordMapper.java
index e640b80..098bc2b 100644
--- a/staffing-system/src/main/java/com/staffing/custom/mapper/StEmployeeFundRecordMapper.java
+++ b/staffing-system/src/main/java/com/staffing/custom/mapper/StEmployeeFundRecordMapper.java
@@ -49,6 +49,8 @@ public interface StEmployeeFundRecordMapper
*/
public int updateStEmployeeFundRecord(StEmployeeFundRecord stEmployeeFundRecord);
public int updateStEmployeeFundRecordByTaskAndUid(StEmployeeFundRecord stEmployeeFundRecord);
+ public int updateStEmployeeFundRecordByTask(StEmployeeFundRecord stEmployeeFundRecord);
+ public int updateStEmployeeFundRecordByEmId(StEmployeeFundRecord stEmployeeFundRecord);
/**
* 删除员工资金流水
@@ -65,4 +67,7 @@ public interface StEmployeeFundRecordMapper
* @return 结果
*/
public int deleteStEmployeeFundRecordByIds(Long[] ids);
+
+ public int deleteStEmployeeFundRecordByUidAndTaskId(@Param("taskId") Long taskId, @Param("employeeId") Long employeeId);
+
}
diff --git a/staffing-system/src/main/java/com/staffing/custom/mapper/StTaskSignMapper.java b/staffing-system/src/main/java/com/staffing/custom/mapper/StTaskSignMapper.java
index a7926b6..9e45d38 100644
--- a/staffing-system/src/main/java/com/staffing/custom/mapper/StTaskSignMapper.java
+++ b/staffing-system/src/main/java/com/staffing/custom/mapper/StTaskSignMapper.java
@@ -48,6 +48,9 @@ public interface StTaskSignMapper
*/
public int updateStTaskSign(StTaskSign stTaskSign);
+ int updateStTaskSignByEmId(StTaskSign stTaskSign);
+
+ int updateStTaskSignByTaskId(StTaskSign stTaskSign);
int updateStTaskSignByTaskIdAndEmId(StTaskSign stTaskSign);
/**
diff --git a/staffing-system/src/main/java/com/staffing/custom/service/IStTaskService.java b/staffing-system/src/main/java/com/staffing/custom/service/IStTaskService.java
index cdf0db4..a4aaa79 100644
--- a/staffing-system/src/main/java/com/staffing/custom/service/IStTaskService.java
+++ b/staffing-system/src/main/java/com/staffing/custom/service/IStTaskService.java
@@ -1,6 +1,8 @@
package com.staffing.custom.service;
import java.util.List;
+
+import com.staffing.custom.domain.StEmployee;
import com.staffing.custom.domain.StTask;
/**
@@ -58,7 +60,7 @@ public interface IStTaskService
* @return 结果
*/
public int updateStTask(StTask stTask);
-
+ public int updateStTask(StTask stTask, boolean syncRelationsTabel);
/**
* 批量删除任务
*
@@ -74,4 +76,6 @@ public interface IStTaskService
* @return 结果
*/
public int deleteStTaskById(Long id);
+
+ void updateTaskUserInfo(StEmployee stEmployee);
}
diff --git a/staffing-system/src/main/java/com/staffing/custom/service/IStTaskSignService.java b/staffing-system/src/main/java/com/staffing/custom/service/IStTaskSignService.java
index 1d8968f..5ece2ce 100644
--- a/staffing-system/src/main/java/com/staffing/custom/service/IStTaskSignService.java
+++ b/staffing-system/src/main/java/com/staffing/custom/service/IStTaskSignService.java
@@ -29,6 +29,8 @@ public interface IStTaskSignService
*/
public List selectStTaskSignList(StTaskSign stTaskSign);
+ List selectStTaskSignByTaskIds(Long taskId);
+
AjaxResult baoming(StTaskSign taskSign);
/**
* 新增签到
diff --git a/staffing-system/src/main/java/com/staffing/custom/service/impl/StEmployeeServiceImpl.java b/staffing-system/src/main/java/com/staffing/custom/service/impl/StEmployeeServiceImpl.java
index ae0010b..5f07af4 100644
--- a/staffing-system/src/main/java/com/staffing/custom/service/impl/StEmployeeServiceImpl.java
+++ b/staffing-system/src/main/java/com/staffing/custom/service/impl/StEmployeeServiceImpl.java
@@ -1,8 +1,17 @@
package com.staffing.custom.service.impl;
import java.util.List;
+
+import com.staffing.common.core.domain.entity.SysUser;
import com.staffing.common.utils.DateUtils;
+import com.staffing.common.utils.SecurityUtils;
+import com.staffing.custom.domain.StEmployeeFundRecord;
+import com.staffing.custom.domain.StTaskSign;
+import com.staffing.custom.mapper.StEmployeeFundRecordMapper;
+import com.staffing.custom.mapper.StTaskSignMapper;
+import com.staffing.custom.service.IStTaskService;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.userdetails.User;
import org.springframework.stereotype.Service;
import com.staffing.custom.mapper.StEmployeeMapper;
import com.staffing.custom.domain.StEmployee;
@@ -20,6 +29,14 @@ public class StEmployeeServiceImpl implements IStEmployeeService
@Autowired
private StEmployeeMapper stEmployeeMapper;
+ @Autowired
+ private StTaskSignMapper stTaskSignMapper;
+
+ @Autowired
+ private StEmployeeFundRecordMapper stEmployeeFundRecordMapper;
+
+ @Autowired
+ private IStTaskService stTaskService;
/**
* 查询员工
*
@@ -69,6 +86,8 @@ public class StEmployeeServiceImpl implements IStEmployeeService
@Override
public int updateStEmployee(StEmployee stEmployee)
{
+ stTaskService.updateTaskUserInfo(stEmployee);
+
stEmployee.setUpdateTime(DateUtils.getNowDate());
return stEmployeeMapper.updateStEmployee(stEmployee);
}
@@ -76,10 +95,14 @@ public class StEmployeeServiceImpl implements IStEmployeeService
@Override
public int updateStEmployeeOrNull(StEmployee stEmployee)
{
+ stTaskService.updateTaskUserInfo(stEmployee);
+
stEmployee.setUpdateTime(DateUtils.getNowDate());
- return stEmployeeMapper.updateStEmployeeOrNull(stEmployee);
+ stEmployeeMapper.updateStEmployeeOrNull(stEmployee);
+ return 1;
}
+
/**
* 批量删除员工
*
diff --git a/staffing-system/src/main/java/com/staffing/custom/service/impl/StTaskServiceImpl.java b/staffing-system/src/main/java/com/staffing/custom/service/impl/StTaskServiceImpl.java
index bb45cd3..14d56ee 100644
--- a/staffing-system/src/main/java/com/staffing/custom/service/impl/StTaskServiceImpl.java
+++ b/staffing-system/src/main/java/com/staffing/custom/service/impl/StTaskServiceImpl.java
@@ -11,6 +11,7 @@ import java.util.stream.Collectors;
import com.staffing.common.utils.DateUtils;
import com.staffing.common.utils.MinioUtil;
import com.staffing.common.utils.QRCodeGenerator;
+import com.staffing.custom.domain.StEmployee;
import com.staffing.custom.domain.StEmployeeFundRecord;
import com.staffing.custom.domain.StTaskSign;
import com.staffing.custom.mapper.StEmployeeFundRecordMapper;
@@ -93,9 +94,12 @@ public class StTaskServiceImpl implements IStTaskService
stTask.setListSign(stTaskSigns);
int signNum = 0;
+ int noSignNum = 0;
for (StTaskSign stTaskSign1 : stTaskSigns) {
if (stTaskSign1.getStatus() == 1){
signNum ++;
+ }else if (stTaskSign1.getStatus() == 0){
+ noSignNum++;
}
stTaskSign1.setTaskName(stTask.getTaskName());
stTaskSign1.setDayPrice(stTask.getDayPrice());
@@ -103,6 +107,7 @@ public class StTaskServiceImpl implements IStTaskService
stTaskSign1.setStEmployeeFundRecord(fundMap.get(stTaskSign1.getEmployeeId()));
}
stTask.setSignNum(signNum);
+ stTask.setNoSignNum(noSignNum);
stTask.setBaomingNum(stTask.getListSign().size());
return stTask;
@@ -172,6 +177,7 @@ public class StTaskServiceImpl implements IStTaskService
continue;
}
int signNum = 0;
+ int noSignNum = 0;
int yfNum = 0;//应发
int sfNum = 0;//实发
int dfNum = 0;//待发
@@ -181,21 +187,26 @@ public class StTaskServiceImpl implements IStTaskService
for (StTaskSign stTaskSign : task.getListSign()) {
- if (employeeFundRecordMap != null){
- StEmployeeFundRecord fundRecord = employeeFundRecordMap.get(stTaskSign.getEmployeeId());
- if (fundRecord != null){
- stTaskSign.setStEmployeeFundRecord(fundRecord);
- if (fundRecord.getPayStatus() == 1){
- sfNum++;
- sfPrice = sfPrice.add(new BigDecimal(fundRecord.getRealPrice()));
- }
- yfPrice = yfPrice.add(new BigDecimal(fundRecord.getRealPrice()));
- }
- }
+
+ if (stTaskSign.getStatus() == 0){
+ noSignNum++;
+ }
if (stTaskSign.getStatus() == 1){
signNum ++;
yfNum++;
+
+ if (employeeFundRecordMap != null){
+ StEmployeeFundRecord fundRecord = employeeFundRecordMap.get(stTaskSign.getEmployeeId());
+ if (fundRecord != null){
+ stTaskSign.setStEmployeeFundRecord(fundRecord);
+ if (fundRecord.getPayStatus() == 1){
+ sfNum++;
+ sfPrice = sfPrice.add(new BigDecimal(fundRecord.getRealPrice()));
+ }
+ yfPrice = yfPrice.add(new BigDecimal(fundRecord.getRealPrice()));
+ }
+ }
}
stTaskSign.setTaskName(task.getTaskName());
@@ -216,6 +227,7 @@ public class StTaskServiceImpl implements IStTaskService
task.setSfPrice(sfPrice.toString());
task.setDfPrice(dfPrice.toString());
task.setSignNum(signNum);
+ task.setNoSignNum(noSignNum);
task.setBaomingNum(task.getListSign().size());
}
@@ -262,7 +274,7 @@ public class StTaskServiceImpl implements IStTaskService
List listSign = stTask.getListSign();
for (StTaskSign stTaskSign : listSign) {
stTaskSign.setTaskId(stTask.getId());
- stTaskSign.setStatus(0);
+ stTaskSign.setStatus(-1);
stTaskSign.setDayPrice(stTask.getDayPrice());
stTaskSign.setTaskName(stTask.getTaskName());
stTaskSignMapper.insertStTaskSign(stTaskSign);
@@ -270,6 +282,10 @@ public class StTaskServiceImpl implements IStTaskService
return i;
}
+ @Override
+ public int updateStTask(StTask stTask){
+ return updateStTask(stTask, true);
+ }
/**
* 修改任务
*
@@ -277,12 +293,30 @@ public class StTaskServiceImpl implements IStTaskService
* @return 结果
*/
@Override
- public int updateStTask(StTask stTask)
+ public int updateStTask(StTask stTask, boolean syncRelationsTabel)
{
RLock lock = redissonClient.getLock(stTask.getId() + "");
try {
lock.lock();
+ if (syncRelationsTabel){
+ //签到表
+ StTaskSign stTaskSignUpdate = new StTaskSign();
+ stTaskSignUpdate.setTaskName(stTask.getTaskName());
+ stTaskSignUpdate.setDayPrice(stTask.getDayPrice());
+ stTaskSignUpdate.setTaskId(stTask.getId());
+ stTaskSignMapper.updateStTaskSignByTaskId(stTaskSignUpdate);
+
+ //流水表
+ StEmployeeFundRecord stEmployeeFundRecord = new StEmployeeFundRecord();
+ stEmployeeFundRecord.setTaskName(stTask.getTaskName());
+ stEmployeeFundRecord.setDayPrice(stTask.getDayPrice());
+ stEmployeeFundRecord.setTaskId(stTask.getId());
+ stEmployeeFundRecord.setRealPrice(stTask.getDayPrice());
+ stEmployeeFundRecord.setTaskDate(stTask.getTaskDate());
+ stEmployeeFundRecordMapper.updateStEmployeeFundRecordByTask(stEmployeeFundRecord);
+ }
+
stTask.setUpdateTime(DateUtils.getNowDate());
StTaskSign param = new StTaskSign();
@@ -296,12 +330,11 @@ public class StTaskServiceImpl implements IStTaskService
List listSign = stTask.getListSign();
if (listSign != null) {
for (StTaskSign stTaskSign : listSign) {
- stTaskSign.setTaskId(stTask.getId());
- stTaskSign.setStatus(0);
- stTaskSign.setDayPrice(stTask.getDayPrice());
- stTaskSign.setTaskName(stTask.getTaskName());
-
if (!stTaskSignMap.containsKey(stTaskSign.getEmployeeId())) {
+ stTaskSign.setTaskId(stTask.getId());
+ stTaskSign.setStatus(-1);
+ stTaskSign.setDayPrice(stTask.getDayPrice());
+ stTaskSign.setTaskName(stTask.getTaskName());
stTaskSignMapper.insertStTaskSign(stTaskSign);
}
stTaskSignMap.remove(stTaskSign.getEmployeeId());
@@ -323,7 +356,7 @@ public class StTaskServiceImpl implements IStTaskService
}
public int generatePrCode(StTask stTask){
- String url = "http://yg.pusonggroup.com:81/index.html?id=" + stTask.getId();
+ String url = "http://www.tulkj.cn:81/index.html?id=" + stTask.getId();
InputStream inputStream = QRCodeGenerator.generateQRCodeImage(url, 500, 500);
String fileName = System.currentTimeMillis() + stTask.getId() + ".png";
try {
@@ -361,4 +394,21 @@ public class StTaskServiceImpl implements IStTaskService
{
return stTaskMapper.deleteStTaskById(id);
}
+
+
+ public void updateTaskUserInfo(StEmployee stEmployee) {
+ //将相关报名信息修改
+ StTaskSign stTaskSign = new StTaskSign();
+ stTaskSign.setEmployeeId(stEmployee.getId());
+ stTaskSign.setEmployeeName(stEmployee.getRealName());
+ stTaskSign.setIdCard(stEmployee.getIdCard());
+ stTaskSignMapper.updateStTaskSignByEmId(stTaskSign);
+
+
+ StEmployeeFundRecord stEmployeeFundRecord = new StEmployeeFundRecord();
+ stEmployeeFundRecord.setEmployeeId(stEmployee.getId());
+ stEmployeeFundRecord.setEmployeeName(stEmployee.getRealName());
+ stEmployeeFundRecord.setIdCard(stEmployee.getIdCard());
+ stEmployeeFundRecordMapper.updateStEmployeeFundRecordByEmId(stEmployeeFundRecord);
+ }
}
diff --git a/staffing-system/src/main/java/com/staffing/custom/service/impl/StTaskSignServiceImpl.java b/staffing-system/src/main/java/com/staffing/custom/service/impl/StTaskSignServiceImpl.java
index 1f1ffe8..b398ab7 100644
--- a/staffing-system/src/main/java/com/staffing/custom/service/impl/StTaskSignServiceImpl.java
+++ b/staffing-system/src/main/java/com/staffing/custom/service/impl/StTaskSignServiceImpl.java
@@ -1,5 +1,6 @@
package com.staffing.custom.service.impl;
+import java.util.Arrays;
import java.util.Date;
import java.util.List;
@@ -65,12 +66,19 @@ public class StTaskSignServiceImpl implements IStTaskSignService
return stTaskSignMapper.selectStTaskSignList(stTaskSign);
}
+ @Override
+ public List selectStTaskSignByTaskIds(Long taskId)
+ {
+ return stTaskSignMapper.selectStTaskSignByTaskIds(Arrays.asList(taskId));
+ }
+
@Override
public AjaxResult baoming(StTaskSign taskSign)
{
RLock lock = redissonClient.getLock(taskSign.getTaskId() + "");
try{
lock.lock();
+
SysUser user = SecurityUtils.getLoginUser().getUser();
long userId = user.getUserId();
taskSign.setEmployeeId(userId);
@@ -86,8 +94,8 @@ public class StTaskSignServiceImpl implements IStTaskSignService
}
taskSign.setDayPrice(stTask.getDayPrice());
taskSign.setEmployeeName(taskSign.getEmployeeName());
- taskSign.setStatus(0);
- return AjaxResult.success();
+ taskSign.setStatus(-1);//未点名
+ return AjaxResult.success(insertStTaskSign(taskSign));
}finally {
// 锁被持有
if (lock != null && lock.isLocked()) {
@@ -136,31 +144,42 @@ public class StTaskSignServiceImpl implements IStTaskSignService
updateStTaskSign.setSignTime(new Date());
return insertStTaskSign(updateStTaskSign);
}
- if (stTaskSign.getSignTime() == null && stTaskSign.getStatus() == 0 && updateStTaskSign.getStatus() == 1){
+ if (stTaskSign.getSignTime() == null && (stTaskSign.getStatus() == 0 || stTaskSign.getStatus() == -1) && updateStTaskSign.getStatus() == 1){
updateStTaskSign.setSignTime(new Date());
}
- StEmployeeFundRecord fundRecords = stEmployeeFundRecordMapper.selectStEmployeeFundRecordByUidAndTaskId(stTaskSign.getTaskId(), stTaskSign.getEmployeeId());
- if (fundRecords == null){
- StTask stTask = stTaskService.selectStTaskById(stTaskSign.getTaskId());
- StEmployeeFundRecord stEmployeeFundRecord = new StEmployeeFundRecord();
- stEmployeeFundRecord.setTaskId(stTaskSign.getTaskId());
- stEmployeeFundRecord.setTaskName(stTask.getTaskName());
- stEmployeeFundRecord.setTaskDate(stTask.getTaskDate());
- stEmployeeFundRecord.setEmployeeId(stTaskSign.getEmployeeId());
- stEmployeeFundRecord.setEmployeeName(stTaskSign.getEmployeeName());
- stEmployeeFundRecord.setPhone(stTaskSign.getPhone());
- stEmployeeFundRecord.setIdCard(stTaskSign.getIdCard());
- stEmployeeFundRecord.setDayPrice(stTaskSign.getDayPrice());
+ if (updateStTaskSign.getStatus() == 0){
+ updateStTaskSign.setSignTime(null);
+ }
+ if (stTaskSign == null || updateStTaskSign.getStatus() != stTaskSign.getStatus()){
+ if (updateStTaskSign.getStatus() == 1){
+ StEmployeeFundRecord fundRecords = stEmployeeFundRecordMapper.selectStEmployeeFundRecordByUidAndTaskId(stTaskSign.getTaskId(), stTaskSign.getEmployeeId());
+ if (fundRecords == null){
+ StTask stTask = stTaskService.selectStTaskById(stTaskSign.getTaskId());
+ StEmployeeFundRecord stEmployeeFundRecord = new StEmployeeFundRecord();
+ stEmployeeFundRecord.setTaskId(stTaskSign.getTaskId());
+ stEmployeeFundRecord.setTaskName(stTask.getTaskName());
+ stEmployeeFundRecord.setTaskDate(stTask.getTaskDate());
+ stEmployeeFundRecord.setEmployeeId(stTaskSign.getEmployeeId());
+ stEmployeeFundRecord.setEmployeeName(stTaskSign.getEmployeeName());
+ stEmployeeFundRecord.setPhone(stTaskSign.getPhone());
+ stEmployeeFundRecord.setIdCard(stTaskSign.getIdCard());
+ stEmployeeFundRecord.setDayPrice(stTaskSign.getDayPrice());
// stEmployeeFundRecord.setShouldPrice(stTask.getDayPrice());
- stEmployeeFundRecord.setRealPrice(stTask.getDayPrice());//默认实发为日结
+ stEmployeeFundRecord.setRealPrice(stTask.getDayPrice());//默认实发为日结
// stEmployeeFundRecord.setPayWay(0l);
// stEmployeeFundRecord.setPayAccount(0l);
// stEmployeeFundRecord.setPayTime();
- stEmployeeFundRecord.setPayStatus(0l);
- stEmployeeFundRecord.setUpdateTime(new Date());
- stEmployeeFundRecord.setTransferNo(OrderUtils.genOrderId("D"));
- employeeFundRecordService.insertStEmployeeFundRecord(stEmployeeFundRecord);
+ stEmployeeFundRecord.setPayStatus(0l);
+ stEmployeeFundRecord.setUpdateTime(new Date());
+ stEmployeeFundRecord.setTransferNo(OrderUtils.genOrderId("D"));
+ employeeFundRecordService.insertStEmployeeFundRecord(stEmployeeFundRecord);
+ }
+ }else{
+ stEmployeeFundRecordMapper.deleteStEmployeeFundRecordByUidAndTaskId(stTaskSign.getTaskId(), stTaskSign.getEmployeeId());
+ }
+
}
+
return updateStTaskSignByTaskIdAndEmId(updateStTaskSign);
}
diff --git a/staffing-system/src/main/resources/mapper/custom/StEmployeeFundRecordMapper.xml b/staffing-system/src/main/resources/mapper/custom/StEmployeeFundRecordMapper.xml
index ed9965c..71f18dd 100644
--- a/staffing-system/src/main/resources/mapper/custom/StEmployeeFundRecordMapper.xml
+++ b/staffing-system/src/main/resources/mapper/custom/StEmployeeFundRecordMapper.xml
@@ -136,7 +136,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-
+
+ update st_employee_fund_record
+
+ task_id = #{taskId},
+ task_name = #{taskName},
+ task_date = #{taskDate},
+ employee_id = #{employeeId},
+ employee_name = #{employeeName},
+ phone = #{phone},
+ id_card = #{idCard},
+ day_price = #{dayPrice},
+ should_price = #{shouldPrice},
+ real_price = #{realPrice},
+ pay_way = #{payWay},
+ pay_account = #{payAccount},
+ pay_time = #{payTime},
+ update_time = #{updateTime},
+ pay_status = #{payStatus},
+ transfer_no = #{transferNo},
+
+ where employee_id = #{employeeId}
+
update st_employee_fund_record
@@ -160,6 +181,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where task_id = #{taskId}
and employee_id = #{employeeId}
+
+ update st_employee_fund_record
+
+ task_id = #{taskId},
+ task_name = #{taskName},
+ task_date = #{taskDate},
+ employee_id = #{employeeId},
+ employee_name = #{employeeName},
+ phone = #{phone},
+ id_card = #{idCard},
+ day_price = #{dayPrice},
+ should_price = #{shouldPrice},
+ real_price = #{realPrice},
+ pay_way = #{payWay},
+ pay_account = #{payAccount},
+ pay_time = #{payTime},
+ update_time = #{updateTime},
+ pay_status = #{payStatus},
+ transfer_no = #{transferNo},
+
+ where task_id = #{taskId}
+
delete from st_employee_fund_record where id = #{id}
@@ -170,4 +213,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id}
+
+ delete from st_employee_fund_record
+ where task_id = #{taskId}
+ and employee_id = #{employeeId}
+
+
\ No newline at end of file
diff --git a/staffing-system/src/main/resources/mapper/custom/StTaskMapper.xml b/staffing-system/src/main/resources/mapper/custom/StTaskMapper.xml
index 254d082..2f15408 100644
--- a/staffing-system/src/main/resources/mapper/custom/StTaskMapper.xml
+++ b/staffing-system/src/main/resources/mapper/custom/StTaskMapper.xml
@@ -23,7 +23,7 @@
diff --git a/staffing-system/src/main/resources/mapper/custom/StTaskSignMapper.xml b/staffing-system/src/main/resources/mapper/custom/StTaskSignMapper.xml
index 4e37f5c..917050f 100644
--- a/staffing-system/src/main/resources/mapper/custom/StTaskSignMapper.xml
+++ b/staffing-system/src/main/resources/mapper/custom/StTaskSignMapper.xml
@@ -99,8 +99,40 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id}
+
+ update st_task_sign
+
+ task_id = #{taskId},
+ task_name = #{taskName},
+ day_price = #{dayPrice},
+ sign_time = #{signTime},
+ employee_id = #{employeeId},
+ employee_name = #{employeeName},
+ phone = #{phone},
+ id_card = #{idCard},
+ status = #{status},
+ remark = #{remark},
+
+ where employee_id = #{employeeId}
+
+
+ update st_task_sign
+
+ task_name = #{taskName},
+ day_price = #{dayPrice},
+ sign_time = #{signTime},
+ employee_name = #{employeeName},
+ phone = #{phone},
+ id_card = #{idCard},
+ status = #{status},
+ remark = #{remark},
+
+ where task_id = #{taskId} and employee_id = #{employeeId}
+
+
+
update st_task_sign
task_name = #{taskName},
@@ -112,9 +144,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
status = #{status},
remark = #{remark},
- where task_id = #{taskId} and employee_id = #{employeeId}
+ where task_id = #{taskId}
-
delete from st_task_sign where id = #{id}
diff --git a/staffing-ui/.env.production b/staffing-ui/.env.production
index d10a41d..a89b861 100644
--- a/staffing-ui/.env.production
+++ b/staffing-ui/.env.production
@@ -6,3 +6,6 @@ ENV = 'production'
# 管理系统/生产环境
VUE_APP_BASE_API = '/prod-api'
+
+port = 8089
+npm_config_port = 8089
diff --git a/staffing-ui/package.json b/staffing-ui/package.json
index 9ea4885..4ff659f 100644
--- a/staffing-ui/package.json
+++ b/staffing-ui/package.json
@@ -72,6 +72,7 @@
"connect": "3.6.6",
"eslint": "7.15.0",
"eslint-plugin-vue": "7.2.0",
+ "html-webpack-plugin": "^4.5.2",
"lint-staged": "10.5.3",
"runjs": "4.4.2",
"sass": "1.32.13",
diff --git a/staffing-ui/public/favicon.ico b/staffing-ui/public/favicon.ico
index e26376026420542212ed58d90d0ed34f554fa4ae..19a50c2742a0292448fc3852c6ad53168db1ed35 100644
GIT binary patch
literal 67646
zcmeI5%a0UQ6vk^noB?Be5FkXtLs21wjemecG~z~AE{y^r3lmK+MqR>2{R<2le1e#0
zV&Yp=l#!(iHELo^Oav7ZH_Aia!?fSmR58^xjjh$^RNve88}dq0rpRP=utKR+B3Gjakng`A34;=XKg-!MU;j{sauQSjy-C{uehd%#{_JuL<
z7}Rk-ApXhlXB_+it%rF1)b0z!KPmo(GQ#l`$x&2a>##O|Alq#S8y*c
zzXbb*IsfyB0n2-U;vYW$vtWOZ_$S*3ur1gL%|h-g|HIGMa@%e7`Wx_HkZ|77{|e(?R`pDh1L@P8QmCn3x0|4(60htFdQ8D-|N8N{rwVeM}EG_TbeS{}069HdrI$
z|GxM~!~X%WvcCT-{PI!JmARxL67>%rmY9W-`1b8S##vS
zIW}LUSYPo^k^1y8=lrebf4ArVPVYspLiK?7hf1cIdWnChpL2h3T!qST
zJu6=G1G#$;nj_`fLrwc|h9>%S6z=ALCP*RiGiubap<
zw=3~~S^R6qf9(0s@Bes3{QKe`<@jHo|K$Iw_>2F5V}N~7jMx9XZxVa{^S2J`oU>VO
zBmOndVpR$^W%L`14$(ZaDYcjO=k(@7*H+YRUG+27GPj|wgj}Eh
z6Ms|wUxU}B^cCLwFDkbG7N6e%xqknb_?z;#{OuRoa{vC{68{kH|3!WN2VPT-|6ad@Xb*w0=P1zSltFKivkn=YNy^HiGP#c4sT!L
zA0Cq?Yb5?ndON&*iGO%ZnyiudH|g#0_9gz|F=?_!;@_mV!`qkmhsUJJ8i{|C-VSeH
z;BPtiw~_hZ;d#-wMqrdde5Ph0vfZZy8InWt*E-f094X0juj(PQxc``^7&E*4=Vi
z{L^L6cp!h?1MU_ZS~vWDA^+dSKiT*ve~&q!YCGa+JIMb{<$tpI&vX9`kgfsZ$XDxj
zmE2cAKS0*DWiNc6l0WB`JT3l7#(%;8Ch-4JF_2sg6#Ur+Y=x}H0@VkE-3OfJP&K$y
z{N1))keH?8gEs$C3|t5Pdldu8cCm4rQW8`C#S!BbD;S3;KNh#jZUsBVjxK{sFB`7#08k
literal 5663
zcmZ`*WmMD;u>DcGh#=ia^G8y;1Xgl^C8S$Amyqrd1eKPKB}75GVToN(=@g_xS|pcV
zYT@y|zH{E0Gjl)8mzgE0vwe;xGTK9)Pb`Ew71o)8mn
z03f3HU&jG*@@N6zk*2evqK=M}hmVK1lZPjZnxZ0$rG^oYPn^M
z{S!ll*~7X_SR}y4UJ2?aHTg{X39ybPB?tGsd;iFgl8P)3V$l6|>JbF~eyxxj;rR07
zd($`rbIAkd#nPtGAoTwJ^~`n0R^HalXyDkB2r_c6l)s-{04d#fFQjLgle8h-1IP$m
zD#!{x3+dmXAC3e)0C0#G7!c-DD}RGi;{o6To>KxGZMTC>A
z3-k-<_frD>v_P$1gWV$_4FF()Aqs3jIWe$zswPJO%$B7t(g3rc8OuOG0uGSPt;&H5
zZU?LkB6az2yM6$Lm0&gj{H|)82$N=ERon<90pOQtocsiA1w>>k@C^ejlDL54Q;HEh
z7ARif^NG%tve%yP5D*-oYbbprQ)5De5|RFk-v9V;WsP<12dqxPn&ug)1K|c+US=*k
z1!M~kI{Fv@=r6~=-%83SZ~fg^{p+v=L!b71zI8qHV3T7#TE6Xw$HfOowZ_o%uQxZR
z@jUx*YJEFh%glgzL%?bI(n4f`u+a3;ub|7gK*<~M)BGZx{ufM)kBEr&Icj2R4kJkKK8V$4;1OQ5fkvz38A3pw0
zS=mLB_noPuiw4*FffD#JN7oBdg$ElEjE{}_(gsxj19@f+tJdn0)p$cQj1TIk1rY^mS08##l>
zFS`S5r0bH6RVuj-Sf8@yb6WmKLh(8k!a*|dX+!G~D`&E>8j+eSWC6neMemE;1gUc#
zlxsKHZQ#!as6L{SB{QWZ`AM?&r|W^A8!eR5J@40`gr7Ndzoe0?i`mO>;(sj=R>&?a
ze>GB;KM5*-FI`}&=2qyZBd8Z!Mj`5(!#R>mtvK|Bzj*3bjZx+(
zugnS8e-F2}wxdq{9}~wANA*E$xanN!g6T?WTj&I{p(O;rGqd~kpU((0WIJX($?`BT
z<~ipHp-LGfPnS+NOb<)nD%UsgHjtkREGN>hFnCg7X&73fV$h(oUPd@cT`^V0WYAtF
zUOlSoubZSZ_Ud&p>NWQ5l`V07%sZ9B7)Y_cZA&j*0xNZ|u>Fy-!nBtm-Y%bOmZpta
z{pB9ikKmfYPcRs&r|4boQ0b830RQ`D1c#)zZskyFE>C@wb(DBCm>-W{p1*F|rOKfy
ztV&`&XdX3hv+uP}y}vt;_Vt8=;e7BjX*X$%FJYT_+pD&BZ416*J958mcLTQx&j!y(
zwwK0L&)iOn&uDhg)97(#iRYpq@nkxfkfiP5aI)<`*DPnm_+j+wH?kq8wv=wC;&HX&
z{}5aUv5xCv0W@+Bl^%>Xm7;&_7hPXi+c*m^eChtuvw?axlIEJ@&^F%q+h=&VpKq~p
zwsK%EQEDpBHQyRF*RgPu@b0T}UXOa5cwAq`d`8F+L55}qrZUS=&M?sM%y6bsZQ6X7
zZ`W0bWI(Mk~TUBmVw_mQ?GUXa&(zA(YXL|1QLVGuRkM?r*9_&k
zwk(Tc51S6l4tsc$e=T!0giX5WTn#*?KGGtv!ugJ~iGz%!k8Hqm#bd_L#{c?Ij39xa
z{ej?PIVy$6gv2JyUa1~kG{+2=wjzs;d^zJ(gCIDSDZ|zCVJ_&?X|lwaG0-w;m`BMa
zbbGiN^nOJZ_8!6POqWe_8A|z#N4Q*I=T)Pg&l?{M-*n}M$+aUg@hGV*zEx(yrP<5R
zvC;*m3$xwJMMNOV5s?A07s^MO;hx@Ws(KdgJ>ZozUy@-}kxGkk2THy1y*
z()`^X9m@BAVIpRd93uHHi#)Slelv_l&=Ly*a}I*8haSww)z(F$9qayvD9oF0w8fRKf5n_YnO;Y8?=(@=c|
zR%gvv*WlPCaPc@%H)`VRS4G~pMxyCuX#+#<)u*Pdwp7;Xb_Qsd%qcU&a2}fU*Oi`?
z->NTaRS@)g`5St&CmZ)ZyDU*h3tOWb+5#jbk?XNU0zQ8ia8{%VmM0JWO(hS
z{>P^%$mJ|?q;X_$1W(LbY~O6SxpLvSNWAzw2p(=RWQeV*XhF?!%};kO`3IknL@`mx
z{6VMfbu{q?7`Y;qL(kkN4&E*$(c3Vzb^Z-oLa6#{_v9x9e+_)R)mWRzbB=axOX+<2S1UTRmG57&~H
zoy=Yg#6WMdT`gW&ARQIQ^5toK4xlZsF#{)mwvsFkJ3LR>Fg6REEgDs_)v~H#p4e4L
zjhV-;J!WX%=tZ^9sphWCIQn<^l}p!@_sqqNfJH$d65YGU(BjUu#E9T*JG<~Z->30^
zbO2qn2ucd5xk1ficOG6n*$HpFt+VfPTe-06vKsqo@&rvn7@L2acK17WbwYJmb&6eu
zJs}Cs%*;Sck36;;O@tch>1SA=A0-H
zxmTMkwh&!S00`m)fQTpnxV*c^Z2<6n4gfn=03e+O05l$-UiYZnt5K+$(o6k-`Muo0
zcym>FU%0_pH42@7ux-1Sz5P>)l9j9n94!%D$j3VkQNvGRvkoMVn+0?ce(da&q$%L8
zpoTp4=XU9KU+tUf5sKZM9OT9dxZlrxw3GT|WkWHiVoTU7q|w9h_}k2>RB2dWOBh;=T%k+Loz^cP7s&cQHe04Sf3?2Uc{|uFi_q7&Y2h>5E;_jAH4oWN
z*|)r?3&mKN5Ygr~KU_?_J@Y>L8p~TX>*3W?*;s7Ol0Gab+Fn#lovzHGgPdF6lSi)G
zL^yLVH+_Q=>wUEj-%sE@TUwrf1xP~1p7_iN_cAh+sDxHG1s_+;wKCzchDeCAOo-@o}`asDR~{uPgu1&}n#Oa=LFsLvp3f`C>Vt~|jK
zy_%nl{Zg&~$MZF%AA1=UPk~<8^!g4H@3cdr`6qHkzF~rSpo=V%Q{$Dr?VYlliu04v
z%=&RRf@F2de7c>);typLsxv{6>P2a7CpLZDX$>arZUIc2_Ku
zUlbW`031ZK?1SN6t^_0fyGvg`-+!y|wIj(a0BaG-bmnF!
z-?&Ny8zS6sLm&VVOE>O+ox*~U^9i^5Cev4Mr=}OVv(#jGI%h6)ozpvIw=QeWg5yL%
zxc;dSYTByPsn;~w8I3%nVM7fPj~q;T4;*eQEH((##3K+F+ELsa=X*VuO?{$UoJERCFv1zCRtLIenGy2;i*IhzdLb#!lN%sklL-`-+F
z?JxllW2nPY*Y~!;oIPgyr6C68E{%9$}}MS`_bfXO`Ru~*8xi-vjX-H
zvjoT^#5dq8?}IJ&Wlp}ze&Elo>fpvkve9{Y{0o(4l0UkcbJe=OGP1WBh}U=wuzoO(
zCb3vXz{I}y=8r136RhGZj7?Wab`-)4x%6(E35ET$*S>Gr{7Hy?1
zPvuKMN4}VU7FTXrm>eeq5bN>rBwlp`PgxV`{`=85$()C5uFqLw0HxJzMi4{*__${J
zMO_0Q;^bTGu%N6*_-eEle8n4*dr{LGd=cI^nYaDe)$!S|w^k}Q2j^)sa|wa)rOWr7
z=U@&U{>sTuswbr)?Sjc9{E5BTD&WCFGRb!kCS_jD{BTS9)Yijf$eoGejH$BRliS>kQVwr#VP
zPs^4Xc>MxrsW#M9V*lD85LOCp=F8J-00UjX^#H61y@ElSuoh4Tf)joqVWmY3|`1
zzHE?to7@Gpk`sq@4s#@)7@1z!JPU>^GKJpn>%Q;Y^>4==VlYTCO|4^&7;9(e5&vsb23+jj1)
z4F{o&?1`kXX!p1QbG-x^0H9^JkC(#5i6HC4TWS(z9%5Q}!C`+cIJOr-(fMiVq%-|BreT|=+0PWgXb&y5S$
zG_jI1l%yt}bT4l#k^g0eq2yHHjK&w{?`d3k@CQ?v1K)MT#dYWTTR+A7RoqtH(&|aO_;V>9LbLXPn3YBbp>+MnYOoTceweya=B)lEz5H
zLp=NDAK0Im^8*inYho^qYR#Qdzn_6Db?UQTs4j<|%h}JQ5#?
z5{Fs+B?@B0C()s2L3QFMo?LZZrBRzLX=X>-xfw1_^{nkMY^?6lVgoW|%aOd~y;V$f
zSC2PJkfFe5A(&8sdo{0Co%f9>o#kz*CRzHQ8F$tEB>cewUnj)^>+%O%(dyCa!bQiP
zd$9D}qa>x9CI;OPHw~G}AbY<}mG;j)*X33HunLBdiRVoznp0xEgd+S?KC>~mPK80W
zQ^foF{<7rqIFN9hCB?
zZ{1Q3@oG>#AA8vR@Mza{MS#=Uc_yV~`NUvJ{jza
zT|v*pR%1$2TRUMF0e`DV+%8O#ii1Jz8+U5lkts*sd)3SKz%c(j|OkN$*b3z1o8lke_
zZzLZqleC$I#|o*|>1;QvIPMtF8WlW@z%EFY@*W$g1UVFe01tVC?CaWvKX+N~&SMFh
w3o}1aSIuJtnzw?rKNs-3{y)=#g);%#4FR;juZ0`#H8`NAtff?~VDb#q7TsM7q!u00jdV#!gCNokBHhy6NP~iO35qldDiTtnqyiG}
zV(Cq
z=das;R{it&x)&hC1d>3g&JzM)LJ))ybo~K<0`TiWP%+9(4A4!uG597x(I8-S5P*S+
z1;YlR`V9GJE-C>6MMM81lK=pNAP_JVjE(_8MPM%w7(xgI(CCTyk=p3QRtz4YBm&7r
z7^ID|jD0#&p9RUR_nADy4w&VHbW@6(Y`pq~&JFJk?CcvLvtG^_79>m%G-wLzx)tYGQ8&-omtU7vatCRp={*f
z7n4=lF}k>Q$}Xm2?D#M?yQ*{S-S!!WxT=Yhe_T%W^H=Y8&QaY5qpUeW
zG&em`Z%ee}5|p2&q{}%dycNCQOGz}*)%fLhpv@dd7_X*f>9@c)%%J4OE^?ST_bip+
zM%au>nieEHR)QnB`UobvKN2g!HXDskOiOATP0Re*zzAJJtv~JIJUm}#j{1sCIu=5t
zOZcLnM06{Kf*{>mvy&xDyzLqQr$6845?v&qUgt|ge!T|L_>T@_+$cZo>yHjj3w$^K
z;!3~7JUFM^Ekb1mS;3>$A|}=Rm}nVnfUV9O%MJ^8_I~<`jyPasXLvsCm3D$ioKCXH
zfI~UPS$R=F7uGFT29mSXCb^T}B?i8|kunAnqB*0qE;tWsLsg*>h
zt`tiYIqL@AkF5;9roVD%CRMr>2Ta4m9-_@;-nd+j(!-7%440We!{`RIeZN=-%|H?S
z67k+oJCsvQ(3t0f^v=a%boMoE{j*D5`+
zQC81h>wfMPd77TB0>7l2?zB)`5e=kY7j8&7*8Q|ob>Wf7(p8|XiAXRLFzC-nLycrw
zj)X{@+!*c2fJ3R!)HnVX9W$R>$R*r5{yFcT0g}Yjh@aNspb>wWbIAx9)A=DnX>0Sglx@^7FJi1(%*O}4J5>iLfR5Ry%#Q_YyR?`eQ%D3NKbGIT`#h_;}HUgR4`kISQY^nM$q
zl!S&aOLuSA+;x7SVw+)3s*gcSkda3uYs%p&E!@?
zU44FT{5J|?^54Q}32E+oS5nWA)Q{9DNH_CJEP}RWKXTSJ6*PSnr^~*|N^p?K-#rt<
zx&|
zn^+b+Rl5enNB6E$@pr|jKjd17nvAHt%pk}*G`Pe3Oip)PAhfN-KhDrY>yV5h#0>2?6@4R{H>*EukL%a=u*v=
zT%MlUG8qp_;QgwTU@ExMunR>~eHTO~REIevcRjtj5bbeDSG$5!@fxqVlLb~OgCNy5
ziQwB2r6?mlm)&?5sKh;}t@2fZPsfG0!a1ir&ujPHo2d+8yZXUjD{06tS)&Qck3QVh
z&N*IIUiOS~hm03S_>o0Ax+`l#gE{DI6!W~HQ+PZ1DE8}s+c%!AJbbDm(|eGzf~
z)ghTl|1^e(TV%qE>S-z^mO}W_?OO~JZGE=3ASC=NyG7~7X0|iNG(o$eYO?BuoJS$)
zcazT`7CqX%Gf^+#(A&WX%o5bYJYmkkee|Sx2HE3ABcUF^LFHO!i2Mw@wA5M9y$hNqYkrVbqLk=X^!w)RwAGaT^V=&z@nNIzGHF)lB%SlP2=p8~UTx
z#A1sixFp*^Fl<3U?GF0ZxFdbtjGB_L3ES<1`pck);CIBGf%IoSy6Y}v-9go@zuw63
zXjV3%Q@A|g=6q6|wru09%2PtEK)-=Bb#VlFzn~#&89pKWb+DE`+NQ``z&qWHsFQvq
zDHT0YdFaSt(6HZhI^B_ue?7C>9=%FOe}VcUz7&d#@tNXrbm_&d)-%5#jOz?EnRQ!>
zYuRR(h^gmjiyig-HkB&d}7K6J!Y%Pt~
zG}wBiMU!N0tdt%wRAs_lmg^a_M{qvNu72{>x6>_4TFRx
znpOwDRVS-4s>*PV$1u@eytrJ%rgy8lctVHI=E(lRWuanX1Ngec|NMa>wT+tc@RSHtE%`gzv>g
z)yCXi%<0}IbN@2xvYF3$TL`)T%-3uOS5I%|3m%x-S{VfKJ`y4#0|NAxHX`6DQM1`;
zeToc?Zki`g89_~(Ql&JmzEw*DT;(a|eP_%Mri`7Mb!w=~KMLu1tUS{Z(8f1Nd=tZ*
zA&5m=05Un*pp&SypC)dDOIs`fQX;^bMoJEX(XTr{$oQQUa
zFmcKiogng&`cpXzip47k)|Zf+NyhRLr$>T>r`9CZuZ|tj{E6dq9*@Nsjzyt;k#gyj
zF0+E}9e7^@`b}LIPg^b)X>;`MI4MJ6Z}pB}J+>7qo(p06dN&=p+aWZXA@}rSS0i^o
zx22M%f;zfIjK7?sjVId~&1@j0jcRg|cKi28G%T)e$0clPS&6}u0jG$LEYDA9)#||<
zS{Dh_29PgmFGXY9zvfnOJv~6b&1t}V*0W0~Dj>y
zV-tC8-;?t8zrKU5eo8O#;Z{L=zbrGCQTkm`r&c;jH<5Psp{U)s;)qaD94Xx!m5pp3
zb`!p$02f7y>Yn}yiX0j=P@B=nAg*QO!>OMN@>5J56cL0%gfkdc)jGHyIxpLsbDRX
z1f-*&>5SA6%@G*;a^Qi9aU@R2nG;(}@*|KY0y=HD`?44lw?!`Fb8sE#sUux+#UAlH>Ph-0;anG}8@xc%?
zV07-Wa3*pMgdybg($>%`Fy-@KpNSNn-P8V=m3XQ@mT*VBN!`$=U1JZ^Vi5mxN*q(R
za+l97iU-FVbYV7gy12%{)Az4|g)53k4)Q|msGs1hbeu=pmAHpu@WHO;38I3Tsjvr_
zn!B$&kKFo)>g+yq2gpzoWfcb+R2CICyWT$ep3F6{d{L#lk%w6Da!nTtk}egpKaX>O
zcu`+c+UVq3o(HS+4_1k%R0Oag#XG*o6@FuX6+J+zB1||ae0yD0=HX0
zP6%=;JudnAEaCT1?!m|ck7vu56nJCccR1}AU2VyYw3QMv-++28`rURO-OI)AHm&2!
zqAqbJ<(z7()H%WIL%LP73OKA)PI`18?Vb;z&tNdF%D1!WW`CwZ?q|v?
zF%1ou#ZLYQCW>I7Qk)18KMDPaj;%Cm{y5&X2^V5Q@6+*Kchu^-zj
zN|z$u1r=u{4{PKls8^{-Kkttux8!Uip)W7v*K7N}_e=MDMenhWCCLg`_#5H!4gXEH
z(RCXcM5R786>7)#KwiLGY1M)%p#$}&dTP~6YfSE<<~)j>YeB~Up<{j;j3RJu+-9si
zV9}H$W$&Tut)H~QVs|YSoeiw#_tKSMfbv;tl;Z2O1-wy)@7o^K;kw7R2J`-&GhcH8
zo;9{rDrw)r$@u0WTkEtUsPz`|lD*}X^)Q7R9aU<0jZ_>F)o^&DN2K=iL9fR-uH%CN
z=C^a>863q*5!*cJ6!(iu^Fk;&oS7uO4$ZR8g0(SPM=$g}7Z05!-m%fNKBm8DoIK^f
z>VyxLn+*7SIeO8?GC~d+X=|oL3LY;H!G-m7HM9E(!e_U46a!;=GsLP1NSlzc4|%iM
zd{Q-kzN=VETmSOmaVjO_*SI}osP=;k34|IABxXL$U_`W>Tx(43#ROI(`nrtjy
zCCy~+u-C*TX=>pa%|~hfYPiouVoOTeUn%CSx>|`{au7(pVjx-54GBn)Z^FMlH*&6W
zW+z4y?-&r>9vN&d&pfJt(Ky75a@%!aJ>BFLqt;b6OH(PB&%^-bm26m^;+xKP86eDDSjHJs6o-;-eT%Ki=m49M8
z%M~lVRovalSFx7T@sl;8O4ApgM+M9sY+rg+lFa1G3rjW4RMdd$85DPjD3d&Y6rEJ}
zV3l1nAN@g_h*YWEMXS)c2Zvb1fZ21O*-~T=Rf7fCV}t>`86&{Pl6&rR8Xf%jRF`$Q
z7r9H9nhGj*g7nl!f7eb;_#Dy3mGjYLmp?eE`HETdU<~L@bIW3`t1F^wx&{VtUE7-k
zruS6YrNCK!+Jj;9K1Ofx7*mzZ&FQ$3B1=`^E=ZomY_`~?z_DA;_R*AiFB*$YCtR5w
z<%b*qchH&3_mEYzw0kP|Un(CSj*a|W$B+KiXM+0XR`$aVsx&v;cuWRe@1-c0#D^J|
zem9E*uON!i(&8iXvJKL|U{?yA($Caw=DZ`ov?WlUv&aT_STo+S^%aSUek~q#^~~n;`9v$S0_J69#teoQtEo_-qFaKDJp2Z83HFPnwGnwQIi6fLQ;1TTz4~;f
zal5>K<;TF~yoQj$YPWqeNiEY#aX#Bm-t(bIk#^y8{^Bm}Z)O#(H4Rvdr@c&_-(L!}
z^k?j-QE+avVWO}5t&xsKE3jq`XhwWb!FBa~m>g*+cexW>D{T%LhV
zF8oNqJhV&Q;qVpNN-EKb%qaDF|;46*BlY^A|uS;9R+`#SYXnt
z2So#8Z7lt`^jQq)b`Di@%EGK0q3PUSJ8D!19NOwC-;`9X+ty56dz`(FD72k?ACN5=
zd`zomj_u_s4VrU4wU%LsJ22R)5&L$3&$^}EgNCnxV!_%$^0hl=Nci)}Ny!hTr@4o&
zPg7^tlR}<5yrfbY%zL7|o6Hr4#au$CqlM<5g8rdNBx60Fiv8qm{;ZY7^NvM5jXa#L
z!7>_#*+WZ%ilvNAPzvm|LZ_$GBb++=Fz0)hyzHYNo^S=X1r;nL+qRPiU(c?!=hSU%
zV{w8giU{k+O>@7fQOH9fKBEFW(D|&Qm-0Rkk|k@itI;8NwSRxw@xo?U#s`wCoVRQZ
zi2=%5X3Ud997?8+EUM35MTzQ2@vuZ=QWxf>WjkyRS1=8A?AU6Fr?4OO>e4#Bk2Lt{
zWuPM`I_=57{w7#w?3<+W_M4Zp19w#XSvT(Vc|V=|#;kkZbYYq!An*cXqrvnPwUsoc
zv^9CfX%
zta0JO;cX*}NJ0_Tsq=RDOgS8%C@r<`{+mylO%CA_ge_eQ;pwE{LY>b0#UN)Qw$uv8
z*A>g0cZa`L4q>w~Yg}@0#;=mc6be0hB*s%upMklw;^e6h_ue+WN2t8Y6@(y?^T7ux
zwr9jC$qn33KsNLFst2@61lZB*(Xu%s%|?E#Dvq+JPpmJ%wNgIjRDEI?CBv^PIBrf`
z_v9~Y_%S(ieu$H?fSR+pRqe08PH|Mj8kfA<=vAjZC*2^dxN~IcqUYJq`~xl)}+hI_!sPBWb~M>x@xDc0*O8M9jI7
zo!?c{n_y*qF2gqlUp3#yyIu7revZDVmL6+HxXKPR>w0K*d5>322t!TDIZxC=zLND|
zGM$FU&obvIyc(%`aT_Sp`05}{V>hNVu86GWV{&JZXUeNYQWB4)WM;bRi0FJJHGx(!
zfwYkq0=I~H97~@^HZD#S?Ax5L-{-|rbNybYTJVYWf?za-5;KFY_POwD?Qnbo=QQ;m
ziqh_p!M{I_`PC}VLN-1|!d7*sptVTY_(M$Uck)4YJ@rCumAu8348w%S?I*(-a~W6f
z)0{CmS1Csh2Kw77+kb>y10&)@5@J0kBatov{&_iZBI%HYDgk9_?U6_c)hAVsUt7#r
zNTerNlCGL#!VsDD73Cng5}A>~*Q_Tap?W4NqavIq~D5(X20DBk?uq>(P2
z*r=|{YTj|w)$eLkE>U_GXQ(|g%d?U<_9?cUh|noqyRG8Fb4B`S>KdrWLpQbiR0cMT
zj9@qKvh_HBN{hC}8GJ{rn`;ev!eA`@rPhx;zC}3p#S%N+K{~2}1luZydKK|CK)Zbn
zFq)#aIE(uYggP$Bo{c=|l}}erBawco_*@@6=ZSw>NntDt68{K%V;16{(@dvo<-+Kc3Iw`8SINbq&96u~L7MQSB$XCgs4wrWx7>fgWE=rjgIIA8LY$x3}y
zcQ#pQgVvU#1z#_G4u_G0J@k7EXgE3yM@U`k*5c|xlR+I?AE*bdbXGJII2HuWE5I*O
z{c`o|T~<9>eFagGDc03}{U*&L{2mzDVa1*y*x;~g$HU;U+XA)0V;iTOGqc|LqEFQw
z*FdD$1N^EQ(dnnX!OK62dnPJ94^A>tk0Yr)MqaP`Y*JRtP+VnGTm$~2C@1&h3%w)s
ztl1snD-F8c1hXauk4rS)T;$zHqE{-^2f#IeBVLd6zSK5%Vm^L|f9BC~t}dNGa}B8S
zU8?d9YjRh8bBVrStJoj>p14xtc%gSJxZ_Cpi(EBe?5cy`4Q;F?Nu*XIYRz5S7D%+F
z=8WlbiFPavD%_uNcJr;;ds1Usvqb8U3!CS-2CmOy8DUr0mn`*#|I6OnsC0`
zHcnG4FIMX}+D-N6gon&@`r4^p%*RWSiqbq3yay8@YkWClQ@6c_e=>HlL;9Hkt_d$!e+y>}~4%fZdt&C9{f9WKbj2Owls)FFF+kdXv`QMaIf-EZ=s
zI5&B>bWjnBwfuv)L{Yd96nu7*E&@=XnAhK2>~AjiHy8Vxi~Y^T{^nwTbFsg<*xy|2
zZ!Y#X7yFxw{msSx=3;+yvA?<4-(2i(F7`JU`WD7*
z#%6b07uy>=h{7=seC$vdatDQ@9yr?hqVOyVGu`)baYW%$6ee-8v+_cnlf7Y~nY`_6
z98j1Kg>gLfbmUN20st^^?)?K>{{ws5`JwCt0691Jhn|l29K7LdHtcYIF);*O+0OUA
zowql)mX(dOm8UIS&dtT$%Jm@t{MqN5S^&|_*uqhREW$4)BEl`egBt$7!~dB1cd7pw
z+|2EtC62WJm@^RB#J|)2UH9Kg+hIvW7mBLRTo{lC+g3IPB=0sz`3
z|Ir_^oAu)0?d>kk%j@gw%j0Ng!*esBe~16q0)LnM@4-Lb$8+<(zsC+PZ)b1ibKe_&
zGpIIh_uYIv;a=`mHg<6C|6IiX*A@R^)<5jv(y_C*^R#nCy~+T!${bzqp{Co_*3sM1
z%@ywG`rpm)|7Ep**l+{?T-PW-TzUnNSnvP@lOzCSZvuc4V*?P=d{hqT?|Hj}WdPiK
zd4_bGf3ABJM&s~QlJW`2bzF(
zpbO{&hJkV5EieZx0V}`;unX)1KY(ATqv{wSTo5sc5<~}L262J}KnRc&NC9*QqysVr
zS%U6?TtPmd08lvSF(?I;11bVlff_-bpgzzTXbSWW^cl1bIs~1AAz&OZ3HTP61`M^Uxd6d(o%R*U(Q;ssWT3oEVZAniy6X-WX9B*%-ALJs8s%8yKgU*qC&f
z0+@=JCYY|6VVD`1)tE0ar!hA%e_;_|F=L5iX=2%8J;X}HD#dz^HHo!>^$SJ_V}(h=
z^k7b~P*@hM9ySD9h84ijVQXVMVuxU7VL!tj#r}+ahC_tIfg^`wisOTmfK!3f
zi}McW2p1QZ1y=^w1lJok0k;Zw0QV#ADIPH%51tC1EnYC*Q@l33X}oXvSoqBNNPKgA
zfBX#mX8cL~uLM{GECg}{Rs=x=PYF5+76?uVi3#}$H3?k^;|Z$?#|XEGFo;-)6o_nz
zB8WO>o;l!oHL&O^-=p?KpDkM%Mk4frC-jM8*5|Ij#8j$*tJ|*oY
zT_J;zv5={d-6u;VYa*K`J14(IjwH7uk0q}spCBmj8=x$i8hV)CG9pHF`X2hBV8I@58V!&6pn=7hiAbD;rsM7^vd);^hNY<
z=zlS=GUzjeF*GoIV1zLu80{I;82cIbndq3*nF5$N
zv$V5pu~M+Au==ysur9OVvPrXfuobh-vZJ#j*qzz)*xz!1IfOYJIG%D$a)LQUI2}3j
zIH$PKxWu?zxr(_KxN*3V+z+^GxIgod@!a7F<7wyl#>>QO!kf%H!h6Lh%y*x!ly8Zj
zh+maIjQ=_Rp#X<~jlffZSwUPuMZsXf4#5K1q2B~3lWbP6+;t~6$=*Y5<3$Y5%(5v690ai`?mA#>f2iqtP*w-r4nnB
z43buoMUpF0a4AcvLa7yLdTA@^V(C>GMj2a~a+yseJJJbRi~J_bC+jKOD*IDTTrNMO6b;
z2i0)Ybk%ayR_}1!@x1d~9jvaZo~pjA!K~q`(XI(-s%WNae$Zmo^3ZyrjjpYw{Z#vl
z4!=%-&WJ9tu7z&3?hid#y+pkweKvg`{eA;{15<-4gP(@-hAD
zVy$AGYrStHXOn5OYb#@$X1i@CX_sQRX)kG?V!w4y@?Pq_Z3k(G42Q3da*jEU2TsaP
z1x`PmHJvM*ukRb)Z*akMv2^KlC31Ck9dx60^K+YW=X8&9U-1z4NcY(HRP!wN0(qHv
zb$FAYoT&*PHlIkJ&kv*?JbiHLYv9}LN9gD3H}R0;VeG?Ae?|YYN6<$$kNN}X1408n
z2O&MR`Uo
zMBk1sh=Im9#=MCYjLnX{inEP-^_cH*#^Z~4oA_5x_@87wxlXW8c#|lSn4g56d0owPRhQ>ambl_D*Ln{
zmnJth_h+7M-gLf9etp5Mg2x5tg^q=bMM_0Vo}cCFms&O1_jDl#Y}k%Bsq#${&|s
zR=8HIRO(a?R*6Jo9lXkY0t?wIOS?d*Sk`+4gNo);Be^j%N8NxKtY!d^za
zyzcSuIq7xp{n~f0Z>`^=e`&yIV0KV@@Xe6g(CDz@@W2Riq-Ruev};U!tn(G(Rr|Qe
zc-w^VMC)te*R5|v-n31MPIkN%d;5G!V(R6z^mN~h{LJvI%Ix@@#@y7r{`}&C>B7pQ
z?c&zE`|l3kKY0IZDP$RKIqn0&hm4OjAB#V+e`;6}S?T^P|9N6ncXesaW^H%fYyDy)
z;tTGVj7_@Dsx5)7u5HEbw>x)tHg?^2e|?SGBizgV#`dk{yUh2AeWU%21J8r&!}uf0
zql#mpR$LdBShsVavh1bu@otK}7j~9@T_CtAI&UW5#YrA`nu96JjU-U4*9c?8U429MC
z)ZOLm92}MXJ?(V;HS}!!oo&Qy8Kk9P5`N--F77UN-d1owm;0_>;(n40e>5(R!Z*ph
z4DdgScsoln{GrSPH&WL^`C6WKaA6){ZW}&60XRPozYu~?K!6J_z{fAZ%O}dqFU-x4
z5a$yS7ZQg56&R#oa0yRadvP6k#lPN#dXi-Lhx6(y$m8aDj~C_4i}CUa@CpcUqe^gl
zJ#_W9^5b^(V!UbM&o<;yyBJSL_dmS7n>MYi-F&$IQir
z_dja<&*lFpj2bR=b#YD9-ow$=>b|_2jgO0+tG9~0B!hymu$+LXoT8{KKT=UZUO`q!
zQBIT(p{SssATOvWEb@=)|Ez{;kjK{1R@}zk&R#%>Ply{~FCfM(BqqkkZ6zisz-`5c
zu(lH67q+q%K>VW#6<05BE0q6x^X8i-9REKyA+C;^U0W+}D|st#J4puA%n5SyiE{HH
z^!WJ21q8+U#ZZspe0&VNHxtME*UX_-4Da7d=4LwnOMv}*5!$(;R-P|viTy*;Ne1P_
z{weA7ha}SfE&~5MK>iN@sCpwv1pYhYe+&MQbOH-Pw*EuXDex~zCv=o-(~ZylXTZQj
zM}uNPU|v*GAkxQavhIQ3hQKMIh0-!i;yRbvTsV5^|P)>*g;CMyq=eWqNtJ$
zo4$b|Ra5`;>Y;78cWQ(kN+xM$jU8cs-W$$TF
zP(dMRD48vEbTpSgRH*2Q(D=~-24bW(hJY1`2c~Q&V=}2uku{khRwGm2l$_^2`R6bp
z<`i8D8~KCcCKh2zJrM<4R+v|Ks-pLez4~@O2BHy>e;9nkPW6|p(_b=FY)Xdqh`*(%
z{;fmxPZ_HJwWQO$A_<)f!(%hYv6rcjc5n)-$V6vG7A^uan{gdxFU+tANffx8ku32<
zf+j1vp-lJ%lhFp8`zk~Qlxej-@+y`InRAxYe3j){$qlmI>&_t17G$
z`_LdGR%xE__vRuhcbv4h*qkf38AE%aosh5fGLj~(XhLq0d1+wG0%I9{N+0-a#0!El
zmr;hj<7Yo2h-)1)p6DMPkAh2Bx@68)j;mI^aaUys$85BJ?hMxs7_JM+rfORLaD_j)M=W*QX!$d{e{b$WS=Oxzv-1k{Z^rK
z2HS*rk&XSaf33^N>@Vx8$}L|<&eFJb$lx{b^i>{bwpHxgAsUkzeGcy(dS#eiTvZ*?
zj>+G0vjhoT&f)Nd(A}~2
z=mc%|q*|s>)i8BD)kgHPR{IwCZ20Vt3LfKI-sjeYFU!nCo;Q@KVA
zX2+@mE_>W?&h8~r3H^Q%CBPpoM(HF6AM~owd}h0*ChV9h0$<8pnb)
zb&Z*{4xJtutL+2Q77Z=^O8f6-R*EXcDsUD?A5M274sS^_usuP#X!HViNyZ5#ZdZfg
zPWPwN`bNZ^(CsUd`iP_xhpTsJcV0#-WGonc=r&{w3+kDgDy=HXA)`UyF$L7DBVS|O
zp?(xQGCOuZ77-JvBMb`=mm^%Vh}kiR6F7&|g*`D~TYPc*iQRo8#Zqie3l(DJ9ak;i$aE*
zmUL1k-Y-Nau{B4{jT~PCR^O&nYxJ3-JaGd;Mj7%gnq$rqswmPw2m@@jhT46?B(vVL
zh%uqQdQOczc87@SC`I~r-kI?TzX26bkcdt@vXq}`Io$2_lfmluAQIAs30A_Q6w&Pj{voPUwBYNgKA8)FcQOH-%E{j^Ut{&B|zFj>G2kcGnz$bX1ejyq4A-!!4vLkcu!yu6xsXEoNMO
zlzn$aLdr5XU4BkrN7y|_W%26`AT(IYK4S^pwbI1VOWOc=GAsCtp>0Z_LG>0PW`p-`CYWA^EG
zSG4a}Qs0EQ9xE}_#QC4wTwDVyxA<(b>u!;f^f$=Wr%-P`T~eLk^rNtL
zUt80bitP)La;D5c4%jk*o5x9ew=kt@*wE}l|NY4_4aelTk;gGH$^*rT?k_xBONKcb~Nmq
zbG*-&85xhUgSiSSf^Gs-w#2GAVEzTRZAL{lB;HPd36^tId)@o@?_7eUnI4<`{HgGO
zx0IBjRrpu%K!16zRNo9yT~k-ghWdc0YX*}pX;qmcQU;%lHBx0q&;0{5E;*5nR$bMb
z%uV5StuP+|>21C2a5oojh+!{{pP58Yub`o=sjR$5rH-sBf^gEv(=zcZZ04acvfOTpc9^D*B@o+Uz7RlI85Tg#c5e3d6k
zf`e(8hB+jwXC0L{SBJ)~Jz$^-T5#5MY#Fi^j@j`1S_qe&YE4fpC3X%FXF=wjy_l^5R}2yGkg=`BgU?n$4!(+uTS+Jv%RdB
zS#~-3YVnf$`yhBJ{HbGv-^ysSA7iH*1im`klLk*lc{5)O8e!txp}m`5oI(POY_{;8z90e=Nyc~
z$$=TNzNPKfRMJYJCn~{QTVZ4f!DJ2_m4R-{1d~heF5Vp!H_B~wG$BH)(G{GXyRy;8
z)a(H1BX}gjMME0tloS#{W*Q7tiQi-??__cpxfBMf5n!+k5*}|ZIlZbT6L2a#%V)j#
zbfCZej!H~TiGu~doW$dJ#srL?u8G&|kRBohW=t;eg;nPeE=`AR$lZP#$UAcW@p4Vb
zDx}}o-RGT`H1QNn5g2yXKp}KrdsheDOM4@s3jeIVynAz65JL|7;-1goeutS!
z)asHdB&2MfsMp8{k9&{oi_zW{r2!soS3p(bWTGtIU8lM(Q%`2k=hS7a*VOOROC>V3{L?+cR9kSi!1QcS<6A%}V%0B|_g{LPohieu`SAmk<
zY3GZ5-|S*iLrrEc!$WC21`-u{E3E3Dy1HcBq{j<9uovCiw$??xl-VwUwvpN-zG
zD!z7VrZ>zRjSNJ?TM5RdtLu*2Q-#h9&4Nr5c{QZ%oDX-nmcKj
zWFd^yK}NYG4AK9@jlxlwU37JMpDVAVWKLThqboK_rypN_7M
zLB~T|s3l*Sen4{iZk}y{omyB3U$t)FkD#JXDA~YwN
zv*|*A_sfW5M~SH0&PqDCi$XdYIiZ#F*?p8V;U@OkTM|3Mhq)bmjajps_IX8bRo_3P
z*x|w?j0S)De1h>F_Y|KD8`Fgm-&trAw*b5wk6KZ$8tPE`F1T{tI;(*Fd@e
z>P$D$R~2J$OJ1}_6>Z_&5xn=q4{^F8xt{l46$VFkSHDAJNY;O0TvK3?dER^lEZkO}
z448;B)G{T`aeVD1D+9+9qU_xnN8^(h-Ox`9`#KMOCtJMjBJQfh6c`wb^SIPWcqH@8
zPtW~i3+j@+#yy}m3p-0e50X2Z#e43ceb0=)lBh{iaPh}yRTbMO>qoAV+d^B`
zrV9o#ha(&2lvk$yvo*z9R}`>;#C!!O_gMg}5O66zxiWLL>#;qnhXyOGf+0nplhZw2
zx^(l!5!N;qy0V?`Y?!PQRL(iBbK-o@hUVOx9Dg3Zqkv&t60L?tPaW>NlEj5MXARQF
zQK9)b{BhSzwqktLkfq}6;^KL59~M0^+#cLo?zkJS8>WsRK1=9q0g*1L_iuexsOPDe
z_O60PtuKZI&;NY6$tD-7Y0(t@BY5a|vOmSqQfP*Rp|ef_9Z%6gA?Qs
z=_7KiCNq3tMOkbt#b3F&lmStUBv;&?{`ns>2&VAif}M*Vo_Nby1A}R7GGU6fxHCPv
zJNp&mMa_(qBp|NfMjytj8rxmzgj~Xj<}6yc;Mvo`%2&+
zB0ZalzTBbf>?ohmaJ+i>t_oGC|3$~yWqy~2xW27cs~8mQ+9Tr%SlM;=bxIfbRF?U7
zV+k=-eEocOLS?k4PW9MA=VSkhCjbdSNCXC+CMkIw?G9n~=RCXyq{?)04QW1LHa}ke
zba2Tf^RtKE9O`}z@S5D3D?`!-PaHpe4L2<#rrRqG4S^wB>!nH|Bb!HOKU>R?4d;n^
zLG!XIMHpxIzS3=OE8WQ{0wFI&dZcO|CpJtkTmybTpNEFe&pFE=PVj`ZG{Ngh+?Fz(
z=a+85JCajb>$)}U5-O-&+UH%SN|9MX20H#r+t1-w*GAX!k1L&P1R0te$@i*JoBN)Nn?*!v*T;g#0Jw
zE5z{0;lfQa@x+D8gugv@6h=zpnEX0IX%4U4;mxp;uHX;x$-8)6S)>WehtV!lJ
z0;N0Y`1x!^EzGIpqF_gQN0P;F99LOpw2*Su!8wkA&&z^W<8h`>zeV+Jdf90Ecb#Y4
zZtB-S)C88*(B9DKkGouP@SM7(vgkM2BZ>!%M3#D7#wt>2!`1mrpbI+h#~er5miZorH|p&m2BnnMsp=D&`;Z_nPB`_sxzO==~z9Jpb=1wID1<#Ui6bK
zR@z7P&=JUF{lezw*h}I>*c+;V`mz32SVneUUt6X8)cj3tR;58jeHu^eNXivkjE&=ov)WucK+7od_XOR85?
zUriHINc)XxU6&GZrcv097Emsf%YDm4(uZAl%`Ox&z>ySTL{J@QaYz9DwS33c-DfIh
z)ibyt^XSTqr9?@hQBGSfSBr{{BmA)Muw02Y!Ys3WSMbqOkY0=SNMc5-vyBl4Yl!mn
zBo6X(^1D(;W`*V`@!*e_6&Xg!_A+y6fMZy|>174taO>NWOU}budp>-uteK8bU1W;$
zvWLlPE~eP_nrJelNmNRw9-&i0j`y{~uAC!j+G$u#X=64@jB$aWQM^EH`5K6BD|xKY
zI34w*BDQkuO&~_**X`Z%IQ4#e_hRJ>Z5g3Z4sEA@!-BWN{jyN$PS!A4{mwkn_
zbq@C@?8?Y_<$yh(^x3>J?BS(>#3NG`@w5gPHjFnfdw3r2Wi-BPi7WmnY7_OEnzDjw
zMuoKSj5c$LC-tjH`MG7&v`zJcUy5V3w?&lbEO2Ubvx)fVD|x!Ywh$7JkR5_uSUWPn
zneOCfDsqc+Dq%qR$)2?fixdzB($&_GEN?wwByBKcz9@FFI3$ZJi{q4=TZ;6KI36vo
zp+Nm#M&3E>?h)!+yMK4wgTu_6pHW-!$}U)X=?tYHDyqr+I$@g0Wa^EA_ghXF7=X?a
zfoKFI#oyiOr2v$;gQt1O!^iO(W`B`8e`6iLkPuH)^^4S-(GTdxsQl%3WpU43dGTFX
zqB11%8LnFqYNv_%;M;zBBB6R0%~!51v8jsR=rV%GcW0?iwTra6s?li{t7fGN9!J9S
zgW7&t8qMYs&d76PL=6@%(DmkO6Zcp!rC+bGU#XIFnXBZQS
z<`@fAse`Y;&*lhc0Uh33K96AtN?Gx4_;&|Kg?j0^jTyWrvJGS;`IKj~GodIoZ=(&Z-OBU&_4;(n
z;IhZKhPbage(d4ZYEj`Iov7eFf5A!|hqE?&_1?PMhXxs48fw>5p@QuR(xH4hi`eK9
zMg4ZlSfOtBWoWXg;N!r=>9k!
z2$f9(^^!E;3O6ijX1+_F7ol(1|tq!e((b9GcRt(`J;N>GKDJs%~
zOgYVI14YN_ibY^@V1o%>M@&1MQYS4{qtL6K7kW;1VsyOYM`K633KSG?l~g!_9tw|&
zT`&~-FF-1H383gMFrlWV4;gEjID=P(XbrEwy9JS2$+lAVtzF?ye%)>)oGW{0NK!q!
zIYGCr8;Q7({67?3by$;K8z0>%ARx`8LsCT81_%rUHrVKH7$WUUcS(;DkgkmmDNzKZ
zL8S&LDAGtNEjhn^|L=OP>v_)EIrsgm+q%y~^n_ta=tP{|~_H6N
zn;W>b2@UofOOd2-ghv(33dM2(+{koR0GGMi(TWSz{k=w%(`_|p=IsnifSpbtjpb6b
zi3tr%jPoC$wtdq0KOGfU9irE8K0pMTeUd?f30EC`B$jx#vHs?f=efSZFuyGzmLb6lg(-63w?Y_TNjWPY}?
z?pbgOE3x&LI`owSJNhX9x_h~NWTcd1wq@-J??ipHjN}S<$MerHS2c56X#!fU%ajV_
zZKTm7lVsjL(c-$N#n?D!KgrYJpX!3B)a>LIiq}$^QqUEWKS8Wo7VWa`uvbg?djDBV
z`No-xmFiluHOeY?8~M>jqSBjghq`EmW376IgO{vQ5|1{=fWP=(r++EKkNm7~L1h-j
zb!{JD7!EH3YSv8?`x*5))r`p^iQn=^u0_}p_z!6PDH1*Wik7Pj_Y3*fu_5JIEz2)J
z=A)hjuNYcP-|>HKTOe*L=*SK9}cD#aX*V
z)W|etbyjz*X3KcvIoVy(;C-blZKQ<@n@OR2J6qeNFsXrW%%!QJfq{+^9P}>*t14R4@udJ|5})Oc&($`+9GfDR~9R!$UgeA_76(a=Bln9zjC@+Z>ESJjPixD&^%AIB(;@-}D54FA+o%KCuF_|;w-4Ks
z;Ko{1YebEK8?%?D>5EhX(Xw3QrJ3{v$V(E!dRw^)e_B<{
z24b|#r5=L1-hW=c67T%*+zN+ag6I`QHtJM+#0)5$G*IqX?&c~<-9=!vW^hh(y18Uf
zE+i}IEJ8|VR{6R0o2Mi(=A_P!nMYc6wO12lsR{hVk!tvaowK*u@s0v)-aRAAUF!;G
z3acaWO8!|N$E_7^Rx7t^Z&dDb0lN6$F_cJYy;m^X9ho
zNt0$ei)cn=1e`5XP!X5
zz&pG1yWzobPJJy6!t~Nj<-_#l>0CqM)ZqAtUN8wRRrT$Gh3QOt=`&OIx*vighMP1r
z(2U1};IT7zNawwH`n^A~h`XVNE>p~41vQ&PO)_K-fM5@)%8;M
zTXJojnr%*aMCW9Dxb;J5gS|wzTVKmT-x?VeIDbYxQz>0Iuym%rDl$bhF8V{J8m>DR
z@~Otd44^G|quN@(KgTX1uEkn56#hMUBRtGP+|wv08orCY%Q88Xq48ktftV6cbw5=O
za!;yuZNls6I4ceFu$HTb*#lr!#87(A7xfmS-db6xK-(B8!=fq$$%ukm<`W1z`H4``
zmr@j%6(y=Sdmc0U3HcB3b>2~mNRcEi#SDswR42LUx{9#%d?hX@YV0;luOmzvwM8j^
z#;uqkYi0039B@%hWP#j$c1R*@0AU&7!3-Eoi1~0ip~!x)?+}^mUrLeOOmo!^7(+XKDq1RGVI9P9c{Yo}E*yi7Aq=8HBJg`I
zw8L6M}GKnzx@}yU@
z371#3iJ|PV$|{PkLY8rG#M+LG+3~};?QCy8Pj6+pMn=hS>L)b^}3T^LQ
z`~#5u@%i5DU`AZ1O7z(sW&=P>q`A+gdO^3`Hhg#MksDJ}BqpP0sN3w59XvZOhb&Ky
z^nT`c@^=aVnYCs^KmOJF&-V^)9~fs~CEqkkatT1Vu}Vuqkf5Z75lVqxzOj@o`?eBk
zN_zU2RhC63SH2TnDVTG=&uvty{8OhQ`S+R)%cYM-eOjMTERI|c0>f=z9ohL$&QjDj
zaZ0imzPMu;{Yf-sc6BwA%y)-W1JQC{hu=}n8AshP_zWVf&d~5uk?XoM^*-?woa+*C
zlYi}=HT$51)zxfWWFwWeI#UKNGf1SnQAisgQwlfaTzzTIF|%lx)PYf++%cjOjB*UI
zUCs=yp`POs2_16J+8#M5#TZmFNuVWS|7IA7waw-#@4@6g#%5>*f8xK7P*eV?|6NO-
zm?@cv7sv|N#C`R<4LkT%Xo4aFcU-&A=-+Yh(nSmdruQ5LrZ0N6@3uMOJha-ttWd
zX31x8B0@t<@bN#;h^08+C)0zjx5q}^-GPW2a^A>xy)-;O)C-c5p6>8@Y`~)|xabQ(u
z@BQQEFoBu!Zw?4?_f0qoht2+YIy%T0sf{Q&1R}=t)ZhTVbV78y
z()vt~U*mTVDlG~ouTXmnRFs#MIP
zjde|Di1M_C4-u!0h~*Mvw5|ZKk)IgoZedc~W#ygn4GJf6Lf(GVSHEHH``*d^cx{rqQ-NF&tnoxN0MIjVCf
zP5F4i^Pr>KBB0%;;{JupW41?A10wK>=4}W^ppQGk^9S8QIFE}
zUw2oE%|oL@(HSgTrl4Vlb
z{UeFr)bJ@#Hj1YdbQT9!e4ac%yZ4%Jj(`{vDHb7{xg|J7=c|R{BHV~K1g*lf1^xkG
z;Y&H;X!@kT#S{xS-)@T}maXsl6zj9HdEmu=>0uJSxS!)*BDp(kfH-FGbwKCA*l3pkyq^0+G~>hT)d(s{-RDbEw=
zUfEdvlCeT?Lsmi0qF;9>aEpyPOkm{jxk&r70%DW5lNszyHzw|B6$fJ(ODMk#qE+3y
zjs-zTMmN=PYdQNDr~YHe-v#{9)mBa|mE9)gxy7MYt(@-9kj9_IV}(y^t&;DR{Ff6m
z3+sc(H)`{MUmbvYWS*Dlze{%F9M}
zRtK4}wc}=HU5P|BqfxrwUJ;(Um818d)DV(e+g;(R`MuA1rRE$_lQ~T?oL#lWGj%dzSj?3YqT{7qQFtr;7Oq)O`tj>fp=d^F+>cet+
zMJr1ig8rS@%BTTJh#&Caaq4WQ4f@JZHgg``AO&z`(~ToeOUO|#0|GGFXj8h4Ki;H
z;Riy`9fn1C>I8-=?)NiT4Vf`lRbJgHNob#)r-zm0_?TirHa51>6BQu1UB{gcv{569
zEP}D@tf@SukoT3P3L%KM7W%5}nmlm2Qs=Rj9rwCSN8FOqlfaKHVY+3F9XHn%gkcE_EnQ}ZoWquVnl0<1Ly
zRWb%fi3HQnc_!x#)-XIy5w*ou$`l{+*}EsIWd`C{3cP^@Te0aDH{JV?B*@CGM4+`+
zU#9=-Z_pKnhJS#M_}%+bPbGp*CK)>CdqMeOVku2!=sYf?w+Z`B^p-N`i(^GiGMqtX`A|Wz^;?G+LH~H&(-1~!@9%})~3vo&e0U65s)Ip)?iy-xq=gQ^MiL)al4dzNrhdXOxN}*k@2_@#v
ziP$%6o9~|o2^u!50KjkpRT6fx_=9Ez4t93_MU0LZp!eJL4fWy)Ci9){i%K>)0D`=?Jue0tCP0smLwp
z)4gQtCeN}AuWKRtJSGA42nUrc{IIZgk}4;{Ty;gX%;r}_Uu7UoKDYwy3KkM_D84O(
zv$i+bX_tzJAyG4MfT}6)Yx=N#Wf4-Y!=}s0vP+-c6o~AFqs}Zu{5&JVtAShx39hQ7q`Fi!Qp5ESI(KKlMM9?1lJtv5z1DDO^{)Hre0E7z`+8|1uBS
z?$zy#lBR-ApVBwQ1G02^kI#5&{M9JM$1)ft$C|rHj?Q>asj4V=>V0&ZjIdK~0{HSk
z;a#fU-4>e5e*lIT3XhI=YfF))?mS-IKiykN*ca;yI<15FcoO
zR<|6k!-}=P?bsS*%O?kBr|A$L4VR376FUAD5ONO^gT|NP?2>)y`Xu!69r)5)&%T?G
zX)Iw!q*AZbY~!0w0!B+85}%WQ9_6yw8a$fpj=wE39}_BiU@}{iyEfm6OOx~vC12iW
zzod<*o2Zo)1(?eJ131UGB;Yv0IFw3fJXg|$uU`$@LTbbo_}{50gX{CNxkTl)RJSedX|
zKiG|I<(v|miGObp7Cs49Gsvr5HL+-4096?`>2vG5jCJL3h*q_rDgTxQ7sxL@q%nxtLz*+oQLwEAVfKyihPbbSUD^_1$F
zS=24XLx~?xo_E-{q038?kcfqaG|HPRj^mi8^wXh7-EE`G>Dx9+-CG-Sh3(J6OdQy-51RLj8Y{`yS>4P
zOE!sh_4t(Vznk2iHWGWxAt)~Hs8cn3W2NPii_sIT~TKK9Rvv~XfgbWDK50z;kWw9
zcbzJp0Ol5PwahkN20(kw$>iqDABxV3&(kgrRhXc<8h5v{c=mnvz-=f>kp4!QEZL$N
zhz^e+UbsW%bi=eu+;*+6>bGsvJ>e%br9X&ev)~lPT
zpV-33LnA_R#Rwz4zO$}XisV);fL?9XOZxdGoIR5<+o$xrH4(t(guPQH@E+>
z{5M;rnU>Ral|%7s0eC2h|GAVbJcLM7g~vSMqb4XjlCgy5JpxoHr0&T7p|iWB_8$N-
z6xs5BvBruf5k;NJV~e$k}gk|==gPOW?d9`Bh)MEyaR154wTKcux8IRs
zd4zsHu42vuy~}1q{2C96yzUa!H9a}o)AVPAj5S1j9bsrLAP)ahHX6-eRbLmt-%e%%
zBo7BuOGPXQ?)-t^3Xz0cEUWebG}5Ri@1)A7U|}4yJ&<5nnTQTB3^{xT;McHyD*8@g
z^5IQb*frb&e(8Nu_75P84D7E^j~T>NgZ#^WgP+5;=ZQ1f2ObFYH!gHkQ^d76i$UAp
z62O&cvd=fVCz5S%-y8fK#w>pER0}ri-k>gHViZvzyGeUQASwM#1=@8N7UDqT5ecdyjTuZ(XFB+|8i6kPH93fulAX_vWbVsBgIWNY
zCr`E)LYl~lBC`%#f>Yw1{ju(hx`Q6vPWZOD`778n?Y+#cuo03>1yV}OkeO7#i404q
ze($8K(e{jlgdb5iUBxKF|Ju?Dr4lYV!t*^-vvxtbW)Qw{McDea7T8qU+^SFuM)9bW
zOoo66FM95_O64m%wRFt_Eh(KY+@Q=U04*}dM;p|$NC1LDXxp*DQ*i3TDy5_2%OL;3
z#rtVW6Au%IF^OlZ5D_twOgh+7abDF^R;P|QyR-t$3E3aN*Ose#xBmVESozrtD9526
z*TDVMV4HXbivUlg!X$zyJ9i}aPdJwjfVr!qm+bct(e$o~kF
zm^8%_SzR5f&(8`Va0wZYsh$*GNxHQ)A4TtzXHeZ$SxU$B6#1(9XNV8yon5Q!To(9G
zr+tf|$se!+SY5jFxnH1ks;Lkb>xsXK=(k@k=KQq&;W?Co>f~Ry`}p|Ltgyi6OWvpe
z`!yn#DUFgzj#EKF9IuTk|GT@UvT85(8%o`ovdRJ**bUu{=&P~z{c03Is$78_<_vy-
zPURJgGL7Jr4;FZ1*9kN3PFJVfV~s3%nVpOim9X%F
zsW;Bq*x9cT!IxtCCgs)E@`gXm;!NK%WzYO!&yeM}_hRBJ*&$q+52?sV^1#vMJ
zv`A_O0VUH4D*dkZPPC5Gqw_DJv~NS>PQE*ak3aC0r~nprc&C#8SdYPu{qJnhFA9nD~_9)44t
z;##Y4s4u;weD7i;wVAIymzop{AokjSk?Q(Dww%%m}P`n2#6|_Q7Y>vRH!>uKh`fP@Kd;KM(8w|%KM5*O^T159Vf3$~Jihux
zxHtKc8T-cRg9fJKhx`8+DWWvRWD9BM45+{|1a?kgN6dXQi^C{4j+3i8vGR!YomiVD
z(Nq;QjmY=*-eb$+WTw4|EA}y
zIgsKs+;VfQPp4gO6hq|n%OBd!t5zDZW
z%|4$I^fa)a5joLS!1MNGAMKRfW76)+%x>y-Dtg(MpJ#!k385T@O2_we*JSC!=e}w*p+LA;0$sJQOtW5>$@4<1LZe79ZTTfraZMw+
z#duOQlw2!+LiM}C$G1mfwMSkU70YkvjOe%Hhm(0HeT46Evp4-9O}%HFm`;IOPSXxT
ziX-E4HvrD$?eT>4$_C6=$Jbil*X`044e8{s-)Dx;i}k%0`Mc#3MB>2$mebe;IUbzc
zbbm*e>G;2`!IE+-kw>neV+PV>bp5?Spg(SV+oi>|rI#*lbos`k$_zvSnRSzr&m|`p
z7TpCSKMs8t^yU~TJ1#xOhZl*|NU(1BvJ>f2XR5KB!P_q#N0ZK;y|#JVYPM)Eo5#%V
za0I2m(Ft01M^@$y?ca^^JMB8R`Q0+^-=njpauH-IEPvAfYoRYUkVVxLVlAdSE3Uf>
zU>?$R*QG8bvdKAZu9umEHVCI~0csno{*$Vw$!D{S0-BNr`~L&js7}FZI`
zeJ0{*ZxFW%Yj=~f&vCSa0O|Yc-`Z)F2N=bMf*koyv&WzR5(S#23>7>whvEv%Gu7^-
za}Z8jbQf=~;LgQgXI3Hzb&9yU7%UI$^{RCDxS4UZ@$PWyk^u_nX`!0|fEPrPMj>Dm
zRmI=xEeif?iyKTb*FS5>Dx%eYAK5-ea+|((EiKfeY3zqcKc~EwNy|T!%2HREXlN}j
zsHjaNe~xENluF8eC09pjeu46xvG
z0lY0ct2Vl_AYIw}Mg{zNcCV($QD#N~m=g8FhV{TvEsa%}uec~7zcTGX_2S$Hb^R#%
z^%8;^6SGPfu64U)*CirqK6Ohbq(zp|r_$a!ViSFconp(pI0Z?V1yT?gw1?
zdHsF8t7VN$f;VEoVBK)r&8olvTMW6TJ}r5fhT0Fk4b!#Wx2J4$(
z`0jnPVa@lb$>-1hUov@$SGH3C?G`2{CMHR4RIM(&$AEf~b#{zUqGoZ3dnFr}&&^KZ
zI}XS9>0*!QIIYoeI_+Oxf}(;~3|0RCTuO9&hxxg++C(F>VCfCfSy`>-#8azB@OIME?7!6Fh298dU0K!2yh*jmsL~u;NgpGWKFfo#I~FMAz>W1AzR=#W
z*_KjhDd-L#l{IiCzNfE%^X7vS{Oa)t=jR&FFC89&;YC6}x2cR$SR0>fBB=V@04uYZqK+YD9OB}1QrsLIAklwskHjaYV%YDa?omMRb}kVJX@uDL&bUCLK1U^
z2#HAVbj&h?gu!ye!pOj{N^gsd*SjRwgeYD-@YN6CvP*)`a?Dz6*AG*%LO=@CDIH>c
zt>IC=0n(K`&%(S7LP~|gIG00!$W{%&s7(wRVqo+yR!~^;u$V^;V1}t&
z=y)RPD~z-K{)#?I568AiP4b1yt6b6sG8yDd!2p#sRcz;bf)W=jj{3y)mc
zsnUmDz(@*w$V>PUDalZ^6pt|4SA5^jtaZA-=@7;B4u&)(Z9gSrrGdSf3M)NYwRzv-
zW-fA&L4{D)cawoIEGk8vC>3P5c?ujgRy|a?M_fLd-z&+7dnbcQZpYqje!Y
zzh*UR=eX$=eW!#k8!IiQBbJeBjlS$;1*)P=qW3w~I=+EEDfzZacz4KTl281M?P_`C
z*70|JUrG=ARnYpBPyb~=m3uN9)NJ^@(tLF(XG<9-p95p{NqL{FDD`y5E>f~7;E9NWVj-%;%muDq?{ja7zEthjx2agblaetw)ltTctU%Rni))=c$r;8@?11$ng0
zAlrYiq#Gw}$NWy)zzG^v@OF-Wuod$@R#mK)6RCGjDnxOp1V%>K^Bo=w)^9N)cX3g1
zxr0pgD7!&fM#6l}Ca)LnR4f1wR?Ni20*1QXJg-QhHqyuN1`<;lL|rUAUgUc17Y6t$
z_Wd5Ql(esD4(;9KBmDR4XHX_Bv8M$K$=c*nfjw
zVY2f60lFT|&zB|J=+C9Wr{%0!=W!^+`HpR{@0wHceD~&V@#V
zxQl2CjFD!Bbfxh*x57YAf&9lFM#p|3K(@-_hjBv|}
zX#)W3=q-MjIk=ePVB|($Iq(N
ztp?4GF^T@;9DG6d?KazsbfqYO)D4zT=s)4LS(F;pKwV7}v)H|WBVYlTM&>d9TCBa6
zCLKhmbYU`)D>!9p^GJ!)D&|2_QiXI@rMs&?HsK<+Ri7ED#@GA(a#W&}xRPj;T546m
zG~b-?qJ0Ys`~Lv0wIXjjIy(xKWA86K;=m61XnhV`_>|&5i2NY?kz4q4MoqEK(gd6k
zkMWI1e6YVfjn#Nwr$zj9eNl((zQwqn6T_Q?Z`*jH*6^67DX=8EvMz;3OxV8FNnd!B(Az=y8-wk|GA-OTF96Cb%fe2E}M9Yxyc&8YPr*
zjn8kp@{>GHLSvJR)9C0l)oNyS@!FV_p#YFk37EZl^kW-xaSeO4TYX)ouM51^CbKyTtE#3f_Fcx
ztEskvg{2H1;l%^8HeNF^CrZhutZ*m}mD43jNr4}6>^-g#sUG*L8hlnYYgC&ftkdN}
z5-mO1@ug4_MO9@0mM+0uDj$hg&UIx#)~GBvk={)JO}~*w9jaEeuVioqy<&K!wl+3gIr+dV%{-3+lqS^
zK}An+FWD{+puW`KNrE$!EaCfha?Dn>czH5(KEqh6+$b*GEm9U5dG6H~iTr#T3y{I-
z+{J~dnWkgbm(S)B$?NGoHb4;|RhweYig`u8AgAr^%h@mF6S-@?&O`-j^Ld;ktq`+kL
z1VXWi=Q};dkc5IjVsi&E^(prOgY61#>ZUMRPd_Hx4;Ke8hF2t$cwsKCJtsNoi>Gv_
zR<0H<5u3BDdY(LrT7*23m*cPh0iF+juj%=7wh_`;QHi)bYv2>D<4vBpEzWNp*Aut*
z$RRKSMv$&6+gN_JcEp6jhEG~w+hu{@nQ1)XVNb+$+Y0DXd{-4vE>lUHNsWas7
z`!6TA2k_F^d)+dEv;3ryW;+}AV(dqIh9k#|1c+8h8^(eP^}z?Oq&MutF4Cm&
zyd}@s)+j764035LvL%8v_Xvidr>`@0I#-gfE1X*v65KzdU{}4a))%8(mbW3iN1eE^
zh_4}7P({Oz0?V_s0uOtk5!1UZUEuZ8&e=UY=m3jcpr}qlB74NsD#`(#UVXr@2%Rgu
zvLnJw(My!izrHRZCIG*Zlp67gn>q=MmBcG9Iy^(p3!LmF`@?HnBSp8A%yb
zZ}^?!OV&qvVstZh9jBD(m^-u1fTgC)eI{N6kh#a
z8~%e;`xNk%{vK{1%eVSm_(xqq)aI;iEueHY{nOFp1ojR;AI*ag<&f>jYQoE+M|jtN
z_Ze~yK?O)D_*k{Iw2
zB(un-rRnE?0C#HM@#uhhzZVVEuEXCrZgn9$g`fJ3Zhw>CY91B+t`uZcdIZh|St(l_
zHNN`KXN^6N_Uh6b^AQJJYiqK|x(T*W*nPIAEwPCD8*jjQ;h3q4Ix?Q%6L?f8lu#}3
zQyoeWBo|GmK7(V+C?+UaSutfNzsx6u*w5d-Hs*S;U?k=jO~i*V2zUMDZ}j($f~n)5
zyUAu2pWm5^)$3uWYv+WjsBSsUZgmx`VZ64k*Shf?={9Z^;~0WUNX(z}d*SViP5#%0
z-cXgm2lyv31EV)rBp#J+i{$`!K}J;CE61h0;@;y50i=7ZW@3)
ztBOg#pvSmMumtBdN|PMQ%E4ph?K9ID`i$l1H-h#XM=qscO(onQ?|!aUDxqel<`?%S
z8@YQE@-q=&vmyq)#Q)SY#keH&g|xOlBB3cjkB}ET@=dwK2$nr|HU901F(=>2ZG3Uh
zAdPd8)+>9q-&W#q1RmeQZUNmTgS2dL+uHt$cl0C_?U8IId|7axJ=ozouiLNRN`DTF
z9#_BhqMp{My;CWpdi!(8B4wMDGit`BN!VKPumV#b{c^{76zN>IoSQ3xoOfEk{z>FU
z0TLb6*FGcLKu5fYLkyT0p_H8FV+gH|>xVQS?!gHx@fW1jQ+$=Un$12kD{64Itf^_`
zlaMQaq*V{A_)xBePRsEaiJtwGD>ks|>0=ck4g01vZP3zN=%6$xvoFV22dbS$Ups-5SF74BJj_@PU6~L94_Z4^6zk43Rv@ZWP};Bb($oK3
zZC+E|+|#=h;^3R=TBlFOa)bB3xj1bdUbYYN&VVMCDrdCGi+v?8)F7s)7Po0wy3}zH
zNZ*)e>;5mPrgu8`cQS`~dE03Vu>Bt9(RFReJWWl4|^J6Gk?!z
z=n#e$0c;4}D1&2gQCOHqUjW)@oboA#3GBy5v?wRZ)+*RXP1o-SfjOWr%Z0@QTf-oCW=6&
ziTgn}Nj2&y%{Rv0M&q*pn)`YY((l04JHJ8q^8UO!1TiPq3=$*n8YL
z{TpD9Z9u_31qayT6tqmBd%A_8{Ucv`H!%j8!~#hl|MH=D%F73@qIz-3mg!AAx3zI;
zO;$kxFXYYoFD&xcH?8J--^^n59Z6anhC5&IS^V+wHq9lt%s~en3Pi67rKKtT>zuh<
zW8{8=zK;=jvheCG5}*c1eGkjNgqk1h9^jOCaS&`z?0xi+ZwhPWy3xGL&aLX
zr40>}Q@5