From a8cdc763cb7b5baae62ce502e3791a8cc03bbe25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=AF=E4=B9=90=E5=8A=A0=E5=86=B0?= <11869599+addie66@user.noreply.gitee.com> Date: Wed, 28 Oct 2026 14:55:54 +0800 Subject: [PATCH] =?UTF-8?q?```=20chore(brand):=20=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E5=B0=86=E5=93=81=E7=89=8C=E5=90=8D=E4=BB=8E=E9=9B=84=E6=88=88?= =?UTF-8?q?=E5=B0=8F=E9=85=92=E6=9B=B4=E6=94=B9=E4=B8=BA=E6=A9=99=E8=99=8E?= =?UTF-8?q?=E5=B0=8F=E9=85=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更新alisms插件配置中的签名值 - 修改shopro插件中所有SQL脚本的品牌名称引用 - 更新商城配置、商品分类、演示数据中的品牌名称 - 替换后台登录页面的品牌标识 - 更新汇付分账配置中的媒介名称 - 修改登录预览生成脚本中的品牌显示 ``` --- addons/alisms/config.php | 2 +- .../docs/后台使用手册-分销与区域公司.md | 304 ++++++++++++ addons/shopro/fix_decorate_list.sql | 4 +- .../remove_non_liquor_attachment_space.sql | 2 +- addons/shopro/remove_non_liquor_goods.sql | 2 +- addons/shopro/rename_brand_xiongge.sql | 26 +- addons/shopro/seed_liquor_categories.sql | 12 +- addons/shopro/seed_xiongge_demo.sql | 20 +- addons/shopro/update_brand_name.sql | 4 +- .../shopro/update_demo_packaging_images.sql | 10 +- .../update_goods_content_huifu_audit.sql | 12 +- addons/shopro/update_theme_light.sql | 2 +- addons/shopro/update_theme_navy.sql | 2 +- addons/shopro/update_xiongge_images.sql | 10 +- .../shopro_huifu/command/UploadSplitMedia.php | 4 +- .../docs/generate_contract_docx.py | 362 ++++++++++++++ ...–¹分账业务合作协议-贵州宥川商贸有限公司.docx | Bin 0 -> 41592 bytes .../docs/多方分账业务合作协议.docx | Bin 0 -> 48366 bytes ...ˆ†账40%申请填写说明-贵州宥川商贸有限公司.docx | Bin 0 -> 40184 bytes .../docs/汇付分账40%申请填写说明.docx | Bin 0 -> 40174 bytes .../docs/汇付分账40%申请说明与合作协议模板.md | 272 +++++++++++ .../split/HuifuMerchantSplitService.php | 2 +- .../shopro_huifu/upgrade_huifu_split_bind.sql | 2 +- application/admin/view/index/login.html | 12 +- .../admin/view/shopro/store/store/add.html | 2 +- application/extra/site.php | 2 +- .../assets/login/generate_login_previews.py | 8 +- .../login/generate_login_previews_v2.py | 10 +- public/assets/login/previews/index.html | 4 +- public/usr.html | 4 +- public/yisi.html | 6 +- .../privacy-auth-modal/privacy-auth-modal.vue | 164 +++++++ .../shopro-live-card/shopro-live-card.vue | 361 -------------- .../components/yk-authpup/yk-authpup.vue | 10 +- .../design-system/default/MASTER.md | 2 +- xgsc.gynhc.com_wx/env.js | 1 - xgsc.gynhc.com_wx/manifest.json | 5 +- xgsc.gynhc.com_wx/pages.json | 95 +--- xgsc.gynhc.com_wx/pages/app/video/detail.vue | 163 ------- xgsc.gynhc.com_wx/pages/app/video/index.vue | 169 ------- .../pages/index/components/sh-grid.vue | 8 +- .../pages/index/components/sh-live.vue | 108 ----- xgsc.gynhc.com_wx/pages/index/index.vue | 18 +- .../pages/index/index/home-head.vue | 4 +- xgsc.gynhc.com_wx/pages/index/user-copy.vue | 2 +- xgsc.gynhc.com_wx/pages/index/view.vue | 19 +- xgsc.gynhc.com_wx/pages/live/list.vue | 216 --------- xgsc.gynhc.com_wx/pages/live/list2.nvue | 99 ---- xgsc.gynhc.com_wx/pages/public/search.vue | 2 +- xgsc.gynhc.com_wx/pages/user/live-copy.nvue | 449 ------------------ xgsc.gynhc.com_wx/pages/user/live.nvue | 441 ----------------- xgsc.gynhc.com_wx/shopro/config/theme.js | 2 +- xgsc.gynhc.com_wx/shopro/request/apis.js | 45 -- xgsc.gynhc.com_wx/shopro/utils/theme.js | 4 +- xgsc.gynhc.com_wx/shopro/wechat/privacy.js | 59 +++ .../images/tabbar/generate_tabbar_icons.py | 2 +- xgsc.gynhc.com_wx/static/style/theme.scss | 2 +- 57 files changed, 1265 insertions(+), 2287 deletions(-) create mode 100644 addons/shopro/docs/后台使用手册-分销与区域公司.md create mode 100644 addons/shopro_huifu/docs/generate_contract_docx.py create mode 100644 addons/shopro_huifu/docs/多方分账业务合作协议-贵州宥川商贸有限公司.docx create mode 100644 addons/shopro_huifu/docs/多方分账业务合作协议.docx create mode 100644 addons/shopro_huifu/docs/汇付分账40%申请填写说明-贵州宥川商贸有限公司.docx create mode 100644 addons/shopro_huifu/docs/汇付分账40%申请填写说明.docx create mode 100644 addons/shopro_huifu/docs/汇付分账40%申请说明与合作协议模板.md create mode 100644 xgsc.gynhc.com_wx/components/privacy-auth-modal/privacy-auth-modal.vue delete mode 100644 xgsc.gynhc.com_wx/components/shopro-live-card/shopro-live-card.vue delete mode 100644 xgsc.gynhc.com_wx/pages/app/video/detail.vue delete mode 100644 xgsc.gynhc.com_wx/pages/app/video/index.vue delete mode 100644 xgsc.gynhc.com_wx/pages/index/components/sh-live.vue delete mode 100644 xgsc.gynhc.com_wx/pages/live/list.vue delete mode 100644 xgsc.gynhc.com_wx/pages/live/list2.nvue delete mode 100644 xgsc.gynhc.com_wx/pages/user/live-copy.nvue delete mode 100644 xgsc.gynhc.com_wx/pages/user/live.nvue create mode 100644 xgsc.gynhc.com_wx/shopro/wechat/privacy.js diff --git a/addons/alisms/config.php b/addons/alisms/config.php index 9d24d02..b9fea93 100644 --- a/addons/alisms/config.php +++ b/addons/alisms/config.php @@ -30,7 +30,7 @@ return [ 'title' => '签名', 'type' => 'string', 'content' => [], - 'value' => '雄戈小酒', + 'value' => '橙虎小酒', 'rule' => 'required', 'msg' => '', 'tip' => '', diff --git a/addons/shopro/docs/后台使用手册-分销与区域公司.md b/addons/shopro/docs/后台使用手册-分销与区域公司.md new file mode 100644 index 0000000..e317cce --- /dev/null +++ b/addons/shopro/docs/后台使用手册-分销与区域公司.md @@ -0,0 +1,304 @@ +# 橙虎小酒商城 · 后台使用手册(分销 & 区域公司) + +> 面向店铺运营人员,无需技术背景。按步骤操作即可。 +> 后台路径:**Shopro 商城管理** → 左侧菜单 **分销中心** / **区域公司**。 + +--- + +## 一、先搞懂两件事 + +| 功能 | 一句话说明 | 钱给谁 | +|------|------------|--------| +| **分销中心** | 用户分享商品,发展下级,按「推荐关系」拿推广差价 | 分销商(推广人) | +| **区域公司** | 按订单**收货地址**的省 / 市 / 区县,给当地代理公司拿区域差价 | 区域公司负责人 | + +两者**可以同时开启**:同一笔订单,既可能给推荐链上的分销商算差价,也可能给收货地址对应区域的区域公司算差价(商品需允许参与,见下文)。 + +**区域公司怎么匹配订单?** +系统看买家订单里的**收货省、市、区县**,去查您是否已为该区域配置了「正式区域公司」。没有配置的区域,不会产生区域差价。 + +--- + +## 二、分销中心 · 推荐配置顺序(首次上线) + +按下面顺序做,不容易漏项: + +1. **分销设置** — 打开分销、定规则(层级、怎么成为分销商、什么时候结算等) +2. **分销等级** — 每个等级填好差价比例(及可选的级差档位、管理奖) +3. **分销商品** — 哪些商品参与分销,必要时单独改差价 +4. **分销商** — 审核申请、调整等级、处理待升级 +5. 日常看 **分销订单**、**佣金明细**、**分销动态** + +--- + +## 三、分销中心 · 各菜单怎么用 + +### 1. 分销设置 + +**路径:** 分销中心 → 分销设置 → 点右下角 **保存**。 + +#### (1)基础设置 + +| 设置项 | 建议怎么选 | 通俗解释 | +|--------|------------|----------| +| **分销层级** | 按业务选一级 / 二级 / 三级;不用分销选「关闭」 | 最多向上几层上级能拿推广差价 | +| **分销内购** | 需要则「开启」 | 分销商自己买也能给自己返差价 | +| **分销商锁定下线条件** | 常用「点击分享链接」或「首次支付」 | 客户什么时候算「绑在这个分销商名下」 | +| **分销商审核** | 要控质量选「需要」 | 用户申请后是否必须后台通过 | +| **越级升级** | 一般「不允许」 | 能否跳过中间等级直接升到高等级 | +| **升级审核** | 看是否需要人工把关 | 达标后是否还要您点通过才升级 | + +> **默认差价比例**不在本页填,请到 **分销等级** 里按等级设置。 + +#### (2)默认分销商设置 + +| 成为分销商条件 | 适用场景 | +|----------------|----------| +| **自助申请** | 用户在小程序里填表申请(需配合「完善资料」) | +| **购买任意商品** | 买过指定商品自动成为分销商 | +| **消费累计** | 累计消费满 X 元自动成为 | + +- **完善资料**:申请时要填的字段(姓名、手机号、上传图片等),可自定义。 +- **申请协议**:可挂一篇富文本协议,用户勾选同意。 + +#### (3)级差与管理奖(高级,可按需开) + +| 开关 | 含义(简版) | +|------|----------------| +| **推广分佣** | 按一级 / 二级 / 三级「百分比」在推荐链上分差价 | +| **级差奖** | 按各等级「固定档位(元)」算差额;**商品上要勾选「参与级差奖」** | +| **管理奖** | 链上各级按「管理奖比例」再拿一份;**商品上要勾选「参与管理奖」** | +| **复购推荐人分佣** | 老客户再次购买,上级是否还能拿推广差价 | +| **本人复购立减** | 老客户再买指定商品,付款时直接减价(不是事后返现);需在商品上勾选「参与复购立减」 | + +#### (4)结算条件 + +| 设置项 | 说明 | +|--------|------| +| **商品结算方式** | 按「商品标价」还是「用户实际支付价(不含运费)」算差价 | +| **差价结算方式** | 支付后 / 确认收货 / 订单完成 / 手动打款 — 决定差价何时进入可提现状态 | +| **退款扣除差价** | 退款后是否扣回已发或待发差价 | +| **退款扣除分销业绩** | 退款后是否扣回计入升级、统计的业绩 | + +--- + +### 2. 分销等级 + +**路径:** 分销中心 → 分销等级 → 添加 / 编辑。 + +每个等级单独保存一次,主要填: + +- **等级权重**:数字越大等级越高(一级是基础等级)。 +- **等级名称、徽章**:小程序里展示用。 +- **一级 / 二级 / 三级差价比例**:该等级的人处在对应推荐位置时,按订单金额 × 比例拿差价。 +- **级差档位金额**(若开了级差奖):填本等级的「档位」,和订单金额无关,按档位差额计算。 +- **管理奖比例**(若开了管理奖):本等级拿 订单金额 × 比例。 + +**二级及以上**可设 **升级条件**(消费金额、团队人数、分销订单金额/单数、下级分销商人数等),选「满足任意一条」或「全部满足」。 + +> 改完等级后,请到 **分销商品** 检查是否要用「独立规则」覆盖某个商品的差价。 + +--- + +### 3. 分销商品 + +**路径:** 分销中心 → 分销商品。 + +| 操作 | 说明 | +|------|------| +| 列表点 **参与 / 不参与** | 快速开关某商品是否走分销 | +| 点 **编辑** | 详细设置 | + +编辑页重点: + +| 项 | 说明 | +|----|------| +| **是否参与** | 关 = 该商品不产生任何分销差价 | +| **差价规则** | 默认(跟等级走)/ 独立 / 批量 — 多数商品用「默认规则」即可 | +| **分销商业绩** | 「计入」才会算进升级、团队业绩统计 | +| **参与级差奖 / 管理奖 / 复购立减** | 与「分销设置」里总开关配合使用 | +| **参与区域公司** | 关 = 该商品订单**不给区域公司**分区域差价(默认开) | + +--- + +### 4. 分销商 + +**路径:** 分销中心 → 分销商。 + +| 标签页 | 您要做什么 | +|--------|------------| +| **分销商** | 查所有人、改等级、禁用、看团队 | +| **待审核** | 通过 / 拒绝新申请 | +| **待升级** | 用户已达标,等您确认升级(若开了升级审核) | + +常用:搜索手机号 / 昵称 → 点详情 → 改等级或审核。 + +--- + +### 5. 分销订单、佣金明细、分销动态 + +| 菜单 | 用途 | +|------|------| +| **分销订单** | 哪些订单产生了分销业绩 | +| **佣金明细** | 每一笔差价记录;可按规则 **结算 / 退回**(若设置为手动打款或需人工处理) | +| **分销动态** | 绑定关系、升级、团队变化等日志,便于核对纠纷 | + +--- + +## 四、区域公司 · 推荐配置顺序(首次上线) + +1. **公司设置** — 打开功能、选分佣模式、结算时机、申请表单 +2. **公司等级** — 省 / 市 / 区县各档差价(比例或固定金额) +3. **区域公司** — 给用户绑定「负责哪块区域」;同一区域同一层级只能有一个正式公司 +4. **分销商品** — 确认商品「参与区域公司」为开启(在分销商品里) +5. 日常看 **业绩看板**、**公司订单**、**差价明细** + +--- + +## 五、区域公司 · 各菜单怎么用 + +### 1. 公司设置 + +**路径:** 区域公司 → 公司设置 → **保存设置**。 + +| 设置项 | 说明 | +|--------|------| +| **区域公司开关** | 关 = 整个区域差价功能停用 | +| **申请需审核** | 用户在小程序申请后,是否必须后台通过 | +| **差价结算时机** | 支付后 / 确认收货 / 订单完成(与分销结算相互独立,各管各的) | +| **分佣模式** | 见下表 | +| **申请表单字段** | 用户申请区域公司时要填的内容(如姓名、手机号、身份证图) | + +**分佣模式(三选一,请和业务方定好再改):** + +| 模式 | 通俗理解 | +|------|----------| +| **叠加模式** | 同一单:省、市、区县公司**各拿各的**全额(若都已配置) | +| **独占模式** | 只给**最细一级**:有区县只给区县;没有区县才给市;再没有才给省 | +| **级差模式** | 省 / 市 / 区都配置时,按档位**差额**分,避免重复发满额 | + +**差价怎么算:** + +- **比例**:按该订单商品**实付金额** × 百分比。 +- **固定金额**:按**每个订单商品一行**计一次固定钱(**不乘购买数量**)。 + +**各级差价配置**表格来自 **公司等级**;本页可点「编辑」或「管理公司等级」跳转维护。 + +--- + +### 2. 公司等级 + +**路径:** 区域公司 → 公司等级 → 添加 / 编辑。 + +| 字段 | 填写提示 | +|------|----------| +| **等级权重** | 数字越大等级越高;建议与省 / 市 / 区层级对应 | +| **等级名称** | 如「省级公司」「贵阳市级公司」 | +| **区域层级** | 省级 / 市级 / 区县级 — 决定这类等级管哪一层地理范围 | +| **差价类型** | 实付比例 **或** 固定金额(元/单) | + +--- + +### 3. 区域公司(人员与区域绑定) + +**路径:** 区域公司 → 区域公司 → **添加** / 编辑 / 审核。 + +**后台添加时:** + +1. 搜索并选择**小程序用户**(须已注册)。 +2. 选 **区域层级**(省 / 市 / 区县)。 +3. 选 **公司区域**(省市区 cascader)。 +4. 选 **公司等级**(决定默认差价规则)。 +5. **差价设置**:一般用「等级通用配置」;个别代理可「单独设置差价」。 + +**注意:** 同一 **区域 + 同一层级** 只能有一个**正式**区域公司;重复添加会提示「该区域已有正式公司」。 + +| 标签 | 操作 | +|------|------| +| **待审核** | 通过 / 拒绝小程序申请 | +| **正常 / 已禁用** | 禁用后该区域不再给该用户发区域差价 | + +--- + +### 4. 业绩看板 + +**路径:** 区域公司 → 业绩看板。 + +按日期查看:正式公司数、待审核数、区域订单数、销售额、差价总额、待结算差价,以及区域销售 TOP 榜。用于日常汇报,无需改数据。 + +--- + +### 5. 公司订单、差价明细 + +| 菜单 | 用途 | +|------|------| +| **公司订单** | 哪些订单触发了区域差价 | +| **差价明细** | 每笔区域差价;支持导出、结算、退回(按权限) | + +--- + +## 六、小程序端用户会看到什么(便于您答疑) + +**分销:** 个人中心 → 分销中心(推广商品、团队、佣金、申请分销商等,以您装修为准)。 + +**区域公司:** 用户可在小程序申请成为区域公司;若开启审核,提交后状态为「待审核」,通过后在对应收货区域订单上产生区域差价。 + +--- + +## 七、常见问题 + +**Q1:开了分销,为什么没差价?** +- 分销设置里 **分销层级** 是否为「关闭」; +- **分销商品** 是否「参与」; +- 买家是否通过分销商链接绑定(看「锁定下线条件」); +- 是否还没到 **结算时机**(确认收货前可能只显示「待结算」)。 + +**Q2:区域公司没差价?** +- **公司设置** 开关是否打开; +- 该 **省 / 市 / 区县** 是否已添加正式区域公司; +- 订单 **收货地址** 是否填写完整; +- **分销商品** 里是否关闭了「参与区域公司」。 + +**Q3:同一区域能否设两个市级公司?** +- 不能。同一区域、同一层级只能一个正式公司。 + +**Q4:分销和区域公司会不会重复?** +- 会同时存在两套规则:一套给推荐链上的分销商,一套给收货地区域公司。是否都给、给多少,由各自开关和商品上的「参与」项决定。 + +**Q5:改设置后旧订单会变吗?** +- 一般 **已生成的订单** 按下单时的规则;**新订单** 按保存后的新规则。大改规则前建议先小范围试一单。 + +**Q6:用户分享绑不上下级?** +- 到 **分销设置** 看「分销商锁定下线条件」,常用「点击分享链接」;改完后让分销商重新分享新链接测试。 + +--- + +## 八、日常运营检查清单(可打印) + +**每周建议看一眼:** + +- [ ] 分销 → 待审核、待升级是否积压 +- [ ] 区域公司 → 待审核是否处理 +- [ ] 佣金明细 / 差价明细 → 待结算是否异常偏多 +- [ ] 新上架商品 → 是否已在「分销商品」里设为参与(如需分销或区域差价) + +**每月建议核对:** + +- [ ] 分销等级、区域公司等级 与 当前政策是否一致 +- [ ] 业绩看板 / 分销订单 与 财务对账 + +--- + +## 九、需要技术同事协助时怎么说 + +把下面信息发给服务商即可: + +1. 问题订单号、买家手机号、下单时间 +2. 当时收货省市区 +3. 相关分销商手机号(如有) +4. 区域公司名称或负责人手机号(如有) +5. 截图:分销设置、该商品分销编辑页、区域公司列表 + +--- + +*文档版本:与当前 Shopro 后台「分销中心」「区域公司」菜单一致。若您后台菜单名称略有不同,以实际显示为准。* diff --git a/addons/shopro/fix_decorate_list.sql b/addons/shopro/fix_decorate_list.sql index b44f1e4..3258c03 100644 --- a/addons/shopro/fix_decorate_list.sql +++ b/addons/shopro/fix_decorate_list.sql @@ -11,8 +11,8 @@ UPDATE `fa_shopro_decorate_content` SET `content` = CAST(JSON_SET( IFNULL(CAST(`content` AS JSON), JSON_OBJECT('name', '', 'style', 1, 'height', 530, 'radius', 16)), '$.list', JSON_ARRAY( - JSON_OBJECT('image', @img_main, 'path', CONCAT('/pages/goods/detail?id=', IFNULL(@g1, 0)), 'path_type', 1, 'path_name', '雄戈小酒礼盒', 'name', '', 'bgcolor', '#FAFAF8'), - JSON_OBJECT('image', @img_bag, 'path', CONCAT('/pages/goods/detail?id=', IFNULL(@g2, 0)), 'path_type', 1, 'path_name', '雄戈小酒礼袋', 'name', '', 'bgcolor', '#FAFAF8') + JSON_OBJECT('image', @img_main, 'path', CONCAT('/pages/goods/detail?id=', IFNULL(@g1, 0)), 'path_type', 1, 'path_name', '橙虎小酒礼盒', 'name', '', 'bgcolor', '#FAFAF8'), + JSON_OBJECT('image', @img_bag, 'path', CONCAT('/pages/goods/detail?id=', IFNULL(@g2, 0)), 'path_type', 1, 'path_name', '橙虎小酒礼袋', 'name', '', 'bgcolor', '#FAFAF8') ), '$.radius', 16, '$.height', 530 diff --git a/addons/shopro/remove_non_liquor_attachment_space.sql b/addons/shopro/remove_non_liquor_attachment_space.sql index fc56584..925b41a 100644 --- a/addons/shopro/remove_non_liquor_attachment_space.sql +++ b/addons/shopro/remove_non_liquor_attachment_space.sql @@ -1,4 +1,4 @@ --- 雄戈小酒:清理图片空间中与酒类无关的目录和文件 +-- 橙虎小酒:清理图片空间中与酒类无关的目录和文件 -- 涉及表:fa_attachment_nav(目录)、fa_attachment(图片,软删除进回收站) -- 策略:厨房/厨具/富强/熊猫等旧目录 → 删除;图片 → is_del=1(回收站可恢复) -- 保留:名称含 酒 / 雄戈 / xiongge 的目录与文件 diff --git a/addons/shopro/remove_non_liquor_goods.sql b/addons/shopro/remove_non_liquor_goods.sql index 12b400d..133b6d8 100644 --- a/addons/shopro/remove_non_liquor_goods.sql +++ b/addons/shopro/remove_non_liquor_goods.sql @@ -1,4 +1,4 @@ --- 雄戈小酒:清理旧「小众厨房设备」遗留的非酒类商品 +-- 橙虎小酒:清理旧「小众厨房设备」遗留的非酒类商品 -- 策略:软删除(deletetime + 下架),保留酒类/雄戈演示商品 -- 执行前:请先备份 fa_shopro_goods 及相关表 -- 执行后:后台清除 Shopro 缓存 → 商品管理刷新列表 diff --git a/addons/shopro/rename_brand_xiongge.sql b/addons/shopro/rename_brand_xiongge.sql index c757adb..86f8fa3 100644 --- a/addons/shopro/rename_brand_xiongge.sql +++ b/addons/shopro/rename_brand_xiongge.sql @@ -1,4 +1,4 @@ --- 雄戈小酒:将线上数据库「雄哥」统一改为「雄戈」(含演示分类/商品/装修) +-- 橙虎小酒:将线上数据库「雄哥」统一改为「雄戈」(含演示分类/商品/装修) -- 执行后:清除 Shopro 缓存 + 小程序重新编译 -- 建议先备份 fa_shopro_category、fa_shopro_goods、fa_shopro_decorate_content @@ -7,7 +7,7 @@ SET @now = UNIX_TIMESTAMP(); -- ========== 1. Shopro 商城配置 ========== UPDATE `fa_shopro_config` SET `value` = REPLACE(REPLACE(REPLACE(REPLACE(`value`, - '雄哥小酒', '雄戈小酒'), + '雄哥小酒', '橙虎小酒'), '雄哥系列', '雄戈系列'), '贵州雄哥酒业有限公司', '贵州雄戈酒业有限公司'), '雄哥酒业', '雄戈酒业') @@ -15,23 +15,23 @@ WHERE `value` LIKE '%雄哥%'; -- ========== 2. FastAdmin 站点名称 ========== UPDATE `fa_config` -SET `value` = '雄戈小酒' -WHERE `name` = 'name' AND (`value` LIKE '%雄哥%' OR `value` = '雄戈小酒'); +SET `value` = '橙虎小酒' +WHERE `name` = 'name' AND (`value` LIKE '%雄哥%' OR `value` = '橙虎小酒'); -- ========== 3. 商品分类(含首页宫格「雄哥系列」等) ========== UPDATE `fa_shopro_category` -SET `name` = REPLACE(REPLACE(`name`, '雄哥小酒', '雄戈小酒'), '雄哥系列', '雄戈系列'), - `description` = REPLACE(REPLACE(IFNULL(`description`, ''), '雄哥小酒', '雄戈小酒'), '雄哥', '雄戈'), +SET `name` = REPLACE(REPLACE(`name`, '雄哥小酒', '橙虎小酒'), '雄哥系列', '雄戈系列'), + `description` = REPLACE(REPLACE(IFNULL(`description`, ''), '雄哥小酒', '橙虎小酒'), '雄哥', '雄戈'), `updatetime` = @now WHERE `name` LIKE '%雄哥%' OR IFNULL(`description`, '') LIKE '%雄哥%'; -- ========== 4. 演示商品及全部含「雄哥」的商品 ========== UPDATE `fa_shopro_goods` -SET `title` = REPLACE(REPLACE(`title`, '雄哥小酒', '雄戈小酒'), '雄哥', '雄戈'), +SET `title` = REPLACE(REPLACE(`title`, '雄哥小酒', '橙虎小酒'), '雄哥', '雄戈'), `subtitle` = REPLACE(IFNULL(`subtitle`, ''), '雄哥', '雄戈'), `content` = REPLACE(REPLACE(REPLACE(IFNULL(`content`, ''), '贵州雄哥酒业有限公司', '贵州雄戈酒业有限公司'), - '雄哥小酒', '雄戈小酒'), + '雄哥小酒', '橙虎小酒'), '雄哥', '雄戈'), `updatetime` = @now WHERE `title` LIKE '%雄哥%' @@ -40,9 +40,9 @@ WHERE `title` LIKE '%雄哥%' -- ========== 5. 富文本 ========== UPDATE `fa_shopro_richtext` -SET `title` = REPLACE(REPLACE(`title`, '雄哥小酒', '雄戈小酒'), '雄哥', '雄戈'), +SET `title` = REPLACE(REPLACE(`title`, '雄哥小酒', '橙虎小酒'), '雄哥', '雄戈'), `content` = REPLACE(REPLACE(REPLACE(`content`, - '雄哥小酒', '雄戈小酒'), + '雄哥小酒', '橙虎小酒'), '贵州雄哥酒业有限公司', '贵州雄戈酒业有限公司'), '雄哥', '雄戈'), `updatetime` = @now @@ -50,14 +50,14 @@ WHERE `title` LIKE '%雄哥%' OR `content` LIKE '%雄哥%'; -- ========== 6. 装修模板(轮播 path_name、首页宫格 list 等 JSON) ========== UPDATE `fa_shopro_decorate` -SET `name` = REPLACE(REPLACE(`name`, '雄哥小酒', '雄戈小酒'), '雄哥', '雄戈'), +SET `name` = REPLACE(REPLACE(`name`, '雄哥小酒', '橙虎小酒'), '雄哥', '雄戈'), `updatetime` = @now WHERE `name` LIKE '%雄哥%'; UPDATE `fa_shopro_decorate_content` SET `content` = REPLACE(REPLACE(REPLACE(REPLACE(`content`, - '雄哥小酒礼盒', '雄戈小酒礼盒'), - '雄哥小酒', '雄戈小酒'), + '雄哥小酒礼盒', '橙虎小酒礼盒'), + '雄哥小酒', '橙虎小酒'), '雄哥系列', '雄戈系列'), '雄哥', '雄戈') WHERE `content` LIKE '%雄哥%'; diff --git a/addons/shopro/seed_liquor_categories.sql b/addons/shopro/seed_liquor_categories.sql index d29eec3..3cf2251 100644 --- a/addons/shopro/seed_liquor_categories.sql +++ b/addons/shopro/seed_liquor_categories.sql @@ -1,4 +1,4 @@ --- 雄戈小酒:修复分类结构 + 首页宫格 + 商城名称 +-- 橙虎小酒:修复分类结构 + 首页宫格 + 商城名称 -- 【根因】顶级分类 type 必须是 1/2/3/4(展示样式),不能是 shop;shop 仅用于子分类 -- 执行后请清除商城缓存 @@ -17,14 +17,14 @@ SET @img_hot = '/uploads/demo/xiongge/icon-cat-hot.png'; -- ========== 1. 商城名称 ========== UPDATE `fa_shopro_config` -SET `value` = JSON_SET(CAST(`value` AS JSON), '$.name', '雄戈小酒') +SET `value` = JSON_SET(CAST(`value` AS JSON), '$.name', '橙虎小酒') WHERE `name` = 'shopro' AND `group` = 'basic' AND JSON_VALID(`value`) = 1; UPDATE `fa_shopro_config` SET `value` = REPLACE(REPLACE(REPLACE(`value`, - '"name":"小众厨房设备"', '"name":"雄戈小酒"'), - '"name":"小众厨房设备商城"', '"name":"雄戈小酒"'), - '"name":"贤鼎酒业"', '"name":"雄戈小酒"') + '"name":"小众厨房设备"', '"name":"橙虎小酒"'), + '"name":"小众厨房设备商城"', '"name":"橙虎小酒"'), + '"name":"贤鼎酒业"', '"name":"橙虎小酒"') WHERE `name` = 'shopro' AND `group` = 'basic'; -- ========== 2. 重建分类树 ========== @@ -35,7 +35,7 @@ DELETE FROM `fa_shopro_category` WHERE `pid` = 0; -- 顶级分类:type=2 表示「一级分类」样式(分类 Tab 页使用) INSERT INTO `fa_shopro_category` (`name`, `type`, `image`, `pid`, `weigh`, `description`, `status`, `createtime`, `updatetime`) -VALUES ('雄戈小酒', '2', @img_root, 0, 100, '酒类商城', 'normal', @now, @now); +VALUES ('橙虎小酒', '2', @img_root, 0, 100, '酒类商城', 'normal', @now, @now); SET @root_id = LAST_INSERT_ID(); diff --git a/addons/shopro/seed_xiongge_demo.sql b/addons/shopro/seed_xiongge_demo.sql index 0eefba4..7566840 100644 --- a/addons/shopro/seed_xiongge_demo.sql +++ b/addons/shopro/seed_xiongge_demo.sql @@ -1,4 +1,4 @@ --- 雄戈小酒演示数据 | 数据库 xgsc.gynhc.com | 表前缀 fa_ +-- 橙虎小酒演示数据 | 数据库 xgsc.gynhc.com | 表前缀 fa_ -- 【请先执行】seed_liquor_categories.sql(商城名 + 酒类分类 + 首页宫格) -- 执行前:将演示图片上传到 public/uploads/demo/xiongge/ -- 商品:xg-box-main / xg-product-bottle / xg-product-gift / xg-product-tasting / xg-product-banquet @@ -42,10 +42,10 @@ SET @dispatch_id = ( -- ========== 清理旧演示数据 ========== DELETE FROM `fa_shopro_goods_sku_price` WHERE `sn` LIKE 'XG-DEMO-%'; -DELETE FROM `fa_shopro_goods` WHERE `title` LIKE '【演示】雄戈小酒%'; +DELETE FROM `fa_shopro_goods` WHERE `title` LIKE '【演示】橙虎小酒%'; -- ========== 分类(依赖 seed_liquor_categories.sql 已创建子分类) ========== -SET @cat_root = (SELECT id FROM `fa_shopro_category` WHERE `name` = '雄戈小酒' AND `pid` = 0 LIMIT 1); +SET @cat_root = (SELECT id FROM `fa_shopro_category` WHERE `name` = '橙虎小酒' AND `pid` = 0 LIMIT 1); SET @cat_gift = (SELECT id FROM `fa_shopro_category` WHERE `name` = '礼盒装' AND `type` = 'shop' ORDER BY id DESC LIMIT 1); SET @cat_series = (SELECT id FROM `fa_shopro_category` WHERE `name` = '雄戈系列' AND `type` = 'shop' ORDER BY id DESC LIMIT 1); SET @cat_single = (SELECT id FROM `fa_shopro_category` WHERE `name` = '单瓶装' AND `type` = 'shop' ORDER BY id DESC LIMIT 1); @@ -59,7 +59,7 @@ INSERT INTO `fa_shopro_goods` ( `price`, `original_price`, `is_sku`, `likes`, `views`, `sales`, `show_sales`, `dispatch_type`, `dispatch_ids`, `createtime`, `updatetime` ) VALUES ( - 'normal', '【演示】雄戈小酒 礼盒装', '一男人的朋友一', 'up', 400, CAST(@cat_gift AS CHAR), + 'normal', '【演示】橙虎小酒 礼盒装', '一男人的朋友一', 'up', 400, CAST(@cat_gift AS CHAR), @img_main, CONCAT(@img_main, ',', @img_gift, ',', @photo_box, ',', @photo_bag), '[]', CONCAT( '
贵州雄戈酒业有限公司出品
', @@ -81,7 +81,7 @@ INSERT INTO `fa_shopro_goods` ( `type`, `title`, `subtitle`, `status`, `weigh`, `category_ids`, `image`, `images`, `params`, `content`, `price`, `original_price`, `is_sku`, `show_sales`, `dispatch_type`, `dispatch_ids`, `createtime`, `updatetime` ) VALUES ( - 'normal', '【演示】雄戈小酒 品鉴装', '一男人的朋友一', 'up', 300, CAST(@cat_series AS CHAR), + 'normal', '【演示】橙虎小酒 品鉴装', '一男人的朋友一', 'up', 300, CAST(@cat_series AS CHAR), @img_tasting, CONCAT(@img_tasting, ',', @photo_box), '[]', CONCAT('120ml×2 / 49%vol
120ml / 49%vol
120ml×10 / 49%vol
适用范围
本政策适用于「雄戈小酒」微信小程序商城购买的实体商品(酒类)。
签收与验货
请您在签收时当面验货。如外包装严重破损、漏液或数量不符,请当场拍照/录像并拒收或立即联系客服,我们将协助处理。
退换货条件
1. 未开封、不影响二次销售,且在签收后 7 日内可申请退货(具体以订单状态及商品属性为准);
2. 因运输造成的破损、漏液,请保留完整外包装及物流面单,联系客服办理补发或退款;
3. 定制类、已开封或已饮用的酒类商品,除质量问题外不支持无理由退换。
售后申请路径(小程序)
① 底部「我的」→ 订单卡片「售后」→ 售后列表;
② 「我的」→「我的订单」→ 进入订单详情 →「申请售后」;
③ 「我的」→「设置」→「退换货政策」(本页)。
处理时效
客服会在 1 个工作日内响应;审核通过后,退款按原支付渠道退回,到账时间以支付机构为准。
客服
商品页「客服」按钮或「我的」联系在线客服,服务时间 9:00–21:00。
', + '适用范围
本政策适用于「橙虎小酒」微信小程序商城购买的实体商品(酒类)。
签收与验货
请您在签收时当面验货。如外包装严重破损、漏液或数量不符,请当场拍照/录像并拒收或立即联系客服,我们将协助处理。
退换货条件
1. 未开封、不影响二次销售,且在签收后 7 日内可申请退货(具体以订单状态及商品属性为准);
2. 因运输造成的破损、漏液,请保留完整外包装及物流面单,联系客服办理补发或退款;
3. 定制类、已开封或已饮用的酒类商品,除质量问题外不支持无理由退换。
售后申请路径(小程序)
① 底部「我的」→ 订单卡片「售后」→ 售后列表;
② 「我的」→「我的订单」→ 进入订单详情 →「申请售后」;
③ 「我的」→「设置」→「退换货政策」(本页)。
处理时效
客服会在 1 个工作日内响应;审核通过后,退款按原支付渠道退回,到账时间以支付机构为准。
客服
商品页「客服」按钮或「我的」联系在线客服,服务时间 9:00–21:00。
', @now, @now, NULL @@ -31,11 +31,11 @@ WHERE `name` = 'shopro' AND `group` = 'basic' AND JSON_VALID(`value`) = 1 AND @r -- ========== 2. 详情顶部公共说明(不含重复标记) ========== SET @intro_tail = '发货说明
下单后 48 小时内安排发货(节假日顺延),默认快递配送。签收前请验货,如有破损请保留外包装并联系客服。
退换货与售后查看路径
① 小程序底部「我的」→ 订单区「售后」;② 「我的」→「我的订单」→ 订单详情 →「申请售后」;③ 「我的」→「设置」→「退换货政策」查看全文。
客服咨询
商品页点击「客服」,或在「我的」联系在线客服(9:00–21:00)。
温馨提示
饮酒有害健康,请勿酒后驾驶;未成年人请勿购买及饮酒。
——以下为商品原有图文详情——
'; --- ========== 3. 196 雄戈小酒 礼盒装 ========== +-- ========== 3. 196 橙虎小酒 礼盒装 ========== UPDATE `fa_shopro_goods` SET `content` = CONCAT( '', - '商品介绍
「雄戈小酒」礼盒装,贵州雄戈酒业有限公司出品,适合商务馈赠、亲友聚会与节日送礼。礼盒内含多瓶小规格酱香型白酒,包装精致,便于携带与陈列。
', + '商品介绍
「橙虎小酒」礼盒装,贵州雄戈酒业有限公司出品,适合商务馈赠、亲友聚会与节日送礼。礼盒内含多瓶小规格酱香型白酒,包装精致,便于携带与陈列。
', '产品规格
净含量:120ml×5;酒精度:49%vol;香型:酱香型白酒;产地:贵州省。
', '饮用建议
开瓶后请尽快饮用;常温避光保存。建议小杯慢饮,搭配合适餐食,切勿过量饮酒。
', @intro_tail, @@ -46,11 +46,11 @@ WHERE `id` = 196 AND `deletetime` IS NULL AND (`content` IS NULL OR `content` NOT LIKE '%huifu-goods-intro%'); --- ========== 4. 199 雄戈小酒 商务宴请装 ========== +-- ========== 4. 199 橙虎小酒 商务宴请装 ========== UPDATE `fa_shopro_goods` SET `content` = CONCAT( '', - '商品介绍
「雄戈小酒」商务宴请装,面向聚会、宴请、团队答谢等场景。手提礼袋包装,单份数量充足,方便席面分饮与携带。
', + '商品介绍
「橙虎小酒」商务宴请装,面向聚会、宴请、团队答谢等场景。手提礼袋包装,单份数量充足,方便席面分饮与携带。
', '产品规格
净含量:120ml×10;酒精度:49%vol;香型:酱香型白酒;产地:贵州省。
', '饮用建议
开瓶后请尽快饮用;常温避光保存。理性饮酒,请勿酒后驾车。
', @intro_tail, @@ -65,7 +65,7 @@ WHERE `id` = 199 UPDATE `fa_shopro_goods` SET `content` = CONCAT( '', - '商品介绍
「雄戈小酒」销售礼盒装,以自然之味、养自然之身为理念,选用优质酱香型白酒小瓶组合,适合渠道团购、企业福利与高端礼赠。详情页下方轮播图可查看礼盒外观与实物展示。
', + '商品介绍
「橙虎小酒」销售礼盒装,以自然之味、养自然之身为理念,选用优质酱香型白酒小瓶组合,适合渠道团购、企业福利与高端礼赠。详情页下方轮播图可查看礼盒外观与实物展示。
', '产品说明
具体净含量、酒精度及礼盒配置以页面标题、规格及客服说明为准;下单前如有疑问请联系在线客服确认。
', '适用场景
商务拜访、节日送礼、客户答谢、品鉴分享等。
', @intro_tail, diff --git a/addons/shopro/update_theme_light.sql b/addons/shopro/update_theme_light.sql index 4df07c7..4e7993b 100644 --- a/addons/shopro/update_theme_light.sql +++ b/addons/shopro/update_theme_light.sql @@ -1,4 +1,4 @@ --- 雄戈小酒 - 轻简奢品主题:更新装修数据(TabBar + 个人中心) +-- 橙虎小酒 - 轻简奢品主题:更新装修数据(TabBar + 个人中心) -- 数据库:xgsc.gynhc.com -- 可与 seed_xiongge_demo.sql 一起执行,或单独执行 diff --git a/addons/shopro/update_theme_navy.sql b/addons/shopro/update_theme_navy.sql index 1163a04..8ac9724 100644 --- a/addons/shopro/update_theme_navy.sql +++ b/addons/shopro/update_theme_navy.sql @@ -1,4 +1,4 @@ --- 雄戈小酒包装主题:更新底部导航装修数据 +-- 橙虎小酒包装主题:更新底部导航装修数据 -- 数据库:xgsc.gynhc.com -- FastAdmin 默认表前缀为 fa_,实际表名通常为 fa_shopro_decorate_content -- diff --git a/addons/shopro/update_xiongge_images.sql b/addons/shopro/update_xiongge_images.sql index aec4244..e5820d8 100644 --- a/addons/shopro/update_xiongge_images.sql +++ b/addons/shopro/update_xiongge_images.sql @@ -1,4 +1,4 @@ --- 雄戈小酒:更新分类图标 + 商品主图(不重建分类树,适合已上线环境) +-- 橙虎小酒:更新分类图标 + 商品主图(不重建分类树,适合已上线环境) -- 前提:public/uploads/demo/xiongge/ 下图片已上传 -- 完整包装图更新请执行 update_demo_packaging_images.sql @@ -23,7 +23,7 @@ UPDATE `fa_shopro_category` SET `image` = '/uploads/demo/xiongge/icon-cat-banque UPDATE `fa_shopro_category` SET `image` = '/uploads/demo/xiongge/icon-cat-new.png', `updatetime` = @now WHERE `name` = '新品上市' AND `type` = 'shop'; UPDATE `fa_shopro_category` SET `image` = '/uploads/demo/xiongge/icon-cat-hot.png', `updatetime` = @now WHERE `name` = '热销推荐' AND `type` = 'shop'; -UPDATE `fa_shopro_category` SET `image` = @img_box, `updatetime` = @now WHERE `name` = '雄戈小酒' AND `pid` = 0; +UPDATE `fa_shopro_category` SET `image` = @img_box, `updatetime` = @now WHERE `name` = '橙虎小酒' AND `pid` = 0; -- ========== 演示商品主图(4 款各不同) ========== UPDATE `fa_shopro_goods` SET `image` = @img_box, `images` = CONCAT(@img_box, ',', @img_gift), `updatetime` = @now WHERE `title` LIKE '%礼盒装%'; @@ -39,8 +39,8 @@ UPDATE `fa_shopro_decorate_content` SET `content` = CAST(JSON_SET( IFNULL(CAST(`content` AS JSON), JSON_OBJECT('name', '', 'style', 1, 'height', 530, 'radius', 16)), '$.list', JSON_ARRAY( - JSON_OBJECT('image', @img_box, 'path', CONCAT('/pages/goods/detail?id=', IFNULL(@g1, 0)), 'path_type', 1, 'path_name', '雄戈小酒礼盒', 'name', '', 'bgcolor', '#FAFAF8'), - JSON_OBJECT('image', @img_bag, 'path', CONCAT('/pages/goods/detail?id=', IFNULL(@g2, 0)), 'path_type', 1, 'path_name', '雄戈小酒礼袋', 'name', '', 'bgcolor', '#FAFAF8') + JSON_OBJECT('image', @img_box, 'path', CONCAT('/pages/goods/detail?id=', IFNULL(@g1, 0)), 'path_type', 1, 'path_name', '橙虎小酒礼盒', 'name', '', 'bgcolor', '#FAFAF8'), + JSON_OBJECT('image', @img_bag, 'path', CONCAT('/pages/goods/detail?id=', IFNULL(@g2, 0)), 'path_type', 1, 'path_name', '橙虎小酒礼袋', 'name', '', 'bgcolor', '#FAFAF8') ), '$.radius', 16, '$.height', 530 @@ -49,4 +49,4 @@ WHERE `type` = 'banner' AND `category` = 'home'; -- 验证: -- SELECT name, image FROM fa_shopro_category WHERE type='shop' ORDER BY weigh DESC; --- SELECT title, image FROM fa_shopro_goods WHERE title LIKE '【演示】雄戈小酒%'; +-- SELECT title, image FROM fa_shopro_goods WHERE title LIKE '【演示】橙虎小酒%'; diff --git a/addons/shopro_huifu/command/UploadSplitMedia.php b/addons/shopro_huifu/command/UploadSplitMedia.php index e021dc6..9de66b1 100644 --- a/addons/shopro_huifu/command/UploadSplitMedia.php +++ b/addons/shopro_huifu/command/UploadSplitMedia.php @@ -23,7 +23,7 @@ class UploadSplitMedia extends Command ->addOption('goods-url', null, Option::VALUE_REQUIRED, '商品/服务明细页截图') ->addOption('order-url', null, Option::VALUE_REQUIRED, '下单场景页截图') ->addOption('pay-url', null, Option::VALUE_REQUIRED, '支付页截图') - ->addOption('media-name', null, Option::VALUE_OPTIONAL, '小程序名称,默认 雄戈小酒') + ->addOption('media-name', null, Option::VALUE_OPTIONAL, '小程序名称,默认 橙虎小酒') ->addOption('media-type', null, Option::VALUE_OPTIONAL, '运营媒介类型,小程序默认 S3') ->addOption('file-type', null, Option::VALUE_OPTIONAL, '汇付图片上传 file_type,默认 F24') ->addOption('save-config', null, Option::VALUE_NONE, '写入 shopro_huifu_config.split_config_online_media_json') @@ -62,7 +62,7 @@ class UploadSplitMedia extends Command } $mediaName = trim((string) $input->getOption('media-name')); if ($mediaName === '') { - $mediaName = '雄戈小酒'; + $mediaName = '橙虎小酒'; } $mediaType = trim((string) $input->getOption('media-type')); if ($mediaType === '') { diff --git a/addons/shopro_huifu/docs/generate_contract_docx.py b/addons/shopro_huifu/docs/generate_contract_docx.py new file mode 100644 index 0000000..5343a00 --- /dev/null +++ b/addons/shopro_huifu/docs/generate_contract_docx.py @@ -0,0 +1,362 @@ +# -*- coding: utf-8 -*- +"""生成汇付分账相关 Word 文档""" +from pathlib import Path + +from docx import Document +from docx.enum.text import WD_ALIGN_PARAGRAPH, WD_LINE_SPACING +from docx.oxml.ns import qn +from docx.shared import Cm, Pt + +DOCS_DIR = Path(__file__).parent + +# 甲方(平台)信息 — 修改此处后重新运行脚本即可 +COMPANY = { + "name": "贵州宥川商贸有限公司", + "credit_code": "91520402MAKD45F14Y", + "huifu_id": "6666000237529347", + "legal_person": "周成", + "address": "贵州省织金县实兴乡上坝村周家寨组", + "phone": "13368531489", + "sign_place": "贵州省织金县", + "miniprogram": "橙虎小酒", +} + + +def output_paths(): + suffix = COMPANY["name"] + return ( + DOCS_DIR / f"多方分账业务合作协议-{suffix}.docx", + DOCS_DIR / f"汇付分账40%申请填写说明-{suffix}.docx", + ) + + +def set_run_font(run, name="宋体", size=12, bold=False): + run.font.name = name + run._element.rPr.rFonts.set(qn("w:eastAsia"), name) + run.font.size = Pt(size) + run.font.bold = bold + + +def add_para(doc, text, align=WD_ALIGN_PARAGRAPH.JUSTIFY, size=12, bold=False, space_after=6, first_line_indent=None): + p = doc.add_paragraph() + p.alignment = align + p.paragraph_format.line_spacing_rule = WD_LINE_SPACING.ONE_POINT_FIVE + p.paragraph_format.space_after = Pt(space_after) + if first_line_indent is not None: + p.paragraph_format.first_line_indent = Cm(first_line_indent) + run = p.add_run(text) + set_run_font(run, size=size, bold=bold) + return p + + +def add_heading_text(doc, text, level=1): + sizes = {1: 16, 2: 14, 3: 12} + add_para( + doc, + text, + align=WD_ALIGN_PARAGRAPH.CENTER if level == 1 else WD_ALIGN_PARAGRAPH.LEFT, + size=sizes.get(level, 12), + bold=True, + space_after=10, + ) + + +def add_info_table(doc, rows): + table = doc.add_table(rows=len(rows), cols=2) + table.style = "Table Grid" + for i, (k, v) in enumerate(rows): + table.rows[i].cells[0].text = k + table.rows[i].cells[1].text = v + for cell in table.rows[i].cells: + for para in cell.paragraphs: + para.paragraph_format.line_spacing_rule = WD_LINE_SPACING.SINGLE + for run in para.runs: + set_run_font(run, size=11) + doc.add_paragraph() + + +def build(): + contract_output, _ = output_paths() + c = COMPANY + + doc = Document() + section = doc.sections[0] + section.top_margin = Cm(2.54) + section.bottom_margin = Cm(2.54) + section.left_margin = Cm(3.17) + section.right_margin = Cm(3.17) + + add_heading_text(doc, "多方分账业务合作协议", level=1) + add_para(doc, "合同编号:XGXJ-FS-________", align=WD_ALIGN_PARAGRAPH.LEFT, space_after=4) + add_para(doc, f"签订地点:{c['sign_place']}", align=WD_ALIGN_PARAGRAPH.LEFT, space_after=4) + add_para(doc, "签订日期:________年____月____日", align=WD_ALIGN_PARAGRAPH.LEFT, space_after=12) + + add_heading_text(doc, "甲方(平台/分账发起方)", level=2) + add_info_table(doc, [ + ("名称", c["name"]), + ("统一社会信用代码", c["credit_code"]), + ("法定代表人", c["legal_person"]), + ("住所", c["address"]), + ("联系电话", c["phone"]), + ("汇付商户号", c["huifu_id"]), + ]) + + add_heading_text(doc, "乙方(分账接收方)", level=2) + add_para(doc, "主体类型(择一填写):□ 个体工商户 □ 个人(汇付进件用户)", space_after=8) + add_info_table(doc, [ + ("姓名/字号", "____________"), + ("身份证号码", "____________________"), + ("住所/经营场所", "____________________"), + ("联系电话", "____________"), + ("汇付商户号", "____________"), + ("合作角色", "□ 推广员 □ 区域代理(区域:____________)"), + ]) + + add_para( + doc, + f"鉴于甲方依法经营“{c['miniprogram']}”微信小程序商城,乙方自愿成为甲方推广员和/或区域代理;" + "双方依据《中华人民共和国民法典》及相关法规,就通过汇付天下有限公司(以下简称“汇付”)" + "支付通道进行延时分账结算事宜,达成如下协议:", + first_line_indent=0.74, + space_after=10, + ) + + articles = [ + ("第一条 合作内容与范围", [ + "1.1 乙方在甲方平台注册并通过甲方审核后,以推广员和/或区域代理身份开展市场拓展、客户维护及销售促成活动。乙方非甲方员工,不建立劳动关系。", + "1.2 甲方负责商品供应、定价、订单处理、发货、开票(如需)及售后服务;乙方应遵守甲方公布的《分销管理办法》《区域代理管理办法》及平台规则。", + "1.3 乙方不得擅自以甲方名义对外签约、收款或销售非甲方授权商品;不得发布虚假广告或实施误导消费者行为。", + ]), + ("第二条 服务费计算与结算", [ + "2.1 乙方服务费自甲方与消费者之间真实、合法、有效的商品交易产生,按甲方系统在订单生成时已生效的规则计算:", + "(1)推广员:按订单商品实付金额(不含运费,下同)及乙方等级对应比例计算推广服务费;具体比例以甲方后台“分销等级”配置及商品独立规则为准。", + "(2)区域代理:按订单收货地址所在行政区域及乙方代理层级,以实付金额为基数按约定比例或固定金额计算区域服务费;具体以甲方后台“区域公司等级”配置为准。", + "2.2 结算时点:消费者确认收货或订单达到“已完成”状态后,甲方系统触发分账。此前服务费处于待结算状态,不视为已到期应付。", + f"2.3 分账方式:甲方通过汇付延时分账功能,将乙方应得服务费划转至乙方汇付商户号(huifu_id)。乙方应配合完成汇付进件、实名认证、银行卡绑定及与甲方主商户({c['huifu_id']})的分账关系建立。", + "2.4 上限说明:单笔订单向全部分账接收方(含各级推广员、区域代理)划转总额不超过该笔订单实付金额的40%。若规则计算结果超过上限,按甲方系统裁切规则执行,乙方无异议。", + "2.5 退款扣减:订单发生退款、退货或撤销的,对应推广服务费、区域服务费予以扣减或追回;已分账的,乙方应在收到甲方通知后配合退回或同意从后续结算中抵扣。", + "2.6 甲方不向乙方承诺固定收入或最低收益。乙方因推广活动产生的通讯、交通、税费(除汇付及法定代扣代缴外)等成本由乙方自行承担。", + ]), + ("第三条 汇付分账授权", [ + f"3.1 乙方知悉并同意:甲方作为汇付主商户(商户号:{c['huifu_id']}),在符合本协议及平台规则的前提下,通过汇付接口将属于乙方的服务费直接分账至乙方汇付账户,该行为已获乙方授权,视为甲方已向乙方履行付款义务。", + "3.2 乙方汇付账户提现、结算周期及手续费,按汇付公示及乙方进件协议执行,与甲方无关。", + "3.3 乙方应确保进件信息、结算银行卡真实有效;因乙方账户异常导致分账失败的,甲方有权暂缓支付并在乙方更正后重新发起,不构成违约。", + ]), + ("第四条 双方权利义务", [ + "4.1 甲方权利义务", + "(1)按本协议及平台规则计算并发起分账;", + "(2)向乙方提供必要的后台查询、业绩统计;", + "(3)对乙方违规行为有权警告、暂停分账、取消资格;", + "(4)依法履行平台经营义务及消费者保护责任。", + "4.2 乙方权利义务", + "(1)合法合规开展推广,维护甲方品牌形象;", + "(2)对获知的消费者信息、价格政策、商业数据保密;", + "(3)不得恶意刷单、虚假交易、套取分账;", + "(4)配合甲方及汇付、监管部门的合规核查,提供真实资料。", + ]), + ("第五条 知识产权与宣传规范", [ + f"5.1 “{c['miniprogram']}”商标、Logo、商品图片、文案等知识产权归甲方或权利人所有。乙方仅在推广范围内非独占使用,不得申请注册相同或近似标识。", + "5.2 乙方对外宣传内容须与甲方官方信息一致;未经书面许可,不得使用“官方独家”“保底收益”等表述。", + ]), + ("第六条 保密条款", [ + "6.1 一方对另一方的商业信息、技术信息、客户名单、分账规则细节等负有保密义务,未经书面同意不得向第三方披露,法律法规或监管机构要求除外。", + "6.2 本条款在协议终止后仍有效,期限为三年。", + ]), + ("第七条 协议期限与终止", [ + "7.1 本协议自双方签字/盖章之日起生效,有效期一年;期满前30日未书面提出终止的,自动续期一年,续期次数不限。", + "7.2 出现下列情形之一,守约方可单方解除协议:", + "(1)一方严重违约,经书面催告后7日内未纠正;", + "(2)乙方存在虚假交易、洗钱、传销、销售假冒伪劣商品等违法行为;", + "(3)乙方汇付账户被冻结、注销且30日内无法恢复;", + "(4)法律法规或监管要求必须终止。", + "7.3 协议终止后,对已发生且符合结算条件的交易,甲方仍应按本协议完成分账;未结算的合法收益不受影响。终止不影响违约责任及保密义务。", + ]), + ("第八条 违约责任", [ + "8.1 乙方违反本协议给甲方造成损失的,应赔偿甲方全部直接损失及合理维权费用。", + "8.2 因乙方虚假交易、违规宣传导致甲方被投诉、处罚的,乙方承担全部责任及费用。", + "8.3 甲方无正当理由拖延符合结算条件的分账超过15个工作日的,可按中国人民银行同期贷款市场报价利率(LPR)向乙方支付迟延部分利息。", + ]), + ("第九条 不可抗力", [ + "因地震、洪水、战争、政府行为、支付通道系统故障、网络攻击等不可抗力导致不能履行义务的,受影响方应及时通知对方并提供证明,相应顺延履行期限;持续超过60日的,任何一方可解除协议。", + ]), + ("第十条 争议解决", [ + "因本协议引起的争议,双方应协商解决;协商不成的,提交甲方住所地有管辖权的人民法院诉讼解决。", + ]), + ("第十一条 其他", [ + "11.1 本协议未尽事宜,按甲方平台公示规则执行;规则与本协议冲突的,以本协议为准。", + "11.2 本协议一式两份,甲乙双方各执一份,具有同等法律效力。电子签章与原件具有同等效力(如适用)。", + "11.3 附件为本协议组成部分,与正文具有同等效力:", + "附件一:乙方身份证复印件/营业执照副本", + "附件二:汇付进件及分账关系确认截图", + "附件三:甲方当期分销/区域代理等级及比例说明(后台导出)", + ]), + ] + + for title, items in articles: + add_heading_text(doc, title, level=3) + for item in items: + add_para(doc, item, first_line_indent=0.74, space_after=4) + + doc.add_page_break() + + add_heading_text(doc, "签署页", level=2) + add_para(doc, f"甲方(盖章):{c['name']}", space_after=8) + add_para(doc, "法定代表人/授权代表(签字):________________", space_after=8) + add_para(doc, "日期:________年____月____日", space_after=24) + add_para(doc, "乙方(签字/捺印):________________", space_after=8) + add_para(doc, "(个体工商户须加盖字号公章)", space_after=8) + add_para(doc, "日期:________年____月____日", space_after=24) + + doc.add_page_break() + + add_heading_text(doc, "附件四:分账授权确认书", level=2) + add_para( + doc, + f"本人/本单位____________(汇付商户号:____________)," + f"系{c['name']}(汇付主商户号:{c['huifu_id']})之推广员/区域代理。", + first_line_indent=0.74, + space_after=8, + ) + add_para( + doc, + f"现确认:授权甲方在“{c['miniprogram']}”商城真实交易项下,依据双方签署的《多方分账业务合作协议》" + "及平台有效规则,通过汇付延时分账接口将本人/本单位应得推广服务费/区域服务费直接分账至上述汇付商户号。" + "本人/本单位已开通汇付收单及结算功能,结算银行卡为本人/本单位实名账户。", + first_line_indent=0.74, + space_after=8, + ) + add_para( + doc, + "本授权自签署之日起生效,至双方协议终止且待结算款项全部结清之日止。", + first_line_indent=0.74, + space_after=16, + ) + add_para(doc, "授权人(签字/盖章):________________ 日期:________", space_after=8) + + doc.save(str(contract_output)) + print(f"已生成: {contract_output}") + + +def build_apply_guide(): + _, apply_output = output_paths() + c = COMPANY + + doc = Document() + section = doc.sections[0] + section.top_margin = Cm(2.54) + section.bottom_margin = Cm(2.54) + section.left_margin = Cm(3.17) + section.right_margin = Cm(3.17) + + add_heading_text(doc, "汇付多方分账 40% 申请填写说明", level=1) + add_para( + doc, + f"商户:{c['name']} | 汇付商户号:{c['huifu_id']} | 小程序:{c['miniprogram']}", + align=WD_ALIGN_PARAGRAPH.CENTER, + space_after=12, + ) + + add_heading_text(doc, "一、表单字段填写", level=2) + table = doc.add_table(rows=6, cols=3) + table.style = "Table Grid" + headers = ["字段", "填写值", "说明"] + rows = [ + ("分账规则来源", "接口动态规则", "与商城系统一致,支付成功后由接口 delaytrans/confirm 传入 acct_split_bunch"), + ("申请分账最大比例", "40%", "见下文三段说明中的比例测算"), + ("分账手续费率", "0.05%", "与进件结算配置一致"), + ("分账手续费固定金额", "0.5元", "按汇付控台要求填写"), + ("分账模式", "线上/其他", "线上小程序零售"), + ] + for j, h in enumerate(headers): + table.rows[0].cells[j].text = h + for run in table.rows[0].cells[j].paragraphs[0].runs: + set_run_font(run, size=11, bold=True) + for i, row in enumerate(rows, start=1): + for j, val in enumerate(row): + table.rows[i].cells[j].text = val + for run in table.rows[i].cells[j].paragraphs[0].runs: + set_run_font(run, size=11) + doc.add_paragraph() + + sections = [ + ("二、业务模式说明(复制到汇付表单)", ( + f"我司为{c['name']}(以下简称“平台”),统一社会信用代码{c['credit_code']}," + "依法持有有效营业执照,主营酒类商品零售。" + f"平台运营微信小程序“{c['miniprogram']}”,向终端消费者在线销售自有及授权经销的酒类商品," + "负责商品展示、订单管理、收款、发货及售后处理。\n\n" + "平台采用“自营零售 + 推广分销 + 区域代理”模式开展经营,参与主体及权利义务如下:\n\n" + "(1)平台(收款商户):提供商品货源、定价、仓储发货、客服及退换货服务;承担商品质量、物流及消费者权益保障责任;" + f"通过汇付斗拱收单(主商户号:{c['huifu_id']}),并按订单结算规则向分账接收方支付推广服务费、区域代理服务费。\n\n" + "(2)推广员(分账接收方):经平台审核后成为分销商,通过分享商品链接、发展客户促成交易;" + "按平台《分销管理办法》及对应等级比例获得推广服务费;不得擅自变更价格、不得销售非平台授权商品。\n\n" + "(3)区域代理(分账接收方):经平台审核并绑定省/市/区县服务区域,按订单收货地址匹配;" + "负责区域内市场维护、客户咨询对接;按平台《区域代理管理办法》获得区域服务费;同一区域、同一层级仅设一家正式代理。\n\n" + "(4)消费者:在小程序下单支付,由平台统一发货,享有法定及平台承诺的售后服务。\n\n" + "分账金额依据订单实付金额及后台已生效的分销/区域规则计算,在消费者确认收货后执行延时分账," + "单笔订单分账总额不超过订单实付金额的40%。" + )), + ("三、资金流向说明(复制到汇付表单)", ( + "本业务资金全程通过汇付斗拱支付通道闭环流转,不涉及平台外私人账户代收代付。\n\n" + f"(1)资金流入:消费者在“{c['miniprogram']}”微信小程序选购商品,通过微信支付完成付款," + f"资金进入平台汇付商户号(主商户号:{c['huifu_id']})账户,交易类型为延时分账(delay_acct_flag=Y)," + "支付成功后资金暂存于汇付待确认分账余额。\n\n" + "(2)分账划出:订单达到分账条件(一般为确认收货或订单完成)后,平台系统调用汇付“交易确认/分账”接口," + "按订单实时计算结果向各分账接收方汇付子商户号(huifu_id)划转对应金额,主要包括:" + "①推广员推广服务费;②区域代理区域服务费。分账指令由系统接口动态生成,与控台静态规则无关。\n\n" + "(3)平台留存:分账完成后,订单实付金额扣除支付手续费及已分出金额后的余额," + f"留存在平台主商户({c['huifu_id']})汇付账户,作为货款及平台服务收入。\n\n" + "(4)资金流出:各分账接收方通过其汇付子商户账户,按汇付结算规则(T+1/D+1)" + "提现至其本人实名绑定的银行账户;平台主商户按同样规则将留存资金结算至公司对公账户。\n\n" + "(5)退款处理:发生退款时,按汇付及微信平台规则原路退回消费者;" + "已分账部分按平台制度及接口能力做回退或线下追偿处理,确保资金账实相符。\n\n" + "全部账户均为汇付体系内商户号或银行账户,可逐笔追溯、对账。" + )), + ("四、功能开通用途说明(复制到汇付表单)", ( + f"我司({c['name']},汇付商户号:{c['huifu_id']})申请开通汇付延时分账功能并将最大分账比例调整至40%,用途如下:\n\n" + f"(1)业务场景:{c['miniprogram']}商城存在推广分销(一至三级)及省/市/区县区域代理两类合作方," + "单笔订单可能同时产生推广服务费与区域服务费,需在消费者确认收货后自动、准确结算至各合作方汇付子商户," + "避免人工转账效率低、差错率高及合规风险。\n\n" + "(2)使用方式:支付环节开启延时分账;确认收货后,由商城后台系统调用汇付接口," + "依据订单绑定的推广关系、收货地址及商品分账规则,动态计算各接收方金额并发起分账。" + "分账接收方须事先完成汇付个人/商户进件并与主商户建立分账关系。\n\n" + "(3)分账对象类型:已签约的注册推广员、已审核通过的区域代理," + "均为与平台签署《多方分账业务合作协议》的独立民事主体。\n\n" + "(4)申请40%的原因:在三级分销叠加及区域代理“独占/级差”配置下," + "单笔订单理论分账比例峰值可能接近35%—38%;申请40%作为系统上限,用于覆盖规则调整余量。" + "实际运行中,单笔订单平均分账比例约15%—25%,平台主商户留存比例通常不低于60%。\n\n" + "(5)合规承诺:分账基于真实交易及已签署协议,不用于洗钱、套现、资金池归集等违规用途;" + "分账材料与业务实际一致,接受汇付及监管核查。" + )), + ] + + for title, body in sections: + add_heading_text(doc, title, level=2) + for para in body.split("\n\n"): + add_para(doc, para, first_line_indent=0.74, space_after=6) + + add_heading_text(doc, "五、附件上传建议", level=2) + for item in [ + f"1. 《多方分账业务合作协议》盖章扫描件(至少 1—2 份已签约样本,甲方:{c['name']});", + "2. 平台营业执照副本;", + f"3. 小程序“{c['miniprogram']}”首页及订单流程截图;", + "4. 分销/区域代理管理制度或后台规则截图。", + ]: + add_para(doc, item, space_after=4) + + add_heading_text(doc, "六、提交前核对", level=2) + for item in [ + "□ 控台 rule_origin=01(接口发起),与商城配置一致", + f"□ 主商户 {c['huifu_id']} 已开通延时分账", + "□ 表单比例 40% ≥ 商城 split_max_rate 配置", + f"□ 三份说明中公司名称、信用代码、商户号与营业执照及汇付控台一致", + "□ 已备至少一份与分账接收方签署的盖章协议", + ]: + add_para(doc, item, space_after=4) + + doc.save(str(apply_output)) + print(f"已生成: {apply_output}") + + +if __name__ == "__main__": + build() + build_apply_guide() diff --git a/addons/shopro_huifu/docs/多方分账业务合作协议-贵州宥川商贸有限公司.docx b/addons/shopro_huifu/docs/多方分账业务合作协议-贵州宥川商贸有限公司.docx new file mode 100644 index 0000000000000000000000000000000000000000..7934b673b86dc91d52c33f4ecb3259f6649d77ba GIT binary patch literal 41592 zcmagFV|b;_wgnp7wr$(CZQD*dwv&!+r(<^Pq&rr}wz*>5eBa*toW0Mv=iWc>de*F( zbBr-(y{qb(^(-Y>P%tzgARs6pOdl!z8kN%TslY%$zafBtP`|9YqK*!3<_>O#YTi!f zuKEmK_I53)@``IhNa0uS=xK}sMBhXa(W`cysGR7&X4IM9f?^^G0bz_EJ?lN4Z9m3ShnWNHJJb^G5&p UhJM B6^P6#gahh?CO-s*#QY+ueIw`n-938lM=z|0DPauMo}+^2 z)%=ULNmKKw+QkkiVF;AIO#QTi%Jq(4-wx^ChitGv^`9oBmLUZk6xQ6$L2ziwI>;`z z-n;nd1PRmXrafoZbrQdRr6Sr!lb34{799YCC-qx?wP>c=HYRWBOGgLJu0JqJDqa$h zuYbNS8Q-Z<+YDt|K81XC>DT_5e!ZA~ae8!qAC-Q%6TG+*$WfMP(O+D+9z49eJGmTm z&0(Vr`-xYo8TUDO=v76Kb4R5f0=qJE@I)SPO}M0(-Ig9>12z+BOB-EZCC(*;{2f?~ zz_^5^r|-S9?}ijNX8lvk+&AbozarLAGl4PJx+}3QI&4Xc#{={A;^X?no;HVIWDeOE zo%jK2PS_XUkV-nXl$0x3;L4&}eQaIqO^rA~MoL+#0!1Z-wK|mU0F9PdmVQYFDoLTE z_ea1M9^;e7@2*j_KR>#dvx|Y1?QZhh-Yao3bfW1#UN@|}d26qRN>-xlnOV1_m$mG7 zlaWd|KxLp*vSG-<`j5n%iBFS@L+M(yRYVe3-KdG7EH}~m459AI0?|UfRfS+yyQqm^ z?Kgkq7E3{?kkX ?`hnxc&nQtdjD|hS=+W09+}Pepz7tW|7tfZdUleDE@b-M4#JQjNtUIS^rMV z1NV!M3euNWwB~(!B3SzWL6M#aiqabv>TlKy$(}7pU4PB`FH?!DX!DduXAi1D9*>yL zB2f>4hP&U@GjM=*fDYlG&eT2`81bNV%9O;4_ExW+t$?4Xy36*icw$-$ht8cVqvLiT zbg}#lx@m7$!yB&v_n-O>!{3D82A3v03aysC?sT6<=JV@zyy{LC1r(1C4u2KxJjHDZ z>bC*J2;&`g8CHZ+_2RGCzvFzqI>Cw3druo7(XChFlRcs!YCEH9Hq4sVB7!$eAB{Iu zjG9+G23%=*HgBBw=+)*+>hLipCu}r(c#pEJ&?mM~?K%5;a%DmuaZ5t%t5<{{ z(ERLPT)Sxwh{`2(1f ZbyrD520Jml%XUFfK;SyZwsB+=12}gR~ znl9M2`y}m2lkViW^Qm^C`oB)YX{mXl2HjC0=cVz0DSsl<+xw0DS+wLh`fS}1Car~x zW8$}3fJbz>zbS}K*NVr_=@mxm6Ws&qchsxhYR~ZB^B8oLczKeSuC?Bb8PQ|JG4+{k z$2Hi;*%6;2dYSw-OT92W86n_M#31GhhneN1ZxwtZlI+kvqeY0RvaJUSafCzkG?#KF zt14%h x3@@JJN@3OBqS5wKNWVXE+pe-z(crdPHj zW=lnVu*TzhevgB?OwgfsOZ?-Vz0x!P>i#6*;Qb&j2H^3!cl&nvPWxH21}L9@UfeMn z@OpO+;JGk-%1?m3e*-3H 5@-ce5-N9MvzusEH(WG)-{J8Df56tyAx`>hraFCL^V9cbo-(co&p%SzL=+j zGi6Y SD{1&1TmU zCez%adHq~0xbQe}KG&yd6TSaUURQ-=u+sCN>TS9~Wnfz_xF0*)hrzMv-XBF-$c_G^ zo~ZoE!6O )VeM*re+q{r3F&nJ21V{itq>Z3v`}cYA~C_U7nUT zQuR7DQ-0y+BsM!$!|%?GRSi=wiVx7T_u&U{Zz#g@n@V~%9^a}?hb?|cQW>gim~I;$ zb*#ZLn=RmlkFiIbyQW*Aj!QndN5BvYYaj){m`~*dKC2At&drzk8LV7)t^38tr*$a) z`Lm}`Jj;sVYCFf#J!08L&zXTBLo7- zLM#E-th0Z^=5c*lEk6KEZHJ>6M!}7&s)C&-RGqn27d^(QYx1&2%PrR3*{?-g|GLiu zS! cG>D4Lv zmfRRK-Zt1)Tc70I67tc~G(1vmmvv{^T}QWMw!M;tSX44rg$|<;4~}f nU_<+3reibg$d7A#o0cMmM~KYJ}bytB% T(f5%Y#tb7H}a}&klg^;nVyD ze3eflu@6u9&j4Hywr~rKklDT+tHVYC*7To?8_{)jCYbi-VU@vX>VO8$S0WnrQ_!hR zw~SMy+8+|Q+HrI(fo*yp-<+*k@-&4zfVpKMS1yiG$V&1a$cGO}=h+yLk1d>4zb>tL zBnv8%k5iu_fy-p(;uyIU1*_f+z>7 *{CWT?_H(N6){8)wZ z(T9JYD;n}R1PXMmgr#ZqYQ8=>)+Y#}EjYSlCz%ipQ-YG0$1 vuAm~0dO=ACDDf<7o-j0h z_d16PC?G~A)dUG^316DI@e~W4uQF@Bh&NUYbbxxzQp1yQc{}@Pel}JuqRy%IIW*Nw z^1D!f($J)jyDkNc>j#V-@9h+oMl=(1TWm1=s@iC>!TYhJzoEG-v>=)o?gKafaoq;k z>2hfpc#|{TIb(0Wx^o}Uw_h3;CD;rN@L#nvEy8>^s391_Y-%!dyU_dglYofKp+$@T z>M^3%r;dP%?bRbK#Z`uQ^+1XJA&4@|lwBx+nRPa+Z^ 0!Tf|{R2zB}aWNTVD`7LL~@;tnXNc?_e6=YP%@jTZltGKPww6k^awYEa^SbkfU zSqh{MFKs3}-nA=`vtaTDq!Ft7yE$|>HmJfIQ7C2G3NySyqvmV$rV@Hd xFbX*v z=?Xbb`=qy@P4GztGEbw}K5|uE%v+VTx>D!Jnm7j` zxL{P`yq!);E&P_ebid~UIJh(Z#ITTop#N1OyEBy9WbISkWe39vs>Xk@Mc`O_sgfZ& z&^5XpYXL{ECk?}xG?~?k4K<)~FBdhft>%y+lA+OZ6|^a@DkPv-qty{<@2WA`igL`_ zQ5uK|<0bNwE#i1b1yH2lh@W(!ro>pcB!>eSz@21LzA_PT(l4*8&}=je-JG-#GEk(q z>xlIE%iZXh_4FU^-T!nq_?Nq+;$QCfNT=!-O@*Gx1c^(kXZZ|8n>p%DHMB3WKGfS` zAbCoRlf*vlYTXs-b`fU0=nLa#_9+tG*CP_4KI*T@#~bTV`+%=be@q3Z<)Ynqf | z%*i77lP6Cl{V2O!zDP F^K#8pJ}?=CWjYno0{69Et`7` zfPb}GSFyisqO!0!-;Oi6Y0Ar>3iROq@gc^Y8? cm<6TJYFf+}i z@-;g)+=7ZO?V2>2G2a@j? QAko?f~+*^Rp3-WQV{;QmGDcdX?wmEN~$%v zIaf}21mNfBhR^-Y$?T=7OkC(TPNOn!L_pIJInh@EHNUzTYK%9B=}Q%%f|Ph)@Z^aT z$$z6EsFwUE+H_^{{}-B=@Ca;Il;F?!9DYe&KlS-9MH1C&il+J1bx=|Q -gpaGv8+x(X}wc`qV8W4}JV`B$5*O *XsfHGNirl~wT};I=})P7pv=Xb3Q?-3HE}&4B*~;=mr`>_>MmF81QQheM$rI} zFus^R9r3OUReX7-PbGY_Y{hpQjr+@;sRw6BklWY2hf$koQEs-bP~2;O^QEKB enyx?;s6mVreXS(-5$i z#;IDUkYX@qr-5U@as)`sM6D!@kxw$3PcY&Zyx+Ak!N%}mbNHD$rYFMiHh?54A?BY} zt~#8tCKbAtl7`U`4UQVHo^H;DOkh@=kYkTb6^iv??O}qXfOFj-5<$6N;D{hRLOYv@ zOqlhJnb9&Y#4P;6CMJG{ub?u%PMD0%!aKQ{FuxFFtSf=cpN|>PYs=m2YZ1f* xWP2fmLWx=jiG^j2h9*6G7+MaFhFX^sIA9}p70=PVn9md&7l5frkSq| z$K3%OuRtfUg-V!h!t9gFT|pj0P2e|b%6tua9XX8FxWkq)ahQ`8AHoqPR1%1g12z_v zBLs~EYQlUQ969V3HmqdUikj&j6uABiWrbDp<=;4JFD^v0bR)>med(UQ-1*WCEihyf zeP&A;6LeJHv;+0GZh9Gru^>7bh{&LenC}>3bY--3;UrDDV?XQ-zy2`e(Q57UZ!B3k zv;JcFQt%f`fxa)6q)=Zhd8g!$LYOIWJFHZp#9%7c2!#+z-U)@^&aptPg@;T!227|} z)}kglgoJ9_EL+cP|1DzKjyyS2_o{~NunCPPV36~U_nn-6eLk9@4UzAh3UCjW76&p8 zLhwBtVyUEHpW-JpPr7wQuKlJwOZ;~qP5GyW!Ln)b#g+Tvf&ozrd2xWcaV{&iOLMC^ zZJB;Ykyhni*8O}aXOzEeqsU7tRA6oKbb%|<#-(Rl{C3h@6lZP_rc3mzk2;<$1f|sy z$4@l-K>JG0K8jXpyX0kyC6%NJ6WY5hB-E`T7J(c2J-Kj#x*;xGWqN0Y-JA^w>>+Nz zd^gL{j}H^oZhh{*j6>X=X-Q-hwxGHas7GH;&I #+Ju$*g@hHN|6&Mt!E{vtx|?J5 z4~F&sn_>D Eab)1F19|EyxIc%7i6qnW>pJ6|co zG^Zl2Ih$^>Ul2F{#bELm3)4gxRiET?R z`_f1p2(zSm@f+)d(p8co5g2CZKF Hxczo} zIL?0xF016I4xi?f{a|Jc-DQf{kFwuFzM}t`sfE`s+U24ZOddXnLJaGPo7RlY>laQA zaf*+a_V+1!vVEi2;$Pr(qF> 1A+-by1!F=878Cs% uRWrPbySUzSZptS7hCI$VtGnC_PWMmuHnF!6x75QD)QQoJGN}?!IsUUv7Qz zXg!xxwpd40WKEQ%u}M3wa+NC1Rs+f=U$7GQw!WkRiH~%A;>pMyVwLsdIW9uMeU9x{ zJ7rcGvOH>iZe^BZPMNf#I=;L2ytU4m- LWt)!Z%11`7 sBzgo=~a zI`1$fSrA3m2i @*%Z8g ziIgw5u6bntlUue}`%jU&t14IY^8XOY{o^l@quPIoyt4oQ6FF$D^Xj+BUTzKe5}Cy$ z|JN KoA8PUFFg6}Ti3;G-!?my+E8rksT sQ-F!Cw@Jc>jAJv!i{H`CEx&XMk;&7OD2OrZ@3-shoZpmoVP1m zJ`G(z76GssZB^lz?Ys+3Ucfz~xz{4jy=!g)Sgr$`=HdKSn)pI6R+3yo2xf!i|08*? z`~OPbh56mE-AG>OzZhZ}P#GRU8E$e}Ll7u|X7d2c4~q)V$Q~pjRj6=N0i~ &Nc3JtZm8!r5PGa@ozQYLYInnU9s2dS=QDTV6VMthNanC<=vmJ2Kn#xHj8Yuj>ylsXD+?bJP8 z+lbn758UGJH{&|GYyxND3lbK-@UDsoyWguMK>rgc>87_5S)o5PH^9@7@F7dIYY~ zXOJlAoA5+%!*3re >l_`4^bR67^MXJ`wa{NoL!}o0Ar4`)JIJ#8*SFvyt7CxZVmNtNdz?oBg2sChJOpy zU&h2AB2d@FU!M(xSrD&NYjZt2rW}BgY4{4Cw2+xkBLkcO%Lu 9yTt**#sy@#pya80|V|4oAU(NvR5 zTTyyq8q7&{qAo;&=rF=0y&@uTl);^O-X~_F?p?$4bV3omG;lPG5u{fCtc phnCO6 zeYH-Fc}W@hz}smVhL~|e6NnMdab10upx-QX9KS!eY&EOpK35i@UAG%SRvP{d)moqC zqpS5d)Rb?lR{J>=zHnxKUqOMN|Kgy?!?St<%-RtpPwlxtZ *SLPLDtCx DbLVwFg9EU{B$L~UVw^vkKLlZ-yVo{IBk>@bzv4e_P$3)kO<{q zQ$GKrR9+tors*9S*4^TVOCQ1@|H>b))P)Xb>T~MVRfywRHizhaY>~Y79>ryD6GJ3V z6g*s!qKT*|Rm$>MJs3G_t6dTbb|lF^k`>vO7sld^7R1O>Td2Yz;b{$i0)1xZ-g$f$n=V0nLqaZ~= 5)R-*a%SS^F6>{wXAECOA!4 ZYVnL)|LY+nKl&RI1z aoWCaP1Exw`kRuUUd^^< zgQw=ZodV61a&$qk;S#LBeNJE{?B-vDw Li8zCZpIc&?PxwabbFqGG$e z?lGI?05I}gxov6FkH`;sdIqj`Ey~V;{w9~}ueKr8M0)lgfgQ;-t~+yL6~F~)o~$!S zDz- dpgN(tcsfiJ1ue#7Yy-GvZ%H^Q?TKzpe`wc3@_AdD{q`YV8%9l#R8 zy?Y2)-+&|DEITHR;cS&&g_^vQK*GKvf~b<}{zE}PO16i873TlRn|j v`D2)!_L$uubZ60!lV}eKs~R2@cC{QUy&%&>@1xvT zPjMCpG6*>PKXvK8d>5U_T4CEqVGFVj0p=kuKT+;+_Y~Sd=`5-7an}{75=J5y^*DtF zZKiO5FaN=PcylPFqM%ApTCRT^1gZ~D#i<$_V_S|Q6!Kgp1GOvPrAK%Z|L36n{);&( z7$sDUg9Jl>J;;s@*iMQOB!gExaPJj|e(QNmAhlN}Ch#=|ND;8t9b^ROj|p9Whi@h{ zJ=eSOi{M-c0@WGY?z!8oSJ19t!_YBq$T96H2O1odKu|F)_Bnxo9)D6>q` y7+D+j_eON1op640skm zUq8KL6m0Kx^~(PMi1nfY04OQ^4ba|=ibu({Db8gJ`CvcrJ~VG|;2gNej%$p@HGeI; zP6Rd_-6H9??XEI*297uUwHO4Ckzh#Ce{VYo3o7OhbPVhtQ}TZp;6zbeq@e ;RWz{_kbAz;yDqA zeb#i~R@fPf|F`VeTm-|HB`xmTOu%R}j|cbd lRf=D^Ex{4BSQdkZ>1;wH<{mTW;l5g&g$3$4CsaJy-i;SQ9a|j@ zRrQxy+{uxfuAK|y+|M@XXuNq6gT<`c>b9AK=m(F5A+pc#+VCVVv7ZKqnJ#D(ZY$@) zF<`QK+O#nf^t47f;mWqyz}{0@P{EUU?4oBrO4{Q%2OJ3|AyIu#9-gh)js`iAX?F>x zZJnZr+72P}sS-{A+1Yh%oIqu~A4(bMk=564i%CisM(0ZFsRhEIV4}HZ%JxXZ)ByJK zqh)3`G{iSCT gj`y<3O`IIM z?YRxHOV&u|qow8GIH+TB_fs)6p{Qj6{9abdVuTb#%T&r5sbR=^PanDT(wn*(nhcEb z^o$J|SsBzV_b|OsqR=Kv)o>pif}A?G>8dUH2YgRHHil =%fVVYDbs1*52BIYQ#vr_ zY-&;%ms)pfvl<$hZDayc_ocG3u+n-zR+8hzTgVhw&d>zqn7w3uJ;}c98zZe%PY)nZ zJp>Nz?YFI*Naq!s++=#b>CEq2mfW-|W=w-AJ$w+LmvFLh5b3>8+io5Zq(D_fa1t1G z`Oz|P5@rxapRE8nlT<$EnBEZ E6{Jar z0UGPmh5aeBcOvL%#t2n(scP Fh@Qgd>W ze`8qgfUNKZMWqE4q`Oz`x9Qu}%mhtT!wRojiOmtSM4hE7K!KQ<3_|SisX<(#%2&dr zCqvt#c&JeTVg6T%J_hVHP)?k2ngg7z{|aMhvSDE2 CzZYvz+EMTL70xaI!ch%XOK?D@~HGj;kx`+sPfUTr}rf zwaYFwf7hrbc&D6?muW)@>S4;}V1a36R(n3&F7+8t_hvMS;~`Bq&k{Q^8D01UNrVs^ zpu< f_Lwno3W{u;44Ub6@7J$$oN$F)#VR&k?;%O{1j!;3i}*w;V!karG6mMBe# zDL_B4QJjAbmJ1))859Q4>;)IS)~-UONpfD46$N+yA{PkL=?_ESC{0!>q!^F~A`Jcn zsvCqvSKFPSe^AbmFQV_^WXIrJ;UW@}pk`-L3UqlZp_osonE$k?;}Zm9Fz|@_-6yw6 zG-Ms#Bu~V^ibWVa5ay>4`0}65c>8KgRGP;I{oi%iShs4Y!7$|f$#aUpn~LA_L 84`xgrxcc{Nv zfaP4;Yem;Peyy-V=kpu0*dFWn>RftN(|`CK5qVcVf24=PSaB(-xa)!%(L-q?n2g3N zOvt~;+7VSR9_s^YlU*P6=Q {@*(*Xe?TTK%^*^g8*Tjse-Js`OP10cf z_CkG{-87vZD0n_P9GSG}BVugKhdvGmz%wchNk~FxoJA4P7Ob>XK%7Xnl(0>UqL)-J z;Uwj4-Ib3U2=&6p1P*ZsU~HTN7lXN_8YdbJ$6cets4!^NeMnb-@}`d?{vV*Kzkp!= z4b%Vt%6~VyxEF=F7i^G_GB}f`*WNd1_x}rFPm>=|w|E(3N&(-ip~s7i%8#%q`(Fl= z6$we@s}L_A@$vRH!#0^>9>oYH!>FM9a$JTf`{_RPyUmcDn z!y!@}58_QqMhq?j<3a-7R3&l_$QR4Ci1@bxa4#;0; -=E6wVfJ z?G40>6zdULqS3Zrh@h#FluJ>mOV80P0r~vSa(n>_%$A_2ADi3bj_nQDl+CvdkP$m7 zU(lra5j#4FL&m#fJ|6x4dw#yYN8mg+I}ngl4FnL*f6vcXw{SKWH#Idea{ha&zK>37 zp+x=p%M*Ij$)G|`3J~$=xX%;{$dK;%-gWxJqd-N)f=)(t!ifw`3t+asP_949NUYRI z@VRdqwGeh(8>`bWLippm-@Cg<*NacvMis~DpDnl#j>kjWHs2M#>ZRN*zuQZ_Jv+*+ z_49|w`@LO{2HmcY!|8*I%#WwbkLUMOxAwQ(>G2Jno0t2G_L>^R%gfvcz!d(?&NY5M zdOeKx?#@br=FE-5`FA_S%v85bg {M;<}*2aB`x}O-@0xo_1JOuPQ%6>k$7nXc*e;AHCB@X8X zXNI+;9(ek-cDk({I63xb-d|YUd!BQyE+r%?97)g+a^2SI>4oL|$_rZ?T;BJqhQC>V z-@BG%oF3+_v320u#)@zJKF;WFOKf-RO{sb1lYE+CedMcly4G#SX;-tnq-I(5*81*f zL8}QN_KPQ4>0#E@lJj=Q;yOb%FE#Aa_qAiw8j~ Rd*$dsNlp>`=XDd zY1_)VS^FZ17Yh&mmubNtm@IxzwQFVwkQKv=Z|zz48+xN(yBTw~ws@x|%bu$5_HPZ} zp1d8~-XFFI>;I&4-!U^kz5CX^J@lXb>icuavSI&Bx~%j)KwWLC6XV(T&rf#^d|Tsd zi*DJaX5&Ydis=e8wy71tkL#Ki=LrnE7rA!^-3GUK&U6B5xRaf>KcgfMJFS@Hm~?`G zQOw7B@7G!d`HpTu4F!bvmtno;ib)R5^{p+1l9C|86vhfdwb 6-|BUX`d^)%D~|3c+oS44 zaqTKj>G2WKWC;=8KN>c6+6u>H`ROr_t9>{tn>ffD51DW=?S{!Mhe<8X#1>){7N*il zv!RuERR&!jGQ&uf8*Exta&k9>VlK@%q4r)@;qxASU4sa_ayNQH0Ed2W0}f#U4zWJm z3wmkby>~tBNWrmpS3gXT|GKx4s>{lGNN?A}SQ|V#-@QL(H~{A?KFN5xdT^L_n->kt ze6QWIResPm8h3!Q7H6zch}^JLw~IF9@|Dxv+}LWV7}oMCOn9pr>SLUa3_F-Vd~#^( zd~tai)-8|E<#Z#A!7KIcf%ZHoSv)Fv)9DK%^q_kt2kkZ4FIlwJv&-MlZ>6(`uhs+E zz=8eH5UAeNo#G$tjrUINi&3!~R;f!wfSK-(N{Y7U`(9&6hVPw2iA{^U mz}L?JvD3`zm^)Htt;Q;7e0P#P6bG zpeBop8a+uT^>q3Xral- Q%dq^9m#~fO}1z7l8yR)c%0cAYIW0uSB-42U$XM)As!$wpQ&g z9QdZ*gVQTPryp%EdARMP%F7Z)U5=mLk9Hn2VG!pkX*(2#QY*173#~!A4#HK5YzsX3 zs0p$Z-t6!BWk4G!Ot_EUzaM7@qsJiH9(Ma`tgIObK}8jCg8CQW1kpL*L>%Bmtwbxh z{l6jbmY`aI-ZF5z$#*{!{VVrpBKJufV7%hePn5<__`gv8Gr@nN{GVB1vA2NRrxpAH z;gX%T1;&H0XaPb93I>3&{} -Hj{YMC(Z^47u?(@ z&VMHO56!g_jo=H~B%6R_D1c<2(h#g1E2N(h9&T@9UP2Ct540&>Yorr9fPB3d{OASg zTgLA}hfnFz)TXCt^iy`>@AMm<9Ebl%`)dc{F?&_SPFGCs{3sQ)gNw4-(*HPmy$Cxv z$R6wagBpb^E$BY(yXng1`h3CD=KXPGHFsk5z+N@H#|c~FHjaq-{^ klyft}`+g$M$8);nm-p0_m zbAJ=-b3A&q_&ol!zk2s-Q8)R`5kLGkM5XP5D{IOdIsNtCq|N({yRF+T#7MAeX3p1kAU+}A6FA!O``N~6Y zrAV_ReZm^d1hSlJo%uKgBIfbV-0|i?7Hc5NYmiHQw*q)r2us(ktSX2I)PvkBkq7p= zf>th(!aIeZYoK<0=AzZ1K7PvFih&P6<*1Un7a;d0c9FVU3j{8PgbMG7Ntk2Jh qx_@(>26GV!FC5M2(_A?k3YCO9h~ z*Q izWk8Y?c4 zdEk4i^)|mZR{z>4sLO#TTh8#>x_ZgUh(~XWX!o$dmLBu #21;$1whf zL%*nPN 628M0(Z!(Ioeg+G 3dnq|xNlsW(M%}kl%WfWCbiUgN?$~|MXr~Kx9@>1l?$Ot_-w=lS z9qRcvoxeSc$!{#VAGdap_&Ub7VA5@#Wu@kF{eV3jnQhkB1=ba)`>i&%%U6{yvs9Ug z5031G-?blYN^ Ll?0bK_%Y07I+(=xPXWs(ieD*Cw zmuxx2TAUqO!9E#XtZsqE5!$^<%6)hGjw 6x3&f;<_hy(-TwEXgEE#-u(i*wHas!nmKTl4mI#d-a+F@|Q7tBFu{b_yH zxMV_Zb(B9YmNHq~Zq1d}xMbG5c6(cI=(w59z*OE0 Y;Xli8t?4z1W2?bBJ0xjV}@H571e=i>vEhM$dNF2-~Bq3-i-?d6AWPdIy~ zU5X_fMN_7{O_nEmJd2H^j0 ;pm%Rn@B@|P^e!+7-P&B( zxb5E^egzz}cG 5Fz zSG(;YTS}F4lKi1r2OqpnwDH`NtOil%8;DQMlRA{6hboJ(Pirt2kVCd)g6BH?wj2T6 zgO+3E?eN*n9`*Zu+6#GvXnzxITw#I*jUdwc^=|Ku;6oV8&mO=o_WHes2dwtLIMM zjjVCSzO&<7!0hWMuQuI#kVNkBXQY9QWfp dA&TJWbLiX!# z&klb^hc_;VTX7Trh#;ZvdCEqOGBZO^WPBkdh6 jW!1Szl{br(ChuDd&QR&E%q#keZBsnNL z7#mTu1#;GsSzmLlaAd3w9m<*;tz7z@iX6XY1veE2XyUy!i~I~ZnUTEh4q*^{SCuhO zB#l=cZH8jT#4ca0#7X=4ZejlMn3~rlj+Hw0O?E>xBu3OVVNY+YB7G-e6kh72PG&g3 zF) 0RNv9Fy*}ooYz$1iQT@-2oF;Cc&6fi& z<%$5Gs!WxTv(vB6J{NQMPYkQpxu_?4oB6lB=G)26=I@CoEq%UHFjpCyUG%16D;vMs zXr2^ReHm)ZvgUruqkBlPnB+o94%yflkNwnOPaYRMI`UMR@SVUYqB)n6U}049>&T|d zXgOvmS@k{e L7zp5?upNh&Nrp{;5aynIk@ahO%CRF%BQgZ=9OQSAJ+cy5Z?$JpSk z>(az`Vy(=tw8e{NSo0yrtazdJ8Dtyw(Io@J|8;2SEpYs4TMi^=B1Wyb2M_Ps&!!6k z@T3{GsFym0kCB?zAM$ ?Zg(&k zPVQMVK=NI&{^%q64d_$aI#^qk?yde~a1oQLmb`Zn%1WAE(|LOVXO^ew`GF2)-2Wrs ziztkyO_A~$0$pLUy_J7&Gc(k3@p2`Pb3a!EOy$p!#qD(sJ~*%oISXIZP%oAE!y?>^ z$pt5$Wm>Pb!tM+BBW g8@RsCWA>UDz#`px znwlx zQ-1L2!SHNp|!(*E8z`UDmn1IPJa8Hf4i|u;j*{#Wy;4tO+mR z*Kr+3EDKW%-Sn}Wg1tcDnxlnVIo}Q!ebGWlDQaAuBzHD7cmUj@DYrL`Sz}%2I qJQ)YZEr?_t!G+u%*+4eys+Pu1AVZycTs#f+H~)=7Wni3&rY5#@;29P-I2YO z69W-6z-te-m2(wFDcjkOWH}d6rhs! T?reC^q)ocpUDKf{eFW=@2&2SHy-UCUz)SMIKsBq16xyXL4MU+ zFeSH4=kUVEX12sGA74~dk$Wx+Z_ws1H6huC65C1`Q4a<9$gNPix&uLJ0}-ElUK>}+ z*A&XC!|Ty`Y3_{{4N~S1mzA4P60jKbQ(DbY(r(k|cB1NPqUxr5r rRY}`b z`L}qJ=m99YTirnKxfBK2aqaNk7r@$0%Gkj>^~`Y3G`B$LH^RYD+nryoEgB`Kx^mTA zWSO8Q_Hc{xyr;}x6XGzc9?i_Z+Tmn`eX+>-(iY8m`o>`6^`} 2^K>s&4JZ1lG?9sfs??#SywzilozUL}G0AhE@|!HKf(@BCHh0?kNtN$UKE zL{;s4_B)&1f-&&JDv9L5m}9Z>>y_(~mFIJ9;otYfXtBoxL>Iw*Qn$j-mxk2ZLUdje zD+O6SI_;{(!a0V(wfI1|JrrAgKa#z3PUMeWk`}Xx&dnG_T_{D%dFwjtbRfV|5f)0u z=)L2fZ2sJzQ!^>k+-Is7h*emx$OGd+z0=DZpegplh29|^6FT<{H5I840|AM$G7X^3 z&%p0d{ahJau9_q`muCWkS`cx aS4N>`4V9&3Wi25j!ZJ58=6oM znuKQZbo>(zih+PCB18KTiKJEswYH>O$0EEZtKL-$e8{z&fkbR(7foVOcS1iH3W)>= zzt(~NST!7|X9fKqNzO^po{va>PFZ3xs^dS6;E{ig?XzQ!}aUdsvcAy7bYlRZc(3jJJJVu_Jem7XUD zF|L$iKwy^n+|iC$v_hMv;Xp(!g!?~5!ALiedZCCxP({IXnKGxpSgOUs_y&s6Fb6FC zK=}^c$e1W0o9EG{1=a^4){u0KEffw!48qF>e1To)HCV3GFlL1el|IvEZGn#Uw9F9< z#lsT9ZH27C8p0f;oz@G5tnoUM2l`M=o(+Qxgq0CMT$;l(OE*Pn+?_E7xElVmXco1= zfZFbfmhnlhJVe0+M8GIQp?0qq{>aQ6V7`J~V>8VCoOs2s&@*(6WMf1pLE y2*-?a5tK&yaD*U9bY?+cOuS}@4^WH= rG2BEL__55y@2F$ii7yXAV+4Ibhatc;e3$(J{r jGMGjTw^S6I ~9w!9U- z%qU2Xqi3w8VVa?59+hu5PXr~Qenjzhk4L``o0>EFVZx4M=u0e3Ks=2gAq&VA-G zfayHJ!$8M- yArt5>GekQ2109$6~<0eo1kh4b^S g9dSoELT_5C}_&t<})9kPrhI``GWtLMp6ard`j77-EM zj~^#U9lnVj@7KlxQ2Y-N?B(luMI1ilPRfM$Wmrj1MGAvC>uzre7(4d>yn)lyT$E@= z7J53?Nk+DznHG`wK5rLU_cwrRX_=krnODzif1ayqJZ$=!4g8c$B0Jv`<~mJu1;v5& z+}~Em&0!wpgL+$ygKlU!smkQ^Mzd6X5YU5I4tP}0M$v&&8viePP7n@Yb$kC?kDVX( z7t&_<(^E37-}kpB*M(A>srS1(`>@ iUZMh;U#Nil zV1ddttCT>iki(CNykGW~ys7<@g4z$%vq+`BU}j;gqoZO F{11F7O0dJ0Y@ zZ2FbF@MaZ#&@7#vr7ysKEAF J%>%|VZ`9p!dTZiROO|c)$pJ#6$`g{q zM=iHMR#a;Z{+7}S=ZL+}GGg-fZD$ZmKUM}>gsB0u7-@niZME&y1xPtN&i*cjO^nrP zfIQsv9tbo&)Eoj0i#)@jOG`qN2%|vrfhF7&X_6@8-YEpr$e+J_0D5*pH%){s$lUbk zW*Jz@MWk<*cMfTC0y&i^V-Xb27^eVRQ9sFiNL_C=zp@5ymd*=XjP(=axvejfxrYF~ zKE&LVQI rJ1`@y8-xo#)n`d&M*jBE|Q2U=^B0@e+8K! z&iKBIR)CHDw;0F&s~B^2wik=03hMN9U14Pk))y@;-V+UidhRRCa;@B+Tw1Ga(9TIM zZR}s%&;CX%)J+IF)v~Fy3>$0i4V#y9+;v_WRlaiVcW-awyMmeLhz-UL(smZ HWPY4vP`FrSPT$xb&h1%8qrRb)5KNm1g!hn?dMatK~|n zXnHqmqM{evLPBsL(u7(>6&}wu+b#Hn)Lv)Hi=H3vo6(bQVom&UAh`!L;C}l}NiN&M z_OO^4685kzTnaw+D&Z=gy}Q 9V;jH~EI;8^E%guu!bc7)(ywV4c(=XGSA2i*kT zaDcEW>WUZlZ%n5|lTk7H&%hnr7gFIdKjmA|9xVQmI!S8z87`A^qpYe3d_e!r9Or=E zxOR%3mH_zRz?v`#GwD;s4Gjza-zq$SgH3g!e1kmyB^e-Ln zqwDo7B>xW*E(MxdeuMYViYdyvK7Uz(n)YeMgYv&19!ddLp#DFs7&6!o8Qh0B3ad}N zvGgYM7#qJ{#Ti_->@t9B;r9h{t%`f2%e0)yn6TuQiE6a5X#;ETp4zxX)0 rV|oQ7Z#9{y`nYNiI713$-pZzIQHz?=Bm|N(&1joE;CzQo3@dRBc;P zjn-cSv@WzrIgo3axd V`!GCjAG8@jXYyho;Foc(mCUmGak^(2zbc_ZO2Z%w| zqFD-07O4wVbJeLt#%1|b)Cg2TSZLd Nopk6YVfe{L92oD*o zg<{1;Gr*mMzDu+uR7qSWPkBAsg57j!JjyO}DqOiEX6`YClTV_nHZxWo$!;hL0SF$A zp?`0*Fo|KMD#K)0o{GRTfD aH0x(TfS^aC) zDVB26*OYICRCEJ4^1&$)?1l%FRe8xem{tR!aE9;$IP^Uy!=;(@OQmRtL#mAU&f)A) zx-G? 2PZoS*gABkwCNw;(P^rZWAQ4(75{ zmHo-l0gQtxbhVq%v$v(-PJwcM#HS`nC!N8*a)v4nAG*7B?_ss%Bxh*N!k=Q%#7}1l ztM207uco0@4uuH<2!Hl7;O6|Y60O#AT4vrsscVI*Gx8)kq%={{8kxMXq3Q8H8+(na zXxz-IER>?~fEHMsD7lyNU0hEAk#JHIR77ca4yu$PgrG5*l0i%W1&%bT*&Y$X6J;8_ zn9?3;nabcvgt14tlu|sLDzg{19Da>EUep&yLY~FQJXIYybSLHHE>*a(Buk|_N^x{( zIv8bf&B(ln=L%_m8q+IL33T*BtkQybRpuzOz4U4RUhBMw&-#l-ZCP|wMLfcjDlcMn zT&mP?d+I1LVd9JJJqeX4dh*1mqBwaFimK9R4%%0;S}G}Y6Z$}!lW7z9^0Zz=?60b6 zMtKnu%7Y$Qp$*)Bz#0N*05yS2xkh$0zXCdSeO(ZZDPtiu7v^V6t^4dNW1uqlH`NL0 z 5E9Efmr! za8(GMT_AzyYvq(!YDolI`fnlhhSb@8yG)26hf$K>>Hx}szTgRI6L$dR!~)6xL74>P zzbSL2O`BTl4rb_cD2hkNk}05b3z+3UMwra;u!_YP8gVm75@uy!P&U5WjMu8aFOiqh z`0Xios5W{Cql_)`VVOZXo=eeNIz}n&gU{|0n%TjZoa_rn^K-6*>=vylX$#q6*pex! z^`sX>8eq)eNUg8y6 ;d!UWC< zn`GOwQ9&7+P5VR#kEhVw%L>qj5T&!|;QrePc#|OwDXuuchDd1$5}-B4N)9kl!X%4T zLZ`~ |uwc+403~ksIl5S4Ua{VNPz))qhlNw3Wc$|9){fx*=|9k2r&hjbUZgwrsu~Vd zw3R}A0l_LKdkPR;snX!d+NvEOMo6jlVp^&3_F}(M PAlg|`k&IOB+o9OIK|v7Q zQin8!EnLBc4lBG#7u9@%LqQ 94qa?B6Hk BJ9Wc>{sVAhn$Z+N!};vFFBID1co9D5AFrghVhbaD1) zWp>h;uwkiD<6pR5y>p2$a-kQN z5M}U;)QU(NYoSIsnp|KhuIy4z%YtB3$vSnEAIAT?&%Ew^<~a4DXtDzO0l`KJ8y3pY zVVVEL1xlNYH9R86i^1bUD+BC)G=EOTu`$nm^P3y6MU=O36M`_TvS(NxJocpMOz^rg zt%;a(-2o@aTOlobtGdZIk3s1|aHYbH1IqLgIXa7`$c(-C^x4j8X-`ZZH4PUM4STo- z)+MmADks(yq$3*zO&;2`y3h#?nAy1{>a_vqav+|aKK;O(A6|OL)KcKaUu~{V!Z|8X z^Akv{W1swvM#1>~DTD3^OB!tQ5D-;yV=OyO;YwD2nWl>P@7%@wjw7A1_m#YRt|uWu z2 xEqmv5bgy9f|L80omi}3s> zC8rN99`XxQ#0n@?h%40ekTBj&`$o6`&~msy8guu;9%78p>yGjO_BG@HA(CGnTi|05 z@O2m!!baR1F@8lU-!9^|S-4=MZ1o{vIW41?Ed;^X^0{y(Gi1M>tR}N5l6U{dAb2kE zSKw>NdFF^mK$Q3Om21GH_tZ<{wvBK>Kp?@t1Mz)NnYxBF{w4xQ8^$|8_!GzPs*q|z zU5ATt;c1RIT+lz4_+1~YEdxTB$ TnZ@i5p)+Zt-*Ct^OIXGa7nlz(Yrp61hOB{ zj~PM{*nayVhHnFo?STKQk^PvAe9MLj`2rqAIk@~kbAG0t`SB=<6_#k;_pOwFNF@3Z z^bva(kv_2kFbpCS;pg$nS1v=^mj$5jw3NgBS3Hhwv`;T&hpBcE^U!_~;|=sO;n@Q` z`wuCk0gwGqe>*1hnqP4ZNtrSDl;nOC!t?PJ>~F`ggsVIBIdU5W8St-fOKGB^oG`8- zCp5hd={||A_^W(MV!|&3$X5Pc^T7loiOd^3^xs;%10I87|E*;9Q54YWC7s7LeFYFK zDEit9<%k~p`3TqT<4f@M2eQFuX>eOjf6BRr#I*;M#x7#95kQV2%o`HIVMBs~yM`_2 zE@BV+E~4oKBLJ{<#rMggX{{j$;dr&Z-{OF)-#w0dLq3aGA!XlOJ;oUuqut* MEDcE}} z7G|sWlGjPuU|<)H)9VKuwLoEQUqGQ#S91bXoip&|OI8Es0k;%KiH86dJYVztnQ<7Z zJZqLI*QC$Ncc0;FycT0||M_*s5|5L%uG8xvV0kCE>_Y%d$tO(7-!MAzB~QxZ_@DW- zvkongzzV6IHrrNrf&tLj@=k=VhKx6124! R5WJ`iXW#yx!T9A%xKC&M zEJEk4L*^$`6fysyv-*8w1wUrx(%Yjl8%y3PEc;ODOm3Lfm#N3%qI!NE0%M!a&4Or$ zZH+Z9Lf%O_{}#6-J#U2jQwqG_{DcxX!oPvCd(C%azo>z6O};s1Z0rnVLcHn&MCz2Z z!P5cI=7jnzn$3vNvkwzavN+{gg-ztSChapaT{1jmQhNZz;7ZyUd9R%T?~j?#f@B@~ za! (i5Qm>f_=sCM}$!r)+ z6>o7&88KWP&Fea-#Eq!xrGv{~CoF_CYL>`T?N1uYu6y5_R5>{_JI$%I==MS{;?`6a zNh-(OyS9;VI%*lg s&%rHtk)cW_K@df_yhM1FLFZf!2 z5NvGYK3+ITsVUqvW&_8;nOz=B_r;wWp~^ti3}Q=tYiAk~yD**ALiQXVrh~Z=zh`nG zdN4!8;`P_Vj-b5m!HXCo8G{#;H&w>_o;MN958qB%YQ{gW2aXOm3``$Y-ZrmlXyWlF zV}{}m!Sy{@stJ7|{3_Bg_g#)vD!<7{&c9HRlT3=z9;d6J49QQ(Q$jQa+o_4t2WT1Q zYVA&RKBZ;PVtRhJK%m<~(8QYS6YvvQFEE^gILu2Q5w6Zwn9>3Yw_PMln>a$AW?e1J zoB&kP66>*G2Lo^iMMWLo(j7&VOc2JTclvUuDM_lvsVF}~QUXG9AE!E^C=@W!RG7K9 zLyK?+ID#CA!P%M8Q0~>Sx~*Kovsw`gbGK!2eC4KwvoPr7CbU)Jwg7cfl;0;>9($OB z5OSuaoTW+wI|CD=3pELHL>X$hj(YQ;I*rfEO3TkmTEL=Hk*AV@7vZM GL>YN@6Q2S3<%{H1zO#8edG^X}a$eozEIA | zSVtB_Kpp=fMKT5*EupBaTqjGKS6T@booAo#fD;goOIM8?PKCsR695>50es!gKzSA; zb1C69gxtKgC(S?wvx8iSj}o9jM(5Gu1aP{6c2~OBQ1Bo`Z@
D uR17D~bb z&F0MZBld@9vqlfrS}V$%7TTlLfio TJty6wIRto%>G~R?6YqMjYCm9u`4K<};mFo*m+rItxpJEAeSuo#& z)kp%yEv3s;j8?>w+j*Sfu7!%@d7V}>`B{CIy=`;cG~Gk-4!WcZ)V+buyG)N2Z ;IZAXpF{%9_YVPz0|;((>`@1{Y%dUT1zEC^5VMi^`OG;{q7tGK83|!| zm*D$7d*uY_u%>(sVR=b|ZwX@lPg0W!^FLMFH63N*%`o>H?TJS$2yb%&vm)BCjog@w zV#sdC&Hf@)ev9az6_`bX4bHtNET64vzQ3txO;oZ&7h#zCw;`)=pL~)52!9z;oB|5q zBfXp%%<9S)oj$W7=BNcIC+<#ZS_DTJ$8uwUOOiLEOgAzz*>xOfxFZ%fQu7Ic&J&WB z{#oxn?VgpyKf=B&w3Wg#WOT>HMb=YfT&zz~!jYUizICKd%+3O_rsVU!5;Ecg>RRgv z+3*EAWxn*>dmVGFIo*pKny9au3fWYCLOmF8 Jm|q=9j@hnQUe1vs*Dyer8h9&I(XhXjBj{tzNAWA?K)TU?@0A0?`d5RYyyPQEck zT%Lc~Z8a)0y{clGu09%oL(=cgkyF=AU^0o0t5Gy0NunR`Vv$f!mp~$i0@w~zq;{mM zR_Ztjt+`=jCU)Kb&5-uAx0eJSu==>>{z@(ngMwawc=Me4PtAQkxPI)9Z*>9UfNl^F z49(POs&NwP8|(maz||ai1|OL;iEqFgnKgYBl%U?NiHLw +I&!MHWf%fnjL2BGJ_|(kb(d2A$KfT=mzI zW#avtP!VsIyUIg5>BKi6AJcf7yX1#IB$7K+hN A(*IIt4F^!i1=Z>Q zc7pzIFysAar+DX*zkzHqupw_(qvYEDMT&*)=Eg5E`}KcrK2s i0DhT|_Tw63iZ{ni~*=w=7mJ?dk!+D$nMYrx_IK=nRAHg}u}aQO;b zq-znQDW+-XXXrOiQ{7!o1H%f8S@5oT@X3Y(FpPn-Kw{LiG#t0H%O%#Y25d|z;So&K z`T{)u*giks&-Vn__316sfjyBZ4i3Cqo78?Jey48f`Q8=>0~Tmi#$ESV#)&F_=TtTH zV?RPeOHtz700mr_l{K34Q8^QC*XN0<1sw*LMWc?v%neW+oR($(BKY5CrsU=qn;_q3D4&7 zg^$3oGL?9 V;YxIGcRK!9bR&qq_>r5}(37Amk(W_=NhSeH52m@3E% z8K<8uYRq#Im$_?>>$4o~&?Wy!aSfnbTp3vEi^J!$Tv1vPoSR$1(UOEu-YDaUd%G4w zsBe~(+Khqb!3Z|0vn%aRKyL-Hl$-93%~wEKdypsku2N+Iu24PN#?LfTJCx-cgsZf% zJfwWL0@uT6e5DIQ^lg7yDzYRf5H9>Q{V6w)9W#ZwTus%g>{2Ww@u{MhVt6@{ww~qv zN?hjjYtS}F&SWuu9o{d}UN-r@eX<0wQD+AjXvQE-Z!ehd)d|OoH)t%;31=t95S*Ml zH~rF?xn`ZM@CjrBA;yvWmKiRc$2@&1EiVL3g4`MK?pAd~9WzOAYPP)cSrYlVc4b%Y zz^#niSfi(XL3<9cSn^oo_TTuC8gC+Snu1-NOlb=^JGbOTbCY&0TmA08k|+p$l$lg% zIoEu*Jl^}-$8|whR*RVA)m9d{t_{6zFR4ghKFzyvS7tXY&?MDu3P&i_zafD+@Mv`r z4mq%bD>~}^h={!<=<007<5n4hu2gQ~T?c(6D#59Z%flL}hu&2&DOvZOht9ILbT9)^ z`KO^$JMUfn$au_Mu`b8CNnPq-=h@sigO}#6$@fGXhgbIMGqWsFKj)h!W7&)R=ZaxJ zB$x4Zxj%9?KlDa7AUMuVH&MXHUAIUHO=y1;0I{z8xH7DpL>Hh0Ei@k-h1Io0n#{VD z&t&&{iLUO?s`ot2CrNpHyBcau|L%9Ny9wy0@Vf {?V*KL)(6q!D z(s1?&D-0` FBnc#qCyt?}K6IAw$qnJe!Sg`QhlZ2ZQ?eWN&n*c9EO+No& z)#SixzoQ^NCNA6b! }SXJKT4P}|KrTQDZP4BIdoqJrXuipIz|gGoAHE7C0o ze?|}qj~*Z~EMuvcK0^97$UTZ3m4}DFqJcMyi)?s8X&Wq 68}djAM5$x=x7{?9iC_B7JE3vXofKCn zA3=jnqq0K>-O|YKBy7!2d5q5A>}(dna~uYAzKZ72<7?L;c2EA2aM`Urs4foh@Q^=< zF|6K?)@*LT|J$(_?mQ e1>&`mpQPBP66o!4#STLit9I1}`EOdet*Cs?7QSA6L;V0>l zK&|yoxE|q=P@*_->LgNFJ3O6R$z&`sffdZri(@vP;cKcR26W;=Ni5o?N{7Qt2UfVh z{ ;B9v*Jc)^at#hV8M4>OT5Q4mRX*M>%H^)%F`rZPCVO^e@shagB~ zeyBz |eG$L&{Qugz>aeJ`uRYQwjevx7cY{bu2}6j4bV@fU zEz;fHAYB8<&XEd~^No{dwWJ^T#>Q+0S|3J!_w{_kPz}&)Hjm#gh6B zUwS27rllILX<5M0iwq-$lybJM@aV|&k_U4YT_Y@G4XbaF_l8RywEU-vYxF+^32z7J z+J7#>QqSSZuV^r{ZX>`txo(ZUF!&(i{y_9Z`pvq=Awu!W&xKtyH_x_*psG?mLD9w@ zSW&o^CpvGAsfQakS*nbtlg{yg5W7d-i6cTu|A4M$tJ_AWo_VHyHe`Ey6*}3213Nk? z?&CDPRU;NSos73~7i1xB<|LTNftca+#4g1dyP0-Blo$idnn$7EBH=!3;BFDhXRy+c zgcU}GPV{FnT2`}JX4xx@VO#chU@Vy2xNzTs8#@e#J95PAm9WBojUF@LD}+@Hl5u%F zja{@lP8P2>Sb1gSxZag~B9^S)S5dv@fQ-QTrRHG6Cv3#+S4ukrtk@G+C0pimM0WR; zOq8T){EPwsw6FjGME|^!u9oI@=A6He+`o4+(*Zg_1xVV@v~Zi(r!Jvx;mtC;b9*yI z5AhqMW9pvk+A^t8ZPT?s+;i&mGhVFj!Pu?usjig3+?}{ix2LGb-ZCU%o)2eIbKZmi z7wA#@Xf8y(I}BeQPQyYdA6$hxDP5oHY`pY%NVQyqecHDN_6oRx%sgH}xWuNLlG_6_ zui4Ck^cyiiXv7|9@{OaQ&iV}uJU!;5M)nZuj^~K$Lrr+*l!V7|QHt0BsPQwjh1N}9 z**tKs9v$X|EX*v9qe0QI2n*fz5CASWlyOhmSFG8{!RSzMPga6FYdVgWkXO=$`uT8i zt0Ku iMPzEFnsf)Kt0_Jo2$ECPfNIo@?B%6U;fA*m=? z< th&0x=wIWw#p=nAdF0d0QgLLlBpVK@eyj5Zuyur{f!v#_So~2eSsB&rJnzF zn>RiYcw1tU3ZE-~{SCLGVr|{aanQ#p`OLRYG|?rTkIeE>pS+w&fz>Ud6V9QUJkG_d zqp!k5r{wXblWfH3>W!bu{BrU=QQHrSg_>{YLoV^!BzmUZ=i(bQWwfhYj?>`T<;L{4 zJ`m-#9#RMTwG;l$<`w6S? fe zKkNw#$D9EZ-OxsEj}m4utTs%(FFCkz!}GC8#LJ1iia9_-B8dVN`0EIvX^swk?t^28 zYK1*Zpl5=_=3|bp1uz<5k{!)QjOe%+BvltzoIILeh>`raw#FH1%5n&zow ;D)ieieU*}V zTRc2N-WP;b#7#r^gS^*+`kW)fnq@H_>?CPs7gt&=o!aRY6bp@=pfgL@chlcOhIkq; z1O3I;ym-{9=8E#Q#mc@{dnQK*-K>Q+$HZyZN-g%7&XPx3zv;$sAyR7#RvJLd?|oZF z{l+t6=iQvRX2*$Hiz3uE=~}ryZgyGhx>IB^xX#$Pw)hGvCDB~_Vz!GCn1++Pf^v z^I;Ue9jeOH11pP?V)lv` mLGBq{BSSY)9Y*nfjMxr7g^Ws~o z=lc1c;Wl1WLAO%Y<$9V*vOF{J(_<^fPx$!jC0sz{3(?F`=SVH*OiH}wG0DEyDb>D( zZ|gsnaFwQvoz>-6wlXbr`#Y2@hR+B-a$O4us0S~V2(TIT
XMg49l3$EiX{(cLbDCL2Fo6;o0qkE471B$p=Qw&;R3@-9NM8=t zu$tDH(n&hgh}asyUA5$ss^^mRFku0^@tLx;xYFQ4-Leq5=m_c&3*C0qL_|`D5MR69 zbeerA9p%yBJlsS`_C0VYaaom;M<5=-P-g8|dhR+O8M>k3)s=fZ?l>r0UaP-HvA|JW zn+e_jVJBEl(J#l(Xo{w5piF{PCRE2h7^rC8f~jYFmex9%`YKTqP@Bq(2#~ry6qmj# z{VbfqxHf95xUQkJyTWaxEnvLL6Ic%!Ub?lPeKGBxi-tL8o1hdlydd?Oi7VA2^c0V@ z#ANA}eXZY92j%(Z@>LfE0se~FnbpSIjyC+6<&9ER^*rDBkQL8y4HhR{U2%3hm9^m< z)dEkY1`RS~nf(sRO++TWT(NZz4BiYX){pHXAe^n};itHU8h#ZF#JZm*C~>e0qjX+Z zPAyqSoE^|utA5_f|8$W|gJ&arwrpFG6-dJx3J#{8!n*Kjl~*?{^2IYyZtESA=a0QG zPZfFa@W~5w!ErQY`L*vRqOsCp*}VaFnlD6gN_nT{&|*AaJ4aezTlFqW()wjdOVbqO z8=p>=?rxZUm#>{0 IAo*@lcl_2HSN->Ro?V7ex%JK$#nU2$l5haZ_+Kh<~i!w{b zgfqC_ut_DQZX6*eS!;8W-t;ign*}@N&}tWQ_$z0?pzvFsQT5Z?)igGA=NO@Dkp4O9 z-H9*TPh_?jKH;Ij)hhw~Z0hFX>R_jBXUl2jYHs&?+N+GL!RY291f2QG48#u q3GBBjwE&d1Z5Ea z2wSaWF9tB*V>!-EEBcQ4_nH(Ws(6 QC8YisOv1t%q^Jmv`_I7=A|5|%VS6DLkkI- z73G)O^VJbad6p<{&s^-@ 1J_CKh8E%{LPl9n>w1>g2Mt zC&sn~B$Vh&HBRZR0Tj(Pe*K&*buIX&LLom>Yxu&uHc98?M{#d7ff`DsEt=xjv)2fB zA1Js*3AhS3*aU7k$sNQ0GFjEx!O`XSQ_YI4u@B%PlzG?QeY`fnor`2i7%C57wwZpR zPvP!IZ%Ye(9#wYZ1r*^o?R!_{x jsL4((O>)4br!)((C?+J2EL z5iu)d;idrkJ{lp{x64j_m6IqO*mTE~8);vTw!XGn4A;}j+Y5T4Z1fnA4P=Rb>2zI= zc*L^EfuCsVM8Z&^->T@_k4}5=2>w;6^DhlSr*v~QDVWQ|7|;CvmSU l_s| zFnfm+9#x(4<(_xYQq_7` kMSIbHO^BpzxmY4jRu3GOz=y7Jy~2Y|Amg)uikY-U78sA_7Ua_+ZJ$O7 zhIao*Uei8I1g+Z*mwwS=C8zZog-pDqSTWNITj7484&e>5MO81){rHPV0OQ;7gj=TS zqN%1+D=3sPv~(pL6Qi)1$R-FE1YMVPVo+T}X3(bO(^4JZ{XC;tt=8qFKAp!+tI=sG zr;s)bb3T!Z$a@~D7(PtROX rERoLhJ^h<#-(Yr-us5tU6gPg$E=)JHu zO}#RLU)Wl! ~ZIq3)IKX@~UYci5ZwOMkeWi@}!xbooOmQf-$jK z*hc(`5v2?)W@%W*Y|~P-IzSG!NM<^sF3d|ch}Z|H^$iIA1+FFi$@Y3iKgP=|w$D6r zmByv8Kvsz4mXOG@*c+1~`myIS+KYBny09Au56QIbBk26`ynFt4P6!G^jYSkB`$}2J zRqs|hV($uU0&_ewX}O9tDY}{6L1)rXXj+IC?BmmejHGDy6Dj!F~2eH@Z#R*y?`U zp_0M#sJ26?Wz;TxE&b2yL0&SPDE3)IA`5Kx9ylfSu8TLRczD;ss?&z?)pcr;Nw+s5q&n^ zgsdBT&u_L(pz2&x3!^I1M^l}myt`E>r~7@Uc$>4G`@_|e581eSS|87KV!7BD<&mOT z8%gsH3kS_J-sUacV%{CG^805j+K>T&Kq>%$7(QabH|YL7Ou;=bc>lCFwzB20b~Lxx z)3k9U&>$3R@e*XV`-02FPKesw!qZv6F2#x -Nl( zMVC=wukZHxeffqxW5@Vj=v-Kc=I)X|>e`3w!Bvhz 5Ltik+G zQzkmiwoMAlm~4^$eEq?EDY_WM!sJAL0oJR{PTOc)gg7cszTSdpzraU900Xi|KW!6P zTm#_n!8`552d)-l24id?aj=8u+0-Wf{a+Gi%Ue^AMUpr*`1qAsozo+__FOz-8>n+M zQ_MgrYu4C<{Y*su{#)-dEIG+d`e8U|3foJ)J`o?eal=4@C u8KFL3heu`->7Z^>IRNOipKv^v#n* zQub`o*d0IfT`k5Fd7*rZ%Q;3r#o&K}Eh<$Lb&7dGVpzcTD2FvAz0B@Ns8Y jFc6M^rQ<_cL`fxl8J0+Jf`h^$MLhJsx6;Y6NIZr)ET?23IXaFP<6A4X{ zLTnK?aL5ROG0`8H8;i!XbtMF#gY*N#@`(4H1mXh9tT18JAVIjN`CIX
+zH;T-(xX&QV3(ExZ*C>#du-}KZ0Y2NmF6+IyqHtZ>dIDLXBRP>0%}SoR7=w z_1s&-=(y@k_+FJx(ad2%ovq@GD$$MIn>3jKTb@0=>3<$cIpKD@`oqUg)$P;GvBkM> zJ8DkbuYo{+@vfZSa^i5V2ETYU+9h9l9A@T#^~cRe$z4ICVpBo!u3D8_535F%-7Ogd z!AU7Bc|JPb)?(H-^IuJuY?rKWj?y`B7U=B>8Un8TpaXkrVyFZS8L&;U^;7uleL&w< zPIeIU;T>p-43zAN0s{jc1VFeJxVltrNo-QhO5}Ta%}AXeng=s)kv= tbhz(HbCarEf%s0&944jN1XRtrs3UAXm(6U~&F )iF)vP8vv7dLjB20Kd$-C$$9rtQ(2rtd nIaRQ^lTS|MIF{%c#fUtcOQ;Y~^=SVzl+8)xhElQGzrsFcI z8)I|r=tB{o!PqH2!d(&!wjL+8RrhQot6{_~RFn0Ps3G==hlcADF@{NT4R3lj6Va3R z7HKm>M&Rpv6F@@>-n@w-PkLr`oS4~CG}7udv+LjORRO7wpWyNGa0BkG(Vu%RQg-Pc zoPZM7<<(t=c4k5-eb>jqFiJ1)Z$-t~zMJ#kv)|{r49%n%_?kn@L2VZ^(5Fit4L0Aa zV#JnC29|uT#IJXUdJKP(3wu_axi4=!jCfxyo?TnK7ka =JdOq+_LSGJd|4Qm1Xrko@R-|QZpS}AKX@4cpeqdz2AkWv8ou&yG ( z@L*7sIEUZ51dk(Q{)2{}{T_UVQ~bZi|1ItB14Dx`)ve&SjKhI=cYxpFCI6dyOdXtm zN22e;e?XzcFgV;62>`&o1Ah-M`5)Za(ec0jwVVwiN+w)^BE{UVJQdy$?;M=XIN=m- zc5vJO3vTa6hR*}9d Ftbq)`xx+L{@i&u; ztB0-m?{ww;Hn_i_ TV T_n^Oe6&}DC-aQ^<|8@0$MsU|* literal 0 HcmV?d00001 diff --git a/addons/shopro_huifu/docs/多方分账业务合作协议.docx b/addons/shopro_huifu/docs/多方分账业务合作协议.docx new file mode 100644 index 0000000000000000000000000000000000000000..7f8aff9966cc8cd91780b6e97d4204cde76cbb45 GIT binary patch literal 48366 zcmagF18`-*w>O#zC$??d=ETOtw#^ewGSS4gHE||(Cbn%GCpNw_|6AX!d*6FiZf@ zYxi!f)eHUW-o2IOARytu{#{{;yCVPo|L+A0BFr33m0cX2T$z ) zg8~ffQ11&E*8eQ#X60^g;$UoT$K+{maiI@z(^yCsmH`tFclq+|8!k9m!FL3e9OIH| zw%v>%QVOlza1oXAY?;z*72T>RzAAP(Y@PIUF-^;ofPNlRbsG&xdF89B4vGU(_0%e+ z!ISybMX8FI@9f=ME01yy?>u3ClM|h!BZB<4TYg>dd|Mv|uWPXYwSB~gjs#nxyN)lL z!%1O(r(lCaefH?E^aU(EQ0qI$9F2MB*! rVcM8fN`d ~#qf(Kh3aO{Y(X zZ`UK{o8LlvukM#)F`$WKOfyDfDR~{O8njHOF|<-*=Ce1S2vXF=zIWcyh6~qrA`0dF z?v73W911;3Z2Lp94TXPgZo2j_FE|r8m0op$B9yf$PF}9Jmt3EmzYGg3w-%&zTPxxH z*gQV&;kSWath0W(?rtO}2(j#Q2xGeL+V5|ZLHnd};Jtu^iGjWN-{M5dLZPL(w8HSH zj^gt_%+WsF(~bxsv`dL566KSbAOucl7cqlRsn&VROUkO A1l2oHTW@Xa|9tueBp5fpf6^=eSS*Mk{9^H!!L;^l**jwr?^4bUJ5yvu!7ga( zp;EY?DlWwY-HMoItr_~xW{k@o`~csARJ|!R|GWerXrR&h`yRiLPc>QX^6mNH+tz3U ztO>ate~$oTA*dlXIiFdfQ=_?hpWpe^-l!JzHYy%q0lDJhk_zaEkKA}O0R`i&R_YyQ zTE)YOB@v;oXwj!M_}l#M9Dn>s#JGc&g=SUlh!1|Xjq+;4#C5VyKOhc(dyu&Fx+T9T zu00<9V%5a_CEQS#D5j6hweh>XNcRNwxCzJH`JK3G4%9!N; **?4c`8_mc% z+tjqy?{ngPe$hgjHoIU=C$1W!)0SX2eaGT>ky+N=+H+E%X9i5(e6C&`-gKSiEC(kE zs4HXW{gqqK)}ZX`pH??_hrd3km39kfQm2J<>X_y1!-@K($QcKu=zG`?YFP8|0Z4hV z57wg>g&O)xZ3PW`8I-_zeC_=<(M2Tr#)~DVfJ}HMCT=%!#=gTzouur@VQ;nn;%Vz| znp^F`sd9!;urh6w(A|4$z~|hH -w1WVuBXE)=^6+RzQNcfd z8k(6pixEq*&Wz6B?5}EiOdqgI=o@MHJ$CrHD@8Mo`*-+IG^q97T#{|yq4?iOUhv&K z2z@pGHk@_PJAHkGa=NUUYUCXMuCoL~rnJ|nx)Q&EqO&%M(qujOg6FY KJ~Tj?+qTn73Ae>Wj2Z1Hu*U Vg3!({ zlYjLp`US1T5s?PpSL0%J5Q=yKxng{t_Zq-C#gTP&<-{){)N;H_2b5V^0u~s4wxjAl z#Gip7#tP(DWZiR)zpM%+Fu8}1@PSDTi^e^-LHdpOPPDF3>NXJ5Lu@*(Ay-4RP;342 zF@7**9rbrk)V#Iij>`BPe2Z8jET?VrN4)9xfGl41w^|NqPtm}YbW9t&E#qctYZ(P3 zIK1fJIorL81{n4=y&L% J8T>3&nCWSvzWcORO2f8LvQbGX=kO12 zg2%g5xFNz$^*s%S$G$m{1qo^J4#?1i0NI7+xn(H#O6IPH`MR-LcZMdO$BtIC5Dzdb zC`~MB8sF}1=5XUN1n0ZWZOj?xsW$IupO@4}=KbnU?!${c<7unWgf1d=2hu~ZzFWRO z>#5Q0i{@V8in{ii^(KgYHO@GhyIH6H4 }C>*Xv=4vb{~9Pvh^)sFvalV2)zqUWpm;M&jRqyG-|o~m vBs|4M6jjOgRRKJPr`r6OK<4oM{TbHlzDqQNP3XM=#N&uqm^O94V zP|G>kyF{vfX)N(T_1sYE`)lhlcXEo*Di~t>)hrkJhDPaUoZKr0$Xr&Lv6=Q$$C{7Q z qksMqM-NIucy`9 zE}^L 9;GC=}y_S|y&T0boU M z@+!w7{A2&BY5)3Bhp5&R|L5?RhkIUOrFY`iN-2c}agd!HYunzNhpkBSem-QiHFwtO zhpo^8oJ^whn0f z*ZMb?F1~~}gY(bQ%gBxzz|!ug#chB)wWylNerf~8GiIh7?qW}h;RmtADD!RaelwPN z9~BO-{CP}?#Y63t!dmtRhthrVABi^lD}7hZZI0Sb@R^TJ#@BS8AwgV1yNxxz_2W$u zb-1}s=%nnB*1d_b*2vtGt>N|QRIBp>UAB~JV7Nx`V{!ODfI%rgAP&cx3V?+*L~t*Q zWYW2#>YAQxIrO^3mrUQwWFft8ekFb%$%&h4#$}y&YB)-IbiPzFNX?gA&Z }K z41CVTW)dZ+>*gY8-drXe*Yd3PvAw-0{Ier(8pC00ZieVn9T*7-6q>R0AB_D9baRHD zrKXtikTM =y5x_8^!ZHYY#91|l0E zBl(WZK*6b`{hSXdD)r|q#6?O5 PsPC(?AI}9-Woxz>S_FcJg z&wf8Y1c;C3V!rKU$_+iWi>bI(Dqmt+XV2Cy(t_N?6yzq)DsF$M4^66_sbkM>a8DAg zTE0M_=z(~s6o!{hC7YCFkScorEiS* zLVd?%55X=uPd8s=3CQKnVXSE%3L&RJEx$WG !4-n`DCm#8gqzz2AT4!~k^$Ygc%#C`Y81F2YxwQRyo7B_5SzGXG(sO6@ zE^psMJh6X6;kEiA(M~BO0-J+Q3?^|bi9#IMkQFYS`7Pit2&|zahVw1o!Y!fPZ?nE; zmeQB(=oE$A1rRqNS!taGhW5FU!F3O_6WaM->qWnrY{oxn&>Y!haN~g{NheP)_hJhS zqfAW!P4XIOf*+djDow8?bB@`qzt29)D@BQbUUwFTV@;1MPfE{O06m{Wx}{r+<(;sc zw8VS9%rh6=64*7i@fSR#MC $5~&-idhz^z=j-xmt=NOFI=i-~7rkkfHo{xV6f} z2jA~&y4FjTy3TC@Pv!IsXgYgtFjRT^mUCis8~JHS37VouKQ(9Cij1q|@Fq(gt_e71 zs;Yr_cODzNpPCT`x*<288VyX=T4xENw`IC-pL7up_k D~;9kED>XsbW#)YNux1B^ZFLU^n=ckZfs(Es|0%>`u^8xDfS z4 xIrESWD5G(0L{`gx=p>*bP{~?t33LSCsNUKEr%Z!XiDZ zZ%EovPpbc(SAU9<_+(GrYE=X6@J>4odYcrCLEzU;zU~n}Z=bcke{kOxn93FEK|MY= zUr?$1;D1|;{GVAEPXz`bw7tpf%?Syzs{!8Pvxnq&3?R~?-d&=Y8BX|b<0Y>kJCfJY zF#X6#IiZUjc
fn9*F>niBm*l1YJ}}fUWBR{> zjG12^2I~-s^t$(Vd{4h=oWMwX>K38xPPx^i+ULA4<{=-S#0>@@lL-OMi~Z)rdIvhC zAsYpA&kyhReA7!ywF)qk>3B$ma)bw{K^adUy))-(e~6!N-v5WIJpQ+<{6nltUV;Tk zO;x2pC4-**up1lJQMS)d@uyE$t;jZ4RJCw~EOCzW-gfE>O+7uU8jeqn%IDG@- &{a#f^(Bf1_}mnE!!Zj>9@ z@KcxI?3H;vV6LYLU9X;yr_ZlMt EI(3tTb5HH!aXw!h-Kq;kDaX+*LTxd&G@^f1GV(-X# zZc{TvHk*RXkA|IED5LqZH1-p;V42E(L$o~=fgSC03w&?TbG}W07Fc#IJxmPUo0U}_ zhuI?Azy#}MEXCvnrdxUQX9z5EfcV)J)zd?3^Qh95;J)KCCxHXeGqkC%udw>)Z7!Ff z9e^D1=j` 6Qt-1zh^hkDvidUKZVHfMkTJUPI-2Lh~&{r63hCMrJ%3dA{s zs~Io0=YAutH| kd(2%4ymW)*JAzkn7igV!Bt9lHkVY0(wmv`OC;0}o?EIRiM> z3H@8&*gh0RFgECtwqU10VEr&Uw7m~BU0t6G%~Xv8b!|SZv~H#PHg;0wnp+P4 qRFc|% ziJ=WH+PotB w*L*^5}?^6W$N?w318xY<>#-Jg%C!T zS`(>h7fg-|=J&V!@IEu*MeX2}`rY)?y2{wvCF4Pj*?@$sx$n><)>_7JPnq+;oQuuw z?gzszO*MD@vtPs$TU*0h0!XX%&9{dIuj(%w5b-uG+$#atOhx2{NL++9vbcO~%;Q79 zzpa#E9s*!8h(Jql_2{m@ZIi78vHrtDZ^ykM4XteN{``MVZms|AFwy;-340f4Z*qH{ z9&rD(8=J-3w|xPvwoM%iv4_fo6>89x!l{%B>0e3(1S=vSmP@8$=k9oko{ewZ7)Ocp zUIyRtBg1@Ot0`TXyscHdhl)9?=r>=&rUG~yeM=mt#^0Oxv247_?T%KalBD#jZyS7V zT9`*F#?L5mJPos!et6WtmO>=DNX)7p+DxuBz(nyavrPf{D}{&rEWDWbv?G6;EB5)x zK+9ypW#U+it!N9&&V}v4)x&N{tqdQy;O`{GWZ&Oee;od*8+Em@IbE{}<@~q^;>YrT zDK?IN#ji1BDRKe4OKo*n^n46jIx+*(I=tpju`hR-!Lqzh;xgo4^X|9IiCy%oy(@OQ z`fdMk&qwxe7C{M)Nt`2s07qz3*o&L3NN$tR%%&cUDI3mx@0~U7D72wQdy{jI)O|6b z<03*?>%pL>gVP!G{kO5-p|1(!2{|A^?kb6Fjz>CJd=?8TyQ@+0IGn-O?so8g-AHN+ zqWM|<7$BZwE8O{@61PN(r4oO4*LRvG6;F*~x$9}t`i)Q}v9cZGs!33Z+t}uRU*S2? zei2MbT#2L3y))U#{k}b@!TIT|?LCyzt~%BotnKgr9$X>mE>Ul(a(G7~EIL*R;saqR z{!;lAt;pxnKkL`V*dv%90$?O;e50s%e1n4YDBT={N}7^fA2BsTk&T;@-hD46YYxXW z%}1M4gb^Ppz2{qOd2r>HI`4DdkPyv*K8$|@?Qsn>EX;5U2yDi%3!}DxpF>bpsf3zp zHyc|4v}!4hoeOVEPKF6Ee;ONLR~M_fe%=WK&b;BLFF8f+7_DiWQareSRUP1t9^P&= zdDL-_WJU?Ka+9l!<$~B1uvzC^PaPENB9@pJU8BC)IIwk@^4=xO$