diff --git a/presentation/csc-logo.png b/presentation/csc-logo.png new file mode 100644 index 0000000..a941804 Binary files /dev/null and b/presentation/csc-logo.png differ diff --git a/presentation/presentation.md b/presentation/presentation.md new file mode 100644 index 0000000..67ffadb --- /dev/null +++ b/presentation/presentation.md @@ -0,0 +1,798 @@ +--- +marp: true +theme: default +size: 16:9 +paginate: true +header: "SysY 编译器课程实验 — 并行编译优化" +footer: "程景愉 · 舒钰权 · 杨力嘉 | 实验验收汇报 | 2026.06.27" +style: | + :root { + --ink: #0f172a; + --muted: #475569; + --soft: #64748b; + --line: rgba(15, 23, 42, 0.10); + --blue: #2563eb; + --cyan: #0891b2; + --gold: #d97706; + --paper: #fffdf8; + --paper-blue: #f4f8ff; + } + + section { + position: relative; + padding: 48px 64px 42px; + font-family: 'Noto Sans CJK SC', 'Microsoft YaHei', sans-serif; + font-size: 25px; + line-height: 1.35; + color: var(--ink); + background: + url('csc-logo.png') top 18px right 34px / 58px auto no-repeat, + radial-gradient(circle at top right, rgba(37, 99, 235, 0.16), transparent 28%), + radial-gradient(circle at bottom left, rgba(8, 145, 178, 0.12), transparent 24%), + linear-gradient(135deg, var(--paper) 0%, #f9fbff 45%, var(--paper-blue) 100%); + } + + section::before { + content: ""; + position: absolute; + inset: 22px; + border: 1px solid var(--line); + border-radius: 26px; + pointer-events: none; + z-index: 0; + } + + section > * { + position: relative; + z-index: 1; + } + + header, + footer { + color: #64748b; + font-size: 13px; + letter-spacing: 0.04em; + } + + h1 { + margin: 0 0 14px; + font-family: 'Noto Serif CJK SC', 'STSong', serif; + font-size: 52px; + color: var(--ink); + letter-spacing: -0.02em; + } + + h2 { + margin: 0 0 10px; + font-size: 28px; + color: var(--blue); + font-weight: 700; + } + + h3 { + margin: 0 0 6px; + font-size: 20px; + color: var(--ink); + font-weight: 700; + } + + p, li { + color: var(--muted); + } + + strong { + color: var(--blue); + font-weight: 800; + } + + code { + font-size: 0.85em; + color: #0f3c8a; + background: rgba(37, 99, 235, 0.10); + padding: 0.08em 0.35em; + border-radius: 0.35em; + } + + ul { + margin: 0.25em 0 0; + } + + li { + margin: 0.16em 0; + } + + section.cover { + color: #e8eefc; + background: + url('csc-logo.png') top 18px right 34px / 65px auto no-repeat, + radial-gradient(circle at top right, rgba(255, 255, 255, 0.14), transparent 24%), + linear-gradient(135deg, #07111f 0%, #0f1f3d 42%, #1d4ed8 100%); + } + + section.cover::before { + border-color: rgba(255, 255, 255, 0.14); + } + + section.cover header, + section.cover footer, + section.cover p, + section.cover li, + section.cover .muted, + section.cover .eyebrow { + color: rgba(232, 238, 252, 0.78); + } + + section.cover h1, + section.cover h2, + section.cover h3, + section.cover strong { + color: #ffffff; + } + + .eyebrow { + font-size: 15px; + font-weight: 700; + letter-spacing: 0.16em; + text-transform: uppercase; + color: var(--soft); + margin-bottom: 16px; + } + + .lead { + font-size: 18px; + line-height: 1.45; + margin-top: 6px; + color: var(--muted); + } + + .muted { + color: var(--soft); + } + + .chips { + display: flex; + gap: 10px; + flex-wrap: wrap; + margin-top: 18px; + } + + .chip { + display: inline-block; + padding: 7px 14px; + border-radius: 999px; + border: 1px solid rgba(255, 255, 255, 0.16); + background: rgba(255, 255, 255, 0.08); + font-size: 15px; + color: #eef4ff; + } + + .cover-link, + .cover-link code { + color: #f8fbff !important; + background: rgba(255, 255, 255, 0.10); + border: 1px solid rgba(255, 255, 255, 0.14); + } + + .grid-2, + .grid-3, + .grid-4, + .timeline { + display: grid; + gap: 14px; + } + + .grid-2 { + grid-template-columns: 1fr 1fr; + } + + .grid-3 { + grid-template-columns: repeat(3, 1fr); + } + + .grid-4, + .timeline { + grid-template-columns: repeat(4, 1fr); + } + + .card { + background: rgba(255, 255, 255, 0.72); + border: 1px solid rgba(148, 163, 184, 0.18); + border-radius: 20px; + padding: 14px 18px; + box-shadow: 0 16px 38px rgba(15, 23, 42, 0.06); + } + + .card h3 { + margin-bottom: 10px; + } + + .card strong { + color: var(--gold); + } + + .accent { + color: var(--blue); + font-weight: 800; + } + + .metric { + font-size: 15px; + color: var(--soft); + margin-top: 8px; + } + + .flow { + display: grid; + grid-template-columns: repeat(6, 1fr); + gap: 8px; + margin-top: 10px; + } + + .flow-box { + padding: 10px 6px; + border-radius: 16px; + text-align: center; + background: rgba(37, 99, 235, 0.08); + border: 1px solid rgba(37, 99, 235, 0.12); + color: var(--ink); + font-size: 15px; + font-weight: 700; + } + + .flow-box.dark { + background: rgba(15, 23, 42, 0.88); + color: #f8fbff; + border-color: rgba(15, 23, 42, 0.9); + } + + .arrow { + text-align: center; + color: var(--soft); + font-size: 20px; + align-self: center; + } + + .stack { + display: grid; + grid-template-columns: 0.95fr 1.05fr; + gap: 16px; + margin-top: 8px; + } + + .tech-list { + display: grid; + gap: 8px; + margin-top: 4px; + } + + .tech-item { + border-radius: 16px; + padding: 10px 14px; + background: rgba(37, 99, 235, 0.06); + border: 1px solid rgba(37, 99, 235, 0.10); + font-size: 15px; + line-height: 1.4; + color: var(--muted); + } + + .tech-item strong { + display: inline-block; + min-width: 5.2em; + color: var(--ink); + } + + .table { + width: 100%; + border-collapse: collapse; + font-size: 15px; + } + + .table th, + .table td { + border-bottom: 1px solid rgba(148, 163, 184, 0.22); + padding: 6px 0; + text-align: left; + vertical-align: top; + } + + .table th { + color: var(--ink); + font-weight: 700; + } + + .mini { + font-size: 14px; + color: var(--soft); + } + + .phase { + background: rgba(255, 255, 255, 0.78); + border: 1px solid rgba(148, 163, 184, 0.18); + border-radius: 18px; + padding: 14px; + box-shadow: 0 12px 30px rgba(15, 23, 42, 0.05); + } + + .phase .tag { + display: inline-block; + padding: 4px 8px; + border-radius: 999px; + background: rgba(37, 99, 235, 0.12); + color: var(--blue); + font-size: 12px; + font-weight: 700; + margin-bottom: 8px; + } + + .role-tag { + display: inline-block; + padding: 4px 8px; + border-radius: 999px; + background: rgba(217, 119, 6, 0.10); + color: var(--gold); + font-size: 12px; + font-weight: 700; + margin-bottom: 6px; + } + + .roles { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 14px; + margin-top: 6px; + } + + .role-card { + background: rgba(255, 255, 255, 0.76); + border: 1px solid rgba(148, 163, 184, 0.18); + border-radius: 18px; + padding: 14px 14px 12px; + box-shadow: 0 12px 30px rgba(15, 23, 42, 0.05); + } + + .role-card h3 { + font-size: 18px; + margin-bottom: 6px; + } + + .role-card ul { + margin-top: 0.15em; + padding-left: 1.1em; + } + + .role-card li { + font-size: 14px; + line-height: 1.4; + margin: 0.12em 0; + } + + .closing { + display: grid; + place-items: center; + height: 78%; + text-align: center; + } + + .closing h1 { + font-size: 64px; + margin-bottom: 12px; + } + + .closing p { + font-size: 24px; + } +--- + + + + +
Parallel Compiler Construction
+ +# SysY 编译器课程实验 +## 前端 · 中端优化 · 后端代码生成 + +

从 SysY 语言到 AArch64 汇编的完整编译器实现,涵盖语法分析、IR 生成、标量优化、寄存器分配与循环优化六大实验模块。

+ +
+ Lab1–Lab6 全部完成 + 11 项功能测试通过 + 实验验收汇报 +
+ +
+ +小组成员:**程景愉** · **舒钰权** · **杨力嘉** + +

仓库地址:https://bdgit.educoder.net/pw7hgk2xf/nudt-compiler-cpp

+ +--- + +# 项目概述与实验目标 + +
+
+

完整的编译器流水线

+

实现从 SysY 源程序AArch64 汇编的完整编译流程,打通前端解析、中端优化与后端代码生成的全部环节。

+
+
+

六阶段渐进式实验

+

按 Lab1–Lab6 逐步完成语法树构建、IR 生成、指令选择、标量优化、寄存器分配与循环优化,形成层次清晰的编译器架构。

+
+
+

工程化协作实践

+

基于 Git 分支协作、CMake 构建系统、自动化测试脚本与 QEMU 模拟验证,完整复现工业级编译器开发流程。

+
+
+ +
+
Lab1
语法树
+
Lab2
IR 生成
+
Lab3
汇编生成
+
Lab4
标量优化
+
Lab5
寄存器分配
+
Lab6
循环优化
+
+ +--- + +# 技术栈总览 + +
+
+

编译器架构

+
+
前端ANTLR4 + Visitor 模式,词法/语法分析 → 语法树
+
语义分析符号表 + 作用域栈 + 类型检查 + 名称绑定
+
中端 IRLLVM 风格 SSA IR,含完整 use-def 链与 CFG
+
中端优化Mem2Reg · ConstFold/Prop · CSE · DCE · CFGSimplify · LICM
+
后端 MIR机器级中间表示 → 虚拟寄存器 → 物理寄存器
+
后端优化窥孔优化 · 冗余消除 · 寄存器别名感知
+
+
+
+

工具链与验证

+
+
构建CMake + C++17,parse-only / 全量两种模式
+
IR 验证LLVM 工具链(llc + clang)编译运行比对
+
汇编验证AArch64 交叉编译 + QEMU 用户态模拟
+
目标平台ARM64 / AArch64(gcc-aarch64-linux-gnu)
+
运行库自研 sylib.c,含 I/O、计时与浮点十六进制支持
+
测试verify_ir.sh / verify_asm.sh 自动化回归脚本
+
+
+
+ +--- + +# Lab1:语法树构建 — 前端基石 + +
+
+

核心工作

+ +
+
+

关键产出

+ +
+
+ +
+

技术要点

+

ANTLR4 的 labeled alternative 写法直接影响 SysYParser::*Context 类型名与访问接口,为后续 sem/irgen 的 Visitor 适配奠定基础。扩展文法后必须同步调整语义分析与 IR 生成的 visit* 逻辑。

+
+ +--- + +# Lab2:中间表示生成 — IR 语义全覆盖 + +
+
+

IR 类型系统与指令扩展

+ +
+
+

关键难点突破

+ +
+
+ +

成果:支持 int/float 常量表达式、多维数组、函数调用、短路求值、控制流,生成的 IR 通过 llc 编译与 clang 链接运行验证。

+ +--- + +# Lab3:指令选择与汇编生成 — AArch64 后端 + +
+
+

AArch64 指令覆盖

+

完整实现算术、比较、条件选择、分支跳转、函数调用、内存访存、浮点转换等核心指令子集,采用高可靠栈槽模型保证变量活跃期正确性。

+
+
+

ABI 调用约定

+

完整实现前 8 个整型/指针参数及前 8 个浮点参数通过寄存器传递,返回值通过 w0/x0/s0 返回,支持多函数多基本块控制流。

+
+
+

浮点位精确

+

浮点常量以 .word <bits> 二进制字面量输出,保证编译-汇编-运行全生命周期 100% 位一致,消除精度丢失问题。

+
+
+ +
+

关键难点突破

+

解决双向迭代器/指针失效(vector 重配 → 野指针)、大栈帧寻址越界(ldur/stur 超出 [-256,255] 范围 → 寄存器偏移寻址回退)、参数指针二级间接等底层问题。重写 sylib/sylib.c 运行库,补齐全部 I/O 与十六进制浮点(%a)支持。

+
+ +--- + +# Lab4:基本标量优化 — SSA 中端核心 + +
+
+

支配树分析与 Mem2Reg

+ +
+
+

优化 Pass 管线

+ +
+
+ +
+

Phi 节点降低到汇编

+

在栈槽后端正确处理 Phi 生命周期:控制流分叉块末尾生成条件拷贝(Condition Copy-Store),函数头部预分配 Phi 槽位。修复指针截断(64→32 位)、GEP 参数二级指针解引用、ConstProp 后 Phi 残留清理等隐蔽缺陷。

+
+ +--- + +# Lab5:寄存器分配与后端优化 — 窥孔优化 + +
+
+

窥孔优化核心能力

+ +
+
+

寄存器别名感知

+ +
+
+ +
+

技术挑战

+

浮点常数加载(adrp + ldr)隐式占用通用寄存器 x8/w8,若窥孔器未感知会导致寄存器污染,引发浮点比较错误。解决方案:识别 MovImm 目标为浮点寄存器时,主动擦除 slot_to_reg 追踪中的 x8/w8 条目。

+
+ +--- + +# Lab6:并行与循环优化 — LICM + +
+
+

自然循环识别

+ +
+
+

循环不变式外提(LICM)

+ +
+
+ +
+

关键修复

+

支配边界计算死循环漏洞:DCE/CFGSimplify 后可能产生从 Entry 不可达的死块,其 idom 为空或自环,导致 ComputeDF 的 while 循环无限挂起。修复方案:增加 runner == nullptrnext_runner == runner 的优雅阻断分支。

+
+ +--- + +# 近期攻坚:运算符优先级修正与后端内存优化 + +
+
+

运算符优先级与结合性修正

+

修正了 SysY.g4 中同级运算符分行写导致结合性错误的 ANTLR4 缺陷。将其合并为 addSubExp/mulDivModExp 等统一规则,并重构 SemaIRGen 遍历逻辑,彻底解决了 fft0.sy 等复杂表达式的计算 Bug。

+
+
+

大数组零初始化 memset 优化

+

针对大局部数组初始化生成的几十万条冗余 store 指令进行了优化。在中端 IR 生成阶段,改用运行时 memset 函数调用,消除了汇编代码膨胀,使编译时间缩短 99% 以上。

+
+
+

后端死栈槽消除优化

+

在后端 Peephole 阶段新增了死栈槽分析。静态扫描发现从未被 load 或取地址的冗余 Store 槽位,直接予以删除,进一步缩减了栈帧空间并精简了指令流。

+
+
+ +

通过这几次的系统性优化与缺陷修复,编译器在语义正确性、编译效率、以及生成代码的精简度上均得到了极大的提升,实现了 21 个回归测试的 100% 完美通过。

+ +--- + +# 关键技术难点与突破 + +
+
+

编译期/运行期分离

+

全局常量初始化走纯编译期求值,绝不生成 IR 指令。避免依赖 Runtime IRBuilder 插入点

+
+
+

数组语义三层拆分

+

标量 alloca、聚合数组基址、数组形参指针退化三种语义严格区分,避免 Load/GEP 类型错乱。

+
+
+

浮点精度保全链路

+

常量折叠→IEEE 754 二进制位→.word 原样输出,确保全链路位精确一致

+
+
+ +
+
+

SSA 一致性维护

+

ConstProp 后显式清理 Phi dead incoming 边;CFGSimplify 正确替换 Phi uses;Mem2Reg 沿支配树 DFS 栈式管理版本。

+
+
+

后端指针安全

+

Vector 预分配容量避免迭代器失效;64 位指针强制 X 寄存器加载;参数 alloca 栈槽通过静态扫描提升至 8 字节。

+
+
+

支配树鲁棒性

+

ComputeDF 对不可达节点与自环做显式阻断;迭代 IDom 兼容非连通图与临时死块,保证收敛。

+
+
+ +--- + +# 测试验证结果 + +
+ +| 序号 | 测试用例 | 测试内容 | 结果 | +|:---:|:---|:---|:---:| +| 1 | `simple_add.sy` | 简单加法,基础 IR/汇编验证 | ✅ | +| 2 | `05_arr_defn4.sy` | 多维数组定义与初始化 | ✅ | +| 3 | `09_func_defn.sy` | 函数定义与调用 | ✅ | +| 4 | `11_add2.sy` | 多变量算术表达式 | ✅ | +| 5 | `13_sub2.sy` | 减法与混合运算 | ✅ | +| 6 | `15_graph_coloring.sy` | 递归图着色(指针/数组) | ✅ | +| 7 | `22_matrix_multiply.sy` | 矩阵乘法(多维数组+循环) | ✅ | +| 8 | `25_scope3.sy` | 嵌套作用域与变量遮蔽 | ✅ | +| 9 | `29_break.sy` | break/continue 控制流 | ✅ | +| 10 | `36_op_priority2.sy` | 运算符优先级综合测试 | ✅ | +| 11 | `95_float.sy` | 浮点 I/O / 类型转换 / 逻辑短路 | ✅ | + +
+ +

全部 11 项功能测试用例10 项性能测试用例(共 21 项)在优化开启条件下均通过 verify_asm.sh --run 验证,输出与退出码 100% 匹配预期。

+ +

验证链路:SysY 源码 → IR 生成 → 标量优化 → 循环优化 → 指令选择 → 寄存器分配 → 窥孔优化 → AArch64 汇编 → QEMU 模拟运行 → 输出比对

+ +--- + +# 人员分工 + +
+
+
组长 / 全栈核心
+

程景愉

+ +
+
+
后端与系统
+

舒钰权

+ +
+
+
优化与测试
+

杨力嘉

+ +
+
+ +

分工遵循"组长主抓中端优化核心 + 成员按前后端专长协作推进"的模式,通过 Git 分支 + PR 评审完成协作。

+ +--- + +# 实验总结与展望 + +
+
+

已完成的核心能力

+ +
+
+

可继续深入的方向

+ +
+
+ +

本项目已构建起一个结构清晰、可扩展、语义正确的 SysY 编译器框架,为后续继续深入编译器优化与并行化研究提供了坚实的基础。

+ +--- + +
+
+

Conclusion

+

谢谢聆听

+

从语法树到 AArch64 汇编,从 SSA 优化到循环不变式外提

+

我们构建了一个完整、正确、可扩展的 SysY 编译器

+

Q & A

+

程景愉 · 舒钰权 · 杨力嘉 | 并行编译优化课程实验

+
+
diff --git a/presentation/presentation.pdf b/presentation/presentation.pdf new file mode 100644 index 0000000..f40e929 Binary files /dev/null and b/presentation/presentation.pdf differ diff --git a/presentation/presentation.pptx b/presentation/presentation.pptx new file mode 100644 index 0000000..92bf306 Binary files /dev/null and b/presentation/presentation.pptx differ diff --git a/presentation/speech.pdf b/presentation/speech.pdf new file mode 100644 index 0000000..0b3ade2 --- /dev/null +++ b/presentation/speech.pdf @@ -0,0 +1,1686 @@ +%PDF-1.7 +% + +1 0 obj +<> +endobj +2 0 obj +</Dest 139 0 R>> +endobj +3 0 obj +</Dest 140 0 R>> +endobj +4 0 obj +</Dest 141 0 R>> +endobj +5 0 obj +</Dest 142 0 R>> +endobj +6 0 obj +</Dest 143 0 R>> +endobj +7 0 obj +</Dest 144 0 R>> +endobj +8 0 obj +</Dest 145 0 R>> +endobj +9 0 obj +</Dest 146 0 R>> +endobj +10 0 obj +</Dest 147 0 R>> +endobj +11 0 obj +</Dest 148 0 R>> +endobj +12 0 obj +</Dest 149 0 R>> +endobj +13 0 obj +</Dest 150 0 R>> +endobj +14 0 obj +</Dest 151 0 R>> +endobj +15 0 obj +</Dest 152 0 R>> +endobj +16 0 obj +</Dest 153 0 R>> +endobj +17 0 obj +<> +endobj +18 0 obj +<>/K[136 0 R]/ParentTree<>/ParentTreeNextKey 4>> +endobj +19 0 obj +[23 0 R 23 0 R 24 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 28 0 R 28 0 R 28 0 R 28 0 R 28 0 R 28 0 R 28 0 R 28 0 R 28 0 R 28 0 R 28 0 R 28 0 R 28 0 R 28 0 R 28 0 R 28 0 R 28 0 R 30 0 R 31 0 R 32 0 R 32 0 R 32 0 R 32 0 R 32 0 R 34 0 R 35 0 R 36 0 R 39 0 R 40 0 R 41 0 R 43 0 R 43 0 R 43 0 R 43 0 R 43 0 R 43 0 R 43 0 R 43 0 R 43 0 R 42 0 R 43 0 R 44 0 R 45 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 47 0 R 46 0 R 47 0 R 47 0 R 47 0 R 48 0 R 49 0 R 51 0 R 51 0 R 51 0 R 51 0 R 51 0 R 51 0 R 51 0 R 51 0 R 51 0 R 51 0 R 51 0 R 51 0 R 51 0 R 51 0 R 51 0 R 51 0 R 51 0 R 51 0 R 51 0 R 51 0 R 51 0 R 51 0 R 50 0 R 51 0 R 52 0 R 52 0 R 52 0 R 53 0 R 55 0 R 55 0 R 55 0 R 55 0 R 55 0 R 55 0 R 55 0 R 55 0 R 55 0 R 55 0 R 55 0 R 55 0 R 55 0 R 55 0 R 55 0 R 55 0 R 55 0 R 55 0 R 55 0 R 55 0 R 54 0 R 55 0 R 56 0 R 56 0 R 56 0 R 56 0 R 56 0 R 57 0 R 58 0 R 58 0 R 58 0 R 58 0 R 58 0 R 58 0 R 58 0 R 59 0 R 59 0 R 59 0 R 59 0 R 59 0 R 59 0 R 59 0 R 59 0 R 59 0 R 59 0 R 61 0 R 61 0 R 61 0 R 61 0 R 61 0 R 61 0 R 61 0 R 60 0 R 61 0 R] +endobj +20 0 obj +[62 0 R 62 0 R 62 0 R 62 0 R 62 0 R 63 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 64 0 R 65 0 R 66 0 R 66 0 R 66 0 R 66 0 R 66 0 R 67 0 R 68 0 R 68 0 R 68 0 R 68 0 R 68 0 R 68 0 R 68 0 R 68 0 R 68 0 R 68 0 R 68 0 R 68 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 71 0 R 71 0 R 71 0 R 71 0 R 71 0 R 70 0 R 71 0 R 71 0 R 71 0 R 71 0 R 71 0 R 72 0 R 72 0 R 72 0 R 73 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 75 0 R 74 0 R 75 0 R 75 0 R 75 0 R 76 0 R 76 0 R 76 0 R 76 0 R 76 0 R 77 0 R 78 0 R 78 0 R 78 0 R 78 0 R 78 0 R 78 0 R 78 0 R 78 0 R 78 0 R 78 0 R 78 0 R 78 0 R 78 0 R 78 0 R 78 0 R 78 0 R 78 0 R 80 0 R 80 0 R 80 0 R 80 0 R 80 0 R 80 0 R 80 0 R 80 0 R 80 0 R 79 0 R 80 0 R 81 0 R 82 0 R 84 0 R 84 0 R 84 0 R 84 0 R 84 0 R 84 0 R 84 0 R 84 0 R 84 0 R 84 0 R 84 0 R 84 0 R 84 0 R 84 0 R 84 0 R 84 0 R 84 0 R 84 0 R 83 0 R 84 0 R 85 0 R 86 0 R 88 0 R 88 0 R 88 0 R 88 0 R 88 0 R 88 0 R 88 0 R 88 0 R 88 0 R 88 0 R 88 0 R 88 0 R 88 0 R 88 0 R 88 0 R 88 0 R 88 0 R 88 0 R 88 0 R 87 0 R 88 0 R 89 0 R 90 0 R 92 0 R 92 0 R 92 0 R 92 0 R 92 0 R 92 0 R 92 0 R 92 0 R 92 0 R 92 0 R 92 0 R 92 0 R 92 0 R 92 0 R 92 0 R 92 0 R 92 0 R 92 0 R 92 0 R 91 0 R 92 0 R] +endobj +21 0 obj +[93 0 R 94 0 R 96 0 R 96 0 R 96 0 R 96 0 R 96 0 R 96 0 R 96 0 R 96 0 R 96 0 R 96 0 R 96 0 R 96 0 R 96 0 R 96 0 R 96 0 R 96 0 R 96 0 R 95 0 R 96 0 R 97 0 R 97 0 R 98 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 100 0 R 100 0 R 100 0 R 100 0 R 101 0 R 102 0 R 102 0 R 102 0 R 103 0 R 104 0 R 104 0 R 104 0 R 104 0 R 104 0 R 104 0 R 104 0 R 104 0 R 104 0 R 104 0 R 104 0 R 104 0 R 105 0 R 105 0 R 105 0 R 106 0 R 107 0 R 107 0 R 107 0 R 107 0 R 108 0 R 109 0 R 110 0 R 110 0 R 111 0 R 111 0 R 111 0 R 111 0 R 111 0 R 112 0 R 113 0 R 113 0 R 113 0 R 113 0 R 113 0 R 113 0 R 113 0 R 113 0 R 113 0 R 113 0 R 113 0 R 113 0 R 113 0 R 113 0 R 113 0 R 113 0 R 113 0 R 113 0 R 113 0 R 114 0 R 114 0 R 114 0 R 114 0 R 115 0 R 116 0 R 116 0 R 116 0 R 116 0 R 116 0 R 116 0 R 116 0 R 116 0 R 116 0 R 116 0 R 116 0 R 116 0 R 116 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 120 0 R 120 0 R 120 0 R 120 0 R 120 0 R 120 0 R 120 0 R 120 0 R 120 0 R 121 0 R 121 0 R 121 0 R 121 0 R 122 0 R 123 0 R 123 0 R 123 0 R 123 0 R 123 0 R 123 0 R 123 0 R 124 0 R 124 0 R 125 0 R 126 0 R 126 0 R 126 0 R 126 0 R 126 0 R 126 0 R 126 0 R 126 0 R 126 0 R 126 0 R 126 0 R 126 0 R 126 0 R 127 0 R 128 0 R 129 0 R 129 0 R 129 0 R 129 0 R 129 0 R 129 0 R 129 0 R 130 0 R 131 0 R 132 0 R 132 0 R 132 0 R 132 0 R 132 0 R] +endobj +22 0 obj +[133 0 R 134 0 R 135 0 R 135 0 R 135 0 R 135 0 R 135 0 R 135 0 R 135 0 R 135 0 R 135 0 R 135 0 R 135 0 R 135 0 R] +endobj +23 0 obj +<> +endobj +24 0 obj +<> +endobj +25 0 obj +<> +endobj +26 0 obj +<> +endobj +27 0 obj +<> +endobj +28 0 obj +<> +endobj +29 0 obj +<> +endobj +30 0 obj +<> +endobj +31 0 obj +<> +endobj +32 0 obj +<> +endobj +33 0 obj +<> +endobj +34 0 obj +<> +endobj +35 0 obj +<> +endobj +36 0 obj +<> +endobj +37 0 obj +<> +endobj +38 0 obj +<>]/K[29 0 R 33 0 R 37 0 R]>> +endobj +39 0 obj +</K[35]/Pg 167 0 R>> +endobj +40 0 obj +</K[36]/Pg 167 0 R>> +endobj +41 0 obj +<> +endobj +42 0 obj +<> +endobj +43 0 obj +<> +endobj +44 0 obj +</K[49]/Pg 167 0 R>> +endobj +45 0 obj +<> +endobj +46 0 obj +<> +endobj +47 0 obj +<> +endobj +48 0 obj +</K[81]/Pg 167 0 R>> +endobj +49 0 obj +<> +endobj +50 0 obj +<> +endobj +51 0 obj +<> +endobj +52 0 obj +</K[107 108 109]/Pg 167 0 R>> +endobj +53 0 obj +<> +endobj +54 0 obj +<> +endobj +55 0 obj +<> +endobj +56 0 obj +</K[133 134 135 136 137]/Pg 167 0 R>> +endobj +57 0 obj +<> +endobj +58 0 obj +<> +endobj +59 0 obj +<> +endobj +60 0 obj +<> +endobj +61 0 obj +<> +endobj +62 0 obj +</K[0 1 2 3 4]/Pg 168 0 R>> +endobj +63 0 obj +<> +endobj +64 0 obj +<> +endobj +65 0 obj +<> +endobj +66 0 obj +</K[28 29 30 31 32]/Pg 168 0 R>> +endobj +67 0 obj +<> +endobj +68 0 obj +<> +endobj +69 0 obj +<> +endobj +70 0 obj +<> +endobj +71 0 obj +<> +endobj +72 0 obj +</K[76 77 78]/Pg 168 0 R>> +endobj +73 0 obj +<> +endobj +74 0 obj +<> +endobj +75 0 obj +<> +endobj +76 0 obj +</K[109 110 111 112 113]/Pg 168 0 R>> +endobj +77 0 obj +<> +endobj +78 0 obj +<> +endobj +79 0 obj +<> +endobj +80 0 obj +<> +endobj +81 0 obj +</K[143]/Pg 168 0 R>> +endobj +82 0 obj +<> +endobj +83 0 obj +<> +endobj +84 0 obj +<> +endobj +85 0 obj +</K[165]/Pg 168 0 R>> +endobj +86 0 obj +<> +endobj +87 0 obj +<> +endobj +88 0 obj +<> +endobj +89 0 obj +</K[188]/Pg 168 0 R>> +endobj +90 0 obj +<> +endobj +91 0 obj +<> +endobj +92 0 obj +<> +endobj +93 0 obj +</K[0]/Pg 169 0 R>> +endobj +94 0 obj +<> +endobj +95 0 obj +<> +endobj +96 0 obj +<> +endobj +97 0 obj +</K[21 22]/Pg 169 0 R>> +endobj +98 0 obj +<> +endobj +99 0 obj +<> +endobj +100 0 obj +<> +endobj +101 0 obj +<> +endobj +102 0 obj +<> +endobj +103 0 obj +<> +endobj +104 0 obj +<> +endobj +105 0 obj +<> +endobj +106 0 obj +<> +endobj +107 0 obj +<> +endobj +108 0 obj +<> +endobj +109 0 obj +<> +endobj +110 0 obj +<> +endobj +111 0 obj +<> +endobj +112 0 obj +<> +endobj +113 0 obj +<> +endobj +114 0 obj +<> +endobj +115 0 obj +<> +endobj +116 0 obj +<> +endobj +117 0 obj +<> +endobj +118 0 obj +<> +endobj +119 0 obj +<> +endobj +120 0 obj +<> +endobj +121 0 obj +<> +endobj +122 0 obj +<> +endobj +123 0 obj +<> +endobj +124 0 obj +<> +endobj +125 0 obj +<> +endobj +126 0 obj +<> +endobj +127 0 obj +<> +endobj +128 0 obj +<> +endobj +129 0 obj +<> +endobj +130 0 obj +<> +endobj +131 0 obj +<> +endobj +132 0 obj +<> +endobj +133 0 obj +<> +endobj +134 0 obj +<> +endobj +135 0 obj +<> +endobj +136 0 obj +<> +endobj +137 0 obj +[/ICCBased 184 0 R] +endobj +138 0 obj +[/ICCBased 185 0 R] +endobj +139 0 obj +[167 0 R/XYZ 56.692913 574.5692 0] +endobj +140 0 obj +[167 0 R/XYZ 56.692913 497.36118 0] +endobj +141 0 obj +[167 0 R/XYZ 56.692913 405.36316 0] +endobj +142 0 obj +[167 0 R/XYZ 56.692913 328.15515 0] +endobj +143 0 obj +[167 0 R/XYZ 56.692913 236.15717 0] +endobj +144 0 obj +[168 0 R/XYZ 56.692913 781.0236 0] +endobj +145 0 obj +[168 0 R/XYZ 56.692913 689.02563 0] +endobj +146 0 obj +[168 0 R/XYZ 56.692913 543.6576 0] +endobj +147 0 obj +[168 0 R/XYZ 56.692913 451.65964 0] +endobj +148 0 obj +[168 0 R/XYZ 56.692913 340.37164 0] +endobj +149 0 obj +[168 0 R/XYZ 56.692913 248.37366 0] +endobj +150 0 obj +[168 0 R/XYZ 56.692913 156.37561 0] +endobj +151 0 obj +[169 0 R/XYZ 56.692913 781.0236 0] +endobj +152 0 obj +[169 0 R/XYZ 56.692913 674.2356 0] +endobj +153 0 obj +[167 0 R/XYZ 56.692913 590.3752 0] +endobj +154 0 obj +<>/Font<>>> +endobj +155 0 obj +<>/Font<>>> +endobj +156 0 obj +<>/Font<>>> +endobj +157 0 obj +<>/Font<>>> +endobj +158 0 obj +<> +endobj +159 0 obj +<>/FontDescriptor 160 0 R/DW 0/W[0 18 1000 19 19 224 20 20 270 21 21 596 22 22 521 23 23 468 24 24 531 25 25 1000]>> +endobj +160 0 obj +<> +endobj +161 0 obj +<> +endobj +162 0 obj +<>/FontDescriptor 163 0 R/DW 0/W[0 1 1000 2 2 597 3 3 582 4 4 499 5 5 701 6 6 250 7 21 1000 22 22 594 23 40 1000 41 41 466 42 43 1000 44 44 593 45 50 1000 51 51 594 52 57 1000 58 58 594 59 59 593 60 63 1000 64 64 593 65 65 642 66 66 585 67 67 672 68 81 1000 82 82 426 83 83 751 84 87 1000 88 88 594 89 92 1000 93 93 746 94 94 500 95 95 565 96 96 687 97 97 1000 98 98 588 99 108 1000 109 109 596 110 113 1000 114 114 702 115 115 1001.00006 116 133 1000 134 134 785 135 135 803 136 143 1000 144 144 400 145 145 1000 146 146 648 147 147 400 148 156 1000 157 157 572 158 158 1008 159 159 596 160 195 1000 196 196 678 197 197 370 198 198 658 199 199 402 200 206 1000 207 207 623 208 208 685 209 209 393 210 210 673 211 211 671 212 214 1000 215 215 349 216 230 1000 231 231 734 232 246 1000]>> +endobj +163 0 obj +<> +endobj +164 0 obj +<> +endobj +165 0 obj +<>/FontDescriptor 166 0 R/DW 0/W[0 0 1000 1 1 558 2 2 256 3 7 1000 8 8 316 9 9 1000 10 10 471 11 11 557 12 14 1000 15 15 580 16 17 1000 18 18 629 19 19 718 20 20 767 21 24 1000 25 25 473 26 26 352 27 28 1000 29 30 558 31 33 1000 34 34 625 35 35 557 36 36 638 37 37 557 38 38 555 39 39 558 40 59 1000 60 60 346 61 82 1000 83 83 975 84 84 547 85 85 974 86 86 715 87 87 566 88 95 1000 96 96 405 97 97 691 98 122 1000 123 123 2000 124 131 1000 132 132 567 133 133 552 134 134 687 135 143 1000 144 144 462 145 145 538 146 146 663 147 192 1000 193 193 741 194 194 332 195 195 367 196 197 1000 198 198 607 199 200 1000 201 201 652 202 202 797 203 214 1000 215 215 665 216 216 596 217 217 838 218 218 564 219 230 1000 231 231 796 232 232 659 233 233 714 234 235 1000 236 236 653 237 237 629 238 238 388 239 240 1000 241 241 641 242 267 1000 268 268 334 269 278 1000 279 279 661 280 281 1000 282 282 548 283 283 478 284 315 1000 316 316 638 317 321 1000 322 322 670 323 377 1000 378 378 923 379 401 1000 402 402 549 403 403 327 404 409 1000 410 410 767 411 419 1000 420 420 770 421 477 1000 478 478 1053 479 479 700 480 488 1000 489 489 498 490 506 1000 507 507 853 508 548 1000 549 549 563 550 551 1000 552 552 562 553 655 1000]>> +endobj +166 0 obj +<> +endobj +167 0 obj +<> +endobj +168 0 obj +<> +endobj +169 0 obj +<> +endobj +170 0 obj +<> +endobj +171 0 obj +<> +stream +x  +endstream +endobj +172 0 obj +<> +stream +xmˎ0E|E)`$BH@E?iͬ d ,Mwk4$:Uumvޖ\^pd\T=nP/N{&>N=p\=Txŗz@L;ac@'b'uz);{ 79ޛg+ .}7[Ўz18UBh\|{[?=pUqTfx^4$0_¿gڔ-}RQ>b|ILAE)~nN{v#k Y +endstream +endobj +173 0 obj +<> +stream +xmWgXTWם1282h4ATB4(HҤQ,^ (t$j4&ʾ!?kc}(+s\g8[Y{v1`1e5 *BL(!Q+-?-psQ>w!*Iʒ#Ye)r)sL~oG8=HKj]U)v +:~ʐ=iEg2=><]\}jyjY:It]}]yɺf̘c@RDgzĵZ3^kT!-e`ڽ7٧~2rwľK9|1{Tzn:"(@-1 \C}]O=Gf\I3YgJsqp0(w0`-xu5.l {xJ lm?Em +QF ^qw ]-kD:ٸx8qBqQJxr`R.LJ夝.Qg;yFۘq6FdeB +b1`h^r<#ɆDXK|-p]x*A4cX%-<89`;ȅcn\)oKoʲ$yoGò%¨3~1[˓E!33 +Ϝ + 5O9\.bp}˲ĩ^[Ma0~#M 6@c:fTɍ* +VPkH sDL1{qW#$*ʪKjTz>oq=2%9ȭSڋ!1+7?#o4 @-PCH] +Dps\὾K8]zh`^) +l!gyVXKjXmMmõfx@wutDo͞?zUZ + AgxD g3͇z,˜ZkNJYh zKH$0 -"38ցV$DފBv <4Th,61UgCYQw_`8ܢt-h[P#Y۴_ a3s\AA;Dc`?-E;aGߧ\dǁ >Lerp+Q iaſ+e>0! LK4VS +}Q945<-\x4"x5ztig3+LqOJpKŎq֘rn% )4x[Lza΅tSK{!>p6{uf.7]5 >aELW2[BjrK=­CyռqOYG<,AMja|EG\p(H&" +]'cS%Vh`uB*-yXHNH{EG臃}} Oz +&6UeNm56UeVpp#Slalk_LaΗzӄ'ůC'!'E}EDS1g5B%^SCoi/N*?s1;B2 RHbjbA@cϋ2s ,@`NJ.^NNC +܋Om3plDFxrfeJ^vEf^7r>lAS%< `-\>;:}5zJ;ʀOX?P▽_dGxE_|֕ŵ:Z "Ԉ_[d]I!GEْ덇v>Odԛ~(ܬr X2QHqF=;lCB#b53$B G&_>΅?(=0c׎jܲLVmmFjJF11u}/Sʗ)(=<n71SN,ӿnMs" ÆZv-,ϖXmiJ5 g #JP RJ.Q$.6&FUKQzXb{IIsr + +S;."͊ 6}kon3xGDb?.уNy`uJ谓5#'y !2DeMPMX)*{1曎yFtt꣞7\Zze"+qy5c x[f0/!_CpfF̳FX* +-g\r*oQBơE 9b.ePSSs()0PCivi̊H%:%{.@Fu䪄4=J`ٟ XgMY CM|#Aϡ5 -7Sc u&wSI">,lkTn@RLk2jZOS5W˪ fO1IlJIa`^D$;prJ$%HP@OcK|Um:Z}pv8xE$ =Cin &':eOUw}KpS*mBnˌhGp͊vjq'UeGeD<]"ap2w ;U7t .%xi rP+t/4_@CM`N{  o?eI%csqlb!Sz=^LA֯N0` )\v؛ +O^d@UR +Q2S|/ /`ZMˏ-6Dv Ҕ{&3syK̋D[n*dlT#hJ'6`'my #X;<\eH > +*ܵVlʍ) ʈ5O5{xZ2Ԃh3s`fG &l)λZ;te(Nt~׹SC*v2Pk( AvxCa΀rԧvG +waaiIR&0vCVdvdR_V& +Q֑.uo /& E!722 8w3Iz /#Wρײy5 EV%RֺC xw6]3@e둧!_CﻁMvlTݶOƚgyw%f'bGjDpOZ6NQ-ⶰ[8Z+(UE;,\o׈p>F$‹.8]eQ( {QQ ϯ+6kQQQ=|&5͛*8kGnۨtw5:p#-^?hp}QSdF4vN` +p.–/=E0o|6HMF [ ٘`}؄pnE X"N,fÛQyYF!da/A;A)]t)2?%HgG`-B;jnNj;Np+%!;L U,h bi95^FJј*)l}.GMfK(bdPDOg@66-X66碾G +endstream +endobj +174 0 obj +<> +stream +x= +endstream +endobj +175 0 obj +<> +stream +xmMo8ڃ %0  496ly_ECSIqOrwm~m/rj:n_<ݲzyߜe6tw_oVn^iKDG3\}~߼uј7??7jU,]nn|>nk?|7m+%}~8?.xlzڽi\?7jf7?by7b//Yl:v|x[Jʦ[&nrz|6ƘM֍hm5}{pY M6zBd!qa'׼J6:CfBJf]R!3'Mf8B*;Y{C_+ w$|$sqŜ;HB_[s>K6qyW&|U IR ER'|a̠m˙/NlQI*)_&_'|0tʗ#w +_,ׄVC}rwgLhvWkύkgLO ʗ&vbƯR/|N%ďv^Rd O;/3ÝhA0Oժ$|>t|/|>һy@%iĚ>5W%3»n X^",QIzױjPAkϖ _b+|! _pH1|1rssg˲&|'|1ET'J§!VI3~Nl)`wZ҂Tui8T>c->c<<?ZYf_^|`xvDgfCGBnk^}dBH4yrw ztVǝ ̍ ss`daK@deA]/ —<^Ț [v!"&ABdEዙ/i)keD"%(*ϢFv*83j%De19l§V%+*D>OñEe! +_Ȏ2 ہ/ _A{BehOA%%v4QSC&Tf$᳅s$)_L܉\PXA'cG2 <_엃U5^Le'LNAje3(_e ~4~9h򓷞 ֲ֟-$ eKrQ | >˚3$ -YK)|~`gL>>fdZ Ί >}IVI9 +l[FL7SN>j)R?;7QGJ7Rn@ +nDz%۔Jg`G&.&+AΉWrv╜6:|,4qISXdZkRLMWj>ײ'ΤW*—<6֎hm-E,hWJcR'%|Ek`k+s`(y&LJR].UG(*iF^ &n`sz[<_W &<ܾW}0p__It^^"} +endstream +endobj +176 0 obj +<> +stream +xlw\S?wHko%ޫ:qo'**8"*BJ w,*S@pjݵQG]'ďG"}>ܑ}z>yyvv<>/p mE; k19zKMRO{hn)ox gnr'<'Dޜy߭!!a‚5z1ƌu^2/$$hȑ"%p#\,t%$xݛwns}V[F/2|͛B_m :wkMA~獞A!vx6<>=V+%VTTdoȾ{}"YI{sdunw|9~f̶Qm٦ "@R+8w<<㬠cl-6_x)Ɩgckówrӿ7{9?)_|359Cwύ>Y*M7<٢z&gS,w9[d'8\xEhr/g66v݉%;zT <*I9NblA_k]M"ow ]Ծ2lвAyn l5wF8=.n` 'I)SOy:5r n30+zɹ 珝_5 ?,8yxIZm^a^x|튺V&mV{6 7~sulݰML~i;{^@L`bn{Cw{uhЛab\y=jD2Fw*arCoBRSU)ڔS)LI:^jkӉ35YGs\sɽU`W{Ȧxa#K6VvU.V:fqN:TNXAÆƀN-lkn!l|]ˏj82wU~yϗ;\?s7{~g}?>()ox&MMLkg;jTC7x4AbyOgO6cfN|M&ێ+Yԛց޴. Ph `z%vZӱ#X`mH( ~,(^G,TuMt'J +OhT(b傜N8y3k$//vn? kLMs +2'srt>/}Jx;KL0&{+zncľ&*ˆ !ܸkΕw +#cpP_oxf b֛*/Yp^x)]l!"]p˧o;Vb.t$?>(4Ff,tBiOjY0HJٓ{gd4Ms|E,%='|g^ ﳍN«ZbG#Cӱ}s)qjoRju.6Gh/:<5R.*"W$b` +KQB95g g,UģK?^Cp=XcW>gQ5rkgk9=wyGP1EV"90]AM+\PhK-q! A!S*j5rbƸ'>Ê4=%GNuFLK0t{y +\`h4S' +1~-U'ak3SSeT1=C QΌ*)bL*>HǨTϕ "xDeʴTňc˒")?7d%MYd1̥2, [@hH~Ssb⹢݅d1 :Ah + CIB7ǞIܕnN3׃*H\[ѕb8d2 b.$ڣ+\If3~@#>%h0/%/:ge 7.bu g@U*V"БTDS{b6;zUz iCcmC t vӈ/BAz{ $`rJZpK.yTJ !JWjdbgEc ֑:M&E؂fC`<;eѐh--cP ~ˆG4*j5Rp؅dL[N@!ɼmXp~}e.H*4nDC˶ڰv8`/cQ + 0w߿0ՏC?H nT KW֜d1rzBܪI=ICۥ2^#-ֺ@C +h"%$b)[I$k r|aRK'`ϼ>yO{2jGV$H+1grM#;qsr+y%͜Ʌ。pTl\\Ͷwyn7[66~;td`HRgyS)}c[dyiybMHoY]ՕV&SJ,&@&fgԎAf;oKHd1_ViZ*NL'p lM*Sr @!(ࠢ\ <=jO ( :tUiϧ?1Ga;<Oxֺ$yަ&X4cj Si_ke@pˢ/dRѧ%mEF#SSu*pCǴĒhJ8GEU d{ǡoİ={鸸NR!>'ZsFWhŵ9/%d +y¾ ~VNq8c6.z1P' uofMshw{/̹ \R?VWՕKu$]*+,6n 68ñ̍JRq({83ASx@>"UYp0ϩ)Eܖ=R~tRBYo5 Ob+_s3eEJi[\U7NVvd˩k6e+W4%%˪ޯx:_>< 5̸q+Jr8-Ί#DqUG8f˴ +;ܲL` gN'a9Y Se8@a +Ik"Nל6U.pEE%&ML:GPLYKMlD_*HJCwmF]\j%o%` ; ز|yTdr5YfxV xI6ː"'?vXnFϾ(~%w\8~. $92Q˦$9DSS?s~N°q'×FG'J"v:M%w'eM)+ òȲ/I*_Vwne,yGDz!}8P;g )1%9' xeF|ReR ʒiJ!{ v`HmX,-N0{4?Yc +)H1rTQUQU8\H CNQdaZ j)L<oK4a<ޟcPӘ?0_k"-]\+y/$pan-8!XLp< RO-k,Ls萃Z?k-ﴮzhxOEڢCz\CɅ₽'+%Ӳ/6xEl^.NH*:ZR(BXs&i4nf~ӖX*168!yJj86,)4y YKU +{g0rGl)ʚ=X;/Cq؄iL lL[+ t$ςd<ʂ}Yg}Hx{':$Sd"r:E-JrHXldwIjKWRVaW1L7A n4؛\X'0.}矓<!agڼrik$RK.QO9( ឱnlS;wUR>:}͛QEh7泷 <3fW S#BeILnFwj:{YW'oT+i}x#2la󐯕pOշWH,@!6SٛV\Yx\)gorSRxS'supavl۾X@N*'XKf)7ŞӠ'dM$qr8*K#ՑQ2"'/'*DaͰ@#v^ڱ̱cBe8< OBg/c3b&(z:^a3ެvf"oXQ`Y~ ժӝsVmX {OeG1,tΡ[>ΜF DW u!82/47LK`}no"E5 ,m<@`F~y-+ >#ſ|Wعllܲ n؍M435tSK.UPwJJ,f-n0H,kɦN*gmNUxDloe4yڐ_+ ),F7M1&;c:iP.u"O%n45ʥ*Ħ[T\T!9ɚSmOѦbM͔3Rќqħ}֘bKA'QHm5|0P&^.$>pv#ndß&hȯ42~I$>[W0CAotA0evzmRѲYDǰ}.%RѪĴ[!x[SRK$3%A̚( qL.8JI&'I5K2' +4l'=󌝨!X_YK#}`3(\ߍ |XrNaia˼50OEoxPyxʼUl)ĹgS5I+-‹+5Ϥ4ba죘!npBY-¡&#@c`%([zJ*Z3Hd\HSV.#Ў< ȵRBX\I}sՌÜ@ho@l}l_ +G1$x5L~槵Om[BncN&WV5STCi~ZJqJ/*FF['ܚp2+jrghCYɔ1M `+>vbqh:"LãGإԜj +vʧ>g"'"R' +b~Xy}ZB=O)+lX[B cy%ٳ[Afc'>")rA6<4)FGn~-{-+L+idI[9eEZe +,ex$:ϔ1UP=@[2-H@A_ \-,1 : _Q0-2cM$̓t:BMR5(M֤(To!+>'6$e}سKY=,9:m2O8_KܢEy5H߼c@=.E5##ÃJI. M JFC]n}l6}oL^S5M*r\~GFd,/&0uN&k4!@O@ _#S5񝱦n3 9 G`ͤuMK>z)w-=Q⨦}hMX qtsOtZzdnL-[t(G×?-H$y% \"q4#q4Tg,2r:BI3=\Z&Za7,yL#pTghT-mvU8D ,G +1;vvKo>@"wqr{GTbsT_UjiƆCؘx6oz|?:^3|gJ^^Yny~a\L;?`$m&Tׂ,X,#Vp6%/z 0h<ۋ}CA /Wc.;bJr4IEgGXzk91dj(-<6hp9\k;B ; % €(Fbsz(BQ }Cg +Bk"ݠ˃.`#4}{vI@͸>ާ23^,(!MΎh- &t +bDGe;E۸ +uQ\kȻ2'EPyy-#p%llKw,%שR4;RiaʙG66 u:+/Ikqd3eq+`'Xɸx ]%+ _yQs>XNk9pz.:?\>$?͸Ѽi꿔]{RVnM*JH+W7ApӥҰmwFtbx&6&d{R*9O`1VE<1G}+<˄/QG~tM|בc`5画E&nJzV8%<XiÚ[lZT1QyruZ-n1),a(&IduB59t)aILȎˡ#8a4cch]}qG0mXNJc&HMHb mK&z,(fs0H)F``AY%=Fw-PkbHcf:(3=C!^:/UP d~5ֱ@6mҷ}g"AO4֪?7g;֬JpC GVLjk듪ׅ@EZ T>UۥE$sz[U=%G8VCZHO:m՜m>="KcL/-ЅɃ,<&mܦZ*%9챙`\wVxVO!baY(ҖFha$s3l8[p09 ޠu3I^px;:̈;A\= >LLڢB9I;'G6LHK)*?/&Н,] =~A |g5,KKIժ4߀7OX4XJo$*5JEMK&=˴yxh1 3aȽ_ߊ묻8Ds:/`H?"R33S25x n>xRyh-CCCwyxk@ +IВDw*T7/ބj7`=٦c|J'̆;<Q~zK6M7OȦQ;⨼tRqs s/Vz 4wvdL:cИifi+ͼSs]n8}1LS! сέhMjT–}}ɡfqLJNMY +p2#يd-O܃3q:ġz~eRʽ_KeՊEDQkVFұINde0ea3DQVF/2w4v{JEd_W)W{lt WX;3iHҠA&2=힬0EK"V"?nslb\|B ^QK>$Nz=zGΥp(Lӌj Dc?@thW 3va})#GvTI8`itqDA:7r+:{Ӄ?>nUTzPW^_-823 6ݛI3ʏ4s|1h!wJV7)fSitd5<[UԆj+-I˛tVZPƮϸ`a| 03cޘ.cvxgmkڭ]*i(;aAf3Qt Wadldll,-N4dم|w1Qч;}?&-Kt5@N0;,mZhJ6q6ϸ 4RըQ}6]Ԗu5,XrXhlp&m X|/P[Y>~g‘sw:'^ UiWQ -C"AB*^imfͩJE x]80m湤$!>|@ g':,𴠔_7DIY4ES=Td?dO#H /!38^EA\~mdLhĦ*wS {D>}V,EdUxZbQx{#,7gaп`8&]pp8ى܃o ᄶ\Q%sa?SqC"] J\PطKo\1XC/E~H ZvΡ2-5[M藕V8tpAfeAzMKe775om{M}zfBy0N $>#=U\pD{AV`_9蛥M*5եkc =,.YH +}UW>xܿzvM^d s9f9m'L-,+5:\l]k7VG<^@ 0l~]a˫egh& $s h;~ccj6z +?cu ͏Y#0j83"7XߠkʉY5iBB_%2<.:Ё$:MNؓܚty.ɑ):ãY&wLio@ Ɨsɩ#C3s\Lglt\q*7!'0lIcy#_S5/S۟3[ib'1 YCV[[oR}_hsߒ מ;sx!"UZKv XDc*= h"9. 4bWb,ƛ@<[+y^IV&k=3|XȄwv@ y|%kJHA5Y4qxRs@]n7aHvY]{t!o,$nhCh+TL jڀF"DvmvvF|Zyn?|0N +ߚ irk\/)cˑɺ*N^RRL[~4ORhp0gqj+.1 o-Y7-KBR[5֧XhAv?2E#G,r{v$34G,8Va>aRۥǶYwvsW yc$<X>!Hͣ$<6<`jv3d2 V>8ҔVsяT24Qr~ޣZxpLi[VP >'pg3(DGG:Vu*3Ū_yNfJMnr +mz8S;~)9̄zvwbjD9yc׌AuDI;ćQuC  +HFc΂3 +&oIwܳrfQ26RE0+p/D݊'*;i|xbVg$hn+jOuQlY͑g;;GwwAa&ar'Qhݕp4 3/N(3Q]:<UQp0ߩ)Y̌s=\ԚT<*ןO0\1c[pyTח'ILpb&x~ٞ_TZv=Xʷ/~9\@3tx . mWYOO܁Yִ)9.XKKb-[ٲWX[ zioQl8d 8&dcbo.qCs?g'ir5~}39XRo ti#̾l7BrG> }S؍Ybhdjɗ +L{A0ƋݸTKs]P.n: WPRN{R' bS1keʆ= }lyT4ަY0Eѣ5Z#l$#CBӴEe:#e!2Udv-?%+|ձƅ-FJo\{z" uO뛳GDվҧ9T2fCnSɸs+|+|h1Wc[ }|@%tL-svpnܼ5.^vf'ir5r#4%tlܾxJB#Z|HC><8Dto03DI + l4ơVUc`G@Jŝii-OW)\rSHdХ/ۭ@(ب&*7?Nc#OO!=ʺFATF} 9E#@&t$7A9bQ8:n?_^իWeYm 7{9{0O٬2~چQK柒gHfԇg[Ө Gf휁| +[/;;Llח)1-X pQt{3Ă::~XYUY{Rz3f¸5)G$=z8q|+ ߫ӫT\ŗy΃R64ҧEH +WExڱ5/sNT]?[QNgk|j>*`ID5S00f5AOb7A7 +;Xӧ4FAb*8:"[<_7+ +O V{b@S*o(];n]I$,r(@^ne?h/=ͮ[V`t/{޻5#5D*zcC,=`.FF3V5X,*C'ѩA0\q+!^ٴKEgdV6Z#C6PP5bvRG]ZSaҐ/ &*8d2m^d_غm;>|ĺ$ҸO 0 ۏm =\[B&4VbRCZ[DF먋'+F |"NbDe'J[@&wE+&]g$/LBxAY)oOBO=|y|?d~ ­N]ԩ3z<5C՟K*/eݼ՟Bikf!b&emk.*bXc3(xVNng&7z l`a}Yv+8Hi¸?.~gTby;gL{^Um(hh=+:^?[=Y[auBRv۔z\xk$''ȓѵw $~`;Cv}-2o׍5*y8<@q2BK)YsUydzssx\Abajl" ?PL[ֈMCtZBr\J.Dq@vRS2Q&^D|m 5* $Ѫ*HJx/3ٛ⌟ +}&ي`d_Q]Kc)$p/t&ɕ[\NJLPb\a!+[G3T JL=XeCsxvC,!EDlؓAǹ"p }bEwfw{?>W>_F o>`'(, +7Ti4 ٹ1xJddD5Y'׭+R +"ײpI +6Lc=qCexe|=Si_@}%9ob"U/Naf+h(2}b1bNxIɮuMB +=VfnS(]}hN +i9=]$$~33yRlVSl[Ռ9ZԂHޅ9=Gfk%c&2"\k1Bnvђ-.)VީZOׅWOxFR@w= O׿S>.^ko;TX q0aQ+0@` S,A (-LdMiT}qg sO;G$Z8e˗`7 (\5^HX[Ѡ lUK![aaa1tu5($}$PUV%dĩUlWi4RGM3ߚ iܞ|8awfӤV%J٩ uLj+[|^&^>EmׁɼތqA2sxmy`qC""Ţ/l4a5ۂA0jL +HF(_nv<[PPt]脖Ia[Hc/6,"6N~[qg-]oʉS)H9!L'*-sޒShk? I_ }br Xn-Mn3 9$;ӤЭj,bO"P`qY<}x*6i9\0JO.Y&^ށ7MiêK +E NH;*PVLw(GqMC6%E++Zi긔4 +=/׸V֩fø>_I_xE] +uQ|}!aGi642XXxpLFxu-o }-<l60H Gg ǭuN n>^jH5C=_%9xkup]Vk~mpn61/Ak',o 4zcI=~]2AJBjWpU)asdmD ,)Y +>`AL^D2y1XIx < âvL۝JtIT1\N0;DH4qN %hK1Lqs6,e 04/MaCp2&`o=qR9.6666rX@}3SI + fs['O}2܉I CIX[f. ΎUhP4!:_\3 AѤ$E+$~WOoXeQ֣eVy0X:ɴqw55m.]cJ[/e # Ju\*NL0D3!;vCx.33Jc<.3 H6 Wk9c $s80w\18~` :<[E ,@5`V(o7A̷@Wj숆Jڱ*G~=z Ҩӹ*=*`vZPp a7 yNeȕ*zLL +V|VGscG\_MơICtZA]ʹ?W@rjD>dIX|2.$yK$TهFcl@+8Lw>{v:AN (j*khSJUq*=)Nb|De+ީ\_ ghX m~e# C 8B',$l XLqgX%4º9&G3\Hv]:xV:4@L\]j2Yt5b;Aيl fBw(u| +_ݫO55eƨrk6mY.r#"J< +U~UyN_~o?T97JP_gv ^fzZ{]3rٽ8:1N՟/LfQf,㝹8v5͜3m`^f +ebkjo3 u2vށn#K]6$#D`=5(XѸ)5XKSgsB%Q0Zt ,84@m\#W0mаhq'ƞ0 NO9WwD̻ria[sbAcOz`fXMI#"1}saGiYz4q| ̚b!Cn]Yl03*=g挞FfodLN(%0h# +#W7-2 + `eAWH&FdjqJxg9{_Lce&8*T|6ˢ*K&*]L+Ӹ+icdY5L|4]0p'ťns J+ bynBWvx23θGo•d[=q&,;0͜Nj3j`Y|;ԃ!@]P \Rr@&ـ1 o49I _?焣Nґ)gOɨn"UTwA/ܦQKoT¬H>ܜLz +:CmͧQ.suAtJuMN9um45+!*\מ5wحl +KyiY5ah"G&sUZMF+6/qRr_̾}vhR$7Jʁ╗i%+O9Yb1}:ts +ī{Hyvlv.{D"=kDkA$LRJRwSzzT%I~܊̠ QKxY +3J33 .fTAt + X#M../x љ]F N2`vklG0kMy{X aIũP_$RC3EDKy/C]slIy_]LFTu3#~HLLЬCiiA^P ŗsi8\cMT{ɊX\l. |d~%ymuٹjY_ngNv]E[O;kB~rpf3aP-8 4}N0/YDC }vH7:x +AtʍNkxd*'10z +_2w!64nU \S^A<{6Qnc.f<¼o{_l۪ۢ~(=P'= oI"Va + BPƴ^Yy*x,^)'F_~vs8IUWWV\RBꨆ*KI ʕ\A,07\R>h˚tiTmm..NEs '\A,&U 5?)f}21ӭ'bxQť&}KyCuFUa1V.6`es# ++9l9 v0i1{Hع' u6|Bs,$,)Xgq'XNb% (ڸq^JuwֽƭlHęWG'`ed]x64$(G NԄr/i9K\3{1rd.Ew9 >@r'{]Si Oa so-y׽KYNtoF,8+{N%Btzo`sսԦ{<'$ż4=>EWzYr f7:A۷Gn!h !|4%BCd^Rs3d8 e8DyI0{n;kA7uXC)q(7O)R6@o_ȤItl] "Hfc!5LI{'Q@}}{oRI0 1B?9f\T ? j=CaOo^:DXI^T,m fmʯ39eviSK-h:F۞Lϔּ7LTJ/=6_kk ͉l<Ⱥ:G"gwP R 0ݐ/p0ݤTs642gEqWp6`{4섚r wM,vЕ1:6}N#Jpp+vkW }YvZ&^H鰸}n.^tJ&E UfTՉ!3%͂tJZO̓` am`N9uʃ.Qt`f +`1Leg{,_ux}-4Ӭnl)yH%O([cq8MGU7;DFRsٳc1` th}*~T \]ɂ&.'k9| /{Bb QKYC/)50zAX+`K+؂c)IZǭ'Z-L `X): p6,\_*[v_z8w8S|oPhw*VoɊSrOܢr#m.K#8T[Mc. ˒fp +_Y& COȈawgHG3 ғhcs]CyJnc +c{@؛ǟgLj(̚rQpAθ<uoNƟΎS3=\22 + B&[,w4 +A(`1ZXT*<1bs0g,~s敚E۠˧A:u2?[!y-*:g&.OV$& ˭^Aмm1YwIDmIaCf t?~z^UBbSc*UgHOU0ˤJj 2$}mhbr䯜2ǐlxE.z +8zxٻ +3#=Z[uSA1x3IEJM.Ryi +QF\Km0KL +Hz/l26I>ʏ5O(J,T4`uD&[LBdAKy-բ\BL8A_lXxᦲ%墏*4ƭe0U:\?iB Wȇ2 +'ߎ E (ٲ*\b=&52/3/0,B/y'} ,jPe}XE 4LlYgnʘ$4<>~U%{ :Ba7'ncӅ7uU$>a>4+?"vJe/\*i$b%:R.Zw˫,=9d,I| +% +=#M!wHúwOϥYš/kXTD#;1,wxph*7)vj ;gjJR4#q9ͼn-鍖[ՆK@C?JxQܗ/tMsM4L$K6xIEw<7vu".FKX?6Pld@ +ړ8qF&vJ,(nmЮ NLJ'ZtK+/Ɗ#cR=6gFHkY죉WE0W53Ǭ)Hi÷r`,K,~e(JH/Nt- )7 +"1Q)OyC4 xV_ +,ZgFihw;GpOx _e,^wŚ\2E +;5:_Mޞ))I7n"pq6 +el2rP?fF,fGA`y\M @o+S+VVkrHx0ڴo9;7N> o?xBG],K`HI]3=WTZpاGKW'.aw&Y|; / WDhH,q,)PHɢ/pi=6F1tn dtƔ@I͜2Nj]4oC ް<)žxR/ăCL+Qs3$Kߓ]7&!lQ٪3bTxՠ"Jۇ)aqrtZ󖢵HVUZZ[xRc0ɷ}P7MQ=yw3a0}忍Ɗ9mVtix`FK˂ N/:M:}x]4Zz ͏cn%`8tLSfW^ Wʜ<=Xxi8gx]l6 ̛/…+I-~ .vQ. E e ?!J2531O3VD(! ƿXӪEf4r-Z@c>=o*X84s`MľM#qB-nrUB|ˆ_u#Yp0_Vɵ8@mhi?F[b/'`>w~c?*i'?2viH[5l}Urr(iTdG;`ExzH;`u +\ͽ3}`Id$c1gJog );Z=`[["<0"x^w'z0$0Ni%DνQmG_/;C"]q+&@ p\($WNjBAKi}|gǽ!ө3_pi&둹q]aǞf~0\s~5XU|?ױ>B K+ʛn^0ovL=7kbo~|$ +-9zN "P+k[ dkyfs)&L.A~2 ;d⯥O Ȥ֚T=|Ktg#vQBdmPV&.2ᚿawrK9Z9,ss'fAzoxE:ss`=o G0op>bF߱x=:uZROtTyK[N#;l ofncZO ouܖ% S=.ƅ8{Db0>vװ7 Sd +G3#)kډ8x~>Ems_ǂ'0g5!L,LJ3=)YYǴx5m;p1,~z-i+ޙ $8: xwg>GIP !1HfuMHקֽ&63pT(+(\U6C*z8ağ4HqtGfp9.W0 (0eƳ -GeIT̷0~~&&M[I{2#Egw B-z/K"\7=]Y/gb=YPޜ[˗4j _pd^$c/C/ahcyhtr<-4|ۊOī Vdr  =xǏ=c!]9!ks^H.gK1D37X|x0fj0]5X@Ωr<M[VBXr:]F)W#[̅-GHvTI1}u#A_9C|闓<437RL]$wqUth>3*㕼7MyrYJkfxƌ0R(§n'7cSK!-+d*EL>w:g ;-tVp̧7K7E琩;R|c6 X`4L%nߴc*MfI慛hIOsv5:J9tq1 +z{0Ukܡ.LPs%u<8lIGYࡶ*"5X *%ﵢJLB1j _)>RͧSHOoKWsYbؑ+D3/|n-y9٨KxʒYfdm:5X2 XZ3@^mn18byiNq^E(rD%ULUf%M05*4N(UY*3:](9ө3╉IYg94+4;Tq&>5N Ϝj_N3_uu +'⥼-Bx$hh}(fԴՓaQCKr?I0U59I}U"nQ@su14/칦$Y*lcYڜoOJ]ƳZ4vuƱMì0~a IN^{>#(ozҭx=cK)M m KBݒ2/0O NXXBZk͆M fEL԰__M0Teפq*v9FokPwںb2v]Kirj@qR37{`g}j ;paߕQ^'(gq53d0cjS1{u_=v( ޿,xF&3%zTZcxlgֲp?մ&|~ыK 5-ˆ^hɢ.&Z + V!͕yw~wْX[Ge4ey%TBTPC;;P .فc=$gavlTfÖr7% $朘[91h=دJM6JXD507"Mk^A6k !ҠU~<?Gy8X&;>͞>~NWR~!9g"*At6Pۑqܓ8KdaZڀD>}6zR{3it, +'aZkSToّc H$23,^h[<J5kת%|-~UI&hҖ2`bwLZ`ЊvS6^]c8,8K9Y<,x=lS3f2eiEv2 Q. 61ܑ + ~q^ LRpxbnG.)ޝBc ,&P} ^vXj%s9fHܭ~_Pwb¾69;v@lsW=n3\݀+͋a:Zta2ou۫vl]L9&J~"r`@bN6!>U嘽 +^]J;z{`{7M尸Ui +fTSYM}_0ei.Mq5p68i:[{ZNq ɉu΃AO#@ǟ+(U}*˯~})@-'Ϧd?V3bh[FeI,:8NRlRMk ++pq?o> N z;؏p{RdXP5dK&{+ɴǮ9 ` img|<:j7J}s<qݛu%Ѧ F )cV|| +{y9 ɓjKx~[Vx庈qCOD!=} Vv3˪ļCNɏǪFc &PN(h)d7o"~ND4Bt`R ̈́V2wpjQxc'aq(a 4a"v‰4#𜉨d#yKT6ELΙ ˢC rTaOXگM /G,O鴘CnBce}Uqי98S5HHytORCuM-FI˱Qr5䚱1{;+ +Xę!Լl{;k 7`VT좢S$Q_xQDq[Hp<.ɈV݃~"%dnGEX%/],NPqkqB̲~hl**`E8ܥM}lݝ/Ypش=~nJUgOGE{Fu|b ̉zο&RŤ„2򷉢eFk0dàT&j:gG+~ᓫ9)´(x&SC#Sm0j88npgC39kœk^tfYzU4ZFf}yeŕ%)N'4[Lb6*\0I^~~FK?+f&Xk `a qB$3p+Χ΅(ZA +}$)`!~H/iUpVr+`9|/+==-|3 +c|ce}_E;ٔe3*J2[qle`UViadMbjA's/ \ +KIxZxϙk{I~vFp0¢C&e l]ܮ^,l3*t}iOЃXdލ6tqU2cBo'ZUr^vϗDT:c>%\4tY<E'܋f@[Agl~l9gEQms)JcSTCV"s<3Fe9 y|/9t-Zm]ZDL`4?@ Vó sdK{ԻQ Qy1}3DYaY6jrz2 'qLEE^uV15?F6bb 77|Ƀ42_GQ\[\XXZLGJ 9ȋzdԓUOXjb" +f 629MJv=؋uD |O 7NSŤG +Nu{a{C1Fяť {]zV!Cҕ1*|v5%$q6|7 -̧SDYfogg[-}!`hPY?ׅa=d;BI4b/I0?(lJNV`;w)Hl91:"WcaJKpbۗk弱T/{q^R/)n/\6?fۜǰ +X o8aSel+%D9ca诰:)F1\%FyN\Y +Ѱ*P|2dY8a*k9ժr^(B`4kaG\QNMI6M09V >GR T:Y&2gMN -ކ M%ǧႩzkUP$a+I(1iz/9P,}!PRuHw8djY+O akG.Ц:g@O#5t~/a@O$QX#G>!7>/6߉md항OݾT&p053AOSOr/I 4CQo]$N lMpZSM8w[q%>RȒ)dH@u?dBN#I5.> U vdoC f2$5٘(DI(!?94/xa $6tz*~LzGx '1^<τ(C(z@Jd0lZbhnMgC QcP`<WG(E\gӞ.paѷ;\{Q?/??&/?C +]w/6"[hrh +5thC\s*%@h IE:QdbٴRMmo+`4 Ͳp%2jm#EAkPSeqs +_aV~^N¢#RVX/fȑ*J,dK'}',e')) $|l!옠 6n ;d2 ^3MYMVC˄pCdϏ(N~ٞ@M {"''|Bj ]YX]q";5@>KL:’ބ#H@BX~wUP7F;tw 2ג򂪬 x$fxoWtNl3R,0_ВŎŋqYrnlB J&;717iLuW~9݈%>VWfJ*G =qzwVzO7&gvQ-[E4#5KLk;ցd->8]\[L)y SXU0[|l;fK~k,j4 +2\ͦQk>M 0,=p7+vYUQ*XD"""2eU'ΰ$6E0\6qQ؊' R@ۈ% gBCtaZgG%j _7f=}}dkǺ> !`/x~݇Xׇy?g! 6a-&b` =c0 MՒl[4~|wJuLBry3p8;O}-0:o Nk4wcX##WlBP3SLqAq_g#MkËJ{kZD>7mDd.$OJʝ~bc^r*V5ƒ$4U1 uŁ15'+j .2eթ``&^mf^u ^aT<6ڒ(r"(x[|poF;$$K eJO%UՠjrclΛw*D2:\,޷t4ƾsMO-6sha F49[G{?)X)ղ wqoΨ:2q|w/;3JT +]QKjKDGeB)c`C,%oNnT=p;©抧pj8Ǿ4wXuưܕX56RdL^cSDSp]S7EPa6;ք(ȟ4yM6= ;yӹs} {>`Ɏ2Y( +}ʇW `e%3&eg4t+O=p!)JM]7'U o73IRBH.R/jq~vdg/} +h=ju9JKScP B:*!xNmEaW7Ҿj9tbD3]}*b-mo\2{UgbBا&G-2hwTa>COKTob}i@b2w؋9rG"6Ng}JS%_8φ(gp8-mi\]єt ژoi$f,$<_@ɺF;1T̈uR|\IYjS#%#.e0su(G+<Ĺf5{| &fly滩hN]y$5N;}6%qpP$96gWK&RnnJ f' e%#J\Es^,w^?pY|V쉘\} m;Zp1ZhZ_q\YY%:)s/0["Ͼy7!Iv֨m26=7=76#*Q-6C+a h'ĩ ۲yT<C +7;TVd%itF2Z^{AKV)~aŜBt'PB&CcңO3)lOǼϦ=ne"44'I6>MD8$⺺C[b%:pՇF$e mBgʠե$dI2H߻~ɀ:dt XF,6=̇&+8S"DDF>)#1y(':Vl(!əӇPƒsEɘƄGa?a-Yo~Zm%%aZ`֤ U$-`y#_HY.47pާ*L1*T[xfa#:$+,2E,O[rc_8NB[T+bM@`/MHJpJZrP9u71R@r(QXs`Q|g4Cen>殚 ojӖu-n~L0o=Ka{J +_X%UR׭!׺ByȽ/CW%vM)Z"k-yn,0P,fR%̈́bѕD 09nU8'} \^U⃲x;ԛFͻCaͺY=Y*)'N"WXWƀ- ^Pu`Yt?-t=5%n@q.:&:N[2t$׮$5=7TU4qyᑕKU]Rcar.u af +e?dj35jc4[a8H: }kfwV|cn |v" +h+uľڄ=9P]cs +߀!3h FE\.~B7Bh$}Tu&3(w;+Cu>X{}EY9ns6'#JU!Lli3$GS3`.ы5VskB.)WsTXP0 ZYRPHj5t{?tpluU}ӡo&e3sO$0hRҰi@4ZS8l4C<[Ja`$u`#[8QK}]g;)~ VaR- ,yLCk) )COf3*BR0|W|= V@$:NرkKQ~;Fި7\XrcA]($R`MuMoW;׋ϕPVf^ +&A&]Y?dq ;{䧳`sÞ "1y"ϫw,ٹ|㚨mUhCPaׇ՚',j\--ǁS[~%WY=9Gj&}]߸ø[i ovjsE;\#6M>9|42HO9,y}a(}_sSؖNMKLKM8n Fxaϩ(}_sarJBjljqmD{ʷtFҋL,ڗ.bSwX9\zn`ӝ٧ o:m) 4s>)a+n`鉩It$tH~00ǿ7=ml + +hŘ*XWREts@lsn&c %[@ +5QEլ#!G !V;kx'>\+(?Ij@, sTt fn͸GMi2G,ݺ=awp9= |M^1 +GM؜\U8vhC+ŹiXD!dZZއ?BKWYYT_k"]xAi(ri`oDڜqBLc#JqSΝW,%3 +2TLݔ'ayd^ʂ_BF 0ӧUq]9rJ@)k;:_/_8iτ\|/&Xm%&X5 sWP<:Ukw:)jG.'O9$グx}`v/y*ӫ̪G|wۭۛVGNv`( ]qH_'a٤vr{i`cK.v7Q7q] (I_, :B:>gh6҇| }- t# sY09z5rG-"8]R"5`]f *_ +t}.+U Wm~O-]?K 4ٟrcR&f.6R7xYg/,:ͳ{~h7fPI]Jj +FV3Bw+4DF= N>8knfPIfl'6XrB#PVCZ/P]">< +c?w4eiGa83LvOQQ_Z{|2J +38;W:WDx¼` V\E +$2{ OdϐW5!n";y9ŧr*XX|=Fw< +Ÿq(FZ՟WC&A;:G8spD2-@R`3o36:wg5 u=w: +V:-V{M:v +-/U9%,ÄDM :ҍݤML;+b8۷.`8'k[>ȹN,N%$YXQ;fas};37έqx֟?CI [0tx  +Q.B{ +%4ƻvJg4K-wG[w&ocNVfU04c@EZT{5XPJ*^Z+Dċ-))> "Aa=(e\Lʗfl^vukrwf7t{d5I~uV  /-_ܴ4uܔej)LdGäwS Pqa.!d5h)-_-o9Z 1D\ajJ̤h QQnO.ӰyB*p(ŕVuHfv̡7h` R{I~Mu\r4 +qQa wV2B+}G8,Vj9\iFbooh.ͣ]v rQ3h7TEhBYTsQBhgW(B@k Q-.}& c{<q)i0rq-~m@z'U[xtC' +σ/E;5BMfUggQEf6em|BU[H9JA +c>t/"Fdߋ/R=yrfCl8It0QD cZ ]Pixz +rﴅ"W3=\3KMdO`f߁3g"oDG&iL?7|çDT9VU!s@hK1! 9mZ&сi^&`n8f//%?t+oj-^;f^ϘC,$+gu;ʻX%=`=Y|M^)GEldt29O^T_QBk4A_˸s2#` t۳gnf'¢HD>k"^~v{CvMwĨ2O^fMM g,<y }< iM{5C7[RhC6e]ӦDEЦTUSP=o D_{% +lII[A$Z{^יRqM`>;ԩϋ|S Z )w 2R=pl`ƄJaJzzl 1`-O[U^ܛ+KƞQNF9:!7.7:E ,QidKQǒG"T{c鼛x2 oiǔ/-LJPxkS# jݮ)TEOQm$R&\`p9gB 'Ph2&L=F03"[gO75U㗗[UK\";FrZ# +uЛ5t;ylAIS1T0<ؑ`M!+z +~fcE>SޠS!J'p/d~&p1 昭`H>Af_V806ǖNV/bhj8Ĝ9LLd*.dM&Ea_N(Uŕ' SC "VE }҇v-]f+hRa>e}vFf z aaYt8Ulzh{}stea$B$/E/s(9Sv3,i;MI+oIͶV0A2weS/zIο{b6 "O&ZHoVOVK񃘁H#;Xl} +(OJf~LzrֹQi2e=_G\3eů8Ze{Z#_Ȃ{>*~2gy:gQjYaQFC@uH]wh9\ cã#"?rlhUR0a?ͿPJ~#+- ;L0l;V.C_ +hRYGcST*#&T%\a8gj\'KlrJ(ֲ>yIܹ< u5B7[L)qdeN^*: +71CsiQG>njɎY8p~9OnK8W8- T6G/)R125ZQqߏG / +UW ~yc:̂T~damTAaPO\ gL )toHvF $큔L$'G-/;~7~uSo,M'ĩ/K=ĹzDTqab9J]ƲOsܧXD͌[9VKJX4'DL*}GsV 'sOCLѪe+t`;&Alޝ7IKD2m>Lzxk^gDF$Ur ,zv%CETfUEis<6Uas&Zb*ʳPﳯYE\ʽ_W Րxs)$*D%:^qG"vk61ⱲޏRch,tWNk4*)";٦M}ŬQ1l:iNץ$^@`, f +{xu@kageϕAr<"b¦CBu3ZV.F) B\?F~]X_niZ[u%O/a:F< +n7}]WHRXh~kczez`~ezn.ߝsJbL̽p_3g*+VrcG\]nA! ;+9:u:u1Fݔ0}x+F פ^扥Nl Kd};,$9|p A/6>'Qj3" +~8nُ̹ym4oXZA v牢hDV|'HF~~ T +/WB(.-ge5/:Qg2LŽ9nAD"؟PYqȾ ؛pFFJѮJLm'ESWX+Mz#. b2Q⍞3"rbmA% ,5= Ϟkߢuc :ԀCO*vNV0Qe6ڎ +ѐjl-5'oA~GJ'UUg:Qg$V4I)*N YI9Cͳ +G{*¨+ՎE[6`QP z)t\쏐ׄVWr%Ǽ 3샫ʈY9+^^O|}qc5MfCYɱnR߇sXY}#Y 5\F,^KT1k%+T*S1?yX6f`Bhc:XwT3۾uxp O(u/8BU k*/<{PoEyٜ3T":h-3:"В_%(-d˴U5!iMޢp+q}q>-b8#ĩ.l|)iexUֳqۖ^M?V}ŕ|5P!6(OE k۶.;$؂wCV2嶹oqIk(|;e>+pvÿ ]Yw-VSwbXnD@Ψ36`,z5=Kh.UwzGj/]Uy{-U:#2Wxxd@4qf͂ݹoFZ\ dklx!VGYfeA}R\F܃ Znl$0x[~6*bZ@j?l ۃޝziMcDt͝-Uxu/Il&EDXgU1\_%R +t)ǖyT\]]B[_]4X_|\&o.ϓڻ#V'ά'M_p;}uFج`YktA-\J~EJY\E`%M: gL:$ޓ9 ƻ##8X|wy3$a_ϋ_qt5 jA]# +endstream +endobj +177 0 obj +<> +stream +x>Q +endstream +endobj +178 0 obj +<> +stream +xOo$)&.6$FHkiJ=k06J=cG_voח/Ϸׯzzsss<~|}xzw;|syz~}^LJ777nrw=?>ү??yy}ן\.777>?>|s777n{yVc\~xzY#]~qX߾o?z—?zO}y'/??ݿ>r +#||w}9=Oׇ;ǧ[ Ry/OWxw)>]_>^?=t}nYݜsܖ|zݲ=+,w),V|yb˻A+իW +Qxgi566sF[vBӳoVer +"-WhQ_%rts}˒d@i-חEt}d}-KYiQ_ CjZ\_C\_8nu}yj$sG_]_}ꮮB K``8\Vח"wBE·Dח"\jP,EGڈM[\_3">Q{d|ժȊ_ft}3)>k/\M3'gYj333$חL}yz>UJ/Qr})gY/eE(>,$,Hfb"*]_.aGfV9#r{]y ]y=W:#r~v)*+O=ٕ1̕DZP]U&Cy+Rx ^Asqe; gPn W8v}-cP{q}'Eg|Y\_X,?SP=bg,"dעQkLQGu)kѻGBcUՃ﬌ޢ)ze}2&+|؛,ضJ?UdנW;JQevu}qz'76Fo4Fbzh%k\Rb4=M{!TeȂuiȮ^$az̝۠o;Ih-o]=Vǃs࿪!I}w(Go/e VU ٵTz!+c']ovחG7*m؃Q;rs}[:<8zG|=O=s}άc[R/ׅ+]_3U1s؃Gw}q,T]_ٴ+ҡonQ=M#8>ۡ|ˮʙOw13qwu]_.9tn'+žNuzφC3A컞!ru+/yrmfWŃ}́ vfJ/?\y +{3͌7W>Իjj,W{;;vOA/ ؼk9A }#crPpP_@b@_T Ydo:;dظ'7ɂUuo;5>&{Odu'7l\5('Ϫ}v2WU]\-0cWϙP!;;@J`\9hWi]1 +х:;ofY8uܔic+vM'vL]rTvo9#71/7pc7nL9iwf7iz'`hz(3˦} nL&7&1+guRk8TO322 D+ ,(3Ԕ8gvq@*('{,Q@ +$lQ5I(8@uV(Ko5NyDY,@ڂ(ӮAyٚ(J1e*52w,UD'OD7͓U̅'CyDlgD(BOwvj ʜICDj; 2H-Ȭg̫#eΤ~QU9DYy"r=9A+B@PQQAZ2eˤ Q+ D iSVAXWpcjtnI fF51c3vn<60c`ƴ,,W3{dƕdm`Ɩy.d`ƚV̘ؒV~AAiR5 4Yj&h@&Sɏ&q=" 4 h2\L+@)G:h2Oh2dJ3̇ah:BL,@9PmM}iM4i5&[gkƿxɜx@q-iR4{ @9|3D+lE@mgDVB Mf9 + Gɨ@\4YtxdA4 +.;GMd})4YOhWtx^%xUp{>Ӻȕ=I3݀9N=0cXXȌ2o"Kȕ35*dgtyF"`Ʋ0cf6o";xWv≣bXfEd@f,`Y13A]v*m~< +``n"fdƬfl:YC^ +90c-e3'`;Ȍc3rJHȁ0y)&k'lz!."Te'rd=&d.DL`Ʒ&KxEðL+[Ȥ"<,l̃:0`J cr &sWL&`!+`2L*& +! `!"`[g[Py\3dQREdg$(&Scq(%2 +][0Y3<&.a2k+dR8ɜyyg[i`2l:ɺ`2l`2%d(~E+~?oɿ!2;l +endstream +endobj +179 0 obj +<> +stream +xyXG>\=Kff + 0 ξ (M4I$O5#yߜ|~닥 ԣ"U{"G;/ہm-9_A4APvI%^|SH= #"wnٺi L?q[쉜9nZRG1RNN{vn + ܵ)b҈-;B˘E[ + ro +ز+0rT}WDdĮ=; B3N)SOS/TQi;Ӷ9%\"N<#[>wgU/SamUby].lȧp\'o =ڞեvqXF Aïڦ&ˁ?esNGɿ?a-w[ҕ})_Ng~?҇^} Ѹ%ryzG9Z=h;Kr=/d=_GXC6A9B! ~DCbs}^JBv娏E+ہA "KGE""IF",}z]8Icn44 ڃW!Ѱ9h)4-FQ'h{?@GФ hn4)2 +MMESѴoh4s)uf4DТAhqZ:-S ZLF.wkZV@n:yh+Z'Z;=!V DNWo% ChA& +6@O?Ph# +ف E[NPmUN6CPvBCޏ^%Ǡ}|u؃bP!wDl![6C(uJS(eG(3)~EJ4!Fi.# twa82dܣ(*Bqh4*JǠҷU@pT})UG_NTW+t"5C-:5>3gй|.FE%t]B-k3е6tچv: )nFϖt7}-zHws7ї$ } +}3z:=ǣovыjN^W+Sћ=N~~~iF6 +_PTlǿ9?G {  *v/* O."F ۝!>V}^}LH{ +B!%$/OO!g"b-1>"5bbjb:b1[bt +1f<11KbbB.1q1i81y1ś:JXA̚GE=CXC,@,'t l5 H:+>%VʈUcU 7o;^7c>:9+&\DOD'/PAIA@V[ u BtP C-G 2W G)Av g@h-GAEA^ (lׂ+AEpm/tnw/a[ ?;rC\oߏ,p<|?g9Ö+y]5Wy۾_ E+8˱/}[C@MnܒX0_9wI±m7%䪅yދ}==-@2}ر^-W.y2)7ѐ} k?RitqV:G5]-yԲ ^i4MЇ{Iݜ)OL4]x1MԶ<[c[CеkmVg.1d>ȎUKr3V,;mZ|@UR^OW*5EïϹG‡[%Kob\zn3>:aT?r 'oD>f +TiV(bK,_җf|q^aI 7&[,8Oqٹb8J%͌LaR2Hz(xqYLlHTF>[wXzr lS)jNѦ$Sŧ +-kZO8幟mOl_3*sy&v/2ٓ>q8ncg_ Cu,`T@ b[l \+`+)A޽tO/eJ>dX@ v¼09pQQ GoDV#vp6rt |a0=܁lM!N{i0䕅 ;rNI*>d_qc#%:*gCцY~>^ZȰgK\n%<ʲjEލck3 +j]ц bR9Tض%*kF[8*&5unl;Jb苩ƔBV%dg~k%KR=[\b}]#L3âNa"buͿtq)'.Osnax'b]4׍4WP0*jmeSw/upQר9>BRE}pHσ7}_0t&9%1#alF)m>@O9q%WJʤTprUsŸ$r4MNjmvq91SmMWvqFU4_~9|JP4*58S߿ +k@Z;9ۘ_\ð\: ێ6Eߏ)IxLW) *zQP9$(wM 4vLKj{~bA[QՙmEm B4؉sTG֬S_xiNVf+Z_tɻA.1 -:֕'dj:DrbDgMs vh[Qz,]'屯d ]]-C/ՆM/+ 3kK/* 3TKWZD:_aPe]m %qHb<-LXa[ 4{gUs#W ta!G +tBYq^$.PӥeBB;߇1 9#9>ZObt.);6X55 +O"ڱ4K) ~Y[SY#[/ (>cß\#>8GB4>tvq&X]U!FZ+q b ?n Qd:U<念K-ii:G5Uui@-%o`%x5vnkd<=ċX|`˰e0#DU^Vjfri<x:׊,2K$_TQT^^vN|tu5f`; w/mF $n,"A2GM f\d+ -?cP!^.oTROacrI7Rr}e!Fc mH}v{-V°²zlEO=3G!Z@ _ŧZ':S26Vm3y^^xn'q\\qqb:Ɠė\|*Y|ZEv`ߘ.[.ȇ'kFU(Ȯ/1fXuV+{ª6%0qEY:Jy]J/sia1sJ.;_yuSUA{- ~ ɇZ|Aԍ%흵Ǎ~G "*p*Y"=A] pee&{`ufI%Rҹ`r>u\}K J[']93ҝۭc6X_R5ŹRh!gAkɵ0 f{6KGN-Le[ÄuMDžٷ94H_2\M_a$k#'WapDcJKfFK\'J $ +OoH=m5M Ϻ>'lu1Q8kI.S0cGjoB jތmH;̩QݵB[<rx,&h%ݱl<8̝<-&IJaJp;%G^x0NtdH`^G̶`!U m׮m*vVT&P }[9r˖;n8*oivsî܃_kLogX9=$u͛;\0 U?W0.>;\ox"BWG+ů5SRS`҂I#csU )W:yi`ê5%ndxRYZmV.O.'yZag޺u& $G3,j&'U`|V9<Ã2kUx959naƴSDZVÚKxmmz!a,f;L> r9WB%,L0X#FNaM_2GaZβmt]+sK4KR洉BH&uS㙤ԃH*PV +tBUjD9U9U GW[&[9byvS"JBBĘYNA*22't~V*[Ű/m+9ZTONGLٛX?Gr +Ŗxhzo>ET`4z|~g4Wq@q4[;+A!T5ZN"P{Mx2L%.ESƼ@Vk.) n;y{?=.WJSxHʺvt]OzĝgZ{F%:E| 'ÞujσTRUщp8Dj==ƽ0aAgGpy8li0k_1Y7jXc:+1iK޻sa7:T9 +uۥ&Aȍe0VN4旘r@afl&J/MN:*;WRM#Cb(y] MG?SN0. =$qNȡ,p\+-UV(+^46)`,X6{Ƣ' 6O|.| +q Ap/o?=ME"/7=p,tY{{]Q1Q)q|9إj U`Fvo<),Ѽ Q&L9g,L` f8|t{=1PS^lRhEǜ苫/~+)Z"3͒֬mK|I<P90T+K݅Rm7e[^_e;sfhj AtlZځ9rXZYAeGggjk.I$_bXwq$ȓmkNvPn'2v| 6Zdž7ް:%ɚvv) l8@:$l*jMuV[?`j9ކ6X:aSa' tEUV/ckSyՕ&EV׾Sa+1}-ZqF.Rkj>cW_])dt :%&7l | 7r#X V7B+b`eZz sGq[7}}5cmu-OGWU{i6]x 5 j 7a7POꈇGk(CaHXPUlyjNnhwN5omOIJȰh+7F%NJGVmlzʙKgtY*苢`wnkgEzNKxE)rU1=WhU:JKvr}Nq?2/3 ].uV{/4\,U뎐&YIƺJR7@ax +Kww_KZh!)Gդ _ƞmwT_||!<#%R6*&IH=[.9 }Nt2\ [ĸ;!|4 ~.T<'/i0}ҿpo=|EgX FFHf2gx:NK!94HP{8ײ'KFo;xU} OmZEܨ?yL}X<uB)T\L;X8zbr *tuiCR]QUyNK`]bgq.&G9;;wDLڢou,]K]Uל{<-=mBPk8"xB%5q$6[aE8<`R_' &V7: [w۫6%$/p6~aF"'$ 3 /?3KN.8+.Ͱj7-- (S;8kMFdVTtB_!هMArS=Wyu'ݯǰKt3M+[\B.+.S<XS֞^. +V,NԹ"gާa6b̍ii6pUJz߿VKY)XVg8=PP컒ZJN;@+hv nԢZ Ӊ8Ǜh9_$R>n !S5z\y=ZEMfiuܨ lp?qn46 |UeN*u`4y3Ml)OL 0jʲl)H*t9j+!$h4?NLxZy>aS,"y\t,&+a'Hs.)UKy9mݦ s'!K% rT3c2C.t+lTHف(뫈3sU՚Y DXdfP˃&Ĥ#k AO27`~aa0o>9]&7)0 \;\;aabÝYD^@56ژ s ɍf繋oxz+\2WT\zuӼNKq,R)^1^GY^ QKWmK=>_QJ8^Z/lt %`׽GZ"v3o߃4&2 so5} (=jA{ Y^ѦσQEBPl89*-#.a1](@ +68ov.Dn 8M8}Z3rr9Ե.>֑y[`aRl=B-A C³HÙmpCNr*5;a{a;d@FiIB-S{T[cHQRIӁ$(OB@rlZRڡ Px囦,ZM20g/yhEx>M>HvyQ]@3w9\Bʹ'ꗉom8H%$H.\F/v3sktqoEԅ3[N4rtO"3XuteU^ >h i&H4BӚFSK۠O0ײϸS': I˻-fX4cW7t3.N9&QW2x/M.9:1GRfз|Ӂ =UQZ*[=(~g=.WϸJ +*NhôtmQn2\]MyJ)tYzѶM$n=?:0[LOvVk & ٰnCVs;5a:į:c}[KEXѺ LJZL\R7IV b-aQN@vk0JHUDVn.؄mdNIZ.ݭTdU ; g{ P0؅zbg̈󒎞=g$.ƌ옕'OŽiE꫻nقҼ,hЅٷݞ݇ )1WƲY8*\t-zYV40qT,fw`z?gb/nbh>@G<:S*jZ҄D,&[+g9T »Hě} k>_wja\;ضk/;ڄya:b]yO..̳bjխxg̭'\BJ]P2:q+BayiƖ0V"0Rw81wީMҋ01ۮ9$Kt1"p ",|6&zgSK 2%'J(K*rrTsZEa!xPQ -)[h +qx<|)ִ>d2l*Ep+B2\NŦ j]3EƮ$`y#mXꁝf ̍=So.[ڀ.aØn]66xEFv KWpnn:-=ueǙ@hꍑ|Hזvx<iay8][S^闦ߌLх?y~ ov!ױOt2[Qp$ثadE?dct}Rq\ C*p+>l~N'2N3U|3T12fZ_cw@M%% +o*xc ^.%MM#7ݠ7 3`dfFn%?Kob:ϊSTwys1~{Ŭ0d LTCJiA]mq0SPH`̾d,dX~sh^[9n?,yҦrx.T o"w{fX!x+#Ԋ03x"04#1GRvp;Fpq{fXVqy;^woR[)\BrC`|/M [22[1p~ecP ݣIzu (n; .D:iNUccMexe|2XD% k L'`Nͅ ,232O+w0nn n; 2\ԺG&XPhϫ>*܃}?4{C_ 'Ί 5c޷KH5nwn_ h +/)\}Wֵ-c?;;MTib Z4֧DO2ܵsd{Ϋ@o7&4vj"';;G|>|\gRR[DmV2_W;_x(O4#azGϿϋٚD ;6 JJ>tƍ0>%3K'ߋOhm.>*=]kչ=JM Me;ڂgq?E`iO N_\cc+5|yWښ*B/S0jaErdK-LШNc&+)M0sl˂SZU}FKL0>rF!_6deLpc+=/z?im n29V\.={ȐT ~E:[/w>ȔMcװ |#b_ʰc<*JX%& B~TRH.Y"wY2HMM=+creY$O諫E%y v>W[|`JsYY}|ӵ>g}*uj$o<8]mϥ-<,ݝ?[4GQet:[7A䋝fbnLt[W2{mFc"`M nyi3ɀg85Ra +e +.lxf "~ SaQ ϝ|a]J]*%u9MGWU8~y.ɷ89Et"?ThVzu/+jpӁa"%yH.18F|}9x?1 kC1a MFt,UTk7qf6V嫥Mb.=bmHVw6xjA y˼{ +s7@Zq6'!}Sv|Q' U}@<TԊ\^On8U*t9YzLU\DKpOuEdZq7PGJcF?+Ԗa/vm:B+{xqoƼjS+r8(V)99:^?Mi`S}7(OfΉvGM6^*I׫U"h{3nK43fao,{G`| ވ;V?nt}&@mW.+O):=#]SЉ83IPx:Q0I|s ąw<.R`/{ٗ 8DQK'@XaoA| m`^nc^`9IMy.:tc\ŝ6i]V#oa?s VhL_$~Ị\-j<^}v8L|~,at1/;SKdissGLM \rux͢-'EsƇ'3=ZV_ 7&tBpi!ܸOb`oh)|5Ǿ?ZKP؃b^(?47kk8eLMNjNh1= +~; bĪDx9GR)gg;Y'Zu/} fh׫nm(/Id5-r'6=4%~$0﯁LJ}5!~=4KmQ؟.4ʹ/,Pd~8BpD@-Pu"A ḑE*#&l+ଆ dtԑ҂) + ͓rJݑmVb0(u튍V~u~F z;=Yh,]˦ "i@anɝ @wwqy"e͹y\Y$;h +UNV jVr(O4$fH̲ρoTٚDq ӓEnp݃E<Zh#p A@0qHW$ ]S# U9Ү{\m&Xf i;zDZ[02T3\pet+RFF +A&2Z= on\mqiPXUgB5͕'?s|9eiǤ&:咭 ui {9W_rTzNBJzn($|:q.O,>RŚx{#V];`?"&* ;n"38R:r2rOQ%VҬ6QH'PuC (u +ih%ۅ|?DI͍oiU\L e@i6k_ _67x4g2J LOKI?$Ff9,eb8(sT ۭ_zS3x3,!*[GZ4ݞC{EqnNI(gAY{FX@;UV٥+*VKl11ŘĘrfYo3gw]<9jYsinɱy0gfPY^w&/YR:PDsEY qD:@[LA`$]TIfs+)L2F)|?ˀCzXm"l M"ߘyy}ΉF2KWc}mJ){y?]ByE7^ĒEf:Uҝj7:M;>A"O5I7;6|\߼dSkƜz&%طܺ,1Z[09`1Op)&ˆ q{8-=!)7Dk4Q!ɡMl/ Sg,J-SF4z~*$[lcy .:k +GKQ0R{Ѯ^^2%Xd%T骹 /Z78Un^،DٕT# 6s)?Sc[ʨ[-ֹ6\>uמ0q .`~SfH1pr^Z&#CN)x]q<ە +',iARʈɔ op9sr:4hk)d"b"bb)XKryrg%21( ]W)+Zߟ OFFQX6Mr5r6~?).ιp/ZEq?vĹzd:,6^iʜ- j< +N bߨvH&5 ;)FWVY.U‚zLV@*CN@iFr9. ?;v.q2 W?KjÄj/+ poK cҰqcRlcaL^P QeK+{qfgie URsISf5kϷ,@()wŁ8 H dZF>(4 Ku0kZ ütiZGT`|/YKըg6xQ8fSIv), M1 +8b&[-myҺox +Li%;8JpÊ;P) 9 ~3RIQkJNwr#~y`U7l?Ԇ:~J6G}`ʼsXkk_޼6WjZ-)"Pʟ~%=ýꧣ  ِ΁AovǯqdpP$L=Ui}[8D&•P7O)B kα.3nXb;{H10A<zn$ +xTuUVKClj)*AHz*+Vr-Js0vR'j +hvF[cR+]/:gZ8ʛK)2 zJʙ#qJܸX|Ra +>|(q:MIvhnTpj U_&rEflFc5Jjh ̃^Ȗr޳Lhbk_eJ;N]Y`}miZz W>%ۂA18ӰƗCܮQ ga74%Mf>fw9&,׼zD#+0NxlrU|l>ۮkrŞ[(k ٫챻oZNp:}W0v|[\pXW_ 8v=P\]+)Wp]15ḘK,|Cb"\,6 @0'hIï,ϐ⽳U.5V(\;"gN_kf-LIYNF2ј<K)A߅zMj&v+p;t!Y"MOM0ʔe=&[oȲCeܗXMx@LΙsLjnls.;\0+=Qt|eLD6GROAMœoÜN?,x.78A?[~p6/ f ŹŅErp<?v0(uk9 0 m*0d(` 2.>l{Z--RG\T72-,^zVy;1J%BNsW+*;¦M~A7P\fD:M-O%:aWrs02sC_8_^]ztמ{(6Sډ#l41w!eu-0i99Eˢ'V2++ꆕ83YzFҹ/+e1ouq +NL]!A,j*)=|5}ý#fEǎ򈁍EFs\ ٱ,G?EtZnr^JQ2?EK +~YR+SH3xiCpxUw"|O?֧2Y8.ݍ) +;Nx|W+˩wYQ4&:,&>TzX(~omeP +#&u>H˘V^i2yP9]o%y& +Li9i|>263GeCdoGh0lao+N)JwC҃9u4HYF_)v r=bT,eЋpps e1hyU=|LK''[:p EVudi3e QmG05Ry!d <R0gcJ,wJiPfb_kDdt:mM0~&lau7`ʍeM55f&ٯFC],M{kw.Xrʲ`zɩ0=Y[;v|9I14 ףGvvFV WZ/? ]Vi[zmaԩgO<ԇ'3jYaJK 0S ཀྵX͇tSKFo#"@(|8YC"3 uƕ!*8WE`H½4gXF)-=CI~!-]?FH@%~ & L~aҬ wix/g"p*,b8La 3ǿ;('CQ?LA8㺰݇D^7 s~>` +o0{& +oӅ8Rɋ02 ײq/e e{4T¯Ifwy[ʯ"cs5}:Ž >ޮH'é^#Dl`?OLUpo:tTa‘i:&PG-͝j>8b{0 \3B68eO-!NӨ@~­X̪"Y^R܅S.)-)@SLa`Y[&5$IS Ea!Na.c#~k> ]G|DEr; c1> g0ߎc<>$(7y^fH ::oЪB\"0.Яρ):'M4ty}NrĶW$loU2[ѧMV6?6;kPtd Ϣ/Y +q :W@7,]jwgҥeYGao"[LG8aʒSJVNG8 %䁿?Veiӭ*i7aMSX+4EU;`_,i!EɫG`pD:KJI}z'!f*d8h bB]5`p=,t?u9Z1LG5P~b2cVga1&7,CnHV\=h_~{%9XO0GSYT`L#2XFKSI9,,4^c])b `G^.,X5K͹ͪpZL0tM ഷf} PNii>ܰuz֯b> 0L#T̖.oRﲔX}4dW_^`1YR̥!ڣR$@{DD& %N9B|#0 ѹ)*q)}Ygn7_`uIvQoo}QMX5ZvU]3 G蔓rJ+*׍4i0I+%:qxX0>k)dݷ2aav +l=@P-[ )]!וּLU>qYz3b–Y)6'ZH!ECtNKvz ϛHḇ 02:'mҕڸxKp$^41͆Fp+FLе@X n]l.6@V"f?ʰ +(K6=3\l >ٵB1QJؐ +M;ͬ`g^eiT)/ݧD^ f]G a +%v&%ctR0嵠7C7fl^Xّ{UoFBL* ihfs ulyW` z=fa_6}dS씕`r\@e`4)qn }hG0JtET^8˕d+UٿvIC.}WmPUdE% 77k +%͙w)2iBs\? A~6.a-¨"mW`ჺ5%ƂӉXP:x˾(Tyc}e T=<jte᝝g^a|,u cZz?d-nm5@%gؙC BςZIGg%R??Ӂmv5 )4A)<]y2Ɏ4itufӨxgYY@gdz6ښ-c1*O\2p1rKKƮHu9e\/!Ի.ݹc|}O{#+z'm ~0w/]{ W{d1)ޙ*v YV;<7QRX#])d/Km,"2F[u"C$ֻXWY`pl@^M߶$9MV\$'E%%~~]R}|9Ffw$07`O`ж`3ټwdFSkc{Sm42Qg^]&o8pO;)uĵ 4LG;кɂ&UI˄Ma =r3;2gKY.?3Br}h:Iy{¸l=)ar a.~ ˆ:(]]oH$q8'}2Meɑ׭[iXNu@z|zbz"˱֖, Vسr `N`buqQR~Ar P}&vbN v4~* BYzs+(Ltb_GF*-+0V"&T>PY8Kb2eerGJGq&F_~jv 1vm嬴2Mm-G͋yFs]׍˾EYQ$m-M9m/dICPp>}0Y-e? C xjykZܗV Piď>cCZoI2%ń [F~uY!FH Ldo5D"|Weg\vm#܋ TK8B<+zp_)< X +cp 8QR\Na -NLO#kVd]gV,Y[Rv^:bַ48?>?ɟ` c(JKWg̼+؈N&mŵ7ޗ5p/'xE;V?G'MZz҄RY#Z4Ċ:mY~2m4wK8囔Y]Ŷ2`q5j].:^ukΖwcqr 9`|v7DgF~[*.>{Qbz} ~65p`H֪Iv^ q~_/5}X \;m"];ZZ3"N349Bmk՝{E%4i3m.]Xemv]~mPV[ +ҖR;= E"h3,ndbu8/(J4rX_o5wrsDl&} cyEEպdTӟ~UBMJ3檰}̅W?{Vik@tϏ +]@줝v`-0kY 16/cU\yx~=)nf⟰LsGG{>)IdYGx >.I\gpuP>3kٙ *XlWAMͩu/6Po0S{#[Dyd,QgW.gt2i0c$EC+ ?x@ +d_~p (nIg'Of7DTewdb~ `w15.nl(@3vKy[$j]q-;3CوMZ8l&`;kti~6Z}vMcoOv#f=~ `)c!ö@KӶ*bk"2#@206 )i*se3_?=;fkIrQV;]غ0 =s&~w|)o\AyNgUA4t\#ca?]P1UWh=]qͷIA͜b|;Ȓ߇vYSt6?'MHmm:$}?'2X8OGbq FG3NZt6pRxbҨ8hLQ>].lxN|7^qZGx#pS 酱t6]On554Z.Zq\n6[ VLs]-).MgkxPmC ~I1SIqݢ-i5%ft?;dge#[͋+ߒ)gL;gk}݄?Jw.?Z'1 6@Ҹ Fҁ^ :Y9=t]h8j䚖 L c1Z%'GUU ꒂfe^ogӈT Z9xLA吢/#;"9y6{'b8+K/~e FlDWTyeld?H +Zɍ[ +s{.?J6 &FkpZd+xJ_ۖ/9]L'ܶTm/=H}ibuڔUD WXF&%R[\brqYpqm0a/qka8b!g#.Q(bj)1Z!,٢Dd(JmfԈ?w+n+la~ LmFI6ˊđF?k2z)gLY` +Gmͱ U[^SF̟V<*U|sMɟEa-hV$ fHĒP6&**!>pQF6+ Όd3#BCTr +UYw3'ftfNܪLk.XN|թzi7½k튬RЦu.xؖRډ, }V_ ~k^nO)Wm8d'Zy pY#&h Y#9WNzu7=AN_ +z +lVxRӫ6={~'qStP tjֹ;#?`!jZ +NSw`Ye݈m!RFqyno3_EmUv +7jx=CQspLDq.8B i1y7 ^ri[V{xwbGZݡSOZa|Œ*=jkAc^3ot.ʄ5̽h &iUld5AVC%w꣄Z#djCaFKV̺kVRf]ifgx}!*$J媔HOvuhw̙ *_̻[Vggd(SF~03'm]. +ecds(Cʝ-qڲ~Yz CLNUH'N__zFXB zJZ +eS*BSg(7w BчS0چ;bC#o + +&%FE%~Z&ǖG"Ԑ`jmQ"=:r(S*ZVà)9*&a~7;BÐe;3Hե)X8k NRq}i΂/91`44*|i6#M7\،݇6x}7Bz^aw2_UT`(#VWUZXr:e+tп4?h_qmE,gX>Ryv-;尖b4% A ~Y `ب(RԬKKݭfJQHVdW]/PTf:RY _'UFhQjuͽ/X\ /lѸBYÄéׅGN +4,=֦g~x]H_!mI g3I(2;}t|CBC% 槸/r6bVbCLGKb/h s[ P?@HAT +I28I"̛0oЃZ B<ÁiD]Q_J.:Qb _$vCtQ%ᇎXс%N" _£{A`p7eW}쪕lWI\g>[ZL%1 N%8f)D_8g]{Sx,TZz86~W,^gʴTmǃ +化i5|"k<4mh, 31G@F$k,P \;A2UwNq[гYֿ+|y~zw!̇׻6h£&.e`\3>YKkq O P+3,W2K澴m'dW7VVзtTR\}&cBΣ7{Ë}W +ݲvvm; ڿ?nM4)=8AUa t>9#`: +N۠sRkU9g9,,Gj`6֞k(D +rJk kl{c|ܺp8]fm2NҬͳ[$H[z^Bx8ʿn<~"$Zv2{69 _{Qa\d`=#;ܾР+P<908{tq>N}( Q*){&k}>)崣JtcϚ ]|] $Q=M&J8H(;ts+'@|C.Yj |imPX'4N͗[u &c ɪG VK,8i")Z4N]tx12)q! VvEZ`4ŢrC{uIg4$9*٪tEbЉYJyUIsr`J;;&+;s2d! wֱ6l) +'N~{D+X_Yq jYc>a5e#i+MnG,0N;:rYަ˷?.Dr?r$UכH } zy>ׯޭtB9 "W_Eda^rB9@7TM1dKKWE)0Dw\zNBeHqiYQ TZ!Qe,36Tp^n=[+ Dp =o{Fn PD>uq'D;A*C `BuG&ib.T0l*L]=ޡ2fd sk]ϰ.׶B`Z.{!K8FL*).2e7qt RIp!pC/ցkZ<E=| 9D(+ 1jXMTv`v\מg/δۚlQVZp|q3Ci)U`v Ev;k5zmBBf_K!Ib(1 a +.0y4L' -EUGꢴɁSxNw +КL*.Q艊d}Z=vhCim,,m:%5A=JˋT +QA#p1 dLWN=1afvxJh;gX칚Oa-͡"2Y}SC M v1r~x,m> =jaP/"FT8k?J#M?B#;4/mHӸ/IkDsrwWCZĖ)^%fr3ⳣ +#Ҽ#ܼé r(PQ,}^f~n)pbF%1q{`Õd:gˢud5>h&9 ?< z-~ gL9"m*t;jnԟR}wh̀TDz:`L&.ɗF|2旦ZGEe5ЪBYFKQ?4WO֝?~ 6u\fi?zRnlyF8ɮ^lk׮|3"eu-ʏ$v-Eo"}1HR:W_b8א 1N:nw?'kST9D\,}+\7,0Nr9R 9Yl;~M{{`!>0{ֆ-% V8pmY& [y ,0pxz>-j*qayZRf%϶a8|p0m`9 # +wyQbFmB_d. FZ'O%گw0&ͽjXh8@jN!mpo%XOxsQ'\[M :׳\7 |Xtyik-:r+"89AZs.g֜!b_[+,Rg/kQR* L[e+H*Q*=B }[eHZ&P,} ,g.~٭c'!=~Ym.S#y^.9M˚;#d E%:T=Ex%'*4矂> H","b #ڽ<巼NZP:7ܪWgmr`wYP4 ~NBbchA +kGX/K +jԼ|)m~6 X˾Z_o:[OQl:= +}haF8! xg\2g }` +gptzxaצ;+G6Y58ͧ+.@z5ʜC=U/>p^C`>Kg텨Hl:ZTXC c cm2v0 fKv羅Lz֙+77@ ؝ޔՐeKF̱Q;I&MO˕߾q8IW.967tƌ"e^F=붬nZxq+M)+Q+= 5LqE:YaB뫢NVͯ)LkS,^5xa:л +{pym+YOr;hk1!ϔ_08EUZR\" +%8$i>-Ee8] Q`Sp`"] ?DKp8[ /Nc2lL"6w uETFSb PD24Nr&,i^!ƒ 7q4qf v<D\ z-KHQNjykNKn}VǪS"u{տN^Ώϒa7Jv%"*}QQ+ +=&y.*8fω-FJzR?4DJP(;q1:N)Wp!"0_:pIG3 H _b◢-dio>Jx}%vIO(I/TnAq8 Mc}K sp'6gzoo9}qs!ݴ.{)~I*'53hDxDXd k ћ#6dҋ))!ww)9 tHlLdLQT4#Dܷj}y{(v/uVz螸.,?s4?IIN*Y% +.lK K`Twmw3>h26؁5xֱik+DPI9=AkbCHXY#[ Ή@8wf8`a=xXSI7&w^ycU֟=Fӆ3 6m+Ţw*cfkxu*a|fbmu9K* ؼ2[пg}3& a.1pUp2PgT]oa$T}p!}ЅLބ*{z˶ ="z0^{ёjr" '-s,S8-xh*q:)VZJ˼h;خkTQzfX. 32(`NW6vU}EnʨjSMv C,ލ$D5r5dCwV8& +FGG%8mJMޫ؞Lq\I6!@2UVXќRti*ˢyP4G-Z:߂dfNJ׎c'ΔV4㲠{_?AѳE{  VF\-3V~' ZF]_xb_ V^SSU) bOMg.';WfTdM +zpBIf+XiG:L5d~d#G2c~S*bRbX͔[+f}vS{u l1`xUgTmmunyRqƇEկ2z\ "]lWS8ړ&jM$)t: +' Y0@j׸2e`sG=`a^ՓJ"kGri5bovYJx|g]1^)Џ1gb*h妝WfTULm.Eك@W%䬲r@"6=VĨm׹zCǏop2/׆Bfp0FҲ>?YoKa1~]|Õ7*ǠP\,l|}]yMg3E͈_m- Y4JcVIX^V= n(^@O59;0qG RӉ^&HC<̆O?=YRp@ %~aG$.$z2ՙW3W>,G,5f,#162ki!Q>$*32A?;‡SŬy{&UOϑwv^7VFdv285[.>uK8Ͷ"GNhq/v^F#^DhnN?y(`a+3@k(VS`Gr-r]R +ν{w ȹ!JxrvtGcА%RmQ ӧ d-5Su>R=cPVf)gLyYKeП-6fs[(-Y;,+Ys/$}MJ@ ޅ۰V[ xLYD"e9t4 ! \Tq-jN HYUU+qv N ޟAWbk I6LjF%aa?Fѳì0Y/5o=m YYRu~͝U6<6371v: ;XNzMT2{Q#VTDH Diq55-,0kE,!Q _<̊mb$L&~gȣpv .:iBocxNcj + +C&l9">tN`Ka#cyE46t@µ78 +қOi,I/~aI&!J\ēr4|7a7"-^64it(*)a.m@gRAX ^4Ѯف{?sΠR+ba"F-ƇK0MUe?.|c}#vChg:mb@KK^ow֬p~yOuBf +MQD0zJ6oIEEOQJNy>I4eu_DtIxGI!)s-S(HeZ$3]aL> Arp΃#aúC9"(;X|#kZKs6>QJȃJ(ď4с_B?vhչ/ΐǘ_SUPKV߬ɁeF岶5U1`ȶ>: [.U)\1T3E~MiѪ}$BgJ q SƳ ~ ^) r8 cMEE3TUq0Z& 2H>>h+/ lxk7PSLԓYReOl=]c#Yooq沕~^wlޖ*CKU>8+psk*rO2bJ'﷍"ctf jVN)mR]ڤERIgz ѦxS~iEDިc(c(9j.LV_]{d-k~ q]Sup@t,)J1gU y@t;}U"((I*JDܺ⺓=5uUYd6ymqxNV=l/N܄O1Ȱ~$Nꝭ84pfۙ8JM!`p MmJe0x0(x̃.GcUW1hVXb(c!}=0m۳_#受x\= b)$v~`"8R__73\aNdzKLI>-Y,SVRؖwOI$z/?QI;YwO8[NSiZmt - 덧VQ = +Z5 +sFXtCt*M[_R + +sR ˵7ۙ?Nn,1EUvϚ]e LvRT;{lj#"iؐ]޹$HrguXFY +_0k'?Ɲ^fʜ-aa3ȭ,=",˅ +ܮdDl ﳍ zq +0$2yE!|$k$p@p驉Sf1!:g7q!np,U:hy] vvָhy +>.cWu %mp +8pDd{ծڎ' js25֬typZMOұ;JBl9$Ҍ$*Y')YIpK(, +kOIKd,gwP54TTYOv[D!Hp}%KPOplv0xn  yHms|`)̬IȻ>U_%5s[`WJ iD,jz$4wL(sUK-V g_K)οfVP +k_0@UC7ڏ4$N7wL-L`_m ǥr> +O2Q&i,Ͻ1'Ko gK?w a_3w0g10H3RG7Zwvfl=zTMT6}!2ztӱ[f湯=c͞$EWMM Ǐwg7*jX)Y,|<~gVC&~KHos:6=v,\/=~TVC:O;YqLLYR3m-˝VNU)ǓO ' ++2yYjʒ-Ds>7U ?#6|fmg)!l0K$yP,~k'`>?Ãao#4]C[+l΅J'8}z9>I~{;a5^T0Gb>7Eեg7uiS7fT8U'z'; +de]YOq\n~r7'.rø0*Vn?-6kTnقB>`Zan vBWmt1kӽ'* ujkO\d1]T߻y8 O[xw'" +{3ZU܁wӢ/pƛ8PaMSО!S_kCէ|M]fXVCncƀ\;^ХuWw-abk{FejR.2,S<¨J}޾(\kQ5(Sg_Px\bÆQۋ]M37x? +Ê]\jBh/Qq3ғKad/rvYzǭ&cҳуF_}cxt\]aL:U;Jc+c`f˭3FTvp逋ҟBE܊i +p=䧾x^bȿgE9ZE\ey$)YĦ4SE!Iz~<^? +Ӿ8tLfj_ws&sҬg=(*Y/-+)/p!3x} ~=uR5ɼ 7n]<7=IaB6*61'@/ޜ1lgVb =-GGO߻wDdl $xdQWdV(Y#ɇ:d`ʓ,w/&?$+n0;;1D6h%tb2رh2/0!T7~$LV EI8o.?=> ֳeyRtE-C_4!AN( `2)Se})r!_`yI tOq #0H.Xb_aX%]di9ck8% PO2(;\˱|5=Fb,n,7l*^dB:`d߳i]!bY߃{]Bvô2L~LΙ9PKB.lw=mSC2+O;:хl;NWQ AG\cB`UL%rdD$5UB[Z"Fg_Dp5Z"cuf̼L|,OCg<#d<$6(JukdF+2< _Y1U$ƚ~ViRyd&97Cy./L~/KNADHI͛ E,7ñ0AGO{ ڂ/n37Wb]n[7]vV20UOgfgthsѝQg~D_a<|!c;,8jFj|hy k&x kLȇ\jqU0 eݏ]uF䃆_i%/U`oēY(..).ϭ`aZBZ!KX:;( dCWxb; ]23GffXoIK H ԩ> +ڤ6MRZ6{EdƜaH$661%bbnSFxB,}LCX\uďQzP*xd 䇖$' +pXؠE:j+#[;K`ubep7?!l;EmRҬ#bb a +Stj+2_/ +sh[2lz4veloV;Jm KtA\V\fdqpd"w2wPfRW ^Dqȼ51v + spdbtkfݭ`0泷`~|w-`2\ ϼxc7=6UfMPsK%̈#d*&R~$FG&qD#%H C*՜6qLϪ"G sO˛k*⣽7civ*cg I-OVl?Em $=p{/Gs_1D*0IT-˝nrS9E,W9<:^a +i%-C3Dk(HQ5 G=RCFZ,)/=lq͸ҋ\.ixw&CG/G)~4"6 +dC?10鯿L18f! +[>u[_Wn\#!!{QO).À<̟R\dU r9a0gP54 7Ҁn;8\U8p? Ks*iD;Xnğ錂qgn$Kv+ 134^]{Aqq)QnH(cp +DHNdc ~6dBN.=d|9,^kS+8'e˸z=|YAj3~Cd;-+,5oQ2+< +%=,_μTQߋF8`NaM 3}͇=EuI}'" oFQCe٢ +Nïh$whlR;K6q &> +\ &2MV*_w[-AXd_OJSC痋xtev +;,5fv +Etr"zz79%glg~ =0xohZaL˅ ^N}%kccjyƳ=g^K +K<1)hZFFZGe[wn峗1&1Dec.Hs`-,k7bHAs*( iwjMei=S@$[)m${ 7<`cpR +&xzJN}EE˞plL.6BoݷoK-;;{"߽1r\Hm{_u[ sLg+KJNԕZkͽJWK;&^>׏_D^ﴼn όgVKT!;Wa%:`DRڵ'8 V]iJ-|ʂ 8}.&4WsBbEsӚu@w+=vBVSGI?/ia7(K5x ̧Ob̅N$}*(>^u@WFPM;A ~cѭ6~3uX@-J-o_Ұ S$1֥-JS&h- g+h0MοɊ8!k0AUҕ~;@m\,(ə!,/UQbD}D?q"%..%ֈtd#Qߋ&-q, 4Jd=݊84Ĥqq‹מXnMx?fX;㭯a +-ΩD.JWO4 1"$1y6gt]&jLqi,bO+t7cuf6d< 21"CsQn KI`Qz<;Ǿ 6t&zި(#MYۙõJI‵wcB`6s< >#zi#Vx"xx +a INOpxW`ys%(RJ6Qd/P/5:`UhoB-:@JĪ1Z&' +/7U*"h]rفf{bэnJǸ +8C_Ǐp-|,3:BR+ 23NfBc1YUL^>BL!fGj񜽰jTmq!-Z2:ؒ] O q宷șT)1GW2ڡU+ d7>"wqJ)9InG7'_Ys8G[\F>( -?LQB HIS) }Т%n%a7JKCLEFR&<:,2:{J} Q&H)Qd\ 1u9X:;#t';^l+Li1 Ɵќ4< NU@+cB׋ХQpuxr@Zm@iLy띋wKzC)~woYGa %S8.9[|>kæD{˪җk꣬'y!ۘmٱw5=I <4]rԊ;4I窒\)LU4˶yP8zIh'MXs,H?7~!*h:|0 ` , Y , F0zl&øRD ":[D'3+Mஆ L3`9'(&^NdDZ*ȩU6DqTTZdZo!?h12Hk@G]aW1|:.U1\}~^WfpE)!eGK,o~c2Fmɠ޷s.'8oP$DbaQtJﰻE]hgYqΚP@pƮזIx F~ (>%V7呿'u{v#ή6/{YX+LƱ :Fx+CDZ+}<@a%:R\~Ͼ nd3 + +f\eEIdv}aLQ0=44=n'$~E,US/lIvJKpbmJ&6bJה:d.c~a߅5/dmžpªltL/4)jJ/Nww +S$l^pf'!9tԔqz\c=L1qN <w +Pt:CvvmЊ_E|6d2yo#%uٰ\X f4 +(zK'êb"2*;WMjj!tQ"$XJ0WRHҐ4miHA8^*?=a&edA'F;D +R0'cJ"I2jt]&}cPLt2RiTނ7{Ht-]&{qdrI+T=/}7>H[h`֔GFC#57ko<$۽EvЙ ?w#D[Gq /y2w +5IF`Jy#Dj+N _%?m/&80e7g9~VDOT~_HF8[(Tȱv҅=q,,g`gq +8X)1Fޜc řjQGX""#Iɶj6S)Zv3LO%k5<ִ&5-miM~ͲfwF^?iҲI=}LhT13? ].Wb_r5Hg +&a=S,})@9DR :b\K[хGsۼfW_풋,ܯ";HYu }(K%T at\ށB/s!LD21s_pE66k`laTzdzdJX^kxJ3IشBtՁw:jf^9?iHyFH1m 7CF ~}G<`0My:XQ\285W֎EP 2IvT1s*(s +0 Ex ȃ +1㌖s],E< pޜ-)p,2OV -Qhڅ\(Xr!M^ӦXuh%n4sRLѕd%eRU.I\⇝̖`qCdb?'XlM<[0\y> k$ĖU)xFin +Q`-i j` ;z,{BK#vkvK_OZx%6Ky⾼7Jxetƣk7֜95 O7m^l +'L8Wg>v6s w:m,hRU5iҮ +e~;޶E|CUz=inÂP/"[頻Xg:c:c)ZL`tCZËeQfotXj?m\~\eMܰrG+:~w/͔W꘱t3rUʋ{Uۏvt܃zT2ݙ0zǎ-]r< 7;pahfqX 0|:UDBOZ+?F3HZP~Sku>N^]I 2ņ4Eef≓օ ?1RP.G 2~҉5`spcYg*f֥{.U%kv脢X˄7Fl x%7o9E[p['I{cUi:[Y2#R卫n{<s{t{3T2Xј:pG[uE.re#˯m>e?bem%9tH[9q036\ $=7<GȎήp6,B 9O ntyd!aNuPJj n[<-'ݵR F{10UL&*`9n$O"5Wuf"[[6Dk;| z5BFr 6Ȳqn3z4]Ȝt>=K,$xY[N eO M +rmZS;ߘWfJCi + RH,vd" EJc35eJpb0{G1PitMKb\?n^~` ;Wc3ͅmIuS&ːaԗ~Qߠ3#2HI- 3a~=&jMctxcdmFܻ-\_Zؼ9KwVPTXIgKS2i9>?75JK05-+-dޭu|d +}7A-E,*g%Iۜ&"̹_DN] (.dW0!o0vB`E%+yVtzb.'`O6>_~%ώIOJU\Z؝8Û*Fc׸7Gxxal:U3V;cC;ONIKNMKaWͻ7,ǫRO>xdM<۟Xov0ke%)NWôG,8He ۻ\Iv~V~z^Q,YP!pEߥ?ޣ b{ +`fV6d;c٘d:d#:A&$ +oZLi)Hϯ<='t;5Hj/3CQWzM7Ba[5ʶKK ţ<9/FEk]ep< Ǯ0iД)K8HTKMaR{7Gipn0-𬹳ٖ71D +f$Y +nZEop4%%ӵЗKq."RCp=='EP~llLf[_ʨn)W\k{+1+_toYQqkb:piͼ+[ Z35#xݞr\&ۜl֗ ;fR +0تml;G*ZEp%_\m8SrG:x +/̕ 2Y fT_:~[;ETw `5 ;F:UFKFo;~csz>M at‰ntum6?]OQ * q>g*BSSI4vs8V IGerIBCrua`UfX$v)@V9m7S'9gd%V&)=;ײj;|>N]Jt6LHGW D{aQ4gl*c:bgp\ yt@gr5ڭw;4ފG-+@aahi~ p*g˯FAЍU 6ގT4$m-)  +a +'75H~ek%W nI5,u>ȶ-kkrc3SU1g ˗Mr[:JIA!{CW!ȍK5!?kҙboA1/`Wl(k/:DY殼r[Ir@]ƃc}2;1Sd:PM)TpVRI4{16z#% }`jeD.z+- $+i^5mDXl[ c=Sh î[$QMDDodĆNn['cӕ:eJ(ie640E&Qh>h$#t^1vA3OqW,Wzv$'l0%vJǭPa'|$v0,vAq[_y}6 HPJ./Ac+Kc)&skkjkkߕͲ}zJV[ozC_VUhm$t *pWG/ų 9q 9]I&IrNkxeL{U™>#|Hb<v˃37d{2st+7O`;e$ax7u@.Xވ?H4gYRQGFH 9Y3+tNAYA A#yЕCE%ĄZ!OGԲS&./L#l%(R@vWw|%g H6Z7"EQ*z5Cz6b< -?!~0>ɇ*q5 +q*S_TmEQ~I2Q0WnK/  + Q$6Cߞ!Κg <hf7#1g (F+4#mLkU+K%j?ko^_/o^wdTÊ_5=ۛ1d3Mu R* +tޠ5b@-3 NW*6q7ktDr,< I`GFfHd ߝ}zMu vJl yAG!gKwi JKsKb.i%5n৙?{̈% 3S3;H6B_`8O|@SӟF$h4np2oM ZԷ3X\k~ +.þ2…ߜ5;h4Ü:$׳8N|6b)j,d={ͥ(2vj$E+ۡk#5zb?W+JE{2d T@TV5zDHjpE XЛ5qzj')ʓ,geR LW"\oWk{r +dTuR$5mgFOa> k-2ʿY`ҿis좈DzC9`K,g3=p`v'R9 7h)2B4A:<鍮N&_Oai8LE7@,ue}hCfr`Msis~aTvFt4 Pϣ`8gFk(omZdsgA._xCOO?TP]MXs)+NSNL聘~RPpTܹ P dہocZM^d8a:Y|R.&." ed˭ʪ8\I#^Aن]mczң3n%x'#{VS5#&2\zs=VR5sH X(Q!N!Dw)( RwFEjC +bG5D+ N + +KMɭ*:m(:{3fg'gV=.\ԫkS&+ :wfwt`ƽ_:kꜦЦ0,cO{R}4.&1Z +Kdpoąt:@!ׄ` ?y8uJӋIe\=#D^xPc!QFaׁ뷇jHXs8o\,ZcӡQν)i)`կC+g˟{a.^q3OL/:+%z#;^"bb#5L}.Zw]Hgts'Yp㐥*^WD_- _4L?[E{ zz>Q(bbJP;D+}VG( g!Cx X< Ao "eńFg"Lb;v05[!Nկt +3&d &$E5uh u[>A'1Xs7c|WyzWf4hy曉k+`6|b9Ǐg@'G@ 0d\Flה啥&}a׋Oo\;4QQϹ-̥mSv%V'ϯΊe˝溳 ~»-G񦖮HQ@ 7EY< ՀSAa{e1tYtk={eŵe_d+e]w V9h= W;.{b=;y}7޸p>2&5PwQ-yȼaXΎؖ ζ--&>nv;T޺F*˽ŸmeɃ"-g1Bt5# cvG).È2U85E(FEFDž{&'+BXc.E$Tҕ*פCOSf5\J ⎼<&"K\E;ʍק$k(BF`/סph,ceiifL-ChUəRE* l>)M} +݃-w vAIv$ ZLH I +NEl 3ӽ<~]z_ѝ//#JKSְ5/no#Z + ĔQ@2kAD,Oᇟ؈<%ț%1d5#OLG-kàӅwߞ!((< +T`mo"`CH$I1A<ӦsWHM+?㽚UJ kcIMleY\Hk9v֚+ vpQDNV==q⮔ÔgG:ctq~J/S1x!0R9JF ,C GAy3S2ND<<϶N]paᗦSua,v}!CF^/SYry/dFc[t@G)H9-VnMQꟋkۣ$j5,ӋeyeT톳 5nanrYSMco>1 +>b:NYʳ{ѡvX?C΄+5O-\0d4qP``=Xy} `ֹ^'Ni?{/vveJKRԔ|MJ?nGxCk1GP6rq@JSJ?W M0bA8oMj!pѭYv%^lh*s;K5zES$uG~ {< ^x&GwKM@{iUi16|ucP {u8(dU'^d[ۂ7J +JMyDj="`ڽ@s_ǧfFExGe5: ^q3X@VhdE(O;䐰}pBHI<[jM5tqiZ D^Fc%ښI.g ʼlg]:󥢅g>=,HLWd #3Źt +թApOQƆD+/*+)I/7ڣmzC[0d)_ُfZ9*V}Dw8W!sbw. x5sn +k|Hyfuz(+uLPyFw|Fϔf"$,1}VQ)t=n}e9di?uG@04Rc.FSYgId\A\j,8bֽHטk76^5nWa+`}纠F+2*,>Þ[ y/'>ЎRC 6/Py@-bz2K!$ +,L8VȖފ+2Ä+7kx3/!ߙ*eZ&:c0Q%(̎ZRpǞX,⪦ $MZj +/fvJ WOxU~By_k* +r Za\e'_=rA!1h4+'epLS+~)+_eZl 3DԦ23K +2ԩz[ѫ{KEjlw%s~,RNm+yt<8UQg]ނp7{<1KA?ۼJ]BJ!Ztot6h$ lG(wxG|0 ` =bq8pJ^3`c^~H$o 6 (%MėI_%KyVn d-ngM0-';w.l&E-_x{~YU+ʶ8fxE?؎p 6cTTNw&Z6md7O6*)  DzU'mӋ[{?CV!K=ʑދ:@$ZƩUT ޚ0о `+gyَY iHUnHQ4I wW:ńFguf(Dfn3vL-^u=0QwbkZZ}G=l +;^-H(x漕$p4H+L6OnOh 8~ŤtHx{%$>kyDˀcig$c|v#k&kr֭aiCkǚ&]gb6Jb(4SLVl&^DpÇPe+.ipqb!V;m=i~N:n!{ h')K}UG?<~#O!UpKÖ'_~?nBYB+%-AǯprˇtلS'P +E*ON>9G +n:]ѸwcVRt6v>@*R)O: kWڴ;'3iO몭"Mj U-xlWZa!hڊKWO_{ MKeq?[\1szR;|tBR +ouedWO۶jHXcE{O֦Գ/H΋Pzy#WO=#oX/UY^VI)ƜwrӉHV^>uMa~9/!0:rɦk}kyZܻ`4q΄M2#w4Lͳ,.*Goq`+&h5_̋3C(+iȊDmQ7iܲtRķ/ӮtxL0f>`z"NzHi/vayDoqmryg70-x>CF וRdZޜԃO!^6va˲%#-\y˭="q5cGZ}Cm,q0?fMZ.Q>R&4&:hDʜ%Z%˝T-V y{L`iƷFz g !rVN2_/[zk5:J ᪉OѺ6)iz"$dUMhۼ$.1C>Hs{P)oB}K*"~&TƵGwp]LK$i_TI+Kjx3~C= xw =dD-h w*)hMguF]͠kbr6:u ^p/3DLX;3⯷'*!_GtA0\zMK"H.ARVWyΦuSQi^'O|40ZC13u 6Z6m%ođ1>=-YJv8 \1S*5yrs< <{(FaRq)H@XIbVZmS@a]__xOp Z0VэkUy4m5ǸTqVqva6 OiKp'v33 f]a"%f%iTׅV^b().fb`R9!οcIEk֯xe4 V^rY496C?t{ƚ[g'jے>͙#$)OXHm8n{㺂 iRS3SVLp`ccl$kXV||^\νKUz!|k]8N䖡D즋jk)?ǚ2T9qU@mE±w&XD__Ykl̲%'0g0j9w#C5qF$JCpnK_pүuƫ\UgBYx{B)~ʇGu!]ud8 {p£8eK]#,vGoOtb-[W'Oς15hyzm>kajͽ4LQQF<ĮP3yfb8bL{?}^vH6@SWK|lXΐ+Yx]eZ8'U4ꂨĵ߇:}uZjC,^eBccBǩ{4QwDtM&[\w7=tnM8S6&_W5j}N8g 3tB~z~Fn&U ?̬^vGقF>YQ[\b=@ZނH"R/Z[vƦu3LY/ 6P_߳< ol(09xvb>+ 0̈́5˵_rlBy섽Mq5@p3z?KP+`s?qvyRcfCC. YnK.,<<":.h_NBLRx|;]|F|(2fgv'ehU(S[KwdFBS4ڈLn[*jy `\hbWUy: | qc&qf6eOeS;n'͖ 7Hʋ^$cR<.)?鐷}`,RXߡ &~qYg,cÅkՍl1+<%UiAa8qD&hs +omCGMG ɋhSSN k/NU9Z˚虒b&3) krds.cMw3Y",jpmM3d)7e_pJpUI°aX$}p< .IUwFw} +™ymB^_60@~[gqylG]ᬺpvWb)SCpOˍ' YY&g .$C?ei)*b!܋'Jc2;t fƴ; ^Gli[~2x nMz>FR~:-buT(I-3a<:@J3/זdjS]ld:3yIŚ;3x Ib^R#g4|Ozd;tiL/ͧř'w-cpkيzuy`mV˖}ܭ7}={]!ȉu&& 2=!8p^2zn(q6a8eqkV3d['ZdW'nm}/[Ģ]IWCIF:18{=vM+g<̓yo=uGlZS,\4OL`A;cfE#s,WTM dۈEը&6K9I&iDͦW˦Fk{`_á3 Ka%ɍ,x E%Bj16Ҝb|JXI"t{r| =ۓzo[<~`w/TA;@oz{??WKn!V̧0T}wXi6[tĆ vQQA *Y-*Hunmn9ɞw= yH~+7,M2ƍƝ0 C:dNS}x:5]ħl P"ҙII6wzos0GӰF`=0FW; [ib. n0I$a/U܁`mNKtY]7Nؓ}~9H p&p.1 %c 8PwSZSFWgl@8ywRi +=1f%GUo﷜w5 $ty^jqg&5I*UUvHX+MH^R.3 *rJ3ISe6@%<Е߼ZbT!$EKvkFj[Ϭm%\70wXIj8#LwA&)5Eؑ)֔vHJEtƉ`X7%8^q`kt7;D||W W`PZNd?::h +)~` h >{82]W[?9Ɖx wbmnhgIGSo^p)W 9+G/©_aO=";p ҆l^deوlp69,qu8n.81-R)a +c|Mb`$ڽ>p`XL悕t3i0TIYrGclDpMpӘANYcW` nFq mv^+6h, to 6xVP ~>p4-8T [mwaQ(Frѧ7_X[-2A&Ƹp&ǃ(! I^ ,b=B1ߟ9}$oNsF*?_vHZݐQJyB* 0#k 8P{pҢ¢i +Ղk߹cCrfqK\VκuPn_!qBM cKr+B'Ⱦc3F6@iAt$7"[np`(OcϾ{‹HۯB>1l,Θ? >of2Q Y}vz_b +q1^\(} +ض(#څ#wm7x2cmϫo<=_s/q2t:@#W˕٭K?gKo^b6(jsR#̳$i\zKg'iٵt2_B _,ޏ_[rsW1icӠR ²>oMgh\6Ҹ¸ɒ oB< +C)qj4+#Y +`8 c Vvn|o K~b +bh|Z$X+,^iD?+s)/IE2c$/G*I_ɫS0 +@CXD( 4@jn'F=4$2zlfMehChSbcI"Y}QJdžGE<[-. +ם[-;cIP9<ė0֏ۯ? 6·D3 '?du|t}6a;tEɃCKҒdpȒkYApwAb]Kq5's}MroU ư{q  v \b98]-=^ē6J8j{uCDUZi\pel5#ₘ Sd-gSHuLy-Xdȓ4Րq= V)f`l +ރRkʰ]6l_/A9P;6}'{0i%ޅ&a3<*X'pD*a?>1 ٷhð5=Qİ81v,!_Ҳ23pڻaf% N\p]{[ A]U_cXbE$HRR+tnwRNcs_o´fB +zQ 7p#/{I3%_}W"姈3m8^^Y|&$h4H?ΕWUd̻d*G]qFbp@MW)y΁):H̎Nj3IjMr^k[kyYNqPRwd./pp=X*kqz#[6EĄą^] +C|ˬy[3Bwe7&R$WOY`%$Z?`gx%v]C"[R?5/naͺQu+v0gj%mkՒՒյ^ue$ycaR,&PFzj B fC, +"$z,%RAtB?aq|xASjJ`q5Y +i GYal;]`m3XP}qiGӉFaM%꿗au9q.,1?gioKEl ߝ-.ϯ*(r \A]8yBIyTenh}#}$:^C8uׄ=|3bz}yMo_V>`OX\ Z!30s>=.pJh젯m(4,h]MIe/CG}N]2={5.3)U\hI0ԺQy*Sw?}:&E}Ӻ 2MGn?U@C:c-s~JAjBz4AI>?Ⱎ +:/Pno($z{p桍'\˯uiNVIA {~̓+7IS%Ҹ3sMxJmb\FYN׆ ?/ T,mmУUelnS_col$b[^\EOHGe#FODe1./-)TSFC +̢N'2EĻ +O0m7zeO)|:#2sW|ʡwDw LeV!bD V~Tw€7hBc#첾p?9]E[aL <'D*5y-_>/kZa >zkKWIṫ- M|FlrZDs%&[ʉ(LV^=aQ:!j4q9a%N`$ʂs[8r-"3IknY*~Q4cLJi-)%׀v>$]yhs}KUρ-yOaZd1(pIЫӳ2)+,E hwy߾.尛~WJB +f'@r6:(< +rK# ~X-5>睷w v}B!Q(Us~m Tݛj][,F`\/̧lR>ϧ!tesaq |" 3N5˵@Q>Yo+%ʘ8ԸB<*+ۯ[,pǚw5@+n_yxs9&Iί+ a)B@?} R,`Ox̼Kb^뉿R,zbYEY-0Y郩h;=o@7}9+5XMQfkB0po~::QAuɄ0.:Qe~f(Ȧ yKK F6f|^r(1lI$@ChXy-lloZG M zP +سUT~g +4pN:q_sɑBEUΘc|Z)9DNmJ87;;/@[0sHB۾B2J=Hl ;q }H0XJhnz[ή K`cuka9[{fnqu Ҹ@G`<5Ӝ'|;5dXG|5drxH餋.-w\\bڡ&0 ؒ+6}*Ŭ~ݭS`/zfE>aj/(o3/mvjw猳hMgWl=]]XHB[%fwρa +&>TcA=рĤ{j ~h;"%\|ʳyf/9pw=DۨqK=ڠWx89qebV!Ѝ1w08Y ghJz }h95B*@_=LnZ `MLġ}{U)ݤqoDd%_J)5HkArj` y*"!GR>_2`nl;gEc ÅPG,|(&XDrnf1TYqplJeʌ"݃0G]}uV溋 n@w.Dő?D%Tg'u)LI˷Jta3Ɨk\x,L-lNL-'݃4c! jUhxf P/{Ovܝ3'2bjjXYcӱU0J#P3(3|^o ӚxGv0FLiQ(VRzc6WQ%1P !1;Cܯ_[,j&U#n<$z2Zԍ}2T9썕Л6;tJ/MRU(YHkޥ UN0*qƘϱ]6 $sa5 #v@g*&D؛f,.4yM›H'N~<`YS(; HK777L{'Tځeb֩^4]JsKq)ϱ59YA]mNF(/H~k!' +Zخ'{tJ/T3̚PD>btK+N1h!2@w.;ߴ:"Ld~$#əK%7.@ a@ȉ_f7*Hvy4]r8:E O,0wQqZ`>#n?L#QVBFNb;AI1~zn}?uI ݩh*~?МYS0MK'ɉ +a*Uu&Hbx}rbXbI6W!@c +Q;.^Y]*މ((Z1maUo-RQc5 xn4(=I +M;n*n9jzP?'xǼw9b]5xfrx^4B7q8XNgj\@hsw. 0uMxBEpK仜DkU==߮XX N 6-#nx f. C[OY0[ae<dQQR ~B)T2"$/@}ildy0ߢ02-roOF y LPX7L}P2Umb䇆 tP Q@ 3d}b5TUx? jx$F^Bؤo?Օ5:"HsC"ٙpO!qq`YLw =~T괚h'KBWpB ΘM̖bPBDh@F-єde 6.mcnaGMOO9K$|a l'Z0 ?5rru$F:U%.+K_-`GŦS_l> FaTq].3H*YQ潧9?6 \t]݅L53[~- {])9&C!PZF8q;R 5n+t-Ԃ|@8~Û3]DL + +L> LOU Qܮ=LddP5IҸÅQ(N& ?QϗVV@/TdGm+PJ//&\ǦG+ %ЃCgAZUYuA] 9Cb`tq3.W3ndMYpȃLu?+B*Zƍ&]a5ua7`X%5juΧ4jrTEp|H`ޤi"LpX3xfW*Lrb4aNFGD7KH~ILElҤV؛>HqiFiAQ&jӛ[Y'\7O̲wOytVyOt?rt<^(Q)j;{Z@JTV$I)4_紃7OH)3_ZKBI:oZK>R|"$Ke ??4`xߣo5Y%)]jap}PӕڏuW4Yd#l?qئ R,j:{GOyAȸZn/&\u)lԊ`uXy}G\ŗ&$l}0ZCC~ahSˡ7Tp麝܇C(iXَ6y'=6P[JᶷβK-V*4 yZQea8? bHEk*|ǘ7м,Ǹ./P{]5b(OR Ezz۪^MQDDZSQ&Y#Tw3lDn!l^E +:),6$:"澛\(&y(ƞb`YcBopwOJ]n.A~ udr +[YWy Q٘~1~#0a.v=;yh~%K'UfWԒT:Crׅ1Sz:0={s:Ӌ8L+ q"LMðϏ$|oFNfk zU8RtPybc,M/u/٪S0q*Ġ?eߵq [iv%f=1b\Pv`{ԃI ҂s gݐE"BS)KGљ8zhmqC!Kp&Yrb=o _mWS%|׃>n1OjEvdzF`)np;H5Q*# ((*=H3Lm:'iQ0fNˌsu4_g*x-5`4𑴠o%UUU8GxKͪ 1ٴO9@ 5@&6o>?E]LGqU2 gUnsNcօiJIG)62rCvvG P1o=SHWHH7G)(Lk(FѧyЙ/iP+qrR[ܗĥtJk},.S#UOTQ$s`z^x +3Z`x m] t +jj梢%yw +f&"Y}[r8|HĘ4.fyԂAۢkD-{W3c8[Y"[ySj/7p 8S>}ö؁w j)h-_2^gK6^"j<#}OCŠSvRjUZ3G(lRcH -yFV>b$+9c%J }<1"ZUP+j}C`0v EB]Fcϣa|' +i0;e-|EHkgp3`VLƭ7-%aCa#S5gןð`7Bܟѥ?c@MZ>B'S +-U|HSy)ɄERB_?3F $4RKZ/Q;G ܰNKOW +طFar^i%}A?:2|j5B `a + /Ks%UhqzseC$)~t H0S!Tl:^! M .E75J+6u-/^׋$ѶbA"3m{u~BgCnD04 ; #] +j3-7*6톮a?٣ Өpdw!i573pװڰ8"J\GM 7V:62oKyR4IZF8YTq2؁Gw/ ~I0[$a2wqA8p*^m >|ɐykOSNKm͆x.NLUى/hS\|&t8 7rqy*-l*)*۾='pmk=%gw\ưo]<{PKPfYqy4qt;Scĥ+ diϾ%uT!! [ܘyȤK%{qtг#p' +Jl޼gϖNHǙsO]odw4%*15,4æ=we ynٽd;#:o3^ZA7$ nW[=hѻ +M""["[&q74(>mv/('U$hUIi3p^\;d[s~fpC`6W؁ I(H)LbK6)tp7iJr")@+yr<ȥ<:̞`#3 +/`0 [Լ\c6lX.}`Kh"8v DeS1N ~;0%L ~8v00β9!LlṯŊ-`uaQ_ԝfGgQ{b7@TP)"(bX(UTPlHIILN9ϐg=]$|w]˺]S G$ b*Krl +a8aHWfܓ@zS7 q$ X܈暅Y0)[,60h_<5C:^raї]o,o?z~dp>N^pE "eH׽fJӿH<>aC5 E:V q&g׷T-"0-޲"[.jc7t.ƒ<9$j65$Rz O0j4 B95kN3﷛#,c9-_\hT2­ym:]ߠ:o@w~~C;}"6xMUGjIAnqY^{b!I,L.JfXNN'BYmAAq::U3_NÍJq1q,=6Ļtޠ`,wlsEDNHcXKp$ԙkqjr-蘸1y#3ZT#5OEG99)%%I%iEcw p }luQeG/Y1k>³;MOK/*?tDVN;8>49ﴻ<:,&.L//k+?Fډզ;wa_/ +&pH;-`S!FXdk_>l}mlm5? ȡ? grpI1hi $Դ)x3 ӹE*[%SZw|aUqfvQjFL85s݉D\eވ׿͖bZl2sqٽ緙pF}ZhM`)$*,(6У|O~ou=X,`J+Lln2pXGN䏖݃m 0z]7G`w{$;os;䏽ja =.Q1z5ˉ2破c?f5|5y a`Y]r CR}kh\+F0<ludNskoJsVKǃF" Vˊ$.DFKt1])+]qf} 3瑷hERPx')(^iδ\ |U]6G8T+LςAw^y<4;ېhi~ܽUZ@[s>N]{tİC9q3nvyưh{JyxJ8~З\ÎBVdS9R6ꞛ.Nx:zޞK3kxy-#k)`% _u>MSLexk]PtIO =u N[JdqE1NLDLPlu,e'qR edh2lW.%5\=S ou:n3'ԇ}3ۗآ,;g s]!TQIDzCӃTέƑ؛)έc`$I1=w ؓA#>8Qu8lfRtн F9-D0.6 +Im#nc7<ц:H2 Q,n e 0iS +:쥵˅4}ZWf %{} p$(#w5[V3ATQ5[2OqB4mtx&y;-8i.L |rKJs +D~Wƽpۗ1>slU[:^ğظoF:vkĿ-AGwu5TT? Zsݶs'#; sYs@T[Ҝ0PF1lBbh5Z{η`~OdӶ*d wP9W>"( e)™H}>
)L?T^og$)1HDkT-ܯ_2Ŭ=;oU3 +rh4):FXM[;TnwǏ_ uhey3Ur~/BP@s@ )eȁ#:lLhTyĦG# LRUXg- ϓ#rWXm9 d#hK:OBbxmTF!14ZA-ѭ[edѦ?hoa0f_m:*Od'ٌ$Pe""L}1f>5]La/ҊhEdT R8iH6a9Pƿt<)"*V>BQemi +`%,3֠$dh}_QzVڣ/Rأl3Ka|JZva\g\xE+knzgS(?ut~Aܧ &_\=V aHR1& S{)`_1 /+ +(}Jp~; tݽ{Q:t + ă}- qH}r&ƴRm-ᘡ\9+ikm0#*Vs='hg:"Q5@%A/9sb: i-Xb;t{a}Cjm|* M=̓CLY;Hׁ7L:,8FvE˺309{Uwke@lv޶z'c\ֱ;ls0h v8 ۖ a*lM/a*L/p*n p*Nt7~c1x顢C '%`ےyˋVٟ +D*aX)"ro na;\V`k2yPA1NTWwRnGaKA!SYI"1,uzBŒ"42L4+zi! +6&50Cə0Ci{ D {q>"+_E J$IZI׾Aaي\d%P+JxX@Á0Lj lp<̇T`>=\\ urݏ/Ƥ8E +d&*17b9 OM1EXIzÉmKFxҼy-`e huum'\Xdn`8 yI8%r4t/qP) SHŴޔ RTD[my~&5Y;wOHua<{`3"t} +Bw3XH]¾T?uȸ7^2q#i2}<̷U"󳉹+Q ctSE09gg9!)"j=Jr QOP"j$?A GdǛDxlbZ +s{ȟz]aЌZ9xc˹ǻH t9멀C8/?ڀ5WH Ðt#m$7H"Q t[1Z_&O傩3w; zF#bK9FygcSjZF͈=X:6 Iv'3 ܿ鲷n3\;+-oz#44X<Cgape`r.L-Ũl\i,leE"tܮA)sԚ'z2Q'4w-HNDf^[aY;\ft3+2.UeiUzrWkg= `zK@!bB_ d-VHdj q5#rܘ“{Z(OWWސ̤n<%rԝK8e.-/>כA2bn1!fq"c~Oy\ӯi1T&bkuK4zu4i/8ŷ b8AGbIH hd3Ig&0 5^+*-a çE +k] xGBBZe*d)V2á֫Ի tDUTҞӜdfIS%\2u>*TQQSY{+M_]rM\N9FFk VXnmT}j]Qy10+pi[M-*˕Md\unFd[=Hj"7V#x߳6xlCBq\K#}>܁m鰒*ᘃL*cr2Mtu]~mMMLTCbv*"'r0=cy`_^>aX]ee]۳\NIЅ0wo bWV&;ROǢtjvkPTۘؤD^Ѕñ ;/;s`X޼qCυG_خsoK\[ǘ +MEذI@ĢW +FDr1Y[FZ q,X38pQTJ^%ouj12! hrRRa>fCw=T.nVˆ% QZƠ6q6K3B]ΐ}(QǗn8g&N1Y + + +/vz5\> s.'m_"pQeE7܋}y8 XAy1xT90WǞ0A[m:nM|JX^3oFQʖGI"Ǘu)o~'k0{Ǐuvp N`-ޠZ.ߠu! _~U?!s ZDX˼5Q!17Ï7ik  ٱ:fEՅkm0e"ƻaYFgiVyJ?߽XQϘ&9mǗ(-oٱKV,Xr. /:-kե.Jw2׍@㴚Y vihYGzA/XTٷ󻽥@ee2X$ ^} Mk8EuVHMd}1]du0}+8|8gg(:S^5֐I~"ثgM-p 1HoCvj-н|dư]p PEMKp/|_5YPIfuit J:tV/SVܹYj#ALtM-=.D[)W^IАf|AX ԏ Gu&0NMn)Vm\,uZCxRބתN4,ĪDbUCØOcp@bZr?VqFruˎmd,#|d)m2 $\'K ?|J:3EۑA8 W# Z +TrL8|pUJ2MF +њZ4fc9 +r覌j3ūTQ#1Kuvgvl\7޼̺L:UbWqNVhmvi9i̜#@m$]n+mcD<[H { # pwb*]T+q6_8hF-[wW,rgl_KDfVz;d6?N'>ahQX* –. + cΆ=hγ/vV833TP'i:9è[Э*&uRAR;VIUqH&4<,.y"Dm7#2)XZ|/`ryQ#1t>/ + +Ы_# h=&٪kYxR=h%(_D&I?^˛d8fR@:Jͣx;WA2y}zUS!|H5򬨨'[R\GbZҝZU*DZO% Qd[WMٔkV|7¾җ:VTqSRp6\h\z_Zeο V,4 M5xꐮeso0٬sD[BFhs^w<8(S+jUY&E3Gl8xP!6;1xD'u5dg(EGL +T>.&^~l֠78U'.N'T QT e]-(E#u HaW%lMq)Q~I3yVMEIvt`yzDu k:RIM%iĈEEbh0yӼ m}-0Uvl]-E(ܖ%zV:t-G7ܛΗ_XR);1~]#zt7פ]l_DU +ox9KJ]?.pE(#6}ʙckFm1{YăJO$>RZ_Yݣ{7q.{dk{~UqvV+Bi3윅 Ykz ?Rc7_D@/S_\ŷDmؗwk\Y+La;k$F1|~x:iₕBEȣPMoxLc 4BKd + űsq"WLjjh}db'<8L̤$ҖEe@,*h[!AJ_lnR#C`>o~* "."6LJjw>OcXv-q 1'c/U ;Uu>aK)zok$%.7˚e9] ZbwH ESyכ ;3|bm!L_r/xDYkKƀϮ4?.H%UOmR,2ӲY Q''k#fs5[쾝[C=Ų^8vc,bL&eυ8<sU8:Y;?਍xOnB.߄ ]~rH ѰssƘ6py:>i|M5n]z$g_ViYb,``f,`}`n3v|j W=W擺2MT]zqn_/Eo-*FcO)5#Y8 +M9 +EcYBS !8tjT} %D `= +ZaDۚf4t2XVwcX$e(CN0,5gqa~^[*r,ci cB/:O׭4pM"./K"ҙZ:+dZbaA5]C%B>{ƠJLHzUi_bv a$7 ioLS(L$TK$I_aHYh_<렐D!Dęx ֎#4ܭ/;P#Nd cIŝ@ſpRv(^|[G~P/\ɰ6C_;{Azc 4R QV$X&SC)6eo,ΐs)l7VF Z&.e1QMDRPgj%(ujf?,*uP4:OWYFTjiE o~ 6K,Afa>x |;l+Jݗ[}[LB)jC NPLƓ085R\)!'. 0N#54 glE6ٸA6{WKkR"9m:iGp\DPKWw'χZ^*52|qM[.xSk&DIv 5C6iU{}.2M猝.X/aI."'/p[4rN圸48˺ ҡ)hʿ:.OY2~ +'.A_;dQw +)N<(=0WTڵz}_BRl\ZdES^@0~1=hxf72Ɋ8 ]D,5;W+zх +]tA+ۣB,(O [$6X6pj]mp16 +y'K6~ 奌&07LT0&^``z׺ytF65IWe1,-smn4EpkrXzM. Uҿgf$!>RF2z,auJ OgTxXVV 2 |[@cmp+oKtd_ra/=WNjḟ빋xk_U7Iۀh1{cskx$UJF~5JZuY](1-|2I/BCt=X|+ϊMS4!{1|ӓ+1lUYS+ R0h ՟f(u%`Νvܗ=~g.\v#|dwe+X qDP`}w?͍QDǎ5i1ů0]$S];.TbgFpJ"d*4Ж ?ɀ# +`J/batGxHhm[jNT93uԆ?cUAՙ +Upqڴ0\SF.Hfv>&[úD}Z9)Kj`(, aU: +[e/a +{r=ǃmb#aO +fEed%^d_Tk9/AR/xNTؓ/ZI/R+vOdC͝o I''MWͱAC2rQE\xnMBȬFv2!//uw#%*0M +8vDs*q{ګUb5I*̈́~W/WBe^&x1 ֻW̺Лwbp8&ur ֞/h"٧ O@>4!GkPhQJ !-.,iCQ%q4Z2''VJLņFGF7BJ[p_sc_dSOAx ]ۥS$Iz%Bonwd^R[qEnUuc!OWGO6HR>H姦M1.Y[s.MT+mYhX%-T5) qz)CX,8o[W_5cr>h)䣨>121/8a87$#b3cT*2qKk~`^|1ͥ;%T {x;,FWZVΟyߑ f~x)*}֩ɛv9:>b WKά -з%~yW۠gƫՋ |qppL a}2&foM,UV̐gUz~ގ B\} gQpP;she:CGFŇg>Tv4l&brwvM6az }(\;q39qhqt< G՗/t"eKaV`YMۼ;^p4U䵍Q ]G- 8'QD-$ƴQOW27s5%Y\\4&3\[HxV = alWGr]!z4LiCķˮʤ1!jY4)g(ړ3'LZ5֏$3žH(l2R ˤqCW)E9}kbUehY/ \#c"Ey)8A؛m  %hT ZOf\_Пd㐠s.޳M+-%Un/__3؋T_!)b?rů#ρzڌI9|rj[-SUG#}>ÇwմhRS;f~2n;V:F]a<+8wcgR.O 2X S`<'Z0I%7er"yʅ śʷ׺/qc^Hm>RJ25]ƬvÆMUaL/+V<$.$lW0<*%]5؈3X] `yV;\YoST200HMv43y +lXW+.V3g4gO%}C_~ } ޡ;K @ǑBl*IܳORR@PC:~J96`٘h ս\)6r5!+<$Nk͇#m̵ oԄ_?hoxZʭ~OE*4sdujvtGf̗hL:eEa!X?g | LmLaBEnʓNm4V4ݐgk՚d[+crw,>$gkkmk +öBrbDG%B-!UzFG?qKX'I+x>[֬<!w;0s%}[''AR-k'Hk(}z߹-ϡ!6cz eMr3l34/6 l +Vs:*<3_\& ){B"A楦Uѵ +&]t]ѶR ̀ىdʾ"2:M&^*jY`(/a- BR 5:eWEVpVhki [9E5uN'u0Ov3uJ2tC7KPD]xJVkT|A^AQn127%y+kc4[)*-K'[-f6↛ŃQ=ncOŁd˸54}+DdMef(O2wG{WR|ґH!MB"׍^^oިnd.S~ynq^;# eT[D3u=KxP X}uwaM 'sU'_9XyHKe]ExoRbE8L,ɔYX/,u'A9GBFœ\"7ZY+k2,?\~!\0zbm1''ZΓa몪Eqo$5 +  U^vvTTDivѨ$1&11s{bu_y~N nB/&M$kTŠE-LT+Sſn0::HjtMH=9\ _âd +uxl}WP%{QVaμ.|F_dfaH o[abǹV6əNr:io<Ǎ؆#yeW["peTߍiQK?٘Wte)]HS,:5S:cx)6t1DVN:!Um2,5]Lktѩ vN~IjgKNApJúE[mLQ|Л)'9$4f>:acӛ)fccT +FoomOOoAͰS'?8Ϩ6VB\Mvv vœp?| V#3~8bT9-tLTZT?.<pdTFE%cp!9k·:+VES- M7,&*^\p=ۼj6l\+ZIgG,װ0QT/zn3U\ZP]MLQ8-}~g DzQtv1PŹYŅ7([扒6(tiŽAٝkξdLNHU'<[672oox;P'tRmaTVZXc ` гR: ˳4.q(C5N|")0-3uh?!l|."ք9s,8s 1.bb?.\Y=KI&xN&+8I5 N]rZ}]\bi44pኚueƯx@([㳳Ъ{Ԏ-?sƈ0oaz9+^iq>aJ ~HIw3Óc͐ٛ<10K4-huUͶ870y #Ej-Q6$3-+Ħ"7+>Y]rc:'9ԛBBh]27"Kt` mOO0Tk]`odGȻ˅6p'8r\Yv & +1$4TE 0z¬e7-B#E?m]@NON&h4ic9YQRZ~+)ಠ]iP[ `!vH':yyE&b#R8AOc1*Xqj +zip/"$mWNN^m:5H64.HwvݝfQڕBZ ,ܬ2S` ?J0 dcOߚy)rַji-6Iυv.<%GJ٭ua,dp +$s.8l<~>}VZRU}F4g$*LiɉSg UI1dL ~0uDNGKRgI,̯]ex%0VܲF⭐.ZԲir镓Wd.QE6$mo| ~znR H*0HWln*{9=\zSWA~*mؐuճ-ie (,TJeđc 0Jk:B!bڃ:$] 9'a;u +?PKv5}Լr1~!nTp#ӫJ@/Q-rP,!f [bO#F{K8YM"pż4c:i%) Shh˾C Njg `PB?!fH5LjojWCrhWd&)kV>o[ejJEDPׁq2&S:t] 3$HaU=oþru€gQ0턶<=Zy,frA輨817AyFj]͟?uDh*GRqN')5Мg gÓrkc`$6qkd.`ۼL ^fPQ(jMzr_}}hΰuʐ@Bi@b^}ۼOqB#W6_-sAfЌp)P?t&mꅥ_| + 8Ӹr*@\5nImM?0z . 2V{Pk+?e6x!6ѰaֲY7¯ܻ*ˉI'ng8yTӦdzJVo+y@mY-vxINzKJ/iֲ `Fb9rGhfnEF +'OPȨg5bcOEl:ix8F.x!$ +(+_6@(4>3 VMYvLdl@کcc] wJGw;B.sc%7;Ł>~xj^t2U=A{}ȍ'Ŧ$!}- +SH%?D+0M3:]38, +CK[e>0623v/?b40Sb({KMhVNƊ4CMb=6@YTʤ[kw~O)y>G;8pؔXx9A|2)c 3E ;2!]m' +t84 w[mZ,BMe':3IGºAVB1)%5iL;_ׁkUR)q6~=Kx*);?!RzU0[p,z"/2j/B#PgmWUJuA1 0J0-CW.%hS-ǼٶM=t 8ua',ʸtY^f}`t>C`ǿ0'*:K )Ivcga3@~%k][&KV.,zǗc emKD\(LγHiJdFv„;ПIhlt`~4ÏbLL N +f~Pklvt^rJJҼD*)c`4vGZ7w(#hyŽƣ^x(ҔCcr1G%h%i$04FǮ8X6Xk+,luo;ݔ8py1#7 6jN4E*R W=8iz1,2/ yjp?VEy\k -*HUnKwn>o-'|+"`"@ ʤ—L_H/`  +0f{*(}%l%hE۩We&Q.%E3^gȰOge`."-[N-(gSp +okV*FT\Vl"a˃}V8LZၚĢ[ J;3/-JZUtlQY.*J=9{2cWɰ/~ǡH{lI52SOacA0^7>;pآ%.TȦ38L#]n!6}`9'_L/HjI`4+ +-`C+l~zCReܑR'=Z*k^p<,cpw$Vlp@jM0 +~!&1f +0jK;XLWGnN7H +Fnk\/^TzLVI~WIM ̑n>cq:Z׆K}+o %ʢWPu2?'a.Yd(fބݿY9#SmJ]^ nio!Fo a={K\>1؍0ڎ#g=`.QLTxD\PCTɛB#2Ù 󧴅vOTA p0ȅ4PeEJURunB2)A#|ñM=tenzy~:-]VLH$ 4Il68` mv ꡏ>GoC Wp:X5+p5E,M2Dԇ7.8!vɶ%eAje^N^ L&iEoN {h;#R]Lj.?p*bk",6*w,3.)&ىMv??#a}U+L~ {}V`?L1\ -fL'yN]lvd0J 6 +27ȴ@zgoO +ғLp*Uׄ(ԅ]Jt[uPřiE'-U%jv`2kIZUZG:ƞ]K,x$6V8y;޿ .'< y\qGv<Tah.HHOT*<1&CY +}zZ~뛫kjյ-.;;M{16 hD),*&b.pRHiUɋ*%Y˰`inbфpbEF )ð94xcQw46ome2ٳ.AO1,L\ؐ*&T(|<+AaL\AaM2:<.&,lm21fDk"o&$JUzцҙfe.1qP YFȴK M'iSmZQK J@b3_?13RZY]v>sj}łMӖ:N[ hxeO6$t©/ݻm0L%5ű\[ٓ&創ɩ)6M6=H[~tUDFT_1 hB܄-)b5^T&6PJ_|fO=ψ?>om=fQdiJ\q|mάE\q̵/0̰q"i&,Lу] L7qA1OCD !׃ۈUD0 FxgHLsG<*8Z E}t9Uj#zU ׃S̽^7!̅9T3+VEb^UJtaڄ ̶@m/c!8$5R~D-sXgRBm*, 2\k@~ۡD WtIN.rS+h찟laT:EܟQrWgTHtdl\qXІeFK6$eTS܉VpfuM6+#ew\GȤz߇ N,(,o _N'/_`o v\#/m0s  ]oٞ5={)0+6Sʏ3/I`_C#@H٦A LmmAeflYaN]ɺ*3^^1qiҡ4,Iȶ@hT|C醪BYh%%29`:S7Lp +an5[FOl2t~&¡^j|wQqz.=\ԃ`%?$#eeϽ ^es/mx s?ZܛnT1xT~p|)T`xԪP`, +Ҽ`X;0BHЏb3;6! tn +˛nҢ&?Md=r}FH-wlm Ŗ0f;!L/Lv}Ϋkv*SU Mw Z3T睰nld}$ϾF =8PDҥ)$ cGQ*hgHGԟ<4QY()B%8]IRxH/OL?;= +CM!\οmEmǟZbaQrX1P@`W“ +hwO (q#lM > F?|:zXn%=D->Ko CgFk^ǿycs-MkVJIypX> Pu7%&PqSp/MDVfd +tw3 +Sɷ<WvN} r4͇r7ƿ)H}h+iEPUI#9(Cוn!eDk8ZqOVVسi ZBp^o兙db^<7uOB<ƭ .bLr'hI:f$pOw~zz18jZơb~/]%j +E*|Cm(TveGbo .6hjg;z(49C.f}r"q}!Y9yO!U< 1 S 7 7@9 +ļ:Zw4L2HpXQ:04Z?rpBٰo~6^ a`]6&vi|o zJ×p4|Mf ֲCrQpopEWuUw`d >I9gdUd2i0ތ!)-(:1=2̻iAeuB ,uN@.)(o'ٱqy>]ľgplm#,iiGaΧ/E& zqA2 +%kr"Y2ϛZBi?ZZ&~.TY_>5]":5>"'\Av׵FW~TDZ&=yN ^Z&3|ܾ?YhkSBP +czV~u@F@w/XCޫ"();Vm PfvNjrS|8:#`c4E}IHQ<~ u,+6;:~*G5|lxY2ϣ2Ḡ"-k+1OT+ hL蔌g:J<a H׿Jbc5{b'nCR8MZ@f Đ#c'}"ˈpC`d&kSt5YS;Iƚ07~Ep*JR0N^D:'n- +%f_,CˇO1!gt"[tJybe-F4VPo_0-Qm.= sbydyYI7HLB}gš;Ov!|tV>4 ]r|NlgoX`Y%.)$˨4.Qna`\/D_НUW2/O^'s6vN]Z]p|zA_QN$|0 +Y͘_#07RVyڻfc|0agڟV^O&Ts + ^MVW1`4KW~`r|?5 C m-8R*96@23vh .\QbEv M=Ryr.誊xl42h/?GP>s?ϝ-{Cv_{m9-_3 i[",N d&Tט۾N|VG&DxG mZaYRu +Iy{ + oG&:_ g]x +I?Si*.4% +\ŰiJu~6˱CkJ;XN7u VlY8a',u kyB%u)ĞgT0iҲs sZcFk2b33h^`5ʱld\"bGcG~=1H ~q7irNUYgt%+s@u˚ׅ҇RH\.N|ó +R*$MgGؘ޽nF1lOiCئֈKGG W 09FezXZq|FÉ6I [;sV%<K<;m.UrA]|O}?RDBE +ly|FW}*&W/Jm)#){a 7L'{HYx5v|=Ӌ^xg]tj;N׃Uf+[g->[8$lp=.N.xWNo?FѱʼS0~zc4&Z7𭃤$uJ3ЌJ4d` lju^n_V:*èU+Bcb"3C*P5={ShUiפK9҅md뺢Deœ =-Oo 6 _͍M0ګInk'6."o-j`8+eЇ|/o$U ;@avc 84M$ꂲWMc?VTqp 1!H6,hin:)o4tYnVQ/F +(@3Ee6#(-"$?6Ƶ] *ݳ0 hs'GhF8Z Wц;0` ]XU)d"M0V.ͱjP}hҋU_{-զljX]y)'IWOT!2o^1H8ssrtdRV4Polrvc!;#5)59E%Y|$S L z0İj Bvn[5W8ie^|Z\:z81um Fwǰ|JkK*%iGK%| L"qTиÁ"2XH =vǃbʣ"d`*u^ݩհ 7ITͽ!eup-C_A 6hpD'huq!1/ 1fq P8/oKzX_Se>Pױ6{w6${+V'{ka11se/K :mJRS5D;-ՄKW=𰃁O03/ /ѿ}ȊKX!h MĦ4.jngbN(a؇ܒڸ;q +Ț]iQWN$蒔JGI,0rR \p:{ˏ+nhؿ'~& V]/N˔nt;517rZrn g1x;X]uj: 6tUjܮtdo5tqqFq6Ź$5Ka M/NpNZnkJ WPjt(uӱ ;дѶM9Jm\ھt) Ko FiAEnWv{ۚ%))Ro'a#'n}U75oyIt&oWX%q= +}f`J,4 pچ(:\ˏaL=L+HP' [UW$۲tg!.MzJtVқLW#1Q`%5QD7SA7ކ[ dKP+= A|cj`Ӯ4T~!w4`q8Gek`a6vqGc 86[v* 1vpo>1wCJT`8'UIIQ:W F˴)y]ߘUG6䙦!\VM#d ZDO@Jj28}gWk9☭KIQT<f`?B^ϯzuo.a C=رSFl+ș/\즌fݍZŒ'T(J}5C7=%OƊw*+ߒ4ˍ9i ?7%Q4߃/hIǓY`oW<vU:oy Ჹo*ZHZ:C߽2pD>P=qv] {[cnQA҇@ +μ¹l#B"mc"ywqrcQRAHjy9Y~ !=IX9ZSNb~.>ࠀb/6,!: Ї*c4og@,|݌ή8p)LKzEfǫUB{֧GH4jˉKi0s=?VaПh"@x+Za/@8MRaosbp[KmϜtG|57t5и}{E޺G[`"zڧ72JAw}WZnV~i8Dfub5_&lAT Pg +.}y~E<wq3kt*2nY΁7*ЛqqjdPFt\2Ҩ/}MY.+,\~{Y'þy =k15o#y͙LNK 1ֽ|U&O*%{Y5|OOo 7I$l.Xj8%Trׄ8lH'6q2 +Q(_%xvKrZW`t9/y! hy{ji<8FhC|"gH)jMz)F[`@E GGe1EEޡa8j Y-l;^Rhj b}Zu~C+-zHGuJ֦Xuu'pCpppyLZMB?L +1\#tK{Yvwүa۷ϿEB9Q.8]T)]8 b/ +f[ BCn:Mi[ŠI +0hxo?3K;3;77l Zni UbWxt u&ǁbLFILŔex34Xi ZVaO T|_> [Q[&̴_Ko] SG6"08'e"qA*=펇>+ϐ2"lΝԕ՞/jP B*F *A_궜j2{zSDZ4O䱷Y,)3Rh$8Ge)R8KPkXG(.Ȼ'ij-A}H.Rc"ߴ9qt 8ٝ@ݑU$IaޫowLs ܱQVems^P! +D2܎pV!{Y:SxOX?I %IL2WL.LY; ]|]\axo F`W(!&p'"H\lQJL Rˠ +Zg`G|{eXD^I4ǔwSR/DYhGLw=vwgkN1$4Ba-UbEnF|.&3¨RaD+̌6(o|^SZDl1̟Y^1!qPZSPd*Tݽ~1,j,c蓧kO465>J +v.bG/S1RIcz 34}(Hl2;)L. +y,<~Š\#P # +gr2LKU)kxLm&))/Y"wÕ& E>3k;pvmKo-ۥ.Dakn"¸)Iӎt5$.TKL_[р3BeEM0 -t=>YED̑TiCN֑[Ah>&XvR l4Eq! +tS:o$")-.ุzг.U/iR3`Ɨ^u2O S`j-/~'~>/>oMF+, lั驿zwvJ~B䭡9Sl(A0dˮz9g!:mqa.f)@-SXh.&{tfjl.=}=c*:rI9Wo +|wT63/K|zqFl'0_Ѷզcdl|/6h*J֦;d:7>EeG|fi?-6xUl:,k 9FmO`fCdgAav6ZLJHzG~5~,~#U5e#3AiYWHݡqL>pC쾰} ZKO:PHtG ?QrLmm0ڎ-:}m" :88(QTn }#i۹iR# (jHeyatDny1l[Ow؋b_tY=ߺ;xqo`yqdp46FM 3˃aN y 6I_H8''-eZQ޼>y,lgb׸Y->k$v\]s圜i-˵5 +-^nGdc#L3LmBALB&2 .AN3ݧe!CTC#1Ve%VcɆc's[&}-bl!4H2 1h|i%PHJی-*~.mYzVl4v87f J:2WoQ%ˍSk<AoYQG~œ ɭ.~ Sa4|u;#b߿=qXRaHnQM$XW'Βv%gZZ|IJ"khH;(KB5#M ~o)YO]: (?M$Lh2婼d6U?*Gဝȸ1JO4\eIa}Ŭ;bXHM?l|Lv0lO嵎k`#:=uH^$~Y%6آVFWg"iAswlg(JsEF9khV> χ^ $T+!^ܝ N f_Vuh:}ȊOV.N7ɹN7yɻ/\vP= {0\ im6[#>X~sଌ{m3o9e*IG=#o x,w7_LN [)˲4c`WG[?"jbJ5GpGŝFG&^NB& +ݡlQƚ?cwGo9`W1u{t_k ݚ5vS+KosyB9閙tDlJů,1*A;eX|;Qd8NX\ CF` +SL`tMV)[0Ba7文c,UEţ6lru3 ,s[6؆Z ئco!Tt+ֲCd 2%"}M(>NL"53ųe* +dh*ZvOݦD#&#L{u`g=j^k/ +0ee'&J +&xjc;s$zwOoxrު^C!9fE +|;Y#qhs/FET5B$je8w5kyGM8yx]ZVǤTo'n +2='p--hAW7t8 +Gҳ*)K8u-GMWpثhq!K0S3iz]Z/ 1S(\l{tbCRc4;T/[8enIFg'tt0DR0gC{s7Wǎ b4;5c(SPa51iEٕi\kQm":'*ľ>3}B]K_hyr %*OTmT;ud6 aĈ,{tF)IԤ)#L&v>&yYËݢYc3Af|GdFk#nmiL֏Jq‡X>a >ތyK1ea!ectĺp\|aLV4B9sՕ@{3O]¨[Sl)o~gEiL15|zF`l_Szc8wt1a?R֙Yȇ +l\_.hhs8A?%LT 8Y*|n ?kxx!LN*qkSJߊ2\XmI)I\3YD[nj-2Qf֤RVݿ60[7ɧ+7{`hC"k1Js| 65L^i*QGtɲc+5gS{Gц/f/x 8(+B?Z\2|rPx]ږ+.C_oۑtԫ:~:j/l"Kpgu_28/Ə2#)p!ji~4$qC?1fI[L̯ +NVi7v_}>}!&m:[iZah;xHj~j4i“Gzz Օg к^VTM ߲ڶi%eo$ly; '>$NwΑį>@_.n>{[x:XqSZM-VEn4Zr"?/66@\} 43kBS|`ch`zX)fH%< WQ'4:Dy7Ih*Ӥ=NUeh!VӖg@ĭ[|X\,C30i2a~HǢ]P6&&h 4N*"LψV$+9ˎ}OsSisҩcJI^ +\Gp/xt{" >_{,6f0EF"+dWT*JyM~;!5I2}4SYxŊO^ÀoF͸]^6MtOܚvo5wELt$W9Y*Nu*!+:N ;xbW@ ]DZk2T~~w=Y{ߝLbUܲ+2\w;#0`I}QxŽ,X*b?4 kCtBRVnk+]+пMl39"Id\穙rWI[|k`:SgFjOm"(ŗA|g +J +͊xb?N'ZpKƜ+1D\|mQ^l7YBS*:Cl%$Wp`ƹl)B24bFvWed# gjXn6.*=myY憆qG;mvL #],M Q,8:IyLl)h͕3,\HkX5[y YU V'DY+3UP:gQYC֠Ӻ!eI,_?]{t:allLpC:EfN/2]Ax@=d>a9V/ZVp .bb<sY%}t£ˎB{7ׯem!~5n_ w'$\GŜ0ky;X%WlOJr<>b.KxjG6(g`y^Gw{ϳj!+xzp JJ +)" + \>%L-btm9x6/:Ä> fəD=Of~P6\冨m:tXeYu)j/I_ygs.f5z.01m"{_xui0 b:BA޹(]e(=S]1MTf )K8z)sI? +C)KGon',e> i|<Ɵ!T2COarDnd1w SZrLз4$'am:LHµz >MqEz%~}Ǯ!|Y^= ё?x]\ 'f ECz98tPXń:ZA:b V*HMyIlwpyoOFr +E*XCӒRFF'Th#Ey}(גr ΔO]F{PpΚaQBLЫXT.m[PGWW2_;Ki hN6xKu Vƅ%Ds.pNag>?\ p\ + AipC^R yK)a X-m, 䥒,9Dyۼ"rOymYs[ه"O? +i'`+5W.^Zkc^hK5_ӫGR +^vHs9[$K6t +5VA ?QXsB`q]k|[c\TSZCM^d0o/'K)[G{4G6:ER"[FD.UIEs3s|G\^Y\1W LQ>"ĚSQv֮ɭl} |jGP"?u>*mGOgFBVtj_ؕ3U&w֭gnٹ7WCNz]d4R +JA4`#HG4GF/8 K!7%#]rn%\?y:Q5 ET +lBBw]b</FF%`gT,Цf;d8#N ++u$҈|'<5}њa73f +^ŜJWT i3}ck?CS{3et\W^kh o$0H.o[?p!wOXHL>4+2#:?Ỹ1p4oC/sGkCG9ΐC)NC IwrRRzK▣>8y;#q6|ϠKk?O[xs%$}ʢbL?hKcMgDFrcbHE|y4ibFח9֜͆pm`7+sPE*"\mWw)OHKԦ`q°ڲrOU3Feh}gR5o)eH{\ + Yf=.x)7D˪T46ec'ǭ>ms+?y7L#qs@U3E 0ZARs.e]_#. 6o~uM2M+Pzf:MWL馧ev fõāadL7yg=}܁`W UT-馲 YHe%4BeMϑ߸z"Z/S(??><̇# q!Tݲh+P(FW`/V-:ĒtGpWO}a8r,Sw1A>"'q%\=sŦo"s%^!}6S8)n1IvSƨlaŮ7V6X +Zai4v)@y,ﳖ6yp`#=BTOigd\&2 T3P،5D\HN b_hUy t5}{kx*ʅ6CSkSd]e$NmO4J_}|![bg +L=$aOaѓ P6;ă̠4S^# Пc<"WF$ s=0p /AGݼRSMLQeޫf]٭vK#=7&C`moZ`L˷ڥoj6_Fᑷgl [\Ma^J: GIvh(MqɋCbsO+#|>a]jHSi't;1DY_"R"6cwɗtElcE*w,d + _pX\\#u*xc?ީh>B6Ui"SN2]>m%+ hOl )8Ï]]sIVi[u9ί/=_SX@<}}Wcxp=wynz%$]4LAKa6wfw1lj4g{oš@C|tl"3i0Ha&J9}}y:Dkla6UC~q ~6/P\F(p̟\چx ]ba]ar傽gOf7[/]OsNS]1YqJso_<+OMʜnշ[jӕeer~}K&[pda#Gn Ki" +}BfA6F\IC)SC1h>:%,ľR_xX5f9k~n~an=[ # +0ĥ=Zbǵ]B^_+vݾfwHxtDxjc/E/0QDP\jP9V1gM Yͳj}¢e+םr[21s-͂7g镅*V85ֳ-ՏYﮡ``rkTiۈS_\)kw(A5 ٌe<.a áLV + z\5WO~QӧO5Z.:hydhT_;%3Hm FkY٦S"]>~%,Ossw1pVsKMs~Γpx2JUp9a9m`c@s:U*UӔw$S64|y1`8CzfY[pE~I&J +[fJ_[rb>U9 V$? 6s= LF+~Rsm3[OѪ׳olPOWDt8''Mts?޴L(9UaepSx>. >Xݒs\7L~bR&rrc]>,`J bQaq$mhqz;Ve*EmeֻRc -SDf ͵[Q)]pxw-a[ xq/pdjw3{g~g+Ό?5󜥽$IFa;(:\T(߶mMte9֊.8ЉTR3c2XTa$PyLlH"o@9.2?Պu?yt= 7ՇΜ:]rz&(CM;jv^g𽺭h\u=${,: ߳cǮu3C3Y\HV˘܌x2Y-</px3} ,wrl㖭N/53lŋ2d.\=jOO)W⛶aiz(+@і${[7#5F r'\J8P]!KD}bU$No8okzyۚ` fqGG)jS:hze80 EVgݫ!+6VVPZra-G1=ڑ!ĩEyb|"~[֬\Wxv)[kOԩjgo \-k`pi򩾼045U+^6n񕖲xMJvyc,㓙hzb\h\x"8v]2ԯMo$VINdL5jhsZnnZ~h oFI%8s)ay?[Sk'f.Xce/uP_y<Xp' g"bCF>kN̙˜ésTgALIRMm] ^a+\VdUmUEi"cw(. +"; +Ĝp֦3αM*0-0؞ .c0?  ~㠟!<]--Tui]}g^VI8̢ͫ׻`5!ǁIYKoG$&~@\s_uLPI%7_1%J\7;#o'64lFFluBR?g!^KQ-n=@ ^G\q;L/t4G0,,p u]kxO] H,&seQG}bq3%jRg|ĶMnu(dǔEm ^8_\BbUa!qQݠ?q=1xnOl./O˔e* &u(ϿԲ[S?x0O!ZkwP܆KgiYzȉײ\}#4]~b=v4|Q)mXfŲUaG"İbozs*\+^^=7o\fOh H[PsJ#r8?ˤReï# }7@?Pҥ:؆\`yg/a+]~n8;"4O"p 5KG[J5KϓJXgΆ[ecY˖C|DlʫcopYa@W VҜ4GNR3%9JG{?E1>6=Dw4ABx镥'iqN)N.L.`:$i,uYdtX<3Ҏ9X6zZÐUT`Hsz4zQy%8bD+ݠ?'Bfg0kyn^0JZt.=Ђ\-SRT ˓89vLKBY"X/^%l1J$!V#@r"q߲K KL0ryT! u© , !Q<4Qؗ9:I$H\ +c0wݙ;aW&lb0A8~6:*hJo:dTVPٟ9/-uCD]tg8p أddTevQ^#a``8Yom{YmA>gO-CKk5gKܹ7F׶JSJXTbӟ{Ty^b?vp4#:?:3\OI6@x@*g +3T`uAs(uo#l0BHwN)5Cy fCq.@ΉH1z],nx fj*@.2p( QV 뚪Y(IqYj`pVgv9xMm))1O& +frɲͯj T=Wa`K+aq;td+^{γmzrݍu0߱`ua͛*n-`$N6ti9/޸Su"F/A#)X,0e%0'GueF( "ke'ҫb2ǣ`RRYu'c^9P̪lu*hH j ^{ڻajU{(_{*ce9->itG"e s'Y$λ+5_Z^u6f+\t-[Qp:PLCgoɍӤu&X^(eVRscټofUG٭{ztC9[wrYGxG&GIWjX[xdOxӳ +gWnzسEz&Qo:{O#Xa .^)a t V3K`"f**όɗ[; ATnQP[hhkddUO;qJyy^2ϽA8ꊴ,E$JPs+ jYCn_{BsgoD4 D#sV#ѳ;b4jIf;<`|]6dɞ4߸{)D%;ίx$ F&Q\|pydwRS~g!o!,ֽ|6 sCAz$橰=jM&um07Ա7HL{4}VC,i@!iƁd#SS~YBDGx aT4^*=IDʪtBLq<LJȉa 1^f^E0YMufj/ RtQqqqAG#]& >f`ZL}جTk_8r Lcm F0lO2v&/:eiXNv› u޸5XWFJpXՍF/,Z*SWY7DCZ:x +] *}gWꜗӦgs,R0PѰFb +{܍h)PN7ð멭&}M{bJSZIy Yw$D)q/+4JMx67~~*6S6qm.YhQ 8:ݘl4k SO >4 g8hoݑC,pB|hƜ'$F[>SY|TBZoiq4YoMS;bլo\EuuC%&~u[>xɪ={2Qc,J^)$n!kv3gqʴ0gLD|) Fx"=Tľ*/ٛX=|un28.Rv܅˧Oo=Js9ys^)(HRRʂmZ3Ǜ5tQ˙Wb: \Iem@jwK{wq]/xEl햳k_Op-{:Xv!sWXWX8 +~p2hsU!sJF; E"Dzd> +/9-~xx xBu_.5RuIQ)%U+2˯?H xV7WMt6]]}o$0A#硌UhB0븿񆚴 m?h7XG 鋔lyFK?o hӴ~yElWz< TwBwKk:=+ -Xʧrj`bkQ0,F, vŏ5C֕8]^{2&bm5է2XAVPgqxp34hc&zDŽ4 pD.C'è d +I$gScݣCR0:)M+K$\]6^f5IJM +p*TsUKϳ :oSDWF8 ̿ͷvIG:]"Yw SƍVjvBG8#L-vX#Wu0ǑѤ|ATFS3ZZ`󤨧Z\ n0jpB.>]z\QT$d,Fӵ5uU,L3ۀ<7S{ֻYnWsuωwEG\Qˁ Rǿ&@E8V-FL  8h8 )nXon[qeN 7ѣ?YZI 8w`2{/ó.lͻYS+n{3ߏ)Քo~X92!R9@״ `Cz6v-q#ZCa ?BGhD T__ )IUhXИxYSɳ +`ˉqm0/K lnOxN0*V<_FpBέK:z  +f5 *R%9k⊽p}b*BNAE*2+"-Jnk- up{^FnW#,QC_9s|8]ь<%ذ{M|4Y3xGYqmǶ߲EE jqV!2ɲ'\1&çhgLTrRQ${4'V%eJEf}^orz5|Ldcrmsku'KsHKЙ|Gr21>zBv|QtPҥb8916)akMaaL?$;P>OV.L' +,^=aMgtml_VbJS-kd䉳ka[Zd5qlϣ+{^x_1A?a^N5Žm>zJq$Ncã':!fx C7[7>;Ŝ X=>!BՍ$H eQr>>xy>PYy{>̔F0%4CBQrnhr+kO[ +.g\drfp E3~჋x|jF;>hK7|Դkc'y`ԛA ۀ3wFae%C0:LSWZR+'"tǁ7y,Pb",)I#zy^o`vM?3X̹ c~ c)3k[NQ #kK G_MgtEgN"?a:ZSk^M?ܣ~h =퓅=`4y _{З_8 9-Y-.dytu(WڞѼظAҳ <1k;ˏQg*5R~^`@?^KeJ)sqY;͠!\(Z~rLB% J*JeNqEw+oj~AKݼ_E@ y fxNv[ WvǵWz^[m$ 8rŷ7v8~9;0q!*d -ȓ8m8 KL;~t2{4#ljG*/l5hctc'sE$oaW ]GF2WV-\3 GJRR,2({S^NdUIǎS[/Q tf*˂+ -1]20tS<:sY,muK@l?F'Kum_QհV|_,SImz`WI`L*CmN-HkCtzE`j4~8/7o.N\gԙYSVN +֣$6*G1?^\l(>UBA\}qЁiFω hWjY!;3Sh|.!`9!6b$\c_ǐ 88*l)C׈#Y:o1X2|.-v;yY LѨY;<s1 =%Ƅƞ+_NR#/]5z4ݰ_~,N7`/h,tN+,w]y#pj=g|ޫ% +mRW}S*Gg]+:(CGdƁ[9Ĭ)4p%6ծ0~' b|vodw"ι^%/Klq}Qǿ`9X~$HFjo1 IrMQAd0&OS%4Q&f hu5na7q iȗ)Y.~1^I?jtuWl;<3CL0;`F',q= DVmqj&#5Û΃ӭ/;_t0݂M}%";e =eա7$];ZW]e))_j[T" j,G#Sr6J7uWZߵ޳5;$ۮP\9 A䐒%uq"ԙ8L@M2e W +(x|֤y7l:S}Ɗ ]:P r{]wݣR_MQWK`a"]f$EeuI5sCq/Ex10v-^V3D {Uܞ7$6SxITTؗ!q>s6ԒDL+>u%x79o0곭0S]FuwYG'4 cS̛k*HntgZ;/hxqcCkbEְ}0l %Yp.&j9sL_g6ǽ NO SOHOa931OǐڲsU$ZHZtWDq?؅ +-):^# LdZ6^{,Zl1ƾi̺#Ji甌(K%=>Bږ;RM+uYjeFܧ6-x-N/PRAe8ojOT}Y6j~h>k7t?L.0Wmso-~7]~k]3Fs"OֶvK*?P8z}>6+3J}[IiLd'y~0;`W*\ޒw-T6D{EHpp8]c)2Hamk3 \p9ù:yM3,QW. Y: 憹Fؙ NO8KIɚVo r?߇hhC:xc2WLUU^|Ȭ&A {W(l~ҰBS.˕-kj45;US*۠ULG!-8i5mnf[. k`\eoS%,^Mih~v̡Խ9XF~R*DObMJ*,Εu.7pFMύh밑WQ1櫤@soȉ:F6r25sV8^D5k06bX3Ep[u:ۯ-`?DoM5UD8JOb!|𩭪`WA*Xn@i$iƝObOke.;}Z/[ڼt$w}LS` '{mG p: H~2Lkry k; 4]]'8Tc[  ڋK=< qw]v)xHs$Xw0cŴ$ W35O̎`jI_gvc0WWn1܄7a-ŵ*P} GOX;W͔SCs9W5ՉѸv")Ϫ6h$p| (8I;L-4q!%8:\)~%F[6'`rښb80ۛ?~$Y԰:t0t&6=l >Yc_# :z`Pk l}$7||E%wwY·ÁAzW}6#"$|?>XCזJ7( +]Npk}WQζ?D#H)m-;VV&ߜL冋DXy4Rltf +3k.=B&6R2SUQiQ^8&:޷Έ+̔0\iuQbBU"OuS/|PL7WIێn_K-TMr9W}]S"W10|%xiYTꞑ~KWh؂+6똵L0<t]`2]l)V4~$HFē?SoXo~;UM3ƔS3>l&( rha4Vo4X0sw ]:\;,'kB ccoF<7K8OCZ` IWT!F,1CxģVQP2WCW.[ejvP:9ayj)Mfkģ1ۑ[3^#޲J1 aQzu>w6qCܓ $N/c}b6IJ%!  +:PbdB"/KH;~K 8y&BQ&1&oCY]eE~V̒([oP!A!`1nmdNJu;猙9Aq IXu&9jEmNۚ›+￞"W-p:|j5%:Ym$az KU?(HwǗ^WH ѹcF +AWTyA.U<oQV +taz<>-#}u`,E a}>$8<\ڪ0_|{',?h*FkXgĿ!?E)q/w&YܻhQcRŤJEZ}TtQ |Ѧ0oXyބPIj\jzګ7TXAXzBn0Dp[NwDRӊ1 +J2)+o:pf?U0ыaPmja6N}R~}R״+ƿJ1α4(s0 +endstream +endobj +180 0 obj +<> +stream +x]iq_ȒE8Vo}8c٢eىԊ䈤,b9~{9i Р|`LuuuoU^-ٓۻݓ/~˯?zݧwWO|'ݗ/_,ޟg8W3Hgmfϯnav v`'=Ž f7\=<~D7?`}QGSm}tilbV?7YXwSnM<7>sAuսRrsCZO$po} d{e,A1ZH GgD)" @tԞ9泞{P}AC:sDs͙BmsA`̑Qdzc?Z9hxy-޷o/P3=wl_k445n28cyJ=+U3h\LD4=wwU6P@9Hc D3YP(gfg0#efK ۙvV!f0jL;g0r{;^A0Xj`齳>q[^S4ŽgѨzy|eg=̿F {SLk+zVe$卐bhm>=(09PH=!B)N{ޓ^ɗ7Z >dqVB;4/Gp+PW7OzwvKXDbwbT֚M'8aBPʜfl"B X̰!a6(HQpE.k9 PD^!& +)&-N4d1d +alD7\"Q)8{GbgKND-gEl>(cC[!2*MN 2+gtu^^w?H\P{OG^v?Z)ɻLB41I, g\HcGB*s'I1hE9G2NO_}Rʰc ;>,ƙc須FdrA?<ӷ$+ g_@b*|?1vc("uiQ"va<@zG#I%"&'-9D@œҾxN_I?iݷ@%wѥF% Ċ]f$R^c/&{~\*$!҅d_71nN^IHG&e:Fu%#\噃4{C='RA׳Sׇ~p?Hnp>8xR4ki6l+aٿq?tDޕ9ߓat%4Ha#a:.z :T2lTE`7s>#t~_u8CO D䊦1ԒH5_!{i>K4&Ϳ0u.\7X_8'aQLVy.(űbf=O}DOfNܯ=#@|zu'T(dF@i >.5Cxjޜ%XV  ѝ:}h?oʛ8*Q&`UcQ>OĿ3pw\8Y9F(tRtuX$GP T>q(#*ٓfsi -_J'i#_I\8__Z?Kk&j ܿ;iSH4r[^H4,zW<-Hȉ y4=yH,7롻!f + _h A);BЯ)I0x_Y)NҪm QalO.(5Bv#o'H)xsW52@ +3.@h9C**1.u }1԰'n@J"ph&$_ .g} +FKPMDL:ї=3]H1:a(b @h 6a v2,`)byKXjXJ%-R I_ X.G!g|"a/G`ȦgHBr!@SUE&kfL^i?90w!E N+#2mH qklR +h-&aI Z+f&a (BxlVF¡1d,/JXX[e14Z\ZBK9i;B/7+T+X |NT T`4ΕyeB(Gc!@ڍ#P( ^>ZwvRkĐ&Tl e^b*[;@eaV`Va#) eJazl:u,AS$K +`ȬL3tIfM/ +_">նB< OW1*UAyі ᒋt+#`kXq.{(5 J$5Z@5PI*b]`yu\vkI X$T/:7XʖΔX( F6FSufG^oy,8:&w2.n0K؁ gî4Bu^Iެ6&i8Ŷ8P?rYjj36[޾q zL!U48>\;TF +D< +ȵVle5ޙnjʢy5}Ga:l+ʚ +9B%Ip~6$4ӔIN+C> Hqc4Ѹ @h¨1I9d6j#'*Yt`WN< !`+u>?<}XWa:QJ2tǻH2(CJʘ*;SXɲYQ7hc, +a)JCrչ5Y%BXۦ-`] ^Thv#'QlGmJiQ{s&8]r帱TXq% %j;g,OY +I!oP,RQ)pvM+&vbŨQE#HVGk}aM.wKG-tj`rNEJ k_~GhfFV +Mb0TIq g/&(o!hjp eG{A"(N]IbMF19p mU/yD*hd,\oZ2?t?3rj6(D:s݉Z3)E)HaTLs 3;9C̉ggll-v`ɪ#&˵xq~4A9Q|@j)?Xլ v^UR;_^kW=[LV9X;`A>kNGT|%NFڊW8uJ$u`X% SDMXN"mvݶFXrjWDǏ]Wz6st*.0Q;micN؇b`b(]X媭0ezW(HDɤJL:o17p$i% ɝ_X, x+K@IZ=a[]|'ͤIְ/^3$i*M@:"oHy"d .#T9P46EVyF +r%ԁ,]T5)J!*kM—HeV(4yV vN9]>*tpXM tco-lD5B"W6$ș+msS6I::Yvfv 8 Of + . Ey9ȇ;p"u.2zj3-;%-5Pf % +v4- 3]^JYeF} .kiU\{$˶tMEҀd*8#8@A/R\%IrM :C*hR2 0N +X6hBhIl-du$EIe}3 "2e`] ?)FB!RAWT0&sEc*)?cg9jS[3z|>oQmu#M919'm_$q|fs,G'aY74$=8p O`uaY}BBmM o%=C){c۟6Q0 +YӤ{%~( l +Ğ +r΀)ZLl i0CJ6hi HK-*󢐨m֡.($*^1L E}`DU%֕PR5%FTuwR*ι 4-gBcֲy4m]JUn*QѤS@ĩP3ր2(y ),F JD6d +o* #>lHP:N"H lKpA>&%ċ1EXi.s_ZWFZD69.4LC,{eg91BohT4DbDD +vv4Xp۬un8UcZsl%nߴ^ݽ|˗wS;%,6VȿnܖHAOF +endstream +endobj +181 0 obj +<> +stream +x]$qb,my~taY6I4,E` e=ݹ}5TTdf_yzuݓݓ~o>O}-~ݗ_?bl6pWtEWAI4.\(J6OɷW'oxW*\>._ާD)wW鮺j>]?O}_LF{.%[{Kwo-z޾)LttpqAR =MEj,eFbNs?m`X\;QӉ n JhHI WX8oD'dLVq^ah01}OqZVqIw Dj1b:?.}\Lz} pÂ`!̡EQ)0 ÏA]Oww}v#Z2xoj谛CxАN} g_%aIqn"C9XD# oc~ ՓD '4;ym=e!ZuG*SGԙv.h&-nCi^kbm!:"ab 1 ot$"G D1|N[!eh9Lxy TGQ֚j{ I=WI -x/cWss~}|^յU:^k4DF,-Jˇ͆ح$&bW P 9F\N6͟"k"5&E*q>Tߢ"c%%!-#⠉I,Ϥ ne^ei6nOIwNRaA=\[uZ53sCLkfav,o8վ?3[~!19'a\Bd{Cri7lCdDvCv ; { } ]b*jRV]0d!@L{i&PjJ[–1CY9 1Rb#AF!7C`Fy [[3c;b8ȡ1(ҦWLKΘ*r[X%ZKݚ!wmwZl:=+%!G/bnK :>*<`;"1KI[/[3P;%98ƙ +wV(+X]+Jq)HzblJH8^mYrUmibD[&%bYўb4Py/Į!`P'%wbQ$f3of1~hfqig O0D _`xٹXƓ7Ɏxffh8:(%>.Hؗ9=&-п;$l0PLg4b|'nJ Y*ySgT*hrqCZM2ӬQi3C&oski"eR,/!^1Q{(o+MDUч> #)E뢵oka}itΜK__6P+r=av$|U$63ЃΨX *2v058&<Rˋ[E^L|. yT,%"eE*2IQ5/m{xe5'(o`zD "DX9/~hY1MX۝yC-. aL] 2ȬڐEUr v<>AԂUiS ,1X7ZLmPCu+!^M'VuvVgM@QiȶKↈE'aF&2^dEȆ~ 2čNz +}գ=PE2J1mhۊ7%OƐ֤ z"B*hv/ 8B81g9uqyqc66-/nf{Q0m\*ƄAT0 >ΔP7cRJ#viuY#،/PCM]] xKJ,*&ٱl1dZɸfP Z ++'me@!5˨E.")e;}\F6QNWz Hq&jk^LbqYZ@ i[ Ijȯ]<[d풓PEo D)#UI:,N 0 6qzd %ʈkCDkLZ͊F1%RiY'kDZ`B x퉠̐|~Jk\zE4%f=~|!^cy8nwMq̢Yo +l.aSS PWjnLkN.fa7:uj+Fe8&o2016F7S0tkrC??ל%j;eWSI3֩d?pTI}y&If"=cN{?͡j۪u3Rv5l3W]bTa,S#ޗJ>!!8X 6k>æxLZcݤ/c=(Dq/ `]hc8+6+ēgg}C:n/6!޵q*Eerֺ&-bCm!NKݦQSvIeV)9K6QCY7"i!JLjh¢b;͚xJ:dT1_AZ41(; D|Npdq cZ'm5ߴem=A؜ۥM GWi|na;фj$r+Ykaʈn"05%R8-5VoMRD *xZ,qNSoÀ 'B{ \u-8?RP:#~(鋘= q^ ~/30cTr}E'3%J,( `zit@4#c&SC' 1)8:8]Е͓lT&UTqAb-~GHibzn{8Dv,+-*2wQ1ׯ\9E !kD,WGMljrVl bM<Ȫw~dH}QQ}~K iB19,ٜk&=?͙&2)ͣZYɡchSxS)2C,*i6O܈. ^e|-&O+&ZAd"آ! \`!kfr)q^c#sQn5>Ī[=uA־vuc+LSZYl>~?[<)-0NjH-H. +2Z,Ra)GkV *:0Ϥ%[VLD1ZN@| /(*+chQẍ݆́0|6Q0u Եء3ae<{SǻMڤ1ò/)3,Vd%y}+RiՌ +_e؅A.'sQV]<#U3-, ]XBg:TGVbE!Ki &!C(J1ٳf +dFYEfTNrAGt7ap%tү󠈪au&fC%ges L4pBO{ԤHI2LF&Q9m}8, ,d Ȁ K19;(N_0>ks9o9__&/`H+ +L`T&Q}e҈0 K0݅ +?2vXyj>i1V$6="O7z>CGպP\ElAQggjG8{2 +)ǒ  84$Ѓ0,HiA?cI{QbH wXhאS<~KO9 ?պY~hlNxs}'srqzs Ч ~Ж1&ƼLEި5E#ϵ`s$E!x}7Td dyOgԹ.r +QegEڮ`=NXP$N+2'?h- ]&qEn) C +!8%\Qu`0[ǗKr͂>/03- *):P1@3}S (7a34/񥤿rҭf'${rcB +:QsX[^ S܃Lho4V=y0(ڮeR27 V!+PmI8svÄ* .&cN'%rdbbk8s M5ə9v'ujTP.vsP:'7aQZ)g"wsL +WPX}]-fk-+|NePh?D5+u6LYyW;,lKNE^" I9j3&rkC֐c)A`UeW9䧱 Jg~(DÈB̓ubZYwANE(B`leDL q^Nodgi5'AKp98<}nw-nL> +stream +x]k#qpb[ wN}"b Hbzhwi?~}pnw9%5wa棫֭Mo^?t{7~ß|/~߽~jݼ,,MF iMۛ{,_^X}w{3} |ã0$X.lsnoo>b`B,v>Br  6+9*e!:G- @4v?5 -`w@cV_}:Awo~V~ &"'ގ +˻&c}raK~~r_ZXa$p$'<O=P2<Ɇ(bD mb4i3|e41n{ u@ZVNM_D`Õ]9/kpGY[`+@,@tuTug?@r+|<YfSN;%)eA +K > eY7~W%Cw k2oy9x[ڰ +5?YJ*O~T[e9!ɉ?B度k ZЫt;Al+A=&*Y렪C_~-M}QEȆw`  ZnJZ'`'ӓvI{P &_s4j􆴨5٢RmȩrMJ7;Ro2+ˍ+]Â[`/ݩQt+:mxy+!''X*Yi#p ]r|+$!CBj}p᫋{j%ESӭ<"ɩIҐM {D$Z!-{JNmQP\bq{q,:FE?FnUw}5QCm +%K©AB^&"PvPZ>RwHutQ, (uv[gJ q]q>E>yd3*I +BJH56ymOM( rvPw9h${/=W Jg"!a0wEsP,au)t,v}Bf%YXì3˗ދ2VB#< `ԐY `l ̢ۇ',sjlJHL(F(htJ@d;HRaYnM&  +z>ߓJvSzl!cOrS1-D9Ⱥ q@.t EKPG'uaʍ^$opT(_j‚ĬJ̕,`r@L= o_]`GggX/\ Flq7  ĤMNlM`-l4af o.=y:gq8^@ ޼ZD\nӷx:7ūm{ꃅ%?}䜞1QtI9t7x́Vt=MHTG$=֝[{)Xw#RG}ej0?"eYW}tRX[!Jv!Ӛ?G` )iAn+!t.)UtJ?ZBI:OHl&K SA!L]ϕ]!&Ze`Ey~cVY 0ѭngd\)hC= {Yz|}r +l )6PHv,|cSqjlL"7P!V! ¬eu XKJx`XBwޝwWyw&ln)}_ +HTFlXPYY]XomƱȐ^0hQ4 +,U2J+l[g;!ඩr<1y\ݒn>|q D5HLϦȀk?bi%WʴI\b̌Mbu4xؐʒρs ǝƠpskB6ZؐajĪL] Ѓ Tz{!͕ o$fY$X [ޅ/eƢ4V]]*fz([X s5odTP-jxv(R*"ŋ^m9.<n 6bjL˷C37Eǒ^KIRKWfYћpI^o?M*93]Lk@a}hj hb'ס3pW3pIFumT(}!C@;āa,Ufy`22&101cLSv6}#JڝT)ti'3-YfdVZv!2`7dmK2> MWf_6V&HgmIjq3y(P,Y Cp\Fܐ5AMC!HAV7kU Sƍgt8`dmK, ]\}6gJ+^w}>e][d@(.F0[%W&̎gvߞzp\&МL ~2‹U?o|ˎ )R \QS0">+3H&^uu#.w5gApGu͌MFYBZ[G3uAYcH> =y?wl/TD K7Y2t{Ȯ S$6.42k)4̑V4ėH 9!12z>AgUW23dv:t=-2"E㌗d)=/4@H*p C?n}L +n7R֝ 3)r^B Uv@b{f1b2{"^lu$L[O]<,ƪ$&䝱5w=΋Mr@6}bR"8P;50x2;*X%TVHQ+n)%#`˜0YfwD)k0$l?S63c\dr2䄸ѱH@I,= ކvUu5-Fڟ;kfGD+'GɍgxXd[j XW0ffhU1NsdLP\!0kDcf,w]3 \FXhx{g~m!4Ibn Jas-]5(h;OdafY@hjZ^Q4K_[~~H5qʻ5u00=6wCdƹQ XJ/kL\v1ILqi}0`{Ү]RfFXBFhs+#CJVz^lY:f/S`kVX_~ո@ĬlP@Eя9n\bpjMN[If@p5)hGISq +`k᰿-T؀1)wP2-ШYha%zžHR cŎe=ñ5BԸʦimU*HZpFl -U6!֬4fhduֺP䇿!1-S1GŘeWJkqvp)ilΚ|1.^RLV_3 xOf|`'M*$I'QˡS:ԥIcUHgwm$:D,:rMljXJu%b9j|Jy[]aY^baL5)Ak49K-!MJgqZ +/+?<;+~\QS2plhE>kSF䱳Gkl +endstream +endobj +183 0 obj +<> +stream +xWn7+xj}3C@*$E\$Ћblɵ7ү/v֑%NAl^vy,gˏty>|P~}|ȧ٧ŬY.zc&ZNĖՉ7|34UY|L !Q3 R 5/P۲_5}i7MnnrO茦wm$ !nf Rs'^`]Gģ"oɩ̛rK,>ؐ831P +U\q00Fo [W 37%b40FbQUæ&V1611xrq3'\|5vCkD4^{mMb#wMEFi[u-TcI0v@AXQ0޳mFLBDaއaP^ޕw] Cj 낢kpk Tb0ލmE.{M䀄IHԫce !C-c9!iavxDx3P0biT~͍X!֧PdߕGŇ7D6Ipz"} dƓq̤2?W6Hև,z͍з +xk! -"(A.s+uZSjf9}"QkUdhG"`۲+{<'TH~Hxw ;T홽qiH`u1 ՚WUR >H&q/SY)-KX  YmWm>_JݳVy eۼe> +stream +xuJPFOUvDD@`]\ +FMkIRB|&إnऋ(HrTų9` ըa&ʺ:l +3Ŭ*ުnh)&C|>b纝黓AvCƫ+ y') +̵8+/> +stream +x}Kq?UX 94%MQKSN#ԦQvBˡhFk ! +ՠZP~xx^ޗQx"^P c!H0 + 0l+ߣy7;׫;Q?V._tF3LEK)y z80eIPkT/%[p:8+%d"G `d_{ٹ֖gzm\8rSif1\CU` S] @o _ +endstream +endobj +186 0 obj +<> +endobj +187 0 obj +<> +stream +Typst 0.15.0zh2026-06-27T16:22:44+08:002026-06-27T16:22:44+08:004application/pdfdaKH+llYVKI9sHVoWC10Eg==daKH+llYVKI9sHVoWC10Eg==proof1.7 +endstream +endobj +188 0 obj +<>/ViewerPreferences<>/Outlines 17 0 R>> +endobj +xref +0 189 +0000000000 65535 f +0000000016 00000 n +0000000093 00000 n +0000000227 00000 n +0000000396 00000 n +0000000549 00000 n +0000000750 00000 n +0000000971 00000 n +0000001212 00000 n +0000001433 00000 n +0000001655 00000 n +0000001866 00000 n +0000002042 00000 n +0000002206 00000 n +0000002362 00000 n +0000002530 00000 n +0000002658 00000 n +0000002808 00000 n +0000002876 00000 n +0000003070 00000 n +0000004243 00000 n +0000005738 00000 n +0000007052 00000 n +0000007182 00000 n +0000007251 00000 n +0000007320 00000 n +0000007387 00000 n +0000007455 00000 n +0000007526 00000 n +0000007652 00000 n +0000007720 00000 n +0000007789 00000 n +0000007861 00000 n +0000007951 00000 n +0000008019 00000 n +0000008088 00000 n +0000008160 00000 n +0000008238 00000 n +0000008306 00000 n +0000008417 00000 n +0000008550 00000 n +0000008691 00000 n +0000008763 00000 n +0000008835 00000 n +0000008944 00000 n +0000009109 00000 n +0000009181 00000 n +0000009253 00000 n +0000009419 00000 n +0000009568 00000 n +0000009640 00000 n +0000009713 00000 n +0000009867 00000 n +0000010073 00000 n +0000010146 00000 n +0000010219 00000 n +0000010382 00000 n +0000010616 00000 n +0000010689 00000 n +0000010789 00000 n +0000010894 00000 n +0000010967 00000 n +0000011071 00000 n +0000011315 00000 n +0000011386 00000 n +0000011458 00000 n +0000011596 00000 n +0000011825 00000 n +0000011897 00000 n +0000012005 00000 n +0000012127 00000 n +0000012199 00000 n +0000012301 00000 n +0000012524 00000 n +0000012596 00000 n +0000012669 00000 n +0000012840 00000 n +0000013062 00000 n +0000013135 00000 n +0000013275 00000 n +0000013348 00000 n +0000013460 00000 n +0000013630 00000 n +0000013703 00000 n +0000013776 00000 n +0000013931 00000 n +0000014089 00000 n +0000014162 00000 n +0000014235 00000 n +0000014394 00000 n +0000014544 00000 n +0000014617 00000 n +0000014690 00000 n +0000014849 00000 n +0000015009 00000 n +0000015080 00000 n +0000015152 00000 n +0000015277 00000 n +0000015413 00000 n +0000015485 00000 n +0000015581 00000 n +0000015659 00000 n +0000015728 00000 n +0000015808 00000 n +0000015882 00000 n +0000016000 00000 n +0000016080 00000 n +0000016154 00000 n +0000016248 00000 n +0000016322 00000 n +0000016396 00000 n +0000016484 00000 n +0000016570 00000 n +0000016644 00000 n +0000016783 00000 n +0000016866 00000 n +0000016940 00000 n +0000017073 00000 n +0000017143 00000 n +0000017218 00000 n +0000017293 00000 n +0000017415 00000 n +0000017502 00000 n +0000017577 00000 n +0000017687 00000 n +0000017766 00000 n +0000017841 00000 n +0000017975 00000 n +0000018050 00000 n +0000018125 00000 n +0000018235 00000 n +0000018310 00000 n +0000018385 00000 n +0000018487 00000 n +0000018560 00000 n +0000018633 00000 n +0000018743 00000 n +0000019182 00000 n +0000019219 00000 n +0000019256 00000 n +0000019308 00000 n +0000019361 00000 n +0000019414 00000 n +0000019467 00000 n +0000019520 00000 n +0000019572 00000 n +0000019625 00000 n +0000019677 00000 n +0000019730 00000 n +0000019783 00000 n +0000019836 00000 n +0000019889 00000 n +0000019941 00000 n +0000019993 00000 n +0000020045 00000 n +0000020179 00000 n +0000020313 00000 n +0000020447 00000 n +0000020581 00000 n +0000020739 00000 n +0000021008 00000 n +0000021223 00000 n +0000021379 00000 n +0000022317 00000 n +0000022532 00000 n +0000022691 00000 n +0000024067 00000 n +0000024285 00000 n +0000024413 00000 n +0000024541 00000 n +0000024669 00000 n +0000024797 00000 n +0000024878 00000 n +0000025468 00000 n +0000030112 00000 n +0000030194 00000 n +0000031958 00000 n +0000083355 00000 n +0000083436 00000 n +0000087455 00000 n +0000235281 00000 n +0000240701 00000 n +0000247321 00000 n +0000253098 00000 n +0000254129 00000 n +0000254472 00000 n +0000254879 00000 n +0000254992 00000 n +0000256065 00000 n +trailer +<> +startxref +256252 +%%EOF \ No newline at end of file diff --git a/presentation/speech.typ b/presentation/speech.typ new file mode 100644 index 0000000..94e0a6a --- /dev/null +++ b/presentation/speech.typ @@ -0,0 +1,218 @@ +#set page( + paper: "a4", + margin: (x: 2cm, y: 2.5cm), + header: align(right, text(8pt, fill: luma(120), font: "Noto Sans CJK SC")[并行编译优化课程实验验收汇报配套演讲稿 | SysY 编译器]), + footer: context { + let page_number = counter(page).get().first() + let total_pages = counter(page).final().first() + align(center, text(9pt, fill: luma(120))[#page_number / #total_pages]) + } +) + +#set text( + font: ("Noto Serif CJK SC", "Times New Roman"), + size: 10pt, + lang: "zh" +) + +#set par( + justify: true, + leading: 0.75em, + first-line-indent: 2em +) + +#align(center)[ + #v(0.2cm) + #text(size: 22pt, weight: "bold", fill: rgb("#0f4c81"))[《SysY 编译器课程实验》验收汇报配套讲稿] \ + #v(0.1cm) + #text(size: 11pt, style: "italic", fill: rgb("#526173"))[8 分钟精简版 | 约 1800 字逐字稿 + 答辩 FAQ] + #v(0.4cm) +] + +#block( + fill: rgb("#f4f9ff"), + inset: 10pt, + radius: 6pt, + stroke: 0.5pt + rgb("#0f4c81"), +)[ + #text(weight: "bold", fill: rgb("#0f4c81"))[8 分钟汇报时间分配] \ + #set text(size: 9pt) + - *页面时间*:封面 ~10s / 概述 ~25s / 技术栈 ~15s / Lab1 ~20s / Lab2 ~50s / Lab3 ~35s / Lab4 ~50s / Lab5 ~25s / Lab6 ~30s / 近期攻坚 ~35s / 难点 ~30s / 测试 ~20s / 分工 ~15s / 总结 ~25s / 致谢 ~5s。总计约 390 秒 ≈ 6.5 分钟演讲 + 1.5 分钟缓冲。 + - *精讲原则*:每页只讲 1-2 个核心技术点,不展开细节。五个必讲亮点:编译期/运行期分离、支配树+Mem2Reg、浮点位精确、寄存器别名、LICM。 + - *语速*:中文约 260 字/分钟,本稿演讲正文约 2100 字。 +] + +#v(0.3cm) + +#show heading: it => block(below: 0.4em)[ + #set text(fill: rgb("#0f4c81"), weight: "bold") + #it.body +] + += 逐页逐字稿(8 分钟精简版) + +#block(width: 100%, breakable: true)[ + == 第 1 页:封面页(~10 秒) + *【逐字演讲稿】* 各位老师、同学们,下午好!我是程景愉。今天代表我们小组——程景愉、舒钰权、杨力嘉,汇报 SysY 编译器课程实验成果。我们实现了从 SysY 到 AArch64 汇编的完整编译器,六个实验全部完成,11 项测试通过。 \ + *【演讲技巧】* 站姿挺拔,声音洪亮。一句话自我介绍 + 一句话项目概括。 +] + +#block(width: 100%, breakable: true)[ + == 第 2 页:项目概述与实验目标(~25 秒) + *【逐字演讲稿】* 项目定位:从 SysY 源程序到 AArch64 汇编的完整编译器。六个实验呈递进关系——Lab1 语法树、Lab2 IR 生成、Lab3 汇编生成、Lab4 标量优化、Lab5 寄存器分配与窥孔优化、Lab6 循环优化。工程上实践了 Git 分支协作、CMake 构建、QEMU 模拟验证的完整流程。六个实验环环相扣,语义正确性是我们的第一原则。 \ + *【演讲技巧】* 沿 flow-box 从左到右划过,强调"递进关系"。 +] + +#block(width: 100%, breakable: true)[ + == 第 3 页:技术栈总览(~15 秒) + *【逐字演讲稿】* 快速一览技术栈。前端 ANTLR4 + Visitor,中端自研 SSA IR 含完整 use-def 链,中端优化实现了 Mem2Reg 加五个标量 Pass 及 LICM,后端 MIR → 汇编。LLVM 工具链验证 IR,AArch64 交叉编译 + QEMU 验证汇编,全程自动化。 \ + *【演讲技巧】* 快速全景扫描,15 秒带过。 +] + +#block(width: 100%, breakable: true)[ + == 第 4 页:Lab1 语法树构建 — 前端基石(~20 秒) + *【逐字演讲稿】* Lab1 由舒钰权负责。核心是扩展 ANTLR4 文法,覆盖完整 SysY——控制流、表达式、浮点、数组、函数参数。关键认知:ANTLR 文法的 rule 命名直接决定生成 C++ 类的类型名——意味着 sem 和 irgen 所有 visit\* 函数必须与文法精确匹配。文法一变,下游全部同步适配。这是前端工程"牵一发而动全身"的典型体现。 \ + *【演讲技巧】* 强调文法与下游耦合关系。快速带过,不展开细节。 +] + +#block(width: 100%, breakable: true)[ + == 第 5 页:Lab2 中间表示生成 — IR 语义全覆盖(~45 秒) + *【逐字演讲稿】* Lab2 工作量最大,由我负责。扩展了 IR 类型系统和指令集,实现了短路求值、控制流、函数调用与多维数组的 IR 翻译。 + + 讲两个最核心的难点。第一,"编译期/运行期路径混用"——原 EvalConstExpr 内部调用了需要插入点的 IRBuilder,全局初始化时直接崩溃。解决方案:彻底分离,常量路径只返回 ConstantInt/ConstantFloat,绝不碰 IRBuilder。这是编译器设计的基本原则,但初学者极易违反。 + + 第二,"数组语义混乱"——标量 alloca、聚合数组基址、数组形参指针退化被混为一谈,导致 Load/GEP 类型错误。我们做了三层严格拆分,这是 IR 生成中最重要的设计决策。 \ + *【演讲技巧】* 放慢语速讲"编译期/运行期分离",全篇最核心的设计原则。 +] + +#block(width: 100%, breakable: true)[ + == 第 6 页:Lab3 指令选择与汇编生成 — AArch64 后端(~30 秒) + *【逐字演讲稿】* Lab3 由舒钰权负责。采用高可靠栈槽模型——每个 IR Value 分配专属栈槽,100% 保证变量活跃期正确性。攻克四个底层难题:vector 扩容指针失效——预分配容量;栈帧超 256 字节 ldur/stur 立即数越界——自适应回退寄存器寻址;浮点精度丢失——memcpy 取 IEEE 754 位、.word 原样输出,全链路位精确;重写 sylib.c 补齐 I/O。 \ + *【演讲技巧】* "浮点位精确"和"大栈帧自适应寻址"最体现工程严谨性。 +] + +#block(width: 100%, breakable: true)[ + == 第 7 页:Lab4 基本标量优化 — SSA 中端核心(~45 秒) + *【逐字演讲稿】* Lab4 理论深度最高,由我负责。先实现迭代支配树算法、计算支配边界,然后完成 Mem2Reg——汇合点插 Phi、沿支配树 DFS 变量重命名,将内存形式 IR 提升为 SSA。 + + 在此基础上实现五个优化 Pass。ConstFold 做编译期计算与代数简化。ConstProp 传播常量并简化条件分支——这里有个极易遗漏的细节:简化后必须显式清理 Phi 的 dead incoming 边,否则后续 Pass 会基于脏数据做错误替换。CSE 做块内公共子表达式消除,DCE 用 Mark-and-Sweep,CFGSimplify 合并线性块。 + + Phi 降低到汇编的方案:控制流分叉块末尾生成条件拷贝,函数头部预分配槽位。同时修复了 64 位指针截断、GEP 二级指针解引用等缺陷。 \ + *【演讲技巧】* 支配树和 Phi 清理是两大亮点。讲 Phi 清理时加重语气。 +] + +#block(width: 100%, breakable: true)[ + == 第 8 页:Lab5 寄存器分配与后端优化 — 窥孔优化(~25 秒) + *【逐字演讲稿】* Lab5 由杨力嘉负责,聚焦后端窥孔优化。三类优化:消除同名寄存器自移动、冗余 Load-after-Store、寄存器尺寸动态适配。核心挑战是 AArch64 寄存器别名——Wn 和 Xn 共享物理寄存器,简单字符串比对会漏优化甚至做错。我们实现 NormalizeReg 归一化,X0-X28 映射到 W0-W28 再做冲突检测。另一个隐蔽问题:浮点 MovImm 底层翻译 adrp+ldr 时隐式占用 x8/w8,窥孔器必须感知并主动失效追踪。 \ + *【演讲技巧】* 强调 W/X 别名是后端开发者必知的核心知识点。 +] + +#block(width: 100%, breakable: true)[ + == 第 9 页:Lab6 并行与循环优化 — LICM(~25 秒) + *【逐字演讲稿】* Lab6 由我负责,实现循环不变式外提。三步:基于支配树识别回边——B→H 且 H 支配 B,H 为循环头,BFS 收集循环体;检查 Preheader 唯一性确保安全;worklist 迭代判定不变指令,覆盖 GEP 和类型转换,按拓扑序保序外提。 + + 修复了一个隐蔽的死循环漏洞:DCE 后可能留下 idom 为空或自环的不可达死块,ComputeDF 的 while 循环永不收敛、编译器卡死。定位两三小时,修复只需两行阻断代码。 \ + *【演讲技巧】* 死循环漏洞是精彩的调试故事。 +] + +#block(width: 100%, breakable: true)[ + == 第 9.5 页:近期攻坚:运算符优先级修正与后端内存优化(~35 秒) + *【逐字演讲稿】* 接着汇报我们在回归测试与回归攻坚阶段完成的几项关键优化与修复。 + + 第一,我们修正了前端 `SysY.g4` 文法中的运算符优先级和左结合性缺陷。原本文法把加减、乘除等同级运算符写在不同行,在 ANTLR4 中这会导致右结合或优先级错乱,使得 `fft0.sy` 等用例计算出脏数据。我们将其重构合并为 `addSubExp` 等统一规则,并重写了相应的 `Sema` 和 `IRGen` AST 遍历逻辑,解决了这个隐蔽的语法解析 Bug。 + + 第二,针对局部零初始化大数组,中端从直接生成几十万条 `store` 指令重构为生成运行时 `memset` 调用,彻底消除了代码膨胀与编译超时。 + + 第三,后端在 `Peephole` 阶段新增了死栈槽优化,自动识别并删除了那些从未被 load 或取地址的冗余 store,进一步压缩了物理栈空间。 \ + *【演讲技巧】* 语速放慢,条理清晰地讲出“文法结合性”、“memset大数组”和“死栈槽消除”三个近期攻坚点。 +] + +#block(width: 100%, breakable: true)[ + == 第 10 页:关键技术难点与突破(~30 秒) + *【逐字演讲稿】* 六大技术挑战总结。编译期/运行期分离——常量求值绝不碰 IRBuilder。数组语义三层拆分——标量、聚合、指针退化严格区分。浮点精度保全——从常量折叠到 .word 汇编全链路位精确。SSA 一致性——每个改变 CFG 的 Pass 必须同步维护 Phi 边。后端指针安全——预分配容量、64 位强制 X 寄存器、栈槽静态扫描。支配树鲁棒性——不可达节点和自环必须优雅阻断。这六点是优化开启后仍保持语义正确的基石。 \ + *【演讲技巧】* 快速过六个要点,手指逐一指向卡片。 +] + +#block(width: 100%, breakable: true)[ + == 第 11 页:测试验证结果(~20 秒) + *【逐字演讲稿】* 全部 11 项功能测试与 10 项性能测试在优化全开条件下通过,21 个用例输出与退出码 100% 匹配。覆盖从 simple_add 到递归图着色到 95_float 浮点综合测试。特别强调:这是在 Mem2Reg + 五个 Pass + LICM 全部开启下通过的——优化管线在提升性能的同时保证了语义正确。验证链路:SysY 源码 → IR → 优化 → AArch64 汇编 → QEMU 模拟 → 输出比对。 \ + *【演讲技巧】* 强调"优化全开"和"100% 匹配"。 +] + +#block(width: 100%, breakable: true)[ + == 第 12 页:人员分工(~15 秒) + *【逐字演讲稿】* 三人分工。我负责中端优化——Lab2 IR 生成、Lab4 支配树与全部 Pass、Lab6 LICM。舒钰权负责 Lab1 文法扩展和 Lab3 AArch64 后端,攻克了浮点位精确等底层难题。杨力嘉负责 Lab5 窥孔优化与全量测试回归,在寄存器别名感知方面做出关键贡献。通过 Git 分支 + MR + Code Review 完成协作。 \ + *【演讲技巧】* 真诚肯定组员贡献。 +] + +#block(width: 100%, breakable: true)[ + == 第 13 页:实验总结与展望(~25 秒) + *【逐字演讲稿】* 核心成果:构建了一个结构清晰、语义正确、可扩展的 SysY 编译器框架。六个实验覆盖前端到后端全环节,在支配树、SSA 构建、Phi 降低、浮点位精确、寄存器别名、LICM 等关键技术上做了深入实现。可继续方向:寄存器分配升级为图着色/线性扫描,循环优化扩展到强度削弱和展开,中端引入 GVN/PRE。通过这六个实验,我们对编译器三层次架构和 SSA 优化有了系统性理解,为今后程序语言和系统优化方向的研究打下了基础。 \ + *【演讲技巧】* 直视评委,展示热情和清晰规划。 +] + +#block(width: 100%, breakable: true)[ + == 第 14 页:致谢与 Q&A + *【逐字演讲稿】* 感谢各位老师和同学的聆听!从语法树到 AArch64 汇编,从 SSA 优化到循环不变式外提——我们构建了一个完整、正确、可扩展的 SysY 编译器。接下来是答辩与提问环节,敬请批评指正!谢谢! + + #v(0.3cm) + #block( + fill: rgb("#fff5f5"), + inset: 10pt, + radius: 6pt, + stroke: 0.5pt + rgb("#b91c1c"), + )[ + #text(weight: "bold", fill: rgb("#b91c1c"), size: 11pt)[防答辩提问防线策略 (Q&A 环节 FAQ)] \ + #set text(size: 8.5pt) + #v(0.2cm) + + #text(weight: "bold", fill: rgb("#b91c1c"), size: 9.5pt)[一、 评委老师专业提问] \ + #v(0.1cm) + + *问题一:Mem2Reg 中支配边界的作用是什么?如何计算?* \ + *应答*:支配边界确定 Phi 插入位置——块 A 中定义的变量,在 A 的支配边界中的每个块都需要 Phi 汇合不同前驱的版本。我们使用经典迭代算法:对每个块,沿其前驱的支配链向上攀登直到遇到当前块的 idom,路径上所有块加入其支配边界。 + + #v(0.1cm) + *问题二:LICM 如何处理指令间的传递依赖?* \ + *应答*:采用 worklist 迭代判定。每轮遍历循环体,操作数全部满足不变条件则标记。传递依赖通过多轮自然解出——依赖循环外定义的先被标记,依赖它的再下一轮标记。外提按拓扑序移动,保证操作数可用。 + + #v(0.1cm) + *问题三:栈槽模型冗余访存,为什么不做真正寄存器分配?* \ + *应答*:窥孔优化约消除 30-40% 冗余。但要达到高质量代码,必须依赖完整的寄存器分配器——这是展望中列出的首要后续方向。当前策略是先保证语义正确、打通全链路,再替换为更优方案。 + + #v(0.1cm) + *问题四:IR 的 use-def 如何维护?指令移动时如何保证一致性?* \ + *应答*:Value 维护 Users 列表,Use 含双向指针。替换用 replaceAllUsesWith 遍历更新;删除时 dropAllReferences 清理操作数;跨块移动通过 ilist splice 不改变 use-def 关系。每个 Pass 后验证 Use 双向指针一致。 + + #v(0.1cm) + *问题五:ConstProp 简化分支后为什么必须清理 Phi?* \ + *应答*:ConstProp 将 br i1 0 简化为无条件 br 后,被跳过块的 Phi 仍保留已删除前驱的 incoming 引用。CFGSimplify 合并时可能将残留值误作唯一值替换,导致语义错误。修复:简化时遍历死前驱后继块,显式调用 removeIncomingBlock。 + + #v(0.3cm) + #text(weight: "bold", fill: rgb("#0f4c81"), size: 9.5pt)[二、 现场同学互动提问] \ + #v(0.1cm) + + *问题六:编译器能编译什么?有什么限制?* \ + *应答*:支持标准 SysY 完整语法——整数/浮点运算、控制流、多维数组、递归函数、I/O。不支持指针运算、结构体、动态内存分配。未实现循环展开和自动向量化。能正确编译 SysY 范围内所有程序,不能编译 C 程序。 + + #v(0.1cm) + *问题七:为什么自己设计 IR 而不是用 LLVM API?* \ + *应答*:课程教学需要亲手实现才能深入理解 SSA 本质;轻量自研 IR 可自由添加定制化分析和优化,不受第三方 API 约束。 + + #v(0.1cm) + *问题八:遇到的最难 bug?* \ + *应答*:Lab6 支配树死循环——编译器在 95_float 上完全卡死,GDB attach 发现 ComputeDF 中不可达死块 idom 自环导致永不收敛。定位两三个小时,修复只需两行阻断代码。教训:静态分析必须对 CFG"脏数据"做防御性处理。 + + #v(0.1cm) + *问题九:架构上会做什么不同的选择?* \ + *应答*:一是在 Lab1/2 之间引入独立 AST 层解耦文法与下游;二是在 Lab3 就用虚拟寄存器,避免后续从栈槽模型重构。 + + #v(0.1cm) + *问题十:性能怎么样?* \ + *应答*:教学编译器追求语义正确优先。优化前因栈槽冗余不如 GCC -O0。全量优化开启后循环密集用例有明显提升。要达到 GCC 水平不现实,但已验证了优化管线的语义正确性。 + + #v(0.1cm) + *问题十一:能在真机上运行吗?* \ + *应答*:可以。汇编遵循标准 AArch64 指令集和 Linux ABI,ELF 是标准 ARM64 格式。可在树莓派、Apple Silicon Linux VM 等真机执行,无 QEMU 特有依赖。 + ] +]