源码地址:http://git.oschina.net/flyfox/jflyfox_jfinal
jflyfox_jfinal是对Jfinal和beetl进行封装。
1. 包含controller,model,form,service基础类封装。
2. 对分页进行了后台和前台的实现。
3. 加入了自动扫描model和controller以及注解支持。
4. 实现了ueditor后台Controller代码。
5. 加入了页面增删改查代码自动生成功能,可通过beetl模板进行配置。
6. 实现了SessionAttrInterceptor、页面和手机设备判断拦截器以及BasePathHandler。
其他项目
一、人员信息记录
主要是记录人员信息,可定制化人员信息字段,可进行excel导入导出的系统。
二、工资管理
主要是人员信息、部门管理,以及工资导入、导出。本来还想加入工资编辑和计算,但是由于各种原因放弃了。
三、website_jfinal类似于个人博客
这个是比较早的项目通过jfinal和jsp实现,通过后台配置实现网站首页更新。
和现在的blog差不多就是代码和页面都比较老了。
源码地址:http://git.oschina.net/flyfox/website_jfinal
四、JavaFX
有一个JavaFX工具类项目和处理文件名称个性化批量修改工具以及学习JavaFX的大量DEMO。
JavaFX Demo地址:http://git.oschina.net/flyfox/JavaFXDemo
五、仓储管理:jfinal+jsp
(1)管理员登录模块
包括对管理员的用户名密码进行匹配性验证,以及登录验证码,防止暴力破解登录。
(2)物资管理模块
能够对新物资进行建档,管理员可以查看所有已建档物资信息并可以修改或删除。
(3)入库管理模块
管理员可以进行入库登记,可以修改或删除入库记录,也可以按照时间段进行入库情况统计。
(4)出库管理模块
管理员可以查看所有出库信息,可以进行出库登记,可以修改或删除出库记录。可以按时间段进行统计查询。
(5)盘存管理模块
管理员可以查看所有物资的库存情况。可以进行商品查询,可以按名称查询单一商品,也可以按种类查询某一种类物资。
(6)系统管理模块
包括供货单位管理、收货单位管理、物资种类管理、经手人管理等。
(7)用户管理模块
主要提供用户修改密码的功能。
六、低值易耗品信息管理:jfinal+jsp
类似与仓储管理
(1)用户管理
1)登录;2)注册;3)修改员工个人信息;4)修改员工密码;5)管理员工
(2)低值易耗品信息管理
1)分类:低值易耗品分类表中添加、删除、修改、查看分类。
2)信息增加:员工或管理员登陆后可以将采购到的低值易耗品信息添加到信息表中,并生成凭单。
(3)凭单管理
1)凭单查看,编辑;2)凭单打印:
(4)报表管理
1)报表生成;2)报表打印
七、任务管理:jfinal+jsp
(1)系统用户登录及注册
1)角色管理; 2)用户注册;3)信息维护
(2)公告模块
1)公告展示进行权限划分;2)公告编辑,实现公告发布
(3)任务管理
1)核心模块,任务信息维护;2)实现流转-》处理-》结束流程;3)实现任务权限管理,按照部门和用户角色划分
八、文献管理:jfinal+jsp
实现文献信息编辑,文献上传、以及根据文献文本自动解析标题、作者、摘要、内容等信息。
九、仓库管理:springmvc3+hibernate4
类似仓储管理,修改实现技术
十、企业库存管理:jfinal+jsp
类似仓储管理,实现用户模块,库存模块,退货模块,订货模块以及报表管理
熟悉三大运营商接口开发:CMPP3.0,SMGP,SGIP1.2。
直接接入运行商,可以保证接口稳定性,提交速度基本受限于运营商限速。并支持发送数据数据历史查询、黑白名单、流控、发送量限制等功能。
第三方短信接口开发:阿里大鱼、haoservice、创蓝等接口。
', '2', '0', '11', '1', '1', '2', '11', null, 'jflyfox/project/article_image/20160621_123305_245463.jpg', null, null, null, '10', '2016-06-21', '系统管理员', null, null, '2016-06-21 12:29:26', '2016-06-21 12:29:26', '1'); +INSERT INTO `tb_article` VALUES ('4244', '257', 'jfinal cms介绍', 'jfinal cms,采用了简洁强大的JFinal作为web框架,模板引擎用的是beetl,数据库用mysql,前端bootstrap、flat ui等框架。 支持多站点、oauth2认证、帐号注册、密码加密、评论及回复,消息提示,网站访问量统计,文章评论数和浏览量统计,回复管理,权限管理等。
后台模块包含:栏目管理,栏目公告,栏目滚动图片,文章管理,回复管理,意见反馈,我的相册,相册管理,图片管理,专辑管理、视频管理、缓存更新,友情链接,访问统计,联系人管理,模板管理,组织机构管理,用户管理,角色管理,菜单管理,数据字典管理,站点管理。
JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!为您节约更多时间,去陪恋人、家人和朋友 :)
JFinal有如下主要特点:
MVC架构,设计精巧,使用简单
遵循COC原则,零配置,无xml
独创Db + Record模式,灵活便利
ActiveRecord支持,使数据库开发极致快速
自动加载修改后的java文件,开发过程中无需重启web server
AOP支持,拦截器配置灵活,功能强大
Plugin体系结构,扩展性强
多视图支持,支持FreeMarker、JSP、Velocity
强大的Validator后端校验功能
功能齐全,拥有struts2的绝大部分功能
体积小仅339K,且无第三方依赖
Beetl目前版本是2.7,大小720K,相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,开发和维护模板有很好的体验。是新一代的模板引擎。总得来说,它的特性如下:
功能完备:同主流的java模板引擎相比,Beetl具有绝大多数功能。适用于各种应用场景,从对响应速度有很高要求的大网站到功能繁多的CMS管理系统都适合。Beetl本身还具有很多独特功能来完成模板编写和维护,这是其他模板引擎所不具有的。
非常简单:类似Javascript语法和习俗,只要半小时就能通过半学半猜完全掌握用法。拒绝其他模板引擎那种非人性化的语法和习俗。
超高的性能:Beetl 远超过主流java模板引擎性能,如5-6倍于freemarker,2倍于传统jsp技术。而且消耗较低的CPU
易于整合:Beetl能很容易的与各种web框架整合,如Spring MVC,JFinal,Struts,Nutz,Jodd,Servlet等。
支持模板单独开发和测试,即在MVC架构中,即使没有M和C部分,也能开发和测试模板。
扩展和个性化:Beetl支持自定义方法,格式化函数,虚拟属性,标签,和HTML标签. 同时Beetl也支持自定义占位符和控制语句起始符号也支持使用者完全可以打造适合自己的工具包.
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。
支持AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、NetBSD、OpenBSD、OS/2 Wrap、Solaris、SunOS、Windows等多种操作系统。
为多种编程语言提供了API。这些编程语言包括C、C++、C#、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。
支持多线程,充分利用CPU资源,支持多用户。
优化的SQL查询算法,有效地提高查询速度。
既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。
提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。
提供TCP/IP、ODBC和JDBC等多种数据库连接途径。
提供用于管理、检查、优化数据库操作的管理工具。
可以处理拥有上千万条记录的大型数据库。
中文 MySQL 文档:http://tool.oschina.net/apidocs/apidoc?api=mysql-5.1-zh
英文 MySQL 文档:http://tool.oschina.net/apidocs/apidoc?api=mysql-5.5-en
博客,仅音译,英文名为Blogger,为Web Log的混成词。它的正式名称为网络日记;又音译为部落格或部落阁等,是一种通常由个人管理、不定期张贴新的文章的网站。博客上的文章通常根据张贴时间,以倒序方式由新到旧排列。许多博客专注在特定的课题上提供评论或新闻,其他则被作为比较个人的日记。一个典型的博客结合了文字、图像、其他博客或网站的链接及其它与主题相关的媒体,能够让读者以互动的方式留下意见,是许多博客的重要要素。大部分的博客内容以文字为主,仍有一些博客专注在艺术、摄影、视频、音乐、播客等各种主题。博客是社会媒体网络的一部分。比较著名的有新浪、网易等博客。
本人博客地址:blog.jflyfox.com
资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性,它必须被消费者利用。并且“提供-使用(阅读或利用)-反馈”之间能够形成一个长期稳定的CS链,具有这些特点才可以称之为资讯。 从严格的意义上讲,新闻是一种资讯。资讯是一种信息,涵盖的不只是新闻,还可以包括其他媒介。如亲临专家讲座等等;新闻的目标受众相对宽泛,没有严格的受众划分,学语言的人可以去阅读科技新闻。学技术的也完全可以去阅读文学新闻,而资讯的受众的目标性相对比较强烈。
本站资讯网站地址:mtg.jflyfox.com
论坛(forum) ,简单理解为发帖回帖讨论的平台。是Internet上的一种电子信息服务系统。它提供一块公共电子白板,每个用户都可以在上面书写,可发布信息或提出看法。
它是一种交互性强,内容丰富而及时的Internet电子信息服务系统,用户在BBS站点上可以获得各种信息服务、发布信息、进行讨论、聊天等等。
BBS的英文全称是Bulletin Board System。翻译为中文就是“电子布告栏系统”。BBS最早是用来公布股市价格等类信息的,当时BBS连文件传输的功能都没有,而且只能在苹果机上运行。早期的BBS与一般街头和校园内的公告板性质相同,只不过是通过来传播或获得消息而已。
本站就是论坛,地址:bbs.jflyfox.com
网站(Website)是指在因特网上根据一定的规则,使用HTML(标准通用标记语言下的一个应用)等工具制作的用于展示特定内容相关网页的集合。简单地说,网站是一种沟通工具,人们可以通过网站来发布自己想要公开的资讯,或者利用网站来提供相关的网络服务。人们可以通过网页浏览器来访问网站,获取自己需要的资讯或者享受网络服务。
本站点网址示例地址:website.jflyfox.com
一、用户可通过以下方式注册成为社区的正式用户。成为论坛正式用户即获得本社区规定用户所应享有的一切权限;未经认证仅享有本社区规定的部分会员权限。社区有权对会员的权限设计进行变更。
二、如发现用户帐号中含有不雅文字或不恰当名称的,本社区保留取消其用户资格的权利,相应后果由用户自行承担。
(1)请勿以党和国家领导人或其他社会名人的真实姓名、字号、艺名、笔名注册;
(2)请勿以国家机构或其他机构的名称注册;
(3)请勿注册不文明、不健康名字,或包含歧视、侮辱、猥亵类词语的帐号;
(4)请勿注册易产生歧义、引起他人误解或其它不符合法律规定的帐号。
三、如发现用户的头像、简介/心情等个人信息中包含违法和不良信息的,本社区保留取消其用户资格的权利。
四、用户帐号的所有权归本社区,用户仅享有使用权。3个月未使用的用户帐号,本社区保留收回的权利。
五、用户有义务保证密码和帐号的安全,用户利用该密码和帐号所进行的一切活动引起的任何损失或损害,由用户自行承担全部责任,本社区不承担任何责任。如用户发现帐号遭到未授权的使用或发生其他任何安全问题,应立即修改帐号密码并妥善保管,如有必要,请通知本社区。因黑客行为或用户的保管疏忽导致帐号非法使用,本社区不承担任何责任。
珍爱生命,文明上网
', '12', '1', '2017-01-22 00:19:49', '1'); -- ---------------------------- -- Table structure for `tb_contact` @@ -627,7 +678,7 @@ CREATE TABLE `tb_folder` ( `create_time` varchar(64) DEFAULT NULL COMMENT '创建时间', `create_id` int(11) DEFAULT '0' COMMENT '创建者', PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=256 DEFAULT CHARSET=utf8 COMMENT='目录'; +) ENGINE=InnoDB AUTO_INCREMENT=268 DEFAULT CHARSET=utf8 COMMENT='目录'; -- ---------------------------- -- Records of tb_folder @@ -659,6 +710,18 @@ INSERT INTO `tb_folder` VALUES ('252', '0', '我的微博', 'weibo', 'home/home. INSERT INTO `tb_folder` VALUES ('253', '0', '首页', 'index', 'index.html', null, '10', '1', '1', null, '102', '8', null, null, null, '2016-06-17 16:48:11', '1', '2016-06-17 16:48:11', '1'); INSERT INTO `tb_folder` VALUES ('254', '0', '意见反馈', null, null, null, '10', '1', '3', 'http://mtg.jflyfox.com/advice.html', '102', '8', null, null, null, '2016-06-21 12:21:19', '1', '2016-06-21 12:21:19', '1'); INSERT INTO `tb_folder` VALUES ('255', '0', '关于我们', null, null, null, '10', '1', '3', 'http://blog.jflyfox.com/245.html', '102', '8', null, null, null, '2016-06-21 12:21:58', '1', '2016-06-21 12:21:58', '1'); +INSERT INTO `tb_folder` VALUES ('256', '0', '首页', 'home', null, null, '5', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:26:30', '1', '2017-01-21 23:26:30', '1'); +INSERT INTO `tb_folder` VALUES ('257', '0', 'jfinal-cms', 'jfinalcms', 'home/common_menu.html', null, '12', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:28:06', '1', '2017-01-21 23:28:06', '1'); +INSERT INTO `tb_folder` VALUES ('258', '0', 'jfinal', 'jfinal', 'home/common_menu.html', null, '14', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:28:29', '1', '2017-01-21 23:28:29', '1'); +INSERT INTO `tb_folder` VALUES ('259', '0', 'beetl', 'beetl', 'home/common_menu.html', null, '16', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:28:42', '1', '2017-01-21 23:28:42', '1'); +INSERT INTO `tb_folder` VALUES ('260', '0', 'mysql', 'mysql', 'home/common_menu.html', null, '18', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:29:25', '1', '2017-01-21 23:29:25', '1'); +INSERT INTO `tb_folder` VALUES ('261', '0', '其他', 'other', null, null, '50', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:29:46', '1', '2017-01-21 23:29:46', '1'); +INSERT INTO `tb_folder` VALUES ('262', '261', '博客站点', 'blog', 'home/common_menu.html', null, '52', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:30:18', '1', '2017-01-21 23:30:18', '1'); +INSERT INTO `tb_folder` VALUES ('263', '261', '资讯站点', 'information', 'home/common_menu.html', null, '54', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:31:17', '1', '2017-01-21 23:31:17', '1'); +INSERT INTO `tb_folder` VALUES ('264', '261', '论坛站点', 'bbs', 'home/common_menu.html', null, '56', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:31:42', '1', '2017-01-21 23:31:42', '1'); +INSERT INTO `tb_folder` VALUES ('265', '261', '网站站点', 'website', 'home/common_menu.html', null, '58', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:32:11', '1', '2017-01-21 23:32:11', '1'); +INSERT INTO `tb_folder` VALUES ('266', '261', '意见反馈', 'advice', null, null, '70', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:33:18', '1', '2017-01-21 23:33:18', '1'); +INSERT INTO `tb_folder` VALUES ('267', '261', '标签查询', 'tags', null, null, '60', '1', '2', 'front/tags/all.html', '102', '9', null, null, null, '2017-01-21 23:41:16', '1', '2017-01-21 23:41:16', '1'); -- ---------------------------- -- Table structure for `tb_folder_notice` @@ -934,7 +997,7 @@ CREATE TABLE `tb_site` ( `create_time` varchar(64) DEFAULT NULL COMMENT '创建时间', `create_id` int(11) DEFAULT '0' COMMENT '创建者', PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='站点'; +) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COMMENT='站点'; -- ---------------------------- -- Records of tb_site @@ -943,8 +1006,9 @@ INSERT INTO `tb_site` VALUES ('1', '视频管理', 'video', 'video', 'video.demo INSERT INTO `tb_site` VALUES ('2', '门头沟', 'mtg', 'mtg', 'mtg.demo.com', 'mtg.demo.com', null, '门头沟信息网', '1', '1', 'jflyfox\\website\\site_thumbnail\\20170101_002130_323416.png', null, null, null, null, '8', '1', '2', null, '2016-04-07 01:10:22', '1', '2016-04-07 01:10:22', '1'); INSERT INTO `tb_site` VALUES ('3', '网站', 'website', 'website', 'website.demo.com', 'website.demo.com', null, 'FLY的狐狸', '230', '2301', 'jflyfox\\website\\site_thumbnail\\20170101_002147_613266.gif', 'jdbc:mysql://127.0.0.1:3306/jfinal_cms_website?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull', 'root', '123456', 'com.mysql.jdbc.Driver', '10', '1', '2', null, '2016-03-21 23:58:54', '1', '2016-03-21 23:58:54', '1'); INSERT INTO `tb_site` VALUES ('4', '照片管理', 'photo', 'photo', 'photo.demo.com', 'photo.demo.com', null, 'FLY的狐狸', null, null, 'jflyfox\\website\\site_thumbnail\\20170101_002209_956776.png', 'jdbc:mysql://127.0.0.1:3306/jfinal_cms_photo?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull', 'root', '123456', 'com.mysql.jdbc.Driver', '11', '1', '2', null, '2016-03-22 22:25:21', '1', '2016-03-22 22:25:21', '1'); -INSERT INTO `tb_site` VALUES ('5', '博客', 'blog', 'blog', 'blog.demo.com', 'blog.demo.com', null, 'FLY的狐狸', '241', '3001', 'jflyfox\\website\\site_thumbnail\\20170101_002344_503232.png', 'jdbc:mysql://127.0.0.1:3306/jflyfox_mtg?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull', 'root', '123456', 'com.mysql.jdbc.Driver', '15', '1', '1', null, '2016-03-23 22:07:47', '1', '2016-03-23 22:07:47', '1'); +INSERT INTO `tb_site` VALUES ('5', '博客', 'blog', 'blog', 'blog.demo.com', 'blog.demo.com', null, 'FLY的狐狸', '241', '3001', 'jflyfox\\website\\site_thumbnail\\20170101_002344_503232.png', 'jdbc:mysql://127.0.0.1:3306/jflyfox_mtg?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull', 'root', '123456', 'com.mysql.jdbc.Driver', '15', '1', '2', null, '2016-03-23 22:07:47', '1', '2016-03-23 22:07:47', '1'); INSERT INTO `tb_site` VALUES ('8', '项目', 'project', 'project', 'project.demo.com', 'project.demo.com', null, 'FLY的狐狸', '253', null, 'jflyfox\\website\\site_thumbnail\\20170101_002358_867823.png', null, null, null, null, '20', '1', '2', null, '2016-06-17 16:47:44', '1', '2016-06-17 16:47:44', '1'); +INSERT INTO `tb_site` VALUES ('9', '论坛', 'bbs', 'bbs', '1', '2', null, '论坛', null, null, 'jflyfox\\project\\site_thumbnail\\20170113_162827_889442.png', null, null, null, null, '3', '1', '1', null, '2017-01-13 16:28:03', '1', '2017-01-13 16:28:03', '1'); -- ---------------------------- -- Table structure for `tb_tags` @@ -957,7 +1021,7 @@ CREATE TABLE `tb_tags` ( `create_time` varchar(64) DEFAULT NULL COMMENT '创建时间', `create_id` int(11) DEFAULT '0' COMMENT '创建者', PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=4732 DEFAULT CHARSET=utf8 COMMENT='标签'; +) ENGINE=InnoDB AUTO_INCREMENT=4745 DEFAULT CHARSET=utf8 COMMENT='标签'; -- ---------------------------- -- Records of tb_tags @@ -1315,6 +1379,17 @@ INSERT INTO `tb_tags` VALUES ('4728', '4017', 'tomcat', '2016-06-13 10:12:53', ' INSERT INTO `tb_tags` VALUES ('4729', '4083', 'html', '2016-06-13 10:13:00', '1'); INSERT INTO `tb_tags` VALUES ('4730', '4083', 'java', '2016-06-13 10:13:00', '1'); INSERT INTO `tb_tags` VALUES ('4731', '4083', 'tomcat', '2016-06-13 10:13:00', '1'); +INSERT INTO `tb_tags` VALUES ('4732', '4244', 'jfinal cms', '2017-01-21 23:36:31', '1'); +INSERT INTO `tb_tags` VALUES ('4733', '4244', 'jfinal', '2017-01-21 23:36:32', '1'); +INSERT INTO `tb_tags` VALUES ('4734', '4244', 'beetl', '2017-01-21 23:36:32', '1'); +INSERT INTO `tb_tags` VALUES ('4735', '4245', 'jfinal', '2017-01-21 23:38:50', '1'); +INSERT INTO `tb_tags` VALUES ('4736', '4246', 'beetl', '2017-01-21 23:39:36', '1'); +INSERT INTO `tb_tags` VALUES ('4739', '4247', 'mysql', '2017-01-21 23:43:22', '1'); +INSERT INTO `tb_tags` VALUES ('4740', '4247', '数据库', '2017-01-21 23:43:22', '1'); +INSERT INTO `tb_tags` VALUES ('4741', '4248', '博客', '2017-01-22 00:01:13', '1'); +INSERT INTO `tb_tags` VALUES ('4742', '4249', '资讯', '2017-01-22 00:02:47', '1'); +INSERT INTO `tb_tags` VALUES ('4743', '4250', '论坛', '2017-01-22 00:04:44', '1'); +INSERT INTO `tb_tags` VALUES ('4744', '4251', '网站', '2017-01-22 00:06:13', '1'); -- ---------------------------- -- Table structure for `tb_video` @@ -1415,38 +1490,3 @@ CREATE TABLE `tb_video_tags` ( -- ---------------------------- -- Records of tb_video_tags -- ---------------------------- - --- ---------------------------- --- Table structure for `sys_config` --- ---------------------------- -DROP TABLE IF EXISTS `sys_config`; -CREATE TABLE `sys_config` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` varchar(32) NOT NULL COMMENT '名称', - `key` varchar(64) NOT NULL COMMENT '键', - `value` varchar(1000) NOT NULL COMMENT '值', - `code` varchar(64) DEFAULT NULL COMMENT '编码', - `type` int(11) NOT NULL DEFAULT '0' COMMENT '类型', - `sort` int(11) NOT NULL DEFAULT '10' COMMENT '排序号', - `update_time` varchar(64) DEFAULT NULL COMMENT '更新时间', - `update_id` int(11) DEFAULT '0' COMMENT '更新人', - `create_time` varchar(64) DEFAULT NULL COMMENT '创建时间', - `create_id` int(11) DEFAULT '0' COMMENT '创建者', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='系统配置表'; - --- ---------------------------- --- Records of sys_config --- ---------------------------- -INSERT INTO `sys_config` VALUES ('1', '系统参数', 'systemParam', '0', null, '0', '10', '2016-12-17 22:32:35', '1', '2016-12-17 22:32:35', '1'); -INSERT INTO `sys_config` VALUES ('2', 'API参数', 'apiParam', '0', null, '0', '11', '2016-12-17 22:33:41', '1', '2016-12-17 22:33:41', '1'); -INSERT INTO `sys_config` VALUES ('4', '版权', 'copyright', '©FLY的狐狸 版权所有', null, '1', '10', '2016-12-17 23:07:21', '1', '2016-12-17 23:07:21', '1'); -INSERT INTO `sys_config` VALUES ('5', 'API是否开启', 'API.FLAG', 'true', null, '2', '110', '2016-12-17 23:12:26', '1', '2016-12-17 23:12:26', '1'); -INSERT INTO `sys_config` VALUES ('6', 'ip黑名单,逗号分隔', 'API.IP.BLACK', '127.0.0.122,localhost22', null, '2', '111', '2016-12-17 23:16:29', '1', '2016-12-17 23:16:29', '1'); -INSERT INTO `sys_config` VALUES ('7', '支持的版本,逗号分隔', 'API.VERSIONS', '1.0.0,1.0.1', null, '2', '112', '2016-12-17 23:17:00', '1', '2016-12-17 23:17:00', '1'); -INSERT INTO `sys_config` VALUES ('8', '登陆验证是否开启', 'API.LOGIN.VALID', 'false', null, '2', '114', '2016-12-17 23:17:23', '1', '2016-12-17 23:17:23', '1'); -INSERT INTO `sys_config` VALUES ('9', '站点参数', 'siteParam', '0', null, '0', '12', '2016-12-31 16:27:12', '1', '2016-12-31 16:27:12', '1'); -INSERT INTO `sys_config` VALUES ('10', '多站点标示', 'SITE.MULTI.FLAG', 'false', null, '9', '211', '2016-12-31 16:28:02', '1', '2016-12-31 16:28:02', '1'); -INSERT INTO `sys_config` VALUES ('11', '站点根目录', 'SITE.TEMPLATE.PATH', '/template/', null, '9', '212', '2016-12-31 16:28:43', '1', '2016-12-31 16:28:43', '1'); -INSERT INTO `sys_config` VALUES ('12', 'Session站点列表', 'SITE.SESSION.SITES', 'sites', null, '9', '213', '2016-12-31 16:30:17', '1', '2016-12-31 16:30:17', '1'); -INSERT INTO `sys_config` VALUES ('13', 'Session站点', 'SITE.SESSION.SITE', 'site', null, '9', '214', '2016-12-31 16:30:38', '1', '2016-12-31 16:30:38', '1'); \ No newline at end of file diff --git "a/sql/update/20161231_\347\253\231\347\202\271\345\255\227\346\256\265\345\256\214\345\226\204.sql" "b/sql/update/20161231_\347\253\231\347\202\271\345\255\227\346\256\265\345\256\214\345\226\204.sql" index 5719a81..f49163d 100644 --- "a/sql/update/20161231_\347\253\231\347\202\271\345\255\227\346\256\265\345\256\214\345\226\204.sql" +++ "b/sql/update/20161231_\347\253\231\347\202\271\345\255\227\346\256\265\345\256\214\345\226\204.sql" @@ -10,4 +10,6 @@ INSERT INTO `sys_config` VALUES ('11', '站点根目录', 'SITE.TEMPLATE.PATH', INSERT INTO `sys_config` VALUES ('12', 'Session站点列表', 'SITE.SESSION.SITES', 'sites', null, '9', '213', '2016-12-31 16:30:17', '1', '2016-12-31 16:30:17', '1'); INSERT INTO `sys_config` VALUES ('13', 'Session站点', 'SITE.SESSION.SITE', 'site', null, '9', '214', '2016-12-31 16:30:38', '1', '2016-12-31 16:30:38', '1'); -update tb_site set site_defalut = 1 where id = 5; \ No newline at end of file +update tb_site set site_defalut = 1 where id = 5; + +INSERT INTO `sys_menu` VALUES ('31', '1', '参数配置', 'config', 'system/config', '1', '1', '97', '2', '2016-12-17 23:34:13', '1'); diff --git "a/sql/update/20170113_bbs\346\265\213\350\257\225\346\225\260\346\215\256.sql" "b/sql/update/20170113_bbs\346\265\213\350\257\225\346\225\260\346\215\256.sql" new file mode 100644 index 0000000..bca4366 --- /dev/null +++ "b/sql/update/20170113_bbs\346\265\213\350\257\225\346\225\260\346\215\256.sql" @@ -0,0 +1,39 @@ +INSERT INTO `tb_site` VALUES ('9', '论坛', 'bbs', 'bbs', '1', '2', null, '论坛', null, null, 'jflyfox\\project\\site_thumbnail\\20170113_162827_889442.png', null, null, null, null, '3', '1', '1', null, '2017-01-13 16:28:03', '1', '2017-01-13 16:28:03', '1'); + +INSERT INTO `tb_article` VALUES ('4244', '257', 'jfinal cms介绍', 'jfinal cms,采用了简洁强大的JFinal作为web框架,模板引擎用的是beetl,数据库用mysql,前端bootstrap、flat ui等框架。 支持多站点、oauth2认证、帐号注册、密码加密、评论及回复,消息提示,网站访问量统计,文章评论数和浏览量统计,回复管理,权限管理等。
后台模块包含:栏目管理,栏目公告,栏目滚动图片,文章管理,回复管理,意见反馈,我的相册,相册管理,图片管理,专辑管理、视频管理、缓存更新,友情链接,访问统计,联系人管理,模板管理,组织机构管理,用户管理,角色管理,菜单管理,数据字典管理,站点管理。
JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!为您节约更多时间,去陪恋人、家人和朋友 :)
JFinal有如下主要特点:
MVC架构,设计精巧,使用简单
遵循COC原则,零配置,无xml
独创Db + Record模式,灵活便利
ActiveRecord支持,使数据库开发极致快速
自动加载修改后的java文件,开发过程中无需重启web server
AOP支持,拦截器配置灵活,功能强大
Plugin体系结构,扩展性强
多视图支持,支持FreeMarker、JSP、Velocity
强大的Validator后端校验功能
功能齐全,拥有struts2的绝大部分功能
体积小仅339K,且无第三方依赖
Beetl目前版本是2.7,大小720K,相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,开发和维护模板有很好的体验。是新一代的模板引擎。总得来说,它的特性如下:
功能完备:同主流的java模板引擎相比,Beetl具有绝大多数功能。适用于各种应用场景,从对响应速度有很高要求的大网站到功能繁多的CMS管理系统都适合。Beetl本身还具有很多独特功能来完成模板编写和维护,这是其他模板引擎所不具有的。
非常简单:类似Javascript语法和习俗,只要半小时就能通过半学半猜完全掌握用法。拒绝其他模板引擎那种非人性化的语法和习俗。
超高的性能:Beetl 远超过主流java模板引擎性能,如5-6倍于freemarker,2倍于传统jsp技术。而且消耗较低的CPU
易于整合:Beetl能很容易的与各种web框架整合,如Spring MVC,JFinal,Struts,Nutz,Jodd,Servlet等。
支持模板单独开发和测试,即在MVC架构中,即使没有M和C部分,也能开发和测试模板。
扩展和个性化:Beetl支持自定义方法,格式化函数,虚拟属性,标签,和HTML标签. 同时Beetl也支持自定义占位符和控制语句起始符号也支持使用者完全可以打造适合自己的工具包.
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。
支持AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、NetBSD、OpenBSD、OS/2 Wrap、Solaris、SunOS、Windows等多种操作系统。
为多种编程语言提供了API。这些编程语言包括C、C++、C#、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。
支持多线程,充分利用CPU资源,支持多用户。
优化的SQL查询算法,有效地提高查询速度。
既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。
提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。
提供TCP/IP、ODBC和JDBC等多种数据库连接途径。
提供用于管理、检查、优化数据库操作的管理工具。
可以处理拥有上千万条记录的大型数据库。
中文 MySQL 文档:http://tool.oschina.net/apidocs/apidoc?api=mysql-5.1-zh
英文 MySQL 文档:http://tool.oschina.net/apidocs/apidoc?api=mysql-5.5-en
博客,仅音译,英文名为Blogger,为Web Log的混成词。它的正式名称为网络日记;又音译为部落格或部落阁等,是一种通常由个人管理、不定期张贴新的文章的网站。博客上的文章通常根据张贴时间,以倒序方式由新到旧排列。许多博客专注在特定的课题上提供评论或新闻,其他则被作为比较个人的日记。一个典型的博客结合了文字、图像、其他博客或网站的链接及其它与主题相关的媒体,能够让读者以互动的方式留下意见,是许多博客的重要要素。大部分的博客内容以文字为主,仍有一些博客专注在艺术、摄影、视频、音乐、播客等各种主题。博客是社会媒体网络的一部分。比较著名的有新浪、网易等博客。
本人博客地址:blog.jflyfox.com
资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性,它必须被消费者利用。并且“提供-使用(阅读或利用)-反馈”之间能够形成一个长期稳定的CS链,具有这些特点才可以称之为资讯。 从严格的意义上讲,新闻是一种资讯。资讯是一种信息,涵盖的不只是新闻,还可以包括其他媒介。如亲临专家讲座等等;新闻的目标受众相对宽泛,没有严格的受众划分,学语言的人可以去阅读科技新闻。学技术的也完全可以去阅读文学新闻,而资讯的受众的目标性相对比较强烈。
本站资讯网站地址:mtg.jflyfox.com
论坛(forum) ,简单理解为发帖回帖讨论的平台。是Internet上的一种电子信息服务系统。它提供一块公共电子白板,每个用户都可以在上面书写,可发布信息或提出看法。
它是一种交互性强,内容丰富而及时的Internet电子信息服务系统,用户在BBS站点上可以获得各种信息服务、发布信息、进行讨论、聊天等等。
BBS的英文全称是Bulletin Board System。翻译为中文就是“电子布告栏系统”。BBS最早是用来公布股市价格等类信息的,当时BBS连文件传输的功能都没有,而且只能在苹果机上运行。早期的BBS与一般街头和校园内的公告板性质相同,只不过是通过来传播或获得消息而已。
本站就是论坛,地址:bbs.jflyfox.com
网站(Website)是指在因特网上根据一定的规则,使用HTML(标准通用标记语言下的一个应用)等工具制作的用于展示特定内容相关网页的集合。简单地说,网站是一种沟通工具,人们可以通过网站来发布自己想要公开的资讯,或者利用网站来提供相关的网络服务。人们可以通过网页浏览器来访问网站,获取自己需要的资讯或者享受网络服务。
本站点网址示例地址:website.jflyfox.com
一、用户可通过以下方式注册成为社区的正式用户。成为论坛正式用户即获得本社区规定用户所应享有的一切权限;未经认证仅享有本社区规定的部分会员权限。社区有权对会员的权限设计进行变更。
二、如发现用户帐号中含有不雅文字或不恰当名称的,本社区保留取消其用户资格的权利,相应后果由用户自行承担。
(1)请勿以党和国家领导人或其他社会名人的真实姓名、字号、艺名、笔名注册;
(2)请勿以国家机构或其他机构的名称注册;
(3)请勿注册不文明、不健康名字,或包含歧视、侮辱、猥亵类词语的帐号;
(4)请勿注册易产生歧义、引起他人误解或其它不符合法律规定的帐号。
三、如发现用户的头像、简介/心情等个人信息中包含违法和不良信息的,本社区保留取消其用户资格的权利。
四、用户帐号的所有权归本社区,用户仅享有使用权。3个月未使用的用户帐号,本社区保留收回的权利。
五、用户有义务保证密码和帐号的安全,用户利用该密码和帐号所进行的一切活动引起的任何损失或损害,由用户自行承担全部责任,本社区不承担任何责任。如用户发现帐号遭到未授权的使用或发生其他任何安全问题,应立即修改帐号密码并妥善保管,如有必要,请通知本社区。因黑客行为或用户的保管疏忽导致帐号非法使用,本社区不承担任何责任。
珍爱生命,文明上网
', '12', '1', '2017-01-22 00:19:49', '1'); + +INSERT INTO `tb_folder` VALUES ('256', '0', '首页', 'home', null, null, '5', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:26:30', '1', '2017-01-21 23:26:30', '1'); +INSERT INTO `tb_folder` VALUES ('257', '0', 'jfinal-cms', 'jfinalcms', 'home/common_menu.html', null, '12', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:28:06', '1', '2017-01-21 23:28:06', '1'); +INSERT INTO `tb_folder` VALUES ('258', '0', 'jfinal', 'jfinal', 'home/common_menu.html', null, '14', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:28:29', '1', '2017-01-21 23:28:29', '1'); +INSERT INTO `tb_folder` VALUES ('259', '0', 'beetl', 'beetl', 'home/common_menu.html', null, '16', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:28:42', '1', '2017-01-21 23:28:42', '1'); +INSERT INTO `tb_folder` VALUES ('260', '0', 'mysql', 'mysql', 'home/common_menu.html', null, '18', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:29:25', '1', '2017-01-21 23:29:25', '1'); +INSERT INTO `tb_folder` VALUES ('261', '0', '其他', 'other', null, null, '50', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:29:46', '1', '2017-01-21 23:29:46', '1'); +INSERT INTO `tb_folder` VALUES ('262', '261', '博客站点', 'blog', 'home/common_menu.html', null, '52', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:30:18', '1', '2017-01-21 23:30:18', '1'); +INSERT INTO `tb_folder` VALUES ('263', '261', '资讯站点', 'information', 'home/common_menu.html', null, '54', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:31:17', '1', '2017-01-21 23:31:17', '1'); +INSERT INTO `tb_folder` VALUES ('264', '261', '论坛站点', 'bbs', 'home/common_menu.html', null, '56', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:31:42', '1', '2017-01-21 23:31:42', '1'); +INSERT INTO `tb_folder` VALUES ('265', '261', '网站站点', 'website', 'home/common_menu.html', null, '58', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:32:11', '1', '2017-01-21 23:32:11', '1'); +INSERT INTO `tb_folder` VALUES ('266', '261', '意见反馈', 'advice', null, null, '70', '1', '1', null, '102', '9', null, null, null, '2017-01-21 23:33:18', '1', '2017-01-21 23:33:18', '1'); +INSERT INTO `tb_folder` VALUES ('267', '261', '标签查询', 'tags', null, null, '60', '1', '2', 'front/tags/all.html', '102', '9', null, null, null, '2017-01-21 23:41:16', '1', '2017-01-21 23:41:16', '1'); + +INSERT INTO `tb_tags` VALUES ('4732', '4244', 'jfinal cms', '2017-01-21 23:36:31', '1'); +INSERT INTO `tb_tags` VALUES ('4733', '4244', 'jfinal', '2017-01-21 23:36:32', '1'); +INSERT INTO `tb_tags` VALUES ('4734', '4244', 'beetl', '2017-01-21 23:36:32', '1'); +INSERT INTO `tb_tags` VALUES ('4735', '4245', 'jfinal', '2017-01-21 23:38:50', '1'); +INSERT INTO `tb_tags` VALUES ('4736', '4246', 'beetl', '2017-01-21 23:39:36', '1'); +INSERT INTO `tb_tags` VALUES ('4739', '4247', 'mysql', '2017-01-21 23:43:22', '1'); +INSERT INTO `tb_tags` VALUES ('4740', '4247', '数据库', '2017-01-21 23:43:22', '1'); +INSERT INTO `tb_tags` VALUES ('4741', '4248', '博客', '2017-01-22 00:01:13', '1'); +INSERT INTO `tb_tags` VALUES ('4742', '4249', '资讯', '2017-01-22 00:02:47', '1'); +INSERT INTO `tb_tags` VALUES ('4743', '4250', '论坛', '2017-01-22 00:04:44', '1'); +INSERT INTO `tb_tags` VALUES ('4744', '4251', '网站', '2017-01-22 00:06:13', '1'); diff --git a/src/main/java/com/baidu/ueditor/hunter/FileManager.java b/src/main/java/com/baidu/ueditor/hunter/FileManager.java index 5a8c1a0..c1a0d70 100644 --- a/src/main/java/com/baidu/ueditor/hunter/FileManager.java +++ b/src/main/java/com/baidu/ueditor/hunter/FileManager.java @@ -82,8 +82,10 @@ private State getState ( Object[] files ) { private String getPath ( File file ) { String path = file.getAbsolutePath(); - - return path.replace( this.rootPath, "/" ); + path = PathFormat.format(path); + path = path.replace( this.rootPath, "/" ); + path = path.replace( "//", "/" ); + return path; } diff --git a/src/main/java/com/jflyfox/component/base/BaseProjectController.java b/src/main/java/com/jflyfox/component/base/BaseProjectController.java index fa3e560..3c6327d 100644 --- a/src/main/java/com/jflyfox/component/base/BaseProjectController.java +++ b/src/main/java/com/jflyfox/component/base/BaseProjectController.java @@ -242,5 +242,18 @@ public Controller removeSessionAttrCache(String key) { cache.remove(key + "_" + id); return this; } + + /** + * 是否是管理员 + * + * 2017年1月21日 下午11:55:16 + * flyfox 369191470@qq.com + * @param user + * @return + */ + @SuppressWarnings("rawtypes") + public boolean isAdmin(SessionUser user){ + return user.getInt("usertype") == 1; + } } diff --git a/src/main/java/com/jflyfox/component/config/BaseConfig.java b/src/main/java/com/jflyfox/component/config/BaseConfig.java index eecc483..cfcfbf0 100644 --- a/src/main/java/com/jflyfox/component/config/BaseConfig.java +++ b/src/main/java/com/jflyfox/component/config/BaseConfig.java @@ -72,6 +72,8 @@ public void configInterceptor(Interceptors me) { */ @Override public void afterJFinalStart() { + // super.afterJFinalStart(); + JFlyFoxCache.init(); System.out.println("##################################"); System.out.println("############系统启动完成##########"); diff --git a/src/main/java/com/jflyfox/modules/admin/article/ArticleController.java b/src/main/java/com/jflyfox/modules/admin/article/ArticleController.java index b683542..82d2c91 100644 --- a/src/main/java/com/jflyfox/modules/admin/article/ArticleController.java +++ b/src/main/java/com/jflyfox/modules/admin/article/ArticleController.java @@ -267,9 +267,11 @@ public void list_approve() { sql.whereEquals("folder_id", model.getInt("folder_id")); sql.whereEquals("status", model.getInt("status")); - // 站点设置 - sql.whereEquals("site_id", getSessionSite().getBackSiteId()); } + + // 站点设置 + int siteId = getSessionSite().getBackSiteId(); + sql.append(" and site_id = " + siteId); // 排序 String orderBy = getBaseForm().getOrderBy(); diff --git a/src/main/java/com/jflyfox/modules/admin/comment/CommentService.java b/src/main/java/com/jflyfox/modules/admin/comment/CommentService.java index bab8a4a..4702c4b 100644 --- a/src/main/java/com/jflyfox/modules/admin/comment/CommentService.java +++ b/src/main/java/com/jflyfox/modules/admin/comment/CommentService.java @@ -3,6 +3,7 @@ import java.util.List; import com.jfinal.plugin.activerecord.Db; +import com.jflyfox.component.util.JFlyFoxUtils; import com.jflyfox.jfinal.base.BaseService; import com.jflyfox.modules.admin.article.TbArticle; import com.jflyfox.modules.front.service.FrontCacheService; @@ -10,7 +11,6 @@ import com.jflyfox.util.DateUtils; import com.jflyfox.util.cache.Cache; import com.jflyfox.util.cache.CacheManager; -import com.jflyfox.util.extend.HtmlUtils; public class CommentService extends BaseService { @@ -40,8 +40,9 @@ public void clearCache() { public void saveComment(SysUser user, TbComment comment) { // 评论 // 删除标签 - String content = HtmlUtils.delHTMLTag(comment.getStr("content")); - content = HtmlUtils.changeTag(content); + // String content = HtmlUtils.delHTMLTag(comment.getStr("content")); + // content = HtmlUtils.changeTag(content); + String content = JFlyFoxUtils.delScriptTag(comment.getStr("content")); comment.put("content", content); // 评论 @@ -57,7 +58,7 @@ public void saveComment(SysUser user, TbComment comment) { } comment.put("status", status); - comment.put("fatherId", 0); + // comment.put("fatherId", 0); comment.put("create_id", user.getUserID()); comment.put("create_time", DateUtils.getNow(DateUtils.DEFAULT_REGEX_YYYY_MM_DD_HH_MIN_SS)); comment.save(); diff --git a/src/main/java/com/jflyfox/modules/admin/home/AdminHomeController.java b/src/main/java/com/jflyfox/modules/admin/home/AdminHomeController.java index eb213e6..b87f877 100644 --- a/src/main/java/com/jflyfox/modules/admin/home/AdminHomeController.java +++ b/src/main/java/com/jflyfox/modules/admin/home/AdminHomeController.java @@ -28,6 +28,7 @@ public void index() { Page$~^ z;rXPTp7+IJpWl{LV1&bWL(nb+}5}nEH z&gFz$y$-pP0t{wl7h2MnZkK(pMF?M_5LlM2HstqvmX&Cw^4cGNZki$zd~rw3sfS?O zds^yE8hZ`kfN8~ZY)2(BjUxe?_0#$%wLW+i;aVbu#3D|jK!8D+s5`j=z#H96uS^I;4v 2 zfwoB9b4LQ^ktQEC(4J}DM~${LvQ!m0y9Z>ecBBt ;*9H7%Uz_wpl`Z`3dO0hs zdv3j+2jiTQ@D` ew?&%uB7-+ir >DW{;0mZ=?s1E!QZw~TV@7snXuL*+B`$y{tqQUAprN1h-wQ| z>PJSc*UbDpcAvRxaj%vvs;vduXo?i*Bec(2ZRJlqwvHn09mDqHDz(+DN+;mVZb2EZ zBHAStPJ(DWKy7l9_4`)vhrT7gnX3DIkQ3%{88gYVrR6Jae+EtHXT;93R3)r|A6<#t zpt@#U&Bz-MXuTfnyvadV)s3vOxTYH@C!%UB;Z_HC!8NpJ%D4k_hcHs$4`?&GHjQ^A zrL{@lTvmi(5sQ!2f_&nteDKF(rgFC7<#G`>^Rj3tZqbmVSexbCT+cdBoQZoWe<^v) zt&QgiJo^?XeE1H3t<|2jKDUV4u~fmp2j_}z4dT6i_w1smc0~=VwV8TUeP*m_@cjUu z>N1X`+D{@fd}WUfxHmkgr1@BcJ5w54pc8~=@)&b(P9?76!T&mz8J2A(-O;rVmp(Rx zP0B*M=kHdUbhMmW4Ldh=+VAJBt%QLh8#kN*%=&g{!er@AlfGwFex>AsErQ4K+c&U4 zv45|k9pw**P1a1Z{8PvK?V(p#r@}AWtW?BRYfWPmcJMK5zx{a19 R zKBb5_QE2A2=V^A!b(*-oTA%<1W2-Z9aczu?+C+{)XAI!17ljogV 2)<8ox_ z_wMzcIqNMrqmuYDDQuUDOy9@VW?AmH2gYYYx`C$_wx3#}rQ+?vvIDO`lE-)sj^?JR zZ8Tjg>@hK?O~C3yAMYIqgV%xh`Q^MmaVqA0#% X{1p!WWrSoCJAE@wJZpTrT z6sEIw3&uJ;m#Kf0Vp|~0_Ut#>xnK3%XptjJ)LR~F-{(CXiJBQ6)S*tD-ZLW$^ys;| z )!+JR|qNrAeeLv8gO|uErQq7 +2xA*frW= zIFTh+5$G$JQVy_3X49|cZpHQn-^3{)y)9AwB$mBW3DJ~>Q#lGd^!muOPuDq2YNU+Z zOt$Enxtf=rCjC0$-ay)22 +vmL+Z0P21M#WGPtV5Pv!! zE(|;4pdL?`Cwwl`roQ+2!yBM`_Y4OKR#YuCqw>{S>PH3f#W6Pt`?T$%V$80=Aj(_* z)*I7F*oO63I4TI(sX(=ilX>_3+GRVa)R6t8a@dEsa3zT-`})t|ep%iJYQ&@*JTikr zQ$HdK&sm#w%w^AFv1d}?89NUgB3PNNE% tlEx9_OCCfMFmzEk4}&?Q<<%! zGbsgx1~;R(aRi)L0uYfc_y}u!JV%T3pj7CNZeH3l8rRh#B3jUs&m~dCKsS94+(qr8 ze@*FSn7WopYMJa=Blb|xNjliv5$vzZXpgHPyCNzy-0WsG4!)~Fj_)17`Kfi!X57P_ zi_%lH;=M7>wme1}55h0Ink?(c6{Gk$g#}Qp-AFT4&qwk2w=8}rL=8h2O?u5d*6Vv* z17wzr>4DG5Wx1Ynvz97GZlL=0PDv(|A`lQ*wYC-MYe-|Hv|}qP`!$Y*mhC8|(?#E> z?MJuDxF)J(gL+X!K6(!Dr2^D_JtkUC=C3kM001BWNkl ZE<;N1vG0Gga zV9NH1y;wlYNH~})7)djWXe3cf=CMuC#<1?j4BK3{Dc;2*l1aeh(*Ys(Z`YZ>Cik6< zQY86=dqrDHlhti1oR>Wd@UOkt;TSkQNOk;F(?wK2GUZK|M+{fSS~JP&I~_aJ+HyvN zo%e1>YgXa0J#2y5%YoBx%|@rdc(N?yp!qgF%YG9&2}vJs>wQvEU*~!2ZXm4t$`bC? z&qv|=TDWF?U0&UhuXF!RL#a{iL9e_FTLvC#z6#FIDSl3CgiYCYCgTBWkLnnr1T(Iv z?UAkJZhx_l=9)zl`33Ro-I8dd6I& Z6Vo)IRhWNH8^t>d(jpl+B)rjw3UJV&eB zh)nWs^CJ`Xf$C+mFu4^y57&7w4snsDN>b4@%ZtNXE_^X-K`Wae%OYS7i8*`S>Y8FF z2Tgg`8nSI7&~(Oi{UnUReWffBNOB%O@CrTzjZKi0tv*prFy@L>6Q1>wm}8Lq1Shxz z(%wql^w3^z?&Xl+(XQjPjZMVQSGmHH9)h1^-*MTs+hI~QpGY2)ML?#3w*B{*@2=Id zkSRY$f;1{fZQLf_pA4>n0v6!`OaoVu#l}1LUuA)2eal0*y<}0wmh6f|f`+qafto@{ z4NZMsITCO^H+m2MfXSUh!gOpMRtn5`q08}XsWmzSz*TqDXun )8RIQeGv 5Xhg=reE8q>zI78 z51Zg)bM)9NVA_W_d>S5Ng~Kj?@NyUfW}M;e8upaGcpxb7QfDXbouS~2Dx8OV$Zhrn z?+=9kc+4YrYr=%@k|-mZy>0hZ(VD=YCxZQiccf0c>%jT(hT}CZ?xfbS+|o&@lnxhu z&flr}L|;30(JKptFI5YtrbCUzx5hx6Z&d`u>P<#)Jd%Zv@>^`r6eh&atlbl04k+yo zJKj5knkcwO6MU{uCo~nf;g~&S9=dY1LrgfbDjhNAAGknpH`Zr_>1;g739D}3i79gP zJ%y k3 jDUG$(uiZYhE18nbrmbZ3>n679Ql znq4J7bh>pE*0#JIPw4I6EM-v~Mf(kX$H$}aj|(-)0SLoh-2>1H7(clui{~-SC-#0r zfI?h~+!^D0eKDm*bf;b` CTfH@h51b;NJY?2{WdnGXF&DV^^tMqb%1{e#! G9?i}&jwO#A?*aD4e z)m|B;8AW%Lmvai*G&nAjOY-wT_u;BP_v)N^?hGz|ALY!fySK2$4HEWDc;=>owu7_e zf3SR`vUj}J&v_`$TAuj)JbpS-)}xW&M (gHJ98U18^F2&cy#})3)hBlvfkk79c`mM8*-PxVS!RM z6K(0d&{o=ZMr(;TZ&t?mK-OEe-!@HQ0fRu!wAIE$WJB>{?^cYsYh5xGmFWT|+B>KB z>=?lUj`ZnvRuH>+t^IjAiHJmFp7z|lR15I^tyiggE#C9(LOb!Ic=>cP;Bm1`^A^sK zsTwU%K0;5|m%Sqxo}5al3QAVxwTSoj0Ha}@Pgfe>ro4qQ(#vcHezw`pOQTG;^Z#~Z z>lt02I$l@6+UHx@(c?M&7A0A#-ru>&2q)TH@6|=5)2w@vc=V-}@>{pxz6Ryn5XScf z$T;8;QJ)mFnRb&4>Z)O32VqjKEnqIYrUBGfKSjd@hzrY+ru(Vx+~_VHj}81LY;mAk zvx=3E6~bt((*|cuI&ficrIq%9y<5QR{@` -_KfMM?AJ|%Xy6p z2ZCZ1lV3=LYORKnt>->4kz{qfCx1FBwQl?fNsg*5aV|dyk&Zmc5L6z}e#?$PTTQ{C3Q!BZmkK!E$*;w);R04O{!6BJKeW z%!<_awY}e6c}@>H2=QFZMdYuM-?pWS1!wT#+Cm=TxVG@aH4wJl_x>*3Norv`;JL6= zth#B=wUC7Sv=>)``@y9A5w|>K%x%4`CgeljV| ^HV-gAOJ8b{PJYc0~3>Jj`oEZTYwTq$rZ^| ==l;0<>xx(pkumvUV%lzFnSqT>stn`3prf3CHq+R&Z^Cp2w^nC_)oce1KK228 zFJVLbWaHr*OrMhpdslJ+LtcEpVR?V!JWs|~MrBX ZC1%M?Z%G%MhaLb^r#rh-zWMPE5EGR$Ty3o! z2~m6|>aE9~%p2wY;H@nWRb)kf@Oqa%BIDv514@DD;@%+q68J+7lP$s?^M%HojVMNC zPn+4)4LulQPd?kiS6fKi9-=!tTA+I_m?7L%Upu$}1P2OuvNrb^L9OX-@3=w`U2CXq z0ye;ZsHAi(P;*B`eC1=Dp }J{JG0mQu%N{&(3}p(8 z1lPGfwbx0;oSm`Bzfs^06q;x;+T9>7O`zq?5NbuDkGm8VD==b3M*_@Y&*G85dORMD zpdQyf=S=_&)^Xf+Jgsa0tt`;vb{nA?)V6w>#QV^?IO{ecAp7``=FTd MmOFqVUzMbx0$L0GpYuv0^7hW!hquTA2$R{$m@2051%D?5fM8wi^ zuHAwZ1S{6rDJ%4~png)REzog7OudkM6IsvEYakleJ#t@d@4Z&_*t?&qUoB+*c{ZV{ zr rNh9(Yz TOFz#M|_j#_PSU=^xd6M6FwC?K45+79(7r+1}{!SBg)) zmQ{(UEvw2J%YCb?TGwE-2Oa>d{n~0Ew_FR#7cgB(Ffv+<3_AYSRwh`5b23@EWM5QA z=cS#uKs|2Qi-*O!Kipbs0VNfN0`E2(I|`sSo~uGPyS3LXHZAphBz#Ae#>%Wc451F_ z=WuM9Ov-o0U40&vH<}usXZdqiwv@}~_S7Z~#ZD0iEmfvQON@SbJSz*le8!jU{uoNq z$<@Ch&Ke2oR21%qd!Jj3Y3(<*Nyq;Dj_JH6(I_CN+Zy3=)JllkG}lSjB;32)>Kh=U zW3TK3`Gb}e1mFJtZjOQCl$Ma6kYjB0K=ZHgANWAl{>?R+gdS3;*Aq_VuefRP?1W6u z YTT# ze*Z-Y7yiIk2~aHfo&bG=0h+da)K+xsyoDLO=W1ySl%!F=J!^GiKGN0)*|Y)%UA2JN zAKX{EsB`S=GfRcj9}Uq`ba{>AJN`Y!-bUBYgbI3sX5;q6d^DC^Tkm$e@n;d9C26R9 zZW0io6`g?XOhTAgp>a=lFCprO^^AF5$-;>>NDfm>uJ<42+HT{ek?|8j(V< 8s!JO&0yK+vo0gXIut|>(39g j0 KkD;U9qJM9)nheZZ z!T;=b^|QrU3in$TyTYwK;D@uLsBLG8gjxJVDqQQi$Nt&Z _^6 zl^{SryI>D|Be&j4fO6BLg%%JF0Xh=6UiU{PJk51Wd^kV~uUBe6VWi>$jFaje;cq%T z#pO<;XR-wUr5CqO5u3@8TYhqZXD4^q;*UWGG^HUhz*Y$1d;COc*Q)H_9MQjL*N>Fs z+QoYo|5*itGVqSIS*^d5t)4AWc)#8P717ue3EOMV|Ke}QykJ=N$<_^Edpbm9Wu&EO z!J^VJmU@fmHjjv?7q zTnQBk{E=FFX0!l@c9$~NDKa^9j&^c Xi+m5;Z J)J z;lGEtCiAo~AK}EKe4%N+sw>{zmLMS?M~%uelC@`P^wvxpl8W`4n(i{CvE^RPyAl*{ z?MdYL${`e@lMcQT7ZS3aC+(eYEn)9)7DJ#^7}7u7;$f`qdaT#K;=dh#XlGO+$|J50 zpE i3eFVN}(tNvdW7 zpE_vtvFBbMS zh=K>G~p>g5`(H~APYf?1=$;uxv*rO(4*b6=k)%hVqoz- z%a9XEUt{E}do%~~K;}0qW=n7P)P6rWpsbM^FAA&57I~kdo-drV*Mw|KXR&a<@sbND z1un#4;u-JQ`3kXC{g=IEQ|X|{<}hk>OwJ4JM^zRVYNR~h(4WkLD*rF#zX#?Mdl$>z z&N~ayrwh^jn&^Hn$wVu5A9uPh4{r2YS}F0+6ogQA=C)yW41Ub+?@wjcxwO%!3%T{2 z^{n`|F; {}ip;U$b@m;9Xw>n8U37# 8NXFM{_;Z4fo0E;rIq#hE` zpfRy}RL}vko$in*hjq`iZVx%V*DgQ^&} ld4$(1d9Es zq%QP0CC9f})h40C{8xCa+n )Mpl$Pb<-qg8RA=y(ELpca&+|m{Jkxb{<$^cR zGm;lkq=I6^)+uM{X0=S+qXl>uTTc)Qu#V`VRC z-Q4Fx1U%?x%6q)W9 Owa?tf61w=505=vWlV16{=)@mx+OGTVNw&18LP3aU=qI>d)N&4Vi4)Lx-2*&~ z+%!EJ*(YFUpYpeaYYO#PuL;e_9B}p_lSR^9;LU^h4GljqxUKaJ%X9IQPe?4q3Bo%s zPU=B`M)pS#pj-+QSiD{^4 {RUs+qwtiBrbXai0wa-n zIWA>NO@BcY`?p@0ATa(MgjUd>#j>oL%ErL63IjG;9z}rO+0tB%P`a-Iu?W=C$Gqb6 zvI @h+hq!&DgJ4_r;=O<%WGiW6v!u-^-2i@pi zYVW-bz4 %DHg1lPTV&~UyA?53)~9OwJ5Pld;hdJa zZ5hU} M?@e?Z!26cD&p%9N`9qcsGp zx?&NjbuACNO%O_PWyF?T$e>*@`s(a^X=1Uu4AmoZyz_p)({jJ@xucO0Ppi-@7OCu2 z)$Ch7$}jP0Mc7}MwS$&lfiYLH-VIt^=>d*fMla3jcy=f;sq0k~vdQNLm@+vrQm!Ig zncxC;x~aW*(Zy`-y&1zgSK4q-D=VhSU$J-;SAH{?jK9>1D;-{I6x~hBer0HZy2hoy zI*372cB;j$bksISRjPV#JNa)SK;NujO5M2yE8cug5yd-;p%N&2v{&=mVVz7Ja;aoV z3Q~J-k&Z-r^E=mqz%9Kzd}OcmG}^rwcl+!o7tx2*ZChJ%TRpdS@6`@Yj2-d9erGw1 zr4P4j&Vkj|H4^>~MK;k+8$?^?7n6hFc8+6oq yDVXh?AgH4ZGb62 uM1q%N^!w@vgZbC`YU^STJrUU`HJD4}q8Gf`SYkarGZJXg|_48KN z+C3sa9BH>x|9a#k*u3&AlWG5?LW0ztHJ+u^d|%LzH>z=^z6ILAjYOMae*xS<92ehv znsWPmHIiK>CrL_d4e6`65~XTRk(|Q}TE9=as*$e>(P73#+L=>TK)P^k7;} 7KYQ5C=U$!H zJo9;_kiKT5cNLRXaXEaM_9>m?H4?PG2I~`v5SE=vdxRe5uOwehW)k`R@N#nRIR1qJ zhBK4Tl-7dpG4 Q0r7|otU|s9W(GEE0%p+d&RB9- z>5kcP%743+>Zr5_kVo2$LiDU<4*{CgdO@7CWIrwXHkNr6sIyvw)wU98q=G|Rw(GUP zKM?L2Z!(z%?RtM_6a{}i>+9(1x~(O)r_ceXr~^R-58&&RK2-XA9tXjhR8skyVAPB^ zcqpu`sLaK-R4E_A6?yX+i$Pbw;qj|y3KWxuM<%vFdk+M)CUEI`!XlCm2uc6x4Z~Z& zpmTM%?aA;$`)Kq$#axdkfa`>-<0Ib&LE*YwOdSpXQwsWoRTkA77a+_qu&rgZxX7v> z^cV%`s4c)zFKkIzsikxR{`ZKTpAilza}|VV06s Ej7Fw1xyhuMTaJJS-W0A0AAZ>b=)L!l%jTW=Kv;RonpN>k Hro6_L z$|^_F@E!@zf->qV9FcF)>ocq=&Lj4fQgDPvGtgR%MOUNB8F+i3@Sib?MiMQqExGA< zz6>RP!oqZ|pq``<4}gU16rm+0ww$S*n?T-#7ZYLViR>|_RTF+=EqybTx}*9=b_7|K zls40x&`7%=d(G~-u%gD8$roAD?-`iX1(-seUVFJew5mitFsi*Xhy8Z;s;AJNGW1q~ zF)*TZs6p90Lw!cH$DH;BM_ xBO;m}s7DiZ8 z`U|xs!N%9xcB)&oQ=V(#Zuo>ugbM2hE8)|>yHe_-z$Hgx4uW|VkVzPCu{QZ&mWRAF zyJY5yG6pP*g;=cBY5fC*fyrjt3cu)zt*mGaP;pg0=2VX+5d~aR#T&-21Veqq2Ll{b ze; z>>0SHu&xe<5yoSy)2P>8^lq%$h0&$gwg~UAI8q9Lp~nR3f|T^@n}Nv@UWHvOkGr{! zSX;#@{hM~OVKD~ek%`v^>AP6TK8{}STCTWdgBiu%D#J%W7@qI8cb4$-7FTI=zjJ+1 zUgM$I#aMP_sgy~rf|#7Zh4q{>9V%Wdc?Q5nHOc>lrOPofN)2O>nAvNUmYDd~)@ubX zn9mffkZLr|yq9lcwO};lWNXr*jBD|@5M^f4*zEr(nz~vm6~hTIRwGLtiwp3F@3n#g z=vv%iZ)j9(Yw^*;wlnA`K)p!5Pg(__3dhpYGzTbD80UKJaIz2!J9*~ufTcR|{MR&B zgs8;XSjZ||IQ|c97D3AZ^%NkZYyFKwH40;#BpwHWtQ|NvO5-Jv%o~v_ck76r&hiax z2@<8p@wQzPCwOB6!>5!~(HK$O&ssH^)s1ayBdRCBd(z_zm+GD=gB7i9Uym5l`D9%{ zM2&Qu>e=umh3_4Uvn>M))CGtnLSR5qkf_76AVuRq4LJ6^FYH_q65s2%fe3rfl5Py& zwA){}b=j-qePT$J)@GCDqlGX(N(hjuV}g{$)h5-DeHSJiChmy1^9dq}O7~u!Tx)Ba zBeRsY4^J^^I;eg-H~({pvR^Z z)?!iWT7fW?M3+GKS%hbS^In*JIV>Q_QGaqEU>WDEC(kGz(!f>M@=1fePy0QuO#og% zp}%B!L*+#O5jfCp-H?-NTsJc~nE(JF07*naRNo#`#!+q$wKf??j1LG&v|Fz!8S^6e z3E8+zFN;`san3nIw|cc#=}zLQDYPr`{00XBg+^0=EqgqBI$D?f*ks2V4yz65Fvfa; zXT(!WnGTK~J4(dKxt{A!6{1d01y@TT$oLtBTRYY$ND(f=r3_g}@T?e(LO6yNz{^uY zAF7Z;+c_Et#uF}8d?*q}C_69IPMd$*`$-2X2_^mG6hL(4o(V%G&MAe%zez>1F+&|Z zn6=IK;?~KI;3$I^zdRN|gxobsLi#n4o^uN(o?J*6jGw>RHz&u3#l7|hvDX%bIo+j^ zS4q(E^T`SASb1^4%Hqm+M|wuw&J%4~MluCW@?c<_@*1J|DedkFSP=@u #g# zZp#M?&l{fy%ea`QiU~|*WhN*ME` z@T8eVYDYE-+`gxDAMbskF{m8`dj&U+bUdKHb}W0)xzKB$*}}6YTz&mg)88qkG |ACe6)vCM>BiKLJQ23P6^DM>B_WB4` zN8N|7+i z$wIbxHh%6F6` BN|8?UJn#B+V@9>daXWXvkH} z0(4@U?I*gJeu#pFHW^{dKbRX>cvAwcE#_jI^k_Qlnd2=SMKDas6fB=(VeB(pnE7Zf z)v`?zLmZVJ amQ|vnDkUYhSuFL-{|pYZ!X({f5X z4f9Q)6#X|SEqu=wd(ALnhVqZLFsO?y)+x+8Q){CXN(^Tafm*Uib9MpB3_Bz+Wr742 zfy;?hg1ZGu$OxvBG~Q$0QP7zp5C;)TrI-dcb8Mp$(kiHATgrpulT_iUyf{GWzP!9B zd^0Ou?DkfLBo}w?EDp3(;;Ioeys<^SS{7qX>I#mQezCw6UiPM|kj*?N;r*#ohNe$i zYpB2|+t(0W9@cB|7q5*iz}|K6;IU;n=FNS+bw+@iM k`7{gk{QY6ujYWT4!n+v5Yr}GwQ&msGQFu)v#E(>nCUsrf8g)NE{2#WBO9V^E z`lhkgU0HH`-4mc7h=z 3Ca%F*rYue n-ZDrKi%gJ@qiL*VgAiYwlR}i-_BEGQhI@qn_ ?u0B-O&sL#i;aCKg3Qpci(!doh(#isY!mtXxa*Q7Yv3sL@k%<>$;@Bwg61T|3 zPlmq{%&2dt HJ2z-wO(!>Rrh?8scydQ`nLUUZNr;%~w7Qh5eJ?(BIEu)&E1Rf{V z*`vVQb>Rkl_Ef-E6tmVs&na}|$!FPlPQ_G1CUEw8F_9%%%odO%D-eg4dxLRnO18H} zOoaUFY#O5wNCLr=xY0ahli0n7 f_1`oLa*Hp=s0iS+6 O9POBY%SiBMXFH-%?+ rG3c|pZ)!#*#!b8Ci&hRWx6;}J^3}mG6a0BqB4w2+*c0;jI6C*PE1Np zy%hSfD?y03dpSW5bcG0OgYcPs-BPko=|kM@=3S)J9b=C2WRK_Zzl+xbyf}y@TBzBk zk+6K+Omtb~-S!lLXcKEAs=ShUgD_rC0F8>uCAwCHs3g#yT0r9{lMHm3gn2JX4`R+) zPaKlxXJ&M>pjKxXZX)HUT%%|T*b<3@)-gqm$a8;pyu6_n2**jZ5F0vG+SYcWLleoL zDMPb2ka0z5Jt2DymH{va_Y8SF#571=;QQHmwPqEVW7JMrU@WY_Fe6wSzGSiV7~YKj z%ik=5NEe{c*P_Bm5-!AwfRggEGLH2xKd+y6ZgZaAty;Psy1rawZkcJ6IesY=u|D}i zB1j8!yr>YHbaASsW%$;Gl_y(_oVY=8{#A@F5aC)!<1S2p40CxY)(YDMCBfZLNf{;X zaQ#ITH?w4;0L@}S+M86A-jWFvFewpK6Si$A$VumIQS091uP#uxWFg4ZI>Y5Gq7MR& z=Ny@%E8XDa9k${Y-y@pz< #y+|x^nl8HcRTQoA+ZfZ@#)TD$3zm**{E{S91f|49B?FhaiSi`~ zk14@Ls|w^wqqoP69*=^zndvmmm~re0hoD=ZE401{`A$sRvcC9aC|38gox;WVS=(o2 zp^SyZvR>3 6x@2Rd{m5X{q&SR0KYWD2~+iz p6O_`Ep>J-<{tzHuC;__#(Iz68`W{*T&S9WK%|z! z-}O=C`tvhfx87u{+2C@Va58~uC82*6vSmT6+I3PlYDw&n1$bNU-_~n)`D0he!bCI` zX0pu8G<=#wGh3K3&S)JF=rMeWkLfdlf|4?F69q+?bc+X)NQ?%P%sadZ#y~({S?N?Q z!AY6OBUN2&IyP3=G8sro^pX1WAnUj$yp)b8t=0-_F9d|U?~Anr8$I$4eIy7j!-uan zX~Wws?#%MM?F>_f2}Y7411J5?bRuhEN+L*j%L!Y6BHU)S0M&(NXb{1)DC3Q536^mA z|9*!Mo^;M88&3)hlv(bh2+kLJxxdi;_FyJ_xlVd=5hOr1rWo<>u}re@Uif@nsGW%= zEFa(i{3TItjH%d;I&lX_j~3>u4IANxLDS<0rZDReXv_`6L*z8%%68?g5$*l(e1U2k zjD{nS=n2IX+}k`T nP+JrX~v=2@fruKKXe?Yu&J35hoMJf4{ z;}mdcx_{YD!0y_`+>w?InTwWn70tT{&4-*3I<56fYJbxAG{S{Br*|ymmRW>akyt4O ztrYw(#|tU|^$L3=3`t5?U?M6kF qY!Majq71-}475JmMH^i4Dbmk~ z>i~}Md18*oCF }|Mp8V0p!MPpljoYWLd;*C@L0=rw<$MDO3l-_^<$|u QaZI+l3zwx5{-BzZjhnusc5e2EZP7?Pr zG507;o875pt{1qKBy%<^BYG5%@kQpHSs4xhD1cky#-u`aCXf(ej2Q_tK88GrfMA_c zRdX Y-VZMe><>SLMhO8 pU_nQV-~2?LPGIbo9yAC`f_82C&W&g_d-UWU_2kZeIjbJcPdpQF~ePTI>GEZ0!}i zU#?~DCXRjbp$GGo>+!ohXL-AdfDi9dSwjM|t#`Hj%!)Ck1$# x1IkZ(J7bCLuk#*KNR{PkwS(_GPF z&x{`OP| +PF-nv{p*DJiv!uG?B0-tfB zn)Bb!DnlXssnU7$Osei} 85!KZ2xI&ryM9Al$*(88;F-?#JY4{TB1~vF;1MdE%8ttD6xC6#AmZ) sNe`m&Lv z8iKq5MREXipm>nLG7>@IlxM^Mgll-k? )9O~z4tl$bgv<**W`N(g0f`%aU_B_|cS8slZR!NN*-8Q*Oc;J24& z7NP~-BIKV|80O2<%G5*%7S}Q|a+%%h*gSV3smf`Y3pSUG&!R-&;0kif9GTtaky%fZ zO6uBXD;9^|*BTHAD^8?;Mp_|qUJ|`GLr < zeQHUdOiyMb M+WiD>yei zsp5NOzt^2Ky+bC3ZPIL79X`z(;#M9yz9L9JQW2=kXtTy3_KsgNP0B@)kxJCC3h^yF z!YUu37-$944U0<`6i<0JoxVDW#@cQLXxdIh)ni<9n2Ll+4ZySDM5ePO;@I#tWN755 z)@af#B9kgIGbbP6@1X)z+=0tOJPOwpk56;Cc3-vq4=Yg>OI79_i}S(rwhGUsxNs%e zs93fS9_z{&OEzzD)-S4%@wjGjm#}tyftpS3l1}a_RL@6@g;^~@fo`l?%54LWX*aPYk2alA^bkg$r-S% zJzWv; $)ruo5+gZXk{9KT;g02bjnY5bGD8zf3g5rE4> z601r`XDNS0d6V5F;#Ihyi&UL|%+}u`_$gK^l6s2b$GmTy_siNR3s63|LC#i|Z6_gk zk;w!gaE@>QWmu7wJmW9L>MV&Yz7H1oQ#!L(ttF#J4pFJ_cX{S>U*&Lg$pLX&vR8qj z-)({71;Hj+%g#s;j!DXU(k4ECRH{TLz@0*@{S5@@V)BCsJY4kStpo+_+L~!X8?GI+ zaCuvz_>eiq&|$(lXoQ0qXn}KF+!d-f(6=ri`!vlatF|C~Pqce&LbXin4Hcm&+Ut^L zZEhw>YggNX$F4+}r+WWnXHHCO7)+Qk1r_qSLBgi)-rQ%>vqY5*V4TJ%9n8qE9R5!u ztUA+{bUb7ei#o(YP~5CGS4k2;0xMq8s^cVBo+>a`CN!^1=*pt4B!rZOCP_rR9pNrV ztrbh-vU0b)tlIwlo0V}sugvn!f)uZ8V#TM#!s(0k>33ANu&}#tk=JvHRX91#6Rux8 zKE^TC*>pY9OhJYl{2L5DgI#&HASYwS^_NurVY++OUN9)j12aJ1?bh7H3i#Nr%t1 z? M;dF*W;mnygKR!@8I4 zC)c7RO>)3HB1W@rOYzL!8{=I(N+n{jicZexE*bps#39nxyWQBjWEbq5IF@U9K*)er zp?*n4c+c_z>@1cb(}sG5L`jtK;oSG6_*}4ckLPZ3ybvrbX`y^svSc$aDnOIs9IyJz zx}Am-=Tb7-j&le1cWc4*_*kpFMJD5LwnY^s2o=}p>^^J`u){Qs=+I01S~!Fv3`Pn{ z=^GS=D+u}8W0Gy{bIHn=K^I9C1a4>{vN&e17i+}g!Hk<63>2FuQvr1y)uEV+H$^Tm zEZa6PjY`0~_99H_Vt|Rjl8Kj%6<4xND=F!-ns`zieY&-xxO4-C@RBaNsO7${RPL*=z>chmZWd-+ zhsgP!jyc@1euVDDMJw`Tt9d)4^=x7a-^^Q+oUyaa#Ix`i!DYGlVFj{$C%Rr{eJfG{ z;vvHOdgZ$J+iewwccwE==9xr!Di-MDaZ?v<6dswk#;}FDUV9Xwv MA+QtIhH<^Ltgxy`{KwSNbT|=M@%q2`@=0bRjs~V@@WN5SbgtWZ444>t^xS zs%7oFC<-%Y>uQ-KBYjeVi+M@t1qMZ!r8c*r%cC&wHfJNQL7RKAz0vohGEyF0xlhVd z_SaME3f|ny&hcF2$A49LMt3$f(M!`7x60;dz;=1bKKYOd8CciVsGgj50xr0)&+JL1 zI`o&UiH4HvhNUT5zQ^AzgVNf|1WTwQu>4K|Uc?FsgTZ1S5s+WkiQG(*3)l*mVW!&D zpG{F=+s;LgUncDc%1hR9*gfii7(hy@fQ;brEKFsVTZB}w*qk#XT!l|L^Ro!gmC2>Y z3vW?jOSC96NnC3s>8rTk(prx-`jUlP4(`s+>-BF|OX9m#xUSDmcV`Z4O t=n{ z{@1$2|2JI;drq-uj;$L|QF8n_MfGr83(1jy^d;7}BzoSGy*Q`|PBYVM1{Oct7l*fP z8=d4h&g{%8>j_*Wmg8jBcx@%~b`{R1m;K%4^DZY=n~+<>nVLtP&FDzbc0 z3qdpU*+SD;r+Ni&I?#O)Z^N}HrB^-4h-0BL_pnZiN8~bVJ8OS0npDK`$I`>)A{O#m z_qK%0Vt7mvx$;0zU>wKdmJN!Ji8=Dqig=yZ$~Qa>3%j(z2b4y@gDQ#UAq~=bab`}w z|2Nj{6*rcuYcgj1%mi;%%Sqe#{-*gIkKb7r?vVBq?qyH#0w2xJ7a@HFM{SqohrWR* zS5wy+S9O!9!D;O&Y6Sac8;eP9ylGwCKl~m(g84!&eiAs5eU|tdYnGRVGvdmkyQ~`E z_4 #`0fbq8$HR zt>IOmPfuU0RQ- ixF! zbB**|70ysn%|oM*m$g3mCh`L2Jb4zTS)NJZLq8@g*7;}n7H&&mNc^^xxF=LY^}OX| zx!*WR4M+3M`U s`d@lv)T*S0uhkmUgUf{p9D3w`|fk(QU++Sa_*Ef#UI z?AU8bR=Qkxz1@q|Tbuy}=*jWyN|W$`C}PdkpUGXcfmcWQX#&FtA<>4^Hd=kS2Fog? zdJRxb n zp6_*S;d9(alw7dCOc0^WpJOBvLx~J50-SUV3m KJ@-kOJS=($%3$XbLOqyE)I(At zk@Esm&I- H3)plt;zdSVd|$oh43KSx3%Nz?P8gPgoA?@&Eir} zO)w ZVgc6c83Q4v*VxCj|Gy^toc-Go_l2va6l>uhMa{vYZS;i+$s_$8Vu%Y}!om zd;Ed6oB(P<&-M50f<56m{=M+_4Zc=fo|$dDl@SyH`r!1QcdL~@JwC1ibN#!0PnV^{ zIiJ^Q`EC`i-_m@S!?Q0-u~vmSKJL%Vkml8jyxkHTrp2Oscl{|dp2Co>^J*Pju6*xO zgyJO0LKagimO;+Kye8dBpXK;9iGR;bM~{+l!g~uBb`ie6e!*@#VMuqjN(!^R7Xdnp zKrV>`x7E_lYSq9;$y=zB3Q!dc#+r6yTNHxh*k#}TJS#L~OBVM}ID6JqJUjU@3ecVv zv7voZ8dCaj51D4)<|T|zXeu5eo*U+6ZgXWQiwe`nLudr2+PbSNTl^3Z@&3?q)~yPp zm(_~Az1*0FN(Fvt_ ybW!6A-0Kdq+il^NnSJ<;{?e$^(Q* (3P`}ZqLzby3f@~oPZ zZm8Z&`c@-~*CRtQmnTj*3jeveknDTb%+>D1+dqmVym>%z5Q!Wv8Dw=0T4P*-LFV=@ zQs0e`#vAZ)9;_$SX!;Cm@DJVRd1L0n!mxyu*85N8Fz=EW^mwLp|Bj|rtDop) $~D&C1%29?(YvdgrRUc!JtGZFKjyAY@xGjsJP!Aa!OLUeOYPky7nnUmUl@O z0V~ 0PC2VU1#8R9IdJZ<9F^ppNHprPqqdQ3<{g7gpv5^aC7f3$$q? zS_XmXz-ojgz+|jP@ew>W3*tvOTbBsihM-6bPY~L*-h(oW|71H&SfkkmDC;%6-?Q{l z-qV>x0H>RrrL2NIbBuLnH|@(q-K+B?dpx E7~uQAIZMM%Baubg=_F zijB%U03N!Xj@{Q%Pn3h=rq#Cx6> d_^fJ5VYA!poj3JY!M1Vq~WDKuSpwccYb#)Jn`I~H%7=%a%z ip7V}PIN@v^q_GIRFjyZN1L*IhNsm#@F3ufF(#-Ez0*wY`=2uFHEqg6#X3 z@9Cbtr|FvM-Mja!MHV(6i6M;EkWo!r@J%=>@D~iw99m5N90L5K0{4QUr0Fv@*}J~i z@P?dR0n?wOcEUW^=}?joRIL1Y5zAAOFK)ai^E#C{(JG8e2JLMXmiN{2r010gZmYoh zurh| M1^ou`Q1>w_7-+d!i>>vO1N A&9m-71|@pPRBu(7PuVl3v&6usJ#{M-Tt;vz>FOV;I=ooQ<^ z2Ah41SuII!!G!8!u|TxX_{R|wCOoljlDYqih3T8-Z~$ypf#~nvyy#&F7r0(IMw$p` z-?AK=q;6L04?_7?tkROWmgR8wk|e}}P7{kT6&yc(sNi|X;r0UaJDS5$nqmxyfEL$S z2^l;Q+|h;q(Bz?m^1Wp60$+E|3>GD?fHHBsbWv~2OEC{P-pW{5f|r6BsGkm&64k31 z{GOCC=i0h-drB=meWpu^LmGxBOj~5y@c4Hm>%F*VFCW0JMP7KYOwJ0>YDh3LGS&UX z`#F9_*%XlM$d-R1v#;dL7B@JxfMfAfm=7)CEL=!s)izVuR}_x!^CE(?1PUIv6)~%o znLmC(U(G+KFH`yckzT(4=XC+BjPK*utKeJ(>uRBV@%|Sp9si8Jy*;ls&z&ysS3;dL zz2tA`{#-1cpAu1U4+O;mS!}#1dwB#aEodCeqI*#nPIMWSm{4?vMW&PW_KPz*SjhcW zb366jI<{w)hw{+)ryTg6IObV0R$pY(`TF;MWdQFOfhF-`6`+sr`6QybB>LRHq2=YD z>8p3&(VzU$d-~ T5=XLR*vgqg zg}L3=K5x8b!Ls%A9ADlmS~PtQwNAw@W=o(P+>rDQG(2}R;v=T|Q758Ql{V?1TW7~6 zcule7H=FyZ@^awKF|~&_&=a0q_TfnZ1AZ}PKRT_~eci=s2`5EyTMtoY_!G~kM7CEF zK}NN3`Hb92=a7?J )A!%}!^))pj{fwIpXvRdKGQ$` z0iT<{H C$7r3No?LvJN)bf6sm($h 0ebAAyv>>5 z0yhgvc~9#KRnbQ=+RXEl0{!(2z1m#UuOi63LW~;{MYXS&Foe%uUdiSfr1ZfWIE;ZR z+;F2SqENY_PHSV+OH3jPeZ}$e^9vX{k D`sy3{n}7Q){q2AH9sTWp_&@0D z-~Ebi_dlid^h^5ocNe-}e?!xkH+uiY&p1oBoM^*m>>!>P7O7>f6@q^(nldj^5!-N} z0pGK{w=f3hQ=rd8k#K5+`**z`jx@@R8@Xa4l)~1UIFYUvW@LCRwMK`;qp6yyu%*Sw zAI&GxX7xqDvTa4qik%is*jnW8sbnY?_uXBDW!VE-zTX}nIUaf`+gh&EYNdXpuYdhp z`Y@HP0%eQQsvx~AbY0u~#g~b`{P}zOFaPaN=~sXKzT{}o^Q!Fp^3UJV@4kDczx{`A z>DRycN4o#R*Yw+OGhM&>ujw(Bqx~){ zGM@W zqM(5`lirHSYaXM75I5S;SfTj9&()_i5FF~3T@jr+_f3WI`g6NGp`4Z zT~Bk(Y ^DJB7 zcxzK}+djhjE8{PFok jS=#T#N&*^35cfb4ifxdew2?4(#K2tRY zau*`Y3tr>}#(b78?@Ro^7Dr(W{3eL`i7l0^Z}@-)KQ+W?tTSOx8*XTZq0WX(l4>?O zxyIKpDcQB2De50dg7xB#Ku}s1T2w|dh>*L2+fg(n5K6*4rA4h2XtpHQSYZfR7)a9i zr~Jw9OQ~P>&3*iCt@Dvxx3pTGx96{^oJahVFEahfFTSKd`N=QoyWc$M-TWn8r!QA4 zG_BU>jd46(UseH1^vAzg1?d;x(986)GS)=z-aXOnx8JXd(og8${ktdn>SsTvzyA%< z-~IMCD ^Udi=bE!@k;*S0l-M7N=aSL+#M`81KG1&V%+3W0TDA6lG52lGwq&2riizp0##QTt zH()hc@Sws^wkNfafMz4}1%nKlp_wY4O=~MRxj=U7a|%s@rlc7N@|+)pTnK^7nHMX3 z#RXfw7e2su)ly7Y2Wpw#?|SC4WL)wKvx^mYmp22+QIoP>Cyl2TrRU|A>7}@03te!( z6I+6Olwb+$m)JimrVo47C?C)Y(EvpKF=JTsTFjf-D>!24DCb$xRQGhJ4t^1=Jm z<$V_d`y)&8S%K%>(|hh$mT_yPVS; 5s%}MZ1X)&r1?4C3IPCk^qaZUpBt0Sz1@y^(Pyj-ApkrB&ZZE=UY2CIk`jR$o zXSc)RLlRNIwW<|*DO+no8@3lxVFBS=FVYW;nd~C;Qe0h^cM@2?v4*p1SC^7P{(*^+ z-@#W*jYYKj@-~jLouFj96(L&OZ_8@IJgrtnNgyeE2wz_Q6aC~T|3H8KtMBMfe)&84 zhrj#x^yTzn6{f$WUw-i={l%ZX(BJ<3uj$M86aAb2;^&m#e?|ZE|N1rkPyfqr)_(u1 zRe1jqT{si;dmh}Bk&Z5LuS=oq`!|%H|A~Hf`A9$csvH(@qi?>yuY~_oqIbVqE#fZ- zhpk_qo){VBh_UG^lei%9mQT~UY1*=+vX^&bCLGAj8$c58d1D5d IuDJ+8uNuz10LIubMcM|CSzAAxZO zCgW0VYt1w;f=yVG95aZ?#w!3MV_sk$Q(#EQ^j>uPk*T#w)>aM&+VdXEi<} yHb2PB?C!nF{E6rQdR^Bq_;u7;z6v zd>pP`Vpt@;IrA2$a^lr}k$tBReh2OgCzqAAB!@4^%MhkjI2Kwe`&!E@+aBy97Dc2S z`f|O#TNO(=F>RV;$H1b(B~5CnOsa50I84H*<$MXvR3@s JiAwS4?@%=2@sU zJegm-pBQXk+JTT0!jcyexcA0@G`q^(^G3U>WlGq lK5h-?=3 zJ7hGTv$oMpau+xS#lQq56vd41OMsz#YMuk|tVWpuo)&+W>h)$qUpWD;PpVMjEj^dZ zDxAJ}_XU0b@ yUdzW?^?m8i-Ka-TS^kjl1{q7^?r$hoNZvO#&hR#H3X z2fcj%|MB)-O_F5Unb_wlv`n2@S-QHqTFvzIU !UYX$ PBY;sYrl(cus?-@7TDjyA_j-6{RS&>5aI+_;GBYAPJlyX+-}#RC z&H`mx#Nq6ePWuEKdl4SI)5V+jeC)S2Pz_2L_73HF*Y~>k#y8dp0KcF`{Q{Nd8<>wu z_|>m7TnxzQ1#Q$_)?1xOwOioT;g`x-OqaBwbeMBGJwgyY$Gi9Ic<1dMOy?pO1 zepV-JuR_uyJQ;+uVtzyV!{)OP qtT DCB02L0m38v_vY&I6; ~3#hM%S8^f0o2jNAm$jlXKi$-y{$vz@zgh z(Yo+URr1zTRA?P+(9hH18Ah`Uw7c85yLlhM`|J48Kfb_|=P%LSXyUEA4^XPs@!>DO z#ALFh_p8zsYH&G-UVFzE ~j zHeo$pr%czSOxIRr0;OTz(fi^UNkMgrRyM{?E-5O}I)&}6f3x7~YUnUOtDFv+zt~5v zzSbhBWw6M@h3?8;>HobZ@nXY+_Di3-^1Act%gkFb899_m(d1tF%5b^4@iC5|`Og)# zE=MC9M&?h%F7jh~0)%k1{x!1# `jSIxSW%vec`d%k?x<69+#Fo5x9rgz-Ue&P7ZLTrV^I|u*NWZzUE*>+ySddiAY(- z+Lj_thP4Z39A0W@vkU9Y7-zs9+ja9WqLW9l^b)U@oCQR~M&X)bNz1V8KdZ`8xR=+a z;z 3tsJ+TIl3`R+R2`*sJV z@(HqW6{Xr5I(`MMWuI_&N?`gD>opFCtRW%r3kf)#c^&EE4r;Y7M*WAV1S4Xp#3Yj` z?WQu4*#usN-ZwlW@O*^5b{`L}b+B6-qO$E_cdL!R|K$`v{N+E=zPXQP^SUgc`QT8h za+{5kgds16BQ)r B0}PMdxrq1IXr7%!$6UmPKg4)FFH>%= W@5gl_RpxS7%<1)qh^Uu)T zOwlgg!cOO${F5>6y}5yJ{oW=rx}Wdd|1O?AJHhkkJ)9m-FrN}Y`Yn`$hU8r7<0D!w zg*jKNblggb3|*%Er_%UoQw^rvEz=?tY3Joj&yJr@8;8fmGs6{MkDfa^LL_PF|OgS_31ed4(a`y<0eTW}fd9)>FRGUjv@ +F_|mt zD%-ToUih$#LDQlziKNK;fq>Le0D`JpF}TLIB}HLJ&d0MkZ)n(-BQuU;%F>cds=e8P z;=Xgu@0#!>tYT4Oq(xnRQ|Tj?!ZeYW)Fvoq%tq=%K#ikW{2DJ??eSb^Ia{>@S|cs$ zOO|#P76QM5S*|tgYBdZ~vax7>4zqW@UlP(@MPlq4Do7(2LciwyO_5oVxH@)yW_EF` zK*$d3DYko9wz}e=1r};^>BW_BiGjjgpDQazJz=xTOy<(EPN(p^tKABQnO}a()r!qu zmcPeqzRWr0*TecAmyuIHce?t!UeZ;5)lb8x*j`)5c -C8TzL~>|9?* zb!(68PzU3)1Dqe7Vg2qVEyyb3#SrOe1WXe--lG2{${66*-a0u$0iHeX5zw}9XKS0h z!5*f)&xkP%@w?yK!Q0;rP&)q%^RSP-om=>~e|i_4^$36SAAgG3;3WqA47GX}wN?|e z@f^$1lniT47PRlw 2_ck?$$HEiWBnb?o8HXp>AZBL{=SuHCgJv9xpYXt@`%DQqfD12P~L z`VMsdCKql+A!_8^H;5UAvn6VDt_@ K6meolMjc`q=!7)n7#jliy4U7)+u zK)cB%XN389M8MUj qJMaXt<8NjKIq`)?KXb?lP~ZOKl+^P zRtL4}x`1fOkJTw5P-pL7+LFYn2}I);M%l (emE*96ZB-wc7CiAR5A|HCxc|CMTiCppiz-&eD-XBY2{Ny|w!lhX zQ;?!ZF^Vpk{muSZ^bTy^zF7IGzZarf=F8Jz0?^8L(~z< emI2(ej$5jIvFy;fW{#>S6}t}X z9BtTqqtR@Zltd0-D@P>H=Nav133uj2I|Vk%=aT62$UxBh7` 6$3Stn=pX!#e)jKi@80i|$G%NBs6{NZMV?X(quzxW zF^`+>vpFis9A(baO%lu}DZ=?k0+n^A1&566a`70gwXg8aw`zF*n{BjO6C6K%jAx&H ziOFDy&b2pCC!h{TDaL~-F$`Md_3Ky?8+3_X+}y3>w;qt;J~<+`5MpC3z NfRo?$p5;Blw$%VTUcs(5f`N<@2qhX4Q| z07*naRGXzvU_k68IU`8xq1LYA+U;E&pDpn4;WN6-J1EyTXd}4deR95x+j2Mu0CPZ$ zzsz|w6`7BvwL;6Nyj4pJvYdf9mKE3#g)B}T^(8qHQ}m>hYG~6EFhuE$UQ?mHUltb1 z!qyB@JQ9k-i(K53a!%9N-Zg3NV9!{LjL~$ZP0W3rtpIc%Ldgr)0s_3{4AEkSz*}Nt zofzHZ0 ?xUWe%?#q0=NMhpy-F`~vgA0KIeo z1YCj5?75H4H6IHC|2Q1Vv=}iYrpQQ&rlbHQHk(YDO1|k*+Yib{CNn$JQ8vw9J12up zTZJeg6)b?{wasSGngKJ?*I5Y&*sZC+=3HWatI{!N1x_n0eEpZ%` lvhLw7O zm7s?z3^@`J;`K6{&!xzS^P~x*E2jrI`Xt3sW}WdhGR!tfG_=YfE7jqdh9z~NxD973 zxJ&-bIMv9ktfHCe>zD|wyv_hxA;fQOj#d%JA{e68z^>^KS~)(pCL?vMtD|G$@=z`_ z+0>?%awNTcUvrfoTLfv>hFve#VX>_zMF4bQyEO0$n_PXK)noQIb8TJ$VyE!?*ZmEz zc@19koL9fDRu{jz2eOq5ogZ2s_ucpaUw!)LDA)GUYTiY+^EMgGYv2)MoIhF;i%YU2 zy2*W%y@Z$?al_sb8N~><_xDgDFYN3oF`V`pZoLg+pAGEnaxq8 h!QbC zI5T1`Cs<5-^gaYu 5btZlaOJKws2>*2aAsd{CKy=y1vYy#J>2e|%^V`4Zj zaP!tpVx#Mr9*%JO`C~l%afoj|SiooP)P4_KJH!m t|8TF-{ia%0IC(-s!x z!?P4LZ5x4E6C%J(43WdQDS=bF(jxN7tt4gUy2QRp!Zat7A?;a~uJh&G5}u_P@c}Ag zAObIvoMw|)aW&~986TtJ4&X*JVVPChtz}|z<6fUwVjugP_i=sq8iu_QUOYah`$2#j zMI!I#umC$b8;r*N$$(gBn>KS5r$;>j(2b3C0@Vzo@j3ea8S0(6RJ=~fnTjKx$yhl2_l zR(Vhb=p9d|zHl)|p?@~#gJwdD04vM?$pH6A3s#uv&~-|^SSvs?*g6{BtOYR0_k?2% zP$8USa~_V(r{q&gpz|v)?bFMS)T?_q%O5L3n=Q1kCH22a J0{hq3O`UKBV)XkIT^!d5J%!aiP0+M-(-wfCW8}n(6uT2NbMvatzl4o4@V^j zU2X5-AXE@8^FkvoB$BWxcPW!&9lJa`*J?)4u|f?;%k}VLad15@c=AjK0ACmW_Vhh; z%90JU8-{7u^Cgh66|!lbC$@nHDYA=o=%9Q)PrE1hdZ{02(KcHJ927z=cIC|0xwJm5 zk-GeIW}|AEg7j)%XqB}%6n4Ml&B5m99GJ}?^Cst2g>i-zSUIrH }PTc^nYLHV3E#vvNj z7 L5%y~xq+R#cZt4C31~k@7Jf`js*JU*7XH=mb3SWC z$9h7BHX!4Df=8bo jo2S-rWiHRH z;apBY$F4YY1kov+#Y;5&KK6FYn2wdjHLF!R{urNs@d-)+z4x+Btdp+W-~#b{gxj~T z 9~WfI!Jp6`IX&o%dmUCk+3rK7YUB+kY?^*qBfP1}s! DoYOM#86juDW1^|^PiyKuE>VY59>zBcj_|J*qJX5;a?Uc%z fAMA)A5>XLSM8*t!~ZNizj0Q$sEvg(Vg>Pp1wIhhw=GLPnQ)kse!E8NJTa zq9eIRQazrMLqu+lqYRS4Km`&qDYVhto`ypC8gYwKWF+ %+XUV-pI@b z<@XA8)LIZ|xL6sBIvd>Hqm{mykqpsFPEp{^itKN-WK_V(IERjLWl~jDVqj%OFz&+< z&~~(9J;@5d>6)V&CcBDGsE6blhu^NbT#MLNtL70F-9K`#&E9ieqfKj^EbEY7T5jeu z<)6w{-@1jIW@g>R;u`(`A3Wuq3XW)zby|_06|g!hhw{pv^VjPgTwmY7c(EWhw7}@> zbG+!i!0nrRSl=Dv?u`g*8zC{qCib>l*xB2mqckz=eMao!W7KKEz5mS$mdOZ}W{BlU zpMdQIgOeEhHy_~6cedaV+XRm-8% 99*-3c;Vvw@pDuw1Xp#Q-obf=3j(;OKqV28 zbC#G(M?)+w&f%8{aD8HnlMx2bdKf&J;m%uKeE)y?CbE)?!B;&EH w(<^=yMZkxuwfF}0O`tu(}0m2XA#ndWUwTr8O|nXaDUo-jJ1|StkJ=EFi{=b zB$Hvli6mk&X~A)0T54Q581?8pPw92f$RQcwx85eFV9mp1M68g&I9@K%Pv&(0I@nz6 z5Llhz>7xPqr&G+yxk;im%%^>f&u8#9H?Xm`M$Dc(=%9&%vkUl+<`KD-WI?Qv)m$31 zR=5Z5=-?FR7k$~xGM_ut4a}9z^=1j%I~{U-T&XColslM>W;lM@BPVSnxwO6AeKd*f zPG>$QbPt9j*5)N(b7tf$@WPgXqEfiQV92u?1)%ad28mV>!iN47%mg$X-H@>fw>g$o ziA %XiqGR*4qmB;zVe98+vMRW+YYi~4uv)m^W40M2=+Ly8U*Lk{};;j@y|0M zuM6Q8f6pufb5_T_eALzJFHP%ktl2A^yZld+7`C`YZik>)B95!*F!SGHlZW!O=a%!; z0()$TJTv3fgjq#^#Z3&$OSFR5R68089+?XoEkjuYD!J#vOgw|FMv#tSx#^kaGude( zBNzxkWrk_G5}n|Pi*0@3ssz^2O`=2wa`S_gdQG|yAizm~mq-R#1&7bU8dPYml_wDS zUVdH@UM>YlD;0?($@_{(b7q`^LcMmTDFJDRa7;45uzRWG%@lZ9e1z)&?1z^1oa)4x zSYsdJJjy)a{NCAHZR; )Ru2w z4u`(_^#2kNdR5Hgb*fBx*g9K1zu3#`|F8ec|3-!-MWb6mx5A;n5srpm;Im)<2mH@} z@Gd_1P8*Bq0ZL_HYs1Cz^dnT(8+b;{rhjsZ-JKS;30N ?= z)~{Vd$fLRD6L`y0tkuS}=gx33IwwZgkr|Tlg1tC0w8Wa+C4K0UZZw};Pk7C6I1s9E z#9!JMWN*8h8y@~ja{~?7Ft2QS+O#!dy|r!=?r?!=?-<+lG2Xj%jli&k$B)K1ACEET zJ~Z*z*%&ZGt4mnj3CX!|PEq&z#58AUxl5cr`yBu2FFuxuD&1CvfG!|r=V6=f)yo%8 zF&M^J>$DLrGaMWa=sNuZx3AOrRN11?bqZJjVI9-d70)_Ov`>ybXBj$7AGy)&pu65e zXMGL3#B@(i&T(?olL8;ksc6}J2^YN?zWn?NHajk=&z@m4ie+R~sRjk)$xNQtY}5(# zH^^2saM2HmrA8RhW3y!>2B}mo%h;+^;Lz80s(izmZd}1eH{a@Ux(Zzu1D5s 2ujWKx Lyi(~~j<`xcj!ih&Q~BLgbBGS-Ts?J)Y*&DUJ`IEO9UJPTcME(|kB~|wD>Fe3 z*K)BCk38f1oANj_J~z&bI{L|Y^`$(}n;|Q8^tqf`Fl-a17nVO_5(gS8F6*S2*kLW- zSe*_2*p6$$&3aBS)2A{kwl76O;_pfRHIsN)cIi_a@U8lGNl>HRYktu*0V8a poc^_XM9AHEY=3Br003I=> zIT^iWcY$(?z!D* `S{$Q%HfUJRNZDPw&G-YF@!pACNJQa0tX4* zn$5zcNWA|d_PB?ra;PaeL=c_eqaXh@j_DfnWRo}FeM^E)%v3`j^2=rUP8}t>(iKAO zZgYVhRs{-b@TPNO{D<^dAN3kn FX$e(@TcGZ z0PQC0;f~<)%uk1-06sZOKzEIRbWFExG?u=*Ql(1A428Y5TEs5n8Oj81%|@3PFSm?T zvDRKkDIgD@dsnl$gpadqis@)B*QDJkV{>aA&2|@2;=(VrFc`-;I~!m|YsqyR=yYl# z>Om-q=^~V ;}umC9^k z#q^!%OyN}68ze`leVCqvcSU#C^$ma;u?1c+5?)QQAjey(aCyz8ww)v~Z7q;|D;FB^ z&y`AzoYac2KikKdMuFsCC9j*P%=&Do?~4`vw`=VhYs>eaLD|C^9- zcGcyw&n@hU!oRBskCUHO4pdj5`|G|g?~VUF&RS%euLIE{1GRxHRR~+Xw}1D}JzT$j z9hDQ7z>B4laW)#z!X_i#NoawPfvhy~<&yzE`PmEH*{2&zENy?Ii~iAEsxf&{*O~-s z%_>U7CLJPfvlmlbynKSnWPo3Pbb%LN3{WHFC=-JkjOUmQf&1@l5UU}3d2xZ>$%W9l z>iQ0x&L+ILhGZIGNZ=4IC#X~-?B8l(cQ256m5XIhHph*(*Rgqb4debx+H0(pS(3(X zFQ_7GZzJj@_}SkKarWXAAN*H7ZtU;E4GCQ8sQ~Z#4KnPvJM{canC~Z_9^%Pk&L!^C z<+( P(opXpf zZ94At2YJ>W0ZqC%#d_r!-}`16&mX Etaj zmfq$Y*-CoZ)&gS%9AlbnA4bs+m*=EuZnhjlFRj1;e@Tu-43+IiL@^HbwG6Yk@vnmG zrQdD4NMUZFe4ebpGL55PL*+#Sv>JnE^Fr>b(NM D(&2xL~P>KMa(9;@~w z!XW%#rXnD6#bxj|7kxqc$vFh a z4k%Hy6i}AJDaZDgs&k!)WTB^`^vs%h6ko)jnm(HecW~vsW9FA~ibTS_qVneIxIWW| z${@*YZ){uGndVf9uxmaxuX(yw?BjE!s8lJdgklDh)6_+|y2q}WW@Vg%LQ#(vI>C%< z6PVB2V#EnGJ-z%pe pOhF;_D+_ur~5Xh`GMY`(Q z(-D61pQd>Hd5kx9s* qaHj~)}dp}&xo;}oX}3-iFqN8o*m*B zKTq)OZ*1Ys+f58>1FUV=apxUkEu{q+`w; T zYXp=FOr!;eUR!I?^;^TOn|JVoAN~X{52jKn$a&q |E5oS2 !UR8p`at59)agG&yxFf= nE>7}(8v2vS r4emA&JO+L*g)NY(X`+VObE>jHA;E^kTE z^`DuUr+GNoI(jBN@7iJM+3K~44szDP0tH4_XcSv<%S+2Q69Q(PyH{cH)i1~1Te~Ao zRrJ+;Pz2D|6$}-N?yl~qt8CQ%n}2rm 4qqhc7-o6&b8`0${hZj`_h68LAK!Vi^726if18cK5dsH1_e} z{Q$?OXIQ(oj*UA_Y+Y;6do+-(XP91`!6O#cAfhlLmURB?2#pT0yE3uD+Adn97J?
$Q%EKd=t$jN4QQbX%;bGa1r#j#1C1C^;9n zdo96tzu7>&aSV53i8kwPmgwC413Y~AIfk CfALHStA@1z2(RtS}?r~)? zk0Arzyw||(+q<~vWmwE6bS 9dz!f|S_v(bstz{F+@Ky} zLHFyTPuIA&Aj487hr}^;3%ofK$!YN>J-@iXWPCx_VkV!7D`>mj4YXSwVx~)sM;Fq+ zIwvsYP?t*#-VfFZNbB_b62~VCdLPc84irG03JCw{npVhYD9|}U9hFK0U9XM_J;;^2 zqA2A0Mk3CU+?P~+`kpe1)a0?;Ox0*)XT%z6bh%xJoJ4Xg0uJ}_bDT`_TlwbBY+s%Q zo0Sl{4fQ&CoGddFEv&xr6#xV-ZP1)$7IyZl-tA?^`E?bx#h+ha1YtsP&|XN(Hdk+B z^S64YPQkzwzl%&kkEX&0%(6sM!I40s3@czpDpG%rf~$rRBLOeZYBoDIQlOJe1XjiQ zNJM8hi^v;KLKzUj_Ml9l%FK#;ol8j~fLo#$u!F_^F|)8Go#0Yf=~5J| n%hcrsXPk*C>f* zrUKou(FVSTo@IvWXjoM!`7br173MxDOSJ2z&^lurIBg@cLoIYrIy Oi2x$@-g@-P$|I4siT ul_+Q %H4evcJf4%|WioKHmqQ$VHIp91JJ;*jy|#&qi K zu-PHcXTCr^U|Bg@h%dOWGbVteg;?K$f9);YE#097`vhw{1fayQvdJNx&KT%ausDt| zJ5RXoh%k?ix04dPeFnF&0GVf6;1ww@`QhI@$6}OWr%^)t_BI(@VtD80c=>`1?8Bc* zIrp6p-lEIZ#QfP1PBlX~DdXiau`F6sx4RVrj52}98SdQeAZ^hGa^_f`KS8N6L&ay= zy9<2djZO5 bc&>_&RRnG9q6X2Im7sRmd(gJNEUJ^quucKCu=)C9BBk6gGXtpwd z*2)deREiehK89g6~Pd8w2h(<8P{aXRvxE-MCpOAea5T6ZkaWa-jz~=5u zT7iD?qX`D513Y-Agd3d_Ce4@}m@y8CwQse72lvb3g?pt0^XP)5KjnLHI>PbUXE-=K zCuhbZAj;70w9#yC(&HQSyGQpiMwN4pv~kZ*FK~ErMn;K8$q|@ERV+jD(uoQ1Bn%!+ z5k?cde0fNlW+AyC_SkuIMKQ~oMH04}&Zam$JCsluZ3|WMnH6 z@*NMkZHJ4Mh}|z1SSH-JxkRPm)3-V%tOv}a)VNT@HK8)8 j z-a7Z%N+mY8SD4T%GgZm+1;T8#jNXwdPA3;ycTBH)F;` D &`18K;BDIVDh>MV$LIn$?Li$CLmf6Q`@B0e44LhnDQ% z@_D5^Aup21inOvM>Lj|3wxl_(j!e_AF*8?Hz)~4WYlMsUXvN5+I7tA8TjF>ad@MB* z97-;w6 Wun<@0rEF}U5?ZgQXW?x^FRF6XEG6^UM~~-tYSPp z!EAYm{W}5O_z4!{Gt?RreDLiW{?)&^h5ZNnNXHSj)?K=p3t}&>+>q|>HkQL<96wu1 z8FsbC(%$rMeFMRKjJt2&Cx+EPI6p*qa)c(aS)wxNZg+9=kPPV}#@#pR{i8mJyr9+$ zc*F{_